From ffd93277615ec383ef09fe38299098fc0b34e29f Mon Sep 17 00:00:00 2001 From: nyxnor Date: Sat, 11 Sep 2021 08:10:37 +0200 Subject: POSIX compliant input path on any shell --- cli/README.md | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/cli/README.md b/cli/README.md index 00c175a7..a72bf348 100644 --- a/cli/README.md +++ b/cli/README.md @@ -59,28 +59,13 @@ pip install --user onionshare-cli #### Set path -When you install programs with pip and use the --user flag, it installs them into ~/.local/bin, which isn't in your path by default. To add ~/.local/bin to your path automatically for the next time you reopen the terminal or source your shell configuration file, do the following: +When you install programs with pip and use the `--user` flag, it installs them into *~/.local/bin*, which isn't in your path by default. To add *~/.local/bin* to your path automatically for the next time you reopen the terminal or source your shell configuration file, do the following: -First, discover what shell you are using: +Apply the path to your shell file: ```sh -echo $SHELL -``` - -Then apply the path to your shell file: - -bash: - -```sh -echo "PATH=\$PATH:~/.local/bin" >> ~/.bashrc -source ~/.bashrc -``` - -zsh: - -```sh -echo "PATH=\$PATH:~/.local/bin" >> ~/.zshrc -source ~/.zshrc +printf "PATH=\$PATH:~/.local/bin\n" >> ~/.${SHELL##*/}rc +source ~/.${SHELL##*/}rc ``` #### Usage -- cgit v1.2.3-54-g00ecf From 99f86815d7906efdf70338c65c1a548cde7e3c8d Mon Sep 17 00:00:00 2001 From: nyxnor Date: Mon, 20 Sep 2021 17:21:05 +0200 Subject: s/source/./ --- cli/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/README.md b/cli/README.md index a72bf348..bfc287be 100644 --- a/cli/README.md +++ b/cli/README.md @@ -65,7 +65,7 @@ Apply the path to your shell file: ```sh printf "PATH=\$PATH:~/.local/bin\n" >> ~/.${SHELL##*/}rc -source ~/.${SHELL##*/}rc +. ~/.${SHELL##*/}rc ``` #### Usage -- cgit v1.2.3-54-g00ecf From 2fd2f2939c62d1c7c63bcd824e63e783e21ddf02 Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:07:50 +0000 Subject: Use license file from gnu.org Downloaded from: https://www.gnu.org/licenses/gpl-3.0.txt and then the previous header was manually added. --- LICENSE | 8 ++++---- licenses/license-onionshare.txt | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/LICENSE b/LICENSE index ed4e5238..d6405d0e 100644 --- a/LICENSE +++ b/LICENSE @@ -6,7 +6,7 @@ Copyright (C) 2014-2021 Micah Lee, et al. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -650,7 +650,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -669,11 +669,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/licenses/license-onionshare.txt b/licenses/license-onionshare.txt index 77d05583..791c7620 100644 --- a/licenses/license-onionshare.txt +++ b/licenses/license-onionshare.txt @@ -3,7 +3,7 @@ Copyright (C) 2014-2018 Micah Lee GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -647,7 +647,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -666,11 +666,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. -- cgit v1.2.3-54-g00ecf From 252ba46d5c3ae24e7e4dff3a6824387d69c08c61 Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:18:52 +0000 Subject: Use HTTPS link instead of HTTP --- desktop/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/README.md b/desktop/README.md index 4a59fe03..a478bbef 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -39,7 +39,7 @@ These instructions include adding folders to the path in Windows. To do this, go Download Python 3.8.6, 32-bit (x86) from https://www.python.org/downloads/release/python-386/. I downloaded `python-3.8.6.exe`. When installing it, make sure to check the "Add Python 3.8 to PATH" checkbox on the first page of the installer. -Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1900.exe`. Add `C:\Program Files (x86)\7-Zip` to your path. +Download and install 7-Zip from https://7-zip.org/download.html. I downloaded `7z1900.exe`. Add `C:\Program Files (x86)\7-Zip` to your path. Install python dependencies: -- cgit v1.2.3-54-g00ecf From f827d5232d0851f832d83390f31d1bc22128113d Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:22:34 +0000 Subject: Fix shellcheck warnings --- desktop/scripts/dev.sh | 4 ++-- docs/build.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/desktop/scripts/dev.sh b/desktop/scripts/dev.sh index 6ce5e796..bf65e407 100755 --- a/desktop/scripts/dev.sh +++ b/desktop/scripts/dev.sh @@ -2,8 +2,8 @@ # Run OnionShare desktop, allowing you to use command-line arguments -SCRIPTS_DIR="$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )" -cd $SCRIPTS_DIR +SCRIPTS_DIR=$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd ) +cd "$SCRIPTS_DIR" cd ../src python -c "import onionshare; onionshare.main()" $@ \ No newline at end of file diff --git a/docs/build.sh b/docs/build.sh index 4b147426..e30d6b31 100755 --- a/docs/build.sh +++ b/docs/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -VERSION=`cat ../cli/onionshare_cli/resources/version.txt` +VERSION=$(cat ../cli/onionshare_cli/resources/version.txt) # Supported locales LOCALES="en fi pl pt_BR ru tr uk" -- cgit v1.2.3-54-g00ecf From 601e215565a6b5518fc7c7883707106eda73fb9d Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:17:55 +0000 Subject: Fix spelling --- CHANGELOG.md | 2 +- RELEASE.md | 2 +- cli/onionshare_cli/resources/static/js/chat.js | 2 +- desktop/src/onionshare/tab/mode/share_mode/__init__.py | 2 +- desktop/tests/gui_base_test.py | 2 +- docs/source/conf.py | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d65494a9..442f688f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -110,7 +110,7 @@ ## 1.3 * Major UI redesign, introducing many UX improvements -* Client-side web interfact redesigned +* Client-side web interface redesigned * New feature: Support for meek_lite pluggable transports (Amazon and Azure) - not yet ready for Windows or macOS, sorry * New feature: Support for custom obfs4 and meek_lite bridges (again, meek_lite not available on Windows/macOS yet) * New feature: Ability to cancel share before it starts diff --git a/RELEASE.md b/RELEASE.md index 948b5713..dd236aac 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -163,7 +163,7 @@ This will create `desktop/macOS/OnionShare.dmg`, signed and notarized. ## Source package -To make a source package, run `./build-source.sh $TAG`, where `$TAG` is the the name of the signed git tag, e.g. `v2.1`. +To make a source package, run `./build-source.sh $TAG`, where `$TAG` is the name of the signed git tag, e.g. `v2.1`. This will create `dist/onionshare-$VERSION.tar.gz`. diff --git a/cli/onionshare_cli/resources/static/js/chat.js b/cli/onionshare_cli/resources/static/js/chat.js index de64c094..35113df5 100644 --- a/cli/onionshare_cli/resources/static/js/chat.js +++ b/cli/onionshare_cli/resources/static/js/chat.js @@ -148,7 +148,7 @@ var getScrollDiffBefore = function () { var scrollBottomMaybe = function (scrollDiff) { // Scrolls to bottom if the user is scrolled at bottom - // if the user has scrolled upp, it wont scroll at bottom. + // if the user has scrolled up, it won't scroll at bottom. // Note: when a user themselves send a message, it will still // scroll to the bottom even if they had scrolled up before. if (scrollDiff > 0) { diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py index 5d3e3c35..614f3abb 100644 --- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py @@ -248,7 +248,7 @@ class ShareMode(Mode): def start_server_step3_custom(self): """ - Step 3 in starting the server. Remove zip progess bar, and display large filesize + Step 3 in starting the server. Remove zip progress bar, and display large filesize warning, if applicable. """ # Remove zip progress bar diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py index ea95eef7..9fbb4309 100644 --- a/desktop/tests/gui_base_test.py +++ b/desktop/tests/gui_base_test.py @@ -178,7 +178,7 @@ class GuiBaseTest(unittest.TestCase): self.assertEqual(tab.get_mode().history.isVisible(), not currently_visible) def history_indicator(self, tab, indicator_count="1"): - """Test that we can make sure the history is toggled off, do an action, and the indiciator works""" + """Test that we can make sure the history is toggled off, do an action, and the indicator works""" # Make sure history is toggled off if tab.get_mode().history.isVisible(): tab.get_mode().toggle_history.click() diff --git a/docs/source/conf.py b/docs/source/conf.py index b20e51db..a37cf491 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -16,7 +16,7 @@ languages = [ ("Русский", "ru"), # Russian # ("Español", "es"), # Spanish ("Türkçe", "tr"), # Turkish - ("Українська", "uk"), # Ukranian + ("Українська", "uk"), # Ukrainian ] versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4"] -- cgit v1.2.3-54-g00ecf From cea34725f1abf80612fe00e4e4feac0479aef52b Mon Sep 17 00:00:00 2001 From: a1346054 <36859588+a1346054@users.noreply.github.com> Date: Sun, 22 Aug 2021 20:21:09 +0000 Subject: Fix whitespace issues * make sure files contain a final newline * use consistent indentation * trim excess whitespace * trim trailing whitespace --- .circleci/config.yml | 2 +- .github/workflows/codeql-analysis.yml | 2 +- build-source.sh | 6 +++--- cli/onionshare_cli/resources/static/css/style.css | 12 ++++++------ cli/onionshare_cli/resources/static/js/chat.js | 2 +- cli/onionshare_cli/resources/templates/403.html | 2 +- cli/onionshare_cli/resources/templates/404.html | 2 +- cli/onionshare_cli/resources/templates/405.html | 2 +- cli/onionshare_cli/resources/templates/500.html | 2 +- desktop/scripts/dev.sh | 2 +- docs/README.md | 2 +- docs/source/develop.rst | 2 +- snap/snapcraft.yaml | 10 +++++----- 13 files changed, 24 insertions(+), 24 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 175595f3..7ed09749 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -30,7 +30,7 @@ jobs: command: | cd ~/repo/cli poetry run pytest -v ./tests - + test-gui: docker: - image: circleci/python:3.8-buster diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index f1d47856..2285b1fc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -47,7 +47,7 @@ jobs: # Prefix the list here with "+" to use these queries and those in the config file. # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v1 diff --git a/build-source.sh b/build-source.sh index add57583..0946683d 100755 --- a/build-source.sh +++ b/build-source.sh @@ -4,7 +4,7 @@ # Usage display_usage() { - echo "Usage: $0 [tag]" + echo "Usage: $0 [tag]" } if [ $# -lt 1 ] @@ -46,13 +46,13 @@ then echo "Tag does not verify" exit 1 fi -cat ../verify.txt |grep "using RSA key 927F419D7EC82C2F149C1BD1403C2657CD994F73" +cat ../verify.txt | grep "using RSA key 927F419D7EC82C2F149C1BD1403C2657CD994F73" if [ $? -ne 0 ] then echo "Tag signed with wrong key" exit 1 fi -cat ../verify.txt |grep "^gpg: Good signature from" +cat ../verify.txt | grep "^gpg: Good signature from" if [ $? -ne 0 ] then echo "Tag verification missing 'Good signature from'" diff --git a/cli/onionshare_cli/resources/static/css/style.css b/cli/onionshare_cli/resources/static/css/style.css index 7cec9738..79be31d0 100644 --- a/cli/onionshare_cli/resources/static/css/style.css +++ b/cli/onionshare_cli/resources/static/css/style.css @@ -320,15 +320,15 @@ div#uploads .upload .upload-status { } div#uploads .upload input.cancel { - color: #d0011b; + color: #d0011b; border: 0; background: none; box-shadow: none; border-radius: 0px; - cursor: pointer; - font-family: sans-serif; - font-size: 12px; - text-decoration: none; + cursor: pointer; + font-family: sans-serif; + font-size: 12px; + text-decoration: none; display: inline-block; float:right; } @@ -398,4 +398,4 @@ a { a:visited { color: #601ca0; -} \ No newline at end of file +} diff --git a/cli/onionshare_cli/resources/static/js/chat.js b/cli/onionshare_cli/resources/static/js/chat.js index 35113df5..b4ef30df 100644 --- a/cli/onionshare_cli/resources/static/js/chat.js +++ b/cli/onionshare_cli/resources/static/js/chat.js @@ -11,7 +11,7 @@ $(function () { // Store current username received from app context var current_username = $('#username').val(); - // On browser connect, emit a socket event to be added to + // On browser connect, emit a socket event to be added to // room and assigned random username socket.on('connect', function () { socket.emit('joined', {}); diff --git a/cli/onionshare_cli/resources/templates/403.html b/cli/onionshare_cli/resources/templates/403.html index c9d28eea..eff250e6 100644 --- a/cli/onionshare_cli/resources/templates/403.html +++ b/cli/onionshare_cli/resources/templates/403.html @@ -4,7 +4,7 @@ OnionShare: 403 Forbidden - + diff --git a/cli/onionshare_cli/resources/templates/404.html b/cli/onionshare_cli/resources/templates/404.html index e816f2c4..c921aa3e 100644 --- a/cli/onionshare_cli/resources/templates/404.html +++ b/cli/onionshare_cli/resources/templates/404.html @@ -4,7 +4,7 @@ OnionShare: 404 Not Found - + diff --git a/cli/onionshare_cli/resources/templates/405.html b/cli/onionshare_cli/resources/templates/405.html index 63888004..76c32c19 100644 --- a/cli/onionshare_cli/resources/templates/405.html +++ b/cli/onionshare_cli/resources/templates/405.html @@ -4,7 +4,7 @@ OnionShare: 405 Method Not Allowed - + diff --git a/cli/onionshare_cli/resources/templates/500.html b/cli/onionshare_cli/resources/templates/500.html index 9f6727d2..f6501a21 100644 --- a/cli/onionshare_cli/resources/templates/500.html +++ b/cli/onionshare_cli/resources/templates/500.html @@ -4,7 +4,7 @@ OnionShare: An error occurred - + diff --git a/desktop/scripts/dev.sh b/desktop/scripts/dev.sh index bf65e407..18fade68 100755 --- a/desktop/scripts/dev.sh +++ b/desktop/scripts/dev.sh @@ -6,4 +6,4 @@ SCRIPTS_DIR=$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd ) cd "$SCRIPTS_DIR" cd ../src -python -c "import onionshare; onionshare.main()" $@ \ No newline at end of file +python -c "import onionshare; onionshare.main()" $@ diff --git a/docs/README.md b/docs/README.md index 029217bb..fbcf06d9 100644 --- a/docs/README.md +++ b/docs/README.md @@ -27,7 +27,7 @@ You will end up with the documentation in all supported locales in `docs/localiz Here's how preparing translations works: ```sh -# Generate .po files in build/gettext +# Generate .po files in build/gettext make gettext # Create a new blank German locale in source/locale, based on .po files diff --git a/docs/source/develop.rst b/docs/source/develop.rst index 042800c4..224c063f 100644 --- a/docs/source/develop.rst +++ b/docs/source/develop.rst @@ -40,7 +40,7 @@ Verbose mode When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example:: - $ $ poetry run onionshare-cli -v ~/Documents/roms/nes/Q-bert\ \(USA\).nes + $ poetry run onionshare-cli -v ~/Documents/roms/nes/Q-bert\ \(USA\).nes ╭───────────────────────────────────────────╮ │ * ▄▄█████▄▄ * │ │ ▄████▀▀▀████▄ * │ diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index 9bbc58ae..2b2ca61e 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -3,9 +3,9 @@ base: core18 version: '2.4' summary: Securely and anonymously share files, host websites, and chat using Tor description: | - OnionShare lets you securely and anonymously send and receive files. It works by starting - a web server, making it accessible as a Tor onion service, and generating an unguessable - web address so others can download files from you, or upload files to you. It does _not_ + OnionShare lets you securely and anonymously send and receive files. It works by starting + a web server, making it accessible as a Tor onion service, and generating an unguessable + web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service. grade: stable # stable or devel @@ -23,7 +23,7 @@ apps: - removable-media environment: LANG: C.UTF-8 - + cli: common-id: org.onionshare.OnionShareCli command: onionshare-cli @@ -146,7 +146,7 @@ parts: - libssl-dev - zlib1g-dev after: [libevent] - + libevent: source: https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz source-checksum: sha256/92e6de1be9ec176428fd2367677e61ceffc2ee1cb119035037a27d346b0403bb -- cgit v1.2.3-54-g00ecf From f3f25166d487b2a7326ae0f1743ae42ec78f143b Mon Sep 17 00:00:00 2001 From: Benjamin Erhart Date: Fri, 22 Oct 2021 12:21:22 +0200 Subject: Fixed send.js table sorting. Looks like it stopped working a long time ago. --- cli/onionshare_cli/resources/static/js/send.js | 24 ++++++++++++++---------- cli/onionshare_cli/resources/templates/send.html | 14 +++++++------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/cli/onionshare_cli/resources/static/js/send.js b/cli/onionshare_cli/resources/static/js/send.js index 43e9892d..22844ab9 100644 --- a/cli/onionshare_cli/resources/static/js/send.js +++ b/cli/onionshare_cli/resources/static/js/send.js @@ -11,7 +11,7 @@ function unhumanize(text) { } } function sortTable(n) { - var table, rows, switching, i, x, y, shouldSwitch, dir, switchcount = 0; + var table, rows, switching, i, x, y, valX, valY, shouldSwitch, dir, switchcount = 0; table = document.getElementById("file-list"); switching = true; // Set the sorting direction to ascending: @@ -21,7 +21,7 @@ function sortTable(n) { while (switching) { // Start by saying: no switching is done: switching = false; - rows = table.getElementsByTagName("TR"); + rows = table.getElementsByClassName("row"); /* Loop through all table rows (except the first, which contains table headers): */ for (i = 1; i < (rows.length - 1); i++) { @@ -29,18 +29,22 @@ function sortTable(n) { shouldSwitch = false; /* Get the two elements you want to compare, one from current row and one from the next: */ - x = rows[i].getElementsByTagName("TD")[n]; - y = rows[i + 1].getElementsByTagName("TD")[n]; + x = rows[i].getElementsByClassName("cell-data")[n]; + y = rows[i + 1].getElementsByClassName("cell-data")[n]; + + valX = x.classList.contains("size") ? unhumanize(x.innerHTML.toLowerCase()) : x.innerHTML; + valY = y.classList.contains("size") ? unhumanize(y.innerHTML.toLowerCase()) : y.innerHTML; + /* Check if the two rows should switch place, based on the direction, asc or desc: */ if (dir == "asc") { - if (unhumanize(x.innerHTML.toLowerCase()) > unhumanize(y.innerHTML.toLowerCase())) { - // If so, mark as a switch and break the loop: - shouldSwitch= true; - break; - } + if (valX > valY) { + // If so, mark as a switch and break the loop: + shouldSwitch= true; + break; + } } else if (dir == "desc") { - if (unhumanize(x.innerHTML.toLowerCase()) < unhumanize(y.innerHTML.toLowerCase())) { + if (valX < valY) { // If so, mark as a switch and break the loop: shouldSwitch= true; break; diff --git a/cli/onionshare_cli/resources/templates/send.html b/cli/onionshare_cli/resources/templates/send.html index 5fc1ba1f..b1532cec 100644 --- a/cli/onionshare_cli/resources/templates/send.html +++ b/cli/onionshare_cli/resources/templates/send.html @@ -32,7 +32,7 @@ {% endif %}
-
+
Filename
Size
@@ -41,26 +41,26 @@ -
+
{% endfor %} {% for info in files %} -
+
{% if download_individual_files %} - {{ info.basename }} + {{ info.basename }} {% else %} - {{ info.basename }} + {{ info.basename }} {% endif %}
-
{{ info.size_human }}
+
{{ info.size_human }}
{% endfor %}
-- cgit v1.2.3-54-g00ecf From a80cd7f2a6b1eb1538829c33120978d6bbc36a1b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 11 Nov 2021 14:31:22 +0100 Subject: Translated using Weblate (Indonesian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/id/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added translation using Weblate (Indonesian) Translated using Weblate (Polish) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (Polish) Currently translated at 100.0% (58 of 58 strings) Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 89.2% (25 of 28 strings) Translated using Weblate (French) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (French) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (French) Currently translated at 100.0% (23 of 23 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (27 of 27 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (9 of 9 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 95.8% (23 of 24 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (11 of 11 strings) Translated using Weblate (Portuguese (Portugal)) Currently translated at 3.3% (1 of 30 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 98.2% (57 of 58 strings) Translated using Weblate (French) Currently translated at 17.3% (4 of 23 strings) Translated using Weblate (French) Currently translated at 100.0% (17 of 17 strings) Translated using Weblate (French) Currently translated at 100.0% (30 of 30 strings) Translated using Weblate (French) Currently translated at 47.0% (8 of 17 strings) Translated using Weblate (French) Currently translated at 47.0% (8 of 17 strings) Translated using Weblate (French) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (French) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (French) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (French) Currently translated at 96.6% (29 of 30 strings) Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (French) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (Polish) Currently translated at 87.9% (51 of 58 strings) Translated using Weblate (French) Currently translated at 96.7% (30 of 31 strings) Translated using Weblate (French) Currently translated at 13.0% (3 of 23 strings) Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Polish) Currently translated at 75.8% (44 of 58 strings) Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Polish) Currently translated at 100.0% (28 of 28 strings) Translated using Weblate (Polish) Currently translated at 70.6% (41 of 58 strings) Translated using Weblate (Polish) Currently translated at 100.0% (9 of 9 strings) Translated using Weblate (Polish) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Polish) Currently translated at 67.8% (19 of 28 strings) Translated using Weblate (Polish) Currently translated at 100.0% (11 of 11 strings) Translated using Weblate (Polish) Currently translated at 100.0% (27 of 27 strings) Translated using Weblate (Polish) Currently translated at 90.9% (10 of 11 strings) Translated using Weblate (Greek) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Greek) Currently translated at 100.0% (11 of 11 strings) Translated using Weblate (Greek) Currently translated at 100.0% (27 of 27 strings) Translated using Weblate (Greek) Currently translated at 100.0% (9 of 9 strings) Translated using Weblate (Greek) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (Greek) Currently translated at 100.0% (28 of 28 strings) Translated using Weblate (Greek) Currently translated at 100.0% (58 of 58 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (58 of 58 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (27 of 27 strings) Translated using Weblate (Greek) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/el/ Translated using Weblate (Spanish) Currently translated at 98.2% (57 of 58 strings) Translated using Weblate (Spanish) Currently translated at 98.2% (57 of 58 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Spanish) Currently translated at 100.0% (28 of 28 strings) Translated using Weblate (Polish) Currently translated at 88.8% (24 of 27 strings) Translated using Weblate (Polish) Currently translated at 100.0% (31 of 31 strings) Translated using Weblate (Spanish) Currently translated at 81.0% (47 of 58 strings) Co-authored-by: AO Localisation Lab Co-authored-by: EdwardCage Co-authored-by: Gabriel Cardoso Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: Rafał Godek Co-authored-by: Raul Co-authored-by: Username1234567890 Co-authored-by: Yukik4ze Co-authored-by: Zuhualime Akoochimoya Co-authored-by: aezjrareareare Co-authored-by: carlosm2 Co-authored-by: george kitsoukakis Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/es/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/es/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/es/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/es/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/el/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/fr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/pl/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/pt_PT/ Translation: OnionShare/Doc - Advanced Translation: OnionShare/Doc - Develop Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Help Translation: OnionShare/Doc - Install Translation: OnionShare/Doc - Security Translation: OnionShare/Doc - Tor --- desktop/src/onionshare/resources/locale/el.json | 32 ++++- desktop/src/onionshare/resources/locale/fr.json | 32 ++++- desktop/src/onionshare/resources/locale/id.json | 4 +- docs/source/locale/el/LC_MESSAGES/advanced.po | 50 ++++---- docs/source/locale/el/LC_MESSAGES/develop.po | 40 +++--- docs/source/locale/el/LC_MESSAGES/features.po | 153 +++++++++++------------ docs/source/locale/el/LC_MESSAGES/help.po | 18 +-- docs/source/locale/el/LC_MESSAGES/install.po | 29 +++-- docs/source/locale/el/LC_MESSAGES/security.po | 55 ++++---- docs/source/locale/el/LC_MESSAGES/tor.po | 20 ++- docs/source/locale/es/LC_MESSAGES/advanced.po | 44 ++++--- docs/source/locale/es/LC_MESSAGES/develop.po | 37 +++--- docs/source/locale/es/LC_MESSAGES/features.po | 118 +++++++++-------- docs/source/locale/es/LC_MESSAGES/install.po | 22 ++-- docs/source/locale/fr/LC_MESSAGES/advanced.po | 52 ++++++-- docs/source/locale/fr/LC_MESSAGES/develop.po | 82 +++++++++--- docs/source/locale/fr/LC_MESSAGES/features.po | 109 ++++++++++++++-- docs/source/locale/fr/LC_MESSAGES/help.po | 17 ++- docs/source/locale/fr/LC_MESSAGES/install.po | 49 ++++++-- docs/source/locale/fr/LC_MESSAGES/tor.po | 40 +++++- docs/source/locale/id/LC_MESSAGES/advanced.po | 129 +++++++++++++++++++ docs/source/locale/pl/LC_MESSAGES/advanced.po | 42 +++++-- docs/source/locale/pl/LC_MESSAGES/develop.po | 27 +++- docs/source/locale/pl/LC_MESSAGES/features.po | 124 ++++++++++++++++-- docs/source/locale/pl/LC_MESSAGES/help.po | 18 ++- docs/source/locale/pl/LC_MESSAGES/install.po | 22 ++-- docs/source/locale/pl/LC_MESSAGES/security.po | 34 ++++- docs/source/locale/pl/LC_MESSAGES/tor.po | 23 ++-- docs/source/locale/pt_BR/LC_MESSAGES/advanced.po | 33 +++-- docs/source/locale/pt_BR/LC_MESSAGES/develop.po | 28 ++++- docs/source/locale/pt_BR/LC_MESSAGES/features.po | 132 +++++++++++++++---- docs/source/locale/pt_BR/LC_MESSAGES/help.po | 19 ++- docs/source/locale/pt_BR/LC_MESSAGES/install.po | 18 +-- docs/source/locale/pt_BR/LC_MESSAGES/security.po | 33 ++++- docs/source/locale/pt_BR/LC_MESSAGES/tor.po | 14 ++- docs/source/locale/pt_PT/LC_MESSAGES/tor.po | 13 +- docs/source/locale/uk/LC_MESSAGES/install.po | 4 +- 37 files changed, 1248 insertions(+), 468 deletions(-) create mode 100644 docs/source/locale/id/LC_MESSAGES/advanced.po diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json index 41cbdf82..b195869c 100644 --- a/desktop/src/onionshare/resources/locale/el.json +++ b/desktop/src/onionshare/resources/locale/el.json @@ -134,8 +134,8 @@ "gui_server_autostop_timer_expired": "Το χρονόμετρο αυτόματης διακοπής έχει ήδη τελειώσει. Παρακαλώ ρυθμίστε το για να ξεκινήσετε το διαμοιρασμό.", "share_via_onionshare": "Μοιραστείτε μέσω OnionShare", "gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης", - "gui_share_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", - "gui_receive_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare, μπορεί να ανεβάσει αρχεία στον υπολογιστή σας χρησιμοποιώντας το Tor Browser: ", + "gui_share_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", + "gui_receive_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να ανεβάσει αρχεία στον υπολογιστή σας χρησιμοποιώντας το Tor Browser: ", "gui_url_label_persistent": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.

Όσοι μοιράζονται αρχεία μαζί σας θα μπορέσουν να ξαναχρησιμοποιήσουν αυτή τη διεύθυνση αργότερα. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)", "gui_url_label_stay_open": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.", "gui_url_label_onetime": "Αυτός ο διαμοιρασμός θα σταματήσει μετά την πρώτη λήψη.", @@ -225,7 +225,7 @@ "hours_first_letter": "ώ", "minutes_first_letter": "λ", "seconds_first_letter": "δ", - "gui_website_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να επισκεφτεί την ιστοσελίδα χρησιμοποιώντας τον Tor Browser: ", + "gui_website_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να επισκεφτεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", "gui_mode_website_button": "Δημοσίευση ιστοσελίδας", "gui_website_mode_no_files": "Δεν έχει γίνει διαμοιρασμός ιστοσελίδας ακόμα", "incorrect_password": "Λάθος κωδικός", @@ -244,7 +244,7 @@ "mode_settings_legacy_checkbox": "Χρήση παλαιάς διεύθυνσης (δεν προτείνεται η χρήση υπηρεσία v2 onion)", "mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός", "mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση", - "mode_settings_public_checkbox": "Χωρίς χρήση κωδικού πρόσβασης", + "mode_settings_public_checkbox": "Δημόσια υπηρεσία OnionShare (απενεργοποιεί το ιδιωτικό κλειδί)", "mode_settings_persistent_checkbox": "Αποθήκευση της καρτέλας και αυτόματο άνοιγμά της με την έναρξη του OnionShare", "mode_settings_advanced_toggle_hide": "Απόκρυψη προχωρημένων ρυθμίσεων", "mode_settings_advanced_toggle_show": "Εμφάνιση προχωρημένων ρυθμίσεων", @@ -279,7 +279,7 @@ "error_port_not_available": "Η θύρα OnionShare δεν είναι διαθέσιμη", "gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος", "gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.", - "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση του OnionShare μπορεί να συμμετέχει στο δωμάτιο συνομιλίας με χρήση του Tor Browser: ", + "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα.", "history_receive_read_message_button": "Ανάγνωση μηνύματος", "mode_settings_receive_webhook_url_checkbox": "Χρήση ειδοποίησης webhook", @@ -289,5 +289,25 @@ "gui_status_indicator_chat_started": "Σε συνομιλία", "gui_status_indicator_chat_scheduled": "Δρομολόγηση…", "gui_status_indicator_chat_working": "Εκκίνηση…", - "gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία" + "gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία", + "gui_copied_client_auth_title": "Το ιδιωτικό κλειδί αντιγράφηκε", + "gui_qr_label_url_title": "Διεύθυνση OnionShare", + "gui_reveal": "Εμφάνιση", + "gui_hide": "Απόκρυψη", + "gui_share_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", + "gui_website_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να επισκεφθεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", + "gui_chat_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", + "gui_url_instructions_public_mode": "Στείλτε την παρακάτω διεύθυνση OnionShare:", + "gui_settings_theme_label": "Θέμα", + "gui_copy_client_auth": "Αντιγραφή ιδιωτικού κλειδιού", + "gui_copied_client_auth": "Το ιδιωτικό κλειδί αντιγράφηκε στο πρόχειρο", + "gui_qr_label_auth_string_title": "Ιδιωτικό κλειδί", + "gui_please_wait_no_button": "Εκκίνηση…", + "gui_server_doesnt_support_stealth": "Αυτή η έκδοση Tor, δεν υποστηρίζει το stealth (πιστοποίηση πελάτη). Παρακαλούμε δοκιμάστε με μια νεότερη έκδοση του Tor ή χρησιμοποιήστε τη λειτουργία 'δημόσιο' αν δεν χρειάζεται να είναι ιδιωτική.", + "gui_receive_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να ανεβάσει αρχεία στον υπολογιστή σας, χρησιμοποιώντας το Tor Browser: ", + "gui_settings_theme_auto": "Αυτόματο", + "gui_settings_theme_dark": "Σκοτεινό", + "gui_url_instructions": "Αρχικά, στείλτε την παρακάτω διεύθυνση OnionShare:", + "gui_settings_theme_light": "Φωτεινό", + "gui_client_auth_instructions": "Στη συνέχεια, στείλτε το ιδιωτικό κλειδί για πρόσβαση στην υπηρεσία OnionShare:" } diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json index 3bb2c838..fdbd6ae4 100644 --- a/desktop/src/onionshare/resources/locale/fr.json +++ b/desktop/src/onionshare/resources/locale/fr.json @@ -104,8 +104,8 @@ "gui_tor_connection_lost": "Vous êtes déconnecté de Tor.", "share_via_onionshare": "Partager avec OnionShare", "gui_save_private_key_checkbox": "Utiliser une adresse persistante", - "gui_share_url_description": "Quiconque possède cette adresse OnionShare peut télécharger vos fichiers en utilisant le Navigateur Tor : ", - "gui_receive_url_description": "Quiconque possède cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", + "gui_share_url_description": "Quiconque disposant de cette adresse OnionShare et cette clé privée peut télécharger vos fichiers en utilisant le Navigateur Tor : ", + "gui_receive_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", "gui_url_label_persistent": "Ce partage ne s’arrêtera pas automatiquement.

Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)", "gui_url_label_stay_open": "Ce partage ne s’arrêtera pas automatiquement.", "gui_url_label_onetime": "Ce partage s’arrêtera une fois que le premier téléchargement sera terminé.", @@ -221,7 +221,7 @@ "hours_first_letter": "h", "minutes_first_letter": "min", "seconds_first_letter": "s", - "gui_website_url_description": "Quiconque aura cette adresse OnionShare pourra visiter votre site Web en utilisant le Navigateur Tor : ", + "gui_website_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut visiter votre site Web en utilisant le Navigateur Tor : ", "systray_site_loaded_title": "Le site Web a été chargé", "systray_site_loaded_message": "Le site Web OnionShare a été chargé", "systray_website_started_title": "Début du partage du site Web", @@ -252,7 +252,7 @@ "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans", "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)", "mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)", - "mode_settings_public_checkbox": "Ne pas utiliser un mot de passe", + "mode_settings_public_checkbox": "Ceci est un service OnionShare public (sans clé privée)", "mode_settings_persistent_checkbox": "Enregistrer cet onglet et l’ouvrir automatiquement quand j’ouvre OnionShare", "mode_settings_advanced_toggle_hide": "Cacher les paramètres avancés", "mode_settings_advanced_toggle_show": "Afficher les paramètres avancés", @@ -283,7 +283,7 @@ "gui_main_page_website_button": "Lancer l’hébergement", "gui_main_page_receive_button": "Lancer la réception", "gui_main_page_share_button": "Lancer le partage", - "gui_chat_url_description": "Cette adresse OnionShare permet à n’importe qui de se joindre à ce salon de discussion avec le Navigateur Tor : ", + "gui_chat_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut se joindre à ce salon de discussion avec le Navigateur Tor : ", "error_port_not_available": "Le port OnionShare n’est pas accessible", "gui_rendezvous_cleanup_quit_early": "Fermer avant", "gui_rendezvous_cleanup": "En attente de la fermeture des circuits Tor pour être certain que vos fichiers ont été transférés avec succès.\n\nCela pourrait prendre quelques minutes.", @@ -296,5 +296,25 @@ "gui_status_indicator_chat_started": "En conversation", "gui_status_indicator_chat_scheduled": "Planifié…", "gui_status_indicator_chat_working": "Démarrage…", - "gui_status_indicator_chat_stopped": "Prêt à dialoguer" + "gui_status_indicator_chat_stopped": "Prêt à dialoguer", + "gui_copied_client_auth_title": "Clé privée copiée", + "gui_please_wait_no_button": "Démarrage…", + "gui_copied_client_auth": "Clé privée copiée dans le presse-papiers", + "gui_qr_label_url_title": "Adresse OnionShare", + "gui_hide": "Cacher", + "gui_qr_label_auth_string_title": "Clé privée", + "gui_copy_client_auth": "Copier la clé privée", + "gui_share_url_public_description": "Quiconque disposant de cette adresse OnionShare peut télécharger vos fichiers en utilisant le Navigateur Tor : ", + "gui_url_instructions": "Tout d'abord, envoyez l'adresse OnionShare ci-dessous :", + "gui_settings_theme_light": "Clair", + "gui_reveal": "Montrer", + "gui_chat_url_public_description": "Quiconque disposant de cette adresse OnionShare peut se joindre à ce salon de discussion en utilisant le Navigateur Tor : ", + "gui_url_instructions_public_mode": "Envoyez l'adresse OnionShare ci-dessous :", + "gui_settings_theme_label": "Thème", + "gui_settings_theme_auto": "Automatique", + "gui_settings_theme_dark": "Sombre", + "gui_website_url_public_description": "Quiconque disposant de cette adresse OnionShare peut visiter votre site Web en utilisant le Navigateur Tor : ", + "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge la fonctionnalité \"stealth\" (le client d'authentification). Veuillez essayer avec une version plus récente de Tor, ou utilisez le mode 'public' s'il n'a pas besoin d'être privé.", + "gui_receive_url_public_description": "Quiconque disposant de cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", + "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :" } diff --git a/desktop/src/onionshare/resources/locale/id.json b/desktop/src/onionshare/resources/locale/id.json index 36b8c41a..7cdb5993 100644 --- a/desktop/src/onionshare/resources/locale/id.json +++ b/desktop/src/onionshare/resources/locale/id.json @@ -274,5 +274,7 @@ "gui_status_indicator_chat_started": "Mengobrol", "gui_status_indicator_chat_scheduled": "Menjadwalkan…", "gui_status_indicator_chat_working": "Memulai…", - "gui_status_indicator_chat_stopped": "Siap untuk mengobrol" + "gui_status_indicator_chat_stopped": "Siap untuk mengobrol", + "gui_copied_client_auth_title": "Kunci Pribadi Disalin", + "gui_copy_client_auth": "Salin Kunci Pribadi" } diff --git a/docs/source/locale/el/LC_MESSAGES/advanced.po b/docs/source/locale/el/LC_MESSAGES/advanced.po index 47341843..06186557 100644 --- a/docs/source/locale/el/LC_MESSAGES/advanced.po +++ b/docs/source/locale/el/LC_MESSAGES/advanced.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-05-11 20:47+0000\n" -"Last-Translator: Mr.Grin \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -53,16 +54,15 @@ msgstr "" "καρφίτσωσης στα αριστερά της κατάστασης του διακομιστή." #: ../../source/advanced.rst:18 -#, fuzzy msgid "" "When you quit OnionShare and then open it again, your saved tabs will " "start opened. You'll have to manually start each service, but when you do" " they will start with the same OnionShare address and private key." msgstr "" "Όταν κάνετε έξοδο από το OnionShare και άνοιγμα ξανά, οι αποθηκευμένες " -"καρτέλες σας θα ξεκινήσουν ανοιχτές. Θα πρέπει να εκκινήσετε χειροκίνητα " -"την κάθε υπηρεσία, αλλά θα ξεκινήσουν με την ίδια διεύθυνση και κωδικό " -"OnionShare." +"καρτέλες σας θα ξεκινήσουν ανοιχτές. Θα πρέπει να εκκινήσετε χειροκίνητα την " +"κάθε υπηρεσία, αλλά θα ξεκινήσουν με την ίδια διεύθυνση OnionShare και " +"ιδιωτικό κλειδί." #: ../../source/advanced.rst:21 msgid "" @@ -75,35 +75,35 @@ msgstr "" #: ../../source/advanced.rst:26 msgid "Turn Off Private Key" -msgstr "" +msgstr "Απενεργοποίηση ιδιωτικού κλειδιού" #: ../../source/advanced.rst:28 msgid "" "By default, all OnionShare services are protected with a private key, " "which Tor calls \"client authentication\"." msgstr "" +"Από προεπιλογή, όλες οι υπηρεσίες OnionShare προστατεύονται με ένα ιδιωτικό " +"κλειδί, το οποίο ονομάζεται \"πιστοποίηση πελάτη\"." #: ../../source/advanced.rst:30 msgid "" "When browsing to an OnionShare service in Tor Browser, Tor Browser will " "prompt for the private key to be entered." msgstr "" +"Κατά την περιήγηση σε μια υπηρεσία OnionShare με το Tor Browser, θα σας " +"ζητηθεί να εισαγάγετε το ιδιωτικό κλειδί." #: ../../source/advanced.rst:32 -#, fuzzy msgid "" "Sometimes you might want your OnionShare service to be accessible to the " "public, like if you want to set up an OnionShare receive service so the " "public can securely and anonymously send you files. In this case, it's " "better to disable the private key altogether." msgstr "" -"Μερικές φορές μπορεί να θέλετε η υπηρεσία OnionShare να είναι δημόσια " -"προσβάσιμη, ή να ρυθμίσετε την υπηρεσία λήψης OnionShare ώστε να μπορεί " -"κάποιος να σας στέλνει με ασφάλεια και ανώνυμα αρχεία. Σε αυτήν την " -"περίπτωση, είναι καλύτερα να απενεργοποιήσετε εντελώς τον κωδικό " -"πρόσβασης. Εάν δεν το κάνετε αυτό, κάποιος μπορεί να αναγκάσει τον " -"διακομιστή σας να σταματήσει απλά κάνοντας 20 λανθασμένες δοκιμές για τον" -" κωδικό πρόσβασής σας, ακόμη και αν γνωρίζουν τον σωστό." +"Μερικές φορές μπορεί να θέλετε η υπηρεσία σας OnionShare να είναι δημόσια " +"προσβάσιμη, ή να μπορεί κάποιος να σας στέλνει με ασφάλεια και ανώνυμα, " +"αρχεία. Σε αυτήν την περίπτωση, είναι καλύτερα να απενεργοποιήσετε το " +"ιδιωτικό κλειδί." #: ../../source/advanced.rst:35 msgid "" @@ -112,6 +112,11 @@ msgid "" "server. Then the server will be public and won't need a private key to " "view in Tor Browser." msgstr "" +"Για να απενεργοποιήσετε το ιδιωτικό κλειδί για οποιαδήποτε καρτέλα, " +"τσεκάρετε το πλαίσιο \"Δημόσια υπηρεσία OnionShare (απενεργοποιεί το " +"ιδιωτικό κλειδί)\" πριν από την εκκίνηση του διακομιστή. Τότε ο διακομιστής " +"θα είναι δημόσιος και δεν θα χρειάζεται ιδιωτικό κλειδί για να τον " +"εμφανίσετε στο Tor Browser." #: ../../source/advanced.rst:40 msgid "Custom Titles" @@ -181,16 +186,15 @@ msgstr "" "ακυρώσετε την υπηρεσία πριν αυτή ξεκινήσει." #: ../../source/advanced.rst:60 -#, fuzzy msgid "" "**Scheduling an OnionShare service to automatically stop can be useful to" " limit exposure**, like if you want to share secret documents while " "making sure they're not available on the internet for more than a few " "days." msgstr "" -"**Η προγραμματισμένη διακοπή της υπηρεσίας διαμοιρασμού OnionShare, είναι" -" χρήσιμη για τον περιορισμό της έκθεσής σας**, όπως εάν επιθυμείτε τον " -"διαμοιρασμό κρυφών αρχείων στο Διαδίκτυο για συγκεκριμένο χρόνο." +"**Ο προγραμματισμένος τερματισμός της υπηρεσίας διαμοιρασμού OnionShare, " +"περιορίζει το χρόνο έκθεσής σας**, όπως εάν επιθυμείτε τον διαμοιρασμό " +"μυστικών αρχείων στο Διαδίκτυο για συγκεκριμένο χρόνο." #: ../../source/advanced.rst:67 msgid "Command-line Interface" @@ -231,6 +235,9 @@ msgid "" "`_ " "in the git repository." msgstr "" +"Για πληροφορίες σχετικά με την εγκατάστασή του σε διαφορετικά λειτουργικά " +"συστήματα, ανατρέξτε στο αρχείο `CLI readme file `_ στο αποθετήριο git." #: ../../source/advanced.rst:83 msgid "" @@ -578,4 +585,3 @@ msgstr "" #~ "`_" #~ " in the git repository." #~ msgstr "" - diff --git a/docs/source/locale/el/LC_MESSAGES/develop.po b/docs/source/locale/el/LC_MESSAGES/develop.po index 13d82739..2c3cd9c9 100644 --- a/docs/source/locale/el/LC_MESSAGES/develop.po +++ b/docs/source/locale/el/LC_MESSAGES/develop.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-05-11 20:47+0000\n" -"Last-Translator: Panagiotis Vasilopoulos \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 @@ -63,16 +64,14 @@ msgid "Contributing Code" msgstr "Συνεισφορά κώδικα" #: ../../source/develop.rst:17 -#, fuzzy msgid "" "OnionShare source code is to be found in this Git repository: " "https://github.com/onionshare/onionshare" msgstr "" -"Ο πηγαίος κώδικας του OnionShare βρίσκεται στο αποθετήριο Git: " -"https://github.com/micahflee/onionshare" +"Ο πηγαίος κώδικας του OnionShare βρίσκεται στο αποθετήριο Git: https://github" +".com/micahflee/onionshare" #: ../../source/develop.rst:19 -#, fuzzy msgid "" "If you'd like to contribute code to OnionShare, it helps to join the " "Keybase team and ask questions about what you're thinking of working on. " @@ -80,11 +79,11 @@ msgid "" "`_ on GitHub to see if " "there are any you'd like to tackle." msgstr "" -"Εάν θέλετε να συνεισφέρετε με κώδικα στο OnionShare, θα πρέπει να " -"εγγραφείτε στην ομάδα του Keybase για την υποβολή σχετικών ερωτήσεων. Θα " -"πρέπει επίσης να έχετε διαβάσει όλα τα `ανοιχτά ζητήματα " -"`_ στο GitHub για να " -"δείτε αν υπάρχουν κάποια που θέλετε να συμμετέχετε." +"Εάν θέλετε να συνεισφέρετε με κώδικα στο OnionShare, θα πρέπει να εγγραφείτε " +"στην ομάδα του Keybase και να υποβάλετε ερωτήσεις σχετικά με τις ιδέες σας. " +"Θα πρέπει επίσης να έχετε διαβάσει τα `ανοιχτά ζητήματα `_ στο GitHub για να δείτε αν υπάρχουν κάποια " +"που θέλετε να συμμετέχετε." #: ../../source/develop.rst:22 msgid "" @@ -110,6 +109,12 @@ msgid "" "file to learn how to set up your development environment for the " "graphical version." msgstr "" +"Το OnionShare αναπτύσσεται με την Python. Για να ξεκινήσετε, κλωνοποιήστε το " +"αποθετήριο Git στη διεύθυνση https://github.com/onionshare/onionshare/ και " +"στη συνέχεια συμβουλευτείτε το αρχείο ``cli/README.md`` για να μάθετε πώς να " +"ρυθμίσετε το περιβάλλον ανάπτυξής σας, για την έκδοση γραμμής εντολών και το " +"αρχείο ``desktop/README.md`` για να μάθετε πώς να ρυθμίσετε το περιβάλλον " +"ανάπτυξής σας για την έκδοση γραφικών." #: ../../source/develop.rst:32 msgid "" @@ -178,15 +183,15 @@ msgstr "" "αυτό προσθέτοντας το ``--local-only``. Για παράδειγμα::" #: ../../source/develop.rst:165 -#, fuzzy msgid "" "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal " "web-browser like Firefox, instead of using the Tor Browser. The private " "key is not actually needed in local-only mode, so you can ignore it." msgstr "" -"Σε αυτή την περίπτωση, θα φορτώσει το URL ``http://onionshare:train-" -"system@127.0.0.1:17635`` σε κανονικό περιηγητή όπως το Firefox αντί του " -"Tor Browser." +"Σε αυτή την περίπτωση, θα φορτωθεί η URL ``http://127.0.0.1:17641`` σε " +"κανονικό περιηγητή όπως το Firefox, αντί του Tor Browser. Το ιδιωτικό κλειδί " +"δεν χρειάζεται στην κατάσταση τοπικής λειτουργίας, οπότε μπορείτε να το " +"αγνοήσετε." #: ../../source/develop.rst:168 msgid "Contributing Translations" @@ -487,4 +492,3 @@ msgstr "" #~ "περιβάλλοντος γραμμής εντολών και του " #~ "αρχείου ``desktop/README.md`` για την έκδοση" #~ " γραφικού περιβάλλοντος." - diff --git a/docs/source/locale/el/LC_MESSAGES/features.po b/docs/source/locale/el/LC_MESSAGES/features.po index f6fe9b9c..323492c6 100644 --- a/docs/source/locale/el/LC_MESSAGES/features.po +++ b/docs/source/locale/el/LC_MESSAGES/features.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-05-11 20:47+0000\n" -"Last-Translator: Iris S. \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -36,14 +37,16 @@ msgstr "" #: ../../source/features.rst:8 msgid "By default, OnionShare web addresses are protected with a private key." msgstr "" +"Από προεπιλογή, οι διευθύνσεις διαδικτύου του OnionShare προστατεύονται με " +"ένα ιδιωτικό κλειδί." #: ../../source/features.rst:10 msgid "OnionShare addresses look something like this::" -msgstr "" +msgstr "Οι διευθύνσεις OnionShare μοιάζουν κάπως:" #: ../../source/features.rst:14 msgid "And private keys might look something like this::" -msgstr "" +msgstr "Και τα ιδιωτικά κλειδιά μπορεί να μοιάζουν κάπως:" #: ../../source/features.rst:18 msgid "" @@ -52,9 +55,13 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" +"Είστε υπεύθυνοι για την ασφαλή κοινοποίηση της διεύθυνσης URL και του " +"ιδιωτικού κλειδιού χρησιμοποιώντας ένα κανάλι επικοινωνίας της επιλογής σας, " +"όπως ένα κρυπτογραφημένο μήνυμα ή χρησιμοποιώντας κάτι λιγότερο ασφαλές, " +"όπως μη κρυπτογραφημένο ηλεκτρονικό ταχυδρομείο, ανάλογα με το `μοντέλο " +"απειλής `_." #: ../../source/features.rst:20 -#, fuzzy msgid "" "The people you send the URL to then copy and paste it into their `Tor " "Browser `_ to access the OnionShare service." @@ -63,21 +70,20 @@ msgid "" msgstr "" "Οι αποδέκτες πρέπει να αντιγράψουν την διεύθυνση ιστού στο `Tor Browser " "`_ για να αποκτήσουν πρόσβαση στην υπηρεσία " -"OnionShare." +"OnionShare. Τότε θα ζητηθεί να εισαχθεί το ιδιωτικό κλειδί." #: ../../source/features.rst:24 -#, fuzzy msgid "" "If you run OnionShare on your laptop to send someone files, and then " "suspend it before the files are sent, the service will not be available " "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" -"Εάν χρησιμοποιήσετε το OnionShare στον φορητό υπολογιστή σας για να " -"στείλετε αρχεία και ο υπολογιστής αυτός κλείσει προτού ολοκληρωθεί η " -"μεταφορά, δεν θα είναι δυνατή η ολοκλήρωση της έως ότου ο φορητός " -"υπολογιστής σας συνδεθεί ξανά στο Διαδίκτυο. Το OnionShare λειτουργεί " -"καλύτερα όταν συνεργάζεστε με τον παραλήπτη σε πραγματικό χρόνο." +"Εάν χρησιμοποιήσετε το OnionShare στον φορητό υπολογιστή σας για να στείλετε " +"αρχεία και ο υπολογιστής αυτός κλείσει προτού ολοκληρωθεί η μεταφορά, δεν θα " +"είναι δυνατή η ολοκλήρωση της έως ότου συνδεθεί ξανά στο Διαδίκτυο. Το " +"OnionShare λειτουργεί καλύτερα όταν συνεργάζεστε με τον παραλήπτη σε " +"πραγματικό χρόνο." #: ../../source/features.rst:26 msgid "" @@ -119,7 +125,6 @@ msgstr "" "ρυθμίσεις πριν ξεκινήσετε τον διαμοιρασμό." #: ../../source/features.rst:39 -#, fuzzy msgid "" "As soon as someone finishes downloading your files, OnionShare will " "automatically stop the server, removing the website from the internet. To" @@ -127,11 +132,11 @@ msgid "" " files have been sent (uncheck to allow downloading individual files)\" " "box." msgstr "" -"Με την ολοκλήρωση αποστολής των αρχείων σας, το OnionShare σταματά " -"αυτόματα τον διακομιστή, αφαιρώντας την ιστοσελίδα από το Διαδίκτυο. Για " -"να επιτρέψετε τη λήψη απο περισσότερους χρήστες, αποεπιλέξτε το " -"\"Τερματισμός διαμοιρασμού με την ολοκλήρωση αποστολής (αποεπιλέξτε ώστε " -"να επιτρέπεται η λήψη μεμονωμένων αρχείων)\"." +"Με την ολοκλήρωση αποστολής των αρχείων σας, το OnionShare σταματά αυτόματα " +"τον διακομιστή, αφαιρώντας την ιστοσελίδα από το Διαδίκτυο. Για να " +"επιτρέψετε τη λήψη από περισσότερους χρήστες, αποεπιλέξτε το \"Τερματισμός " +"διαμοιρασμού με την ολοκλήρωση αποστολής (αποεπιλέξτε ώστε να επιτρέπεται η " +"λήψη μεμονωμένων αρχείων)\"." #: ../../source/features.rst:42 msgid "" @@ -157,28 +162,26 @@ msgstr "" "εικονίδιο \"↑\"." #: ../../source/features.rst:48 -#, fuzzy msgid "" "Now that you have a OnionShare, copy the address and the private key and " "send it to the person you want to receive the files. If the files need to" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" -"Τώρα που αποκτήσατε το OnionShare, αντιγράψτε και στείλτε τη διεύθυνση " -"λήψης των αρχείων σας. Εάν χρειάζεστε περισσότερη ασφάλεια ή ο αποδέκτης " -"δεν είναι έμπιστος, χρησιμοποιήστε εφαρμογή αποστολής κρυπτογραφημένου " -"μηνύματος." +"Τώρα που αποκτήσατε το OnionShare, αντιγράψτε και στείλτε τη διεύθυνση λήψης " +"των αρχείων σας και το ιδιωτικό κλειδί. Εάν χρειάζεστε περισσότερη ασφάλεια " +"ή ο αποδέκτης δεν είναι έμπιστος, χρησιμοποιήστε μια εφαρμογή αποστολής " +"κρυπτογραφημένου μηνύματος." #: ../../source/features.rst:50 -#, fuzzy msgid "" "That person then must load the address in Tor Browser. After logging in " "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" -"Ο αποδέκτης θα πρέπει να αντιγράψει τη διεύθυνση στο Tor Browser. Μετά τη" -" σύνδεση με τον τυχαίο κωδικό πρόσβασης, τα αρχεία μπορούν να ληφθούν " -"απευθείας από τον υπολογιστή σας με κλικ στον σύνδεσμο \"Λήψη αρχείων\"." +"Ο αποδέκτης θα πρέπει να αντιγράψει τη διεύθυνση στο Tor Browser. Μετά τη " +"σύνδεση με το ιδιωτικό κλειδί, τα αρχεία μπορούν να ληφθούν απευθείας από " +"τον υπολογιστή σας με κλικ στον σύνδεσμο \"Λήψη αρχείων\"." #: ../../source/features.rst:55 msgid "Receive Files and Messages" @@ -299,7 +302,6 @@ msgid "Use at your own risk" msgstr "Η χρήση του γίνεται με δική σας ευθύνη" #: ../../source/features.rst:88 -#, fuzzy msgid "" "Just like with malicious email attachments, it's possible someone could " "try to attack your computer by uploading a malicious file to your " @@ -307,10 +309,9 @@ msgid "" "protect your system from malicious files." msgstr "" "Όπως και με τα κακόβουλα συνημμένα e-mail, είναι πιθανό κάποιος να " -"προσπαθήσει να επιτεθεί στον υπολογιστή σας ανεβάζοντας ένα κακόβουλο " -"αρχείο στην υπηρεσία του OnionShare σας. Το OnionShare δεν διαθέτει " -"μηχανισμούς ασφαλείας για την προστασία του συστήματός σας από κακόβουλα " -"αρχεία." +"προσπαθήσει να επιτεθεί στον υπολογιστή σας ανεβάζοντας ένα κακόβουλο αρχείο " +"στην υπηρεσία σας OnionShare, το οποίο δεν διαθέτει μηχανισμούς ασφαλείας " +"από κακόβουλα αρχεία." #: ../../source/features.rst:90 msgid "" @@ -338,30 +339,28 @@ msgid "Tips for running a receive service" msgstr "Συμβουλές για τη λειτουργία υπηρεσίας λήψης" #: ../../source/features.rst:97 -#, fuzzy msgid "" "If you want to host your own anonymous dropbox using OnionShare, it's " "recommended you do so on a separate, dedicated computer always powered on" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" -"Εάν θέλετε να φιλοξενήσετε το δικό σας ανώνυμο dropbox χρησιμοποιώντας το" -" OnionShare, συνιστάται να το κάνετε σε έναν ξεχωριστό, μεμονωμένο " -"υπολογιστή που είναι πάντα ενεργοποιημένος και συνδεδεμένος στο Διαδίκτυο" -" και όχι σε αυτόν που χρησιμοποιείτε σε τακτική βάση." +"Εάν θέλετε να φιλοξενήσετε το δικό σας ανώνυμο dropbox χρησιμοποιώντας το " +"OnionShare, συνιστάται να το κάνετε σε έναν ξεχωριστό, μεμονωμένο υπολογιστή " +"που είναι πάντα ενεργοποιημένος και συνδεδεμένος στο Διαδίκτυο και όχι σε " +"αυτόν που χρησιμοποιείτε καθημερινά." #: ../../source/features.rst:99 -#, fuzzy msgid "" "If you intend to put the OnionShare address on your website or social " "media profiles, save the tab (see :ref:`save_tabs`) and run it as a " "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" -"Εάν σκοπεύετε να δημοσιεύσετε τη διεύθυνση OnionShare στην ιστοσελίδα ή " -"στα προφίλ κοινωνικών δικτύων σας, αποθηκεύστε την καρτέλα (δείτε " -":ref:`save_tabs`) και ενεργοποιήστε την λειτουργία δημόσιας υπηρεσίας " -"(δείτε :ref:`turn_off_passwords`)." +"Εάν σκοπεύετε να δημοσιεύσετε τη διεύθυνση OnionShare στην ιστοσελίδα ή στα " +"κοινωνικά σας δίκτυα, αποθηκεύστε την καρτέλα (δείτε :ref:`save_tabs`) και " +"εκτελέστε την σαν δημόσια υπηρεσία (δείτε :ref:`turn_off_private_key`). " +"Επίσης μπορείτε να προσθέσετε το δικό σας τίτλο (δείτε :ref:`custom_titles`)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -409,7 +408,6 @@ msgid "Content Security Policy" msgstr "Πολιτική ασφάλειας περιεχομένου" #: ../../source/features.rst:119 -#, fuzzy msgid "" "By default OnionShare helps secure your website by setting a strict " "`Content Security Policy " @@ -417,30 +415,28 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" -"Από προεπιλογή το OnionShare σας βοηθά στην ασφάλιση της ιστοσελίδας " -"ορίζοντας την επικεφαλίδα `Περιεχόμενο πολιτικής ασφαλείας " -"`_. Ωστόσο, αυτό " -"εμποδίζει τη φόρτωση περιεχομένου τρίτων εντός της ιστοσελίδας." +"Από προεπιλογή το OnionShare σας βοηθά στην προστασία της ιστοσελίδας σας " +"ορίζοντας την επικεφαλίδα `Περιεχόμενο πολιτικής ασφαλείας `_. Ωστόσο, αυτό εμποδίζει τη " +"φόρτωση περιεχομένου τρίτων εντός της ιστοσελίδας." #: ../../source/features.rst:121 -#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " "JavaScript libraries from CDNs, check the \"Don't send Content Security " "Policy header (allows your website to use third-party resources)\" box " "before starting the service." msgstr "" -"Εάν θέλετε να φορτώσετε περιεχόμενο από ιστότοπους τρίτων, όπως στοιχεία " -"ή κώδικα JavaScript από CDN, επιλέξτε το πλαίσιο \"Μην στέλνετε την " -"κεφαλίδα Πολιτικής Ασφαλείας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας " -"να χρησιμοποιεί πόρους τρίτων)\" πριν την εκκίνηση της υπηρεσίας." +"Εάν θέλετε να φορτώσετε περιεχόμενο από ιστότοπους τρίτων, όπως στοιχεία ή " +"βιβλιοθήκες JavaScript από CDNs, επιλέξτε το πλαίσιο \"Μην στέλνετε την " +"κεφαλίδα Πολιτικής Ασφαλείας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας να " +"χρησιμοποιεί πόρους τρίτων)\" πριν την εκκίνηση της υπηρεσίας." #: ../../source/features.rst:124 msgid "Tips for running a website service" msgstr "Συμβουλές για εκτέλεση μιας υπηρεσίας ιστοσελίδας" #: ../../source/features.rst:126 -#, fuzzy msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -449,22 +445,20 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" -"Εάν θέλετε να φιλοξενήσετε μια μακροσκελή ιστοσελίδα με το OnionShare " -"(που σημαίνει πως χρειάζεται χρόνος για περιήγηση), συνιστάται να το " -"κάνετε σε έναν ξεχωριστό, αυτόνομο υπολογιστή που είναι πάντα " -"ενεργοποιημένος και συνδεδεμένος στο Διαδίκτυο και όχι σε αυτόν που " -"χρησιμοποιείτε σε τακτική βάση. Αποθηκεύστε την καρτέλα (δείτε: " -":ref:`save_tabs`) ώστε να μπορείτε να την ξανανοίξετε με την ίδια " -"διεύθυνση εάν κλείσετε το OnionShare." +"Εάν θέλετε να φιλοξενήσετε μια μακροσκελή ιστοσελίδα με το OnionShare (που " +"σημαίνει πως χρειάζεται χρόνος για περιήγηση), συνιστάται να το κάνετε σε " +"έναν ξεχωριστό, αυτόνομο υπολογιστή που είναι πάντα ενεργοποιημένος και " +"συνδεδεμένος στο Διαδίκτυο και όχι σε αυτόν που χρησιμοποιείτε σε τακτική " +"βάση. Αποθηκεύστε την καρτέλα (δείτε: :ref:`save_tabs`) ώστε να μπορείτε να " +"ξανανοίξετε την ίδια διεύθυνση εάν κλείσετε το OnionShare." #: ../../source/features.rst:129 -#, fuzzy msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" "Εάν η ιστοσελίδα σας προορίζεται για δημόσια χρήση, πρέπει να δηλωθεί ως " -"δημόσια υπηρεσία (δείτε :ref:`turn_off_passwords`)." +"δημόσια υπηρεσία (δείτε :ref:`turn_off_private_key`)." #: ../../source/features.rst:132 msgid "Chat Anonymously" @@ -480,17 +474,16 @@ msgstr "" "συνομιλίας και κάντε κλικ \"Έναρξη διακομιστή συνομιλίας\"." #: ../../source/features.rst:138 -#, fuzzy msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" -"Μετά την εκκίνηση του διακομιστή, αντιγράψτε τη διεύθυνση OnionShare και " -"στείλτε την στα άτομα που θέλετε από ανώνυμο δωμάτιο συνομιλίας. Εάν " -"είναι σημαντικό να περιορίσετε ποιος μπορεί να συμμετάσχει, " -"χρησιμοποιήστε μια εφαρμογή ανταλλαγής κρυπτογραφημένων μηνυμάτων." +"Μετά την εκκίνηση του διακομιστή, αντιγράψτε και στείλτε τη διεύθυνση " +"OnionShare και το ιδιωτικό κλειδί, από ένα ανώνυμο δωμάτιο συνομιλίας. Εάν " +"είναι σημαντικό να περιορίσετε ποιος μπορεί να συμμετάσχει, χρησιμοποιήστε " +"μια εφαρμογή ανταλλαγής μηνυμάτων με κρυπτογράφηση." #: ../../source/features.rst:143 msgid "" @@ -565,9 +558,16 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" +"Εάν, για παράδειγμα, στείλετε ένα μήνυμα σε μια ομάδα του Signal, ένα " +"αντίγραφο του μηνύματός σας καταλήγει σε κάθε συσκευή (τα κινητά και τους " +"υπολογιστές αν έχουν το Signal Desktop) κάθε μέλους της ομάδας. Ακόμη και αν " +"η εξαφάνιση μηνυμάτων είναι ενεργοποιημένη, είναι δύσκολο να επιβεβαιώσετε " +"ότι όλα τα αντίγραφα των μηνυμάτων έχουν πράγματι διαγραφεί και από " +"οποιαδήποτε άλλα μέρη (όπως βάσεις δεδομένων ειδοποιήσεων) στα οποία μπορεί " +"να έχουν αποθηκευτεί. Τα δωμάτια συνομιλίας του OnionShare δεν αποθηκεύουν " +"κανένα μήνυμα πουθενά, οπότε το πρόβλημα μειώνεται στο ελάχιστο." #: ../../source/features.rst:165 -#, fuzzy msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -576,12 +576,12 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" -"Τα δωμάτια συνομιλίας OnionShare είναι επίσης χρήσιμα για άτομα που " -"θέλουν να συνομιλήσουν ανώνυμα και με ασφάλεια χωρίς να χρειάζεται να " -"δημιουργήσουν λογαριασμό. Για παράδειγμα, μια πηγή μπορεί να στείλει μια " -"διεύθυνση OnionShare σε έναν δημοσιογράφο χρησιμοποιώντας μια διεύθυνση " -"e-mail μιας χρήσης και στη συνέχεια, να περιμένει τον δημοσιογράφο να " -"συμμετάσχει στο δωμάτιο συνομιλίας, χωρίς να διακυβεύεται η ανωνυμία του." +"Τα δωμάτια συνομιλίας OnionShare είναι επίσης χρήσιμα για άτομα που θέλουν " +"να συνομιλήσουν ανώνυμα και με ασφάλεια χωρίς να χρειάζεται να δημιουργήσουν " +"λογαριασμό. Για παράδειγμα, μια πηγή μπορεί να στείλει μια διεύθυνση " +"OnionShare σε έναν δημοσιογράφο χρησιμοποιώντας μια διεύθυνση e-mail μιας " +"χρήσης και στη συνέχεια, να περιμένει τον δημοσιογράφο να συμμετάσχει στο " +"δωμάτιο συνομιλίας, χωρίς να διακυβεύεται η ανωνυμία του." #: ../../source/features.rst:169 msgid "How does the encryption work?" @@ -1121,4 +1121,3 @@ msgstr "" #~ "αποθηκευτεί. Τα δωμάτια συνομιλίας OnionShare" #~ " δεν αποθηκεύουν μηνύματα πουθενά, οπότε" #~ " το πρόβλημα μειώνεται στο ελάχιστο." - diff --git a/docs/source/locale/el/LC_MESSAGES/help.po b/docs/source/locale/el/LC_MESSAGES/help.po index d411297d..a56cce4a 100644 --- a/docs/source/locale/el/LC_MESSAGES/help.po +++ b/docs/source/locale/el/LC_MESSAGES/help.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-08-20 13:37-0700\n" -"PO-Revision-Date: 2020-11-28 11:28+0000\n" -"Last-Translator: george k \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 @@ -39,7 +40,6 @@ msgid "Check the GitHub Issues" msgstr "Ελέγξτε τα ζητήματα στο GitHub" #: ../../source/help.rst:12 -#, fuzzy msgid "" "If it isn't on the website, please check the `GitHub issues " "`_. It's possible " @@ -47,7 +47,7 @@ msgid "" "the developers, or maybe even posted a solution." msgstr "" "Εάν δεν υπάρχει στην ιστοσελίδα, παρακαλούμε ελέγξτε στο `GitHub issues " -"`_. Είναι πιθανό και " +"`_. Είναι πιθανό και " "κάποιος άλλος να αντιμετώπισε το ίδιο πρόβλημα και συνομίλησε με τους " "προγραμματιστές ή να δημοσίευσε τη λύση." @@ -63,6 +63,11 @@ msgid "" "`creating a GitHub account `_." msgstr "" +"Αν δεν μπορείτε να βρείτε μια λύση ή θέλετε να θέσετε μια ερώτηση ή να " +"προτείνετε ένα νέο χαρακτηριστικό, παρακαλούμε `υποβάλετε ένα ζήτημα " +"`_. Απαιτείται `η " +"δημιουργία λογαριασμού στο GitHub `_." #: ../../source/help.rst:20 msgid "Join our Keybase Team" @@ -146,4 +151,3 @@ msgstr "" #~ "Απαιτείται η `δημιουργία λογαριασμού GitHub" #~ " `_." - diff --git a/docs/source/locale/el/LC_MESSAGES/install.po b/docs/source/locale/el/LC_MESSAGES/install.po index 16968694..3dbd85dd 100644 --- a/docs/source/locale/el/LC_MESSAGES/install.po +++ b/docs/source/locale/el/LC_MESSAGES/install.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-05-11 20:47+0000\n" -"Last-Translator: Panagiotis Vasilopoulos \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-10 10:03+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 @@ -36,7 +37,7 @@ msgstr "" #: ../../source/install.rst:12 msgid "Linux" -msgstr "" +msgstr "Linux" #: ../../source/install.rst:14 msgid "" @@ -85,7 +86,7 @@ msgstr "" #: ../../source/install.rst:28 msgid "Command-line only" -msgstr "" +msgstr "Μόνο γραμμή εντολών" #: ../../source/install.rst:30 msgid "" @@ -93,6 +94,10 @@ msgid "" "operating system using the Python package manager ``pip``. See :ref:`cli`" " for more information." msgstr "" +"Μπορείτε να εγκαταστήσετε μόνο την έκδοση με τη γραμμή εντολών του " +"OnionShare σε οποιοδήποτε λειτουργικό σύστημα χρησιμοποιώντας τον " +"διαχειριστή πακέτων Python ``pip``. Δείτε το :ref:`cli` για περισσότερες " +"πληροφορίες." #: ../../source/install.rst:35 msgid "Verifying PGP signatures" @@ -183,7 +188,6 @@ msgid "The expected output looks like this::" msgstr "Θα πρέπει να δείτε κάτι όπως::" #: ../../source/install.rst:76 -#, fuzzy msgid "" "If you don't see ``Good signature from``, there might be a problem with " "the integrity of the file (malicious or otherwise), and you should not " @@ -191,11 +195,11 @@ msgid "" " the package, it only means you haven't defined a level of \"trust\" of " "Micah's PGP key.)" msgstr "" -"Εάν δεν εμφανιστεί το 'Σωστή υπογραφή από', ενδέχεται να υπάρχει πρόβλημα" -" με την ακεραιότητα του αρχείου (κακόβουλο ή άλλο) και δεν πρέπει να " -"εγκαταστήσετε το πακέτο. (Η ''ΠΡΟΕΙΔΟΠΟΙΗΣΗ:'' που φαίνεται παραπάνω, δεν" -" αποτελεί πρόβλημα με το πακέτο, σημαίνει μόνο ότι δεν έχετε ήδη ορίσει " -"κανένα επίπεδο 'εμπιστοσύνης' του κλειδιού PGP του Micah.)" +"Εάν δεν εμφανιστεί το ``Σωστή υπογραφή από``, ενδέχεται να υπάρχει πρόβλημα " +"με την ακεραιότητα του αρχείου (κακόβουλο ή άλλο) και δεν πρέπει να " +"εγκαταστήσετε το πακέτο. (Η ``ΠΡΟΕΙΔΟΠΟΙΗΣΗ:`` που φαίνεται παραπάνω, δεν " +"αποτελεί πρόβλημα με το πακέτο, σημαίνει μόνο ότι δεν έχετε ήδη ορίσει " +"κανένα επίπεδο \"εμπιστοσύνης\" του κλειδιού PGP του Micah.)" #: ../../source/install.rst:78 msgid "" @@ -330,4 +334,3 @@ msgstr "" #~ msgid "Command Line Only" #~ msgstr "" - diff --git a/docs/source/locale/el/LC_MESSAGES/security.po b/docs/source/locale/el/LC_MESSAGES/security.po index 85ae72c9..3b313c38 100644 --- a/docs/source/locale/el/LC_MESSAGES/security.po +++ b/docs/source/locale/el/LC_MESSAGES/security.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-10 12:35-0700\n" -"PO-Revision-Date: 2020-12-31 19:29+0000\n" -"Last-Translator: george k \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-10 10:03+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/security.rst:2 @@ -97,13 +98,21 @@ msgid "" "access it (unless the OnionShare user chooses make their service public " "by turning off the private key -- see :ref:`turn_off_private_key`)." msgstr "" +"**Αν ένας κακόβουλος μάθει για την υπηρεσία onion, εξακολουθεί να μην μπορεί " +"να έχει πρόσβαση.** Προηγούμενες επιθέσεις κατά του δικτύου Tor για την " +"απαρίθμηση των υπηρεσιών onion, επέτρεπαν την ανακάλυψη ιδιωτικών " +"διευθύνσεων ``.onion``. Αν μια επίθεση ανακαλύψει μια ιδιωτική διεύθυνση " +"OnionShare, θα πρέπει επίσης να μαντέψει και το ιδιωτικό κλειδί που " +"χρησιμοποιείται για τον έλεγχο ταυτότητας του πελάτη, προκειμένου να έχει " +"πρόσβαση σε αυτήν (εκτός αν ο χρήστης του OnionShare επιλέξει να κάνει την " +"υπηρεσία του δημόσια απενεργοποιώντας το ιδιωτικό κλειδί -- δείτε " +":ref:`turn_off_private_key`)." #: ../../source/security.rst:20 msgid "What OnionShare doesn't protect against" msgstr "Απο τι δεν προστατεύει το OnionShare" #: ../../source/security.rst:22 -#, fuzzy msgid "" "**Communicating the OnionShare address and private key might not be " "secure.** Communicating the OnionShare address to people is the " @@ -116,20 +125,19 @@ msgid "" "or in person. This isn't necessary when using OnionShare for something " "that isn't secret." msgstr "" -"**Η γνωστοποίηση της διεύθυνσης OnionShare ενδέχεται να μην είναι " -"ασφαλής.** Η γνωστοποίηση της διεύθυνσης OnionShare είναι ευθύνη του " -"χρήστη OnionShare. Εάν σταλεί με ασφάλεια (όπως μέσω ενός μηνύματος " -"ηλεκτρονικού ταχυδρομείου που παρακολουθείται από έναν εισβολέα), ένας " -"υποκλοπέας μπορεί να πει ότι χρησιμοποιείται το OnionShare. Εάν ο " -"θποκλοπέας φορτώσει τη διεύθυνση στο Tor Browser ενώ η υπηρεσία είναι " -"ακόμα σε λειτουργία, μπορεί να αποκτήσει πρόσβαση σε αυτήν. Για να " -"αποφευχθεί αυτό, η διεύθυνση πρέπει να κοινοποιείται με ασφάλεια, μέσω " -"κρυπτογραφημένου μηνύματος κειμένου (πιθανώς με ενεργή τη διαγραφή " -"μηνυμάτων), κρυπτογραφημένου email ή αυτοπροσώπως. Δεν είναι απαραίτητο " -"όταν χρησιμοποιείτε το OnionShare για κάτι που δεν είναι μυστικό." +"**Η γνωστοποίηση της διεύθυνσης OnionShare και του ιδιωτικού κλειδιού, " +"ενδέχεται να μην είναι ασφαλής.** Η γνωστοποίηση της διεύθυνσης OnionShare " +"είναι ευθύνη του χρήστη OnionShare. Εάν σταλεί με ασφάλεια (όπως μέσω ενός " +"μηνύματος ηλεκτρονικού ταχυδρομείου που παρακολουθείται από έναν εισβολέα), " +"ένας υποκλοπέας μπορεί να πει ότι χρησιμοποιείται το OnionShare. Εάν ο " +"κακόβουλος φορτώσει τη διεύθυνση στο Tor Browser ενώ η υπηρεσία είναι ακόμα " +"σε λειτουργία, μπορεί να αποκτήσει πρόσβαση. Για να αποφευχθεί αυτό, η " +"διεύθυνση πρέπει να κοινοποιείται με ασφάλεια, μέσω κρυπτογραφημένου " +"μηνύματος κειμένου (πιθανώς με ενεργή τη διαγραφή μηνυμάτων), " +"κρυπτογραφημένου email ή αυτοπροσώπως. Δεν είναι απαραίτητο όταν " +"χρησιμοποιείτε το OnionShare για κάτι που δεν είναι μυστικό." #: ../../source/security.rst:24 -#, fuzzy msgid "" "**Communicating the OnionShare address and private key might not be " "anonymous.** Extra precautions must be taken to ensure the OnionShare " @@ -137,12 +145,12 @@ msgid "" "accessed over Tor, can be used to share the address. This isn't necessary" " unless anonymity is a goal." msgstr "" -"**Η γνωστοποίηση της διεύθυνσης OnionShare ενδέχεται να μην είναι " -"ανώνυμη.** Πρέπει να ληφθούν επιπλέον μέτρα για να διασφαλιστεί ότι η " -"διεύθυνση OnionShare κοινοποιείται ανώνυμα. Ένας νέος λογαριασμός email ή" -" συνομιλίας, προσπελάσιμος μόνο μέσω Tor, μπορεί να χρησιμοποιηθεί για " -"κοινή χρήση της διεύθυνσης. Δεν είναι απαραίτητο εκτός αν η ανωνυμία " -"είναι στόχος." +"**Η γνωστοποίηση της διεύθυνσης OnionShare και του ιδιωτικού κλειδιού, " +"ενδέχεται να μην είναι ανώνυμη.** Πρέπει να ληφθούν επιπλέον μέτρα για να " +"διασφαλιστεί ότι η διεύθυνση OnionShare κοινοποιείται ανώνυμα. Ένας νέος " +"λογαριασμός email ή συνομιλίας, προσπελάσιμος μόνο μέσω Tor, μπορεί να " +"χρησιμοποιηθεί για κοινή χρήση της διεύθυνσης. Δεν είναι απαραίτητο εκτός αν " +"η ανωνυμία είναι απαραίτητη." #~ msgid "Security design" #~ msgstr "" @@ -325,4 +333,3 @@ msgstr "" #~ "turning off the private key -- see" #~ " :ref:`turn_off_private_key`)." #~ msgstr "" - diff --git a/docs/source/locale/el/LC_MESSAGES/tor.po b/docs/source/locale/el/LC_MESSAGES/tor.po index 06067764..dc358baf 100644 --- a/docs/source/locale/el/LC_MESSAGES/tor.po +++ b/docs/source/locale/el/LC_MESSAGES/tor.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2020-12-31 19:29+0000\n" -"Last-Translator: george k \n" -"Language: el\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: george kitsoukakis \n" "Language-Team: el \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -262,18 +263,16 @@ msgid "Using Tor bridges" msgstr "Χρήση γεφυρών Tor" #: ../../source/tor.rst:109 -#, fuzzy msgid "" "If your access to the internet is censored, you can configure OnionShare " "to connect to the Tor network using `Tor bridges " "`_. If OnionShare " "connects to Tor without one, you don't need to use a bridge." msgstr "" -"Εάν η πρόσβασή σας στο Διαδίκτυο λογοκρίνεται, μπορείτε να ρυθμίσετε το " -"OnionShare να συνδέεται στο δίκτυο Tor με χρήση των `Tor bridges " -"`_. Εάν το " -"OnionShare συνδέεται απευθείας στο Tor, δεν χρειάζεται να χρησιμοποιήσετε" -" γέφυρα." +"Εάν λογοκρίνεται η πρόσβασή σας στο Διαδίκτυο, μπορείτε να ρυθμίσετε το " +"OnionShare να συνδέεται με χρήση των `Tor bridges `_. Εάν το OnionShare συνδέεται " +"απευθείας στο Tor, δεν χρειάζεται να χρησιμοποιήσετε μια γέφυρα." #: ../../source/tor.rst:111 msgid "To configure bridges, click the \"⚙\" icon in OnionShare." @@ -511,4 +510,3 @@ msgstr "" #~ "Files (x86)\\``. Μετονομάστε τον εξαχθέν " #~ "φάκελο σε ``Data`` και ``Tor`` μέσα " #~ "στο ``tor-win32``." - diff --git a/docs/source/locale/es/LC_MESSAGES/advanced.po b/docs/source/locale/es/LC_MESSAGES/advanced.po index 711f700f..c548fff3 100644 --- a/docs/source/locale/es/LC_MESSAGES/advanced.po +++ b/docs/source/locale/es/LC_MESSAGES/advanced.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: Santiago Passafiume \n" +"PO-Revision-Date: 2021-10-08 07:03+0000\n" +"Last-Translator: Username1234567890 \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" @@ -54,16 +54,15 @@ msgstr "" " pin aparece a la izquierda de su estado de servidor." #: ../../source/advanced.rst:18 -#, fuzzy msgid "" "When you quit OnionShare and then open it again, your saved tabs will " "start opened. You'll have to manually start each service, but when you do" " they will start with the same OnionShare address and private key." msgstr "" -"Cuando sales de OnionShare y lo vuelves a abrir, tus pestañas guardadas " -"se iniciarán abiertas. Tendrás que arrancar cada servicio manualmente, " -"pero cuando lo hagas, se iniciarán con la misma dirección OnionShare, y " -"con la misma contraseña." +"Cuando sales de OnionShare y lo vuelves a abrir, tus pestañas guardadas se " +"iniciarán abiertas. Tendrás que arrancar cada servicio manualmente, pero " +"cuando lo hagas, se iniciarán con la misma dirección OnionShare, y con la " +"misma llave privada." #: ../../source/advanced.rst:21 msgid "" @@ -76,7 +75,7 @@ msgstr "" #: ../../source/advanced.rst:26 msgid "Turn Off Private Key" -msgstr "" +msgstr "Desactivar la Llave Privada" #: ../../source/advanced.rst:28 msgid "" @@ -91,21 +90,20 @@ msgid "" "When browsing to an OnionShare service in Tor Browser, Tor Browser will " "prompt for the private key to be entered." msgstr "" +"Al navegar a un servicio OnionShare en el Navegador Tor, el Navegador Tor " +"solicitará que se ingrese la llave privada." #: ../../source/advanced.rst:32 -#, fuzzy msgid "" "Sometimes you might want your OnionShare service to be accessible to the " "public, like if you want to set up an OnionShare receive service so the " "public can securely and anonymously send you files. In this case, it's " "better to disable the private key altogether." msgstr "" -"A veces, podrías querer que tu servicio OnionShare sea accesible al " -"público, por ejemplo si quisieras un servicio OnionShare de recepción " -"para que el público pueda enviarte archivos segura y anónimamente. En " -"esta caso, es mejor deshabilitar del todo la contraseña. Si no lo haces, " -"alguien puede forzar a tu servidor para que se detenga efectuando solo 20" -" suposiciones erróneas de tu contraseña, aún si conocen la correcta." +"A veces puede que desee que su servicio de OnionShare sea accesible al " +"público, como si desea configurar un servicio de recepción de OnionShare " +"para que el público pueda enviarle archivos de forma segura y anónima. En " +"este caso, es mejor desactivar la clave privada por completo." #: ../../source/advanced.rst:35 msgid "" @@ -114,6 +112,10 @@ msgid "" "server. Then the server will be public and won't need a private key to " "view in Tor Browser." msgstr "" +"Para desactivar la llave privada en cualquier pestaña, active la casilla de " +"verificación que indica que se trata de un servicio público de OnionShare (" +"desactiva la llave privada) antes de iniciar el servidor. Luego el servidor " +"será público y no necesitará una llave privada para verlo en el Tor Browser." #: ../../source/advanced.rst:40 msgid "Custom Titles" @@ -183,17 +185,16 @@ msgstr "" "nada, puedes cancelarlo antes de su inicio programado." #: ../../source/advanced.rst:60 -#, fuzzy msgid "" "**Scheduling an OnionShare service to automatically stop can be useful to" " limit exposure**, like if you want to share secret documents while " "making sure they're not available on the internet for more than a few " "days." msgstr "" -"**Programar un servicio OnionShare para detenerse automáticamente puede " -"ser útil para limitar la exposición**, como cuando quieras compartir " -"documentos secretos mientras te aseguras que no estarán disponibles en " -"Internet por más de unos pocos días." +"**La programación de un servicio de OnionShare para que se detenga " +"automáticamente puede ser útil para limitar la exposición**, como cuando si " +"usted deseara compartir documentos secretos mientras se asegura de que no " +"están disponibles en el Internet por más de unos pocos días." #: ../../source/advanced.rst:67 msgid "Command-line Interface" @@ -232,6 +233,9 @@ msgid "" "`_ " "in the git repository." msgstr "" +"Para información sobre cómo instalarlo en diferentes sistemas operativos, " +"consulte el \"archivo leeme CLI ` _ en el repositorio de git." #: ../../source/advanced.rst:83 msgid "" diff --git a/docs/source/locale/es/LC_MESSAGES/develop.po b/docs/source/locale/es/LC_MESSAGES/develop.po index a0cb49b3..1ba6855b 100644 --- a/docs/source/locale/es/LC_MESSAGES/develop.po +++ b/docs/source/locale/es/LC_MESSAGES/develop.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2020-12-04 23:29+0000\n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" "Last-Translator: Zuhualime Akoochimoya \n" -"Language: es\n" "Language-Team: none\n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 @@ -62,16 +63,14 @@ msgid "Contributing Code" msgstr "Contribuyendo código" #: ../../source/develop.rst:17 -#, fuzzy msgid "" "OnionShare source code is to be found in this Git repository: " "https://github.com/onionshare/onionshare" msgstr "" -"El código fuente de OnionShare está en este repositorio git: " -"https://github.com/micahflee/onionshare" +"El código fuente de OnionShare está en este repositorio git: https://github." +"com/onionshare/onionshare" #: ../../source/develop.rst:19 -#, fuzzy msgid "" "If you'd like to contribute code to OnionShare, it helps to join the " "Keybase team and ask questions about what you're thinking of working on. " @@ -79,11 +78,11 @@ msgid "" "`_ on GitHub to see if " "there are any you'd like to tackle." msgstr "" -"Si quisieras contribuir código a OnionShare, ayuda unirse al equipo " -"Keybase y hacer preguntas acerca de en qué estás pensando trabajar. " -"También deberías revisar todas las `cuestiones abiertas " -"`_ en GitHub para ver si " -"hay alguna a la cual te gustaría encarar." +"Si quisieras contribuir código a OnionShare, ayuda unirse al equipo Keybase " +"y hacer preguntas acerca de en qué estás pensando trabajar. También deberías " +"revisar todas las `cuestiones abiertas `_ en GitHub para ver si hay alguna a la cual te gustaría " +"encarar." #: ../../source/develop.rst:22 msgid "" @@ -109,6 +108,11 @@ msgid "" "file to learn how to set up your development environment for the " "graphical version." msgstr "" +"OnionShare está desarrollado en Python. Para empezar, clona el repositorio " +"Git en https://github.com/onionshare/onionshare/ y luego consulta el archivo " +"``cli/README.md`` para aprender cómo configurar tu entorno de desarrollo " +"para la versión de consola, y el archivo ``desktop/README.md`` para aprender " +"cómo configurar tu entorno de desarrollo para la versión gráfica." #: ../../source/develop.rst:32 msgid "" @@ -176,15 +180,15 @@ msgstr "" "modoficador ``--local-only``. Por ejemplo:" #: ../../source/develop.rst:165 -#, fuzzy msgid "" "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal " "web-browser like Firefox, instead of using the Tor Browser. The private " "key is not actually needed in local-only mode, so you can ignore it." msgstr "" -"En este caso, cargas el URL ``http://onionshare:train-" -"system@127.0.0.1:17635`` en un navegador web normal como Firefox, en vez " -"de usar al Navegador Tor." +"En este caso, cargas el URL ``http://127.0.0.1:17641`` en un navegador web " +"normal como Firefox, en vez de usar al Navegador Tor. No se precisa " +"realmente la clave privada en el modo 'solo local', por lo que puedes " +"ignorarla." #: ../../source/develop.rst:168 msgid "Contributing Translations" @@ -463,4 +467,3 @@ msgstr "" #~ " de línea de comando, y el " #~ "archivo ``desktop/README.md`` para aprender " #~ "cómo hacerlo para la versión gráfica." - diff --git a/docs/source/locale/es/LC_MESSAGES/features.po b/docs/source/locale/es/LC_MESSAGES/features.po index 8da51e51..85e0a68b 100644 --- a/docs/source/locale/es/LC_MESSAGES/features.po +++ b/docs/source/locale/es/LC_MESSAGES/features.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: Raul \n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: Zuhualime Akoochimoya \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" @@ -123,7 +123,6 @@ msgstr "" "empezar a compartir." #: ../../source/features.rst:39 -#, fuzzy msgid "" "As soon as someone finishes downloading your files, OnionShare will " "automatically stop the server, removing the website from the internet. To" @@ -132,10 +131,10 @@ msgid "" "box." msgstr "" "Tan pronto como alguien termine de descargar tus archivos, OnionShare " -"detendrá automáticamente al servidor, removiendo al sitio web de " -"Internet. Para permitirle descargarlos a múltiples personas, desmarca la " -"casilla \"Detener compartición después de que los archivos han sido " -"enviados (desmarca para permitir la descarga de archivos individuales)\"." +"detendrá automáticamente al servidor, removiendo al sitio web de Internet. " +"Para permitirles descargarlos a múltiples personas, desmarca la casilla " +"\"Detener compartición después de que los archivos han sido enviados (" +"desmarca para permitir la descarga de archivos individuales)\"." #: ../../source/features.rst:42 msgid "" @@ -162,30 +161,27 @@ msgstr "" "archivos." #: ../../source/features.rst:48 -#, fuzzy msgid "" "Now that you have a OnionShare, copy the address and the private key and " "send it to the person you want to receive the files. If the files need to" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" -"Ahora que tienes un OnionShare, copia la dirección y envíasela a la " -"persona que quieres que reciba los archivos. Si necesitan permanecer " -"seguros, o si la persona está expuesta a cualquier otro peligro, usa una " -"aplicación de mensajería cifrada." +"Ahora que tienes un OnionShare, copia la dirección y la clave privada y " +"envíaselas a la persona que quieres que reciba los archivos. Si necesitan " +"permanecer seguros, o si la persona está expuesta a cualquier otro peligro, " +"usa una aplicación de mensajería cifrada." #: ../../source/features.rst:50 -#, fuzzy msgid "" "That person then must load the address in Tor Browser. After logging in " "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" -"Esa persona debe cargar luego la dirección en el Navegador Tor. Después " -"de iniciar sesión con la contraseña aleatoria incluída en la dirección " -"web, serán capaces de descargar los archivos directamente desde tu " -"computadora haciendo clic en el vínculo \"Descargar Archivos\" en la " -"esquina." +"Esa persona debe cargar luego la dirección en el Navegador Tor. Después de " +"iniciar sesión con la clave privada, los archivos pueden descargarse " +"directamente desde tu computadora haciendo clic en el vínculo \"Descargar " +"Archivos\" en la esquina." #: ../../source/features.rst:55 msgid "Receive Files and Messages" @@ -304,18 +300,16 @@ msgid "Use at your own risk" msgstr "Úsalo a tu propio riesgo" #: ../../source/features.rst:88 -#, fuzzy msgid "" "Just like with malicious email attachments, it's possible someone could " "try to attack your computer by uploading a malicious file to your " "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" -"De la misma manera que con adjuntos maliciosos en correos electrónicos, " -"es posible que alguien pudiera intentar atacar tu computadora subiendo un" -" archivo malicioso a tu servicio OnionShare, el cual no añade ningún " -"mecanismo de seguridad para proteger tu sistema contra archivos " -"maliciosos." +"De la misma manera que con adjuntos maliciosos en correos electrónicos, es " +"posible que alguien pudiera intentar atacar tu computadora subiendo a tu " +"servicio OnionShare un archivo malicioso. OnionShare no añade ningún " +"mecanismo de seguridad para proteger tu sistema contra archivos maliciosos." #: ../../source/features.rst:90 msgid "" @@ -344,29 +338,26 @@ msgid "Tips for running a receive service" msgstr "Consejos para correr un servicio de recepción" #: ../../source/features.rst:97 -#, fuzzy msgid "" "If you want to host your own anonymous dropbox using OnionShare, it's " "recommended you do so on a separate, dedicated computer always powered on" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" -"Si quieres alojar tu propio buzón anónimo usando OnionShare, es " -"recomendado que lo hagas en una computadora dedicada y separada, que " -"siempre esté encendida y conectada a Internet, y no en la que usas " -"regularmente." +"Si quieres alojar tu propio buzón anónimo usando OnionShare, es recomendado " +"que lo hagas en una computadora dedicada y separada, que siempre esté " +"encendida y conectada a Internet, y no en la que usas regularmente." #: ../../source/features.rst:99 -#, fuzzy msgid "" "If you intend to put the OnionShare address on your website or social " "media profiles, save the tab (see :ref:`save_tabs`) and run it as a " "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" -"Si tu intención es publicitar la dirección OnionShare en tu sitio web o " -"tus perfiles de redes sociales, guarda la pestaña (ver :ref:`save_tabs`) " -"y córrela como un servicio público (ver :ref:`turn_off_passwords`). " +"Si tu intención es publicitar la dirección OnionShare en tu sitio web o tus " +"perfiles de redes sociales, guarda la pestaña (ver :ref:`save_tabs`) y " +"ejecútala como un servicio público (ver :ref:`turn_off_private_key`). " "También es una buena idea darle un título personalizado (ver " ":ref:`custom_titles`)." @@ -416,7 +407,6 @@ msgid "Content Security Policy" msgstr "Política de Seguridad de Contenido" #: ../../source/features.rst:119 -#, fuzzy msgid "" "By default OnionShare helps secure your website by setting a strict " "`Content Security Policy " @@ -424,11 +414,10 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" -"Por defecto, OnionShare te ayudará a asegurar tu sitio web estableciendo " -"un encabezado de `Política de Seguridad de Contenido " -"`_ estricto. Sin " -"embargo, esto evitará que el contenido de terceros sea cargado dentro de " -"la página web." +"Por defecto, OnionShare te ayuda a asegurar tu sitio web estableciendo un " +"encabezado de `Política de Seguridad de Contenido `_ estricto. Sin embargo, esto evitará que el " +"contenido de terceros sea cargado dentro de la página web." #: ../../source/features.rst:121 msgid "" @@ -448,7 +437,6 @@ msgid "Tips for running a website service" msgstr "Consejos para correr un servicio de sitio web" #: ../../source/features.rst:126 -#, fuzzy msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -457,22 +445,20 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" -"Si quieres alojar un sitio web a largo plazo usando OnionShare (que no " -"sea solo para mostrarle algo a alguien rápidamente), es recomendado que " -"lo hagas en una computadora separada y dedicada, que siempre esté " -"encendida y conectada a Internet, y no en la que usas regularmente. " -"Guarda la pestaña (mira :ref:`save_tabs`) con el fin de que puedas " -"reanudar al sitio web con la misma dirección, si cierras OnionShare y lo " -"vuelves a iniciar más tarde." +"Si quieres alojar un sitio web a largo plazo usando OnionShare (que no sea " +"solo para mostrarle algo a alguien rápidamente), es recomendado que lo hagas " +"en una computadora separada y dedicada, que siempre esté encendida y " +"conectada a Internet, y no en la que usas regularmente. Guarda la pestaña (" +"mira :ref:`save_tabs`) con el fin de que puedas reanudar al sitio web con la " +"misma dirección, si cierras OnionShare y lo vuelves a iniciar más tarde." #: ../../source/features.rst:129 -#, fuzzy msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" -"Si planeas que tu sitio web sea visto por el público, deberías ejecutarlo" -" como servicio público (see :ref:`turn_off_passwords`)." +"Si planeas que tu sitio web sea visto por el público, deberías ejecutarlo " +"como servicio público (see :ref:`turn_off_private_key`)." #: ../../source/features.rst:132 msgid "Chat Anonymously" @@ -488,17 +474,17 @@ msgstr "" "haz clic en \"Iniciar servidor de chat\"." #: ../../source/features.rst:138 -#, fuzzy msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" -"Después de iniciar el servidor, copie la dirección de OnionShare y " -"envíela a las personas que desee en la sala de chat anónima. Si es " -"importante limitar exactamente quién puede unirse, use una aplicación de " -"mensajería encriptada para enviar la dirección de OnionShare." +"Después de iniciar el servidor, copia la dirección de OnionShare y la clave " +"privada y envíaselas a las personas que deseas en la sala de charla anónima. " +"Si es importante limitar exactamente quién puede unirse, usa una aplicación " +"de mensajería cifrada para enviar la dirección de OnionShare y la clave " +"privada." #: ../../source/features.rst:143 msgid "" @@ -570,9 +556,17 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" +"Si por ejemplo envías un mensaje a un grupo de Signal, una copia de tu " +"mensaje termina en cada dispositivo (los teléfonos inteligentes y " +"computadoras, si usan Signal para escritorio) de cada miembro del grupo. " +"Incluso si la opción desaparición de mensajes está activada, es difícil " +"confirmar si todas las copias de los mensajes han sido eliminadas de todos " +"los dispositivos, y cualesquiera otros lugares (como bases de datos de " +"notificaciones) donde puedan haber sido guardados. Las salas de charla de " +"OnionShare no guardan los mensajes en ningún lado, de forma que este " +"problema se reduce al mínimo." #: ../../source/features.rst:165 -#, fuzzy msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -581,12 +575,12 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" -"Los cuartos de chat OnionShare también pueden ser útiles para personas " -"anónimas que quieran charlar en forma segura con alguien sin necesitar " -"crear alguna cuenta. Por ejemplo, una fuente puede enviar una dirección " -"OnionShare a un periodista usando una dirección de correo electrónico " -"descartable, y luego esperar a que el periodista se una al cuarto de " -"chat, todo eso sin comprometer su anonimato." +"Las salas de charla de OnionShare también pueden ser útiles para personas " +"anónimas que quieran charlar en forma segura con alguien sin necesitar crear " +"alguna cuenta. Por ejemplo, una fuente puede enviar una dirección OnionShare " +"a un periodista usando una dirección de correo electrónico descartable, y " +"luego esperar a que el periodista se una a la sala de charla, todo eso sin " +"comprometer su anonimato." #: ../../source/features.rst:169 msgid "How does the encryption work?" diff --git a/docs/source/locale/es/LC_MESSAGES/install.po b/docs/source/locale/es/LC_MESSAGES/install.po index 79e5c1a4..2fc8c25d 100644 --- a/docs/source/locale/es/LC_MESSAGES/install.po +++ b/docs/source/locale/es/LC_MESSAGES/install.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-09-21 15:39+0000\n" -"Last-Translator: carlosm2 \n" +"PO-Revision-Date: 2021-10-09 09:04+0000\n" +"Last-Translator: Zuhualime Akoochimoya \n" "Language-Team: none\n" "Language: es\n" "MIME-Version: 1.0\n" @@ -82,7 +82,7 @@ msgstr "" #: ../../source/install.rst:28 msgid "Command-line only" -msgstr "" +msgstr "Solo línea de comandos" #: ../../source/install.rst:30 msgid "" @@ -90,10 +90,13 @@ msgid "" "operating system using the Python package manager ``pip``. See :ref:`cli`" " for more information." msgstr "" +"Puedes instalar solo la versión de consola de OnionShare en cualquier " +"sistema operativo usando el gestor de paquetes ``pip`` de Python. Ver " +":ref:`cli` para más información." #: ../../source/install.rst:35 msgid "Verifying PGP signatures" -msgstr "Verificar firmas PGP" +msgstr "Verificando firmas PGP" #: ../../source/install.rst:37 msgid "" @@ -179,7 +182,6 @@ msgid "The expected output looks like this::" msgstr "La salida esperada se parece a esta::" #: ../../source/install.rst:76 -#, fuzzy msgid "" "If you don't see ``Good signature from``, there might be a problem with " "the integrity of the file (malicious or otherwise), and you should not " @@ -187,11 +189,11 @@ msgid "" " the package, it only means you haven't defined a level of \"trust\" of " "Micah's PGP key.)" msgstr "" -"Si no ves 'Good signature from', entonces podría haber un problema con la" -" integridad del archivo (malicioso u otra causa), y no deberías instalar " -"el paquete. (La \"ADVERTENCIA:\" mostrada arriba no es un problema con el" -" paquete: solamente significa que no has definido ningún nivel de " -"'confianza' con respecto a la clave PGP de Micah.)" +"Si no ves 'Good signature from', entonces podría haber un problema con la " +"integridad del archivo (malicioso u otra causa), y no deberías instalar el " +"paquete. (La \"ADVERTENCIA:\" mostrada arriba no es un problema con el " +"paquete: solamente significa que no has definido ningún nivel de 'confianza' " +"con respecto a la clave PGP de Micah.)" #: ../../source/install.rst:78 msgid "" diff --git a/docs/source/locale/fr/LC_MESSAGES/advanced.po b/docs/source/locale/fr/LC_MESSAGES/advanced.po index 57610ed9..91db3662 100644 --- a/docs/source/locale/fr/LC_MESSAGES/advanced.po +++ b/docs/source/locale/fr/LC_MESSAGES/advanced.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: EdwardCage \n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -21,11 +21,11 @@ msgstr "" #: ../../source/advanced.rst:2 msgid "Advanced Usage" -msgstr "Usage avancé" +msgstr "Utilisation Avancée" #: ../../source/advanced.rst:7 msgid "Save Tabs" -msgstr "" +msgstr "Sauvegarder les onglets" #: ../../source/advanced.rst:9 msgid "" @@ -35,6 +35,11 @@ msgid "" "useful if you want to host a website available from the same OnionShare " "address even if you reboot your computer." msgstr "" +"Tout dans OnionShare est temporaire par défaut. Si vous fermez un onglet, " +"son adresse n'existe plus et ne pourra plus être utilisée. Dans certains " +"cas, vous voudrez qu'un service OnionShare soit persistent. Cela est utile " +"si vous souhaitez héberger un site web dont l'adresse OnionShare reste " +"identique même après un redémarrage de votre ordinateur." #: ../../source/advanced.rst:13 msgid "" @@ -42,6 +47,10 @@ msgid "" "open it when I open OnionShare\" box before starting the server. When a " "tab is saved a purple pin icon appears to the left of its server status." msgstr "" +"Pour rendre un onglet persistant, cocher la case \"Enregistrer cet onglet et " +"l’ouvrir automatiquement quand j’ouvre OnionShare\" avant de démarrer le " +"serveur. Quand un onglet est sauvegardé un icône d'épingle violet apparaît à " +"la gauche du statut du serveur." #: ../../source/advanced.rst:18 msgid "" @@ -55,6 +64,8 @@ msgid "" "If you save a tab, a copy of that tab's onion service secret key will be " "stored on your computer with your OnionShare settings." msgstr "" +"Si vous sauvegarder un onglet, une copie de la clé secrète de ce service " +"ognon sera stocké dans votre ordinateur avec vos paramètres OnionShare." #: ../../source/advanced.rst:26 msgid "Turn Off Passwords" @@ -87,7 +98,7 @@ msgstr "" #: ../../source/advanced.rst:38 msgid "Scheduled Times" -msgstr "" +msgstr "Programmation horaire" #: ../../source/advanced.rst:40 msgid "" @@ -97,6 +108,11 @@ msgid "" "scheduled time\", \"Stop onion service at scheduled time\", or both, and " "set the respective desired dates and times." msgstr "" +"OnionShare permet de planifier quand un service doit démarrer ou s'arrêter. " +"Avant de démarrer un serveur, cliquer \"Afficher les paramètres avancés\" " +"dans l'onglet et cocher une ou les deux cases \"Démarrer un service onion à " +"une heure prédéterminée\" ou \" Arrêter un service onion à une heure " +"prédéterminée\", et définissez les dates et heures souhaitées." #: ../../source/advanced.rst:43 msgid "" @@ -105,6 +121,11 @@ msgid "" "starts. If you scheduled it to stop in the future, after it's started you" " will see a timer counting down to when it will stop automatically." msgstr "" +"Si vous paramétrez un service pour qu'il démarre dans le futur, quand vous " +"cliquer le bouton \"Commencer le partage\", un compte à rebours s'affichera " +"jusqu'au démarrage du service. Si vous le paramétrez pour qu'il s'arrête " +"dans le futur, après son démarrage un compte à rebours jusqu'à son arrêt " +"automatique s'affichera." #: ../../source/advanced.rst:46 msgid "" @@ -113,6 +134,10 @@ msgid "" "time in the future if anything happens to you. If nothing happens to you," " you can cancel the service before it's scheduled to start." msgstr "" +"**Planifier le démarrage automatique d'un service OnionShare peut être " +"utilisé comme une veille automatique**, le service deviendra public à un " +"moment choisis dans le futur si quelque chose vous arrive. Si rien ne vous " +"arrive, vous pouvez annuler le service avant qu'il ne se lance." #: ../../source/advanced.rst:51 msgid "" @@ -124,29 +149,35 @@ msgstr "" #: ../../source/advanced.rst:56 msgid "Command-line Interface" -msgstr "" +msgstr "Interface en ligne de commande" #: ../../source/advanced.rst:58 msgid "" "In addition to its graphical interface, OnionShare has a command-line " "interface." msgstr "" +"En plus de son interface graphique, OnionShare dispose d'une interface en " +"ligne de commande." #: ../../source/advanced.rst:60 msgid "" "You can install just the command-line version of OnionShare using " "``pip3``::" msgstr "" +"Vous pouvez installez uniquement la version en ligne de commande " +"d'OnionShare en utilisant ``pip3``::" #: ../../source/advanced.rst:64 msgid "" "Note that you will also need the ``tor`` package installed. In macOS, " "install it with: ``brew install tor``" msgstr "" +"Notez que vous aurez aussi besoin d'installer le paquet ``tor``. Sur macOS, " +"installez le avec : ``brew install tor``" #: ../../source/advanced.rst:66 msgid "Then run it like this::" -msgstr "" +msgstr "Puis lancez le avec ::" #: ../../source/advanced.rst:70 msgid "" @@ -154,16 +185,21 @@ msgid "" "also just run ``onionshare.cli`` to access the command-line interface " "version." msgstr "" +"Si vous installez OnionShare en utilisant le paquet Linux Snapcraft, vous " +"pouvez vous contentez de lancer ``onionshare.cli`` pour accéder à " +"l'interface en ligne de commande." #: ../../source/advanced.rst:73 msgid "Usage" -msgstr "" +msgstr "Utilisation" #: ../../source/advanced.rst:75 msgid "" "You can browse the command-line documentation by running ``onionshare " "--help``::" msgstr "" +"Vous pouvez consultez la documentation de l'interface en ligne de commande " +"en lançant ``onionshare --help``::" #: ../../source/advanced.rst:132 msgid "Legacy Addresses" diff --git a/docs/source/locale/fr/LC_MESSAGES/develop.po b/docs/source/locale/fr/LC_MESSAGES/develop.po index a8b23ac9..4411341d 100644 --- a/docs/source/locale/fr/LC_MESSAGES/develop.po +++ b/docs/source/locale/fr/LC_MESSAGES/develop.po @@ -6,25 +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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: Automatically generated\n" -"Language: fr\n" +"PO-Revision-Date: 2021-10-24 21:38+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 msgid "Developing OnionShare" -msgstr "" +msgstr "Développer OnionShare" #: ../../source/develop.rst:7 msgid "Collaborating" -msgstr "" +msgstr "Collaborer" #: ../../source/develop.rst:9 msgid "" @@ -37,6 +38,15 @@ msgid "" "`_. Within the app, go to \"Teams\", " "click \"Join a Team\", and type \"onionshare\"." msgstr "" +"OnionShare dipose d'une équipe Keybase ouverte pour discuter du projet, " +"poser des questions, partager des idées et concents, et concevoir les " +"évolutions à venir. (C'est aussi une manière facile d'envoyer des messages " +"personnels chiffrés de bout-en-bout à d'autres personnes de la communauté " +"OnionShare, comme des adresses OnionShare.) Pour utiliser Keybase, " +"télécharger l'`application Keybase `_, créer un " +"compte, et `rejoignez cette équipe `_. " +"Dans l'application, allez à \"Teams\", cliquer sur \"Join a Team\", et " +"écrivez \"onionshare\"." #: ../../source/develop.rst:12 msgid "" @@ -44,10 +54,13 @@ msgid "" "`_ for developers " "and and designers to discuss the project." msgstr "" +"OnionShare a aussi une `liste de diffusion `_ pour permettre aux développeurs et concepteurs " +"de discuter du projet." #: ../../source/develop.rst:15 msgid "Contributing Code" -msgstr "" +msgstr "Contribuer au code" #: ../../source/develop.rst:17 msgid "" @@ -70,10 +83,14 @@ msgid "" "repository and one of the project maintainers will review it and possibly" " ask questions, request changes, reject it, or merge it into the project." msgstr "" +"Quand vous êtes prêt à contribuer au code, faites une demande d'extraction " +"dans le répertoire GitHub et un des mainteneurs du projet l'évaluera et si " +"possible posera des questions, demanderas des changements, la rejettera, ou " +"la fusionnera dans le projet." #: ../../source/develop.rst:27 msgid "Starting Development" -msgstr "" +msgstr "Commencer le développement" #: ../../source/develop.rst:29 msgid "" @@ -91,14 +108,17 @@ msgid "" "install dependencies for your platform, and to run OnionShare from the " "source tree." msgstr "" +"Ces fichiers contiennent les instructions techniques nécessaires et les " +"commandes nécessaires pour installer les dépendances pour votre plateforme, " +"et pour faire fonctionner OnionShare depuis les sources." #: ../../source/develop.rst:35 msgid "Debugging tips" -msgstr "" +msgstr "Conseils pour le débogage" #: ../../source/develop.rst:38 msgid "Verbose mode" -msgstr "" +msgstr "Mode texte" #: ../../source/develop.rst:40 msgid "" @@ -108,12 +128,20 @@ msgid "" "initialized, when events occur (like buttons clicked, settings saved or " "reloaded), and other debug info. For example::" msgstr "" +"Quand vous développez, il est pratique de faire tourner OnionShare depuis un " +"terminal et d'ajouter le paramètre ``--verbose`` (ou ``-v``) à la commande. " +"Cela affiche de nombreux messages utiles dans le terminal, comme le moment " +"où certains objets sont initialisés, quand des évènements se produisent (" +"comme des boutons qui sont cliqués, des paramètres qui sont sauvegardés ou " +"rechargés), et d'autres information de débogage. Par exemple ::" #: ../../source/develop.rst:117 msgid "" "You can add your own debug messages by running the ``Common.log`` method " "from ``onionshare/common.py``. For example::" msgstr "" +"Vous pouvez rajouter vos propres messages de débogage en activant la méthode " +"``Common.log`` depuis ``onionshare/common.py``. Par exemple ::" #: ../../source/develop.rst:121 msgid "" @@ -121,10 +149,13 @@ msgid "" "using OnionShare, or the value of certain variables before and after they" " are manipulated." msgstr "" +"Cela peut être utilise quand on apprend la succession des évènements qui se " +"produisent lorsque l'on utilise OnionShare, ou la valeur de certaines " +"variables avant et après qu'elles aient été manipulées." #: ../../source/develop.rst:124 msgid "Local Only" -msgstr "" +msgstr "Uniquement en local" #: ../../source/develop.rst:126 msgid "" @@ -132,6 +163,9 @@ msgid "" "altogether during development. You can do this with the ``--local-only`` " "flag. For example::" msgstr "" +"Tor est lent, et il est souvent pratique d'éviter de démarrer les services " +"ognons durant le développement. Vous pouvez faire ça avec le paramètre " +"``--local-only``. Par exemple ::" #: ../../source/develop.rst:164 msgid "" @@ -142,7 +176,7 @@ msgstr "" #: ../../source/develop.rst:167 msgid "Contributing Translations" -msgstr "" +msgstr "Contribuer aux traductions" #: ../../source/develop.rst:169 msgid "" @@ -152,20 +186,27 @@ msgid "" "\"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if " "needed." msgstr "" +"Aidez à rendre OnionShare plus facile à utiliser, plus familier et plus " +"accueillant pour les gens en le traduisant sur `Hosted Weblate " +"`_. Garder toujours le " +"terme \"OnionShare\" en lettre latine, et utiliser \"OnionShare (nom local)\"" +" si nécessaire." #: ../../source/develop.rst:171 msgid "To help translate, make a Hosted Weblate account and start contributing." -msgstr "" +msgstr "Pour aider à traduire, créez un compte Hosted Weblate et contribuer." #: ../../source/develop.rst:174 msgid "Suggestions for Original English Strings" -msgstr "" +msgstr "Suggestions pour les lignes anglaises d'origine" #: ../../source/develop.rst:176 msgid "" "Sometimes the original English strings are wrong, or don't match between " "the application and the documentation." msgstr "" +"Parfois les lignes anglaises de base sont fausses, ou ne correspondent pas " +"entre l'application et la documentation." #: ../../source/develop.rst:178 msgid "" @@ -174,10 +215,15 @@ msgid "" "developers see the suggestion, and can potentially modify the string via " "the usual code review processes." msgstr "" +"Classer les améliorations sur les lignes sources en ajoutant @kingu à votre " +"commentaire Weblate, ou en ouvrant une \"issue\" GitHub ou requête " +"d'extraction. La dernière solution garanti que tout les développeurs en " +"amont voient la suggestion, et puisse potentiellement modifier la ligne à " +"travers les processus de vérification du code habituel." #: ../../source/develop.rst:182 msgid "Status of Translations" -msgstr "" +msgstr "État des traductions" #: ../../source/develop.rst:183 msgid "" @@ -185,6 +231,9 @@ msgid "" "in a language not yet started, please write to the mailing list: " "onionshare-dev@lists.riseup.net" msgstr "" +"Voilà l'état actuel des traductions. Si vous voulez commencer une traduction " +"dans une nouvelle langue, merci d'écrire à la liste de diffusion : " +"onionshare-dev@lists.riseup.net" #~ msgid "" #~ "OnionShare is developed in Python. To" @@ -401,4 +450,3 @@ msgstr "" #~ msgid "Do the same for other untranslated lines." #~ msgstr "" - diff --git a/docs/source/locale/fr/LC_MESSAGES/features.po b/docs/source/locale/fr/LC_MESSAGES/features.po index 59dcea4c..68eecf05 100644 --- a/docs/source/locale/fr/LC_MESSAGES/features.po +++ b/docs/source/locale/fr/LC_MESSAGES/features.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: EdwardCage \n" +"PO-Revision-Date: 2021-10-24 21:38+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -29,6 +29,9 @@ msgid "" "other people as `Tor `_ `onion services " "`_." msgstr "" +"Les serveurs web sont démarrés automatiquement sur votre ordinateur et " +"rendus accessibles à autrui en tant que `service ognon `_ `Tor `_ ." #: ../../source/features.rst:8 msgid "" @@ -66,10 +69,15 @@ msgid "" "Tor onion services too, it also protects your anonymity. See the " ":doc:`security design ` for more info." msgstr "" +"Parce que votre propre ordinateur est le serveur web, *aucun tiers ne peut " +"accéder à ce qui se passe sur OnionShare*, pas même les développeurs " +"d'OnionShare. C'est totalement confidentiel. Et parce que OnionShare est " +"basé sur les services oignons Tor, cela protège aussi votre anonyma. Voir le " +":doc:`security design `pour plus d'information." #: ../../source/features.rst:21 msgid "Share Files" -msgstr "" +msgstr "Partager des fichiers" #: ../../source/features.rst:23 msgid "" @@ -77,12 +85,19 @@ msgid "" "anonymously. Open a share tab, drag in the files and folders you wish to " "share, and click \"Start sharing\"." msgstr "" +"Vous pouvez utiliser OnionShare pour envoyer des fichiers et des dosiers à " +"des personnes de manière sécurisé et anonyme. Ouvrez un onglet partage, " +"déplacez dedans les fichiers et les dossiers que vous souhaitez partager, et " +"cliquer \"Commencer à partager\"." #: ../../source/features.rst:27 ../../source/features.rst:93 msgid "" "After you add files, you'll see some settings. Make sure you choose the " "setting you're interested in before you start sharing." msgstr "" +"Après avoir ajouté les fichiers, vous allez voir certains paramètres. Soyez " +"certains de choisir les paramètres qui vous intéressent avant de commencer à " +"partager." #: ../../source/features.rst:31 msgid "" @@ -99,6 +114,9 @@ msgid "" "individual files you share rather than a single compressed version of all" " the files." msgstr "" +"Aussi, si vous décochez cette case, les personnes seront capables de " +"télécharger les fichiers individuels que vous partagez plutôt qu'une unique " +"version compressée de tout les fichiers." #: ../../source/features.rst:36 msgid "" @@ -107,6 +125,11 @@ msgid "" " website down. You can also click the \"↑\" icon in the top-right corner " "to show the history and progress of people downloading files from you." msgstr "" +"Quand vous être prêt à partager, cliquer sur le bouton \"Commencer à " +"partager\". Vous pouvez toujours cliquer \"Arrêter de partager\", ou quitter " +"OnionShare, mettant immédiatement le site hors-ligne. Vous pouvez aussi " +"cliquer l'icône \"↑\" dans le coin en haut à droite pour montrer " +"l'historique et la progression des personnes qui téléchargent vos fichiers." #: ../../source/features.rst:40 msgid "" @@ -147,6 +170,9 @@ msgid "" "You can also click the down \"↓\" icon in the top-right corner to show " "the history and progress of people sending files to you." msgstr "" +"Vous pouvez aussi cliquer l'icône \"↓\" dans le coin en haut à droite pour " +"montrer l'historique et la progression des personnes qui vous envoient des " +"fichiers." #: ../../source/features.rst:60 msgid "Here is what it looks like for someone sending you files." @@ -168,10 +194,16 @@ msgid "" "quite as secure version of `SecureDrop `_, the " "whistleblower submission system." msgstr "" +"Mettre en place un service de récupération OnionSare est utile pour les " +"journalistes et celleux qui ont besoin d'accepter de manière sécurisée des " +"documents depuis une source anonyme. Utilisé de cette manière, OnionShare " +"est une sorte de plus légère, plus simple et pas aussi sécurisé version de `" +"SecureDrop `_, le système de soumission pour les " +"lanceurs d'alerte." #: ../../source/features.rst:69 msgid "Use at your own risk" -msgstr "" +msgstr "Utiliser à vos propres risques" #: ../../source/features.rst:71 msgid "" @@ -190,10 +222,16 @@ msgid "" "`_ or in a `Qubes `_ " "disposableVM." msgstr "" +"Si vous recevez un document Office ou un PDF depuis OnionShare, vous pouvez " +"convertir ces documents en PDFs qui sont sans danger à ouvrir en utilisant `" +"Dangerzone `_. Vous pouvez aussi vous protéger en " +"ouvrant ces documents non approuvé en les ouvrant dans `Tails `_ ou dans machine virtuel jetable `Qubes `_." #: ../../source/features.rst:76 msgid "Tips for running a receive service" -msgstr "" +msgstr "Conseils pour faire tourner un service de réception" #: ../../source/features.rst:78 msgid "" @@ -212,7 +250,7 @@ msgstr "" #: ../../source/features.rst:83 msgid "Host a Website" -msgstr "" +msgstr "Héberger un site web" #: ../../source/features.rst:85 msgid "" @@ -220,6 +258,10 @@ msgid "" "the files and folders that make up the static content there, and click " "\"Start sharing\" when you are ready." msgstr "" +"Pour héberger un site internet HTML statique avec OnionShare, ouvrez un " +"onglet site internet, déplacez les fichiers et dossiers qui composeront le " +"contenu statique dedans, et cliquez sur \"Commencer à partager\" quand vous " +"êtes prêt." #: ../../source/features.rst:89 msgid "" @@ -230,6 +272,13 @@ msgid "" "websites that execute code or use databases. So you can't for example use" " WordPress.)" msgstr "" +"Si vous ajoutez un fichier ``index.html``, cela sera généré quand quelqu'un " +"chargera votre site. Vous pouvez aussi inclure n'importe quel autre type de " +"fichiers HTML, CSS ou JavaScript, ainsi que des images pour faire votre " +"site. (Notez que OnionShare ne supporte que l'hébergement de sites internets " +"\"statique\". Il ne peut pas héberger des sites internets qui éxécute du " +"code ou utilise des bases de données. Ainsi vous ne pouvez pas utilisez " +"WordPress.)" #: ../../source/features.rst:91 msgid "" @@ -237,10 +286,13 @@ msgid "" "listing instead, and people loading it can look through the files and " "download them." msgstr "" +"Si vous n'avez pas un fichier ``index.html``, cela montrera une liste des " +"répertoires à la place, et les personnes le chargeant pourront parcourir les " +"fichiers et les télécharger." #: ../../source/features.rst:98 msgid "Content Security Policy" -msgstr "" +msgstr "Politique de sécurité du contenu" #: ../../source/features.rst:100 msgid "" @@ -258,10 +310,14 @@ msgid "" "Policy header (allows your website to use third-party resources)\" box " "before starting the service." msgstr "" +"Si vous voulez charger du contenu depuis des sites internets tiers, comme " +"des \"assets\" ou des bibliothèque JavaScript depuis des CDNs, vérifiez la " +"case « Ne pas envoyer d’en-tête Politique de sécurité de contenu (permet à " +"votre site Web d’utiliser des ressources tierces »." #: ../../source/features.rst:105 msgid "Tips for running a website service" -msgstr "" +msgstr "Conseils pour faire fonctionner un site web de service" #: ../../source/features.rst:107 msgid "" @@ -281,13 +337,16 @@ msgstr "" #: ../../source/features.rst:113 msgid "Chat Anonymously" -msgstr "" +msgstr "Discuter anonymement" #: ../../source/features.rst:115 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" +"Vous pouvez utilisez OnionShare pour mettre en place une salle de discussion " +"privée et sécurisée qui n'enregistre rien. Ouvez juste un onglet discussion " +"et cliquer \"Lancer le serveur de discussion\"." #: ../../source/features.rst:119 msgid "" @@ -304,6 +363,11 @@ msgid "" "participate must have their Tor Browser security level set to " "\"Standard\" or \"Safer\", instead of \"Safest\"." msgstr "" +"Les gens peuvent rejoindre la salle de discussion en chargeant l'adresse " +"OnionShare dans le navigateur Tor. La salle de discussion nécessite " +"JavaScript, celleux qui souhaitent rejoindre la salle de discussion doivent " +"mettre le niveau de sécurité de leur navigateur Tor à « Normal » ou « Plus " +"sûr », à la place de « Le plus sûr »." #: ../../source/features.rst:127 msgid "" @@ -312,12 +376,20 @@ msgid "" "and pressing ↵. Since the chat history isn't saved anywhere, it doesn't " "get displayed at all, even if others were already chatting in the room." msgstr "" +"Quand une personne rejoint la salle de discussion, elle reçoit un nom " +"aléatoire. Elle peut changer son nom en tapant un nouveau nom dans l'espace " +"à gauche et en pressant ↵. Comme l'historique de la discussion n'est " +"enregistré nulle part, il n'est pas du tout affiché, même si d'autres " +"personnes étaient déjà en train de discuter dans la salle." #: ../../source/features.rst:133 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." msgstr "" +"Dans une salle de discussion OnionShare, tout le monde est anonyme. " +"N'importe qui peut changer son nom en n'importe quoi, et il n'y a aucun " +"moyen de vérifier l'identité de quiconque." #: ../../source/features.rst:136 msgid "" @@ -326,16 +398,23 @@ msgid "" "messages, you can be reasonably confident the people joining the chat " "room are your friends." msgstr "" +"Malgré cela, si vous créer une salle de discussion OnionShare et envoyer " +"l'adresse de manière sécurisée à un petit groupe d'amies de confiance en " +"utilisant des messages chiffrées, vous pouvez être raisonnablement confiant " +"dans le fait que les personnes rejoignant la salle de discussion sont vos " +"amies." #: ../../source/features.rst:139 msgid "How is this useful?" -msgstr "" +msgstr "En quoi ceci est-il utile ?" #: ../../source/features.rst:141 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." msgstr "" +"Si vous avez besoin de déjà utiliser une messagerie chiffrée, quel est le " +"point du salle de discussion OnionShare ? Cela laisse moins de traces." #: ../../source/features.rst:143 msgid "" @@ -361,7 +440,7 @@ msgstr "" #: ../../source/features.rst:150 msgid "How does the encryption work?" -msgstr "" +msgstr "Comment marche le chiffrement ?" #: ../../source/features.rst:152 msgid "" @@ -372,12 +451,20 @@ msgid "" "other members of the chat room using WebSockets, through their E2EE onion" " connections." msgstr "" +"Parce que OnionShare repose sur les services ognon de Tor, la connexion " +"entre le navigateur Tor et OnionShare sont toutes chiffrées de bout-à-bout " +"(E2EE). Quand quelqu'un poste un message dans une discussion OnionShare, le " +"message est envoyé au serveur à travers la connexion ognon E2EE, qui l’envoi " +"ensuite à tout les autres membres de la salle de discussion en utilisant " +"WebSockets, à travers leurs connexions oignon E2EE." #: ../../source/features.rst:154 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." msgstr "" +"OnionShare n'implémente aucun chiffrement de lui même. A la place, il " +"utilise le chiffrement des services ognon Tor." #~ msgid "How OnionShare works" #~ msgstr "" diff --git a/docs/source/locale/fr/LC_MESSAGES/help.po b/docs/source/locale/fr/LC_MESSAGES/help.po index 6247d1c5..bd870673 100644 --- a/docs/source/locale/fr/LC_MESSAGES/help.po +++ b/docs/source/locale/fr/LC_MESSAGES/help.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: 5IGI0 <5IGI0@protonmail.com>\n" +"PO-Revision-Date: 2021-10-21 05:01+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -25,17 +25,20 @@ msgstr "Obtenir de l'aide" #: ../../source/help.rst:5 msgid "Read This Website" -msgstr "" +msgstr "Lire ce site Web" #: ../../source/help.rst:7 msgid "" "You will find instructions on how to use OnionShare. Look through all of " "the sections first to see if anything answers your questions." msgstr "" +"Vous trouverez ici des informations sur comment utiliser OnionShare. " +"Regardez les autres parties d'abord afin de voir si vos questions n'ont pas " +"déjà été répondues." #: ../../source/help.rst:10 msgid "Check the GitHub Issues" -msgstr "" +msgstr "Vérifiez les signalement de problèmes sur GitHub (GitHub Issues)" #: ../../source/help.rst:12 msgid "" @@ -47,7 +50,7 @@ msgstr "" #: ../../source/help.rst:15 msgid "Submit an Issue Yourself" -msgstr "" +msgstr "Signaler un problème" #: ../../source/help.rst:17 msgid "" @@ -60,13 +63,15 @@ msgstr "" #: ../../source/help.rst:20 msgid "Join our Keybase Team" -msgstr "" +msgstr "Rejoindre notre équipe Keybase" #: ../../source/help.rst:22 msgid "" "See :ref:`collaborating` on how to join the Keybase team used to discuss " "the project." msgstr "" +"Voir :ref:`collaborer` sur comment rejoindre l'équipe Keybase utilisée pour " +"discuter du projet." #~ msgid "If you need help with OnionShare, please follow the instructions below." #~ msgstr "" diff --git a/docs/source/locale/fr/LC_MESSAGES/install.po b/docs/source/locale/fr/LC_MESSAGES/install.po index af2c1017..324c441b 100644 --- a/docs/source/locale/fr/LC_MESSAGES/install.po +++ b/docs/source/locale/fr/LC_MESSAGES/install.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-12-13 15:48-0800\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: 5IGI0 <5IGI0@protonmail.com>\n" +"PO-Revision-Date: 2021-10-24 21:38+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" @@ -32,8 +32,8 @@ msgid "" "You can download OnionShare for Windows and macOS from the `OnionShare " "website `_." msgstr "" -"Vous pouvez télécharger OnionShare sur Windows et macOS sur `le site " -"d'OnionShare `_." +"Vous pouvez télécharger OnionShare pour Windows et macOS depuis le `site web " +"OnionShare `_." #: ../../source/install.rst:12 msgid "Install in Linux" @@ -57,26 +57,34 @@ msgid "" "Snap support is built-in to Ubuntu and Fedora comes with Flatpak support," " but which you use is up to you. Both work in all Linux distributions." msgstr "" +"Snap est supporté de manière native dans Ubuntu et Fedora intègre Flatpak, " +"mais c'est à vous de décider lequel vous souhaitez utiliser. Les deux " +"marchent sur toutes les distributions Linux." #: ../../source/install.rst:19 msgid "" "**Install OnionShare using Flatpak**: " "https://flathub.org/apps/details/org.onionshare.OnionShare" msgstr "" +"**Installer OnionShare en utilisant Flatpak** : https://flathub.org/apps/" +"details/org.onionshare.OnionShare" #: ../../source/install.rst:21 msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare" msgstr "" +"**Installer OnionShare en utilisant Snap** : https://snapcraft.io/onionshare" #: ../../source/install.rst:23 msgid "" "You can also download and install PGP-signed ``.flatpak`` or ``.snap`` " "packages from https://onionshare.org/dist/ if you prefer." msgstr "" +"Vous pouvez aussi télécharger et installer des paquets ``.flatpak`` ou ``." +"snap`` signé avec PGP depuis https://onionshare.org/dist/ si vous préférer." #: ../../source/install.rst:28 msgid "Verifying PGP signatures" -msgstr "" +msgstr "Vérifier les signatures PGP" #: ../../source/install.rst:30 msgid "" @@ -86,10 +94,15 @@ msgid "" "binaries include operating system-specific signatures, and you can just " "rely on those alone if you'd like." msgstr "" +"Vous pouvez vérifier que les paquets que vous téléchargés n'ont pas été " +"falsifiés en vérifiant la signature PGP. Pour Windows et macOS, cette étape " +"est optionnelle et procure une défense en profondeur : les exécutables " +"OnionShare incluent des signatures spécifiques aux systèmes, et vous pouvez " +"vous reposer uniquement sur celles-là si vous le souhaitez." #: ../../source/install.rst:34 msgid "Signing key" -msgstr "" +msgstr "Clé de signature" #: ../../source/install.rst:36 msgid "" @@ -99,6 +112,11 @@ msgid "" "`_." msgstr "" +"Les paquets sont signés par Micah Lee, développeur principal, utilisant sa " +"clé PGP publique ayant comme empreinte " +"``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Vous pouvez téléchargez sa clé " +"`depuis le serveur de clé openpgp.org. `_." #: ../../source/install.rst:38 msgid "" @@ -106,10 +124,13 @@ msgid "" "probably want `GPGTools `_, and for Windows you " "probably want `Gpg4win `_." msgstr "" +"Vous devez avoir installé GnuPG pour vérifier les signatures. Pour macOS, " +"vous voudrez probablement utilisé `GPGTools `_, et " +"pour Windows `Gpg4win `_." #: ../../source/install.rst:41 msgid "Signatures" -msgstr "" +msgstr "Signatures" #: ../../source/install.rst:43 msgid "" @@ -119,10 +140,15 @@ msgid "" "OnionShare. You can also find them on the `GitHub Releases page " "`_." msgstr "" +"Vous pouvez trouver les signatures (en tant fichiers \".asc\"), ainsi que " +"les fichiers Windows, macOS, Flatpak, Snap et sources, à https://onionshare." +"org/dist/ in les dossiers correspondants à chaque version d'OnionShare. Vous " +"pouvez aussi les trouvez sur `la page des versions GitHub `_." #: ../../source/install.rst:47 msgid "Verifying" -msgstr "" +msgstr "Vérifier" #: ../../source/install.rst:49 msgid "" @@ -130,10 +156,13 @@ msgid "" "downloaded the binary and and ``.asc`` signature, you can verify the " "binary for macOS in a terminal like this::" msgstr "" +"Une fois que vous avez importé la clé publique de Micah dans votre porte-clé " +"GnuPG, télécharger l'exécutable et la signature \".asc\", vous pouvez " +"vérifier l’exécutable pour macOS dans un terminal comme ceci ::" #: ../../source/install.rst:53 msgid "Or for Windows, in a command-prompt like this::" -msgstr "" +msgstr "Ou pour Windows, dans l'invite de commande comme ceci : :" #: ../../source/install.rst:57 msgid "The expected output looks like this::" @@ -158,7 +187,7 @@ msgstr "" "Si vous voulez en apprendre plus sur la vérification des signatures PGP, le " "guide de `Qubes OS `" "_ et du `Projet Tor `_ peuvent être utiles." +"how-to-verify-signature/>`_ peuvent être utiles." #~ msgid "Install on Windows or macOS" #~ msgstr "" diff --git a/docs/source/locale/fr/LC_MESSAGES/tor.po b/docs/source/locale/fr/LC_MESSAGES/tor.po index 5c1763f6..1218b25d 100644 --- a/docs/source/locale/fr/LC_MESSAGES/tor.po +++ b/docs/source/locale/fr/LC_MESSAGES/tor.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-12-13 15:48-0800\n" -"PO-Revision-Date: 2021-05-21 21:32+0000\n" -"Last-Translator: AO Localisation Lab \n" +"PO-Revision-Date: 2021-10-22 20:45+0000\n" +"Last-Translator: aezjrareareare \n" "Language-Team: none\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.7-dev\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -164,10 +164,18 @@ msgid "" "Connection to Tor\" button. If all goes well, you should see \"Connected " "to the Tor controller\"." msgstr "" +"Ouvrez OnionShare et cliquer l'icône \"⚙\". Dessous « Comment OnionShare " +"devrait-il se connecter à Tor ? » choisissez « Se connecter en utilisant le " +"port de contrôle », et configurez « Port de contrôle » à ``127.0.0.1`` et « " +"Port » à ``9051``. En dessous de « Paramètres d’authentification de Tor » " +"choisissez « Mot de passe » et définissez le mot de passe du port de " +"contrôle que vous avez sélectionné au-dessus. Cliquer sur le bouton « Tester " +"la connexion à Tor ». Si tout se passe bien, vous devriez voir « Vous êtes " +"connecté au contrôleur Tor. »." #: ../../source/tor.rst:61 msgid "Using a system ``tor`` in macOS" -msgstr "" +msgstr "Utilisez un système ``tor`` sur macOS" #: ../../source/tor.rst:63 msgid "" @@ -220,6 +228,10 @@ msgid "" "`official repository `_." msgstr "" +"Tout d'abord, installez le paquet ``tor``. Si vous utilisez Debian, Ubuntu, " +"ou une distribution Linux similaire, il est recommandé d'utilisé le `" +"répertoire officiel `_ du " +"projet Tor." #: ../../source/tor.rst:91 msgid "" @@ -227,12 +239,18 @@ msgid "" "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " "connect to your system ``tor``'s control socket file." msgstr "" +"Ensuite, ajoutez votre utilisateur au groupe qui peut faire tourner le " +"processus ``tor`` (dans le cas de Debian et Ubuntu, ``debian-tor`) et " +"configurez OnionShare pour se connecter au fichier de contrôle de " +"l'interface de connexion de votre système ``tor``." #: ../../source/tor.rst:93 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" msgstr "" +"Ajoutez votre utilisateur au groupe ``debian-tor`` en exécutant cette " +"commande (remplacez ``username`` par votre nom d'utilisateur) ::" #: ../../source/tor.rst:97 msgid "" @@ -243,10 +261,17 @@ msgid "" "\"No authentication, or cookie authentication\". Click the \"Test " "Connection to Tor\" button." msgstr "" +"Redémarrez votre ordinateur. Après qu'il ait redémarré, ouvrez OnionShare et " +"cliquer l'icône \"⚙\". Dessous « Comment OnionShare devrait-il se connecter " +"à Tor ? » choisissez « Se connecter en utilisant un fichier d’interface de " +"connexion ». Définissez le fichier d’interface de connexion comme étant ``/" +"var/run/tor/control``. En dessous de « Paramètres d’authentification de Tor »" +" choisissez « Pas d’authentification, ou authentification par témoin ». " +"Cliquer sur le bouton « Tester la connexion à Tor »." #: ../../source/tor.rst:107 msgid "Using Tor bridges" -msgstr "" +msgstr "Utilisez les ponts Tor" #: ../../source/tor.rst:109 msgid "" @@ -267,6 +292,11 @@ msgid "" "obtain from Tor's `BridgeDB `_. If you " "need to use a bridge, try the built-in obfs4 ones first." msgstr "" +"Vous pouvez utiliser les transports enfichables fournis dans obfs4, ceux " +"fournis dans les transports enfichables meek_lite (Azure), ou des ponts " +"personnalisés, que vous pouvez obtenir depuis `la base de données des ponts " +"Tor `_. Si vous avez besoin d'utiliser un " +"pont, essayer ceux fournis dans obfs4 en premier." #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" diff --git a/docs/source/locale/id/LC_MESSAGES/advanced.po b/docs/source/locale/id/LC_MESSAGES/advanced.po new file mode 100644 index 00000000..3da1e968 --- /dev/null +++ b/docs/source/locale/id/LC_MESSAGES/advanced.po @@ -0,0 +1,129 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-09-09 19:49-0700\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: id\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/advanced.rst:2 +msgid "Advanced Usage" +msgstr "" + +#: ../../source/advanced.rst:7 +msgid "Save Tabs" +msgstr "" + +#: ../../source/advanced.rst:9 +msgid "Everything in OnionShare is temporary by default. If you close an OnionShare tab, its address no longer exists and it can't be used again. Sometimes you might want an OnionShare service to be persistent. This is useful if you want to host a website available from the same OnionShare address even if you reboot your computer." +msgstr "" + +#: ../../source/advanced.rst:13 +msgid "To make any tab persistent, check the \"Save this tab, and automatically open it when I open OnionShare\" box before starting the server. When a tab is saved a purple pin icon appears to the left of its server status." +msgstr "" + +#: ../../source/advanced.rst:18 +msgid "When you quit OnionShare and then open it again, your saved tabs will start opened. You'll have to manually start each service, but when you do they will start with the same OnionShare address and private key." +msgstr "" + +#: ../../source/advanced.rst:21 +msgid "If you save a tab, a copy of that tab's onion service secret key will be stored on your computer with your OnionShare settings." +msgstr "" + +#: ../../source/advanced.rst:26 +msgid "Turn Off Private Key" +msgstr "" + +#: ../../source/advanced.rst:28 +msgid "By default, all OnionShare services are protected with a private key, which Tor calls \"client authentication\"." +msgstr "" + +#: ../../source/advanced.rst:30 +msgid "When browsing to an OnionShare service in Tor Browser, Tor Browser will prompt for the private key to be entered." +msgstr "" + +#: ../../source/advanced.rst:32 +msgid "Sometimes you might want your OnionShare service to be accessible to the public, like if you want to set up an OnionShare receive service so the public can securely and anonymously send you files. In this case, it's better to disable the private key altogether." +msgstr "" + +#: ../../source/advanced.rst:35 +msgid "To turn off the private key for any tab, check the \"This is a public OnionShare service (disables private key)\" box before starting the server. Then the server will be public and won't need a private key to view in Tor Browser." +msgstr "" + +#: ../../source/advanced.rst:40 +msgid "Custom Titles" +msgstr "" + +#: ../../source/advanced.rst:42 +msgid "By default, when people load an OnionShare service in Tor Browser they see the default title for the type of service. For example, the default title of a chat service is \"OnionShare Chat\"." +msgstr "" + +#: ../../source/advanced.rst:44 +msgid "If you want to choose a custom title, set the \"Custom title\" setting before starting a server." +msgstr "" + +#: ../../source/advanced.rst:47 +msgid "Scheduled Times" +msgstr "" + +#: ../../source/advanced.rst:49 +msgid "OnionShare supports scheduling exactly when a service should start and stop. Before starting a server, click \"Show advanced settings\" in its tab and then check the boxes next to either \"Start onion service at scheduled time\", \"Stop onion service at scheduled time\", or both, and set the respective desired dates and times." +msgstr "" + +#: ../../source/advanced.rst:52 +msgid "If you scheduled a service to start in the future, when you click the \"Start sharing\" button you will see a timer counting down until it starts. If you scheduled it to stop in the future, after it's started you will see a timer counting down to when it will stop automatically." +msgstr "" + +#: ../../source/advanced.rst:55 +msgid "**Scheduling an OnionShare service to automatically start can be used as a dead man's switch**, where your service will be made public at a given time in the future if anything happens to you. If nothing happens to you, you can cancel the service before it's scheduled to start." +msgstr "" + +#: ../../source/advanced.rst:60 +msgid "**Scheduling an OnionShare service to automatically stop can be useful to limit exposure**, like if you want to share secret documents while making sure they're not available on the internet for more than a few days." +msgstr "" + +#: ../../source/advanced.rst:67 +msgid "Command-line Interface" +msgstr "" + +#: ../../source/advanced.rst:69 +msgid "In addition to its graphical interface, OnionShare has a command-line interface." +msgstr "" + +#: ../../source/advanced.rst:71 +msgid "You can install just the command-line version of OnionShare using ``pip3``::" +msgstr "" + +#: ../../source/advanced.rst:75 +msgid "Note that you will also need the ``tor`` package installed. In macOS, install it with: ``brew install tor``" +msgstr "" + +#: ../../source/advanced.rst:77 +msgid "Then run it like this::" +msgstr "" + +#: ../../source/advanced.rst:81 +msgid "For information about installing it on different operating systems, see the `CLI readme file `_ in the git repository." +msgstr "" + +#: ../../source/advanced.rst:83 +msgid "If you installed OnionShare using the Linux Snapcraft package, you can also just run ``onionshare.cli`` to access the command-line interface version." +msgstr "" + +#: ../../source/advanced.rst:86 +msgid "Usage" +msgstr "" + +#: ../../source/advanced.rst:88 +msgid "You can browse the command-line documentation by running ``onionshare --help``::" +msgstr "" diff --git a/docs/source/locale/pl/LC_MESSAGES/advanced.po b/docs/source/locale/pl/LC_MESSAGES/advanced.po index ba8a6f64..60d262ab 100644 --- a/docs/source/locale/pl/LC_MESSAGES/advanced.po +++ b/docs/source/locale/pl/LC_MESSAGES/advanced.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" +"PO-Revision-Date: 2021-10-16 21:34+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -58,6 +59,10 @@ msgid "" "start opened. You'll have to manually start each service, but when you do" " they will start with the same OnionShare address and private key." msgstr "" +"Gdy zamkniesz OnionShare, a następnie otworzysz go ponownie, zapisane karty " +"również zostaną otwarte. Będziesz musiał ręcznie uruchomić każdą usługę, ale " +"kiedy to zrobisz, uruchomią się z tym samym adresem OnionShare i kluczem " +"prywatnym." #: ../../source/advanced.rst:21 msgid "" @@ -69,19 +74,23 @@ msgstr "" #: ../../source/advanced.rst:26 msgid "Turn Off Private Key" -msgstr "" +msgstr "Wyłączanie obsługi Klucza Prywatnego" #: ../../source/advanced.rst:28 msgid "" "By default, all OnionShare services are protected with a private key, " "which Tor calls \"client authentication\"." msgstr "" +"Domyślnie wszystkie usługi OnionShare są chronione kluczem prywatnym, Tor " +"nazywa to „uwierzytelnianiem klienta”." #: ../../source/advanced.rst:30 msgid "" "When browsing to an OnionShare service in Tor Browser, Tor Browser will " "prompt for the private key to be entered." msgstr "" +"Podczas przeglądania usługi OnionShare w przeglądarce Tor, przeglądarka Tor " +"poprosi o wprowadzenie klucza prywatnego." #: ../../source/advanced.rst:32 msgid "" @@ -90,6 +99,10 @@ msgid "" "public can securely and anonymously send you files. In this case, it's " "better to disable the private key altogether." msgstr "" +"Czasami możesz chcieć, aby Twoja usługa OnionShare była dostępna publicznie, " +"na przykład jeśli chcesz skonfigurować usługę odbioru OnionShare, aby inni " +"mogli bezpiecznie i anonimowo wysyłać Ci pliki. W takim przypadku lepiej " +"całkowicie wyłączyć obsługę klucza prywatnego." #: ../../source/advanced.rst:35 msgid "" @@ -98,10 +111,14 @@ msgid "" "server. Then the server will be public and won't need a private key to " "view in Tor Browser." msgstr "" +"Aby wyłączyć obsługę klucza prywatnego dla dowolnej karty, zaznacz pole „To " +"jest usługa publiczna OnionShare (wyłącza klucz prywatny)” przed " +"uruchomieniem serwera. Wtedy serwer będzie publiczny i nie będzie " +"potrzebował klucza prywatnego do przeglądania w przeglądarce Tor." #: ../../source/advanced.rst:40 msgid "Custom Titles" -msgstr "" +msgstr "Tytuły Niestandardowe" #: ../../source/advanced.rst:42 msgid "" @@ -109,12 +126,17 @@ msgid "" "see the default title for the type of service. For example, the default " "title of a chat service is \"OnionShare Chat\"." msgstr "" +"Domyślnie, gdy ludzie ładują usługę OnionShare w przeglądarce Tor, widzą " +"domyślny tytuł dla danego typu usługi. Na przykład domyślny tytuł usługi " +"czatu to „OnionShare Chat”." #: ../../source/advanced.rst:44 msgid "" "If you want to choose a custom title, set the \"Custom title\" setting " "before starting a server." msgstr "" +"Jeśli chcesz wybrać tytuł niestandardowy, ustaw „Tytuł niestandardowy” przed " +"uruchomieniem serwera." #: ../../source/advanced.rst:47 msgid "Scheduled Times" @@ -167,6 +189,10 @@ msgid "" "making sure they're not available on the internet for more than a few " "days." msgstr "" +"**Zaplanowanie automatycznego zatrzymania usługi OnionShare może być " +"przydatne do ograniczenia ekspozycji**, na przykład, jeśli chcesz udostępnić " +"tajne dokumenty, upewniając się, że nie są one dostępne w Internecie dłużej " +"niż kilka dni." #: ../../source/advanced.rst:67 msgid "Command-line Interface" @@ -207,6 +233,9 @@ msgid "" "`_ " "in the git repository." msgstr "" +"Aby uzyskać informacje o instalowaniu go w różnych systemach operacyjnych, " +"zobacz plik `CLI readme `_ w repozytorium git." #: ../../source/advanced.rst:83 msgid "" @@ -530,4 +559,3 @@ msgstr "" #~ " services will be removed from " #~ "OnionShare before then." #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/develop.po b/docs/source/locale/pl/LC_MESSAGES/develop.po index 868ebaa6..037a9001 100644 --- a/docs/source/locale/pl/LC_MESSAGES/develop.po +++ b/docs/source/locale/pl/LC_MESSAGES/develop.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" +"PO-Revision-Date: 2021-10-13 16:36+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 @@ -67,6 +68,8 @@ msgid "" "OnionShare source code is to be found in this Git repository: " "https://github.com/onionshare/onionshare" msgstr "" +"Kod źródłowy OnionShare można znaleźć w tym repozytorium Git: https://github." +"com/onionshare/onionshare" #: ../../source/develop.rst:19 msgid "" @@ -76,6 +79,11 @@ msgid "" "`_ on GitHub to see if " "there are any you'd like to tackle." msgstr "" +"Jeśli chcesz wnieść swój wkład do kodu OnionShare, warto dołączyć do grupy " +"Keybase by zadawać pytania dotyczące tego, nad czym zamierzasz pracować. " +"Powinieneś również przejrzeć wszystkie `otwarte problemy `_ na GitHub, aby zobaczyć, czy są jakieś, " +"którymi chciałbyś się zająć." #: ../../source/develop.rst:22 msgid "" @@ -101,6 +109,12 @@ msgid "" "file to learn how to set up your development environment for the " "graphical version." msgstr "" +"OnionShare jest rozwijany przy użyciu Pythona. Aby rozpocząć pracę, sklonuj " +"repozytorium Git z https://github.com/onionshare/onionshare/, a następnie " +"zapoznaj się z plikiem ``cli/README.md``, aby dowiedzieć się, jak " +"skonfigurować środowisko programistyczne dla wersji wiersza poleceń , oraz " +"plik ``desktop/README.md``, aby dowiedzieć się, jak skonfigurować środowisko " +"programistyczne dla wersji graficznej." #: ../../source/develop.rst:32 msgid "" @@ -172,6 +186,10 @@ msgid "" "web-browser like Firefox, instead of using the Tor Browser. The private " "key is not actually needed in local-only mode, so you can ignore it." msgstr "" +"W tym przypadku ładujemy adres URL ``http://127.0.0.1:17641`` w normalnej " +"przeglądarce internetowej, takiej jak Firefox, zamiast używać przeglądarki " +"Tor. Klucz prywatny nie jest właściwie potrzebny w trybie lokalnym, więc " +"możesz go zignorować." #: ../../source/develop.rst:168 msgid "Contributing Translations" @@ -488,4 +506,3 @@ msgstr "" #~ "a normal web-browser like Firefox, " #~ "instead of using the Tor Browser." #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/features.po b/docs/source/locale/pl/LC_MESSAGES/features.po index 27f9859d..9de83b71 100644 --- a/docs/source/locale/pl/LC_MESSAGES/features.po +++ b/docs/source/locale/pl/LC_MESSAGES/features.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" +"PO-Revision-Date: 2021-10-30 17:37+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -29,21 +30,21 @@ msgid "" "other people as `Tor `_ `onion services " "`_." msgstr "" -"Serwery webowe są uruchamiane lokalnie na Twoim komputerze i udostępniane" -" innym osobom jako `usługi cebulowe `_`Tor `_ ." +"Serwery webowe są uruchamiane lokalnie na Twoim komputerze i udostępniane " +"innym osobom jako `usługi cebulowe `_ `Tor `_ ." #: ../../source/features.rst:8 msgid "By default, OnionShare web addresses are protected with a private key." -msgstr "" +msgstr "Domyślnie adresy internetowe OnionShare są chronione kluczem prywatnym." #: ../../source/features.rst:10 msgid "OnionShare addresses look something like this::" -msgstr "" +msgstr "Adresy OnionShare wyglądają mniej więcej tak:" #: ../../source/features.rst:14 msgid "And private keys might look something like this::" -msgstr "" +msgstr "A klucze prywatne mogą wyglądać mniej więcej tak:" #: ../../source/features.rst:18 msgid "" @@ -52,6 +53,11 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" +"Odpowiadasz za bezpieczne udostępnianie tego adresu URL i klucza prywatnego " +"za pomocą wybranego kanału komunikacji, takiego jak zaszyfrowana wiadomość " +"na czacie, lub korzystanie z czegoś mniej bezpiecznego, takiego jak " +"niezaszyfrowana poczta e-mail, w zależności od Twojego `modelu zagrożenia " +"`_." #: ../../source/features.rst:20 msgid "" @@ -60,6 +66,10 @@ msgid "" " Tor Browser will then prompt for the private key, which the people can " "also then copy and paste in." msgstr "" +"Osoby, do których wysyłasz adres URL, muszą skopiować go i wkleić do swojej " +"przeglądarki Tor `_, aby uzyskać dostęp do " +"usługi OnionShare. Przeglądarka Tor poprosi ich o klucz prywatny, który " +"również mogą skopiować i wkleić." #: ../../source/features.rst:24 msgid "" @@ -68,6 +78,11 @@ msgid "" "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" +"Jeśli uruchomisz OnionShare na swoim laptopie, aby wysłać komuś pliki, a " +"następnie uśpisz go przed wysłaniem plików, usługa nie będzie dostępna, " +"dopóki Twój laptop nie zostanie wybudzony i ponownie będzie dostępny w " +"Internecie. OnionShare działa najlepiej podczas pracy z ludźmi w czasie " +"rzeczywistym." #: ../../source/features.rst:26 msgid "" @@ -114,6 +129,10 @@ msgid "" " files have been sent (uncheck to allow downloading individual files)\" " "box." msgstr "" +"Gdy tylko ktoś zakończy pobieranie twoich plików, OnionShare automatycznie " +"zatrzyma serwer, usuwając witrynę z Internetu. Aby umożliwić pobieranie ich " +"wielu osobom, odznacz pole „Zatrzymaj udostępnianie po wysłaniu plików (" +"odznacz, aby zezwolić na pobieranie pojedynczych plików)”." #: ../../source/features.rst:42 msgid "" @@ -145,6 +164,10 @@ msgid "" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" +"Teraz, gdy uruchomiłeś usługę OnionShare, skopiuj adres i klucz prywatny i " +"wyślij je do osoby, której chcesz udostępnić pliki. Jeśli pliki muszą " +"pozostać bezpieczne lub dana osoba jest w inny sposób narażona na " +"niebezpieczeństwo, użyj szyfrowanej aplikacji do przesyłania wiadomości." #: ../../source/features.rst:50 msgid "" @@ -152,10 +175,13 @@ msgid "" "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" +"Następnie osoba ta musi załadować adres w przeglądarce Tor. Po zalogowaniu " +"się kluczem prywatnym pliki można pobrać bezpośrednio z Twojego komputera, " +"klikając znajdujący się w rogu link „Pobierz pliki”." #: ../../source/features.rst:55 msgid "Receive Files and Messages" -msgstr "" +msgstr "Odbieranie plików i wiadomości" #: ../../source/features.rst:57 msgid "" @@ -164,10 +190,14 @@ msgid "" "anonymous dropbox. Open a receive tab and choose the settings that you " "want." msgstr "" +"Możesz użyć OnionShare, aby umożliwić ludziom anonimowe przesyłanie plików i " +"wiadomości bezpośrednio do twojego komputera, zasadniczo zmieniając go w " +"anonimową skrzynkę. Otwórz kartę odbioru i wybierz żądane ustawienia." #: ../../source/features.rst:62 msgid "You can browse for a folder to save messages and files that get submitted." msgstr "" +"Możesz wybrać folder, w którym zapisywane będą przesłane wiadomości i pliki." #: ../../source/features.rst:64 msgid "" @@ -175,6 +205,10 @@ msgid "" "uploads, and you can check \"Disable uploading files\" if you want to " "only allow submitting text messages, like for an anonymous contact form." msgstr "" +"Możesz zaznaczyć „Wyłącz przesyłanie tekstu”, jeśli chcesz zezwolić tylko na " +"przesyłanie plików i możesz zaznaczyć „Wyłącz przesyłanie plików\", jeśli " +"chcesz zezwolić tylko na przesyłanie wiadomości tekstowych, na przykład w " +"przypadku anonimowego formularza kontaktowego." #: ../../source/features.rst:66 msgid "" @@ -190,6 +224,17 @@ msgid "" "your receive mode service, @webhookbot will send you a message on Keybase" " letting you know as soon as it happens." msgstr "" +"Możesz zaznaczyć „Użyj webhooka powiadomień”, a następnie wybrać adres URL " +"webhooka, jeśli chcesz otrzymywać powiadomienia, gdy ktoś przesyła pliki lub " +"wiadomości do Twojej usługi OnionShare. Jeśli korzystasz z tej funkcji, " +"OnionShare wyśle żądanie HTTP POST do tego adresu URL za każdym razem, gdy " +"ktoś prześle pliki lub wiadomości. Na przykład, jeśli chcesz otrzymać " +"zaszyfrowaną wiadomość tekstową w aplikacji `Keybase `" +"_, możesz rozpocząć rozmowę z `@webhookbot `" +"_, wpisz ``!webhook create onionshare-alerts``, a odpowie adresem URL. Użyj " +"go jako adresu URL webhooka powiadomień. Jeśli ktoś prześle plik do Twojej " +"usługi odbiorczej, @webhookbot wyśle Ci wiadomość na Keybase, informując " +"Cię, gdy tylko to nastąpi." #: ../../source/features.rst:71 msgid "" @@ -198,6 +243,10 @@ msgid "" " be able to submit files and messages which get uploaded to your " "computer." msgstr "" +"Kiedy będziesz gotowy, kliknij „Rozpocznij tryb odbierania”. Uruchomi to " +"usługę OnionShare. Każdy, kto załaduje ten adres w swojej przeglądarce Tor, " +"będzie mógł przesyłać pliki i wiadomości, które zostaną przesłane na twój " +"komputer." #: ../../source/features.rst:75 msgid "" @@ -209,7 +258,7 @@ msgstr "" #: ../../source/features.rst:77 msgid "Here is what it looks like for someone sending you files and messages." -msgstr "" +msgstr "Oto, jak wygląda gdy ktoś wysyła Ci pliki i wiadomości." #: ../../source/features.rst:81 msgid "" @@ -218,6 +267,10 @@ msgid "" "folder on your computer, automatically organized into separate subfolders" " based on the time that the files get uploaded." msgstr "" +"Gdy ktoś przesyła pliki lub wiadomości do Twojej usługi odbiorczej, " +"domyślnie są one zapisywane w folderze o nazwie „OnionShare” w folderze " +"domowym na komputerze, automatycznie uporządkowane w osobnych podfolderach " +"na podstawie czasu przesłania plików." #: ../../source/features.rst:83 msgid "" @@ -244,6 +297,11 @@ msgid "" "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" +"Podobnie jak w przypadku złośliwych załączników do wiadomości e-mail, " +"możliwe jest, że ktoś spróbuje zaatakować Twój komputer, przesyłając " +"złośliwy plik do usługi OnionShare. OnionShare nie dodaje żadnych " +"mechanizmów bezpieczeństwa, które chronią Twój system przed złośliwymi " +"plikami." #: ../../source/features.rst:90 msgid "" @@ -265,6 +323,8 @@ msgstr "" #: ../../source/features.rst:92 msgid "However, it is always safe to open text messages sent through OnionShare." msgstr "" +"Jednak zawsze bezpiecznie jest otwierać wiadomości tekstowe wysyłane za " +"pośrednictwem OnionShare." #: ../../source/features.rst:95 msgid "Tips for running a receive service" @@ -277,6 +337,10 @@ msgid "" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" +"Jeśli chcesz hostować własną anonimową skrzynkę wrzutową za pomocą " +"OnionShare, zalecamy, abyś zrobił to na oddzielnym, wydzielonym komputerze, " +"który jest zawsze włączony i połączony z Internetem, a nie na tym, z którego " +"korzystasz regularnie." #: ../../source/features.rst:99 msgid "" @@ -285,6 +349,11 @@ msgid "" "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" +"Jeśli zamierzasz umieścić adres OnionShare na swojej stronie internetowej " +"lub profilach w mediach społecznościowych, zapisz kartę (zobacz " +":ref:`save_tabs`) i uruchom ją jako usługę publiczną (zobacz " +":ref:`turn_off_private_key`). Dobrym pomysłem jest również nadanie jej " +"własnego tytułu (zobacz :ref:`custom_titles`)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -338,6 +407,10 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" +"Domyślnie OnionShare pomaga zabezpieczyć witrynę, ustawiając ścisłą „" +"Politykę Bezpieczeństwa Treści ”_. Zapobiega to jednak ładowaniu zawartości stron " +"trzecich na stronie internetowej." #: ../../source/features.rst:121 msgid "" @@ -364,12 +437,20 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" +"Jeśli chcesz prowadzić długoterminową witrynę internetową za pomocą " +"OnionShare (czyli nie tylko po to, aby szybko komuś coś pokazać), zaleca się " +"zrobić to na osobnym, dedykowanym komputerze, który jest zawsze włączony i " +"podłączony do internetu, a nie na tym, który używasz regularnie. Zapisz " +"kartę (patrz :ref:`save_tabs`), aby móc wznowić witrynę z tym samym adresem, " +"gdy zamkniesz OnionShare i otworzysz ponownie później." #: ../../source/features.rst:129 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" +"Jeśli twoja strona ma być udostępniona publicznie, powinieneś uruchomić ją " +"jako usługę publiczną (zobacz :ref:`turn_off_private_key`)." #: ../../source/features.rst:132 msgid "Chat Anonymously" @@ -391,6 +472,11 @@ msgid "" "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" +"Po uruchomieniu serwera skopiuj adres OnionShare i klucz prywatny i wyślij " +"je do osób, które chcesz zaprosić do anonimowego pokoju rozmów. Jeśli ważne " +"jest, aby dokładnie ograniczyć liczbę osób, które mogą dołączyć, użyj " +"aplikacji do szyfrowania wiadomości, aby wysłać adres OnionShare i klucz " +"prywatny." #: ../../source/features.rst:143 msgid "" @@ -459,6 +545,14 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" +"Jeśli na przykład wyślesz wiadomość do grupy w aplikacji Signal, kopia " +"Twojej wiadomości trafi na każde urządzenie (smartfony i komputery, jeśli " +"posiadają Signal Desktop) każdego członka grupy. Nawet jeśli znikanie " +"wiadomości jest włączone, trudno jest potwierdzić, że wszystkie kopie " +"wiadomości zostały faktycznie usunięte ze wszystkich urządzeń oraz z innych " +"miejsc (takich jak bazy danych powiadomień), w których mogły zostać " +"zapisane. Pokoje rozmów OnionShare nie przechowują nigdzie żadnych " +"wiadomości, więc problem jest zredukowany do minimum." #: ../../source/features.rst:165 msgid "" @@ -469,6 +563,11 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" +"Pokoje rozmów OnionShare mogą być również przydatne dla osób, które chcą " +"rozmawiać z kimś anonimowo i bezpiecznie bez konieczności tworzenia kont. Na " +"przykład źródło może wysłać dziennikarzowi adres OnionShare przy użyciu " +"jednorazowego adresu e-mail, a następnie czekać, aż dziennikarz dołączy do " +"pokoju rozmów, a wszystko to bez narażania swojej anonimowości." #: ../../source/features.rst:169 msgid "How does the encryption work?" @@ -1087,4 +1186,3 @@ msgstr "" #~ "to join the chat room, all without" #~ " compromosing their anonymity." #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/help.po b/docs/source/locale/pl/LC_MESSAGES/help.po index 029d839b..142ef675 100644 --- a/docs/source/locale/pl/LC_MESSAGES/help.po +++ b/docs/source/locale/pl/LC_MESSAGES/help.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" +"PO-Revision-Date: 2021-10-14 18:35+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 @@ -46,6 +47,10 @@ msgid "" "someone else has encountered the same problem and either raised it with " "the developers, or maybe even posted a solution." msgstr "" +"Jeśli to czego szukasz nie znajduje się na stronie, sprawdź `wątki z GitHub " +"`_. Możliwe, że ktoś inny " +"napotkał ten sam problem i albo zgłosił go twórcom, albo może nawet " +"opublikował rozwiązanie." #: ../../source/help.rst:15 msgid "Submit an Issue Yourself" @@ -59,6 +64,10 @@ msgid "" "`creating a GitHub account `_." msgstr "" +"Jeśli nie możesz znaleźć rozwiązania lub chcesz zadać pytanie lub " +"zasugerować nową funkcję, proszę `zgłoś problem `_. Wymaga to `utworzenia konta GitHub " +"`_." #: ../../source/help.rst:20 msgid "Join our Keybase Team" @@ -144,4 +153,3 @@ msgstr "" #~ "`_." #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/install.po b/docs/source/locale/pl/LC_MESSAGES/install.po index f5aa8d80..addf056e 100644 --- a/docs/source/locale/pl/LC_MESSAGES/install.po +++ b/docs/source/locale/pl/LC_MESSAGES/install.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" +"PO-Revision-Date: 2021-10-14 18:35+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 @@ -37,7 +38,7 @@ msgstr "" #: ../../source/install.rst:12 msgid "Linux" -msgstr "" +msgstr "Linux" #: ../../source/install.rst:14 msgid "" @@ -86,7 +87,7 @@ msgstr "" #: ../../source/install.rst:28 msgid "Command-line only" -msgstr "" +msgstr "Wiersz poleceń" #: ../../source/install.rst:30 msgid "" @@ -94,6 +95,9 @@ msgid "" "operating system using the Python package manager ``pip``. See :ref:`cli`" " for more information." msgstr "" +"Możesz zainstalować tylko wersję wiersza poleceń OnionShare na dowolnym " +"systemie operacyjnym za pomocą menedżera pakietów Python ``pip``. Zobacz " +":ref:`cli`, aby uzyskać więcej informacji." #: ../../source/install.rst:35 msgid "Verifying PGP signatures" @@ -189,6 +193,11 @@ msgid "" " the package, it only means you haven't defined a level of \"trust\" of " "Micah's PGP key.)" msgstr "" +"Jeśli nie widzisz ``Good signature from``, może to oznaczać problem z " +"integralnością pliku (złośliwy lub inny) i nie powinieneś instalować " +"pakietu. (Pokazane powyżej ostrzeżenie ``WARNING:`` nie jest problemem z " +"pakietem, oznacza tylko, że nie zdefiniowałeś poziomu \"zaufania\" klucza " +"PGP Micah.)" #: ../../source/install.rst:78 msgid "" @@ -403,4 +412,3 @@ msgstr "" #~ " level of 'trust' of Micah's PGP " #~ "key.)" #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/security.po b/docs/source/locale/pl/LC_MESSAGES/security.po index e93d08e6..84ab9b21 100644 --- a/docs/source/locale/pl/LC_MESSAGES/security.po +++ b/docs/source/locale/pl/LC_MESSAGES/security.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-17 14:39-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" +"PO-Revision-Date: 2021-10-13 17:58+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/security.rst:2 @@ -96,6 +97,14 @@ msgid "" "access it (unless the OnionShare user chooses make their service public " "by turning off the private key -- see :ref:`turn_off_private_key`)." msgstr "" +"**Jeśli atakujący dowie się o usłudze cebulowej, nadal nie ma dostępu do " +"niczego z nią związanego.** Wcześniejsze ataki na sieć Tor, mające na celu " +"enumerację usług cebulowych, pozwoliły atakującemu odkryć prywatne adresy ``." +"onion``. Jeśli atakujący wykryje prywatny adres OnionShare, będzie musiał " +"również odgadnąć klucz prywatny używany do uwierzytelnienia klienta, aby " +"uzyskać do niego dostęp (chyba że użytkownik OnionShare wybierze " +"upublicznienie swojej usługi poprzez wyłączenie klucza prywatnego - patrz " +":ref:` turn_off_private_key`)." #: ../../source/security.rst:20 msgid "What OnionShare doesn't protect against" @@ -114,6 +123,17 @@ msgid "" "or in person. This isn't necessary when using OnionShare for something " "that isn't secret." msgstr "" +"**Ogłaszanie adresu OnionShare i klucza prywatnego może nie być bezpieczne.**" +" Przekazanie ludziom adresu OnionShare jest obowiązkiem użytkownika " +"OnionShare. Jeśli zostanie wysłany w sposób niepewny (na przykład za " +"pośrednictwem wiadomości e-mail monitorowanej przez atakującego), " +"podsłuchujący może stwierdzić, że jest używany OnionShare. Jeśli " +"podsłuchiwacz załaduje adres w przeglądarce Tor, gdy usługa jest nadal " +"aktywna, może uzyskać do niej dostęp. Aby tego uniknąć, adres musi być " +"przekazany w bezpieczny sposób, za pomocą zaszyfrowanej wiadomości tekstowej " +"(prawdopodobnie z włączonymi znikającymi wiadomościami), zaszyfrowanej " +"wiadomości e-mail lub osobiście. Nie jest to konieczne, gdy używasz " +"OnionShare do czegoś, co nie jest tajne." #: ../../source/security.rst:24 msgid "" @@ -123,6 +143,11 @@ msgid "" "accessed over Tor, can be used to share the address. This isn't necessary" " unless anonymity is a goal." msgstr "" +"**Ogłaszanie adresu i klucza prywatnego OnionShare może nie być anonimowe.** " +"Należy podjąć dodatkowe środki ostrożności, aby zapewnić anonimowość " +"przekazywania adresu OnionShare. Do udostępnienia adresu można użyć nowego " +"konta e-mail lub czatu, dostępnego tylko przez Tor. Nie jest to konieczne, " +"chyba że Twoim celem jest anonimowość." #~ msgid "Security design" #~ msgstr "" @@ -316,4 +341,3 @@ msgstr "" #~ " isn't necessary unless anonymity is " #~ "a goal." #~ msgstr "" - diff --git a/docs/source/locale/pl/LC_MESSAGES/tor.po b/docs/source/locale/pl/LC_MESSAGES/tor.po index 6700bae7..fef99ecb 100644 --- a/docs/source/locale/pl/LC_MESSAGES/tor.po +++ b/docs/source/locale/pl/LC_MESSAGES/tor.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" +"PO-Revision-Date: 2021-10-30 17:37+0000\n" "Last-Translator: Rafał Godek \n" -"Language: pl\n" "Language-Team: pl \n" -"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && " -"(n%100<10 || n%100>=20) ? 1 : 2\n" +"Language: pl\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==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -91,11 +92,10 @@ msgid "" " and copy the extracted folder to ``C:\\Program Files (x86)\\`` Rename " "the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." msgstr "" -"Pobierz paczkę Tor Windows Expert Bundle`z " -"`_. Wyodrębnij skompresowany " -"plik i skopiuj rozpakowany folder do ``C:\\Program Files (x86)\\`` Zmień " -"nazwę wyodrębnionego folderu zawierającego ``Data`` i ``Tor`` na ``tor-" -"win32``." +"Pobierz paczkę Tor Windows Expert Bundle `z `_. Wyodrębnij skompresowany plik i skopiuj rozpakowany folder " +"do ``C:\\Program Files (x86)\\`` Zmień nazwę wyodrębnionego folderu " +"zawierającego ``Data`` i ``Tor`` na ``tor-win32``." #: ../../source/tor.rst:32 msgid "" @@ -268,6 +268,10 @@ msgid "" "`_. If OnionShare " "connects to Tor without one, you don't need to use a bridge." msgstr "" +"Jeśli Twój dostęp do Internetu jest cenzurowany, możesz skonfigurować " +"OnionShare, aby łączyć się z siecią Tor za pomocą `mostków Tora ` _. Jeśli OnionShare jest w stanie " +"połączyć się z Torem bez niego, nie musisz używać mostka." #: ../../source/tor.rst:111 msgid "To configure bridges, click the \"⚙\" icon in OnionShare." @@ -528,4 +532,3 @@ msgstr "" #~ " you don't need to use a " #~ "bridge." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po index f22dd42e..869a27a0 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-24 21:38+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -57,6 +58,10 @@ msgid "" "start opened. You'll have to manually start each service, but when you do" " they will start with the same OnionShare address and private key." msgstr "" +"Quando você sair do OnionShare e depois entrar novamente, suas abas salvas " +"começarão a ser abertas. Você terá que iniciar manualmente cada serviço, mas " +"quando o fizer, eles começarão com o mesmo endereço e chave privada do " +"OnionShare." #: ../../source/advanced.rst:21 msgid "" @@ -69,19 +74,23 @@ msgstr "" #: ../../source/advanced.rst:26 msgid "Turn Off Private Key" -msgstr "" +msgstr "Desligar Chave Privada" #: ../../source/advanced.rst:28 msgid "" "By default, all OnionShare services are protected with a private key, " "which Tor calls \"client authentication\"." msgstr "" +"Por padrão, todos os serviços do OnionShare são protegidos com uma chave " +"privada, que o Tor chama de \"autenticação de cliente\"." #: ../../source/advanced.rst:30 msgid "" "When browsing to an OnionShare service in Tor Browser, Tor Browser will " "prompt for the private key to be entered." msgstr "" +"Ao navegar para um serviço OnionShare no Tor Browser, o Tor Browser irá " +"solicitar que a chave privada seja inserida." #: ../../source/advanced.rst:32 msgid "" @@ -90,6 +99,10 @@ msgid "" "public can securely and anonymously send you files. In this case, it's " "better to disable the private key altogether." msgstr "" +"Às vezes você pode querer que seu serviço OnionShare seja acessível ao " +"público, como quando você quiser configurar um serviço OnionShare para que o " +"público possa enviar arquivos de forma segura e anônima para você. Neste " +"caso, é melhor desativar a chave privada por completo." #: ../../source/advanced.rst:35 msgid "" @@ -101,7 +114,7 @@ msgstr "" #: ../../source/advanced.rst:40 msgid "Custom Titles" -msgstr "" +msgstr "Títulos Personalizados" #: ../../source/advanced.rst:42 msgid "" @@ -167,6 +180,10 @@ msgid "" "making sure they're not available on the internet for more than a few " "days." msgstr "" +"**Agendar um serviço OnionShare para parar automaticamente pode ser útil " +"para limitar a exposição**, como quando você quiser compartilhar documentos " +"secretos enquanto se certifica de que eles não estão disponíveis na internet " +"por mais de alguns dias." #: ../../source/advanced.rst:67 msgid "Command-line Interface" @@ -207,6 +224,9 @@ msgid "" "`_ " "in the git repository." msgstr "" +"Para informações sobre como instalá-lo em diferentes sistemas operacionais, " +"veja o arquivo `CLI readme `_ no repositório do git." #: ../../source/advanced.rst:83 msgid "" @@ -533,4 +553,3 @@ msgstr "" #~ " services will be removed from " #~ "OnionShare before then." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/develop.po b/docs/source/locale/pt_BR/LC_MESSAGES/develop.po index d22494a1..37262656 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/develop.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/develop.po @@ -8,19 +8,20 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 msgid "Developing OnionShare" -msgstr "Desenvolvendo OnionShare" +msgstr "Desenvolvimento do OnionShare" #: ../../source/develop.rst:7 msgid "Collaborating" @@ -65,6 +66,8 @@ msgid "" "OnionShare source code is to be found in this Git repository: " "https://github.com/onionshare/onionshare" msgstr "" +"O código fonte do OnionShare pode ser encontrado neste repositório Git: " +"https://github.com/onionshare/onionshare" #: ../../source/develop.rst:19 msgid "" @@ -74,6 +77,10 @@ msgid "" "`_ on GitHub to see if " "there are any you'd like to tackle." msgstr "" +"Se você gostaria de contribuir com o código OnionShare, junte-se à Keybase e " +"faça perguntas sobre o que você está pensando em trabalhar. Você também deve " +"rever todas as \"questões abertas `_ no GitHub para ver se há alguma que você gostaria de resolver." #: ../../source/develop.rst:22 msgid "" @@ -99,6 +106,12 @@ msgid "" "file to learn how to set up your development environment for the " "graphical version." msgstr "" +"O OnionShare é desenvolvido em Python. Para começar, clone o repositório Git " +"em https://github.com/onionshare/onionshare/ e depois consulte o arquivo ``" +"cli/README.md`` para aprender como configurar seu ambiente de " +"desenvolvimento para a versão de linha de comando, e o arquivo ``desktop/" +"README.md` para aprender como configurar seu ambiente de desenvolvimento " +"para a versão gráfica." #: ../../source/develop.rst:32 msgid "" @@ -171,6 +184,10 @@ msgid "" "web-browser like Firefox, instead of using the Tor Browser. The private " "key is not actually needed in local-only mode, so you can ignore it." msgstr "" +"Neste caso, você carrega a URL ``http://127.0.0.1:17641`` em um navegador " +"normal, como o Firefox, em vez de utilizar o Tor Browser. A chave privada " +"não é realmente necessária no modo apenas local, portanto, você pode " +"ignorá-la." #: ../../source/develop.rst:168 msgid "Contributing Translations" @@ -488,4 +505,3 @@ msgstr "" #~ "a normal web-browser like Firefox, " #~ "instead of using the Tor Browser." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/features.po b/docs/source/locale/pt_BR/LC_MESSAGES/features.po index 8b9a6eb7..b6a6ce63 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/features.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/features.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -35,14 +36,16 @@ msgstr "" #: ../../source/features.rst:8 msgid "By default, OnionShare web addresses are protected with a private key." msgstr "" +"Por padrão, os endereços web do OnionShare são protegidos com uma chave " +"privada." #: ../../source/features.rst:10 msgid "OnionShare addresses look something like this::" -msgstr "" +msgstr "Os endereços do OnionShare parecem com o seguinte::" #: ../../source/features.rst:14 msgid "And private keys might look something like this::" -msgstr "" +msgstr "E as chaves privadas podem parecer com algo assim::" #: ../../source/features.rst:18 msgid "" @@ -51,6 +54,11 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" +"Você é responsável por compartilhar com segurança essa URL e chave privada " +"utilizando um canal de comunicação de sua escolha como em uma mensagem de " +"bate-papo criptografada, ou utilizando algo menos seguro como e-mail não " +"criptografado, dependendo de seu \"modelo de ameaça `_." #: ../../source/features.rst:20 msgid "" @@ -59,6 +67,10 @@ msgid "" " Tor Browser will then prompt for the private key, which the people can " "also then copy and paste in." msgstr "" +"As pessoas para as quais você envia o URL, depois deverão copiá-lo e colá-lo " +"em seu `Navegador Tor `_ para acessar o serviço " +"OnionShare. O Tor Browser solicitará então a chave privada, que as pessoas " +"também podem então copiar e colar." #: ../../source/features.rst:24 msgid "" @@ -67,6 +79,10 @@ msgid "" "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" +"Se você executar o OnionShare em seu laptop para enviar arquivos a alguém, e " +"depois o suspender antes que os arquivos sejam enviados, o serviço não " +"estará disponível até que seu laptop fique ativo e na internet novamente. O " +"OnionShare funciona melhor quando se trabalha com pessoas em tempo real." #: ../../source/features.rst:26 msgid "" @@ -92,10 +108,10 @@ msgid "" "anonymously. Open a share tab, drag in the files and folders you wish to " "share, and click \"Start sharing\"." msgstr "" -"Você pode usar o OnionShare para enviar arquivos e pastas para as pessoas" -" de forma segura e anônima. Abra uma guia de compartilhamento, arraste os" -" arquivos e pastas que deseja compartilhar e clique em \"Iniciar " -"compartilhamento\"." +"Você pode usar o OnionShare para enviar arquivos e pastas para as pessoas de " +"forma segura e anônima. Abra uma guia de compartilhamento, arraste os " +"arquivos e pastas que deseja compartilhar e clique em \"Começar a " +"compartilhar\"." #: ../../source/features.rst:35 ../../source/features.rst:112 msgid "" @@ -114,6 +130,11 @@ msgid "" " files have been sent (uncheck to allow downloading individual files)\" " "box." msgstr "" +"Assim que alguém terminar de baixar seus arquivos, OnionShare parará " +"automaticamente o servidor, removendo o website da internet. Para permitir " +"que várias pessoas os baixem, desmarque a caixa \"Parar de compartilhar após " +"o envio dos arquivos (desmarque para permitir o download de arquivos " +"individuais)\"." #: ../../source/features.rst:42 msgid "" @@ -145,6 +166,10 @@ msgid "" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" +"Agora que você tem o OnionShare, copie o endereço e a chave privada e envie-" +"o para a pessoa que você deseja receber os arquivos. Se os arquivos " +"precisarem ficar seguros, ou se a pessoa estiver exposta ao perigo, use um " +"aplicativo de mensagens criptografadas." #: ../../source/features.rst:50 msgid "" @@ -152,10 +177,13 @@ msgid "" "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" +"Essa pessoa então deve carregar o endereço no Tor Browser. Após o login com " +"a chave privada, os arquivos podem ser baixados diretamente de seu " +"computador, clicando no link \"Baixar arquivos\"." #: ../../source/features.rst:55 msgid "Receive Files and Messages" -msgstr "" +msgstr "Receber Arquivos e Mensagens" #: ../../source/features.rst:57 msgid "" @@ -164,10 +192,16 @@ msgid "" "anonymous dropbox. Open a receive tab and choose the settings that you " "want." msgstr "" +"Você pode usar o OnionShare para permitir que as pessoas enviem arquivos e " +"mensagens anonimamente, diretamente ao seu computador, essencialmente " +"transformando-o em uma caixa de depósitos anônima. Abra uma aba de " +"recebimento e escolha as configurações que você deseja." #: ../../source/features.rst:62 msgid "You can browse for a folder to save messages and files that get submitted." msgstr "" +"Você pode procurar por uma pasta para salvar as mensagens e os arquivos que " +"são enviados." #: ../../source/features.rst:64 msgid "" @@ -175,6 +209,10 @@ msgid "" "uploads, and you can check \"Disable uploading files\" if you want to " "only allow submitting text messages, like for an anonymous contact form." msgstr "" +"Você pode marcar \"Desativar envio de texto\" se quiser permitir apenas o " +"upload de arquivos, e você pode marcar \"Desativar o carregamento de " +"arquivos\" se quiser permitir apenas o envio de mensagens de texto, como " +"para um formulário de contato anônimo." #: ../../source/features.rst:66 msgid "" @@ -198,6 +236,10 @@ msgid "" " be able to submit files and messages which get uploaded to your " "computer." msgstr "" +"Quando você estiver pronto, clique em \"Começar o Modo Recepção\". Isto " +"inicia o serviço OnionShare. Qualquer pessoa que carregue este endereço em " +"seu navegador Tor poderá enviar arquivos e mensagens que serão carregados em " +"seu computador." #: ../../source/features.rst:75 msgid "" @@ -210,7 +252,7 @@ msgstr "" #: ../../source/features.rst:77 msgid "Here is what it looks like for someone sending you files and messages." -msgstr "" +msgstr "Eis como parece a alguém que lhe envia arquivos e mensagens." #: ../../source/features.rst:81 msgid "" @@ -219,6 +261,10 @@ msgid "" "folder on your computer, automatically organized into separate subfolders" " based on the time that the files get uploaded." msgstr "" +"Quando alguém envia arquivos ou mensagens ao seu serviço de recepção, por " +"padrão eles são salvos em uma pasta chamada \"OnionShare\" na pasta home do " +"seu computador, automaticamente organizada em subpastas separadas com base " +"no tempo em que os arquivos são carregados." #: ../../source/features.rst:83 msgid "" @@ -245,6 +291,10 @@ msgid "" "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" +"Assim como com anexos de e-mail maliciosos, é possível que alguém tente " +"atacar seu computador carregando um arquivo malicioso em seu serviço " +"OnionShare. O OnionShare não acrescenta nenhum mecanismo de segurança para " +"proteger seu sistema contra arquivos maliciosos." #: ../../source/features.rst:90 msgid "" @@ -265,6 +315,8 @@ msgstr "" #: ../../source/features.rst:92 msgid "However, it is always safe to open text messages sent through OnionShare." msgstr "" +"No entanto, é sempre seguro abrir mensagens de texto enviadas através do " +"OnionShare." #: ../../source/features.rst:95 msgid "Tips for running a receive service" @@ -277,6 +329,10 @@ msgid "" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" +"Se você quiser hospedar sua própria caixa de depósitos anônima usando " +"OnionShare, é recomendado que você o faça em um computador separado e " +"dedicado, sempre ligado e conectado à Internet, e não naquele que você usa " +"regularmente." #: ../../source/features.rst:99 msgid "" @@ -285,6 +341,10 @@ msgid "" "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" +"Se você pretende colocar o endereço OnionShare em seu website ou perfis de " +"mídia social, salve a aba (veja :ref:`save_tabs`) e execute-o como um " +"serviço público (veja :ref:`turn_off_private_key`). Também é uma boa idéia " +"dar-lhe um título personalizado (veja :ref:`custom_titles`)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -296,9 +356,9 @@ msgid "" "the files and folders that make up the static content there, and click " "\"Start sharing\" when you are ready." msgstr "" -"Para hospedar um site HTML estático com o OnionShare, abra uma guia do " -"site, arraste os arquivos e pastas que compõem o conteúdo estático e " -"clique em \"Iniciar compartilhamento\" quando estiver pronto." +"Para hospedar um site HTML estático com o OnionShare, abra uma guia do site, " +"arraste os arquivos e pastas que compõem o conteúdo estático e clique em " +"\"Começar a compartilhar\" quando estiver pronto." #: ../../source/features.rst:108 msgid "" @@ -338,6 +398,10 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" +"Por padrão, o OnionShare ajuda a proteger seu website, definindo um rígido " +"cabeçalho \"Política de Segurança de Conteúdo `. Entretanto, isto impede que o conteúdo de " +"terceiros seja carregado dentro da página da web." #: ../../source/features.rst:121 msgid "" @@ -348,8 +412,8 @@ msgid "" msgstr "" "Se você deseja carregar conteúdo de sites de terceiros, como ativos ou " "bibliotecas JavaScript de CDNs, marque a caixa \"Não enviar o cabeçalho " -"da Política de Segurança de Conteúdo (permite que seu site use recursos " -"de terceiros)\" antes de iniciar o serviço." +"Política de Segurança de Conteúdo (permite que seu site use recursos de " +"terceiros)\" antes de iniciar o serviço." #: ../../source/features.rst:124 msgid "Tips for running a website service" @@ -364,12 +428,20 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" +"Se você quiser hospedar um website de longo prazo usando OnionShare (ou " +"seja, não apenas para mostrar algo rapidamente a alguém), é recomendável que " +"você o faça em um computador separado e dedicado que esteja sempre ligado e " +"conectado à Internet, e não naquele que você usa regularmente. Salve a aba (" +"veja :ref:`save_tabs`) para que você possa retomar o site com o mesmo " +"endereço se fechar o OnionShare e poder reabri-lo mais tarde." #: ../../source/features.rst:129 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" +"Se seu website for destinado ao público, você deve administrá-lo como um " +"serviço público (ver :ref:`turn_off_private_key`)." #: ../../source/features.rst:132 msgid "Chat Anonymously" @@ -380,9 +452,9 @@ msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" -"Você pode usar o OnionShare para configurar uma sala de bate-papo privada" -" e segura que não registra nada. Basta abrir uma guia de bate-papo e " -"clicar em \"Iniciar servidor de bate-papo\"." +"Você pode usar o OnionShare para configurar uma sala de bate-papo privada e " +"segura que não registra nada. Basta abrir uma guia de bate-papo e clicar em " +"\"Iniciar um servidor de conversas\"." #: ../../source/features.rst:138 msgid "" @@ -391,6 +463,11 @@ msgid "" "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" +"Depois de iniciar o servidor, copie o endereço e a chave privada do " +"OnionShare e envie-os para as pessoas que você quiser na sala de bate-papo " +"anônima. Se for importante limitar exatamente quem pode participar, use um " +"aplicativo de mensagens criptografadas para enviar o endereço e a chave " +"privada do OnionShare." #: ../../source/features.rst:143 msgid "" @@ -463,6 +540,14 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" +"Se você, por exemplo, enviar uma mensagem a um grupo do Signal, uma cópia de " +"sua mensagem ficará em cada dispositivo (os smartphones e os computadores, " +"se eles instalarem o Signal Desktop) de cada membro do grupo. Mesmo que as " +"mensagens efêmeras sejam ativadas, é difícil confirmar que todas as cópias " +"das mensagens são realmente excluídas de todos os dispositivos, e de " +"qualquer outro lugar (como bancos de dados de notificações) para onde elas " +"possam ter sido salvas. As salas de bate-papo no OnionShare não armazenam " +"nenhuma mensagem em nenhum lugar, portanto o problema é reduzido ao mínimo." #: ../../source/features.rst:165 msgid "" @@ -473,6 +558,12 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" +"As salas de bate-papo do OnionShare também podem ser úteis para pessoas que " +"desejam conversar anonimamente e com segurança com alguém sem a necessidade " +"de criar contas. Por exemplo, uma fonte pode enviar um endereço OnionShare " +"para um jornalista usando um endereço de e-mail descartável e depois esperar " +"que o jornalista entre na sala de bate-papo, tudo sem comprometer seu " +"anonimato." #: ../../source/features.rst:169 msgid "How does the encryption work?" @@ -1091,4 +1182,3 @@ msgstr "" #~ "to join the chat room, all without" #~ " compromosing their anonymity." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/help.po b/docs/source/locale/pt_BR/LC_MESSAGES/help.po index fea1761e..afce95ef 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/help.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/help.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 @@ -45,6 +46,10 @@ msgid "" "someone else has encountered the same problem and either raised it with " "the developers, or maybe even posted a solution." msgstr "" +"Se não estiver no site, por favor verifique o `GitHub issues `_. É possível que outra pessoa tenha " +"encontrado o mesmo problema e o tenha levantado com os desenvolvedores, ou " +"talvez até mesmo postado uma solução." #: ../../source/help.rst:15 msgid "Submit an Issue Yourself" @@ -58,6 +63,11 @@ msgid "" "`creating a GitHub account `_." msgstr "" +"Se você não conseguir encontrar uma solução, desejar fazer uma pergunta ou " +"sugerir uma nova funcionalidade, por favor `submeta um problema " +"`_. Isto requer `criar " +"uma conta GitHub `_." #: ../../source/help.rst:20 msgid "Join our Keybase Team" @@ -143,4 +153,3 @@ msgstr "" #~ "`_." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/install.po b/docs/source/locale/pt_BR/LC_MESSAGES/install.po index 1fce8385..179cc61c 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/install.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/install.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-02-23 15:50+0000\n" -"Last-Translator: Elton Viana Gonçalves da Luz " -"\n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 @@ -37,7 +37,7 @@ msgstr "" #: ../../source/install.rst:12 msgid "Linux" -msgstr "" +msgstr "Linux" #: ../../source/install.rst:14 msgid "" @@ -84,7 +84,7 @@ msgstr "" #: ../../source/install.rst:28 msgid "Command-line only" -msgstr "" +msgstr "Somente linha de comando" #: ../../source/install.rst:30 msgid "" @@ -92,6 +92,9 @@ msgid "" "operating system using the Python package manager ``pip``. See :ref:`cli`" " for more information." msgstr "" +"Você pode instalar apenas a versão de linha de comando do OnionShare em " +"qualquer sistema operacional utilizando o gerenciador de pacotes Python " +"``pip```. Veja :ref:`cli` para mais informações." #: ../../source/install.rst:35 msgid "Verifying PGP signatures" @@ -395,4 +398,3 @@ msgstr "" #~ msgid "Install in Linux" #~ msgstr "Instalar no Linux" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/security.po b/docs/source/locale/pt_BR/LC_MESSAGES/security.po index 034e0a77..d65bc1ec 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/security.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/security.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-17 14:39-0700\n" -"PO-Revision-Date: 2021-09-18 20:19+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/security.rst:2 @@ -95,6 +96,14 @@ msgid "" "access it (unless the OnionShare user chooses make their service public " "by turning off the private key -- see :ref:`turn_off_private_key`)." msgstr "" +"**Se um atacante tomar conhecimento acerca do onion service, ele ainda não " +"poderá acessar nada.** Ataques anteriores contra a rede Tor para enumerar os " +"serviços permitiram que o atacante descobrisse endereços privados ``.onion```" +". Se um ataque descobrir um endereço privado do OnionShare, ele também " +"precisará adivinhar a chave privada utilizada para autenticação do cliente " +"para acessá-lo (a menos que o usuário do OnionShare escolha tornar seu " +"serviço público desligando a chave privada -- veja " +":ref:`turn_off_private_key`)." #: ../../source/security.rst:20 msgid "What OnionShare doesn't protect against" @@ -113,6 +122,16 @@ msgid "" "or in person. This isn't necessary when using OnionShare for something " "that isn't secret." msgstr "" +"**Comunicar o endereço OnionShare e a chave privada pode não ser seguro.** " +"Comunicar o endereço OnionShare às pessoas é de responsabilidade do usuário " +"do OnionShare. Se enviado de forma insegura (por exemplo, através de uma " +"mensagem de e-mail monitorada por um atacante), um espião pode notar que o " +"OnionShare está sendo usado. Se o espião carregar o endereço no Tor Browser " +"enquanto o serviço ainda estiver ativo, ele poderá acessá-lo. Para evitar " +"isso, o endereço deve ser comunicado com segurança, através de mensagem de " +"texto criptografada (provavelmente com o modo de mensagens efêmeras ativado)" +", e-mail criptografado ou pessoalmente. Isto não é necessário ao usar o " +"OnionShare para algo que não é secreto." #: ../../source/security.rst:24 msgid "" @@ -122,6 +141,11 @@ msgid "" "accessed over Tor, can be used to share the address. This isn't necessary" " unless anonymity is a goal." msgstr "" +"**A comunicação do endereço e da chave privada do OnionShare pode não ser " +"anônimo.** Devem ser tomadas precauções adicionais para garantir que o " +"endereço do OnionShare seja comunicado anonimamente. Uma nova conta de e-" +"mail ou chat, acessada apenas pelo Tor, pode ser usada para compartilhar o " +"endereço. Isto não é necessário, a menos que o anonimato seja um objetivo." #~ msgid "Security design" #~ msgstr "" @@ -315,4 +339,3 @@ msgstr "" #~ " isn't necessary unless anonymity is " #~ "a goal." #~ msgstr "" - diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po index 03579d6f..fcd826fe 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" -"Plural-Forms: nplurals=2; plural=n > 1\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -264,6 +265,10 @@ msgid "" "`_. If OnionShare " "connects to Tor without one, you don't need to use a bridge." msgstr "" +"Caso o seu acosso à internet for censurado, você pode configurar o " +"OnionShare para se conectar à rede Tor utilizando `Tor bridges `_. Se o OnionShare consegue se " +"conectar à rede Tor sem usar uma bridge, você não precisa utilizá-las." #: ../../source/tor.rst:111 msgid "To configure bridges, click the \"⚙\" icon in OnionShare." @@ -524,4 +529,3 @@ msgstr "" #~ " you don't need to use a " #~ "bridge." #~ msgstr "" - diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/tor.po b/docs/source/locale/pt_PT/LC_MESSAGES/tor.po index f73d3756..af0678ff 100644 --- a/docs/source/locale/pt_PT/LC_MESSAGES/tor.po +++ b/docs/source/locale/pt_PT/LC_MESSAGES/tor.po @@ -3,23 +3,25 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-12-13 15:48-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"Last-Translator: Gabriel Cardoso \n" "Language-Team: LANGUAGE \n" +"Language: pt_PT\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 msgid "Connecting to Tor" -msgstr "" +msgstr "A Conectar ao Tor" #: ../../source/tor.rst:4 msgid "" @@ -443,4 +445,3 @@ msgstr "" #~ "if you don't already have it. " #~ "Then, install Tor::" #~ msgstr "" - diff --git a/docs/source/locale/uk/LC_MESSAGES/install.po b/docs/source/locale/uk/LC_MESSAGES/install.po index 7a123e7f..283a49ef 100644 --- a/docs/source/locale/uk/LC_MESSAGES/install.po +++ b/docs/source/locale/uk/LC_MESSAGES/install.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-09-11 01:40+0000\n" +"PO-Revision-Date: 2021-10-08 07:03+0000\n" "Last-Translator: Ihor Hordiichuk \n" "Language-Team: none\n" "Language: uk\n" @@ -22,7 +22,7 @@ msgstr "" #: ../../source/install.rst:2 msgid "Installation" -msgstr "Встановлення" +msgstr "Установлення" #: ../../source/install.rst:5 msgid "Windows or macOS" -- cgit v1.2.3-54-g00ecf From f5b60de2e6f127c731d1c06fdb85d0131bfb7a92 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 18 Nov 2021 20:03:18 -0800 Subject: Use high level tempfile classes that clean up after themselves --- cli/onionshare_cli/web/send_base_mode.py | 17 ++++++------- cli/onionshare_cli/web/share_mode.py | 41 +++++++++++++++++--------------- 2 files changed, 31 insertions(+), 27 deletions(-) diff --git a/cli/onionshare_cli/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py index 27de598a..52720f6a 100644 --- a/cli/onionshare_cli/web/send_base_mode.py +++ b/cli/onionshare_cli/web/send_base_mode.py @@ -42,10 +42,11 @@ class SendBaseModeWeb: self.is_zipped = False self.download_filename = None self.download_filesize = None - self.gzip_filename = None - self.gzip_filesize = None self.zip_writer = None + # Store the tempfile objects here, so when they're garbage collected the files are deleted + self.gzip_files = [] + # If autostop_sharing, only allow one download at a time self.download_in_progress = False @@ -192,12 +193,12 @@ class SendBaseModeWeb: # gzip compress the individual file, if it hasn't already been compressed if use_gzip: if filesystem_path not in self.gzip_individual_files: - gzip_filename = tempfile.mkstemp("wb+")[1] - self._gzip_compress(filesystem_path, gzip_filename, 6, None) - self.gzip_individual_files[filesystem_path] = gzip_filename - - # Make sure the gzip file gets cleaned up when onionshare stops - self.web.cleanup_filenames.append(gzip_filename) + self.gzip_files.append( + tempfile.TemporaryFile("wb+", dir=self.common.build_tmp_dir()) + ) + gzip_file = self.gzip_files[-1] + self._gzip_compress(filesystem_path, gzip_file.name, 6, None) + self.gzip_individual_files[filesystem_path] = gzip_file.name file_to_download = self.gzip_individual_files[filesystem_path] filesize = os.path.getsize(self.gzip_individual_files[filesystem_path]) diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py index 92a4c9af..09799679 100644 --- a/cli/onionshare_cli/web/share_mode.py +++ b/cli/onionshare_cli/web/share_mode.py @@ -134,8 +134,12 @@ class ShareModeWeb(SendBaseModeWeb): The web app routes for sharing files """ - @self.web.app.route("/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False) - @self.web.app.route("/", methods=["GET"], provide_automatic_options=False) + @self.web.app.route( + "/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False + ) + @self.web.app.route( + "/", methods=["GET"], provide_automatic_options=False + ) def index(path): """ Render the template for the onionshare landing page. @@ -159,7 +163,9 @@ class ShareModeWeb(SendBaseModeWeb): return self.render_logic(path) - @self.web.app.route("/download", methods=["GET"], provide_automatic_options=False) + @self.web.app.route( + "/download", methods=["GET"], provide_automatic_options=False + ) def download(): """ Download the zip file. @@ -183,7 +189,7 @@ class ShareModeWeb(SendBaseModeWeb): # and serve that use_gzip = self.should_use_gzip() if use_gzip: - file_to_download = self.gzip_filename + file_to_download = self.gzip_file.name self.filesize = self.gzip_filesize etag = self.gzip_etag else: @@ -286,7 +292,9 @@ class ShareModeWeb(SendBaseModeWeb): if if_unmod: if_date = parse_date(if_unmod) if if_date and not if_date.tzinfo: - if_date = if_date.replace(tzinfo=timezone.utc) # Compatible with Flask < 2.0.0 + if_date = if_date.replace( + tzinfo=timezone.utc + ) # Compatible with Flask < 2.0.0 if if_date and if_date > last_modified: abort(412) elif range_header is None: @@ -484,17 +492,16 @@ class ShareModeWeb(SendBaseModeWeb): self.download_etag = make_etag(f) # Compress the file with gzip now, so we don't have to do it on each request - self.gzip_filename = tempfile.mkstemp("wb+")[1] + self.gzip_file = tempfile.TemporaryFile( + "wb+", dir=self.common.build_tmp_dir() + ) self._gzip_compress( - self.download_filename, self.gzip_filename, 6, processed_size_callback + self.download_filename, self.gzip_file.name, 6, processed_size_callback ) - self.gzip_filesize = os.path.getsize(self.gzip_filename) - with open(self.gzip_filename, "rb") as f: + self.gzip_filesize = os.path.getsize(self.gzip_file.name) + with open(self.gzip_file.name, "rb") as f: self.gzip_etag = make_etag(f) - # Make sure the gzip file gets cleaned up when onionshare stops - self.web.cleanup_filenames.append(self.gzip_filename) - self.is_zipped = False else: @@ -519,10 +526,6 @@ class ShareModeWeb(SendBaseModeWeb): with open(self.download_filename, "rb") as f: self.download_etag = make_etag(f) - # Make sure the zip file gets cleaned up when onionshare stops - self.web.cleanup_filenames.append(self.zip_writer.zip_filename) - self.web.cleanup_filenames.append(self.zip_writer.zip_temp_dir) - self.is_zipped = True return True @@ -542,10 +545,10 @@ class ZipWriter(object): if zip_filename: self.zip_filename = zip_filename else: - self.zip_temp_dir = tempfile.mkdtemp() - self.zip_filename = ( - f"{self.zip_temp_dir}/onionshare_{self.common.random_string(4, 6)}.zip" + self.zip_temp_dir = tempfile.TemporaryDirectory( + dir=self.common.build_tmp_dir() ) + self.zip_filename = f"{self.zip_temp_dir.name}/onionshare_{self.common.random_string(4, 6)}.zip" self.z = zipfile.ZipFile(self.zip_filename, "w", allowZip64=True) self.processed_size_callback = processed_size_callback -- cgit v1.2.3-54-g00ecf From b659eccfbfb726fe81f6928547c06e28c3f1e51c Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 18 Nov 2021 20:17:39 -0800 Subject: Use a NamedTemporaryFile instead of TemporaryFile for streamed gzip files --- cli/onionshare_cli/web/send_base_mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/onionshare_cli/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py index 52720f6a..7b587182 100644 --- a/cli/onionshare_cli/web/send_base_mode.py +++ b/cli/onionshare_cli/web/send_base_mode.py @@ -194,7 +194,7 @@ class SendBaseModeWeb: if use_gzip: if filesystem_path not in self.gzip_individual_files: self.gzip_files.append( - tempfile.TemporaryFile("wb+", dir=self.common.build_tmp_dir()) + tempfile.NamedTemporaryFile("wb+", dir=self.common.build_tmp_dir()) ) gzip_file = self.gzip_files[-1] self._gzip_compress(filesystem_path, gzip_file.name, 6, None) -- cgit v1.2.3-54-g00ecf From 19072503a9ae7d15818db1da1fd827964ce438f9 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 23 Nov 2021 15:11:50 +1100 Subject: Fetch the built-in bridges from Tor's Censorship Circumvention API, rather than hardcode them --- cli/onionshare_cli/onion.py | 101 +++++++++++++-------- .../resources/torrc_template-meek_lite_azure | 3 - cli/onionshare_cli/resources/torrc_template-obfs4 | 17 ---- .../resources/torrc_template-snowflake | 3 - desktop/src/onionshare/gui_common.py | 3 + desktop/src/onionshare/resources/locale/en.json | 3 +- desktop/src/onionshare/threads.py | 2 + desktop/src/onionshare/tor_connection.py | 2 + 8 files changed, 71 insertions(+), 63 deletions(-) delete mode 100644 cli/onionshare_cli/resources/torrc_template-meek_lite_azure delete mode 100644 cli/onionshare_cli/resources/torrc_template-obfs4 delete mode 100644 cli/onionshare_cli/resources/torrc_template-snowflake diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index 5ac669b8..54020e16 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ +from .censorship import CensorshipCircumvention +from .meek import Meek from stem.control import Controller from stem import ProtocolError, SocketClosed from stem.connection import MissingPassword, UnreadableCookieFile, AuthenticationFailure @@ -125,6 +127,13 @@ class PortNotAvailable(Exception): """ +class TorErrorGettingBridges(Exception): + """ + This exception is raised if onionshare tried to fetch bridges from the Tor + CensorshipCircumvention API, but failed to retrieve valid bridges for some reason. + """ + + class Onion(object): """ Onion is an abstraction layer for connecting to the Tor control port and @@ -258,9 +267,7 @@ class Onion(object): and cmdline[2] == self.tor_torrc ): self.common.log( - "Onion", - "connect", - "found a stale tor process, killing it", + "Onion", "connect", "found a stale tor process, killing it" ) proc.terminate() proc.wait() @@ -321,45 +328,69 @@ class Onion(object): # Bridge support if self.settings.get("bridges_enabled"): + f.write("\nUseBridges 1\n") if self.settings.get("bridges_type") == "built-in": - if self.settings.get("bridges_builtin_pt") == "obfs4": - with open( - self.common.get_resource_path("torrc_template-obfs4") - ) as o: - f.write(o.read()) - elif self.settings.get("bridges_builtin_pt") == "meek-azure": - with open( - self.common.get_resource_path( - "torrc_template-meek_lite_azure" - ) - ) as o: - f.write(o.read()) - elif self.settings.get("bridges_builtin_pt") == "snowflake": - with open( - self.common.get_resource_path( - "torrc_template-snowflake" - ) - ) as o: - f.write(o.read()) + # Use the CensorshipCircumvention API to fetch the latest built-in bridges + self.common.log( + "Onion", + "connect", + "Trying to automatically obtain built-in bridges via Meek", + ) + meek = Meek(self.common) + meek.start() + self.censorship_circumvention = CensorshipCircumvention( + self.common, meek + ) + builtin_bridges = ( + self.censorship_circumvention.request_builtin_bridges() + ) + meek.cleanup() + if builtin_bridges: + self.common.log( + "Onion", + "connect", + f"Obtained bridges: {builtin_bridges}", + ) + if ( + self.settings.get("bridges_builtin_pt") == "obfs4" + and "obfs4" in builtin_bridges + ): + for line in builtin_bridges["obfs4"]: + f.write(f"Bridge {line}\n") + elif ( + self.settings.get("bridges_builtin_pt") == "meek-azure" + and "meek" in builtin_bridges + ): + for line in builtin_bridges["meek"]: + # Meek bridge needs to be defined as "meek_lite", not "meek" + line = line.replace("meek", "meek_lite") + f.write(f"Bridge {line}\n") + elif ( + self.settings.get("bridges_builtin_pt") == "snowflake" + and "snowflake" in builtin_bridges + ): + for line in builtin_bridges["snowflake"]: + f.write(f"Bridge {line}\n") + else: + self.common.log( + "Onion", + "connect", + "Error getting built-in bridges via Meek", + ) + raise TorErrorGettingBridges() elif self.settings.get("bridges_type") == "moat": for line in self.settings.get("bridges_moat").split("\n"): if line.strip() != "": f.write(f"Bridge {line}\n") - f.write("\nUseBridges 1\n") elif self.settings.get("bridges_type") == "custom": for line in self.settings.get("bridges_custom").split("\n"): if line.strip() != "": f.write(f"Bridge {line}\n") - f.write("\nUseBridges 1\n") # Execute a tor subprocess - self.common.log( - "Onion", - "connect", - f"starting {self.tor_path} subprocess", - ) + self.common.log("Onion", "connect", f"starting {self.tor_path} subprocess") start_ts = time.time() if self.common.platform == "Windows": # In Windows, hide console window when opening tor.exe subprocess @@ -385,19 +416,11 @@ class Onion(object): ) # Wait for the tor controller to start - self.common.log( - "Onion", - "connect", - f"tor pid: {self.tor_proc.pid}", - ) + self.common.log("Onion", "connect", f"tor pid: {self.tor_proc.pid}") time.sleep(2) # Connect to the controller - self.common.log( - "Onion", - "connect", - "authenticating to tor controller", - ) + self.common.log("Onion", "connect", "authenticating to tor controller") try: if ( self.common.platform == "Windows" diff --git a/cli/onionshare_cli/resources/torrc_template-meek_lite_azure b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure deleted file mode 100644 index 6f601681..00000000 --- a/cli/onionshare_cli/resources/torrc_template-meek_lite_azure +++ /dev/null @@ -1,3 +0,0 @@ -# Enable built-in meek-azure bridge -Bridge meek_lite 0.0.2.0:3 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com -UseBridges 1 diff --git a/cli/onionshare_cli/resources/torrc_template-obfs4 b/cli/onionshare_cli/resources/torrc_template-obfs4 deleted file mode 100644 index 720cc28c..00000000 --- a/cli/onionshare_cli/resources/torrc_template-obfs4 +++ /dev/null @@ -1,17 +0,0 @@ -# Enable built-in obfs4-bridge -Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 -Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 -Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 -Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 -Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 -Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 -Bridge obfs4 144.217.20.138:80 FB70B257C162BF1038CA669D568D76F5B7F0BABB cert=vYIV5MgrghGQvZPIi1tJwnzorMgqgmlKaB77Y3Z9Q/v94wZBOAXkW+fdx4aSxLVnKO+xNw iat-mode=0 -Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 -Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0 -Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 -Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 -Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0 -Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 -Bridge obfs4 [2a0c:4d80:42:702::1]:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 -Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 -UseBridges 1 diff --git a/cli/onionshare_cli/resources/torrc_template-snowflake b/cli/onionshare_cli/resources/torrc_template-snowflake deleted file mode 100644 index 4100d3be..00000000 --- a/cli/onionshare_cli/resources/torrc_template-snowflake +++ /dev/null @@ -1,3 +0,0 @@ -# Enable built-in snowflake bridge -Bridge snowflake 192.0.2.3:1 2B280B23E1107BB62ABFC40DDCC8824814F80A72 -UseBridges 1 diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py index d0ad249b..486a3578 100644 --- a/desktop/src/onionshare/gui_common.py +++ b/desktop/src/onionshare/gui_common.py @@ -38,6 +38,7 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, + TorErrorGettingBridges, ) @@ -507,5 +508,7 @@ class GuiCommon: return strings._("error_stealth_not_supported") elif type(e) is PortNotAvailable: return strings._("error_port_not_available") + elif type(e) is TorErrorGettingBridges: + return strings._("error_getting_bridges") return None diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index d405c702..73b35b2e 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -223,6 +223,7 @@ "error_port_not_available": "OnionShare port not available", "history_receive_read_message_button": "Read Message", "error_tor_protocol_error": "There was an error with Tor: {}", + "error_getting_bridges": "Could not obtain bridges from the Tor API", "moat_contact_label": "Contacting BridgeDB...", "moat_captcha_label": "Solve the CAPTCHA to request a bridge.", "moat_captcha_placeholder": "Enter the characters from the image", @@ -232,4 +233,4 @@ "moat_captcha_error": "The solution is not correct. Please try again.", "moat_solution_empty_error": "You must enter the characters from the image", "mode_tor_not_connected_label": "OnionShare is not connected to the Tor network" -} \ No newline at end of file +} diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py index b02c6f21..c5f24017 100644 --- a/desktop/src/onionshare/threads.py +++ b/desktop/src/onionshare/threads.py @@ -37,6 +37,7 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, + TorErrorGettingBridges, ) from . import strings @@ -104,6 +105,7 @@ class OnionThread(QtCore.QThread): TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, + TorErrorGettingBridges, ) as e: message = self.mode.common.gui.get_translated_tor_error(e) self.error.emit(message) diff --git a/desktop/src/onionshare/tor_connection.py b/desktop/src/onionshare/tor_connection.py index 2cc599c4..77218c1a 100644 --- a/desktop/src/onionshare/tor_connection.py +++ b/desktop/src/onionshare/tor_connection.py @@ -36,6 +36,7 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, + TorErrorGettingBridges, ) from . import strings @@ -310,6 +311,7 @@ class TorConnectionThread(QtCore.QThread): TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, + TorErrorGettingBridges, ) as e: message = self.common.gui.get_translated_tor_error(e) self.common.log( -- cgit v1.2.3-54-g00ecf From f8dd9547cd691b643592b7dc0d9b507086a22154 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 23 Nov 2021 15:36:41 +1100 Subject: Raise exception if the API didn't return bridges for a specific bridge type, or if the bridge type wasn't recognized --- cli/onionshare_cli/onion.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index 54020e16..65b9e2bb 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -371,6 +371,16 @@ class Onion(object): ): for line in builtin_bridges["snowflake"]: f.write(f"Bridge {line}\n") + else: + # Either this is a weird bridge type saved to settings (how?) + # or there were no bridges for this bridge type returned from + # the API. + self.common.log( + "Onion", + "connect", + "Error getting built-in bridges for this bridge type via Meek", + ) + raise TorErrorGettingBridges() else: self.common.log( "Onion", -- cgit v1.2.3-54-g00ecf From 9ad87ea25efd8fc8f896eb8c6054a5da3e7f3ec5 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 23 Nov 2021 19:33:21 -0800 Subject: Update documentation for 2.4.1 --- docs/check-weblate.py | 10 +++--- docs/source/_static/screenshots/chat-sharing.png | Bin 71096 -> 72264 bytes docs/source/_static/screenshots/chat.png | Bin 49886 -> 50246 bytes .../source/_static/screenshots/receive-sharing.png | Bin 86396 -> 86601 bytes .../_static/screenshots/receive-torbrowser.png | Bin 64544 -> 63733 bytes docs/source/_static/screenshots/receive.png | Bin 74783 -> 75567 bytes docs/source/_static/screenshots/settings.png | Bin 47996 -> 0 bytes docs/source/_static/screenshots/share-files.png | Bin 43209 -> 43481 bytes docs/source/_static/screenshots/share-sharing.png | Bin 55012 -> 56505 bytes .../_static/screenshots/share-torbrowser.png | Bin 40063 -> 37067 bytes docs/source/_static/screenshots/share.png | Bin 34940 -> 35349 bytes docs/source/_static/screenshots/tabs.png | Bin 61616 -> 61801 bytes .../_static/screenshots/tor-settings-bridges.png | Bin 0 -> 57702 bytes .../_static/screenshots/tor-settings-moat.png | Bin 0 -> 105803 bytes docs/source/_static/screenshots/tor-settings.png | Bin 0 -> 45328 bytes docs/source/_static/screenshots/website-files.png | Bin 49159 -> 57805 bytes docs/source/_static/screenshots/website.png | Bin 36164 -> 36572 bytes docs/source/advanced.rst | 9 +++--- docs/source/conf.py | 4 +-- docs/source/develop.rst | 4 +-- docs/source/features.rst | 5 ++- docs/source/tor.rst | 36 +++++++++++++-------- 22 files changed, 39 insertions(+), 29 deletions(-) delete mode 100644 docs/source/_static/screenshots/settings.png create mode 100644 docs/source/_static/screenshots/tor-settings-bridges.png create mode 100644 docs/source/_static/screenshots/tor-settings-moat.png create mode 100644 docs/source/_static/screenshots/tor-settings.png diff --git a/docs/check-weblate.py b/docs/check-weblate.py index ee828f93..a5dc4dc8 100755 --- a/docs/check-weblate.py +++ b/docs/check-weblate.py @@ -15,7 +15,7 @@ async def api(path): async with httpx.AsyncClient() as client: r = await client.get( - url, headers={"Authorization": f"Token {api_token}"}, timeout=30.0 + url, headers={"Authorization": f"Token {api_token}"}, timeout=60 ) if r.status_code == 200: @@ -109,7 +109,8 @@ async def main(): languages[obj["code"]] = obj["language"] # Get the app translations for each language - await asyncio.gather(*[get_app_translation(lang_code) for lang_code in languages]) + for lang_code in languages: + await get_app_translation(lang_code) # Get the documentation translations for each component for each language for component in [ @@ -123,11 +124,8 @@ async def main(): "doc-sphinx", "doc-tor", ]: - docs_futures = [] for lang_code in languages: - docs_futures.append(get_docs_translation(component, lang_code)) - - await asyncio.gather(*docs_futures) + await get_docs_translation(component, lang_code) print("") diff --git a/docs/source/_static/screenshots/chat-sharing.png b/docs/source/_static/screenshots/chat-sharing.png index 51cf24a1..2ce7f0cc 100644 Binary files a/docs/source/_static/screenshots/chat-sharing.png and b/docs/source/_static/screenshots/chat-sharing.png differ diff --git a/docs/source/_static/screenshots/chat.png b/docs/source/_static/screenshots/chat.png index b328d375..25db2e19 100644 Binary files a/docs/source/_static/screenshots/chat.png and b/docs/source/_static/screenshots/chat.png differ diff --git a/docs/source/_static/screenshots/receive-sharing.png b/docs/source/_static/screenshots/receive-sharing.png index 36bf175b..0ef4ca0e 100644 Binary files a/docs/source/_static/screenshots/receive-sharing.png and b/docs/source/_static/screenshots/receive-sharing.png differ diff --git a/docs/source/_static/screenshots/receive-torbrowser.png b/docs/source/_static/screenshots/receive-torbrowser.png index 70ca189b..0a4e0cc7 100644 Binary files a/docs/source/_static/screenshots/receive-torbrowser.png and b/docs/source/_static/screenshots/receive-torbrowser.png differ diff --git a/docs/source/_static/screenshots/receive.png b/docs/source/_static/screenshots/receive.png index 9a5a9265..738edef4 100644 Binary files a/docs/source/_static/screenshots/receive.png and b/docs/source/_static/screenshots/receive.png differ diff --git a/docs/source/_static/screenshots/settings.png b/docs/source/_static/screenshots/settings.png deleted file mode 100644 index 2e0e49f1..00000000 Binary files a/docs/source/_static/screenshots/settings.png and /dev/null differ diff --git a/docs/source/_static/screenshots/share-files.png b/docs/source/_static/screenshots/share-files.png index b5f0223f..e75b3cab 100644 Binary files a/docs/source/_static/screenshots/share-files.png and b/docs/source/_static/screenshots/share-files.png differ diff --git a/docs/source/_static/screenshots/share-sharing.png b/docs/source/_static/screenshots/share-sharing.png index 47f00975..baafcdd9 100644 Binary files a/docs/source/_static/screenshots/share-sharing.png and b/docs/source/_static/screenshots/share-sharing.png differ diff --git a/docs/source/_static/screenshots/share-torbrowser.png b/docs/source/_static/screenshots/share-torbrowser.png index 4eeabf0e..2b7650c3 100644 Binary files a/docs/source/_static/screenshots/share-torbrowser.png and b/docs/source/_static/screenshots/share-torbrowser.png differ diff --git a/docs/source/_static/screenshots/share.png b/docs/source/_static/screenshots/share.png index 91e42dd1..9c62ecd1 100644 Binary files a/docs/source/_static/screenshots/share.png and b/docs/source/_static/screenshots/share.png differ diff --git a/docs/source/_static/screenshots/tabs.png b/docs/source/_static/screenshots/tabs.png index 04d01f0f..069dd37d 100644 Binary files a/docs/source/_static/screenshots/tabs.png and b/docs/source/_static/screenshots/tabs.png differ diff --git a/docs/source/_static/screenshots/tor-settings-bridges.png b/docs/source/_static/screenshots/tor-settings-bridges.png new file mode 100644 index 00000000..d3bb4237 Binary files /dev/null and b/docs/source/_static/screenshots/tor-settings-bridges.png differ diff --git a/docs/source/_static/screenshots/tor-settings-moat.png b/docs/source/_static/screenshots/tor-settings-moat.png new file mode 100644 index 00000000..9d3d9a59 Binary files /dev/null and b/docs/source/_static/screenshots/tor-settings-moat.png differ diff --git a/docs/source/_static/screenshots/tor-settings.png b/docs/source/_static/screenshots/tor-settings.png new file mode 100644 index 00000000..19d6b6c3 Binary files /dev/null and b/docs/source/_static/screenshots/tor-settings.png differ diff --git a/docs/source/_static/screenshots/website-files.png b/docs/source/_static/screenshots/website-files.png index b7c49ef8..8f92ec29 100644 Binary files a/docs/source/_static/screenshots/website-files.png and b/docs/source/_static/screenshots/website-files.png differ diff --git a/docs/source/_static/screenshots/website.png b/docs/source/_static/screenshots/website.png index 83919507..ce0ebf27 100644 Binary files a/docs/source/_static/screenshots/website.png and b/docs/source/_static/screenshots/website.png differ diff --git a/docs/source/advanced.rst b/docs/source/advanced.rst index 61e9d15c..870f8777 100644 --- a/docs/source/advanced.rst +++ b/docs/source/advanced.rst @@ -105,14 +105,14 @@ You can browse the command-line documentation by running ``onionshare --help``:: │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ │ │ - │ v2.4 │ + │ v2.4.1 │ │ │ │ https://onionshare.org/ │ ╰───────────────────────────────────────────╯ usage: onionshare-cli [-h] [--receive] [--website] [--chat] [--local-only] [--connect-timeout SECONDS] [--config FILENAME] [--persistent FILENAME] [--title TITLE] [--public] - [--auto-start-timer SECONDS] [--auto-stop-timer SECONDS] [--no-autostop-sharing] [--data-dir data_dir] [--webhook-url webhook_url] [--disable-text] [--disable-files] - [--disable_csp] [-v] + [--auto-start-timer SECONDS] [--auto-stop-timer SECONDS] [--no-autostop-sharing] [--data-dir data_dir] [--webhook-url webhook_url] [--disable-text] + [--disable-files] [--disable_csp] [--custom_csp custom_csp] [-v] [filename ...] positional arguments: @@ -140,5 +140,6 @@ You can browse the command-line documentation by running ``onionshare --help``:: Receive files: URL to receive webhook notifications --disable-text Receive files: Disable receiving text messages --disable-files Receive files: Disable receiving files - --disable_csp Publish website: Disable Content Security Policy header (allows your website to use third-party resources) + --disable_csp Publish website: Disable the default Content Security Policy header (allows your website to use third-party resources) + --custom_csp custom_csp Publish website: Set a custom Content Security Policy header -v, --verbose Log OnionShare errors to stdout, and web errors to disk diff --git a/docs/source/conf.py b/docs/source/conf.py index b20e51db..d2eb1566 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,6 +1,6 @@ project = "OnionShare" author = copyright = "Micah Lee, et al." -version = release = "2.4" +version = release = "2.4.1" extensions = ["sphinx_rtd_theme"] templates_path = ["_templates"] @@ -19,7 +19,7 @@ languages = [ ("Українська", "uk"), # Ukranian ] -versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4"] +versions = ["2.3", "2.3.1", "2.3.2", "2.3.3", "2.4", "2.4.1"] html_theme = "sphinx_rtd_theme" html_logo = "_static/logo.png" diff --git a/docs/source/develop.rst b/docs/source/develop.rst index 042800c4..a9121bfe 100644 --- a/docs/source/develop.rst +++ b/docs/source/develop.rst @@ -58,7 +58,7 @@ This prints a lot of helpful messages to the terminal, such as when certain obje │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ │ │ - │ v2.4 │ + │ v2.4.1 │ │ │ │ https://onionshare.org/ │ ╰───────────────────────────────────────────╯ @@ -144,7 +144,7 @@ You can do this with the ``--local-only`` flag. For example:: │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │ │ │ - │ v2.4 │ + │ v2.4.1 │ │ │ │ https://onionshare.org/ │ ╰───────────────────────────────────────────╯ diff --git a/docs/source/features.rst b/docs/source/features.rst index 497b0ede..3cb89ed7 100644 --- a/docs/source/features.rst +++ b/docs/source/features.rst @@ -118,7 +118,10 @@ Content Security Policy By default OnionShare helps secure your website by setting a strict `Content Security Policy `_ header. However, this prevents third-party content from loading inside the web page. -If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, check the "Don't send Content Security Policy header (allows your website to use third-party resources)" box before starting the service. +If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, you have two options: + +- You can disable sending a Content Security Policy header by checking the "Don't send Content Security Policy header (allows your website to use third-party resources)" box before starting the service. +- You can send a custom Content Security Policy header. Tips for running a website service ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/docs/source/tor.rst b/docs/source/tor.rst index e0b02d27..a883dfb7 100644 --- a/docs/source/tor.rst +++ b/docs/source/tor.rst @@ -1,12 +1,12 @@ Connecting to Tor ================= -Pick a way to connect OnionShare to Tor by clicking the "⚙" icon in the bottom right of the OnionShare window to get to its settings. +Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in the bottom right of the OnionShare window to open the Tor Settings tab. -.. image:: _static/screenshots/settings.png +.. image:: _static/screenshots/tor-settings.png -Use the ``tor`` bundled with OnionShare ---------------------------------------- +Use the Tor version built into OnionShare +----------------------------------------- This is the default, simplest and most reliable way that OnionShare connects to Tor. For this reason, it's recommended for most users. @@ -14,6 +14,24 @@ For this reason, it's recommended for most users. When you open OnionShare, it launches an already configured ``tor`` process in the background for OnionShare to use. It doesn't interfere with other ``tor`` processes on your computer, so you can use the Tor Browser or the system ``tor`` on their own. +Getting Around Censorship +------------------------- + +If your access to the internet is censored, you can configure OnionShare to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without one, you don't need to use a bridge. + +To use a bridge, open the Tor Settings tab. +You must select "Use the Tor version built into OnionShare" and check the "Use a bridge" checkbox. + +Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges is recommended over using `meek-azure`. + +.. image:: _static/screenshots/tor-settings-bridges.png + +If using a built-in bridge doesn't work, you can request a bridge from torproject.org. You will have to solve a CAPTCHA in order to request a bridge. (This makes it more difficult for governments or ISPs to block access to Tor bridges.) + +.. image:: _static/screenshots/tor-settings-moat.png + +You also have the option of using a bridge that you learned about from a trusted source. + Attempt auto-configuration with Tor Browser ------------------------------------------- @@ -102,13 +120,3 @@ Under "Tor authentication settings" choose "No authentication, or cookie authent Click the "Test Connection to Tor" button. If all goes well, you should see "Connected to the Tor controller". - -Using Tor bridges ------------------ - -If your access to the internet is censored, you can configure OnionShare to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without one, you don't need to use a bridge. - -To configure bridges, click the "⚙" icon in OnionShare. - -You can use the built-in obfs4 pluggable transports, the built-in meek_lite (Azure) pluggable transports, or custom bridges, which you can obtain from Tor's `BridgeDB `_. -If you need to use a bridge, try the built-in obfs4 ones first. -- cgit v1.2.3-54-g00ecf From 27899a3655b5b4fd4b74dfc9b54639697ed727d9 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 23 Nov 2021 19:34:06 -0800 Subject: Rebuild docs --- docs/gettext/.doctrees/advanced.doctree | Bin 26691 -> 26945 bytes docs/gettext/.doctrees/develop.doctree | Bin 37627 -> 37627 bytes docs/gettext/.doctrees/environment.pickle | Bin 38315 -> 38212 bytes docs/gettext/.doctrees/features.doctree | Bin 48536 -> 49386 bytes docs/gettext/.doctrees/help.doctree | Bin 7687 -> 7687 bytes docs/gettext/.doctrees/index.doctree | Bin 3439 -> 3439 bytes docs/gettext/.doctrees/install.doctree | Bin 23153 -> 23153 bytes docs/gettext/.doctrees/security.doctree | Bin 13580 -> 13580 bytes docs/gettext/.doctrees/tor.doctree | Bin 30114 -> 31011 bytes docs/gettext/advanced.pot | 4 +- docs/gettext/develop.pot | 4 +- docs/gettext/features.pot | 46 ++-- docs/gettext/help.pot | 4 +- docs/gettext/index.pot | 4 +- docs/gettext/install.pot | 4 +- docs/gettext/security.pot | 4 +- docs/gettext/sphinx.pot | 4 +- docs/gettext/tor.pot | 92 ++++---- docs/source/locale/en/LC_MESSAGES/features.po | 59 +++-- docs/source/locale/en/LC_MESSAGES/tor.po | 151 +++++++++---- docs/source/locale/fi/LC_MESSAGES/features.po | 50 +++-- docs/source/locale/fi/LC_MESSAGES/tor.po | 156 ++++++++----- docs/source/locale/pl/LC_MESSAGES/features.po | 50 +++-- docs/source/locale/pl/LC_MESSAGES/tor.po | 157 ++++++++----- docs/source/locale/pt_BR/LC_MESSAGES/features.po | 50 +++-- docs/source/locale/pt_BR/LC_MESSAGES/tor.po | 158 ++++++++----- docs/source/locale/ru/LC_MESSAGES/features.po | 171 +++++++------- docs/source/locale/ru/LC_MESSAGES/tor.po | 169 ++++++++------ docs/source/locale/tr/LC_MESSAGES/features.po | 275 ++++++++++++----------- docs/source/locale/tr/LC_MESSAGES/tor.po | 272 ++++++++++++---------- docs/source/locale/uk/LC_MESSAGES/features.po | 168 +++++++------- docs/source/locale/uk/LC_MESSAGES/tor.po | 165 ++++++++------ 32 files changed, 1319 insertions(+), 898 deletions(-) diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree index 8b98b176..e36dddee 100644 Binary files a/docs/gettext/.doctrees/advanced.doctree and b/docs/gettext/.doctrees/advanced.doctree differ diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree index 857fea03..e3a6bd6a 100644 Binary files a/docs/gettext/.doctrees/develop.doctree and b/docs/gettext/.doctrees/develop.doctree differ diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle index c7599d67..9619e47c 100644 Binary files a/docs/gettext/.doctrees/environment.pickle and b/docs/gettext/.doctrees/environment.pickle differ diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree index 21d030ce..3c7f575c 100644 Binary files a/docs/gettext/.doctrees/features.doctree and b/docs/gettext/.doctrees/features.doctree differ diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree index f38d5320..c733889f 100644 Binary files a/docs/gettext/.doctrees/help.doctree and b/docs/gettext/.doctrees/help.doctree differ diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree index 36e30fb1..e79b6478 100644 Binary files a/docs/gettext/.doctrees/index.doctree and b/docs/gettext/.doctrees/index.doctree differ diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree index 212698e0..22d1cf79 100644 Binary files a/docs/gettext/.doctrees/install.doctree and b/docs/gettext/.doctrees/install.doctree differ diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree index 30c53f5e..9c8ff96e 100644 Binary files a/docs/gettext/.doctrees/security.doctree and b/docs/gettext/.doctrees/security.doctree differ diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree index 74773ead..d1b40318 100644 Binary files a/docs/gettext/.doctrees/tor.doctree and b/docs/gettext/.doctrees/tor.doctree differ diff --git a/docs/gettext/advanced.pot b/docs/gettext/advanced.pot index c2310c47..cbb1a2e6 100644 --- a/docs/gettext/advanced.pot +++ b/docs/gettext/advanced.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:49-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot index facf22b4..0e69a5c4 100644 --- a/docs/gettext/develop.pot +++ b/docs/gettext/develop.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/features.pot b/docs/gettext/features.pot index 8e5caac3..ed794467 100644 --- a/docs/gettext/features.pot +++ b/docs/gettext/features.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -178,73 +178,81 @@ msgid "By default OnionShare helps secure your website by setting a strict `Cont msgstr "" #: ../../source/features.rst:121 -msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, check the \"Don't send Content Security Policy header (allows your website to use third-party resources)\" box before starting the service." +msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, you have two options:" +msgstr "" + +#: ../../source/features.rst:123 +msgid "You can disable sending a Content Security Policy header by checking the \"Don't send Content Security Policy header (allows your website to use third-party resources)\" box before starting the service." msgstr "" #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "If you want to host a long-term website using OnionShare (meaning not just to quickly show someone something), it's recommended you do it on a separate, dedicated computer that is always powered on and connected to the internet, and not on the one you use on a regular basis. Save the tab (see :ref:`save_tabs`) so you can resume the website with the same address if you close OnionShare and re-open it later." msgstr "" -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "If your website is intended for the public, you should run it as a public service (see :ref:`turn_off_private_key`)." msgstr "" -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "You can use OnionShare to set up a private, secure chat room that doesn't log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "After you start the server, copy the OnionShare address and private key and send them to the people you want in the anonymous chat room. If it's important to limit exactly who can join, use an encrypted messaging app to send out the OnionShare address and private key." msgstr "" -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "People can join the chat room by loading its OnionShare address in Tor Browser. The chat room requires JavasScript, so everyone who wants to participate must have their Tor Browser security level set to \"Standard\" or \"Safer\", instead of \"Safest\"." msgstr "" -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "When someone joins the chat room they get assigned a random name. They can change their name by typing a new name in the box in the left panel and pressing ↵. Since the chat history isn't saved anywhere, it doesn't get displayed at all, even if others were already chatting in the room." msgstr "" -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "In an OnionShare chat room, everyone is anonymous. Anyone can change their name to anything, and there is no way to confirm anyone's identity." msgstr "" -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "However, if you create an OnionShare chat room and securely send the address only to a small group of trusted friends using encrypted messages, you can be reasonably confident the people joining the chat room are your friends." msgstr "" -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "If you need to already be using an encrypted messaging app, what's the point of an OnionShare chat room to begin with? It leaves less traces." msgstr "" -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "If you for example send a message to a Signal group, a copy of your message ends up on each device (the smartphones, and computers if they set up Signal Desktop) of each member of the group. Even if disappearing messages is turned on, it's hard to confirm all copies of the messages are actually deleted from all devices, and from any other places (like notifications databases) they may have been saved to. OnionShare chat rooms don't store any messages anywhere, so the problem is reduced to a minimum." msgstr "" -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 msgid "OnionShare chat rooms can also be useful for people wanting to chat anonymously and securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity." msgstr "" -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "Because OnionShare relies on Tor onion services, connections between the Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When someone posts a message to an OnionShare chat room, they send it to the server through the E2EE onion connection, which then sends it to all other members of the chat room using WebSockets, through their E2EE onion connections." msgstr "" -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "OnionShare doesn't implement any chat encryption on its own. It relies on the Tor onion service's encryption instead." msgstr "" diff --git a/docs/gettext/help.pot b/docs/gettext/help.pot index e7cabc61..38237877 100644 --- a/docs/gettext/help.pot +++ b/docs/gettext/help.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/index.pot b/docs/gettext/index.pot index 20bac98d..431f6d84 100644 --- a/docs/gettext/index.pot +++ b/docs/gettext/index.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/install.pot b/docs/gettext/install.pot index a0f4c385..b0cb6c4d 100644 --- a/docs/gettext/install.pot +++ b/docs/gettext/install.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/security.pot b/docs/gettext/security.pot index fa5f0f3a..c68c04e2 100644 --- a/docs/gettext/security.pot +++ b/docs/gettext/security.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-17 14:39-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/sphinx.pot b/docs/gettext/sphinx.pot index c877cc7b..454a1718 100644 --- a/docs/gettext/sphinx.pot +++ b/docs/gettext/sphinx.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/docs/gettext/tor.pot b/docs/gettext/tor.pot index da3333e9..7fd4bc5b 100644 --- a/docs/gettext/tor.pot +++ b/docs/gettext/tor.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OnionShare 2.4\n" +"Project-Id-Version: OnionShare 2.4.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,11 +21,11 @@ msgid "Connecting to Tor" msgstr "" #: ../../source/tor.rst:4 -msgid "Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the bottom right of the OnionShare window to get to its settings." +msgid "Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" +msgid "Use the Tor version built into OnionShare" msgstr "" #: ../../source/tor.rst:11 @@ -37,106 +37,114 @@ msgid "When you open OnionShare, it launches an already configured ``tor`` proce msgstr "" #: ../../source/tor.rst:18 -msgid "Attempt auto-configuration with Tor Browser" +msgid "Getting Around Censorship" msgstr "" #: ../../source/tor.rst:20 +msgid "If your access to the internet is censored, you can configure OnionShare to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without one, you don't need to use a bridge." +msgstr "" + +#: ../../source/tor.rst:22 +msgid "To use a bridge, open the Tor Settings tab. You must select \"Use the Tor version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "If using a built-in bridge doesn't work, you can request a bridge from torproject.org. You will have to solve a CAPTCHA in order to request a bridge. (This makes it more difficult for governments or ISPs to block access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "You also have the option of using a bridge that you learned about from a trusted source." +msgstr "" + +#: ../../source/tor.rst:36 +msgid "Attempt auto-configuration with Tor Browser" +msgstr "" + +#: ../../source/tor.rst:38 msgid "If you have `downloaded the Tor Browser `_ and don't want two ``tor`` processes running, you can use the ``tor`` process from the Tor Browser. Keep in mind you need to keep Tor Browser open in the background while you're using OnionShare for this to work." msgstr "" -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "This is fairly advanced. You'll need to know how edit plaintext files and do stuff as an administrator." msgstr "" -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "Download the Tor Windows Expert Bundle `from `_. Extract the compressed file and copy the extracted folder to ``C:\\Program Files (x86)\\`` Rename the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." msgstr "" -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "Make up a control port password. (Using 7 words in a sequence like ``comprised stumble rummage work avenging construct volatile`` is a good idea for a password.) Now open a command prompt (``cmd``) as an administrator, and use ``tor.exe --hash-password`` to generate a hash of your password. For example::" msgstr "" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "The hashed password output is displayed after some warnings (which you can ignore). In the case of the above example, it is ``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." msgstr "" -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "Now create a new text file at ``C:\\Program Files (x86)\\tor-win32\\torrc`` and put your hashed password output in it, replacing the ``HashedControlPassword`` with the one you just generated::" msgstr "" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "In your administrator command prompt, install ``tor`` as a service using the appropriate ``torrc`` file you just created (as described in ``_). Like this::" msgstr "" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "Open OnionShare and click the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" choose \"Connect using control port\", and set \"Control port\" to ``127.0.0.1`` and \"Port\" to ``9051``. Under \"Tor authentication settings\" choose \"Password\" and set the password to the control port password you picked above. Click the \"Test Connection to Tor\" button. If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "First, install `Homebrew `_ if you don't already have it, and then install Tor::" msgstr "" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "Open OnionShare and click the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" choose \"Connect using socket file\", and set the socket file to be ``/usr/local/var/run/tor/control.socket``. Under \"Tor authentication settings\" choose \"No authentication, or cookie authentication\". Click the \"Test Connection to Tor\" button." msgstr "" -#: ../../source/tor.rst:84 -#: ../../source/tor.rst:104 +#: ../../source/tor.rst:102 +#: ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a similar Linux distro, It is recommended to use the Tor Project's `official repository `_." msgstr "" -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "Next, add your user to the group that runs the ``tor`` process (in the case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to connect to your system ``tor``'s control socket file." msgstr "" -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "Add your user to the ``debian-tor`` group by running this command (replace ``username`` with your actual username)::" msgstr "" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "Reboot your computer. After it boots up again, open OnionShare and click the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" choose \"Connect using socket file\". Set the socket file to be ``/var/run/tor/control``. Under \"Tor authentication settings\" choose \"No authentication, or cookie authentication\". Click the \"Test Connection to Tor\" button." msgstr "" - -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "" - -#: ../../source/tor.rst:109 -msgid "If your access to the internet is censored, you can configure OnionShare to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without one, you don't need to use a bridge." -msgstr "" - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "" - -#: ../../source/tor.rst:113 -msgid "You can use the built-in obfs4 pluggable transports, the built-in meek_lite (Azure) pluggable transports, or custom bridges, which you can obtain from Tor's `BridgeDB `_. If you need to use a bridge, try the built-in obfs4 ones first." -msgstr "" diff --git a/docs/source/locale/en/LC_MESSAGES/features.po b/docs/source/locale/en/LC_MESSAGES/features.po index a3f2db2d..61cfdd3c 100644 --- a/docs/source/locale/en/LC_MESSAGES/features.po +++ b/docs/source/locale/en/LC_MESSAGES/features.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -292,16 +292,25 @@ msgstr "" #: ../../source/features.rst:121 msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" +msgstr "" + +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." msgstr "" #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -311,23 +320,23 @@ msgid "" "address if you close OnionShare and re-open it later." msgstr "" -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " @@ -335,7 +344,7 @@ msgid "" "to send out the OnionShare address and private key." msgstr "" -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -343,7 +352,7 @@ msgid "" "\"Standard\" or \"Safer\", instead of \"Safest\"." msgstr "" -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -351,13 +360,13 @@ msgid "" "get displayed at all, even if others were already chatting in the room." msgstr "" -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." msgstr "" -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -365,17 +374,17 @@ msgid "" "room are your friends." msgstr "" -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." msgstr "" -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -387,7 +396,7 @@ msgid "" "minimum." msgstr "" -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -397,11 +406,11 @@ msgid "" "anonymity." msgstr "" -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -411,7 +420,7 @@ msgid "" " connections." msgstr "" -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." @@ -1046,3 +1055,13 @@ msgstr "" #~ " compromosing their anonymity." #~ msgstr "" +#~ msgid "" +#~ "If you want to load content from" +#~ " third-party websites, like assets or" +#~ " JavaScript libraries from CDNs, check " +#~ "the \"Don't send Content Security Policy" +#~ " header (allows your website to use" +#~ " third-party resources)\" box before " +#~ "starting the service." +#~ msgstr "" + diff --git a/docs/source/locale/en/LC_MESSAGES/tor.po b/docs/source/locale/en/LC_MESSAGES/tor.po index b11638a9..9e685032 100644 --- a/docs/source/locale/en/LC_MESSAGES/tor.po +++ b/docs/source/locale/en/LC_MESSAGES/tor.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -23,12 +23,12 @@ msgstr "" #: ../../source/tor.rst:4 msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" +msgid "Use the Tor version built into OnionShare" msgstr "" #: ../../source/tor.rst:11 @@ -46,28 +46,66 @@ msgid "" msgstr "" #: ../../source/tor.rst:18 -msgid "Attempt auto-configuration with Tor Browser" +msgid "Getting Around Censorship" msgstr "" #: ../../source/tor.rst:20 msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 +msgid "Attempt auto-configuration with Tor Browser" +msgstr "" + +#: ../../source/tor.rst:38 +msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " "process from the Tor Browser. Keep in mind you need to keep Tor Browser " "open in the background while you're using OnionShare for this to work." msgstr "" -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." msgstr "" -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -75,7 +113,7 @@ msgid "" "the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." msgstr "" -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -84,21 +122,21 @@ msgid "" "your password. For example::" msgstr "" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." msgstr "" -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " "``HashedControlPassword`` with the one you just generated::" msgstr "" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -106,11 +144,11 @@ msgid "" "this::" msgstr "" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -121,25 +159,25 @@ msgid "" "to the Tor controller\"." msgstr "" -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" msgstr "" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -148,15 +186,15 @@ msgid "" "cookie authentication\". Click the \"Test Connection to Tor\" button." msgstr "" -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -164,20 +202,20 @@ msgid "" "repo/>`_." msgstr "" -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " "connect to your system ``tor``'s control socket file." msgstr "" -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" msgstr "" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -187,30 +225,6 @@ msgid "" "Connection to Tor\" button." msgstr "" -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "" - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" - #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -455,3 +469,42 @@ msgstr "" #~ "bridge." #~ msgstr "" +#~ msgid "" +#~ "Pick a way to connect OnionShare " +#~ "to Tor by clicking the \"⚙\" icon" +#~ " in the bottom right of the " +#~ "OnionShare window to get to its " +#~ "settings." +#~ msgstr "" + +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "" + +#~ msgid "Using Tor bridges" +#~ msgstr "" + +#~ msgid "" +#~ "If your access to the internet is" +#~ " censored, you can configure OnionShare " +#~ "to connect to the Tor network " +#~ "using `Tor bridges " +#~ "`_. If " +#~ "OnionShare connects to Tor without one," +#~ " you don't need to use a " +#~ "bridge." +#~ msgstr "" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "" + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" + diff --git a/docs/source/locale/fi/LC_MESSAGES/features.po b/docs/source/locale/fi/LC_MESSAGES/features.po index 26f2695a..cedfb553 100644 --- a/docs/source/locale/fi/LC_MESSAGES/features.po +++ b/docs/source/locale/fi/LC_MESSAGES/features.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3.2\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-08-25 18:33+0000\n" "Last-Translator: Kaantaja \n" "Language: fi\n" @@ -430,11 +430,10 @@ msgstr "" "sisällä." #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" msgstr "" "Jos haluat ladata sisältöä kolmannen osapuolen verkkosivuilta, kuten " "resursseja tai JavaScript-kirjastoja sisällönjakeluverkosta, raksita " @@ -442,11 +441,22 @@ msgstr "" " verkkosivun käyttää kolmannen osapuolten resursseja)\" -ruutu ennen " "palvelun käynnistämistä." +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Vinkkejä verkkosivupalvelun ylläpitoon" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 #, fuzzy msgid "" "If you want to host a long-term website using OnionShare (meaning not " @@ -464,7 +474,7 @@ msgstr "" "voit palauttaa verkkosivun samassa osoitteessa, jos suljet OnionSharen ja" " avaat sen uudelleen myöhemmin." -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 #, fuzzy msgid "" "If your website is intended for the public, you should run it as a public" @@ -473,11 +483,11 @@ msgstr "" "Jos verkkosivusi on tarkoitus olla avoin yleisölle, sinun tulisi " "suorittaa sitä julkisena palveluna (see :ref:`turn_off_passwords`)." -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Viesti anonyymisti" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." @@ -486,7 +496,7 @@ msgstr "" "keskusteluhuoneen, joka ei pidä lokia mistään. Avaa vain " "keskusteluvälilehti ja klikkaa \"Aloita chatpalvelu\"." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 #, fuzzy msgid "" "After you start the server, copy the OnionShare address and private key " @@ -499,7 +509,7 @@ msgstr "" "rajoittaa tarkasti kuka voi liittyä, käytä kryptattua viestintäsovellusta" " lähettääksesi OnionShare-osoitteen." -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -512,7 +522,7 @@ msgstr "" "säädettynä joko tasolle \"Standard\" tai \"Safet\". Ei tasolle " "\"Safest\"." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -525,7 +535,7 @@ msgstr "" "tallenneta mihinkään, sitä ei näytetä lainkaan, vaikka jotkut muut " "olisivat valmiiksi keskustelemassa huoneessa." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -534,7 +544,7 @@ msgstr "" "muuttaa nimeään miksi tahansa, eikä kellään ole mahdollisuutta varmistaa " "kenenkään toisen identiteettiä." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -546,11 +556,11 @@ msgstr "" "viestintäsovelluksen kautta, voit olla suhteellisen varma, että " "huoneeseen liittyvät henkilöt ovat tuntemiasi henkilöitä." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Mitä hyötyä tästä on?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -559,7 +569,7 @@ msgstr "" "idea OnionSharen keskusteluhuoneessa on ensinnäkään? Se jättää vähemmän " "jälkiä." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -571,7 +581,7 @@ msgid "" "minimum." msgstr "" -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 #, fuzzy msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " @@ -588,11 +598,11 @@ msgstr "" "ja sen jälkeen odottaa toimittajaa keskusteluryhmään. Kaikki tämä ilman, " "että kenenkään anonyymiys on uhattuna." -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Kuinka kryptaaminen toimii?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -608,7 +618,7 @@ msgstr "" "muille huoneen jäsenille käyttäen WebSocketeja, edelleen heidän E2EE-" "sipuliyhteyksien läpi." -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." diff --git a/docs/source/locale/fi/LC_MESSAGES/tor.po b/docs/source/locale/fi/LC_MESSAGES/tor.po index 5ee9f188..a4d27700 100644 --- a/docs/source/locale/fi/LC_MESSAGES/tor.po +++ b/docs/source/locale/fi/LC_MESSAGES/tor.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3.2\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-08-25 18:33+0000\n" "Last-Translator: Kaantaja \n" "Language: fi\n" @@ -23,16 +23,17 @@ msgid "Connecting to Tor" msgstr "Yhdistetään Toriin" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "Valitse, kuinka OnionShare yhdistetään Toriin klikkaamalla \"⚙\" " "kuvaketta Onionshare-ikkunan oikeasta alareunasta." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "Käytä ``tor`` Onionsharen kanssa" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" @@ -56,10 +57,53 @@ msgstr "" "järjestelmän ``tor`` -sovellusta erikseen." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +#, fuzzy +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" +"Jos yhteytesi internetiin on sensuroitu, voit määrittää OnionSharen " +"yhdistymään Tor-verkkoon käyttämällä `Tor-siltoja " +"`_. Jos OnionShare " +"yhdistää Toriin ilman sellaista, sinun ei tarvitse käyttää siltaa." + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Yritä automaattista asetusten säätämistä Tor-selaimella" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " @@ -71,11 +115,11 @@ msgstr "" "``tor``-prosessia. Muista, että tällöin Tor-selaimen tulee pysyä auki " "taustalla, kun käytät OnionSharea." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Järjestelmän ``tor``-prosessin käyttäminen Windowsissa" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." @@ -83,7 +127,7 @@ msgstr "" "Tämä on melko vaativaa. Sinun täytyy tietää kuinka muokata selkokielisiä " "tiedostoja ja kuinka tehdä ylläpitojuttuja." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -96,7 +140,7 @@ msgstr "" "purettu kansio, jonka sisällä ovat myös ``Data``ja `Tor``, muotoon ``tor-" "win32``." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -110,7 +154,7 @@ msgstr "" "ylläpitäjänä, ja käytä ``tor.exe --hash-password`` luodaksesi tiivisteen " "salasanastasi. Esimerkiksi::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -120,7 +164,7 @@ msgstr "" "ohittaa). Ylläolevassa esimerkkitapauksessa se on " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -130,7 +174,7 @@ msgstr "" "win32\\torrc`` ja liitä hashattu salasanan sisältö tekstitiedostoon, " "korvaamalla ``HashedControlPassword`in sillä minkä juuri loit::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -143,11 +187,11 @@ msgstr "" "``_). Eli " "näin::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Suoritat nyt järjestelmän ``tor``-prosessia Windowsissa!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -165,11 +209,11 @@ msgstr "" "valitsit aiemmin. Klikkaa \"Testaa yhteys Toriin\" -nappia. Jos kaikki " "menee hyvin, sinun tulisi nähdä \"Yhdistetty Tor-ohjaimeen\"." -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "Järjestelmän ``tor``-prosessin käyttö macOS:ssa" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -177,15 +221,15 @@ msgstr "" "Aluksi, asenna `Homebrew `_ jos sinulla ei ole vielä " "ole sitä, ja asenna sitten Tor::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "Määritä nyt Tor sallimalla yhteydet OnionSharesta::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "Ja aloita järjestelmän Tor-palvelu::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -200,15 +244,15 @@ msgstr "" "tunnistautumisasetukset\"-valikon alta valitse \"Ei tunnistautumista, tai" " evästetunnistautumista\". Klikkaa \"Testaa yhteys Toriin\" -nappia." -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "Jos kaikki menee hyvin, sinun tulisi nähdä \"Yhdistetty Tor-ohjaimeen\"." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Järjestelmän ``tor`` -prosessin käyttö Linuxilla" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -219,7 +263,7 @@ msgstr "" "kaltaista Linux-jakelua, on suositeltua käyttää Tor Projectin virallista " "ohjelmavarastoa `_." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " @@ -229,7 +273,7 @@ msgstr "" "(Debianin ja Ubuntun tapauksessa, ``debian-tor``) ja määritä OnionShare " "yhdistämään järjestelmäsi``tor``in kontrolli-socket-tiedostoon." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -237,7 +281,7 @@ msgstr "" "Lisää käyttäjäsi ``debian-tor``-ryhmään suorittamalla tämä komento " "(korvaa ``username``omalla oikealla käyttäjänimelläsi)::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -253,37 +297,31 @@ msgstr "" "tunnistautumisasetukset\"-valikon alta valitse \"Ei tunnistautumista, tai" " evästetunnistautumista\". Klikkaa \"Testaa yhteys Toriin\" -nappia." -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Tor-siltojen käyttäminen" - -#: ../../source/tor.rst:109 -#, fuzzy -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" -"Jos yhteytesi internetiin on sensuroitu, voit määrittää OnionSharen " -"yhdistymään Tor-verkkoon käyttämällä `Tor-siltoja " -"`_. Jos OnionShare " -"yhdistää Toriin ilman sellaista, sinun ei tarvitse käyttää siltaa." - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "Määrittääksesi sillat klikkaa \"⚙\" kuvaketta OnionSharessa." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Voit käyttää sisäänrakennettua obfs4 plugattavia siirtoja, " -"sisäänrakennettuja meek_lite (Azure) plugattavia siirtoja tai " -"räätälöityjä siltoja, jotka sinä voit hankkia Torin `BridgeDB:sta " -"`_. Jos tarvitset siltaa, yritä " -"sisäänrakennettua obfs4-vaihtoehtoa ensin." +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "Käytä ``tor`` Onionsharen kanssa" + +#~ msgid "Using Tor bridges" +#~ msgstr "Tor-siltojen käyttäminen" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "Määrittääksesi sillat klikkaa \"⚙\" kuvaketta OnionSharessa." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Voit käyttää sisäänrakennettua obfs4 " +#~ "plugattavia siirtoja, sisäänrakennettuja meek_lite" +#~ " (Azure) plugattavia siirtoja tai " +#~ "räätälöityjä siltoja, jotka sinä voit " +#~ "hankkia Torin `BridgeDB:sta " +#~ "`_. Jos tarvitset " +#~ "siltaa, yritä sisäänrakennettua obfs4-vaihtoehtoa" +#~ " ensin." diff --git a/docs/source/locale/pl/LC_MESSAGES/features.po b/docs/source/locale/pl/LC_MESSAGES/features.po index 27f9859d..e45cddf5 100644 --- a/docs/source/locale/pl/LC_MESSAGES/features.po +++ b/docs/source/locale/pl/LC_MESSAGES/features.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-19 15:37+0000\n" "Last-Translator: Rafał Godek \n" "Language: pl\n" @@ -340,22 +340,32 @@ msgid "" msgstr "" #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" msgstr "" "Jeśli chcesz załadować zawartość z witryn internetowych stron trzecich, " "na przykład zasoby lub biblioteki JavaScript z sieci CDN, przed " "uruchomieniem usługi zaznacz pole „Nie wysyłaj nagłówka Content Security " "Policy (pozwala Twojej witrynie korzystanie z zasobów innych firm)”." +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Wskazówki dotyczące prowadzenia serwisu internetowego" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -365,17 +375,17 @@ msgid "" "address if you close OnionShare and re-open it later." msgstr "" -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Czatuj anonimowo" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." @@ -384,7 +394,7 @@ msgstr "" "który niczego nie rejestruje. Wystarczy otworzyć zakładkę czatu i kliknąć" " „Uruchom serwer czatu”." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " @@ -392,7 +402,7 @@ msgid "" "to send out the OnionShare address and private key." msgstr "" -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -404,7 +414,7 @@ msgstr "" "uczestniczyć, musi mieć ustawiony poziom bezpieczeństwa przeglądarki Tor " "na „Standardowy” lub „Bezpieczniejszy”, zamiast „Najbezpieczniejszy”." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -416,7 +426,7 @@ msgstr "" "↵. Ponieważ historia czatu nie jest nigdzie zapisywana, nie jest w ogóle " "wyświetlana, nawet jeśli inni już rozmawiali w tym czacie." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -424,7 +434,7 @@ msgstr "" "W czacie OnionShare wszyscy są anonimowi. Każdy może zmienić swoje imię " "na dowolne i nie ma żadnej możliwości potwierdzenia czyjejś tożsamości." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -436,11 +446,11 @@ msgstr "" "wiadomości, możesz mieć wystarczającą pewność, że osoby dołączające do " "pokoju rozmów są Twoimi przyjaciółmi." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Jak to jest przydatne?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -448,7 +458,7 @@ msgstr "" "Jeśli musisz już korzystać z aplikacji do szyfrowania wiadomości, jaki " "jest sens używania czatu OnionShare? Pozostawia mniej śladów." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -460,7 +470,7 @@ msgid "" "minimum." msgstr "" -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -470,11 +480,11 @@ msgid "" "anonymity." msgstr "" -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Jak działa szyfrowanie?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -490,7 +500,7 @@ msgstr "" " wszystkich innych uczestników czatu za pomocą WebSockets, za " "pośrednictwem połączeń cebulowych E2EE." -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." diff --git a/docs/source/locale/pl/LC_MESSAGES/tor.po b/docs/source/locale/pl/LC_MESSAGES/tor.po index 6700bae7..60c42e3d 100644 --- a/docs/source/locale/pl/LC_MESSAGES/tor.po +++ b/docs/source/locale/pl/LC_MESSAGES/tor.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-19 15:37+0000\n" "Last-Translator: Rafał Godek \n" "Language: pl\n" @@ -24,16 +24,17 @@ msgid "Connecting to Tor" msgstr "Łączenie się z siecią Tor" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "Wybierz sposób połączenia OnionShare z siecią Tor, klikając ikonę „⚙” w " "prawym dolnym rogu okna OnionShare, aby przejść do jego ustawień." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "Użyj ``tor`` dołączonego do OnionShare" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" @@ -57,10 +58,48 @@ msgstr "" "systemu ``tor``." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Spróbuj automatycznej konfiguracji przy pomocy Tor Browser" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " @@ -72,11 +111,11 @@ msgstr "" "przeglądarki Tor. Pamiętaj, że aby to zadziałało, musisz mieć otwartą " "przeglądarkę Tor w tle podczas korzystania z OnionShare." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Używanie systemowego ``tor`` w systemie Windows" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." @@ -84,7 +123,7 @@ msgstr "" "To dość zaawansowane. Musisz wiedzieć, jak edytować pliki tekstowe i " "robić różne rzeczy jako administrator." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -97,7 +136,7 @@ msgstr "" "nazwę wyodrębnionego folderu zawierającego ``Data`` i ``Tor`` na ``tor-" "win32``." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -111,7 +150,7 @@ msgstr "" "administrator i użyj ``tor. exe --hash-password`` aby wygenerować hash " "hasła. Na przykład::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -121,7 +160,7 @@ msgstr "" "zignorować). W przypadku powyższego przykładu jest to " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -131,7 +170,7 @@ msgstr "" "win32\\torrc`` i umieść w nim zahashowane hasło, zastępując " "``HashedControlPassword`` tym, który właśnie wygenerowałeś::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -143,11 +182,11 @@ msgstr "" "``_). Jak " "poniżej::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Systemowy proces ``tor`` działa teraz w systemie Windows!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -165,11 +204,11 @@ msgstr "" "przycisk „Sprawdź połączenie z siecią Tor”. Jeśli wszystko pójdzie " "dobrze, powinieneś zobaczyć „Połączono z kontrolerem Tor”." -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "Używanie systemowego ``tor`` w systemie macOS" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -177,15 +216,15 @@ msgstr "" "Najpierw zainstaluj `Homebrew `_, jeśli jeszcze go nie " "masz, a następnie zainstaluj Tora::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "Teraz skonfiguruj Tora, aby zezwalał na połączenia z OnionShare::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "Uruchom systemową usługę Tor::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -202,17 +241,17 @@ msgstr "" "ustaw hasło na hasło portu sterowania wybrane powyżej. Kliknij przycisk " "„Sprawdź połączenie z siecią Tor”." -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" "Jeśli wszystko pójdzie dobrze, powinieneś zobaczyć „Połączono z " "kontrolerem Tor”." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Używanie systemowego ``tor`` w systemie Linux" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -223,7 +262,7 @@ msgstr "" "podobnej dystrybucji Linuksa, zaleca się użycie `oficjalnego repozytorium" " Projektu Tor `_." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " @@ -233,7 +272,7 @@ msgstr "" "``tor`` (w przypadku Debiana i Ubuntu, ``debian-tor``) i skonfiguruj " "OnionShare, aby połączyć z Twoim systemem sterujący plik gniazda ``tor``." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -241,7 +280,7 @@ msgstr "" "Dodaj swojego użytkownika do grupy ``debian-tor``, uruchamiając to " "polecenie (zamień ``username`` na swoją rzeczywistą nazwę użytkownika)::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -257,34 +296,6 @@ msgstr "" "uwierzytelniania Tor” wybierz „Bez uwierzytelniania lub uwierzytelnianie " "za pomocą cookie”. Kliknij przycisk „Sprawdź połączenie z siecią Tor”." -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Używanie mostków Tor" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "Aby skonfigurować mostki, kliknij ikonę „⚙” w OnionShare." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Możesz użyć wbudowanych transportów wtykowych obfs4, wbudowanych " -"transportów wtykowych meek_lite (Azure) lub niestandardowych mostków, " -"które możesz uzyskać z `BridgeDB `_ " -"Tora. Jeśli potrzebujesz użyć mostka, wypróbuj najpierw wbudowane obfs4." - #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -529,3 +540,41 @@ msgstr "" #~ "bridge." #~ msgstr "" +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "Użyj ``tor`` dołączonego do OnionShare" + +#~ msgid "Using Tor bridges" +#~ msgstr "Używanie mostków Tor" + +#~ msgid "" +#~ "If your access to the internet is" +#~ " censored, you can configure OnionShare " +#~ "to connect to the Tor network " +#~ "using `Tor bridges " +#~ "`_. If " +#~ "OnionShare connects to Tor without one," +#~ " you don't need to use a " +#~ "bridge." +#~ msgstr "" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "Aby skonfigurować mostki, kliknij ikonę „⚙” w OnionShare." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Możesz użyć wbudowanych transportów wtykowych" +#~ " obfs4, wbudowanych transportów wtykowych " +#~ "meek_lite (Azure) lub niestandardowych " +#~ "mostków, które możesz uzyskać z " +#~ "`BridgeDB `_ Tora. " +#~ "Jeśli potrzebujesz użyć mostka, wypróbuj " +#~ "najpierw wbudowane obfs4." + diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/features.po b/docs/source/locale/pt_BR/LC_MESSAGES/features.po index 8b9a6eb7..c0acfed9 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/features.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/features.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-19 15:37+0000\n" "Last-Translator: souovan \n" "Language: pt_BR\n" @@ -340,22 +340,32 @@ msgid "" msgstr "" #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" msgstr "" "Se você deseja carregar conteúdo de sites de terceiros, como ativos ou " "bibliotecas JavaScript de CDNs, marque a caixa \"Não enviar o cabeçalho " "da Política de Segurança de Conteúdo (permite que seu site use recursos " "de terceiros)\" antes de iniciar o serviço." +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Dicas para executar um serviço de website" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -365,17 +375,17 @@ msgid "" "address if you close OnionShare and re-open it later." msgstr "" -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Converse anonimamente" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." @@ -384,7 +394,7 @@ msgstr "" " e segura que não registra nada. Basta abrir uma guia de bate-papo e " "clicar em \"Iniciar servidor de bate-papo\"." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " @@ -392,7 +402,7 @@ msgid "" "to send out the OnionShare address and private key." msgstr "" -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -405,7 +415,7 @@ msgstr "" "navegador Tor definido como \"Padrão\" ou \"Mais seguro\", em vez de \" O" " Mais seguro\"." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -418,7 +428,7 @@ msgstr "" "lugar, ele não é exibido de forma alguma, mesmo se outras pessoas já " "estivessem conversando na sala." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -427,7 +437,7 @@ msgstr "" "alterar seu nome para qualquer coisa e não há como confirmar a identidade" " de ninguém." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -439,11 +449,11 @@ msgstr "" "usando mensagens criptografadas, você pode ter uma certeza razoável de " "que as pessoas que entram na sala de bate-papo são seus amigos." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Como isso é útil?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -452,7 +462,7 @@ msgstr "" "criptografadas, para começar, qual é o ponto de uma sala de bate-papo " "OnionShare? Deixa menos vestígios." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -464,7 +474,7 @@ msgid "" "minimum." msgstr "" -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -474,11 +484,11 @@ msgid "" "anonymity." msgstr "" -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Como funciona a criptografia?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -494,7 +504,7 @@ msgstr "" " para todos os outros membros da sala de bate-papo usando WebSockets, por" " meio de suas conexões onion E2EE." -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po index 03579d6f..896cf3e3 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:16-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-19 15:37+0000\n" "Last-Translator: souovan \n" "Language: pt_BR\n" @@ -23,16 +23,17 @@ msgid "Connecting to Tor" msgstr "Conectando ao Tor" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "Escolha um jeito de conectar o OnionShare ao Tor clicando no icone \"⚙\" " "no canto inferior direito da janela do OnionShare para acessar as opções." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "Use o ``tor`` empacotado com o OnionShare" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" @@ -56,10 +57,48 @@ msgstr "" "o Navegador Tor ou o sistema ``tor`` por conta própria." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Tentativa de configuração automática com o navegador Tor" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " @@ -71,11 +110,11 @@ msgstr "" "do navegador Tor. Lembre-se de que você precisa manter o navegador Tor " "aberto em segundo plano enquanto usa o OnionShare para que isso funcione." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Usando um sistema ``tor``no Windows" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." @@ -83,7 +122,7 @@ msgstr "" "Isso é bastante avançado. Você precisará saber como editar arquivos de " "texto simples e fazer coisas como administrador." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -96,7 +135,7 @@ msgstr "" "`` Renomeie a pasta extraída com `` Data`` e `` Tor`` nela para `` tor-" "win32``." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -110,7 +149,7 @@ msgstr "" "cmd``) como administrador e use `` tor. exe --hash-password`` para gerar " "um hash de sua senha. Por exemplo::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -120,7 +159,7 @@ msgstr "" "ignorar). No caso do exemplo acima, é `` 16: " "00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -130,7 +169,7 @@ msgstr "" "tor-win32 \\ torrc`` e coloque sua saída de senha hash nele, substituindo" " o `` HashedControlPassword`` pelo que você acabou de gerar ::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -142,11 +181,11 @@ msgstr "" " descrito em ` `_). Assim::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Você agora está executando um processo `` tor`` do sistema no Windows!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -164,11 +203,11 @@ msgstr "" "escolheu acima. Clique no botão \"Testar conexão com o Tor\". Se tudo " "correr bem, você deverá ver \"Conectado ao controlador Tor\"." -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "Usando um sistema `` tor`` no macOS" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -176,15 +215,15 @@ msgstr "" "Primeiro, instale o `Homebrew ` _ se você ainda não o " "tiver, e então instale o Tor ::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "Agora configure o Tor para permitir conexões do OnionShare ::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "E inicie o serviço Tor do sistema ::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -199,15 +238,15 @@ msgstr "" " autenticação ou autenticação de cookie\". Clique no botão \"Testar " "conexão com o Tor\"." -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "Se tudo correr bem, você deverá ver \"Conectado ao controlador Tor\"." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Usando um sistema `` tor`` no Linux" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -219,7 +258,7 @@ msgstr "" "`repositório oficial do Projeto Tor ` _." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " @@ -229,7 +268,7 @@ msgstr "" " (no caso do Debian e Ubuntu, `` debian-tor``) e configure o OnionShare " "para se conectar ao arquivo de soquete de controle do sistema `` tor``." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -237,7 +276,7 @@ msgstr "" "Adicione seu usuário ao grupo `` debian-tor`` executando este comando " "(substitua `` username`` pelo seu nome de usuário real) ::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -253,34 +292,6 @@ msgstr "" "autenticação Tor\", escolha \"Sem autenticação ou autenticação de " "cookie\". Clique no botão \"Testar conexão com o Tor\"." -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Usando pontes Tor" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "Para configurar pontes, clique no ícone \"⚙\" no OnionShare." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Você pode usar os transportes plugáveis obfs4 integrados, os transportes " -"plugáveis meek_lite (Azure) integrados ou pontes personalizadas, que " -"podem ser obtidas no `BridgeDB ` _ do " -"Tor. Se você precisa usar uma ponte, tente primeiro as obfs4 integradas." - #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -525,3 +536,42 @@ msgstr "" #~ "bridge." #~ msgstr "" +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "Use o ``tor`` empacotado com o OnionShare" + +#~ msgid "Using Tor bridges" +#~ msgstr "Usando pontes Tor" + +#~ msgid "" +#~ "If your access to the internet is" +#~ " censored, you can configure OnionShare " +#~ "to connect to the Tor network " +#~ "using `Tor bridges " +#~ "`_. If " +#~ "OnionShare connects to Tor without one," +#~ " you don't need to use a " +#~ "bridge." +#~ msgstr "" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "Para configurar pontes, clique no ícone \"⚙\" no OnionShare." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Você pode usar os transportes plugáveis" +#~ " obfs4 integrados, os transportes plugáveis" +#~ " meek_lite (Azure) integrados ou pontes " +#~ "personalizadas, que podem ser obtidas no" +#~ " `BridgeDB ` _ " +#~ "do Tor. Se você precisa usar uma" +#~ " ponte, tente primeiro as obfs4 " +#~ "integradas." + diff --git a/docs/source/locale/ru/LC_MESSAGES/features.po b/docs/source/locale/ru/LC_MESSAGES/features.po index 5e4c3466..d1f90dfb 100644 --- a/docs/source/locale/ru/LC_MESSAGES/features.po +++ b/docs/source/locale/ru/LC_MESSAGES/features.po @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-25 12:36+0000\n" "Last-Translator: Alexander Tarasenko \n" -"Language-Team: ru \n" "Language: ru\n" +"Language-Team: ru \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" "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.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -54,11 +53,11 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" -"Вы несёте ответственность за безопасную передачу URL и секретного ключа с " -"использованием различных каналов связи, таких как зашифрованный чат или что-" -"то менее безопасное, как например незашифрованное сообщение электронной " -"почты, в зависимости от вашей `модели угрозы `_." +"Вы несёте ответственность за безопасную передачу URL и секретного ключа с" +" использованием различных каналов связи, таких как зашифрованный чат или " +"что-то менее безопасное, как например незашифрованное сообщение " +"электронной почты, в зависимости от вашей `модели угрозы " +"`_." #: ../../source/features.rst:20 msgid "" @@ -67,10 +66,11 @@ msgid "" " Tor Browser will then prompt for the private key, which the people can " "also then copy and paste in." msgstr "" -"Чтобы получить доступ к сервисам OnionShare, получатели веб-адреса должны " -"скопировать и вставить его в адресную строку `Tor Browser `_. Tor Browser запросит секретный ключ, который получатели " -"таже могут скопировать и вставить в соответствующую форму." +"Чтобы получить доступ к сервисам OnionShare, получатели веб-адреса должны" +" скопировать и вставить его в адресную строку `Tor Browser " +"`_. Tor Browser запросит секретный ключ, " +"который получатели таже могут скопировать и вставить в соответствующую " +"форму." #: ../../source/features.rst:24 msgid "" @@ -79,12 +79,12 @@ msgid "" "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" -"Если OnionShare запускается на ноутбуке и используется для отправки файлов, " -"то, в случае перехода операционной системы в \"спящий режим\", сервис " -"OnionShare будет недоступен до тех пор, пока у ноутбука не будет " +"Если OnionShare запускается на ноутбуке и используется для отправки " +"файлов, то, в случае перехода операционной системы в \"спящий режим\", " +"сервис OnionShare будет недоступен до тех пор, пока у ноутбука не будет " "восстановлено соединение с сетью Internet. Рекомендуется использовать " -"OnionShare для взаимодействия с другими людьми в режиме \"реального времени\"" -"." +"OnionShare для взаимодействия с другими людьми в режиме \"реального " +"времени\"." #: ../../source/features.rst:26 msgid "" @@ -135,9 +135,9 @@ msgid "" msgstr "" "Как только завершится первая загрузка файлов, OnionShare автоматически " "остановит сервер и удалит веб-сайт из сети Internet. Чтобы разрешить " -"нескольким людями загружать Ваши файлы, снимите флажок с настройки \"Закрыть " -"доступ к файлам после их отправки (отмените чтобы разрешить скачивание " -"отдельных файлов)\"." +"нескольким людями загружать Ваши файлы, снимите флажок с настройки " +"\"Закрыть доступ к файлам после их отправки (отмените чтобы разрешить " +"скачивание отдельных файлов)\"." #: ../../source/features.rst:42 msgid "" @@ -168,10 +168,11 @@ msgid "" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" -"Теперь, когда у вас есть адрес сервиса OnionShare, его нужно скопировать и " -"отправить получателю файлов. Если файлы должны оставаться в безопасности или " -"получатель по той или иной причине находится под угрозой, для передачи " -"адреса используйте приложение для обмена зашифроваными сообщениями." +"Теперь, когда у вас есть адрес сервиса OnionShare, его нужно скопировать " +"и отправить получателю файлов. Если файлы должны оставаться в " +"безопасности или получатель по той или иной причине находится под " +"угрозой, для передачи адреса используйте приложение для обмена " +"зашифроваными сообщениями." #: ../../source/features.rst:50 msgid "" @@ -179,10 +180,10 @@ msgid "" "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" -"Полученный веб-адрес получателю нужно ввести в адресную строку Tor Browser. " -"После того, как получатель пройдёт авторизацию при помощи секретного ключа, " -"он сможет загрузить файлы прямо на свой компьютер, нажав на ссылку " -"\"Загрузить Файлы\"." +"Полученный веб-адрес получателю нужно ввести в адресную строку Tor " +"Browser. После того, как получатель пройдёт авторизацию при помощи " +"секретного ключа, он сможет загрузить файлы прямо на свой компьютер, " +"нажав на ссылку \"Загрузить Файлы\"." #: ../../source/features.rst:55 msgid "Receive Files and Messages" @@ -302,10 +303,10 @@ msgid "" "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" -"Как и вредоносные приложения к письмам электронной почты, загружаемые на Ваш " -"компьютер при помощи OnionShare файлы могут быть использованы для атаки. " -"OnionShare не содержит какого-либо защитного механизма операционной системы " -"от вредоносных файлов." +"Как и вредоносные приложения к письмам электронной почты, загружаемые на " +"Ваш компьютер при помощи OnionShare файлы могут быть использованы для " +"атаки. OnionShare не содержит какого-либо защитного механизма " +"операционной системы от вредоносных файлов." #: ../../source/features.rst:90 msgid "" @@ -340,8 +341,8 @@ msgid "" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" -"Если нужно разместить свой собственный анонимный почтовый ящик для приёма " -"документов, рекомендуется сделать это при помощи отдельного компьютера, " +"Если нужно разместить свой собственный анонимный почтовый ящик для приёма" +" документов, рекомендуется сделать это при помощи отдельного компьютера, " "который не используется для обычной работы и постоянно подключён к сети " "питания и Интернету." @@ -352,11 +353,11 @@ msgid "" "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" -"Если планируется разместить адрес сервиса OnionShare на своём веб-сайте или " -"в социальных сетях, рекомендуется сохранить вкладку (подробнее " +"Если планируется разместить адрес сервиса OnionShare на своём веб-сайте " +"или в социальных сетях, рекомендуется сохранить вкладку (подробнее " ":ref:`save_tabs`) и сделать сервис общедоступным (подробнее " -":ref:`turn_off_private_key`). Также рекомендуется дать ему какое-то название " -"(подробнее :ref:`custom_titles`)." +":ref:`turn_off_private_key`). Также рекомендуется дать ему какое-то " +"название (подробнее :ref:`custom_titles`)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -413,17 +414,16 @@ msgid "" "page." msgstr "" "По умолчанию OnionShare помогает защитить веб-сайт пользователя, " -"устанавливая строгую `Политика безопасности контента `_ . Тем не менее, это исключает " -"возможность загрузки и использования на веб-странице содержимого из " -"сторонних источников." +"устанавливая строгую `Политика безопасности контента " +"`_ . Тем не менее," +" это исключает возможность загрузки и использования на веб-странице " +"содержимого из сторонних источников." #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" msgstr "" "Если требуется загрузить и использовать содержимое из сторонних " "иточников, например активы или библиотеки JavaScript из CDN, то нужно " @@ -431,11 +431,22 @@ msgstr "" "контента\" перед запуском сервиса. Это позволит вебсайту использовать " "сторонние источники содержимого." +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Советы по использованию сервсиа размещения вебсайтов" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -451,7 +462,7 @@ msgstr "" "чтобы в дальнейшем можно было восстановить доступ к веб-сайту с тем же " "адресом, на случай перезапуска OnionShare." -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." @@ -459,11 +470,11 @@ msgstr "" "Если планируется сделать сайт общедоступным, рекомендуется отключить " "использование секретного ключа (подробнее :ref:`turn_off_private_key`)." -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Анонимный чат" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." @@ -472,19 +483,20 @@ msgstr "" "чата, который не хранит какие-либо логи. Для этого, нужно открыть вкладку" " чата и нажать кнопку \"Запустить сервер чата\"." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" -"После запуска сервера, нужно скопировать адрес OnionShare и секретный ключ и " -"и отправить людям, с которыми планируется анонимная переписка. Если нужно " -"ограничить круг участников чата, используйте для рассылки адреса и " -"секретного ключа OnionShare приложение для обмена зашифрованными сообщениями." +"После запуска сервера, нужно скопировать адрес OnionShare и секретный " +"ключ и и отправить людям, с которыми планируется анонимная переписка. " +"Если нужно ограничить круг участников чата, используйте для рассылки " +"адреса и секретного ключа OnionShare приложение для обмена зашифрованными" +" сообщениями." -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -496,7 +508,7 @@ msgstr "" "предполагаемому участнику необходимо выставить уровень безопасности " "\"Обычный\" или \"Высокий\", вместо \"Высший\"." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -509,7 +521,7 @@ msgstr "" "сохраняется, это имя нигде не отбражается, даже если в чате уже были " "участники." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -518,7 +530,7 @@ msgstr "" "изменить своё имя и нет никакого способа определить/подтвердить личность " "такого участника." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -530,11 +542,11 @@ msgstr "" "сообщений, можно быть достаточно уверенным, что в чате присутствуют " "друзья." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Насколько это полезно?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -542,7 +554,7 @@ msgstr "" "Какая может быть польза от чата OnionShare при наличии приложений для " "обмена зашифрованными сообщениями? OnionShare оставляет меньше следов." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -553,14 +565,15 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" -"Если, например, вы отправите сообщение в групповой чат мессенджера Signal, " -"копия вашего сообщения окажется на устройстве каждого из участников (" -"смартфоны и/или персональные комьютеры). Даже если включен режим \"исчезающих" -" сообщений\", нельзя быть уверенным в том, что они окажутся удалены со всех " -"устройств или из других мест (базы данных уведомлений и т.д.) Чаты " -"OnionShare нигде не хранятся, так что возможные риски сведены к минимуму." - -#: ../../source/features.rst:165 +"Если, например, вы отправите сообщение в групповой чат мессенджера " +"Signal, копия вашего сообщения окажется на устройстве каждого из " +"участников (смартфоны и/или персональные комьютеры). Даже если включен " +"режим \"исчезающих сообщений\", нельзя быть уверенным в том, что они " +"окажутся удалены со всех устройств или из других мест (базы данных " +"уведомлений и т.д.) Чаты OnionShare нигде не хранятся, так что возможные " +"риски сведены к минимуму." + +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -570,16 +583,17 @@ msgid "" "anonymity." msgstr "" "OnionShare также может быть полезен для людей, которым нужна анонимная и " -"безопасная переписка без создания каких-либо учётных записей. Например, с " -"журналистом может связаться 'источник': прислать адрес OnionShare при помощи " -"временной электронной почты и затем подождать пока журналист, присоединится " -"к чату. При таком сценарии источник не подвергает опасности свою анонимность." +"безопасная переписка без создания каких-либо учётных записей. Например, с" +" журналистом может связаться 'источник': прислать адрес OnionShare при " +"помощи временной электронной почты и затем подождать пока журналист, " +"присоединится к чату. При таком сценарии источник не подвергает опасности" +" свою анонимность." -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Как работает шифрование?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -594,7 +608,7 @@ msgstr "" "onion соединение. Далее, сообщение рассылается всем участникам чата при " "помощи WebSockets, также при использовании E2EE и onion соединений." -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." @@ -1097,3 +1111,4 @@ msgstr "" #~ "быть сохранены. OnionShare не хранит " #~ "какие-либо сообщения, так что описанная " #~ "проблема сведена к минимуму." + diff --git a/docs/source/locale/ru/LC_MESSAGES/tor.po b/docs/source/locale/ru/LC_MESSAGES/tor.po index edcc7566..38f8f3f4 100644 --- a/docs/source/locale/ru/LC_MESSAGES/tor.po +++ b/docs/source/locale/ru/LC_MESSAGES/tor.po @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-23 15:36+0000\n" "Last-Translator: Alexander Tarasenko \n" -"Language-Team: ru \n" "Language: ru\n" +"Language-Team: ru \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" "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.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -25,17 +24,18 @@ msgid "Connecting to Tor" msgstr "Подключение к сети Тор" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "Чтобы выбрать способ подключения OnionShare к сети Tor, нажмите на значок" " \"⚙\" в нижнем правом углу окна OnionShare. Так Вы попадёте в настройки " "приложения." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "Использование версии ``tor``, которая поставляется вместе с OnionShare" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" @@ -58,10 +58,54 @@ msgstr "" "использование, системного ``tor`` или Tor Browser." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +#, fuzzy +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" +"В случае, если доступ к сети Интернет подвергается цензуре, можно " +"настроить подключение OnionShare к сети Tor при помощи `мостов Tor` " +"`_. В случае, если " +"OnionShare успешно подключается к сети Tor, использование сетевого моста " +"необязательно." + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Попытка автоматической конфигурации при помощи Tor Browser" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " @@ -75,11 +119,11 @@ msgstr "" "запущен в фоновом режиме в течение всего времени использования " "OnionShare." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Использование системного процесса ``tor`` в ОС Windows" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." @@ -88,7 +132,7 @@ msgstr "" "редактирование конфигурационных файлов и администрирование операционной " "системы." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -100,7 +144,7 @@ msgstr "" "скопируйте содержимое в директорию ``C:\\Program Files (x86)\\``. " "Переименуйте директорию, содержащую ``Data`` и ``Tor`` в ``tor-win32``." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -114,7 +158,7 @@ msgstr "" "``cmd`` с правами администратора и выполните команду ``tor.exe --hash-" "password`` чтобы захешировать придуманный пароль. Например::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -124,7 +168,7 @@ msgstr "" "(которые можно проигнорировать). В примере, показанном выше, это " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -134,7 +178,7 @@ msgstr "" "win32\\torrc`` и записать туда только что созданный, захешированный " "пароль, заменив ``HashedControlPassword``::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -147,11 +191,11 @@ msgstr "" "`_. " "Например::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Теперь ``tor`` запущен как системный процесс в ОС Windows!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -170,11 +214,11 @@ msgstr "" "кнопку \"Проверить подключение к сети Tor\". Если всё прошло хорошо, то " "появится сообщение \"Подключено к контроллеру Tor\"." -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "Использование системного процесса ``tor`` в macOS" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -182,15 +226,15 @@ msgstr "" "Прежде всего, при необходимости установите `Homebrew `_" " . Затем установите Tor::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "Теперь настройте Tor так, чтобы OnionShare мог его использовать::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "И запустите сервис Tor::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -206,17 +250,17 @@ msgstr "" "cookie-аутентификация\". Нажмите кнопку \"Проверить подключение к сети " "Tor\"." -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" "Если всё прошло хорошо, то появится сообщение \"Подключено к контроллеру " "Tor\"." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Использование системного ``tor`` в ОС Linux" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -228,7 +272,7 @@ msgstr "" "репозиторий `_ Tor " "Project." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " @@ -239,7 +283,7 @@ msgstr "" "``debian-tor``) и настроить подключение OnionShare к системному процессу " "``tor`` при помощи файла сокета." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -247,7 +291,7 @@ msgstr "" "Добавьте свого пользователя в группу ``debian-tor`` при помощи команды " "(измените ``username`` на имя своего пользователя))::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -264,41 +308,6 @@ msgstr "" "cookie-аутентификация\". Нажмите кнопку \"Проверить подключение к сети " "Tor\"." -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Использование мостов \"Tor\"" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" -"В случае, если доступ к сети Интернет подвергается цензуре, можно настроить " -"подключение OnionShare к сети Tor при помощи `мостов Tor` `_. В случае, если OnionShare успешно " -"подключается к сети Tor, использование сетевого моста необязательно." - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "" -"Чтобы настроить использование мостов, нажмите на значок \"⚙\" в " -"OnionShare." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Возможно использование встроенных obfs4 или meek_lite(Azure) подключаемых" -" транспортов или пользовательских мостов, настройки которых можно " -"получить здесь: `Tor's BridgeDB `_. Если" -" использование мостов необходимо, рекомендуется в первую очередь " -"попробовать транспорты obfs4." - #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -531,3 +540,33 @@ msgstr "" #~ "if you don't already have it. " #~ "Then, install Tor::" #~ msgstr "" + +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "Использование версии ``tor``, которая поставляется вместе с OnionShare" + +#~ msgid "Using Tor bridges" +#~ msgstr "Использование мостов \"Tor\"" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "" +#~ "Чтобы настроить использование мостов, нажмите" +#~ " на значок \"⚙\" в OnionShare." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Возможно использование встроенных obfs4 или" +#~ " meek_lite(Azure) подключаемых транспортов или" +#~ " пользовательских мостов, настройки которых " +#~ "можно получить здесь: `Tor's BridgeDB " +#~ "`_. Если использование" +#~ " мостов необходимо, рекомендуется в первую" +#~ " очередь попробовать транспорты obfs4." + diff --git a/docs/source/locale/tr/LC_MESSAGES/features.po b/docs/source/locale/tr/LC_MESSAGES/features.po index 9e1f5e7f..4b6dd55c 100644 --- a/docs/source/locale/tr/LC_MESSAGES/features.po +++ b/docs/source/locale/tr/LC_MESSAGES/features.po @@ -7,16 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-10-02 12:36+0000\n" "Last-Translator: Kaya Zeren \n" -"Language-Team: tr \n" "Language: tr\n" +"Language-Team: tr \n" +"Plural-Forms: nplurals=2; plural=n != 1\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -36,8 +35,7 @@ msgstr "" #: ../../source/features.rst:8 msgid "By default, OnionShare web addresses are protected with a private key." -msgstr "" -"Varsayılan olarak, OnionShare web adresleri kişisel bir anahtarla korunur." +msgstr "Varsayılan olarak, OnionShare web adresleri kişisel bir anahtarla korunur." #: ../../source/features.rst:10 msgid "OnionShare addresses look something like this::" @@ -54,11 +52,11 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" -"`Tehdit modelinize `_ bağlı " -"olarak, bu adresi ve kişisel anahtarı, şifreli bir sohbet iletisi gibi " -"seçtiğiniz bir iletişim kanalını kullanarak veya şifrelenmemiş e-posta gibi " -"daha az güvenli bir şey kullanarak güvenli bir şekilde paylaşmaktan siz " -"sorumlusunuz." +"`Tehdit modelinize `_ " +"bağlı olarak, bu adresi ve kişisel anahtarı, şifreli bir sohbet iletisi " +"gibi seçtiğiniz bir iletişim kanalını kullanarak veya şifrelenmemiş " +"e-posta gibi daha az güvenli bir şey kullanarak güvenli bir şekilde " +"paylaşmaktan siz sorumlusunuz." #: ../../source/features.rst:20 msgid "" @@ -68,9 +66,9 @@ msgid "" "also then copy and paste in." msgstr "" "Adresi gönderdiğiniz kişiler, OnionShare hizmetine erişmek için adresi " -"kopyalayıp `Tor Browser `_ içine yapıştırır. " -"Tor Browser daha sonra kişilerin kopyalayıp yapıştırabilecekleri kişisel " -"anahtarı isteyecektir." +"kopyalayıp `Tor Browser `_ içine yapıştırır." +" Tor Browser daha sonra kişilerin kopyalayıp yapıştırabilecekleri kişisel" +" anahtarı isteyecektir." #: ../../source/features.rst:24 msgid "" @@ -80,10 +78,10 @@ msgid "" "works best when working with people in real-time." msgstr "" "Birine dosya göndermek için dizüstü bilgisayarınızda OnionShare " -"çalıştırırsanız ve dosyalar gönderilmeden önce onu askıya alırsanız, dizüstü " -"bilgisayarınız devam ettirilip tekrar İnternet bağlantısı kurana kadar " -"hizmet kullanılamayacaktır. OnionShare, insanlarla gerçek zamanlı olarak " -"çalışırken en iyi şekilde çalışır." +"çalıştırırsanız ve dosyalar gönderilmeden önce onu askıya alırsanız, " +"dizüstü bilgisayarınız devam ettirilip tekrar İnternet bağlantısı kurana " +"kadar hizmet kullanılamayacaktır. OnionShare, insanlarla gerçek zamanlı " +"olarak çalışırken en iyi şekilde çalışır." #: ../../source/features.rst:26 msgid "" @@ -111,16 +109,16 @@ msgid "" msgstr "" "OnionShare uygulamasını, dosya ve klasörleri insanlara güvenli ve anonim " "olarak göndermek için kullanabilirsiniz. Bir paylaşım sekmesi açın, " -"paylaşmak istediğiniz dosya ve klasörleri sürükleyin ve \"Paylaşımı başlat\" " -"üzerine tıklayın." +"paylaşmak istediğiniz dosya ve klasörleri sürükleyin ve \"Paylaşımı " +"başlat\" üzerine tıklayın." #: ../../source/features.rst:35 ../../source/features.rst:112 msgid "" "After you add files, you'll see some settings. Make sure you choose the " "setting you're interested in before you start sharing." msgstr "" -"Dosyaları ekledikten sonra bazı ayarlar göreceksiniz. Paylaşımı başlatmadan " -"önce istediğiniz ayarı seçtiğinizden emin olun." +"Dosyaları ekledikten sonra bazı ayarlar göreceksiniz. Paylaşımı " +"başlatmadan önce istediğiniz ayarı seçtiğinizden emin olun." #: ../../source/features.rst:39 msgid "" @@ -131,10 +129,11 @@ msgid "" "box." msgstr "" "Birisi dosyalarınızı indirmeyi bitirir bitirmez, OnionShare sunucuyu " -"otomatik olarak durduracak ve web sitesini İnternet üzerinden kaldıracaktır. " -"Birden çok kişinin bunları indirmesine izin vermek için, \"Dosyalar " -"gönderildikten sonra paylaşım durdurulsun (dosyaların tek tek indirilmesine " -"izin vermek için işareti kaldırın)\" seçeneğinin işaretini kaldırın." +"otomatik olarak durduracak ve web sitesini İnternet üzerinden " +"kaldıracaktır. Birden çok kişinin bunları indirmesine izin vermek için, " +"\"Dosyalar gönderildikten sonra paylaşım durdurulsun (dosyaların tek tek " +"indirilmesine izin vermek için işareti kaldırın)\" seçeneğinin işaretini " +"kaldırın." #: ../../source/features.rst:42 msgid "" @@ -153,10 +152,10 @@ msgid "" "to show the history and progress of people downloading files from you." msgstr "" "Paylaşmaya hazır olduğunuzda, \"Paylaşımı başlat\" düğmesine tıklayın. " -"İstediğiniz zaman \"Paylaşımı durdur\" düğmesine tıklayarak veya OnionShare " -"uygulamasından çıkarak web sitesini anında kapatabilirsiniz. Ayrıca, sizden " -"dosya indiren kişilerin geçmişini ve ilerlemesini göstermek için sağ üst " -"köşedeki \"↑\" simgesine tıklayabilirsiniz." +"İstediğiniz zaman \"Paylaşımı durdur\" düğmesine tıklayarak veya " +"OnionShare uygulamasından çıkarak web sitesini anında kapatabilirsiniz. " +"Ayrıca, sizden dosya indiren kişilerin geçmişini ve ilerlemesini " +"göstermek için sağ üst köşedeki \"↑\" simgesine tıklayabilirsiniz." #: ../../source/features.rst:48 msgid "" @@ -177,8 +176,8 @@ msgid "" "computer by clicking the \"Download Files\" link in the corner." msgstr "" "Bu kişi daha sonra adresi Tor Browser ile açmalıdır. Kişisel anahtar ile " -"oturum açtıktan sonra, köşedeki \"Dosyaları indir\" bağlantısına tıklayarak " -"dosyalar doğrudan bilgisayarınızdan indirilebilir." +"oturum açtıktan sonra, köşedeki \"Dosyaları indir\" bağlantısına " +"tıklayarak dosyalar doğrudan bilgisayarınızdan indirilebilir." #: ../../source/features.rst:55 msgid "Receive Files and Messages" @@ -191,14 +190,15 @@ msgid "" "anonymous dropbox. Open a receive tab and choose the settings that you " "want." msgstr "" -"OnionShare uygulamasını, kullanıcıların dosya ve iletilerini anonim olarak " -"doğrudan bilgisayarınıza göndermesine izin vermek için kullanabilirsiniz. " -"Bir alma sekmesi açın ve istediğiniz ayarları seçin." +"OnionShare uygulamasını, kullanıcıların dosya ve iletilerini anonim " +"olarak doğrudan bilgisayarınıza göndermesine izin vermek için " +"kullanabilirsiniz. Bir alma sekmesi açın ve istediğiniz ayarları seçin." #: ../../source/features.rst:62 msgid "You can browse for a folder to save messages and files that get submitted." msgstr "" -"Gönderilen iletileri ve dosyaları kaydetmek için bir klasöre gidebilirsiniz." +"Gönderilen iletileri ve dosyaları kaydetmek için bir klasöre " +"gidebilirsiniz." #: ../../source/features.rst:64 msgid "" @@ -206,10 +206,10 @@ msgid "" "uploads, and you can check \"Disable uploading files\" if you want to " "only allow submitting text messages, like for an anonymous contact form." msgstr "" -"Yalnız dosya yüklemelerine izin vermek istiyorsanız \"Metin gönderilemesin\" " -"seçeneğini işaretleyebilir ve anonim bir iletişim formu gibi yalnızca metin " -"iletilerinin gönderilmesine izin vermek istiyorsanız \"Dosya yüklenemesin\" " -"seçeneğini işaretleyebilirsiniz." +"Yalnız dosya yüklemelerine izin vermek istiyorsanız \"Metin " +"gönderilemesin\" seçeneğini işaretleyebilir ve anonim bir iletişim formu " +"gibi yalnızca metin iletilerinin gönderilmesine izin vermek istiyorsanız " +"\"Dosya yüklenemesin\" seçeneğini işaretleyebilirsiniz." #: ../../source/features.rst:66 msgid "" @@ -229,13 +229,14 @@ msgstr "" "bilgilendirilmek istiyorsanız, \"Bildirim web kancası kullanılsın\" " "seçeneğini işaretleyebilir ve ardından bir web kancası adresi " "seçebilirsiniz. Bu özelliği kullanırsanız, OnionShare, birisi dosya veya " -"ileti gönderdiğinde bu adrese bir HTTP POST isteği yapar. Örneğin, `Keybase " -"`_ iletişim uygulamasında şifreli bir metin iletisi " -"almak istiyorsanız, `@webhookbot `_ ile bir " -"konuşma başlatabilir, ``!webhook create onionshare-alerts`` yazabilirsiniz " -"ve bot size bir adres ile yanıt verir. Bunu bildirim web kancası adresi " -"olarak kullanın. Birisi alma kipi hizmetinize bir dosya yüklerse, bu olur " -"olmaz @webhookbot size Keybase üzerinde bir ileti göndererek haber verir." +"ileti gönderdiğinde bu adrese bir HTTP POST isteği yapar. Örneğin, " +"`Keybase `_ iletişim uygulamasında şifreli bir metin" +" iletisi almak istiyorsanız, `@webhookbot " +"`_ ile bir konuşma başlatabilir, " +"``!webhook create onionshare-alerts`` yazabilirsiniz ve bot size bir " +"adres ile yanıt verir. Bunu bildirim web kancası adresi olarak kullanın. " +"Birisi alma kipi hizmetinize bir dosya yüklerse, bu olur olmaz " +"@webhookbot size Keybase üzerinde bir ileti göndererek haber verir." #: ../../source/features.rst:71 msgid "" @@ -245,8 +246,8 @@ msgid "" "computer." msgstr "" "Hazır olduğunuzda, \"Alma kipi başlatılsın\" düğmesine tıklayın. Bu, " -"OnionShare hizmetini başlatır. Bu adresi Tor Browser ile yükleyen herkes, " -"bilgisayarınıza yüklenecek olan dosya ve iletileri gönderebilir." +"OnionShare hizmetini başlatır. Bu adresi Tor Browser ile yükleyen herkes," +" bilgisayarınıza yüklenecek olan dosya ve iletileri gönderebilir." #: ../../source/features.rst:75 msgid "" @@ -297,10 +298,10 @@ msgid "" "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" -"Kötü niyetli e-posta eklerinde olduğu gibi, birisinin OnionShare hizmetinize " -"kötü amaçlı bir dosya yükleyerek bilgisayarınıza saldırmaya çalışması " -"mümkündür. OnionShare, sisteminizi kötü amaçlı dosyalardan korumak için " -"herhangi bir güvenlik yöntemi içermez." +"Kötü niyetli e-posta eklerinde olduğu gibi, birisinin OnionShare " +"hizmetinize kötü amaçlı bir dosya yükleyerek bilgisayarınıza saldırmaya " +"çalışması mümkündür. OnionShare, sisteminizi kötü amaçlı dosyalardan " +"korumak için herhangi bir güvenlik yöntemi içermez." #: ../../source/features.rst:90 msgid "" @@ -321,8 +322,8 @@ msgstr "" #: ../../source/features.rst:92 msgid "However, it is always safe to open text messages sent through OnionShare." msgstr "" -"Bununla birlikte, OnionShare aracılığıyla gönderilen metin iletilerini açmak " -"her zaman güvenlidir." +"Bununla birlikte, OnionShare aracılığıyla gönderilen metin iletilerini " +"açmak her zaman güvenlidir." #: ../../source/features.rst:95 msgid "Tips for running a receive service" @@ -337,8 +338,8 @@ msgid "" msgstr "" "OnionShare kullanarak kendi anonim depolama alanınızı barındırmak " "istiyorsanız, bunu düzenli olarak kullandığınız bilgisayarda değil, her " -"zaman açık ve İnternete bağlı ayrı, özel bir bilgisayarda yapmanız tavsiye " -"edilir." +"zaman açık ve İnternete bağlı ayrı, özel bir bilgisayarda yapmanız " +"tavsiye edilir." #: ../../source/features.rst:99 msgid "" @@ -348,10 +349,10 @@ msgid "" "to give it a custom title (see :ref:`custom_titles`)." msgstr "" "OnionShare adresini web sitenize veya sosyal ağ profillerinize koymayı " -"düşünüyorsanız, sekmeyi kaydedin (:ref:`save_tabs`bölümüne bakın) ve herkese " -"açık bir hizmet olarak çalıştırın (:ref:`turn_off_private_key` bölümüne " -"bakın). Özel bir başlık vermek de iyi bir fikirdir (:ref:`custom_titles` " -"bölümüne bakın)." +"düşünüyorsanız, sekmeyi kaydedin (:ref:`save_tabs`bölümüne bakın) ve " +"herkese açık bir hizmet olarak çalıştırın (:ref:`turn_off_private_key` " +"bölümüne bakın). Özel bir başlık vermek de iyi bir fikirdir " +"(:ref:`custom_titles` bölümüne bakın)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -363,9 +364,9 @@ msgid "" "the files and folders that make up the static content there, and click " "\"Start sharing\" when you are ready." msgstr "" -"OnionShare ile statik bir HTML web sitesi barındırmak için bir web sitesi " -"sekmesi açın, statik içeriği oluşturan dosya ve klasörleri oraya sürükleyin " -"ve hazır olduğunuzda \"Paylaşımı başlat\" düğmesine tıklayın." +"OnionShare ile statik bir HTML web sitesi barındırmak için bir web sitesi" +" sekmesi açın, statik içeriği oluşturan dosya ve klasörleri oraya " +"sürükleyin ve hazır olduğunuzda \"Paylaşımı başlat\" düğmesine tıklayın." #: ../../source/features.rst:108 msgid "" @@ -377,11 +378,11 @@ msgid "" " WordPress.)" msgstr "" "Bir ``index.html`` dosyası eklerseniz, birisi web sitenizi yüklediğinde " -"görüntülenir. Web sitesini oluşturan diğer HTML, CSS, JavaScript dosyalarını " -"ve görselleri de eklemelisiniz. (OnionShare uygulamasının yalnız *statik* " -"web sitelerini barındırmayı desteklediğini unutmayın. Kod çalıştıran veya " -"veri tabanları kullanan web sitelerini barındıramaz. Örneğin WordPress " -"kullanamazsınız.)" +"görüntülenir. Web sitesini oluşturan diğer HTML, CSS, JavaScript " +"dosyalarını ve görselleri de eklemelisiniz. (OnionShare uygulamasının " +"yalnız *statik* web sitelerini barındırmayı desteklediğini unutmayın. Kod" +" çalıştıran veya veri tabanları kullanan web sitelerini barındıramaz. " +"Örneğin WordPress kullanamazsınız.)" #: ../../source/features.rst:110 msgid "" @@ -404,28 +405,39 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" -"OnionShare, varsayılan olarak katı bir `İçerik güvenliği ilkesi `_ başlığı ayarlayarak web " -"sitenizin güvenliğini sağlamaya yardımcı olur. Ancak bu, web sayfasında " -"üçüncü taraf içeriğinin yüklenmesini engeller." +"OnionShare, varsayılan olarak katı bir `İçerik güvenliği ilkesi " +"`_ başlığı " +"ayarlayarak web sitenizin güvenliğini sağlamaya yardımcı olur. Ancak bu, " +"web sayfasında üçüncü taraf içeriğinin yüklenmesini engeller." #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" +msgstr "" +"İçerik aktarım ağlarından (CDN) varlıklar veya JavaScript kitaplıkları " +"gibi üçüncü taraf web sitelerinden içerik yüklemek istiyorsanız, hizmeti " +"başlatmadan önce \"İçerik güvenliği ilkesi başlığı gönderme (web " +"sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)\" seçeneğini" +" işaretleyin." + +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." msgstr "" -"İçerik aktarım ağlarından (CDN) varlıklar veya JavaScript kitaplıkları gibi " -"üçüncü taraf web sitelerinden içerik yüklemek istiyorsanız, hizmeti " -"başlatmadan önce \"İçerik güvenliği ilkesi başlığı gönderme (web sitenizin " -"üçüncü taraf kaynaklarını kullanmasına izin verir)\" seçeneğini işaretleyin." #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Web sitesi hizmeti çalıştırma ipuçları" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -434,14 +446,15 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" -"OnionShare kullanarak (birine hızlı bir şekilde bir şey görüntülemek yerine) " -"uzun vadeli bir web sitesi barındırmak istiyorsanız, bunu düzenli olarak " -"kullandığınız bilgisayarda değil, her zaman açık ve İnternet bağlantısı " -"ayrı, özel bir bilgisayarda yapmanız tavsiye edilir. OnionShare uygulamasını " -"kapatıp daha sonra yeniden açmanız halinde web sitesini aynı adresle devam " -"ettirebilmek için sekmeyi kaydedin (:ref:`save_tabs` bölümüne bakın)." +"OnionShare kullanarak (birine hızlı bir şekilde bir şey görüntülemek " +"yerine) uzun vadeli bir web sitesi barındırmak istiyorsanız, bunu düzenli" +" olarak kullandığınız bilgisayarda değil, her zaman açık ve İnternet " +"bağlantısı ayrı, özel bir bilgisayarda yapmanız tavsiye edilir. " +"OnionShare uygulamasını kapatıp daha sonra yeniden açmanız halinde web " +"sitesini aynı adresle devam ettirebilmek için sekmeyi kaydedin " +"(:ref:`save_tabs` bölümüne bakın)." -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." @@ -449,20 +462,20 @@ msgstr "" "Web siteniz herkesin kullanımına yönelikse, onu herkese açık bir hizmet " "olarak çalıştırmalısınız (:ref:`turn_off_private_key` bölümüne bakın)." -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Anonim Olarak Sohbet Etmek" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" "Hiçbir şey kaydetmeyen kişisel, güvenli bir sohbet odası kurmak için " -"OnionShare kullanabilirsiniz. Bir sohbet sekmesi açın ve \"Sohbet sunucusu " -"başlat\" düğmesine tıklayın." +"OnionShare kullanabilirsiniz. Bir sohbet sekmesi açın ve \"Sohbet " +"sunucusu başlat\" düğmesine tıklayın." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " @@ -470,12 +483,12 @@ msgid "" "to send out the OnionShare address and private key." msgstr "" "Sunucuyu başlattıktan sonra, OnionShare adresini ve kişisel anahtarı " -"kopyalayın ve anonim sohbet odasında olmasını istediğiniz kişilere gönderin. " -"Tam olarak kimlerin katılabileceğini sınırlamak önemliyse, OnionShare " -"adresini ve kişisel anahtarı göndermek için şifreli bir iletişim uygulaması " -"kullanın." +"kopyalayın ve anonim sohbet odasında olmasını istediğiniz kişilere " +"gönderin. Tam olarak kimlerin katılabileceğini sınırlamak önemliyse, " +"OnionShare adresini ve kişisel anahtarı göndermek için şifreli bir " +"iletişim uygulaması kullanın." -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -483,11 +496,11 @@ msgid "" "\"Standard\" or \"Safer\", instead of \"Safest\"." msgstr "" "İnsanlar OnionShare adresini Tor Browser ile açarak sohbet odasına " -"katılabilirler. Sohbet odası için JavasScript desteği gereklidir, bu nedenle " -"katılmak isteyenler Tor Browser güvenlik düzeyini \"En güvenli\" yerine " -"\"Standart\" veya \"Daha güvenli\" olarak ayarlamalıdır." +"katılabilirler. Sohbet odası için JavasScript desteği gereklidir, bu " +"nedenle katılmak isteyenler Tor Browser güvenlik düzeyini \"En güvenli\" " +"yerine \"Standart\" veya \"Daha güvenli\" olarak ayarlamalıdır." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -499,7 +512,7 @@ msgstr "" "Sohbet geçmişi herhangi bir yere kaydedilmediğinden, başkaları odada " "sohbet ediyor olsa bile bu hiç görüntülenmez." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -508,7 +521,7 @@ msgstr "" "bir şeyle değiştirebilir ve herhangi birinin kimliğini doğrulamanın bir " "yolu yoktur." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -517,14 +530,14 @@ msgid "" msgstr "" "Bununla birlikte, bir OnionShare sohbet odası oluşturur ve adresi " "şifrelenmiş iletiler kullanarak güvenli bir şekilde yalnız küçük bir " -"güvenilir arkadaş grubuna gönderirseniz, sohbet odasına katılan kişilerin " -"arkadaşlarınız olduğundan hemen hemen emin olabilirsiniz." +"güvenilir arkadaş grubuna gönderirseniz, sohbet odasına katılan kişilerin" +" arkadaşlarınız olduğundan hemen hemen emin olabilirsiniz." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Bunun ne faydası var?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -532,7 +545,7 @@ msgstr "" "Zaten şifrelenmiş bir iletişim uygulaması kullanmanız gerekiyorsa, " "OnionShare sohbet odasından başlamanın ne anlamı var? Daha az iz bırakır." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -543,15 +556,16 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" -"Örneğin bir Signal grubuna bir ileti gönderirseniz, iletinizin bir kopyası " -"grubun her bir üyesinin her aygıtında (akıllı telefonlar ve Signal " -"Masaüstünü kurdularsa bilgisayarlar) bulunur. Kaybolan iletiler açık olsa " -"bile, iletilerin tüm kopyalarının tüm aygıtlardan ve kaydedilmiş " -"olabilecekleri diğer yerlerden (bildirim veri tabanları gibi) gerçekten " -"silindiğini doğrulamak zordur. OnionShare sohbet odaları hiçbir yerde " -"herhangi bir ileti saklamaz, bu nedenle sorun en aza indirilir." - -#: ../../source/features.rst:165 +"Örneğin bir Signal grubuna bir ileti gönderirseniz, iletinizin bir " +"kopyası grubun her bir üyesinin her aygıtında (akıllı telefonlar ve " +"Signal Masaüstünü kurdularsa bilgisayarlar) bulunur. Kaybolan iletiler " +"açık olsa bile, iletilerin tüm kopyalarının tüm aygıtlardan ve " +"kaydedilmiş olabilecekleri diğer yerlerden (bildirim veri tabanları gibi)" +" gerçekten silindiğini doğrulamak zordur. OnionShare sohbet odaları " +"hiçbir yerde herhangi bir ileti saklamaz, bu nedenle sorun en aza " +"indirilir." + +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -561,17 +575,17 @@ msgid "" "anonymity." msgstr "" "OnionShare sohbet odaları, herhangi bir hesap oluşturmaya gerek kalmadan " -"biriyle anonim ve güvenli bir şekilde sohbet etmek isteyen kişiler için de " -"kullanışlı olabilir. Örneğin, bir kaynak tek kullanımlık bir e-posta " +"biriyle anonim ve güvenli bir şekilde sohbet etmek isteyen kişiler için " +"de kullanışlı olabilir. Örneğin, bir kaynak tek kullanımlık bir e-posta " "adresini kullanarak bir gazeteciye OnionShare adresini gönderebilir ve " "ardından anonimliklerinden ödün vermeden gazetecinin sohbet odasına " "katılmasını bekleyebilir." -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Şifreleme nasıl çalışır?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -580,14 +594,14 @@ msgid "" "other members of the chat room using WebSockets, through their E2EE onion" " connections." msgstr "" -"OnionShare, Tor Onion hizmetlerine dayandığından, Tor Browser ve OnionShare " -"arasındaki bağlantıların tümü uçtan uca şifrelenmiştir (E2EE). Birisi bir " -"OnionShare sohbet odasına bir ileti gönderdiğinde, bunu E2EE onion " -"bağlantısı üzerinden sunucuya gönderir ve ardından sunucu bunu WebSockets " -"kullanarak E2EE onion bağlantıları aracılığıyla sohbet odasının diğer tüm " -"üyelerine gönderir." - -#: ../../source/features.rst:173 +"OnionShare, Tor Onion hizmetlerine dayandığından, Tor Browser ve " +"OnionShare arasındaki bağlantıların tümü uçtan uca şifrelenmiştir (E2EE)." +" Birisi bir OnionShare sohbet odasına bir ileti gönderdiğinde, bunu E2EE " +"onion bağlantısı üzerinden sunucuya gönderir ve ardından sunucu bunu " +"WebSockets kullanarak E2EE onion bağlantıları aracılığıyla sohbet " +"odasının diğer tüm üyelerine gönderir." + +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." @@ -1099,3 +1113,4 @@ msgstr "" #~ " OnionShare sohbet odaları mesajları hiçbir" #~ " yerde depolamadığından sorun en aza " #~ "indirilir." + diff --git a/docs/source/locale/tr/LC_MESSAGES/tor.po b/docs/source/locale/tr/LC_MESSAGES/tor.po index 9bf9b2f2..ef300b56 100644 --- a/docs/source/locale/tr/LC_MESSAGES/tor.po +++ b/docs/source/locale/tr/LC_MESSAGES/tor.po @@ -7,16 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-10-02 12:36+0000\n" "Last-Translator: Kaya Zeren \n" -"Language-Team: tr \n" "Language: tr\n" +"Language-Team: tr \n" +"Plural-Forms: nplurals=2; plural=n != 1\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -24,24 +23,27 @@ msgid "Connecting to Tor" msgstr "Tor Bağlantısı Kurmak" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "OnionShare penceresinin sağ alt kısmındaki \"⚙\" simgesine tıklayarak " -"ayarlara gidin ve OnionShare ile Tor bağlantısı kurmanın bir yolunu seçin." +"ayarlara gidin ve OnionShare ile Tor bağlantısı kurmanın bir yolunu " +"seçin." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "OnionShare ile birlikte gelen ``tor`` işlemi kullanılsın" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" "This is the default, simplest and most reliable way that OnionShare " "connects to Tor. For this reason, it's recommended for most users." msgstr "" -"Bu varsayılan seçenektir, OnionShare ile Tor bağlantısı kurmanın en basit ve " -"en güvenilir yoludur. Bu nedenle çoğu kullanıcı için bu seçenek önerilir." +"Bu varsayılan seçenektir, OnionShare ile Tor bağlantısı kurmanın en basit" +" ve en güvenilir yoludur. Bu nedenle çoğu kullanıcı için bu seçenek " +"önerilir." #: ../../source/tor.rst:14 msgid "" @@ -50,40 +52,84 @@ msgid "" "with other ``tor`` processes on your computer, so you can use the Tor " "Browser or the system ``tor`` on their own." msgstr "" -"OnionShare uygulamasını açtığınızda, kendisinin kullanması için arka planda " -"önceden yapılandırılmış bir ``tor`` işlemi başlatır. Bu bilgisayarınızdaki " -"diğer ``tor`` işlemlerine müdahale etmez, böylece Tor Browser veya sistemin " -"``tor`` işlemini kendi başına kullanabilirsiniz." +"OnionShare uygulamasını açtığınızda, kendisinin kullanması için arka " +"planda önceden yapılandırılmış bir ``tor`` işlemi başlatır. Bu " +"bilgisayarınızdaki diğer ``tor`` işlemlerine müdahale etmez, böylece Tor " +"Browser veya sistemin ``tor`` işlemini kendi başına kullanabilirsiniz." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +#, fuzzy +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" +"İnternet erişiminiz sansürleniyorsa, OnionShare uygulamasını Tor ağına " +"`Tor köprüleri `_ " +"kullanarak bağlanacak şekilde yapılandırabilirsiniz. OnionShare, Tor " +"köprüsü olmadan bağlanıyorsa köprü kullanmanıza gerek yoktur." + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Tor Browser ile otomatik yapılandırma denensin" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " "process from the Tor Browser. Keep in mind you need to keep Tor Browser " "open in the background while you're using OnionShare for this to work." msgstr "" -"`Tor Browser indirdiyseniz `_ ve iki tane ``tor``" -" işleminin çalışmasını istemiyorsanız Tor Browser'ın ``tor`` işlemini " -"kullanabilirsiniz. Bunun çalışması için OnionShare kullanırken arka planda " -"Tor Browser uygulamasını açık tutmanız gerektiğini unutmayın." +"`Tor Browser indirdiyseniz `_ ve iki tane " +"``tor`` işleminin çalışmasını istemiyorsanız Tor Browser'ın ``tor`` " +"işlemini kullanabilirsiniz. Bunun çalışması için OnionShare kullanırken " +"arka planda Tor Browser uygulamasını açık tutmanız gerektiğini unutmayın." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Windows üzerinde sistem ``tor` hizmetini kullanmak" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." msgstr "" -"Bu seçenek oldukça ileridir. Düz metin dosyalarını nasıl düzenleyeceğinizi " -"ve yönetici olarak işleri nasıl yapacağınızı bilmeniz gerekir." +"Bu seçenek oldukça ileridir. Düz metin dosyalarını nasıl " +"düzenleyeceğinizi ve yönetici olarak işleri nasıl yapacağınızı bilmeniz " +"gerekir." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -91,11 +137,12 @@ msgid "" "the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." msgstr "" "`Buradan `_ Tor Windows Uzman " -"Paketini indirin. Sıkıştırılmış dosyayı ayıklayın ve ayıklanan klasörü ``C:" -"\\Program Files (x86)\\`` içine taşıyın. ``Data`` ve ``Tor`` klasörlerinin " -"bulunduğu ayıklanmış klasörü ``tor-win32`` olarak yeniden adlandırın." +"Paketini indirin. Sıkıştırılmış dosyayı ayıklayın ve ayıklanan klasörü " +"``C:\\Program Files (x86)\\`` içine taşıyın. ``Data`` ve ``Tor`` " +"klasörlerinin bulunduğu ayıklanmış klasörü ``tor-win32`` olarak yeniden " +"adlandırın." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -103,13 +150,13 @@ msgid "" "administrator, and use ``tor.exe --hash-password`` to generate a hash of " "your password. For example::" msgstr "" -"Bir denetim kapı numarası parolası oluşturun. (Parola için ``içeren yanılma " -"araştır çalış intikam oluştur değişken`` gibi 7 sözcükten oluşan bir dizi " -"kullanmak iyi bir fikir olacaktır). Sonra yönetici olarak bir komut istemi " -"(``cmd``) açın ve parolanızın karıştırılan kodunu oluşturmak için ``tor.exe " -"--hash-password`` komutunu kullanın. Örneğin::" +"Bir denetim kapı numarası parolası oluşturun. (Parola için ``içeren " +"yanılma araştır çalış intikam oluştur değişken`` gibi 7 sözcükten oluşan " +"bir dizi kullanmak iyi bir fikir olacaktır). Sonra yönetici olarak bir " +"komut istemi (``cmd``) açın ve parolanızın karıştırılan kodunu oluşturmak" +" için ``tor.exe --hash-password`` komutunu kullanın. Örneğin::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -120,7 +167,7 @@ msgstr "" "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF`` " "olacaktır." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -131,7 +178,7 @@ msgstr "" "oluşturduğunuzla değiştirerek içine parolanızın karıştırılan çıktısını " "koyun::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -144,11 +191,11 @@ msgstr "" "``_). Bunun " "gibi::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Artık Windows üzerinde bir sistem ``tor`` işlemi çalıştırıyorsunuz!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -158,20 +205,21 @@ msgid "" "Connection to Tor\" button. If all goes well, you should see \"Connected " "to the Tor controller\"." msgstr "" -"OnionShare uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare ile " -"Tor bağlantısı nasıl kurulmalı?\" altındaki \"Denetim kapı numarası " -"kullanarak bağlan\" seçeneğini seçin ve \"Denetim kapı numarası\" değerini " -"``127.0.0.1`` ve \"Kapı numarası\" değerini ``9051`` olarak ayarlayın. \"Tor " -"kimlik doğrulama ayarları\" altında \"Parola\" seçeneğini seçin ve parolayı " -"yukarıda seçtiğiniz denetim kapı noktası parolası olarak ayarlayın. \"Tor " -"bağlantısını sına\" düğmesine tıklayın. Her şey yolunda giderse, \"Tor " -"denetleyicisi ile bağlantı kuruldu\" ifadesini göreceksiniz." - -#: ../../source/tor.rst:61 +"OnionShare uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare " +"ile Tor bağlantısı nasıl kurulmalı?\" altındaki \"Denetim kapı numarası " +"kullanarak bağlan\" seçeneğini seçin ve \"Denetim kapı numarası\" " +"değerini ``127.0.0.1`` ve \"Kapı numarası\" değerini ``9051`` olarak " +"ayarlayın. \"Tor kimlik doğrulama ayarları\" altında \"Parola\" " +"seçeneğini seçin ve parolayı yukarıda seçtiğiniz denetim kapı noktası " +"parolası olarak ayarlayın. \"Tor bağlantısını sına\" düğmesine tıklayın. " +"Her şey yolunda giderse, \"Tor denetleyicisi ile bağlantı kuruldu\" " +"ifadesini göreceksiniz." + +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "macOS üzerinde sistem ``tor` işlemini kullanmak" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -179,17 +227,17 @@ msgstr "" "Henüz kurmadıysanız, önce `Homebrew `_ ve ardından Tor " "kurun::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "" "Sonra Tor hizmetini OnionShare uygulamasından gelen bağlantılara izin " "verecek şekilde yapılandırın::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "Ve sistem Tor hizmetini başlatın::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -197,46 +245,48 @@ msgid "" "Under \"Tor authentication settings\" choose \"No authentication, or " "cookie authentication\". Click the \"Test Connection to Tor\" button." msgstr "" -"OnionShare uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare ile " -"Tor bağlantısı nasıl kurulmalı?\" altındaki \"Soket dosyası kullanılarak " -"bağlantı kurulsun\" seçeneğini seçin ve soket dosyasını ``/usr/local/var/run/" -"tor/control.socket`` olarak ayarlayın. \"Tor kimlik doğrulama ayarları\" " -"altında \"Kimlik doğrulama yok, veya çerez doğrulaması\" seçeneğini seçin. " -"\"Tor bağlantısını sına\" düğmesine tıklayın." - -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +"OnionShare uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare " +"ile Tor bağlantısı nasıl kurulmalı?\" altındaki \"Soket dosyası " +"kullanılarak bağlantı kurulsun\" seçeneğini seçin ve soket dosyasını " +"``/usr/local/var/run/tor/control.socket`` olarak ayarlayın. \"Tor kimlik " +"doğrulama ayarları\" altında \"Kimlik doğrulama yok, veya çerez " +"doğrulaması\" seçeneğini seçin. \"Tor bağlantısını sına\" düğmesine " +"tıklayın." + +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" "Her şey yolunda giderse, \"Tor denetleyicisi ile bağlantı kuruldu\" " "ifadesini göreceksiniz." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Linux üzerinde sistem ``tor` işlemini kullanmak" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " "`official repository `_." msgstr "" -"Önce ``tor`` paketini kurun. Debian, Ubuntu veya benzer bir Linux dağıtımı " -"kullanıyorsanız, Tor projesinin `resmi deposunu `_ kullanmanız önerilir." +"Önce ``tor`` paketini kurun. Debian, Ubuntu veya benzer bir Linux " +"dağıtımı kullanıyorsanız, Tor projesinin `resmi deposunu " +"`_ kullanmanız " +"önerilir." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " "connect to your system ``tor``'s control socket file." msgstr "" -"Ardından, kullanıcınızı ``tor`` işlemini çalıştıran gruba ekleyin (Debian ve " -"Ubuntu için bu ``debian-tor`` olacak) ve OnionShare uygulamasını " -"sisteminizin ``tor`` işleminin denetim soketi dosyasına bağlanacak şekilde " -"yapılandırın." +"Ardından, kullanıcınızı ``tor`` işlemini çalıştıran gruba ekleyin (Debian" +" ve Ubuntu için bu ``debian-tor`` olacak) ve OnionShare uygulamasını " +"sisteminizin ``tor`` işleminin denetim soketi dosyasına bağlanacak " +"şekilde yapılandırın." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -244,7 +294,7 @@ msgstr "" "Bu komutu çalıştırarak kullanıcınızı ``debian-tor`` grubuna ekleyin " "(``username`` ifadesini gerçek kullanıcı adınızla değiştirin)::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -253,47 +303,13 @@ msgid "" "\"No authentication, or cookie authentication\". Click the \"Test " "Connection to Tor\" button." msgstr "" -"Bilgisayarınızı yeniden başlatın. Yeniden başlatıldıktan sonra OnionShare " -"uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare ile Tor " +"Bilgisayarınızı yeniden başlatın. Yeniden başlatıldıktan sonra OnionShare" +" uygulamasını açın ve \"⚙\" simgesine tıklayın. \"OnionShare ile Tor " "bağlantısı nasıl kurulmalı?\" altındaki \"Soket dosyası kullanılarak " -"bağlantı kurulsun\" seçeneğini seçin. Soket dosyasını ``/var/run/tor/" -"control`` olarak ayarlayın. \"Tor kimlik doğrulama ayarları\" altında " -"\"Kimlik doğrulama yok, veya çerez doğrulaması\" seçeneğini seçin. \"Tor " -"Bağlantısını Test Et\" düğmesine tıklayın." - -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Tor köprülerini kullanmak" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" -"İnternet erişiminiz sansürleniyorsa, OnionShare uygulamasını Tor ağına `Tor " -"köprüleri `_ " -"kullanarak bağlanacak şekilde yapılandırabilirsiniz. OnionShare, Tor köprüsü " -"olmadan bağlanıyorsa köprü kullanmanıza gerek yoktur." - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "" -"Köprüleri yapılandırmak için OnionShare uygulamasındaki \"⚙\" simgesine " -"tıklayın." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Yerleşik obfs4 değiştirilebilir taşıyıcıları, yerleşik meek_lite (Azure) " -"değiştirilebilir taşıyıcıları veya Tor `BridgeDB `_ adresinden edinebileceğiniz özel köprüleri kullanabilirsiniz. Bir " -"köprü kullanmanız gerekirse, önce yerleşik obfs4 olanları deneyin." +"bağlantı kurulsun\" seçeneğini seçin. Soket dosyasını " +"``/var/run/tor/control`` olarak ayarlayın. \"Tor kimlik doğrulama " +"ayarları\" altında \"Kimlik doğrulama yok, veya çerez doğrulaması\" " +"seçeneğini seçin. \"Tor Bağlantısını Test Et\" düğmesine tıklayın." #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -527,3 +543,33 @@ msgstr "" #~ "if you don't already have it. " #~ "Then, install Tor::" #~ msgstr "" + +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "OnionShare ile birlikte gelen ``tor`` işlemi kullanılsın" + +#~ msgid "Using Tor bridges" +#~ msgstr "Tor köprülerini kullanmak" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "" +#~ "Köprüleri yapılandırmak için OnionShare " +#~ "uygulamasındaki \"⚙\" simgesine tıklayın." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Yerleşik obfs4 değiştirilebilir taşıyıcıları, " +#~ "yerleşik meek_lite (Azure) değiştirilebilir " +#~ "taşıyıcıları veya Tor `BridgeDB " +#~ "`_ adresinden " +#~ "edinebileceğiniz özel köprüleri kullanabilirsiniz." +#~ " Bir köprü kullanmanız gerekirse, önce " +#~ "yerleşik obfs4 olanları deneyin." + diff --git a/docs/source/locale/uk/LC_MESSAGES/features.po b/docs/source/locale/uk/LC_MESSAGES/features.po index 54b331d0..97dc27c4 100644 --- a/docs/source/locale/uk/LC_MESSAGES/features.po +++ b/docs/source/locale/uk/LC_MESSAGES/features.po @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-11 01:40+0000\n" "Last-Translator: Ihor Hordiichuk \n" -"Language-Team: none\n" "Language: uk\n" +"Language-Team: none\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" "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.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -53,10 +52,10 @@ msgid "" "or using something less secure like unencrypted email, depending on your " "`threat model `_." msgstr "" -"Ви відповідальні за таємницю надсилання цієї URL-адреси та приватного ключа " -"за допомогою вибраного вами каналу зв'язку, як-от у зашифрованому " -"повідомленні чату, або за використання менш захищеного повідомлення, як от " -"незашифрований електронний лист, залежно від вашої `моделі загрози " +"Ви відповідальні за таємницю надсилання цієї URL-адреси та приватного " +"ключа за допомогою вибраного вами каналу зв'язку, як-от у зашифрованому " +"повідомленні чату, або за використання менш захищеного повідомлення, як " +"от незашифрований електронний лист, залежно від вашої `моделі загрози " "`_." #: ../../source/features.rst:20 @@ -66,10 +65,10 @@ msgid "" " Tor Browser will then prompt for the private key, which the people can " "also then copy and paste in." msgstr "" -"Люди, яким ви надсилаєте URL-адресу, повинні копіювати та вставити її до `" -"Tor Browser `_, щоб отримати доступ до служби " -"OnionShare. Далі Tor Browser запитає приватний ключ, який люди також можуть " -"скопіювати та вставити." +"Люди, яким ви надсилаєте URL-адресу, повинні копіювати та вставити її до " +"`Tor Browser `_, щоб отримати доступ до " +"служби OnionShare. Далі Tor Browser запитає приватний ключ, який люди " +"також можуть скопіювати та вставити." #: ../../source/features.rst:24 msgid "" @@ -80,9 +79,9 @@ msgid "" msgstr "" "Якщо ви запустили OnionShare на ноутбуці, щоб надіслати комусь файли, а " "потім зупинили його роботу до завершення надсилання файлів, служба буде " -"недоступна, доки роботу ноутбука не буде поновлено і він знову з'єднається з " -"інтернетом. OnionShare найкраще працює під час роботи з людьми в режимі " -"реального часу." +"недоступна, доки роботу ноутбука не буде поновлено і він знову " +"з'єднається з інтернетом. OnionShare найкраще працює під час роботи з " +"людьми в режимі реального часу." #: ../../source/features.rst:26 msgid "" @@ -129,10 +128,10 @@ msgid "" " files have been sent (uncheck to allow downloading individual files)\" " "box." msgstr "" -"Як тільки хтось завершує завантажувати ваші файли, OnionShare автоматично " -"зупиняє сервер, прибравши вебсайт з інтернету. Якщо ви хочете дозволити " -"кільком людям завантажувати ці файли, приберіть позначку біля пункту «" -"Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити " +"Як тільки хтось завершує завантажувати ваші файли, OnionShare автоматично" +" зупиняє сервер, прибравши вебсайт з інтернету. Якщо ви хочете дозволити " +"кільком людям завантажувати ці файли, приберіть позначку біля пункту " +"«Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити " "завантаження окремих файлів)»." #: ../../source/features.rst:42 @@ -164,10 +163,10 @@ msgid "" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" -"Тепер, коли у вас є OnionShare, скопіюйте адресу й приватний та надішліть їх " -"особі, якій ви хочете надіслати файли. Якщо файли повинні бути захищеними " -"або особа перебуває у небезпеці, скористайтеся застосунком повідомлень з " -"шифруванням." +"Тепер, коли у вас є OnionShare, скопіюйте адресу й приватний та надішліть" +" їх особі, якій ви хочете надіслати файли. Якщо файли повинні бути " +"захищеними або особа перебуває у небезпеці, скористайтеся застосунком " +"повідомлень з шифруванням." #: ../../source/features.rst:50 msgid "" @@ -298,10 +297,10 @@ msgid "" "OnionShare service. OnionShare does not add any safety mechanisms to " "protect your system from malicious files." msgstr "" -"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, хтось " -"спробує зламати ваш комп’ютер, вивантаживши зловмисний файл до вашої служби " -"OnionShare. Вона не додає жодних механізмів безпеки для захисту вашої " -"системи від шкідливих файлів." +"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, " +"хтось спробує зламати ваш комп’ютер, вивантаживши зловмисний файл до " +"вашої служби OnionShare. Вона не додає жодних механізмів безпеки для " +"захисту вашої системи від шкідливих файлів." #: ../../source/features.rst:90 msgid "" @@ -337,9 +336,9 @@ msgid "" "basis." msgstr "" "Якщо ви хочете розмістити свою власну анонімну скриньку за допомогою " -"OnionShare, радимо робити це на окремому виділеному комп’ютері, який завжди " -"ввімкнено та під'єднано до інтернету, а не на тому, яким ви користуєтеся " -"регулярно." +"OnionShare, радимо робити це на окремому виділеному комп’ютері, який " +"завжди ввімкнено та під'єднано до інтернету, а не на тому, яким ви " +"користуєтеся регулярно." #: ../../source/features.rst:99 msgid "" @@ -348,11 +347,11 @@ msgid "" "public service (see :ref:`turn_off_private_key`). It's also a good idea " "to give it a custom title (see :ref:`custom_titles`)." msgstr "" -"Якщо ви маєте намір розмістити адресу OnionShare на своєму вебсайті або в " -"профілях суспільних мереж, вам слід зберегти вкладку (докладніше " +"Якщо ви маєте намір розмістити адресу OnionShare на своєму вебсайті або в" +" профілях суспільних мереж, вам слід зберегти вкладку (докладніше " ":ref:`save_tabs`) і запустити її загальнодоступною службою (докладніше " -":ref:`turn_off_private_key`). Також непогано дати йому власний заголовок (" -"докладніше :ref:`custom_titles`)." +":ref:`turn_off_private_key`). Також непогано дати йому власний заголовок " +"(докладніше :ref:`custom_titles`)." #: ../../source/features.rst:102 msgid "Host a Website" @@ -407,27 +406,37 @@ msgid "" "page." msgstr "" "Типово OnionShare допоможе захистити ваш вебсайт, встановивши строгий " -"заголовок `політики безпеки вмісту `_. Однак, це запобігає завантаженню сторонніх " -"матеріалів на вебсторінку." +"заголовок `політики безпеки вмісту " +"`_. Однак, це " +"запобігає завантаженню сторонніх матеріалів на вебсторінку." #: ../../source/features.rst:121 +#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " -"JavaScript libraries from CDNs, check the \"Don't send Content Security " -"Policy header (allows your website to use third-party resources)\" box " -"before starting the service." +"JavaScript libraries from CDNs, you have two options:" msgstr "" "Якщо ви хочете завантажити вміст зі сторонніх вебсайтів, як-от активи або" " бібліотеки JavaScript із CDN, то перед запуском служби потрібно " "встановити позначку «Не надсилати заголовок політики безпеки вмісту " "(дозволяє вебсайту застосовувати сторонні ресурси)»." +#: ../../source/features.rst:123 +msgid "" +"You can disable sending a Content Security Policy header by checking the " +"\"Don't send Content Security Policy header (allows your website to use " +"third-party resources)\" box before starting the service." +msgstr "" + #: ../../source/features.rst:124 +msgid "You can send a custom Content Security Policy header." +msgstr "" + +#: ../../source/features.rst:127 msgid "Tips for running a website service" msgstr "Поради щодо запуску служби розміщення вебсайту" -#: ../../source/features.rst:126 +#: ../../source/features.rst:129 msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -436,14 +445,14 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" -"Якщо ви хочете розмістити постійний вебсайт за допомогою OnionShare (це не " -"просто для того, щоб швидко комусь щось показати), радимо робити це на " -"окремо виділеному комп’ютері, який завжди ввімкнено та під'єднано до " -"інтернету, а не на той, яким ви користуєтеся регулярно. Збережіть вкладку (" -"подробиці про :ref:`save_tabs`), щоб ви могли відновити вебсайт з тією ж " -"адресою, якщо закриєте OnionShare і знову відкриєте його пізніше." +"Якщо ви хочете розмістити постійний вебсайт за допомогою OnionShare (це " +"не просто для того, щоб швидко комусь щось показати), радимо робити це на" +" окремо виділеному комп’ютері, який завжди ввімкнено та під'єднано до " +"інтернету, а не на той, яким ви користуєтеся регулярно. Збережіть вкладку" +" (подробиці про :ref:`save_tabs`), щоб ви могли відновити вебсайт з тією " +"ж адресою, якщо закриєте OnionShare і знову відкриєте його пізніше." -#: ../../source/features.rst:129 +#: ../../source/features.rst:132 msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." @@ -452,11 +461,11 @@ msgstr "" "запустити його загальнодоступною службою (подробиці " ":ref:`turn_off_private_key`)." -#: ../../source/features.rst:132 +#: ../../source/features.rst:135 msgid "Chat Anonymously" msgstr "Спілкуйтеся таємно" -#: ../../source/features.rst:134 +#: ../../source/features.rst:137 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." @@ -465,7 +474,7 @@ msgstr "" "захищеної кімнати чату, яка нічого не реєструє. Просто відкрийте вкладку " "чату та натисніть «Запустити сервер чату»." -#: ../../source/features.rst:138 +#: ../../source/features.rst:141 msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " @@ -473,12 +482,12 @@ msgid "" "to send out the OnionShare address and private key." msgstr "" "Після запуску сервера скопіюйте адресу OnionShare і приватний ключ та " -"надішліть їх людям, які мають приєднатися до цієї анонімної кімнати бесіди. " -"Якщо важливо обмежити коло учасників, ви повинні скористатися застосунком " -"обміну зашифрованими повідомленнями для надсилання адреси й приватного ключа " -"OnionShare." +"надішліть їх людям, які мають приєднатися до цієї анонімної кімнати " +"бесіди. Якщо важливо обмежити коло учасників, ви повинні скористатися " +"застосунком обміну зашифрованими повідомленнями для надсилання адреси й " +"приватного ключа OnionShare." -#: ../../source/features.rst:143 +#: ../../source/features.rst:146 msgid "" "People can join the chat room by loading its OnionShare address in Tor " "Browser. The chat room requires JavasScript, so everyone who wants to " @@ -490,7 +499,7 @@ msgstr "" "участь, повинні встановити рівень безпеки на «Стандартний» або " "«Безпечніший» замість «Найбезпечніший»." -#: ../../source/features.rst:146 +#: ../../source/features.rst:149 msgid "" "When someone joins the chat room they get assigned a random name. They " "can change their name by typing a new name in the box in the left panel " @@ -502,7 +511,7 @@ msgstr "" "натиснувши ↵. Попередні повідомлення взагалі не з'являться, навіть якщо " "інші вже спілкувалися в чаті, оскільки історія чату ніде не зберігається." -#: ../../source/features.rst:152 +#: ../../source/features.rst:155 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." @@ -510,7 +519,7 @@ msgstr "" "У чаті OnionShare всі анонімні. Будь-хто може змінити своє ім'я на яке " "завгодно і жодного способу підтвердження особи не існує." -#: ../../source/features.rst:155 +#: ../../source/features.rst:158 msgid "" "However, if you create an OnionShare chat room and securely send the " "address only to a small group of trusted friends using encrypted " @@ -522,11 +531,11 @@ msgstr "" "то ви можете бути обґрунтовано впевнені, що люди, які приєднуються до " "чату, є вашими друзями." -#: ../../source/features.rst:158 +#: ../../source/features.rst:161 msgid "How is this useful?" msgstr "Чим це корисно?" -#: ../../source/features.rst:160 +#: ../../source/features.rst:163 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." @@ -535,7 +544,7 @@ msgstr "" "повідомленнями, то який сенс спілкування в OnionShare? Він залишає менше " "слідів." -#: ../../source/features.rst:162 +#: ../../source/features.rst:165 msgid "" "If you for example send a message to a Signal group, a copy of your " "message ends up on each device (the smartphones, and computers if they " @@ -547,14 +556,15 @@ msgid "" "minimum." msgstr "" "Наприклад, якщо ви надсилаєте повідомлення у групі Signal, копія " -"повідомлення потрапляє на кожен пристрій (смартфони та комп'ютери, якщо вони " -"встановили Signal Desktop) кожного учасника групи. Навіть якщо увімкнено " -"зникнення повідомлень, важко впевнитися, що всі копії повідомлень справді " -"видалено з усіх пристроїв та з будь-яких інших місць (наприклад, баз даних " -"сповіщень), до яких, можливо, їх було збережено. Кімнати бесід OnionShare " -"ніде не зберігають жодних повідомлень, тому проблема зводиться до мінімуму." +"повідомлення потрапляє на кожен пристрій (смартфони та комп'ютери, якщо " +"вони встановили Signal Desktop) кожного учасника групи. Навіть якщо " +"увімкнено зникнення повідомлень, важко впевнитися, що всі копії " +"повідомлень справді видалено з усіх пристроїв та з будь-яких інших місць " +"(наприклад, баз даних сповіщень), до яких, можливо, їх було збережено. " +"Кімнати бесід OnionShare ніде не зберігають жодних повідомлень, тому " +"проблема зводиться до мінімуму." -#: ../../source/features.rst:165 +#: ../../source/features.rst:168 msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -563,17 +573,18 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" -"Кімнати бесід OnionShare також можуть бути корисними для людей, які хочуть " -"анонімно та безпечно спілкуватися з кимось, не створюючи жодних облікових " -"записів. Наприклад, джерело може надіслати журналісту адресу OnionShare за " -"допомогою одноразової адреси електронної пошти, а потім зачекати, поки " -"журналіст приєднається до бесіди й усе це без шкоди їхній анонімності." +"Кімнати бесід OnionShare також можуть бути корисними для людей, які " +"хочуть анонімно та безпечно спілкуватися з кимось, не створюючи жодних " +"облікових записів. Наприклад, джерело може надіслати журналісту адресу " +"OnionShare за допомогою одноразової адреси електронної пошти, а потім " +"зачекати, поки журналіст приєднається до бесіди й усе це без шкоди їхній " +"анонімності." -#: ../../source/features.rst:169 +#: ../../source/features.rst:172 msgid "How does the encryption work?" msgstr "Як працює шифрування?" -#: ../../source/features.rst:171 +#: ../../source/features.rst:174 msgid "" "Because OnionShare relies on Tor onion services, connections between the " "Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When " @@ -588,7 +599,7 @@ msgstr "" "сервер через E2EE onion з'єднання, який потім надсилає його всім іншим " "учасникам чату за допомогою WebSockets через їхні E2EE onion з'єднання." -#: ../../source/features.rst:173 +#: ../../source/features.rst:176 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." @@ -914,3 +925,4 @@ msgstr "" #~ "бути збережені. Кімнати чатів OnionShare " #~ "ніде не зберігають жодних повідомлень, " #~ "тож проблему мінімізовано." + diff --git a/docs/source/locale/uk/LC_MESSAGES/tor.po b/docs/source/locale/uk/LC_MESSAGES/tor.po index 3f355495..d3550bca 100644 --- a/docs/source/locale/uk/LC_MESSAGES/tor.po +++ b/docs/source/locale/uk/LC_MESSAGES/tor.po @@ -7,17 +7,16 @@ msgid "" msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" -"POT-Creation-Date: 2021-09-09 19:15-0700\n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" "PO-Revision-Date: 2021-09-10 20:35+0000\n" "Last-Translator: Ihor Hordiichuk \n" -"Language-Team: none\n" "Language: uk\n" +"Language-Team: none\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" "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.9-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -25,16 +24,17 @@ msgid "Connecting to Tor" msgstr "З'єднання з Tor" #: ../../source/tor.rst:4 +#, fuzzy msgid "" -"Pick a way to connect OnionShare to Tor by clicking the \"⚙\" icon in the" -" bottom right of the OnionShare window to get to its settings." +"Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" +" the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" "Виберіть спосіб під'єднання OnionShare до Tor, натиснувши піктограму «⚙» " "у нижньому правому куті вікна OnionShare, щоб перейти до його параметрів." #: ../../source/tor.rst:9 -msgid "Use the ``tor`` bundled with OnionShare" -msgstr "Використовуйте ``tor``, який постачається в комплекті з OnionShare" +msgid "Use the Tor version built into OnionShare" +msgstr "" #: ../../source/tor.rst:11 msgid "" @@ -57,10 +57,53 @@ msgstr "" "використовувати браузер Tor або систему ``tor`` ." #: ../../source/tor.rst:18 +msgid "Getting Around Censorship" +msgstr "" + +#: ../../source/tor.rst:20 +#, fuzzy +msgid "" +"If your access to the internet is censored, you can configure OnionShare " +"to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " +"one, you don't need to use a bridge." +msgstr "" +"Якщо ваш доступ до інтернету цензуровано, ви можете налаштувати " +"OnionShare для з'єднання з мережею Tor за допомогою `мостів Tor " +"`_. Якщо OnionShare" +" під'єднано до Tor без них, вам не потрібно користуватися мостом." + +#: ../../source/tor.rst:22 +msgid "" +"To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" +" version built into OnionShare\" and check the \"Use a bridge\" checkbox." +msgstr "" + +#: ../../source/tor.rst:25 +msgid "" +"Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " +"is recommended over using `meek-azure`." +msgstr "" + +#: ../../source/tor.rst:29 +msgid "" +"If using a built-in bridge doesn't work, you can request a bridge from " +"torproject.org. You will have to solve a CAPTCHA in order to request a " +"bridge. (This makes it more difficult for governments or ISPs to block " +"access to Tor bridges.)" +msgstr "" + +#: ../../source/tor.rst:33 +msgid "" +"You also have the option of using a bridge that you learned about from a " +"trusted source." +msgstr "" + +#: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" msgstr "Спроба автоматичного налаштування за допомогою браузера Tor" -#: ../../source/tor.rst:20 +#: ../../source/tor.rst:38 msgid "" "If you have `downloaded the Tor Browser `_ " "and don't want two ``tor`` processes running, you can use the ``tor`` " @@ -73,11 +116,11 @@ msgstr "" "працювало, потрібно тримати браузер Tor у фоновому режимі під час " "використання OnionShare." -#: ../../source/tor.rst:24 +#: ../../source/tor.rst:42 msgid "Using a system ``tor`` in Windows" msgstr "Користування системним ``tor`` на Windows" -#: ../../source/tor.rst:26 +#: ../../source/tor.rst:44 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." @@ -85,7 +128,7 @@ msgstr "" "Це досить просунуто. Вам потрібно знати, як редагувати файли зі звичайним" " текстом та виконувати дії від імені адміністратором." -#: ../../source/tor.rst:28 +#: ../../source/tor.rst:46 msgid "" "Download the Tor Windows Expert Bundle `from " "`_. Extract the compressed file" @@ -97,7 +140,7 @@ msgstr "" " копіюйте видобуту теку до ``C:\\Program Files (x86)\\`` й перейменуйте " "теку з ``Data`` та ``Tor`` в середині на ``tor-win32``." -#: ../../source/tor.rst:32 +#: ../../source/tor.rst:50 msgid "" "Make up a control port password. (Using 7 words in a sequence like " "``comprised stumble rummage work avenging construct volatile`` is a good " @@ -111,7 +154,7 @@ msgstr "" "адміністратор і використовуйте ``tor.exe --hash-password``, щоб створити " "хеш вашого пароля. Наприклад::" -#: ../../source/tor.rst:39 +#: ../../source/tor.rst:57 msgid "" "The hashed password output is displayed after some warnings (which you " "can ignore). In the case of the above example, it is " @@ -121,7 +164,7 @@ msgstr "" "знехтувати). У моєму випадку це було " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." -#: ../../source/tor.rst:41 +#: ../../source/tor.rst:59 msgid "" "Now create a new text file at ``C:\\Program Files (x86)\\tor-" "win32\\torrc`` and put your hashed password output in it, replacing the " @@ -131,7 +174,7 @@ msgstr "" "win32\\torrc`` та помістіть свій хешований пароль до теки, замінивши " "``HashedControlPassword`` на той, який ви щойно створили::" -#: ../../source/tor.rst:46 +#: ../../source/tor.rst:64 msgid "" "In your administrator command prompt, install ``tor`` as a service using " "the appropriate ``torrc`` file you just created (as described in " @@ -143,11 +186,11 @@ msgstr "" "описано у " "``_). Як це::" -#: ../../source/tor.rst:50 +#: ../../source/tor.rst:68 msgid "You are now running a system ``tor`` process in Windows!" msgstr "Тепер ви використовуєте системний процес ``tor`` на Windows!" -#: ../../source/tor.rst:52 +#: ../../source/tor.rst:70 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using control port\", and " @@ -165,11 +208,11 @@ msgstr "" "вибрали раніше. Натисніть кнопку «Перевірити з'єднання з Tor». Якщо все " "добре, ви побачите «З'єднано з контролером Tor»." -#: ../../source/tor.rst:61 +#: ../../source/tor.rst:79 msgid "Using a system ``tor`` in macOS" msgstr "Користування системним ``tor`` на macOS" -#: ../../source/tor.rst:63 +#: ../../source/tor.rst:81 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" @@ -177,15 +220,15 @@ msgstr "" "Спочатку встановіть `Homebrew `_, якщо у вас його ще " "немає. Потім встановіть Tor::" -#: ../../source/tor.rst:67 +#: ../../source/tor.rst:85 msgid "Now configure Tor to allow connections from OnionShare::" msgstr "Тепер налаштуйте Tor, щоб дозволити з'єднання з OnionShare::" -#: ../../source/tor.rst:74 +#: ../../source/tor.rst:92 msgid "And start the system Tor service::" msgstr "І запустіть системну Tor-службу::" -#: ../../source/tor.rst:78 +#: ../../source/tor.rst:96 msgid "" "Open OnionShare and click the \"⚙\" icon in it. Under \"How should " "OnionShare connect to Tor?\" choose \"Connect using socket file\", and " @@ -200,15 +243,15 @@ msgstr "" "автентифікації Tor» виберіть «Без автентифікації або автентифікація через" " cookie». Натисніть кнопку «Перевірити з'єднання з Tor»." -#: ../../source/tor.rst:84 ../../source/tor.rst:104 +#: ../../source/tor.rst:102 ../../source/tor.rst:122 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "Якщо все добре, ви побачите «З'єднано з контролером Tor»." -#: ../../source/tor.rst:87 +#: ../../source/tor.rst:105 msgid "Using a system ``tor`` in Linux" msgstr "Користування системним ``tor`` на Linux" -#: ../../source/tor.rst:89 +#: ../../source/tor.rst:107 msgid "" "First, install the ``tor`` package. If you're using Debian, Ubuntu, or a " "similar Linux distro, It is recommended to use the Tor Project's " @@ -219,7 +262,7 @@ msgstr "" "Ubuntu або подібний дистрибутив Linux, я раджу вам використовувати " "`офіційне сховище `_." -#: ../../source/tor.rst:91 +#: ../../source/tor.rst:109 msgid "" "Next, add your user to the group that runs the ``tor`` process (in the " "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " @@ -229,7 +272,7 @@ msgstr "" " з Debian і Ubuntu, ``debian-tor``) і налаштуйте OnionShare для " "під'єднання до файлу керування сокетом ``tor`` вашої системи." -#: ../../source/tor.rst:93 +#: ../../source/tor.rst:111 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" @@ -237,7 +280,7 @@ msgstr "" "Додайте свого користувача до групи ``debian-tor``, запустивши цю команду " "(замініть ``username`` вашим іменем користувача)::" -#: ../../source/tor.rst:97 +#: ../../source/tor.rst:115 msgid "" "Reboot your computer. After it boots up again, open OnionShare and click " "the \"⚙\" icon in it. Under \"How should OnionShare connect to Tor?\" " @@ -253,39 +296,6 @@ msgstr "" "автентифікації Tor» виберіть «Без автентифікації або автентифікація через" " cookie». Натисніть кнопку «Перевірити з'єднання з Tor»." -#: ../../source/tor.rst:107 -msgid "Using Tor bridges" -msgstr "Користування мостами Tor" - -#: ../../source/tor.rst:109 -msgid "" -"If your access to the internet is censored, you can configure OnionShare " -"to connect to the Tor network using `Tor bridges " -"`_. If OnionShare " -"connects to Tor without one, you don't need to use a bridge." -msgstr "" -"Якщо ваш доступ до інтернету цензуровано, ви можете налаштувати OnionShare " -"для з'єднання з мережею Tor за допомогою `мостів Tor `_. Якщо OnionShare під'єднано до Tor " -"без них, вам не потрібно користуватися мостом." - -#: ../../source/tor.rst:111 -msgid "To configure bridges, click the \"⚙\" icon in OnionShare." -msgstr "Щоб налаштувати мости, клацніть піктограму «⚙» в OnionShare." - -#: ../../source/tor.rst:113 -msgid "" -"You can use the built-in obfs4 pluggable transports, the built-in " -"meek_lite (Azure) pluggable transports, or custom bridges, which you can " -"obtain from Tor's `BridgeDB `_. If you " -"need to use a bridge, try the built-in obfs4 ones first." -msgstr "" -"Ви можете використовувати вбудовані під'єднувані транспорти obfs4, " -"вбудовані під'єднувані транспорти meek_lite (Azure) або власні мости, які" -" ви можете отримати від Tor `BridgeDB " -"`_. Якщо вам потрібно використовувати " -"міст, спершу спробуйте вбудовані obfs4." - #~ msgid "Using a system Tor in Mac OS X" #~ msgstr "" @@ -440,3 +450,32 @@ msgstr "" #~ " теку до ``C:\\Program Files (x86)\\`` " #~ "і перейменуйте теку з ``Data`` та " #~ "``Tor`` в середині на ``tor-win32``." + +#~ msgid "Use the ``tor`` bundled with OnionShare" +#~ msgstr "Використовуйте ``tor``, який постачається в комплекті з OnionShare" + +#~ msgid "Using Tor bridges" +#~ msgstr "Користування мостами Tor" + +#~ msgid "To configure bridges, click the \"⚙\" icon in OnionShare." +#~ msgstr "Щоб налаштувати мости, клацніть піктограму «⚙» в OnionShare." + +#~ msgid "" +#~ "You can use the built-in obfs4 " +#~ "pluggable transports, the built-in " +#~ "meek_lite (Azure) pluggable transports, or " +#~ "custom bridges, which you can obtain " +#~ "from Tor's `BridgeDB " +#~ "`_. If you need " +#~ "to use a bridge, try the built-" +#~ "in obfs4 ones first." +#~ msgstr "" +#~ "Ви можете використовувати вбудовані " +#~ "під'єднувані транспорти obfs4, вбудовані " +#~ "під'єднувані транспорти meek_lite (Azure) або" +#~ " власні мости, які ви можете отримати" +#~ " від Tor `BridgeDB " +#~ "`_. Якщо вам " +#~ "потрібно використовувати міст, спершу " +#~ "спробуйте вбудовані obfs4." + -- cgit v1.2.3-54-g00ecf From 06a3599fe185902ce8f3c704f8ea652504a1fab7 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 24 Nov 2021 17:55:47 +1100 Subject: Built-in bridge refactoring. Store the built-in bridges in OnionShare settings as a dict, and try writing those into the torrc if present. If they aren't present in OnionShare settings, use the hardcoded templates instead. Fetch the latest built-in bridges over Tor, once connected to Tor. If we can't fetch the bridges over Tor, fall back to Meek (domain-fronting) and try again. Then write those as the dict to the OnionShare settings, to take precedence next time. --- cli/onionshare_cli/onion.py | 207 +++++++++++++++------ .../resources/torrc_template-meek_lite_azure | 2 + cli/onionshare_cli/resources/torrc_template-obfs4 | 16 ++ .../resources/torrc_template-snowflake | 1 + cli/onionshare_cli/settings.py | 1 + cli/tests/test_cli_settings.py | 1 + desktop/src/onionshare/gui_common.py | 4 - desktop/src/onionshare/resources/locale/en.json | 1 - desktop/src/onionshare/threads.py | 2 - desktop/src/onionshare/tor_connection.py | 2 - 10 files changed, 168 insertions(+), 69 deletions(-) create mode 100644 cli/onionshare_cli/resources/torrc_template-meek_lite_azure create mode 100644 cli/onionshare_cli/resources/torrc_template-obfs4 create mode 100644 cli/onionshare_cli/resources/torrc_template-snowflake diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index 65b9e2bb..c0a4e6e1 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -26,11 +26,12 @@ from stem.connection import MissingPassword, UnreadableCookieFile, Authenticatio import base64 import nacl.public import os -import tempfile +import psutil +import requests +import shlex import subprocess +import tempfile import time -import shlex -import psutil import traceback from distutils.version import LooseVersion as Version @@ -127,13 +128,6 @@ class PortNotAvailable(Exception): """ -class TorErrorGettingBridges(Exception): - """ - This exception is raised if onionshare tried to fetch bridges from the Tor - CensorshipCircumvention API, but failed to retrieve valid bridges for some reason. - """ - - class Onion(object): """ Onion is an abstraction layer for connecting to the Tor control port and @@ -324,71 +318,63 @@ class Onion(object): ) with open(self.tor_torrc, "w") as f: + self.common.log("Onion", "connect", "Writing torrc template file") f.write(torrc_template) # Bridge support if self.settings.get("bridges_enabled"): f.write("\nUseBridges 1\n") if self.settings.get("bridges_type") == "built-in": - # Use the CensorshipCircumvention API to fetch the latest built-in bridges - self.common.log( - "Onion", - "connect", - "Trying to automatically obtain built-in bridges via Meek", - ) - meek = Meek(self.common) - meek.start() - self.censorship_circumvention = CensorshipCircumvention( - self.common, meek - ) - builtin_bridges = ( - self.censorship_circumvention.request_builtin_bridges() - ) - meek.cleanup() - if builtin_bridges: - self.common.log( - "Onion", - "connect", - f"Obtained bridges: {builtin_bridges}", - ) - if ( - self.settings.get("bridges_builtin_pt") == "obfs4" - and "obfs4" in builtin_bridges - ): - for line in builtin_bridges["obfs4"]: - f.write(f"Bridge {line}\n") - elif ( - self.settings.get("bridges_builtin_pt") == "meek-azure" - and "meek" in builtin_bridges - ): - for line in builtin_bridges["meek"]: - # Meek bridge needs to be defined as "meek_lite", not "meek" - line = line.replace("meek", "meek_lite") - f.write(f"Bridge {line}\n") - elif ( - self.settings.get("bridges_builtin_pt") == "snowflake" - and "snowflake" in builtin_bridges - ): - for line in builtin_bridges["snowflake"]: - f.write(f"Bridge {line}\n") - else: - # Either this is a weird bridge type saved to settings (how?) - # or there were no bridges for this bridge type returned from - # the API. + use_torrc_bridge_templates = False + builtin_bridge_type = self.settings.get("bridges_builtin_pt") + # Use built-inbridges stored in settings, if they are there already. + # They are probably newer than that of our hardcoded copies. + if self.settings.get("bridges_builtin"): + try: + for line in self.settings.get("bridges_builtin")[ + builtin_bridge_type + ]: + if line.strip() != "": + f.write(f"Bridge {line}\n") self.common.log( "Onion", "connect", - "Error getting built-in bridges for this bridge type via Meek", + "Wrote in the built-in bridges from OnionShare settings", ) - raise TorErrorGettingBridges() + except KeyError: + # Somehow we had built-in bridges in our settings, but + # not for this bridge type. Fall back to using the hard- + # coded templates. + use_torrc_bridge_templates = True else: + use_torrc_bridge_templates = True + if use_torrc_bridge_templates: + if builtin_bridge_type == "obfs4": + with open( + self.common.get_resource_path( + "torrc_template-obfs4" + ) + ) as o: + f.write(o.read()) + elif builtin_bridge_type == "meek-azure": + with open( + self.common.get_resource_path( + "torrc_template-meek_lite_azure" + ) + ) as o: + f.write(o.read()) + elif builtin_bridge_type == "snowflake": + with open( + self.common.get_resource_path( + "torrc_template-snowflake" + ) + ) as o: + f.write(o.read()) self.common.log( "Onion", "connect", - "Error getting built-in bridges via Meek", + "Wrote in the built-in bridges from torrc templates", ) - raise TorErrorGettingBridges() - elif self.settings.get("bridges_type") == "moat": for line in self.settings.get("bridges_moat").split("\n"): if line.strip() != "": @@ -671,6 +657,14 @@ class Onion(object): # https://trac.torproject.org/projects/tor/ticket/28619 self.supports_v3_onions = self.tor_version >= Version("0.3.5.7") + # Now that we are connected to Tor, if we are using built-in bridges, + # update them with the latest copy available from the Tor API + if ( + self.settings.get("bridges_enabled") + and self.settings.get("bridges_type") == "built-in" + ): + self.update_builtin_bridges() + def is_authenticated(self): """ Returns True if the Tor connection is still working, or False otherwise. @@ -914,3 +908,96 @@ class Onion(object): return ("127.0.0.1", 9150) else: return (self.settings.get("socks_address"), self.settings.get("socks_port")) + + def update_builtin_bridges(self): + """ + Use the CensorshipCircumvention API to fetch the latest built-in bridges + and update them in settings. + """ + got_builtin_bridges = False + # Try obtaining bridges over Tor, if we're connected to it. + if self.is_authenticated: + self.common.log( + "Onion", + "update_builtin_bridges", + "Updating the built-in bridges. Trying over Tor first", + ) + (socks_address, socks_port) = self.get_tor_socks_port() + tor_proxies = { + "http": f"socks5h://{socks_address}:{socks_port}", + "https": f"socks5h://{socks_address}:{socks_port}", + } + # Request a bridge + r = requests.post( + "https://bridges.torproject.org/moat/circumvention/builtin", + headers={"Content-Type": "application/vnd.api+json"}, + proxies=tor_proxies, + ) + if r.status_code != 200: + self.common.log( + "Onion", + "update_builtin_bridges", + f"Trying over Tor failed: status_code={r.status_code}", + ) + + try: + builtin_bridges = r.json() + if "errors" in builtin_bridges: + self.common.log( + "Onion", + "update_builtin_bridges", + f"Trying over Tor failed: errors={builtin_bridges['errors']}", + ) + else: + got_builtin_bridges = builtin_bridges + except Exception as e: + self.common.log( + "Onion", + "update_builtin_bridges", + f"Hit exception when trying over Tor: {e}", + ) + + if not got_builtin_bridges: + # Fall back to using Meek, without Tor + self.common.log( + "Onion", + "update_builtin_bridges", + "Updating the built-in bridges. Trying via Meek (no Tor)", + ) + meek = Meek(self.common) + meek.start() + self.censorship_circumvention = CensorshipCircumvention(self.common, meek) + got_builtin_bridges = ( + self.censorship_circumvention.request_builtin_bridges() + ) + meek.cleanup() + + # If we got to this point, we have bridges + if got_builtin_bridges: + self.common.log( + "Onion", + "update_builtin_bridges", + f"Obtained bridges: {got_builtin_bridges}", + ) + if got_builtin_bridges["meek"]: + # Meek bridge needs to be defined as "meek_lite", not "meek", + # for it to work with obfs4proxy. + # We also refer to this bridge type as 'meek-azure' in our settings. + # So first, rename the key in the dict + got_builtin_bridges["meek-azure"] = got_builtin_bridges.pop("meek") + new_meek_bridges = [] + # Now replace the values. They also need the url/front params appended + for item in got_builtin_bridges["meek-azure"]: + newline = item.replace("meek", "meek_lite") + new_meek_bridges.append( + f"{newline} url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com" + ) + got_builtin_bridges["meek-azure"] = new_meek_bridges + # Save the new settings + self.settings.set("bridges_builtin", got_builtin_bridges) + self.settings.save() + else: + self.common.log( + "Onion", "update_builtin_bridges", "Error getting built-in bridges" + ) + return False diff --git a/cli/onionshare_cli/resources/torrc_template-meek_lite_azure b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure new file mode 100644 index 00000000..cbc5a9ee --- /dev/null +++ b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure @@ -0,0 +1,2 @@ +# Enable built-in meek-azure bridge +Bridge meek_lite 0.0.2.0:3 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com diff --git a/cli/onionshare_cli/resources/torrc_template-obfs4 b/cli/onionshare_cli/resources/torrc_template-obfs4 new file mode 100644 index 00000000..4ea90134 --- /dev/null +++ b/cli/onionshare_cli/resources/torrc_template-obfs4 @@ -0,0 +1,16 @@ +# Enable built-in obfs4-bridge +Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 +Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 +Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 +Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0 +Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 +Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 +Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 +Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 +Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 +Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 +Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0 +Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 +Bridge obfs4 144.217.20.138:80 FB70B257C162BF1038CA669D568D76F5B7F0BABB cert=vYIV5MgrghGQvZPIi1tJwnzorMgqgmlKaB77Y3Z9Q/v94wZBOAXkW+fdx4aSxLVnKO+xNw iat-mode=0 +Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 [2a0c:4d80:42:702::1]:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 diff --git a/cli/onionshare_cli/resources/torrc_template-snowflake b/cli/onionshare_cli/resources/torrc_template-snowflake new file mode 100644 index 00000000..20efe28c --- /dev/null +++ b/cli/onionshare_cli/resources/torrc_template-snowflake @@ -0,0 +1 @@ +Bridge snowflake 0.0.3.0:1 2B280B23E1107BB62ABFC40DDCC8824814F80A72 diff --git a/cli/onionshare_cli/settings.py b/cli/onionshare_cli/settings.py index c7d74a70..8a4a9939 100644 --- a/cli/onionshare_cli/settings.py +++ b/cli/onionshare_cli/settings.py @@ -110,6 +110,7 @@ class Settings(object): "bridges_builtin_pt": "obfs4", # "obfs4", "meek-azure", or "snowflake" "bridges_moat": "", "bridges_custom": "", + "bridges_builtin": {}, "persistent_tabs": [], "locale": None, # this gets defined in fill_in_defaults() "theme": 0, diff --git a/cli/tests/test_cli_settings.py b/cli/tests/test_cli_settings.py index 9513b013..a149b283 100644 --- a/cli/tests/test_cli_settings.py +++ b/cli/tests/test_cli_settings.py @@ -34,6 +34,7 @@ class TestSettings: "bridges_builtin_pt": "obfs4", "bridges_moat": "", "bridges_custom": "", + "bridges_builtin": {}, "persistent_tabs": [], "theme": 0, } diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py index 486a3578..2a0bae4d 100644 --- a/desktop/src/onionshare/gui_common.py +++ b/desktop/src/onionshare/gui_common.py @@ -38,7 +38,6 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, - TorErrorGettingBridges, ) @@ -508,7 +507,4 @@ class GuiCommon: return strings._("error_stealth_not_supported") elif type(e) is PortNotAvailable: return strings._("error_port_not_available") - elif type(e) is TorErrorGettingBridges: - return strings._("error_getting_bridges") - return None diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 73b35b2e..5a44cbb2 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -223,7 +223,6 @@ "error_port_not_available": "OnionShare port not available", "history_receive_read_message_button": "Read Message", "error_tor_protocol_error": "There was an error with Tor: {}", - "error_getting_bridges": "Could not obtain bridges from the Tor API", "moat_contact_label": "Contacting BridgeDB...", "moat_captcha_label": "Solve the CAPTCHA to request a bridge.", "moat_captcha_placeholder": "Enter the characters from the image", diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py index c5f24017..b02c6f21 100644 --- a/desktop/src/onionshare/threads.py +++ b/desktop/src/onionshare/threads.py @@ -37,7 +37,6 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, - TorErrorGettingBridges, ) from . import strings @@ -105,7 +104,6 @@ class OnionThread(QtCore.QThread): TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, - TorErrorGettingBridges, ) as e: message = self.mode.common.gui.get_translated_tor_error(e) self.error.emit(message) diff --git a/desktop/src/onionshare/tor_connection.py b/desktop/src/onionshare/tor_connection.py index 77218c1a..2cc599c4 100644 --- a/desktop/src/onionshare/tor_connection.py +++ b/desktop/src/onionshare/tor_connection.py @@ -36,7 +36,6 @@ from onionshare_cli.onion import ( TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, - TorErrorGettingBridges, ) from . import strings @@ -311,7 +310,6 @@ class TorConnectionThread(QtCore.QThread): TorTooOldEphemeral, TorTooOldStealth, PortNotAvailable, - TorErrorGettingBridges, ) as e: message = self.common.gui.get_translated_tor_error(e) self.common.log( -- cgit v1.2.3-54-g00ecf From ef1be43bd84c8495940f957ca019b553a0b40757 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Thu, 25 Nov 2021 16:52:57 +0100 Subject: Translated using Weblate (Turkish) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (33 of 33 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (60 of 60 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (33 of 33 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (60 of 60 strings) Translated using Weblate (Ukrainian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/uk/ Translated using Weblate (Japanese) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/ja/ Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ Translated using Weblate (Icelandic) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/is/ Translated using Weblate (Turkish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/tr/ Translated using Weblate (Spanish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/es/ Co-authored-by: Eric Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: Oğuz Ersen Co-authored-by: Sveinn í Felli Co-authored-by: Taro Tanaka Co-authored-by: Zuhualime Akoochimoya Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/uk/ Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Tor --- desktop/src/onionshare/resources/locale/es.json | 37 ++++++++++++++++---- desktop/src/onionshare/resources/locale/is.json | 37 ++++++++++++++++---- desktop/src/onionshare/resources/locale/ja.json | 37 ++++++++++++++++---- desktop/src/onionshare/resources/locale/tr.json | 37 ++++++++++++++++---- desktop/src/onionshare/resources/locale/uk.json | 37 ++++++++++++++++---- .../src/onionshare/resources/locale/zh_Hans.json | 37 ++++++++++++++++---- docs/source/locale/tr/LC_MESSAGES/features.po | 25 +++++++------- docs/source/locale/tr/LC_MESSAGES/tor.po | 40 +++++++++++++--------- docs/source/locale/uk/LC_MESSAGES/features.po | 30 ++++++++-------- docs/source/locale/uk/LC_MESSAGES/tor.po | 40 ++++++++++++++-------- 10 files changed, 263 insertions(+), 94 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json index ecf53ae6..ed4cab2b 100644 --- a/desktop/src/onionshare/resources/locale/es.json +++ b/desktop/src/onionshare/resources/locale/es.json @@ -41,8 +41,8 @@ "gui_settings_connection_type_bundled_option": "Usa la versión de Tor incorporada en OnionShare", "gui_settings_connection_type_automatic_option": "Intentar la configuración automática con el Navegador Tor", "gui_settings_connection_type_test_button": "Probar la conexión a Tor", - "gui_settings_tor_bridges": "Soporte para puentes Tor", - "gui_settings_tor_bridges_invalid": "No funciona ninguno de los puentes agregados.\nVuelve a comprobarlos o añade otros.", + "gui_settings_tor_bridges": "¿Conectar usando un puente Tor?", + "gui_settings_tor_bridges_invalid": "No funciona ninguno de los puentes que agregaste. Vuelve a comprobarlos o añade otros.", "settings_saved": "Ajustes guardados en {}", "give_this_url_receive": "Dele esta dirección al remitente:", "give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:", @@ -143,7 +143,7 @@ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportes conectables obfs4 incorporados (requiere obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportes conectables incorporados meek_lite (Azure)", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportes conectables meek_lite (Azure) incorporados (requiere obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Advertencia: Los puentes meek_lite son muy costosos de correr para el Proyecto Tor.

Utilízalos solo si no puedes conectarte a Tor directamente, a través de transportes obfs4 u otros puentes normales.", + "gui_settings_meek_lite_expensive_warning": "Advertencia: Los puentes meek-azure son muy costosos de mantener para el Proyecto Tor.

Utilízalos solo si no puedes conectarte a Tor directamente, a través de transportes obfs4 u otros puentes normales.", "gui_settings_tor_bridges_custom_radio_option": "Usar puentes personalizados", "gui_settings_tor_bridges_custom_label": "Puedes obtener puentes en https://bridges.torproject.org", "gui_settings_button_save": "Guardar", @@ -177,7 +177,7 @@ "gui_upload_finished": "Subido {}", "gui_download_in_progress": "Descarga iniciada {}", "gui_open_folder_error_nautilus": "No se puede abrir la carpeta porque nautilus no está disponible. El archivo está aquí: {}", - "gui_settings_language_label": "Idioma preferido", + "gui_settings_language_label": "Idioma", "gui_settings_language_changed_notice": "Reinicia OnionShare para que se aplique el idioma nuevo.", "gui_upload_finished_range": "Cargado {} a {}", "timeout_upload_still_running": "Esperando a que se complete la subida", @@ -265,7 +265,7 @@ "gui_new_tab_tooltip": "Abrir una pestaña nueva", "gui_new_tab": "Nueva pestaña", "gui_new_tab_share_description": "Elige los archivos de tu ordenador para enviarlos a otra persona. La persona o personas a las que quieras enviar los archivos tendrán que usar el Tor Browser para descargarlos de ti.", - "mode_settings_website_disable_csp_checkbox": "No enviar encabezado de Política de Seguridad de Contenido (permite que tu sitio web utilice recursos de terceros)", + "mode_settings_website_disable_csp_checkbox": "No enviar encabezado predeterminado de Política de Seguridad de Contenido (permite que tu sitio web utilice recursos de terceros)", "mode_settings_receive_data_dir_browse_button": "Navegar", "mode_settings_receive_data_dir_label": "Guardar archivos en", "mode_settings_share_autostop_sharing_checkbox": "Dejar de compartir después de haber enviado archivos (desmarcar para permitir la descarga de archivos individuales)", @@ -321,5 +321,30 @@ "gui_settings_theme_dark": "Oscuro", "gui_settings_theme_light": "Claro", "gui_settings_theme_auto": "Automático", - "gui_url_instructions_public_mode": "Envíe la siguiente dirección de OnionShare:" + "gui_url_instructions_public_mode": "Envíe la siguiente dirección de OnionShare:", + "gui_dragdrop_sandbox_flatpak": "Para hacer que la zona de prueba de Flatpak sea más segura, arrastrar y colocar no es soportado. En vez, usa los botones Agregar Archivos y Agregar Carpeta para navegar entre archivos.", + "gui_tor_settings_window_title": "Configuraciones de Tor", + "gui_settings_controller_extras_label": "Configuraciones de Tor", + "gui_settings_tor_bridges_label": "Los puentes te ayudan a acceder a la red Tor en lugares donde Tor está bloqueado. Dependiendo de dónde estés, un puente podría funcionar mejor que otro.", + "gui_settings_bridge_use_checkbox": "Usar un puente", + "gui_settings_bridge_radio_builtin": "Seleccionar un puente incorporado", + "gui_settings_bridge_none_radio_option": "No usar un puente", + "gui_settings_bridge_moat_radio_option": "Solicita un puente desde torproject.org", + "gui_settings_bridge_moat_button": "Solicitar un Nuevo Puente", + "gui_settings_bridge_custom_radio_option": "Provee un puente del que te enteraste a través de una fuente confiable", + "gui_settings_bridge_custom_placeholder": "tipea dirección:puerto (una por línea)", + "gui_settings_moat_bridges_invalid": "Aún no has solicitado un puente desde torproject.org.", + "gui_settings_stop_active_tabs_label": "Estos son servicios ejecutándose en algunas de tus pestañas.\nDebes detenerlos a todos para cambiar tus configuraciones de Tor.", + "gui_settings_version_label": "Estás usando OnionShare {}", + "gui_settings_help_label": "¿Necesitas ayuda? Mira docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Enviar un encabezado personaizado de Política de Seguridad de Contenido", + "moat_contact_label": "Contactando BridgeDB...", + "moat_captcha_label": "Resuelve el CAPTCHA para solicitar un puente.", + "moat_captcha_placeholder": "Ingresa los caracteres en la imagen", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recargar", + "moat_bridgedb_error": "Error contactando BridgeDB.", + "moat_captcha_error": "La solución no es correcta. Por favor, inténtalo de nuevo.", + "moat_solution_empty_error": "Debes ingresar los caracteres en la imagen", + "mode_tor_not_connected_label": "OnionShare no está conectado a la red Tor" } diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json index 8ae1b696..a1c2b9af 100644 --- a/desktop/src/onionshare/resources/locale/is.json +++ b/desktop/src/onionshare/resources/locale/is.json @@ -86,16 +86,16 @@ "gui_settings_authenticate_no_auth_option": "Engin auðkenning eða auðkenning með vefköku", "gui_settings_authenticate_password_option": "Lykilorð", "gui_settings_password_label": "Lykilorð", - "gui_settings_tor_bridges": "Stuðningur við Tor-brýr", + "gui_settings_tor_bridges": "Tengjast með Tor-brú?", "gui_settings_tor_bridges_no_bridges_radio_option": "Ekki nota brýr", "gui_settings_tor_bridges_obfs4_radio_option": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aðvörun: Að reka meek_lite brýrnar er kostnaðarsamt fyrir Tor-verkefnið.

Ekki nota þær nema þér takist ekki að tengjast beint við Tor, með obfs4 tengileið, eða öðrum venjulegum brúm.", + "gui_settings_meek_lite_expensive_warning": "Aðvörun: Að reka meek_azure brýrnar er kostnaðarsamt fyrir Tor-verkefnið.

Ekki nota þær nema þér takist ekki að tengjast beint við Tor, með obfs4 tengileið, eða öðrum venjulegum brúm.", "gui_settings_tor_bridges_custom_radio_option": "Nota sérsniðnar brýr", "gui_settings_tor_bridges_custom_label": "Þú getur náð í brýr frá https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka.\nYfirfarðu þær eða bættu öðrum við.", + "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka. Yfirfarðu þær eða bættu öðrum við.", "gui_settings_button_save": "Vista", "gui_settings_button_cancel": "Hætta við", "gui_settings_button_help": "Hjálp", @@ -173,7 +173,7 @@ "gui_upload_finished": "", "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "Get ekki opnað möppu því nautilus er ekki til taks. Skráin er hér: {}", - "gui_settings_language_label": "Umbeðið tungumál", + "gui_settings_language_label": "Tungumál", "gui_settings_language_changed_notice": "Þú þarft að endurræsa OnionShare til að nýtt tungumál taki gildi.", "gui_add_files": "Bæta við skrám", "gui_add_folder": "Bæta við möppu", @@ -234,7 +234,7 @@ "gui_close_tab_warning_persistent_description": "Þessi flipi er viðvarandi. Ef þú lokar honum muntu tapa onion-vistfanginu sem hann er að nota. Ertu viss að þú viljir loka honum?", "gui_quit_warning_description": "Deiling er virk í sumum flipanna þinna. Ef þú hættir núna, lokast allir fliparnir. Ertu viss um að þú viljir hætta?", "mode_settings_share_autostop_sharing_checkbox": "Hætta að deila eftir að skrár hafa verið sendar (taka merkið úr reitnum til að leyfa niðurhal á stökum skrám)", - "mode_settings_website_disable_csp_checkbox": "Gera haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan (gerir vefsvæðinu þínu kleift að nota tilföng frá utanaðkomandi aðilum)", + "mode_settings_website_disable_csp_checkbox": "Gera sjálfgefinn haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan (gerir vefsvæðinu þínu kleift að nota tilföng frá utanaðkomandi aðilum)", "gui_close_tab_warning_share_description": "Þú ert að senda skrár. Ertu viss um að þú viljir loka þessum flipa?", "mode_settings_legacy_checkbox": "Nota eldri gerð vistfangs (onion-þjónusta af útgáfu 2, ekki mælt með því)", "gui_close_tab_warning_website_description": "Þú ert að hýsa vefsvæði. Ertu viss um að þú viljir loka þessum flipa?", @@ -309,5 +309,30 @@ "gui_qr_label_url_title": "OnionShare-vistfang", "gui_copied_client_auth": "Einkalykill afritaður á klippispjald", "gui_copied_client_auth_title": "Afritaði einkalykil", - "gui_copy_client_auth": "Afrita einkalykil" + "gui_copy_client_auth": "Afrita einkalykil", + "gui_tor_settings_window_title": "Stillingar Tor", + "gui_settings_controller_extras_label": "Stillingar Tor", + "gui_settings_bridge_use_checkbox": "Nota brú", + "gui_settings_bridge_radio_builtin": "Velja innbyggða brú", + "gui_settings_bridge_none_radio_option": "Ekki nota brú", + "gui_settings_tor_bridges_label": "Brýr hjálpa þér við að tengjast Tor-netinu þar sem lokað er á Tor. Það fer eftir því hvar þú ert hvaða brýr virka best, ein brú getur virkað betur en aðrar.", + "mode_settings_website_custom_csp_checkbox": "Senda sérsniðinn haus fyrir öryggisstefnu efnis (Content Security Policy)", + "moat_captcha_submit": "Senda inn", + "gui_settings_bridge_moat_radio_option": "Biðja um brú frá torproject.org", + "gui_settings_bridge_moat_button": "Biðja um nýja brú", + "gui_settings_bridge_custom_radio_option": "Settu inn brúna sem þú heyrðir um hjá áreiðanlegum aðila", + "gui_settings_bridge_custom_placeholder": "skrifaðu vistfang:gátt (eitt á hverja línu)", + "gui_settings_moat_bridges_invalid": "Þú hefur ekki ennþá beðið um brú frá torproject.org.", + "gui_settings_stop_active_tabs_label": "Það eru þjónustur að keyra í sumum flipanna þinna.\nÞú þarft að stöðva allar þjónustur til að breyta Tor-stillingunum þínum.", + "gui_settings_version_label": "Þú ert að nota OnionShare {}", + "gui_settings_help_label": "Þarftu aðstoð? Skoðaðu docs.onionshare.org", + "moat_captcha_error": "Þetta er ekki rétt, reyndu aftur.", + "moat_contact_label": "Hef samband við brúagagnagrunn...", + "moat_captcha_label": "Leystu CAPTCHA-þraut til að biðja um brýr.", + "moat_captcha_placeholder": "Settu inn stafina úr myndinni", + "moat_solution_empty_error": "Þú verður að setja inn stafina úr myndinni", + "moat_captcha_reload": "Endurhlaða", + "moat_bridgedb_error": "Villa við að tengjast brúagagnagrunni.", + "mode_tor_not_connected_label": "OnionShare er ekki tengt við Tor-netið", + "gui_dragdrop_sandbox_flatpak": "Til að auka öryggi Flatpak sandkassans, er draga/sleppa ekki stutt. Notaðu frekar hnappana til að bæta við skrám og möppum." } diff --git a/desktop/src/onionshare/resources/locale/ja.json b/desktop/src/onionshare/resources/locale/ja.json index e842d026..5290ea63 100644 --- a/desktop/src/onionshare/resources/locale/ja.json +++ b/desktop/src/onionshare/resources/locale/ja.json @@ -89,16 +89,16 @@ "gui_settings_authenticate_no_auth_option": "認証なし、それともクッキー認証", "gui_settings_authenticate_password_option": "パスワード", "gui_settings_password_label": "パスワード", - "gui_settings_tor_bridges": "Torブリッジサポート", + "gui_settings_tor_bridges": "Torブリッジを利用して接続しますか?", "gui_settings_tor_bridges_no_bridges_radio_option": "ブリッジを使用しない", "gui_settings_tor_bridges_obfs4_radio_option": "組み込みのobs4 pluggable transportを使用する", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "組み込みのobs4 pluggable transportを使用する(obsf4proxy必要)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "組み込みのmeek_lite (Azure) pluggable transportを使用する", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "組み込みのmeek_lite (Azure) pluggable transportを使用する(obsf4proxy必要)", - "gui_settings_meek_lite_expensive_warning": "警告:meek_liteブリッジはTor Projectにとって維持費がかさむ

直接にTorと接続できない場合、あるいはobsf4ブリッジや他のブリッジが使用できない場合のみに使って下さい。", + "gui_settings_meek_lite_expensive_warning": "警告:meek-azureブリッジはTor Projectにとって維持費がかさむ

直接にTorと接続できない場合、あるいはobsf4ブリッジや他のブリッジが使用できない場合のみに使って下さい。", "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_tor_bridges_invalid": "全ての追加したブリッジは機能しませんでした。再確認して、あるいは他のを追加して下さい。", "gui_settings_button_save": "保存", "gui_settings_button_cancel": "キャンセル", "gui_settings_button_help": "ヘルプ", @@ -177,7 +177,7 @@ "gui_upload_finished": "{}をアップロードしました", "gui_download_in_progress": "ダウンロード開始しました {}", "gui_open_folder_error_nautilus": "nautilusを利用できないためフォルダーを開けません。ファイルはここに保存されました: {}", - "gui_settings_language_label": "優先言語", + "gui_settings_language_label": "言語", "gui_settings_language_changed_notice": "新しい言語設定を適用するにはOnionShareを再起動して下さい。", "error_cannot_create_data_dir": "OnionShareのデータフォルダーを作成できませんでした: {}", "receive_mode_data_dir": "受信されるファイルをこのフォルダーにあります: {}", @@ -228,7 +228,7 @@ "history_requests_tooltip": "{} ウェブリクエスト", "gui_settings_csp_header_disabled_option": "コンテンツセキュリティポリシーヘッダーを無効にする", "gui_settings_website_label": "ウェブサイト設定", - "mode_settings_website_disable_csp_checkbox": "コンテンツセキュリティポリシーのヘッダーを送らない(ウェブサイトにはサードパーティーのリソースを可能にします)", + "mode_settings_website_disable_csp_checkbox": "デフォルトのコンテンツセキュリティポリシーヘッダーを送らない(ウェブサイトにはサードパーティーのリソースを可能にします)", "mode_settings_receive_data_dir_browse_button": "閲覧", "mode_settings_receive_data_dir_label": "保存するファイルの位置", "mode_settings_share_autostop_sharing_checkbox": "ファイル送信が終了したら共有を停止(個別ファイルのダウンロードを許可するにはチェックマークを消す)", @@ -305,5 +305,30 @@ "gui_qr_label_url_title": "OnionShareアドレス", "gui_copied_client_auth": "秘密鍵をクリップボードにコピーしました", "gui_copied_client_auth_title": "秘密鍵をコピーしました", - "gui_copy_client_auth": "秘密鍵をコピーする" + "gui_copy_client_auth": "秘密鍵をコピーする", + "gui_tor_settings_window_title": "Tor設定", + "gui_settings_controller_extras_label": "Tor設定", + "gui_settings_bridge_use_checkbox": "ブリッジを利用する", + "gui_settings_bridge_radio_builtin": "組み込みブリッジを選択", + "gui_settings_bridge_moat_radio_option": "torproject.orgからブリッジを要求する", + "gui_settings_bridge_custom_radio_option": "信頼できる筋からもらったブリッジを提供する", + "gui_settings_bridge_custom_placeholder": "「アドレス:ポート番号」を入力する(行内ごと1つ)", + "gui_settings_moat_bridges_invalid": "まだtorproject.orgからブリッジを要求していません。", + "gui_settings_version_label": "OnionShare {}を使っています", + "gui_settings_help_label": "サポートが必要ですか? docs.onionshare.orgを訪れて下さい", + "mode_settings_website_custom_csp_checkbox": "カスタムなコンテンツセキュリティポリシーヘッダーを送る", + "moat_contact_label": "BridgeDBと接続中…", + "moat_captcha_label": "ブリッジを要求するのにCAPTCHAを解決して下さい。", + "moat_captcha_placeholder": "イメージにある文字を入力して下さい", + "moat_captcha_submit": "提出する", + "moat_captcha_reload": "リロード", + "moat_bridgedb_error": "BridgeDB接続にエラーが生じました。", + "moat_captcha_error": "間違った解答です。もう一度試して下さい。", + "moat_solution_empty_error": "イメージからの文字を入力しなければなりません", + "mode_tor_not_connected_label": "OnionShareはTorネットワークと接続されていません", + "gui_dragdrop_sandbox_flatpak": "Flatpakサンドボックスの安全性を確保するため、ドラッグ・アンド・ドロップは無効されました。ファイルを探すのに「ファイルを追加」、「フォルダを追加」ボタンを使って下さい。", + "gui_settings_tor_bridges_label": "Torがブロックされる場合、ブリッジはTorネットワークにアクセスするのに役立ちます。一番効果的なブリッジは場所によります。", + "gui_settings_bridge_none_radio_option": "ブリッジを利用しない", + "gui_settings_bridge_moat_button": "新しいブリッジを要求する", + "gui_settings_stop_active_tabs_label": "タブに実行しているサービスはまだあります。\nTor設定を変更するには、全てのサービスを停止する必要があります。" } diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json index ba38f7f4..dc792c27 100644 --- a/desktop/src/onionshare/resources/locale/tr.json +++ b/desktop/src/onionshare/resources/locale/tr.json @@ -75,16 +75,16 @@ "gui_settings_authenticate_no_auth_option": "Kimlik doğrulama yok, veya çerez doğrulaması", "gui_settings_authenticate_password_option": "Parola", "gui_settings_password_label": "Parola", - "gui_settings_tor_bridges": "Tor köprü desteği", + "gui_settings_tor_bridges": "Tor köprüsü kullanarak bağlanılsın mı?", "gui_settings_tor_bridges_no_bridges_radio_option": "Köprüler kullanılmasın", "gui_settings_tor_bridges_obfs4_radio_option": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", - "gui_settings_meek_lite_expensive_warning": "Uyarı: meek_lit köprülerini çalıştırmak Tor Projesine pahalıya patlıyor.

Bu köprüleri yalnız Tor ile doğrudan ya da obfs4 ve diğer normal köprüler üzerinden bağlantı kuramıyorsanız kullanın.", + "gui_settings_meek_lite_expensive_warning": "Uyarı: meek-azure köprülerini çalıştırmak Tor Projesine pahalıya patlıyor.

Bu köprüleri yalnızca Tor ile doğrudan veya obfs4 ve diğer normal köprüler üzerinden bağlantı kuramıyorsanız kullanın.", "gui_settings_tor_bridges_custom_radio_option": "Özel köprüler kullanılsın", "gui_settings_tor_bridges_custom_label": "Köprüleri https://bridges.torproject.org adresinden alabilirsiniz", - "gui_settings_tor_bridges_invalid": "Eklediğiniz köprülerin hiçbiri çalışmıyor.\nİki kez denetleyin ya da başka köprüler ekleyin.", + "gui_settings_tor_bridges_invalid": "Eklediğiniz köprülerin hiçbiri çalışmıyor. İki kez denetleyin veya başka köprüler ekleyin.", "gui_settings_button_save": "Kaydet", "gui_settings_button_cancel": "İptal", "gui_settings_button_help": "Yardım", @@ -149,7 +149,7 @@ "gui_settings_data_dir_browse_button": "Göz at", "gui_settings_public_mode_checkbox": "Herkese açık kip", "gui_open_folder_error_nautilus": "Nautilus kullanılamadığından klasör açılamıyor. Dosya burada: {}", - "gui_settings_language_label": "Arayüz dili", + "gui_settings_language_label": "Dil", "gui_settings_language_changed_notice": "Dil değişikliğinin uygulanabilmesi için OnionShare uygulamasını yeniden başlatın.", "systray_menu_exit": "Çık", "systray_page_loaded_title": "Sayfa yüklendi", @@ -199,7 +199,7 @@ "history_requests_tooltip": "{} web isteği", "gui_settings_csp_header_disabled_option": "İçerik Güvenlik Politikası başlığını devre dışı bırak", "gui_settings_website_label": "Website ayarları", - "mode_settings_website_disable_csp_checkbox": "İçerik güvenliği ilkesi başlığı gönderme (web sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)", + "mode_settings_website_disable_csp_checkbox": "Öntanımlı İçerik Güvenliği İlkesi başlığı gönderme (web sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)", "mode_settings_receive_data_dir_browse_button": "Göz at", "mode_settings_receive_data_dir_label": "Dosyaları şuraya kaydet", "mode_settings_share_autostop_sharing_checkbox": "Dosyalar gönderildikten sonra paylaşım durdurulsun (dosyaların tek tek indirilmesine izin vermek için işareti kaldırın)", @@ -279,5 +279,30 @@ "gui_qr_label_url_title": "OnionShare adresi", "gui_copied_client_auth": "Kişisel anahtar panoya kopyalandı", "gui_copied_client_auth_title": "Kişisel anahtar kopyalandı", - "gui_copy_client_auth": "Kişisel anahtarı kopyala" + "gui_copy_client_auth": "Kişisel anahtarı kopyala", + "gui_settings_bridge_moat_radio_option": "torproject.org'dan bir köprü talep et", + "gui_settings_bridge_moat_button": "Yeni Bir Köprü Talep Et", + "gui_settings_bridge_custom_placeholder": "adres:bağlantınoktası yazın (satır başına bir tane)", + "gui_settings_moat_bridges_invalid": "Henüz torproject.org'dan bir köprü talep etmediniz.", + "moat_contact_label": "BridgeDB ile iletişime geçiliyor...", + "moat_captcha_error": "Çözüm doğru değil. Lütfen tekrar deneyin.", + "moat_solution_empty_error": "Resimdeki karakterleri girmelisiniz", + "mode_tor_not_connected_label": "OnionShare Tor ağına bağlı değil", + "gui_settings_tor_bridges_label": "Köprüler, Tor'un engellendiği yerlerde Tor Ağına erişmenize yardımcı olur. Nerede olduğunuza bağlı olarak, bir köprü diğerinden daha iyi çalışabilir.", + "gui_settings_bridge_use_checkbox": "Köprü kullan", + "mode_settings_website_custom_csp_checkbox": "Özel bir İçerik Güvenliği İlkesi başlığı gönder", + "gui_dragdrop_sandbox_flatpak": "Flatpak korumalı alanını daha güvenli hale getirmek için sürükle ve bırak desteklenmemektedir. Bunun yerine dosyalara göz atmak için Dosya Ekle ve Klasör Ekle düğmelerini kullanın.", + "gui_tor_settings_window_title": "Tor Ayarları", + "gui_settings_controller_extras_label": "Tor ayarları", + "gui_settings_bridge_none_radio_option": "Köprü kullanma", + "gui_settings_bridge_radio_builtin": "Yerleşik bir köprü seç", + "gui_settings_version_label": "OnionShare {} kullanıyorsunuz", + "gui_settings_bridge_custom_radio_option": "Güvenilir bir kaynaktan öğrendiğiniz bir köprü belirtin", + "gui_settings_stop_active_tabs_label": "Bazı sekmelerinizde çalışan hizmetler var.\nTor ayarlarınızı değiştirmek için tüm hizmetleri durdurmalısınız.", + "gui_settings_help_label": "Yardıma mı ihtiyacınız var? docs.onionshare.org adresine bakın", + "moat_captcha_submit": "Gönder", + "moat_captcha_reload": "Yeniden yükle", + "moat_captcha_label": "Bir köprü talep etmek için CAPTCHA'yı çözün.", + "moat_captcha_placeholder": "Resimdeki karakterleri girin", + "moat_bridgedb_error": "BridgeDB ile bağlantı kurulurken hata oluştu." } diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json index 0d0f78b6..74a380eb 100644 --- a/desktop/src/onionshare/resources/locale/uk.json +++ b/desktop/src/onionshare/resources/locale/uk.json @@ -59,16 +59,16 @@ "gui_settings_authenticate_no_auth_option": "Без автентифікації або автентифікація через cookie", "gui_settings_authenticate_password_option": "Пароль", "gui_settings_password_label": "Пароль", - "gui_settings_tor_bridges": "Підтримка мосту Tor", + "gui_settings_tor_bridges": "Під'єднатися за допомогою мосту Tor?", "gui_settings_tor_bridges_no_bridges_radio_option": "Не застосовувати мости", "gui_settings_tor_bridges_obfs4_radio_option": "Застосовувати вбудовані obfs4 під'єднувані транспорти", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Застосовувати вбудовані obfs4 під'єднувані транспорти (вимагає obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти (вимагає obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek_lite заважкі для Tor Project.

Користуйтеся ними лише якщо не вдається з'єднатися з Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.", + "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek-azure заважкі для роботи Tor Project.

Користуйтеся ними лише якщо не вдається з'єднатися з Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.", "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_tor_bridges_invalid": "Жоден з доданих мостів не працює. Ще раз перевірте їх або додайте інші.", "gui_settings_button_save": "Зберегти", "gui_settings_button_cancel": "Скасувати", "gui_settings_button_help": "Допомога", @@ -134,7 +134,7 @@ "gui_settings_data_dir_browse_button": "Огляд", "gui_settings_public_mode_checkbox": "Загальнодоступний режим", "gui_open_folder_error_nautilus": "Неможливо відкрити теку бо nautilus недоступний. Файл розташовано: {}", - "gui_settings_language_label": "Бажана мова", + "gui_settings_language_label": "Мова", "gui_settings_language_changed_notice": "Перезапустіть OnionShare для зміни мови.", "systray_menu_exit": "Вийти", "systray_page_loaded_title": "Сторінку Завантажено", @@ -178,7 +178,7 @@ "gui_close_tab_warning_website_description": "Ви маєте активний розміщений вебсайт. Ви впевнені, що хочете закрити цю вкладку?", "gui_new_tab_website_description": "Розмістіть статичний onion HTML-вебсайт на вашому комп'ютері.", "mode_settings_receive_data_dir_browse_button": "Вибрати", - "mode_settings_website_disable_csp_checkbox": "Не надсилати заголовок політики безпеки вмісту (дозволяє вебсайту застосовувати сторонні ресурси)", + "mode_settings_website_disable_csp_checkbox": "Не надсилати типовий заголовок Content Security Policy (дозволяє вебсайту використовувати сторонні ресурси)", "mode_settings_receive_data_dir_label": "Зберігати файли до", "mode_settings_share_autostop_sharing_checkbox": "Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити завантаження окремих файлів)", "mode_settings_legacy_checkbox": "Користуватися застарілою адресою (служба onion v2, не рекомендовано)", @@ -255,5 +255,30 @@ "gui_website_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може відвідати ваш вебсайт через Tor Browser: ", "gui_receive_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може вивантажити файли на ваш комп'ютер через Tor Browser: ", "gui_share_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може завантажити ваші файли, через Tor Browser: ", - "gui_server_doesnt_support_stealth": "На жаль, ця версія Tor не підтримує стелс-режим (автентифікацію клієнта). Спробуйте за допомогою новішої версії Tor або скористайтеся загальнодоступним режимом, якщо він не повинен бути приватним." + "gui_server_doesnt_support_stealth": "На жаль, ця версія Tor не підтримує стелс-режим (автентифікацію клієнта). Спробуйте за допомогою новішої версії Tor або скористайтеся загальнодоступним режимом, якщо він не повинен бути приватним.", + "gui_tor_settings_window_title": "Налаштування Tor", + "gui_settings_bridge_radio_builtin": "Вибрати вбудований міст", + "gui_settings_bridge_none_radio_option": "Не використовувати міст", + "gui_settings_stop_active_tabs_label": "На деяких ваших вкладках працюють служби.\nВи повинні зупинити всі служби, щоб змінити налаштування Tor.", + "moat_captcha_label": "Розв'яжіть CAPTCHA для запиту мостів.", + "moat_captcha_error": "Неправильний розв'язок. Повторіть спробу.", + "gui_settings_bridge_use_checkbox": "Використовувати міст", + "gui_settings_bridge_moat_radio_option": "Запит мосту на torproject.org", + "gui_dragdrop_sandbox_flatpak": "Щоб пісочниця Flatpak була безпечнішою, перетягування не підтримується. Натомість скористайтеся кнопками Додати файли та Додати теку, щоб знайти файли.", + "gui_settings_controller_extras_label": "Налаштування Tor", + "gui_settings_tor_bridges_label": "Мости допомагають отримати доступ до мережі Tor у місцях, де Tor заблоковано. Залежно від того, де ви знаходитесь, один міст може працювати краще, ніж інший.", + "gui_settings_bridge_moat_button": "Запит нового мосту", + "gui_settings_bridge_custom_radio_option": "Укажіть міст, про який ви дізналися з надійного джерела", + "gui_settings_bridge_custom_placeholder": "введіть адреса:порт (по одному на рядок)", + "gui_settings_version_label": "Ви використовуєте OnionShare {}", + "gui_settings_help_label": "Потрібна допомога? Перегляньте docs.onionshare.org", + "gui_settings_moat_bridges_invalid": "Ви ще не запитували міст на torproject.org.", + "moat_captcha_placeholder": "Введіть символи із зображення", + "moat_captcha_submit": "Надіслати", + "mode_settings_website_custom_csp_checkbox": "Надсилати власний заголовок Content Security Policy", + "moat_contact_label": "Зв'язок з BridgeDB...", + "moat_captcha_reload": "Перезавантажити", + "mode_tor_not_connected_label": "OnionShare не під'єднано до мережі Tor", + "moat_bridgedb_error": "Помилка з’єднання з BridgeDB.", + "moat_solution_empty_error": "Ви повинні ввести символи з зображення" } diff --git a/desktop/src/onionshare/resources/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json index 5a036ef6..749bb9a0 100644 --- a/desktop/src/onionshare/resources/locale/zh_Hans.json +++ b/desktop/src/onionshare/resources/locale/zh_Hans.json @@ -86,16 +86,16 @@ "gui_settings_authenticate_no_auth_option": "无须认证,或者使用的是 cookie 认证", "gui_settings_authenticate_password_option": "密码", "gui_settings_password_label": "密码", - "gui_settings_tor_bridges": "Tor 网桥支持", + "gui_settings_tor_bridges": "使用 Tor 网桥连接?", "gui_settings_tor_bridges_no_bridges_radio_option": "不使用网桥", "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": "警告:meek_lite 网桥会对 Tor 的运行产生极大负担。

仅在无法直接连接至 Tor,通过 obfs4 transports 连接,或通过其他网桥连接时使用。", + "gui_settings_meek_lite_expensive_warning": "警告:meek-azure 网桥会对 Tor 的运行产生极大负担。

仅在无法直接连接至 Tor,通过 obfs4 transports 连接,或通过其他网桥连接时使用。", "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_tor_bridges_invalid": "您所添加的网桥均无法工作。请再次检查或添加其它网桥。", "gui_settings_button_save": "保存", "gui_settings_button_cancel": "取消", "gui_settings_button_help": "帮助", @@ -174,7 +174,7 @@ "gui_upload_finished": "", "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "无法打开文件夹,因为 nautilus 不可用。文件在这里:{}", - "gui_settings_language_label": "首选语言", + "gui_settings_language_label": "语言", "gui_settings_language_changed_notice": "重启 OnionShare 以使应用新的语言。", "gui_add_files": "添加文件", "gui_add_folder": "添加文件夹", @@ -228,7 +228,7 @@ "history_requests_tooltip": "{}个网络请求", "gui_settings_csp_header_disabled_option": "禁用内容安全策略标题", "gui_settings_website_label": "网站设置", - "mode_settings_website_disable_csp_checkbox": "不发送内容安全政策(Content Security Policy) 头(允许您的网站使用第三方资源)", + "mode_settings_website_disable_csp_checkbox": "不发送默认的内容安全政策(Content Security Policy) 头(允许您的网站使用第三方资源)", "mode_settings_receive_data_dir_browse_button": "浏览", "mode_settings_receive_data_dir_label": "保存文件到", "mode_settings_share_autostop_sharing_checkbox": "文件传送完后停止共享(取消选中可允许下载单个文件)", @@ -307,5 +307,30 @@ "gui_qr_label_url_title": "OnionShare 地址", "gui_copied_client_auth": "已复制私钥到剪贴板", "gui_copied_client_auth_title": "已复制私钥", - "gui_copy_client_auth": "复制私钥" + "gui_copy_client_auth": "复制私钥", + "gui_settings_bridge_use_checkbox": "使用网桥", + "gui_settings_bridge_radio_builtin": "选择内置网桥", + "gui_settings_bridge_none_radio_option": "不使用网桥", + "gui_settings_bridge_moat_button": "请求新网桥", + "gui_settings_bridge_custom_placeholder": "输入地址:端口(每行一个)", + "gui_settings_help_label": "需要帮助?参见 docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "发送自定义 CSP 标头", + "moat_bridgedb_error": "联系 BridgeDB 时出错。", + "moat_solution_empty_error": "你必须输入图像中的字符", + "mode_tor_not_connected_label": "OnionShare 没有连接到 Tor 网络", + "gui_dragdrop_sandbox_flatpak": "为了使 Flatpak 沙箱更安全,不支持拖放操作。请使用“添加文件”和“添加文件夹”按钮来浏览文件。", + "gui_tor_settings_window_title": "Tor 设置", + "gui_settings_controller_extras_label": "Tor 设置", + "gui_settings_tor_bridges_label": "网桥帮助你在 Tor 被封锁的地方访问 Tor 网络。取决于你所在地方,一个网桥可能比另一个网桥更好用。", + "gui_settings_bridge_custom_radio_option": "提供一座你从可信来源处了解到的网桥", + "gui_settings_bridge_moat_radio_option": "从 torproject.org 请求网桥", + "moat_captcha_error": "解答不正确。请再试一次。", + "gui_settings_moat_bridges_invalid": "你尚未从 torproject.org 请求网桥。", + "gui_settings_stop_active_tabs_label": "一些选项卡中有服务正在运行。\n你必须停止所有服务才能更改 Tor 设置。", + "moat_contact_label": "正联系 BridgeDB...", + "gui_settings_version_label": "你正在使用 OnionShare {}", + "moat_captcha_label": "解决 CAPTCHA 来请求网桥。", + "moat_captcha_reload": "重新加载", + "moat_captcha_placeholder": "输入图片中字符", + "moat_captcha_submit": "提交" } diff --git a/docs/source/locale/tr/LC_MESSAGES/features.po b/docs/source/locale/tr/LC_MESSAGES/features.po index 4b6dd55c..430183a2 100644 --- a/docs/source/locale/tr/LC_MESSAGES/features.po +++ b/docs/source/locale/tr/LC_MESSAGES/features.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-10-02 12:36+0000\n" -"Last-Translator: Kaya Zeren \n" -"Language: tr\n" +"PO-Revision-Date: 2021-11-25 15:52+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -411,16 +412,13 @@ msgstr "" "web sayfasında üçüncü taraf içeriğinin yüklenmesini engeller." #: ../../source/features.rst:121 -#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " "JavaScript libraries from CDNs, you have two options:" msgstr "" -"İçerik aktarım ağlarından (CDN) varlıklar veya JavaScript kitaplıkları " -"gibi üçüncü taraf web sitelerinden içerik yüklemek istiyorsanız, hizmeti " -"başlatmadan önce \"İçerik güvenliği ilkesi başlığı gönderme (web " -"sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)\" seçeneğini" -" işaretleyin." +"İçerik aktarım ağlarından (CDN) varlıklar veya JavaScript kütüphaneleri gibi " +"üçüncü taraf web sitelerinden içerik yüklemek istiyorsanız, iki seçeneğiniz " +"vardır:" #: ../../source/features.rst:123 msgid "" @@ -428,10 +426,14 @@ msgid "" "\"Don't send Content Security Policy header (allows your website to use " "third-party resources)\" box before starting the service." msgstr "" +"Hizmeti başlatmadan önce \"İçerik güvenliği ilkesi başlığı gönderme (web " +"sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)\" kutusunu " +"işaretleyerek bir İçerik Güvenliği ilkesi başlığı göndermeyi devre dışı " +"bırakabilirsiniz." #: ../../source/features.rst:124 msgid "You can send a custom Content Security Policy header." -msgstr "" +msgstr "Özel bir İçerik Güvenliği İlkesi başlığı gönderebilirsiniz." #: ../../source/features.rst:127 msgid "Tips for running a website service" @@ -1113,4 +1115,3 @@ msgstr "" #~ " OnionShare sohbet odaları mesajları hiçbir" #~ " yerde depolamadığından sorun en aza " #~ "indirilir." - diff --git a/docs/source/locale/tr/LC_MESSAGES/tor.po b/docs/source/locale/tr/LC_MESSAGES/tor.po index ef300b56..2d283c08 100644 --- a/docs/source/locale/tr/LC_MESSAGES/tor.po +++ b/docs/source/locale/tr/LC_MESSAGES/tor.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-10-02 12:36+0000\n" -"Last-Translator: Kaya Zeren \n" -"Language: tr\n" +"PO-Revision-Date: 2021-11-25 15:52+0000\n" +"Last-Translator: Oğuz Ersen \n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -23,18 +24,16 @@ msgid "Connecting to Tor" msgstr "Tor Bağlantısı Kurmak" #: ../../source/tor.rst:4 -#, fuzzy msgid "" "Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" " the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" -"OnionShare penceresinin sağ alt kısmındaki \"⚙\" simgesine tıklayarak " -"ayarlara gidin ve OnionShare ile Tor bağlantısı kurmanın bir yolunu " -"seçin." +"OnionShare penceresinin sağ alt kısmındaki Tor onion simgesine tıklayarak " +"ayarlara gidin ve OnionShare ile Tor bağlantısı kurmanın bir yolunu seçin." #: ../../source/tor.rst:9 msgid "Use the Tor version built into OnionShare" -msgstr "" +msgstr "OnionShare üzerindeki Tor sürümü kullanılsın" #: ../../source/tor.rst:11 msgid "" @@ -59,32 +58,36 @@ msgstr "" #: ../../source/tor.rst:18 msgid "Getting Around Censorship" -msgstr "" +msgstr "Sansürden Kurtulma" #: ../../source/tor.rst:20 -#, fuzzy msgid "" "If your access to the internet is censored, you can configure OnionShare " "to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " "one, you don't need to use a bridge." msgstr "" -"İnternet erişiminiz sansürleniyorsa, OnionShare uygulamasını Tor ağına " -"`Tor köprüleri `_ " -"kullanarak bağlanacak şekilde yapılandırabilirsiniz. OnionShare, Tor " -"köprüsü olmadan bağlanıyorsa köprü kullanmanıza gerek yoktur." +"İnternet erişiminiz sansürleniyorsa, OnionShare uygulamasını Tor ağına `Tor " +"köprüleri `_ kullanarak " +"bağlanacak şekilde yapılandırabilirsiniz. OnionShare, Tor köprüsü olmadan " +"bağlanıyorsa köprü kullanmanıza gerek yoktur." #: ../../source/tor.rst:22 msgid "" "To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" " version built into OnionShare\" and check the \"Use a bridge\" checkbox." msgstr "" +"Bir köprü kullanmak için Tor Ayarları sekmesini açın. \"OnionShare " +"üzerindeki Tor sürümü kullanılsın\" seçeneğini seçmeli ve \"Köprü kullan\" " +"onay kutusunu işaretlemelisiniz." #: ../../source/tor.rst:25 msgid "" "Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " "is recommended over using `meek-azure`." msgstr "" +"Önce yerleşik bir köprü kullanmayı deneyin. `meek-azure` yerine `obfs4` veya " +"`snowflake` köprülerinin kullanılması tavsiye edilir." #: ../../source/tor.rst:29 msgid "" @@ -93,12 +96,18 @@ msgid "" "bridge. (This makes it more difficult for governments or ISPs to block " "access to Tor bridges.)" msgstr "" +"Yerleşik bir köprü kullanmak işe yaramazsa, torproject.org'dan bir köprü " +"talep edebilirsiniz. Köprü talep etmek için bir CAPTCHA çözmeniz gerekecek. (" +"Bu, hükümetlerin veya ISS'lerin Tor köprülerine erişimi engellemesini " +"zorlaştırır.)" #: ../../source/tor.rst:33 msgid "" "You also have the option of using a bridge that you learned about from a " "trusted source." msgstr "" +"Ayrıca güvenilir bir kaynaktan öğrendiğiniz bir köprüyü kullanma seçeneğiniz " +"de vardır." #: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" @@ -572,4 +581,3 @@ msgstr "" #~ "edinebileceğiniz özel köprüleri kullanabilirsiniz." #~ " Bir köprü kullanmanız gerekirse, önce " #~ "yerleşik obfs4 olanları deneyin." - diff --git a/docs/source/locale/uk/LC_MESSAGES/features.po b/docs/source/locale/uk/LC_MESSAGES/features.po index 97dc27c4..490a5c8b 100644 --- a/docs/source/locale/uk/LC_MESSAGES/features.po +++ b/docs/source/locale/uk/LC_MESSAGES/features.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-11 01:40+0000\n" +"PO-Revision-Date: 2021-11-25 15:52+0000\n" "Last-Translator: Ihor Hordiichuk \n" -"Language: uk\n" "Language-Team: none\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" +"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.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -395,7 +396,7 @@ msgstr "" #: ../../source/features.rst:117 msgid "Content Security Policy" -msgstr "Політика безпеки вмісту" +msgstr "Content Security Policy" #: ../../source/features.rst:119 msgid "" @@ -406,20 +407,17 @@ msgid "" "page." msgstr "" "Типово OnionShare допоможе захистити ваш вебсайт, встановивши строгий " -"заголовок `політики безпеки вмісту " -"`_. Однак, це " -"запобігає завантаженню сторонніх матеріалів на вебсторінку." +"заголовок `Content Security Policy `_. Однак, це запобігає завантаженню сторонніх " +"матеріалів на вебсторінку." #: ../../source/features.rst:121 -#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " "JavaScript libraries from CDNs, you have two options:" msgstr "" -"Якщо ви хочете завантажити вміст зі сторонніх вебсайтів, як-от активи або" -" бібліотеки JavaScript із CDN, то перед запуском служби потрібно " -"встановити позначку «Не надсилати заголовок політики безпеки вмісту " -"(дозволяє вебсайту застосовувати сторонні ресурси)»." +"Якщо ви хочете завантажити вміст зі сторонніх вебсайтів, як-от активи або " +"бібліотеки JavaScript із CDN, у вас є два варіанти:" #: ../../source/features.rst:123 msgid "" @@ -427,10 +425,13 @@ msgid "" "\"Don't send Content Security Policy header (allows your website to use " "third-party resources)\" box before starting the service." msgstr "" +"Перед запуском служби можна вимкнути надсилання заголовка Content Security " +"Policy, позначивши прапорцем «Не надсилати заголовок Content Security Policy " +"(дозволяє вебсайту використовувати сторонні ресурси)»." #: ../../source/features.rst:124 msgid "You can send a custom Content Security Policy header." -msgstr "" +msgstr "Ви можете надіслати власний заголовок Content Security Policy." #: ../../source/features.rst:127 msgid "Tips for running a website service" @@ -925,4 +926,3 @@ msgstr "" #~ "бути збережені. Кімнати чатів OnionShare " #~ "ніде не зберігають жодних повідомлень, " #~ "тож проблему мінімізовано." - diff --git a/docs/source/locale/uk/LC_MESSAGES/tor.po b/docs/source/locale/uk/LC_MESSAGES/tor.po index d3550bca..6aeca61e 100644 --- a/docs/source/locale/uk/LC_MESSAGES/tor.po +++ b/docs/source/locale/uk/LC_MESSAGES/tor.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-10 20:35+0000\n" +"PO-Revision-Date: 2021-11-25 15:52+0000\n" "Last-Translator: Ihor Hordiichuk \n" -"Language: uk\n" "Language-Team: none\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" +"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.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -24,17 +25,17 @@ msgid "Connecting to Tor" msgstr "З'єднання з Tor" #: ../../source/tor.rst:4 -#, fuzzy msgid "" "Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" " the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" -"Виберіть спосіб під'єднання OnionShare до Tor, натиснувши піктограму «⚙» " -"у нижньому правому куті вікна OnionShare, щоб перейти до його параметрів." +"Виберіть спосіб під'єднання OnionShare до Tor, натиснувши піктограму Tor " +"onion у нижньому правому куті вікна OnionShare, щоб перейти до вкладки " +"налаштувань Tor." #: ../../source/tor.rst:9 msgid "Use the Tor version built into OnionShare" -msgstr "" +msgstr "Використовуйте версію Tor, вбудовану в OnionShare" #: ../../source/tor.rst:11 msgid "" @@ -58,32 +59,36 @@ msgstr "" #: ../../source/tor.rst:18 msgid "Getting Around Censorship" -msgstr "" +msgstr "Обхід цензури" #: ../../source/tor.rst:20 -#, fuzzy msgid "" "If your access to the internet is censored, you can configure OnionShare " "to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " "one, you don't need to use a bridge." msgstr "" -"Якщо ваш доступ до інтернету цензуровано, ви можете налаштувати " -"OnionShare для з'єднання з мережею Tor за допомогою `мостів Tor " -"`_. Якщо OnionShare" -" під'єднано до Tor без них, вам не потрібно користуватися мостом." +"Якщо ваш доступ до інтернету цензуровано, ви можете налаштувати OnionShare " +"для з'єднання з мережею Tor за допомогою `мостів Tor `_. Якщо OnionShare під'єднано до Tor без них, вам " +"не потрібно користуватися мостом." #: ../../source/tor.rst:22 msgid "" "To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" " version built into OnionShare\" and check the \"Use a bridge\" checkbox." msgstr "" +"Щоб використовувати міст, відкрийте вкладку Налаштування Tor. Ви повинні " +"вибрати «Використовувати версію Tor, вбудовану в OnionShare» і встановити " +"прапорець «Використовувати міст»." #: ../../source/tor.rst:25 msgid "" "Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " "is recommended over using `meek-azure`." msgstr "" +"Спочатку спробуйте використовувати вбудований міст. Радимо користуватися " +"мостами `obfs4` або `snowflake`, а `meek-azure` — лише якщо це утруднено." #: ../../source/tor.rst:29 msgid "" @@ -92,12 +97,18 @@ msgid "" "bridge. (This makes it more difficult for governments or ISPs to block " "access to Tor bridges.)" msgstr "" +"Якщо використання вбудованого мосту не працює, ви можете запитати міст у " +"torproject.org. Вам доведеться розв'язати CAPTCHA, щоб запитати міст. (Це " +"ускладнює урядамв або постачальникам інтернету блокування доступу до мостів " +"Tor.)" #: ../../source/tor.rst:33 msgid "" "You also have the option of using a bridge that you learned about from a " "trusted source." msgstr "" +"У вас також є можливість використовувати міст, про який ви дізналися з " +"надійного джерела." #: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" @@ -478,4 +489,3 @@ msgstr "" #~ "`_. Якщо вам " #~ "потрібно використовувати міст, спершу " #~ "спробуйте вбудовані obfs4." - -- cgit v1.2.3-54-g00ecf From 2a67f9a78f6014c1afadb81909c8c9205a3634fe Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 26 Nov 2021 02:19:36 +0100 Subject: Added translation using Weblate (Hungarian) Added translation using Weblate (Punjabi) Added translation using Weblate (Czech) Added translation using Weblate (Bulgarian) Added translation using Weblate (Bengali) Added translation using Weblate (Esperanto) Added translation using Weblate (Lithuanian) Added translation using Weblate (Galician) Added translation using Weblate (Gujarati) Co-authored-by: Hosted Weblate Co-authored-by: Weblate --- docs/source/locale/bg/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/bn/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/cs/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/eo/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/gl/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/gu/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/hu/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/lt/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ docs/source/locale/pa/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++++++++ 9 files changed, 1125 insertions(+) create mode 100644 docs/source/locale/bg/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/bn/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/cs/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/eo/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/gl/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/gu/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/hu/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/lt/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/pa/LC_MESSAGES/develop.po diff --git a/docs/source/locale/bg/LC_MESSAGES/develop.po b/docs/source/locale/bg/LC_MESSAGES/develop.po new file mode 100644 index 00000000..da3aa8a8 --- /dev/null +++ b/docs/source/locale/bg/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/bn/LC_MESSAGES/develop.po b/docs/source/locale/bn/LC_MESSAGES/develop.po new file mode 100644 index 00000000..9351ed65 --- /dev/null +++ b/docs/source/locale/bn/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/cs/LC_MESSAGES/develop.po b/docs/source/locale/cs/LC_MESSAGES/develop.po new file mode 100644 index 00000000..3e9e9385 --- /dev/null +++ b/docs/source/locale/cs/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/eo/LC_MESSAGES/develop.po b/docs/source/locale/eo/LC_MESSAGES/develop.po new file mode 100644 index 00000000..3955e13b --- /dev/null +++ b/docs/source/locale/eo/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/gl/LC_MESSAGES/develop.po b/docs/source/locale/gl/LC_MESSAGES/develop.po new file mode 100644 index 00000000..4b9cca53 --- /dev/null +++ b/docs/source/locale/gl/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/gu/LC_MESSAGES/develop.po b/docs/source/locale/gu/LC_MESSAGES/develop.po new file mode 100644 index 00000000..d78443dc --- /dev/null +++ b/docs/source/locale/gu/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: gu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/hu/LC_MESSAGES/develop.po b/docs/source/locale/hu/LC_MESSAGES/develop.po new file mode 100644 index 00000000..177bb74a --- /dev/null +++ b/docs/source/locale/hu/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/lt/LC_MESSAGES/develop.po b/docs/source/locale/lt/LC_MESSAGES/develop.po new file mode 100644 index 00000000..7028dc31 --- /dev/null +++ b/docs/source/locale/lt/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/pa/LC_MESSAGES/develop.po b/docs/source/locale/pa/LC_MESSAGES/develop.po new file mode 100644 index 00000000..479ca7a7 --- /dev/null +++ b/docs/source/locale/pa/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" -- cgit v1.2.3-54-g00ecf From 11a4ed05a69e4acaa51385348bdaa0bba7412ede Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 26 Nov 2021 10:51:30 -0800 Subject: Wait between weblate API requests to avoid hammering the server --- docs/check-weblate.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/check-weblate.py b/docs/check-weblate.py index a5dc4dc8..76cc6942 100755 --- a/docs/check-weblate.py +++ b/docs/check-weblate.py @@ -13,6 +13,10 @@ docs_translations = {} async def api(path): url = f"https://hosted.weblate.org{path}" + # Wait a bit before each API call, to avoid hammering the server and + # getting temporarily blocked + await asyncio.sleep(1) + async with httpx.AsyncClient() as client: r = await client.get( url, headers={"Authorization": f"Token {api_token}"}, timeout=60 -- cgit v1.2.3-54-g00ecf From 206d021cf6fa4460f5d5c0c82a67fe9c643c852b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 26 Nov 2021 19:53:28 +0100 Subject: Translated using Weblate (Galician) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/gl/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Serbian (latin)) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Serbian (latin)) Currently translated at 100.0% (20 of 20 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Chinese (Simplified)) Currently translated at 20.0% (6 of 30 strings) Translated using Weblate (Serbian (latin)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/sr_Latn/ Translated using Weblate (Portuguese (Portugal)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/pt_PT/ Translated using Weblate (German) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/de/ Added translation using Weblate (Hungarian) Added translation using Weblate (Punjabi) Added translation using Weblate (Czech) Added translation using Weblate (Bulgarian) Added translation using Weblate (Bengali) Added translation using Weblate (Esperanto) Added translation using Weblate (Lithuanian) Added translation using Weblate (Galician) Added translation using Weblate (Gujarati) Co-authored-by: 4s3ti <4s3ti@4s3ti.net> Co-authored-by: Blax Co-authored-by: Hosted Weblate Co-authored-by: Jo W. Burner Co-authored-by: Weblate Co-authored-by: Xosé M Co-authored-by: tics tics Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/sr_Latn/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/sr_Latn/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/zh_Hans/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-sphinx/zh_Hans/ Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Help Translation: OnionShare/Doc - Index Translation: OnionShare/Doc - Install Translation: OnionShare/Doc - Sphinx --- desktop/src/onionshare/resources/locale/de.json | 35 +++++- desktop/src/onionshare/resources/locale/gl.json | 37 +++++- desktop/src/onionshare/resources/locale/pt_PT.json | 15 ++- .../src/onionshare/resources/locale/sr_Latn.json | 52 +++++++-- docs/source/locale/bg/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/bn/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/cs/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/eo/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/gl/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/gu/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/hu/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/lt/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/pa/LC_MESSAGES/develop.po | 125 +++++++++++++++++++++ docs/source/locale/sr@latin/LC_MESSAGES/index.po | 9 +- docs/source/locale/sr@latin/LC_MESSAGES/install.po | 64 ++++++++--- docs/source/locale/zh_CN/LC_MESSAGES/features.po | 24 ++-- docs/source/locale/zh_CN/LC_MESSAGES/help.po | 25 +++-- docs/source/locale/zh_CN/LC_MESSAGES/index.po | 15 +-- docs/source/locale/zh_CN/LC_MESSAGES/install.po | 56 ++++++--- docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po | 15 +-- 20 files changed, 1385 insertions(+), 87 deletions(-) create mode 100644 docs/source/locale/bg/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/bn/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/cs/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/eo/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/gl/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/gu/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/hu/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/lt/LC_MESSAGES/develop.po create mode 100644 docs/source/locale/pa/LC_MESSAGES/develop.po diff --git a/desktop/src/onionshare/resources/locale/de.json b/desktop/src/onionshare/resources/locale/de.json index 3c505678..04cce9e3 100644 --- a/desktop/src/onionshare/resources/locale/de.json +++ b/desktop/src/onionshare/resources/locale/de.json @@ -101,9 +101,9 @@ "gui_settings_connection_type_automatic_option": "Versuche automatische Konfiguration mittels Tor Browser", "gui_settings_connection_type_test_button": "Verbindung zu Tor testen", "gui_settings_authenticate_label": "Authentifizierungseinstellungen für Tor", - "gui_settings_tor_bridges": "Unterstützung für Tor-Bridges", - "gui_settings_meek_lite_expensive_warning": "Achtung: Die „meek_lite“-Bridges sind für das Tor-Projekt sehr kostspielig.

Nutze sie nur, wenn du dich nicht direkt, per obfs4-Transport oder über andere, normale Bridges zum Tor-Netzwerk verbinden kannst.", - "gui_settings_tor_bridges_invalid": "Keine der ausgewählten Bridges funktioniert.\nÜberprüfe sie oder gib andere an.", + "gui_settings_tor_bridges": "Mittels einer Tor-Bridge verbinden?", + "gui_settings_meek_lite_expensive_warning": "Achtung: Die „meek-azure“-Bridges sind für das Tor-Projekt sehr kostspielig.

Nutze sie nur, wenn du dich nicht direkt, per obfs4-Transport oder über andere, normale Bridges zum Tor-Netzwerk verbinden kannst.", + "gui_settings_tor_bridges_invalid": "Keine der ausgewählten Bridges funktioniert. Überprüfe sie oder gib andere an.", "settings_error_unknown": "Kann nicht zum Tor-Controller verbinden, weil deine Einstellungen keinen Sinn ergeben.", "settings_error_automatic": "Kann nicht zum Tor-Controller verbinden. Läuft der Tor Browser (kann von https://www.torproject.org/ heruntergeladen werden) im Hintergrund?", "settings_error_socket_port": "Kann unter {}:{} nicht zum Tor-Controller verbinden.", @@ -162,7 +162,7 @@ "gui_upload_in_progress": "Upload gestartet {}", "gui_download_in_progress": "Download gestartet {}", "gui_open_folder_error_nautilus": "Kann den Ordner nicht öffnen, weil Nautilus nicht verfügbar ist. Die Datei ist hier: {}", - "gui_settings_language_label": "Bevorzugte Sprache", + "gui_settings_language_label": "Sprache", "gui_settings_language_changed_notice": "Starte OnionShare neu, damit die neue Sprache übernommen wird.", "help_config": "Ort deiner eigenen JSON Konfigurationsdatei (optional)", "timeout_upload_still_running": "Warte bis Upload vollständig ist", @@ -316,5 +316,30 @@ "gui_qr_label_url_title": "OnionShare-Adresse", "gui_copied_client_auth": "Privater Schlüssel in die Zwischenablage kopiert", "gui_copied_client_auth_title": "Privater Schlüssel kopiert", - "gui_copy_client_auth": "Privaten Schlüssel kopieren" + "gui_copy_client_auth": "Privaten Schlüssel kopieren", + "gui_dragdrop_sandbox_flatpak": "Um die Flatpak Sandbox sicherer zu machen, wird Drag und Drop nicht unterstützt. Bitte nutze stattdessen die Buttons \"Dateien hinzufügen\" und \"Ordner hinzufügen\".", + "gui_tor_settings_window_title": "Tor Einstellungen", + "gui_settings_controller_extras_label": "Tor Einstellungen", + "gui_settings_bridge_use_checkbox": "Benutze eine Brigde", + "gui_settings_bridge_radio_builtin": "Wähle eine eingebaute Bridge", + "gui_settings_bridge_none_radio_option": "Keine Bridge verwenden", + "gui_settings_bridge_moat_button": "Neue Bridge verwenden", + "gui_settings_bridge_custom_placeholder": "Schreibe im Format adresse:port (eine pro Zeile)", + "gui_settings_moat_bridges_invalid": "Du hast noch keine Bridge von torproject.org angefragt.", + "gui_settings_stop_active_tabs_label": "Es laufen noch Services in deinen Tabs.\nDu musst alle Services beenden, bevor du die Tor Einstellungen ändern kannst.", + "gui_settings_version_label": "Du verwendest OnionShare {}", + "gui_settings_help_label": "Du benötigst Hilfe? Gehe zu docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Sende einen benutzerdefinierten Content Security Policy header", + "moat_contact_label": "Kontaktiere BridgeDB...", + "moat_captcha_label": "Löse das CAPTCHA um eine Bridge zu laden.", + "moat_captcha_placeholder": "Gib die Zeichen auf dem Bild ein", + "moat_captcha_submit": "Absenden", + "moat_captcha_reload": "Neu laden", + "moat_bridgedb_error": "Fehler beim kontaktieren der BridgeDB.", + "moat_captcha_error": "Die Lösung ist nicht korrekt. Bitte nochmal versuchen.", + "mode_tor_not_connected_label": "OnionShare ist nicht mit dem Tor Netzwerk verbunden", + "gui_settings_bridge_moat_radio_option": "Verwende eine Bridge von torproject.org", + "moat_solution_empty_error": "Du musst die Zeichen auf dem Bild eingeben", + "gui_settings_bridge_custom_radio_option": "Stelle eine Bridge aus einer dir bekannten vertraulichen Quelle bereit", + "gui_settings_tor_bridges_label": "Brigdes helfen dir das Tor Netzwerk an Orten zu verwenden, wo es blockiert wird. Je nachdem wo du bist, funktioniert eine Bridge besser als eine andere." } diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json index c1734862..6600dd9b 100644 --- a/desktop/src/onionshare/resources/locale/gl.json +++ b/desktop/src/onionshare/resources/locale/gl.json @@ -51,16 +51,16 @@ "gui_settings_authenticate_no_auth_option": "Sen autenticación, ou autenticación por cookie", "gui_settings_authenticate_password_option": "Contrasinal", "gui_settings_password_label": "Contrasinal", - "gui_settings_tor_bridges": "Soporte para ponte Tor", + "gui_settings_tor_bridges": "Conectar usando unha ponte Tor?", "gui_settings_tor_bridges_no_bridges_radio_option": "Non usar pontes", "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transporte engadido obfs4 incluído", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transporte engadido obfs4 (require obfs4proxy) incluído", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transporte engadido meek_lite (Azure) incluído", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transporte engadido meek_lite (Azure) incluído (require obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: Ó Tor Project cóstalle moito executar pontes meek_lite.

Utilízao só se non podes conectar directamente con Tor, vía transporte obfs4 ou outras pontes habituais.", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure requiren moitos recursos do Proxecto Tor.

Utilízao só se non podes conectar directamente con Tor, vía transporte obfs4 ou outras pontes habituais.", "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", "gui_settings_tor_bridges_custom_label": "Podes obter pontes en https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Ningunha das pontes engadidas funciona\nCompróbaas ou engade outras.", + "gui_settings_tor_bridges_invalid": "Non funciona ningunha das pontes engadidas. Compróbaas ou engade outras.", "gui_settings_button_save": "Gardar", "gui_settings_button_cancel": "Cancelar", "gui_settings_button_help": "Axuda", @@ -105,7 +105,7 @@ "error_cannot_create_data_dir": "Non se puido crear o cartafol de datos OnionShare: {}", "gui_receive_mode_warning": "O modo Recepción permite que outras poidan subir ficheiros á túa computadora.

Potencialmente algúns ficheiros poderían tomar control sobre a túa computadora ó abrilos. Abre só elementos que recibas de xente de confianza, ou se realmente sabes o que fas.", "gui_open_folder_error": "Fallou a apertura do cartafol con xdg-open. O ficheiro está aquí: {}", - "gui_settings_language_label": "Idioma preferido", + "gui_settings_language_label": "Idioma", "gui_settings_language_changed_notice": "Reinicia OnionShare para utilizar o idioma seleccionado.", "systray_menu_exit": "Saír", "systray_page_loaded_title": "Páxina cargada", @@ -168,7 +168,7 @@ "mode_settings_share_autostop_sharing_checkbox": "Deixar de compartir unha vez enviado o ficheiro (desmarca para permitir a descarga de ficheiros individuais)", "mode_settings_receive_data_dir_label": "Gardar ficheiros en", "mode_settings_receive_data_dir_browse_button": "Navegar", - "mode_settings_website_disable_csp_checkbox": "Non enviar cabeceira Content Security Policy (permite ó teu sitio web usar recursos de terceiros)", + "mode_settings_website_disable_csp_checkbox": "Non enviar cabeceira Content Security Policy (isto permite ao teu sitio web usar recursos de terceiros)", "gui_all_modes_transfer_finished_range": "Transferido {} - {}", "gui_all_modes_transfer_finished": "Transferido {}", "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", @@ -216,5 +216,30 @@ "gui_qr_label_url_title": "Enderezo OnionShare", "gui_copied_client_auth": "Chave privada copiada ao portapapeis", "gui_copied_client_auth_title": "Copiouse a chave privada", - "gui_copy_client_auth": "Copiar Chave privada" + "gui_copy_client_auth": "Copiar Chave privada", + "gui_tor_settings_window_title": "Axustes Tor", + "gui_settings_controller_extras_label": "Axustes Tor", + "gui_settings_bridge_use_checkbox": "Usar unha ponte", + "gui_settings_bridge_radio_builtin": "Elixe unha ponte prestablecida", + "gui_settings_bridge_none_radio_option": "Non usar unha ponte", + "gui_settings_bridge_moat_radio_option": "Solicitar unha ponte a torproject.org", + "gui_settings_bridge_custom_radio_option": "Proporcionar unha ponte que coñeces e é da túa confianza", + "gui_settings_bridge_custom_placeholder": "escribe enderezo:porto (un por liña)", + "gui_settings_moat_bridges_invalid": "Aínda non solicitaches unha ponte a torproject.org", + "gui_settings_version_label": "Estás utilizando OnionShare {}", + "gui_settings_help_label": "Precisas axuda? Le docs.onionshare.org", + "moat_captcha_label": "Completa o CAPTCHA para solicitar unha ponte.", + "moat_captcha_placeholder": "Escribe os caracteres da imaxe", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recargar", + "moat_bridgedb_error": "Fallou a conexión a BridgeDB.", + "moat_captcha_error": "A solución non é correcta. Inténtao outra vez.", + "moat_solution_empty_error": "Debes escribir os caracteres que aparecen na imaxe", + "mode_tor_not_connected_label": "OnionShare non está conectado á rede Tor", + "gui_dragdrop_sandbox_flatpak": "Para facer aínda máis segura a instancia Flatpak, non hai soporte para arrastrar e soltar. Usa o botón Engadir Ficheiros e Engadir Cartafol para buscar ficheiros.", + "gui_settings_bridge_moat_button": "Solicitar Nova Ponte", + "gui_settings_stop_active_tabs_label": "Hai servizos en execución nalgunha das túas lapelas.\nDebes deter tódolos servizo para cambiar os axustes Tor.", + "mode_settings_website_custom_csp_checkbox": "Envía cabeceira Content Security Policy personalizada", + "gui_settings_tor_bridges_label": "As Pontes axúdanche a acceder á Rede Tor en lugares onde Tor está bloqueada. Dependendo de onde estés unha ponte podería funcionar mellor que outras.", + "moat_contact_label": "Contactando BridgeDB..." } diff --git a/desktop/src/onionshare/resources/locale/pt_PT.json b/desktop/src/onionshare/resources/locale/pt_PT.json index cd65def4..b7e63075 100644 --- a/desktop/src/onionshare/resources/locale/pt_PT.json +++ b/desktop/src/onionshare/resources/locale/pt_PT.json @@ -86,13 +86,13 @@ "gui_settings_authenticate_no_auth_option": "Sem autenticação, ou autenticação por cookie", "gui_settings_authenticate_password_option": "Palavra-passe", "gui_settings_password_label": "Palavra-passe", - "gui_settings_tor_bridges": "Suporte de ponte do Tor", + "gui_settings_tor_bridges": "Ligar com Ponte Tor?", "gui_settings_tor_bridges_no_bridges_radio_option": "Não utilizar pontes", "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transportes ligáveis obfs4 integrados", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis obfs4 integrados (requer obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizar transportes ligáveis meek_lite (Azure) integrados", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis meek_lite (Azure) integrados (requer obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek_lite são muito dispendiosas para o Projeto Tor.

Utilize-as apenas se não conseguir ligar diretamente ao Tor, via transportes obfs4, ou outras pontes normais.", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito dispendiosas para o Projeto Tor.

Utilize-as apenas se não conseguir ligar diretamente ao Tor, via transportes obfs4, ou outras pontes normais.", "gui_settings_tor_bridges_custom_radio_option": "Utilizar pontes personalizadas", "gui_settings_tor_bridges_custom_label": "Pode obter pontes em https://bridges.torproject.org", "gui_settings_tor_bridges_invalid": "Nenhuma das pontes que adicionou funciona.\nVerifique se estão corretas ou adicione outras.", @@ -306,5 +306,14 @@ "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode enviar ficheiros para o seu computador usando o Tor Browser: ", "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Tor Browser: ", "gui_share_url_public_description": "Qualquer pessoa com este endereço OnionShare pode descarregar os seus ficheiros usando o Tor Browser: ", - "gui_server_doesnt_support_stealth": "Desculpe, esta versão do Tor não suporta ocultação (stealth - autenticação do cliente). Por favor, tente uma versão mais recente do Tor ou utilize o modo 'público' se não houver a necessidade de privacidade." + "gui_server_doesnt_support_stealth": "Desculpe, esta versão do Tor não suporta ocultação (stealth - autenticação do cliente). Por favor, tente uma versão mais recente do Tor ou utilize o modo 'público' se não houver a necessidade de privacidade.", + "gui_dragdrop_sandbox_flatpak": "Para tornar a \"caixa de areia\" mais segura não é possível utilizar a funcionalidade de arrastar e largar, em alternativa procure os ficheiros utilizando os botões de Adicionar Ficheiro e Adicionar Diretório.", + "gui_tor_settings_window_title": "Definições do Tor", + "gui_settings_controller_extras_label": "Definições do Tor", + "gui_settings_bridge_use_checkbox": "Utilizar uma ponte", + "gui_settings_bridge_radio_builtin": "Selecionar uma ponte embutida", + "gui_settings_bridge_none_radio_option": "Não utilizar uma ponte", + "gui_settings_bridge_moat_radio_option": "Pedir uma ponte a torproject.org", + "gui_settings_bridge_moat_button": "Pedir uma Ponte Nova", + "gui_settings_tor_bridges_label": "As pontes ajudam no acesso a rede Tor em localizações onde esta está bloqueada, algumas pontes podem funcionar melhor do que outras dependendo da localização." } diff --git a/desktop/src/onionshare/resources/locale/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json index 0241a140..c2327da2 100644 --- a/desktop/src/onionshare/resources/locale/sr_Latn.json +++ b/desktop/src/onionshare/resources/locale/sr_Latn.json @@ -62,16 +62,16 @@ "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem", "gui_settings_authenticate_password_option": "Lozinka", "gui_settings_password_label": "Lozinka", - "gui_settings_tor_bridges": "Most podrška za Tor", + "gui_settings_tor_bridges": "Povezivanje pomoću Tor mosta?", "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove", "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 dodatne prenose", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 dodatne prenose (potreban obfs4proksi)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) dodatne prenose", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) dodatne prenose (potreban obfs4proksi)", - "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek_lite mostovi su vrlo skupi za Tor projekat da ih koristi.

Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.", + "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek-azure mostovi su vrlo skupi za Tor projekat da ih koristi.

Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.", "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje si dodao ne funkcioniše.\nProveri ih ponovo ili dodaj druge.", + "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje ste dodali ne funkcioniše.\nProverite ih ponovo ili dodajte druge.", "gui_settings_button_save": "Sačuvaj", "gui_settings_button_cancel": "Odustani", "gui_settings_button_help": "Pomoć", @@ -110,9 +110,9 @@ "share_via_onionshare": "Deljenje pomoću OnionShare", "gui_connect_to_tor_for_onion_settings": "Poveži se sa Torom da bi video postavke onion servisa", "gui_save_private_key_checkbox": "Koristi trajnu adresu", - "gui_share_url_description": "Svako sa ovom OnionShare sdresom može preuzeti tvoje datoteke koristeći Tor Browser: ", - "gui_website_url_description": "Svako sa ovom OnionShare adresom može posetiti tvoju veb-stranicu koristeći Tor Browser: ", - "gui_receive_url_description": "Svako sa ovom OnionShare adresom može poslati datoteke na tvoj računar koristeći Tor Browser: ", + "gui_share_url_description": "Svako sa ovom OnionShare adresom i privatnim ključem može preuzeti tvoje datoteke koristeći Tor Browser: ", + "gui_website_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može posetiti tvoju web-stranicu koristeći Tor Browser: ", + "gui_receive_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može poslati datoteke na tvoj računar koristeći Tor Browser: ", "gui_url_label_persistent": "Ovo deljenje neće se automatski zaustaviti.

Svako sledeće deljenje ponovo koristi istu adresu. (Da bi koristio jednokratnu adresu, isključi opciju \"koristi trajnu adresu\" u podešavanjima.)", "gui_url_label_stay_open": "Ovaj deljenje neće se automatski zaustaviti.", "gui_url_label_onetime": "Ovaj deljenje će se zaustaviti nakon prvog dovršenja.", @@ -214,12 +214,48 @@ "gui_new_tab": "Novi jezičak", "gui_color_mode_changed_notice": "Ponovo pokrenite OnionShare da bi primenili novi režim boja.", "gui_open_folder_error": "Neuspelo otvaranje fascikle sa xdg-open. Fajl je ovde: {}", - "gui_chat_url_description": "Bilo ko sa ovom OnionShare adresom može pristupiti ovoj sobi za ćaskawe koristeći Tor pregledač: ", + "gui_chat_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može pristupiti ovoj sobi za ćaskanje koristeći Tor Browser: ", "gui_qr_code_dialog_title": "OnionShare QR kod", "gui_show_qr_code": "Prikaži QR kod", "gui_receive_flatpak_data_dir": "Pošto ste instalirali OnionShare koristeći Flatpak, morate čuvati fajlove u falcikli ~/OnionShare.", "gui_chat_stop_server": "Zaustavi server za ćaskanje", "gui_chat_start_server": "Pokreni server za ćaskanje", "gui_file_selection_remove_all": "Ukloni sve", - "gui_remove": "Ukloni" + "gui_remove": "Ukloni", + "gui_copy_client_auth": "Kopiraj privatni ključ", + "gui_copied_client_auth_title": "Privatni ključ je kopiran", + "gui_copied_client_auth": "Privatni ključ je kopiran u clipboard", + "gui_tor_settings_window_title": "Tor Podešenja", + "gui_settings_controller_extras_label": "Tor Podešenja", + "gui_settings_bridge_use_checkbox": "Koristite most", + "gui_settings_bridge_radio_builtin": "Odaberite most", + "gui_settings_bridge_none_radio_option": "Ne koristi most", + "gui_settings_bridge_moat_radio_option": "Zatražite most od torproject.org", + "gui_settings_bridge_moat_button": "Zatražite novi most", + "gui_settings_bridge_custom_radio_option": "Obezbedite most za koji ste saznali iz pouzdanog izvora", + "gui_settings_bridge_custom_placeholder": "upišite adresu:port (jedan po liniji)", + "gui_settings_moat_bridges_invalid": "Još niste zatražili most od torproject.org.", + "gui_settings_version_label": "Koristite OnionShare {}", + "gui_share_url_public_description": "Bilo ko sa ovom OnionShare adresom može preuzeti tvoje datoteke koristeći Tor Browser: ", + "gui_website_url_public_description": "Bilo ko s ovom OnionShare adresom može posetiti tvoju web-stranicu koristeći Tor Browser: ", + "gui_receive_url_public_description": "Bilo ko sa ovom OnionShare adresom može poslati datoteke na tvoj računar koristeći Tor Browser: ", + "gui_chat_url_public_description": "Bilo ko sa ovom OnionShare adresom može se pridružiti ovoj sobi za ćaskanje koristeći Tor Browser: ", + "gui_url_instructions": "Prvo pošalji ovu dole OnionShare adresu:", + "moat_contact_label": "Kontaktiranje BridgeDB-a...", + "moat_captcha_label": "Rešite CAPTCHA da bi zatražili most.", + "moat_captcha_placeholder": "Unesite znakove sa slike", + "moat_captcha_submit": "Pošalji", + "moat_captcha_reload": "Obnovi", + "moat_bridgedb_error": "Greška u kontaktiranju BridgeDB.", + "gui_please_wait_no_button": "Pokretanje …", + "gui_qr_label_url_title": "OnionShare adresa", + "gui_qr_label_auth_string_title": "Privatni ključ", + "gui_reveal": "Otkrij", + "gui_hide": "Sakrij", + "gui_dragdrop_sandbox_flatpak": "Da bi Flatpak sandbox bio sigurniji, prevlačenje i ispuštanje nije podržano. Umesto toga koristite dugmad Dodaj datoteke i Dodaj direktorijume za pretraživanje datoteka.", + "gui_settings_tor_bridges_label": "Mostovi vam pomažu da pristupite Tor mreži u područjima gde je Tor blokiran. U zavisnosti gde se nalazite, jedan most može raditi bolje od drugog.", + "gui_settings_help_label": "Treba vam pomoć? Pogledajte docs.onionshare.org", + "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušajte s novijom verzijom Tor-a ili koristite 'javni' način rada ako ne mora biti privatan.", + "history_receive_read_message_button": "Pročitaj poruku", + "moat_captcha_error": "Rješenje nije ispravno. Molimo pokušajte ponovo." } diff --git a/docs/source/locale/bg/LC_MESSAGES/develop.po b/docs/source/locale/bg/LC_MESSAGES/develop.po new file mode 100644 index 00000000..da3aa8a8 --- /dev/null +++ b/docs/source/locale/bg/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bg\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/bn/LC_MESSAGES/develop.po b/docs/source/locale/bn/LC_MESSAGES/develop.po new file mode 100644 index 00000000..9351ed65 --- /dev/null +++ b/docs/source/locale/bn/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: bn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/cs/LC_MESSAGES/develop.po b/docs/source/locale/cs/LC_MESSAGES/develop.po new file mode 100644 index 00000000..3e9e9385 --- /dev/null +++ b/docs/source/locale/cs/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/eo/LC_MESSAGES/develop.po b/docs/source/locale/eo/LC_MESSAGES/develop.po new file mode 100644 index 00000000..3955e13b --- /dev/null +++ b/docs/source/locale/eo/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: eo\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/gl/LC_MESSAGES/develop.po b/docs/source/locale/gl/LC_MESSAGES/develop.po new file mode 100644 index 00000000..4b9cca53 --- /dev/null +++ b/docs/source/locale/gl/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: gl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/gu/LC_MESSAGES/develop.po b/docs/source/locale/gu/LC_MESSAGES/develop.po new file mode 100644 index 00000000..d78443dc --- /dev/null +++ b/docs/source/locale/gu/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: gu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/hu/LC_MESSAGES/develop.po b/docs/source/locale/hu/LC_MESSAGES/develop.po new file mode 100644 index 00000000..177bb74a --- /dev/null +++ b/docs/source/locale/hu/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: hu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/lt/LC_MESSAGES/develop.po b/docs/source/locale/lt/LC_MESSAGES/develop.po new file mode 100644 index 00000000..7028dc31 --- /dev/null +++ b/docs/source/locale/lt/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: lt\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/pa/LC_MESSAGES/develop.po b/docs/source/locale/pa/LC_MESSAGES/develop.po new file mode 100644 index 00000000..479ca7a7 --- /dev/null +++ b/docs/source/locale/pa/LC_MESSAGES/develop.po @@ -0,0 +1,125 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) Micah Lee, et al. +# This file is distributed under the same license as the OnionShare package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: OnionShare 2.4.1\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-11-23 19:33-0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Automatically generated\n" +"Language-Team: none\n" +"Language: pa\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: ../../source/develop.rst:2 +msgid "Developing OnionShare" +msgstr "" + +#: ../../source/develop.rst:7 +msgid "Collaborating" +msgstr "" + +#: ../../source/develop.rst:9 +msgid "OnionShare has an open Keybase team to discuss the project, ask questions, share ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, download the `Keybase app `_, make an account, and `join this team `_. Within the app, go to \"Teams\", click \"Join a Team\", and type \"onionshare\"." +msgstr "" + +#: ../../source/develop.rst:12 +msgid "OnionShare also has a `mailing list `_ for developers and and designers to discuss the project." +msgstr "" + +#: ../../source/develop.rst:15 +msgid "Contributing Code" +msgstr "" + +#: ../../source/develop.rst:17 +msgid "OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare" +msgstr "" + +#: ../../source/develop.rst:19 +msgid "If you'd like to contribute code to OnionShare, it helps to join the Keybase team and ask questions about what you're thinking of working on. You should also review all of the `open issues `_ on GitHub to see if there are any you'd like to tackle." +msgstr "" + +#: ../../source/develop.rst:22 +msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possibly ask questions, request changes, reject it, or merge it into the project." +msgstr "" + +#: ../../source/develop.rst:27 +msgid "Starting Development" +msgstr "" + +#: ../../source/develop.rst:29 +msgid "OnionShare is developed in Python. To get started, clone the Git repository at https://github.com/onionshare/onionshare/ and then consult the ``cli/README.md`` file to learn how to set up your development environment for the command-line version, and the ``desktop/README.md`` file to learn how to set up your development environment for the graphical version." +msgstr "" + +#: ../../source/develop.rst:32 +msgid "Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree." +msgstr "" + +#: ../../source/develop.rst:35 +msgid "Debugging tips" +msgstr "" + +#: ../../source/develop.rst:38 +msgid "Verbose mode" +msgstr "" + +#: ../../source/develop.rst:40 +msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::" +msgstr "" + +#: ../../source/develop.rst:117 +msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::" +msgstr "" + +#: ../../source/develop.rst:121 +msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated." +msgstr "" + +#: ../../source/develop.rst:124 +msgid "Local Only" +msgstr "" + +#: ../../source/develop.rst:126 +msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::" +msgstr "" + +#: ../../source/develop.rst:165 +msgid "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal web-browser like Firefox, instead of using the Tor Browser. The private key is not actually needed in local-only mode, so you can ignore it." +msgstr "" + +#: ../../source/develop.rst:168 +msgid "Contributing Translations" +msgstr "" + +#: ../../source/develop.rst:170 +msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate `_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed." +msgstr "" + +#: ../../source/develop.rst:172 +msgid "To help translate, make a Hosted Weblate account and start contributing." +msgstr "" + +#: ../../source/develop.rst:175 +msgid "Suggestions for Original English Strings" +msgstr "" + +#: ../../source/develop.rst:177 +msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation." +msgstr "" + +#: ../../source/develop.rst:179 +msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes." +msgstr "" + +#: ../../source/develop.rst:183 +msgid "Status of Translations" +msgstr "" + +#: ../../source/develop.rst:184 +msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net" +msgstr "" diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/index.po b/docs/source/locale/sr@latin/LC_MESSAGES/index.po index bac96959..32898daf 100644 --- a/docs/source/locale/sr@latin/LC_MESSAGES/index.po +++ b/docs/source/locale/sr@latin/LC_MESSAGES/index.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-09-03 11:46-0700\n" -"PO-Revision-Date: 2021-03-02 16:50+0000\n" -"Last-Translator: Filipovic Dragan \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: tics tics \n" "Language-Team: LANGUAGE \n" "Language: sr@latin\n" "MIME-Version: 1.0\n" @@ -17,7 +17,7 @@ msgstr "" "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.5\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\n" #: ../../source/index.rst:2 @@ -29,3 +29,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 je alat otvorenog koda koji vam omogućuje sigurno i anonimno " +"deljenje datoteka, hosting web stranica i ćaskanje sa prijateljima koristeći " +"Tor mrežu." diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/install.po b/docs/source/locale/sr@latin/LC_MESSAGES/install.po index 8a1e3472..72107f80 100644 --- a/docs/source/locale/sr@latin/LC_MESSAGES/install.po +++ b/docs/source/locale/sr@latin/LC_MESSAGES/install.po @@ -3,33 +3,38 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-12-13 15:48-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: tics tics \n" "Language-Team: LANGUAGE \n" +"Language: sr@latin\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.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 msgid "Installation" -msgstr "" +msgstr "Instalacija" #: ../../source/install.rst:5 msgid "Windows or macOS" -msgstr "" +msgstr "Windows ili macOS" #: ../../source/install.rst:7 msgid "" "You can download OnionShare for Windows and macOS from the `OnionShare " "website `_." msgstr "" +"OnionShare za Windows i macOS možete preuzeti sa `OnionShare web stranice " +"https://onionshare.org/`_." #: ../../source/install.rst:12 msgid "Install in Linux" @@ -43,32 +48,43 @@ msgid "" "that you'll always use the newest version and run OnionShare inside of a " "sandbox." msgstr "" +"Postoje različiti načini za instaliranje OnionShare za Linux, ali " +"preporučeni način je korišćenje ili `Flatpak https://flatpak.org/`_ ili `" +"Snap https://snapcraft.io/`_ paketa. Flatpak i Snap osiguravaju da ćete uvek " +"koristiti najnoviju verziju i pokrenuti OnionShare unutar sandbox-a." #: ../../source/install.rst:17 msgid "" "Snap support is built-in to Ubuntu and Fedora comes with Flatpak support," " but which you use is up to you. Both work in all Linux distributions." msgstr "" +"Snap podrška je ugrađena u Ubuntu, a Fedora dolazi sa Flatpak podrškom, ali " +"koju ćete koristiti je na vama. Oba rade u svim Linux distribucijama." #: ../../source/install.rst:19 msgid "" "**Install OnionShare using Flatpak**: " "https://flathub.org/apps/details/org.onionshare.OnionShare" msgstr "" +"**Instalirajte OnionShare koristeći Flatpak**: https://flathub.org/apps/" +"details/org.onionshare.OnionShare" #: ../../source/install.rst:21 msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare" msgstr "" +"**Instalirajte OnionShare koristeći Snap**: https://snapcraft.io/onionshare" #: ../../source/install.rst:23 msgid "" "You can also download and install PGP-signed ``.flatpak`` or ``.snap`` " "packages from https://onionshare.org/dist/ if you prefer." msgstr "" +"Takođe možete preuzeti i instalirati PGP-potpisane ``.flatpak`` ili ``.snap``" +" pakete sa https://onionshare.org/dist/ ako želite." #: ../../source/install.rst:28 msgid "Verifying PGP signatures" -msgstr "" +msgstr "Provera PGP potpisa" #: ../../source/install.rst:30 msgid "" @@ -78,10 +94,14 @@ msgid "" "binaries include operating system-specific signatures, and you can just " "rely on those alone if you'd like." msgstr "" +"Možete proveriti da li je paket koji preuzmete legitiman i da nije menjan " +"tako što ćete provjeriti njegov PGP potpis. Za Windows i macOS, ovaj korak " +"je opcija i pruža zaštitu: OnionShare binarne datoteke uključuju potpise " +"specifične za operativni sistem i možete se osloniti samo na njih ako želite." #: ../../source/install.rst:34 msgid "Signing key" -msgstr "" +msgstr "Ključ za potpisivanje" #: ../../source/install.rst:36 msgid "" @@ -91,6 +111,10 @@ msgid "" "`_." msgstr "" +"Pakete je potpisao Micah Lee, glavni programer, koristeći svoj PGP javni " +"ključ sa otiskom prsta ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Možete " +"preuzeti Micahov ključ `sa servera ključeva keys.openpgp.org https://keys." +"openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73`_." #: ../../source/install.rst:38 msgid "" @@ -98,10 +122,13 @@ msgid "" "probably want `GPGTools `_, and for Windows you " "probably want `Gpg4win `_." msgstr "" +"Morate imati instaliran GnuPG za proveru potpisa. Za macOS vam verovatno " +"treba `GPGTools https://gpgtools.org/`_, a za Windows `Gpg4win https://www." +"gpg4win.org/`_." #: ../../source/install.rst:41 msgid "Signatures" -msgstr "" +msgstr "Potpisi" #: ../../source/install.rst:43 msgid "" @@ -111,10 +138,15 @@ msgid "" "OnionShare. You can also find them on the `GitHub Releases page " "`_." msgstr "" +"Potpise (kao ``.asc`` datoteke), kao i Windows, macOS, Flatpak, Snap i " +"izvorne pakete, možete pronaći na https://onionshare.org/dist/ u " +"direktorijumima imenovanim za svaku verziju OnionShare. Možete ih pronaći i " +"na stranici `GitHub izdanja https://github.com/micahflee/onionshare/" +"releases`_." #: ../../source/install.rst:47 msgid "Verifying" -msgstr "" +msgstr "Verifikacija" #: ../../source/install.rst:49 msgid "" @@ -122,14 +154,17 @@ msgid "" "downloaded the binary and and ``.asc`` signature, you can verify the " "binary for macOS in a terminal like this::" msgstr "" +"Nakon što uvezete Micahov javni ključ u svoj GnuPG , preuzmete binarni i i ``" +".asc`` potpis, možete proveriti binarni ključ za macOS u terminalu na " +"sledeći način:" #: ../../source/install.rst:53 msgid "Or for Windows, in a command-prompt like this::" -msgstr "" +msgstr "Ili za Windows, u komandnoj liniji poput ove:" #: ../../source/install.rst:57 msgid "The expected output looks like this::" -msgstr "" +msgstr "Očekivani ispis izgleda ovako:" #: ../../source/install.rst:69 msgid "" @@ -147,6 +182,10 @@ msgid "" " the `Tor Project `_ may be useful." msgstr "" +"Ako želite saznati više o proveri PGP potpisa, uputstva za `Qubes OS " +"https://www.qubes-os.org/security/verifying-signatures/`_ i `Tor Project " +"https://support.torproject. org/tbb/how-to-verify-signature/`_ mogu biti " +"korisna." #~ msgid "Install on Windows or macOS" #~ msgstr "" @@ -333,4 +372,3 @@ msgstr "" #~ "Project `_ may be helpful." #~ msgstr "" - diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/features.po b/docs/source/locale/zh_CN/LC_MESSAGES/features.po index e71451fb..612c1c5b 100644 --- a/docs/source/locale/zh_CN/LC_MESSAGES/features.po +++ b/docs/source/locale/zh_CN/LC_MESSAGES/features.po @@ -3,23 +3,25 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: Blax \n" "Language-Team: LANGUAGE \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 msgid "How OnionShare Works" -msgstr "" +msgstr "OnionShare 如何运作" #: ../../source/features.rst:6 msgid "" @@ -27,6 +29,8 @@ msgid "" "other people as `Tor `_ `onion services " "`_." msgstr "" +"网络服务器在你的计算机上本地启动,并作为`Tor ` `onion services " +"` 让其他人访问。" #: ../../source/features.rst:8 msgid "" @@ -64,23 +68,26 @@ msgid "" "Tor onion services too, it also protects your anonymity. See the " ":doc:`security design ` for more info." msgstr "" +"因为你自己的电脑是网络服务器,*任何第三方都不能获知 OnionShare *中发生的任何事情,甚至是 OnionShare " +"的开发者也不能。它是完全私有的。而 OnionShare 也是基于 Tor Onion service,所以它也保护了你的匿名性。请参阅 :doc:`" +"security design ` 以了解更多信息。" #: ../../source/features.rst:21 msgid "Share Files" -msgstr "" +msgstr "共享文件" #: ../../source/features.rst:23 msgid "" "You can use OnionShare to send files and folders to people securely and " "anonymously. Open a share tab, drag in the files and folders you wish to " "share, and click \"Start sharing\"." -msgstr "" +msgstr "你可以使用 OnionShare 来安全且匿名地发送文件和文件夹给别人。打开一个共享标签页,拖入你想共享的文件和文件夹,然后点击“开始共享”。" #: ../../source/features.rst:27 ../../source/features.rst:93 msgid "" "After you add files, you'll see some settings. Make sure you choose the " "setting you're interested in before you start sharing." -msgstr "" +msgstr "在你添加了文件后,你会看到一些设定选项。请确保你在开始分享前选中了那些你感兴趣的选项。" #: ../../source/features.rst:31 msgid "" @@ -764,4 +771,3 @@ msgstr "" #~ "WebSockets, through their E2EE onion " #~ "connections." #~ msgstr "" - diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/help.po b/docs/source/locale/zh_CN/LC_MESSAGES/help.po index d1eb81e9..55118393 100644 --- a/docs/source/locale/zh_CN/LC_MESSAGES/help.po +++ b/docs/source/locale/zh_CN/LC_MESSAGES/help.po @@ -3,37 +3,39 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: Blax \n" "Language-Team: LANGUAGE \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 msgid "Getting Help" -msgstr "" +msgstr "获取帮助" #: ../../source/help.rst:5 msgid "Read This Website" -msgstr "" +msgstr "查阅该网站" #: ../../source/help.rst:7 msgid "" "You will find instructions on how to use OnionShare. Look through all of " "the sections first to see if anything answers your questions." -msgstr "" +msgstr "你将找到有关如何使用 OnionShare 的说明。先浏览一下所有的章节,看看是否有能回答你的问题的。" #: ../../source/help.rst:10 msgid "Check the GitHub Issues" -msgstr "" +msgstr "查看 Github Issues" #: ../../source/help.rst:12 msgid "" @@ -45,7 +47,7 @@ msgstr "" #: ../../source/help.rst:15 msgid "Submit an Issue Yourself" -msgstr "" +msgstr "亲自提交一个 Issue" #: ../../source/help.rst:17 msgid "" @@ -58,13 +60,13 @@ msgstr "" #: ../../source/help.rst:20 msgid "Join our Keybase Team" -msgstr "" +msgstr "加入我们的 Keybase Team" #: ../../source/help.rst:22 msgid "" "See :ref:`collaborating` on how to join the Keybase team used to discuss " "the project." -msgstr "" +msgstr "请查阅 :ref:`collaborating` 关于如何加入 Keybase team 来讨论这个项目。" #~ msgid "If you need help with OnionShare, please follow the instructions below." #~ msgstr "" @@ -117,4 +119,3 @@ msgstr "" #~ "that we use to discuss the " #~ "project." #~ msgstr "" - diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/index.po b/docs/source/locale/zh_CN/LC_MESSAGES/index.po index 2ad2653c..f6847006 100644 --- a/docs/source/locale/zh_CN/LC_MESSAGES/index.po +++ b/docs/source/locale/zh_CN/LC_MESSAGES/index.po @@ -3,27 +3,28 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: Blax \n" "Language-Team: LANGUAGE \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\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 "" - +msgstr "OnionShare 是一个开源工具,能让你通过 Tor 网络,安全且匿名地共享文件、托管网站以及跟朋友交流。" diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/install.po b/docs/source/locale/zh_CN/LC_MESSAGES/install.po index 8a1e3472..7947c3a8 100644 --- a/docs/source/locale/zh_CN/LC_MESSAGES/install.po +++ b/docs/source/locale/zh_CN/LC_MESSAGES/install.po @@ -3,33 +3,37 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-12-13 15:48-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: Blax \n" "Language-Team: LANGUAGE \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 msgid "Installation" -msgstr "" +msgstr "安装" #: ../../source/install.rst:5 msgid "Windows or macOS" -msgstr "" +msgstr "安装到 Windows 或 macOS" #: ../../source/install.rst:7 msgid "" "You can download OnionShare for Windows and macOS from the `OnionShare " "website `_." msgstr "" +"你可以从 `OnionShare website ` 下载适用于 Windows 和 macOS 的 " +"OnionShare。" #: ../../source/install.rst:12 msgid "Install in Linux" @@ -43,32 +47,41 @@ msgid "" "that you'll always use the newest version and run OnionShare inside of a " "sandbox." msgstr "" +"这有几种方式安装适用于 Linux 的 OnionShare,但推荐使用 `Flatpak ` 或 `" +"Snap ` 的软件包来安装。Flatpak 和 Snap 确保你将总能使用最新版本的 " +"OnionShare 并在一个沙箱里运行它。" #: ../../source/install.rst:17 msgid "" "Snap support is built-in to Ubuntu and Fedora comes with Flatpak support," " but which you use is up to you. Both work in all Linux distributions." msgstr "" +"Ubuntu 内建对 Snap 的支持而 Fedora 附带对 Flatpak 的支持,但选择哪一种取决于你。这两种都能在所有的 Linux " +"发行版上使用。" #: ../../source/install.rst:19 msgid "" "**Install OnionShare using Flatpak**: " "https://flathub.org/apps/details/org.onionshare.OnionShare" msgstr "" +"**使用 Flatpak 安装 OnionShare**: https://flathub.org/apps/details/org.onionshare" +".OnionShare" #: ../../source/install.rst:21 msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare" -msgstr "" +msgstr "**使用 Snap 安装 OnionShare**: https://snapcraft.io/onionshare" #: ../../source/install.rst:23 msgid "" "You can also download and install PGP-signed ``.flatpak`` or ``.snap`` " "packages from https://onionshare.org/dist/ if you prefer." msgstr "" +"如果你愿意的话,你也可以从 https://onionshare.org/dist/ 下载和安装 PGP 签署过的 ``.flatpak`` 或 ``." +"snap`` 软件包。" #: ../../source/install.rst:28 msgid "Verifying PGP signatures" -msgstr "" +msgstr "验证 PGP 签名" #: ../../source/install.rst:30 msgid "" @@ -78,10 +91,12 @@ msgid "" "binaries include operating system-specific signatures, and you can just " "rely on those alone if you'd like." msgstr "" +"你可以通过验证其 PGP 签名来验证你下载的软件包是可靠且未被篡改过的。对于 Windows 和 macOS 来说,这一步是可选的,并提供更深层次的保护:" +"OnionShare 的二进制文件中包含操作系统特定的数字签名,如果你愿意的话,你可以只依赖这些签名。" #: ../../source/install.rst:34 msgid "Signing key" -msgstr "" +msgstr "签名密钥" #: ../../source/install.rst:36 msgid "" @@ -91,6 +106,10 @@ msgid "" "`_." msgstr "" +"软件包由核心开发者 Micah Lee 通过使用他的 PGP 公钥签名,其指纹为 " +"``927F419D7EC82C2F149C1BD1403C2657CD994F73``。你可以下载 Micah 的公钥 `从 " +"keys.openpgp.org keyserver `。" #: ../../source/install.rst:38 msgid "" @@ -98,10 +117,12 @@ msgid "" "probably want `GPGTools `_, and for Windows you " "probably want `Gpg4win `_." msgstr "" +"你必须安装 GnuPG 来验证签名,对于 macOS 你可能想要 `GPGTools `,对于 " +"Windows 你可能想要 `Gpg4win `。" #: ../../source/install.rst:41 msgid "Signatures" -msgstr "" +msgstr "签名" #: ../../source/install.rst:43 msgid "" @@ -111,10 +132,13 @@ msgid "" "OnionShare. You can also find them on the `GitHub Releases page " "`_." msgstr "" +"你可以在 https://onionshare.org/dist/ 下以 OnionShare 每个版本命名的文件夹中找到这些签名(以 ``.asc`` " +"文件形式),以及对应 Windows、macOS、Flatpak、Snap 的 OnionShare 安装包和源码包。你也能在 `GitHub " +"Releases page ` 上找到它们。" #: ../../source/install.rst:47 msgid "Verifying" -msgstr "" +msgstr "验证" #: ../../source/install.rst:49 msgid "" @@ -122,14 +146,16 @@ msgid "" "downloaded the binary and and ``.asc`` signature, you can verify the " "binary for macOS in a terminal like this::" msgstr "" +"只要你导入过 Micah 的公钥到你的 GnuPG 密钥串上,下载好(被 Micah 的密钥签署过的)二进制文件和 ``.asc`` 签名文件," +"你就可以在 macOS 的终端中验证这个二进制文件,像这样:" #: ../../source/install.rst:53 msgid "Or for Windows, in a command-prompt like this::" -msgstr "" +msgstr "或是在 Windows 的命令提示符(cmd)中:" #: ../../source/install.rst:57 msgid "The expected output looks like this::" -msgstr "" +msgstr "期望的输出看起来像是这样:" #: ../../source/install.rst:69 msgid "" @@ -147,6 +173,9 @@ msgid "" " the `Tor Project `_ may be useful." msgstr "" +"如果你想了解更多有关验证 PGP 签名的知识,这几篇指南 `Qubes OS ` 和 `Tor Project ` 可能会有帮助。" #~ msgid "Install on Windows or macOS" #~ msgstr "" @@ -333,4 +362,3 @@ msgstr "" #~ "Project `_ may be helpful." #~ msgstr "" - diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po b/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po index f2cc8ed5..d82be56f 100644 --- a/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po +++ b/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po @@ -3,25 +3,26 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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: FULL NAME \n" +"PO-Revision-Date: 2021-11-26 18:53+0000\n" +"Last-Translator: Blax \n" "Language-Team: LANGUAGE \n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\n" #: ../../source/_templates/versions.html:10 msgid "Versions" -msgstr "" +msgstr "版本" #: ../../source/_templates/versions.html:18 msgid "Languages" -msgstr "" - +msgstr "语言" -- cgit v1.2.3-54-g00ecf From 55c8ada6ef0a2f8852ee2be1b7ee6c66815ae6fc Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 27 Nov 2021 10:35:25 +1100 Subject: Move the ability to use Tor vs Meek into the CensorshipCircumvention class so that we can use those endpoints over Tor elsewhere later --- cli/onionshare_cli/censorship.py | 51 +++++++++++++++++++++++++------ cli/onionshare_cli/onion.py | 66 ++++++++++++---------------------------- 2 files changed, 60 insertions(+), 57 deletions(-) diff --git a/cli/onionshare_cli/censorship.py b/cli/onionshare_cli/censorship.py index f84b1058..9f41d61c 100644 --- a/cli/onionshare_cli/censorship.py +++ b/cli/onionshare_cli/censorship.py @@ -25,21 +25,46 @@ from .meek import MeekNotRunning class CensorshipCircumvention(object): """ Connect to the Tor Moat APIs to retrieve censorship - circumvention recommendations, over the Meek client. + circumvention recommendations or the latest bridges. + + We support reaching this API over Tor, or Meek + (domain fronting) if Tor is not connected. """ - def __init__(self, common, meek, domain_fronting=True): + def __init__(self, common, meek=None, onion=None): """ Set up the CensorshipCircumvention object to hold common and meek objects. """ self.common = common - self.meek = meek self.common.log("CensorshipCircumvention", "__init__") - - # Bail out if we requested domain fronting but we can't use meek - if domain_fronting and not self.meek.meek_proxies: - raise MeekNotRunning() + self.api_proxies = {} + if meek: + self.meek = meek + if not self.meek.meek_proxies: + raise MeekNotRunning() + else: + self.common.log( + "CensorshipCircumvention", + "__init__", + "Using Meek with CensorShipCircumvention API", + ) + self.api_proxies = self.meek.meek_proxies + if onion: + self.onion = onion + if not self.onion.is_authenticated: + return False + else: + self.common.log( + "CensorshipCircumvention", + "__init__", + "Using Tor with CensorShipCircumvention API", + ) + (socks_address, socks_port) = self.onion.get_tor_socks_port() + self.api_proxies = { + "http": f"socks5h://{socks_address}:{socks_port}", + "https": f"socks5h://{socks_address}:{socks_port}", + } def request_map(self, country=False): """ @@ -52,6 +77,8 @@ class CensorshipCircumvention(object): Note that this API endpoint doesn't return actual bridges, it just returns the recommended bridge type countries. """ + if not self.api_proxies: + return False endpoint = "https://bridges.torproject.org/moat/circumvention/map" data = {} if country: @@ -61,7 +88,7 @@ class CensorshipCircumvention(object): endpoint, json=data, headers={"Content-Type": "application/vnd.api+json"}, - proxies=self.meek.meek_proxies, + proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( @@ -95,6 +122,8 @@ class CensorshipCircumvention(object): Optionally, a list of transports can be specified in order to return recommended settings for just that transport type. """ + if not self.api_proxies: + return False endpoint = "https://bridges.torproject.org/moat/circumvention/settings" data = {} if country: @@ -105,7 +134,7 @@ class CensorshipCircumvention(object): endpoint, json=data, headers={"Content-Type": "application/vnd.api+json"}, - proxies=self.meek.meek_proxies, + proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( @@ -142,11 +171,13 @@ class CensorshipCircumvention(object): """ Retrieves the list of built-in bridges from the Tor Project. """ + if not self.api_proxies: + return False endpoint = "https://bridges.torproject.org/moat/circumvention/builtin" r = requests.post( endpoint, headers={"Content-Type": "application/vnd.api+json"}, - proxies=self.meek.meek_proxies, + proxies=self.api_proxies, ) if r.status_code != 200: self.common.log( diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index c0a4e6e1..bd8e28df 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -914,7 +914,8 @@ class Onion(object): Use the CensorshipCircumvention API to fetch the latest built-in bridges and update them in settings. """ - got_builtin_bridges = False + builtin_bridges = False + meek = None # Try obtaining bridges over Tor, if we're connected to it. if self.is_authenticated: self.common.log( @@ -922,43 +923,14 @@ class Onion(object): "update_builtin_bridges", "Updating the built-in bridges. Trying over Tor first", ) - (socks_address, socks_port) = self.get_tor_socks_port() - tor_proxies = { - "http": f"socks5h://{socks_address}:{socks_port}", - "https": f"socks5h://{socks_address}:{socks_port}", - } - # Request a bridge - r = requests.post( - "https://bridges.torproject.org/moat/circumvention/builtin", - headers={"Content-Type": "application/vnd.api+json"}, - proxies=tor_proxies, + self.censorship_circumvention = CensorshipCircumvention( + self.common, None, self ) - if r.status_code != 200: - self.common.log( - "Onion", - "update_builtin_bridges", - f"Trying over Tor failed: status_code={r.status_code}", - ) - - try: - builtin_bridges = r.json() - if "errors" in builtin_bridges: - self.common.log( - "Onion", - "update_builtin_bridges", - f"Trying over Tor failed: errors={builtin_bridges['errors']}", - ) - else: - got_builtin_bridges = builtin_bridges - except Exception as e: - self.common.log( - "Onion", - "update_builtin_bridges", - f"Hit exception when trying over Tor: {e}", - ) + builtin_bridges = self.censorship_circumvention.request_builtin_bridges() - if not got_builtin_bridges: - # Fall back to using Meek, without Tor + if not builtin_bridges: + # Tor was not running or it failed to hit the Tor API. + # Fall back to using Meek (domain-fronting). self.common.log( "Onion", "update_builtin_bridges", @@ -966,35 +938,35 @@ class Onion(object): ) meek = Meek(self.common) meek.start() - self.censorship_circumvention = CensorshipCircumvention(self.common, meek) - got_builtin_bridges = ( - self.censorship_circumvention.request_builtin_bridges() + self.censorship_circumvention = CensorshipCircumvention( + self.common, meek, None ) + builtin_bridges = self.censorship_circumvention.request_builtin_bridges() meek.cleanup() - # If we got to this point, we have bridges - if got_builtin_bridges: + if builtin_bridges: + # If we got to this point, we have bridges self.common.log( "Onion", "update_builtin_bridges", - f"Obtained bridges: {got_builtin_bridges}", + f"Obtained bridges: {builtin_bridges}", ) - if got_builtin_bridges["meek"]: + if builtin_bridges["meek"]: # Meek bridge needs to be defined as "meek_lite", not "meek", # for it to work with obfs4proxy. # We also refer to this bridge type as 'meek-azure' in our settings. # So first, rename the key in the dict - got_builtin_bridges["meek-azure"] = got_builtin_bridges.pop("meek") + builtin_bridges["meek-azure"] = builtin_bridges.pop("meek") new_meek_bridges = [] # Now replace the values. They also need the url/front params appended - for item in got_builtin_bridges["meek-azure"]: + for item in builtin_bridges["meek-azure"]: newline = item.replace("meek", "meek_lite") new_meek_bridges.append( f"{newline} url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com" ) - got_builtin_bridges["meek-azure"] = new_meek_bridges + builtin_bridges["meek-azure"] = new_meek_bridges # Save the new settings - self.settings.set("bridges_builtin", got_builtin_bridges) + self.settings.set("bridges_builtin", builtin_bridges) self.settings.save() else: self.common.log( -- cgit v1.2.3-54-g00ecf From 546633ac625c70fe22953baebf911d0047c424b0 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 27 Nov 2021 11:14:05 +1100 Subject: remove import of requests module in Onion --- cli/onionshare_cli/onion.py | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index bd8e28df..ba9e2e77 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -27,7 +27,6 @@ import base64 import nacl.public import os import psutil -import requests import shlex import subprocess import tempfile -- cgit v1.2.3-54-g00ecf From a4741a73d491e038c3627c8ea0e279454febc9fd Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sun, 28 Nov 2021 20:16:51 +0100 Subject: Translated using Weblate (German) Currently translated at 98.2% (56 of 57 strings) Translated using Weblate (Catalan) Currently translated at 25.0% (2 of 8 strings) Translated using Weblate (Catalan) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Catalan) Currently translated at 28.5% (2 of 7 strings) Translated using Weblate (Catalan) Currently translated at 6.6% (2 of 30 strings) Translated using Weblate (Serbian (latin)) Currently translated at 100.0% (25 of 25 strings) Translated using Weblate (Serbian (latin)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/sr_Latn/ Co-authored-by: Hosted Weblate Co-authored-by: fadelkon Co-authored-by: ilumium Co-authored-by: tics tics Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/ca/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/de/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/ca/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/ca/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/ca/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/sr_Latn/ Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Help Translation: OnionShare/Doc - Index Translation: OnionShare/Doc - Security Translation: OnionShare/Doc - Tor --- .../src/onionshare/resources/locale/sr_Latn.json | 6 +- docs/source/locale/ca/LC_MESSAGES/features.po | 7 +- docs/source/locale/ca/LC_MESSAGES/help.po | 6 +- docs/source/locale/ca/LC_MESSAGES/index.po | 7 +- docs/source/locale/ca/LC_MESSAGES/security.po | 10 +- docs/source/locale/de/LC_MESSAGES/features.po | 124 +++++++++------------ docs/source/locale/sr@latin/LC_MESSAGES/tor.po | 89 ++++++++++++--- 7 files changed, 153 insertions(+), 96 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json index c2327da2..f47bade1 100644 --- a/desktop/src/onionshare/resources/locale/sr_Latn.json +++ b/desktop/src/onionshare/resources/locale/sr_Latn.json @@ -71,7 +71,7 @@ "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek-azure mostovi su vrlo skupi za Tor projekat da ih koristi.

Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.", "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje ste dodali ne funkcioniše.\nProverite ih ponovo ili dodajte druge.", + "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje ste dodali ne funkcioniše. Proverite ih ponovo ili dodajte druge.", "gui_settings_button_save": "Sačuvaj", "gui_settings_button_cancel": "Odustani", "gui_settings_button_help": "Pomoć", @@ -257,5 +257,7 @@ "gui_settings_help_label": "Treba vam pomoć? Pogledajte docs.onionshare.org", "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušajte s novijom verzijom Tor-a ili koristite 'javni' način rada ako ne mora biti privatan.", "history_receive_read_message_button": "Pročitaj poruku", - "moat_captcha_error": "Rješenje nije ispravno. Molimo pokušajte ponovo." + "moat_captcha_error": "Rješenje nije ispravno. Molimo pokušajte ponovo.", + "moat_solution_empty_error": "Morate uneti znakove sa slike", + "mode_tor_not_connected_label": "OnionShare nije povezan na Tor mrežu" } diff --git a/docs/source/locale/ca/LC_MESSAGES/features.po b/docs/source/locale/ca/LC_MESSAGES/features.po index ff60adb3..1077412c 100644 --- a/docs/source/locale/ca/LC_MESSAGES/features.po +++ b/docs/source/locale/ca/LC_MESSAGES/features.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2020-11-25 18:28+0000\n" +"PO-Revision-Date: 2021-11-28 19:16+0000\n" "Last-Translator: fadelkon \n" "Language-Team: LANGUAGE \n" "Language: ca\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -29,6 +29,9 @@ msgid "" "other people as `Tor `_ `onion services " "`_." msgstr "" +"Els servidors webs s'arrenquen localment, al teu ordinador, i es fan " +"accessibles a altres persones com a _`serveis onion `_ de `Tor `." #: ../../source/features.rst:8 msgid "" diff --git a/docs/source/locale/ca/LC_MESSAGES/help.po b/docs/source/locale/ca/LC_MESSAGES/help.po index a4845c2b..7e1cbb90 100644 --- a/docs/source/locale/ca/LC_MESSAGES/help.po +++ b/docs/source/locale/ca/LC_MESSAGES/help.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2020-11-25 18:28+0000\n" +"PO-Revision-Date: 2021-11-28 19:16+0000\n" "Last-Translator: fadelkon \n" "Language-Team: LANGUAGE \n" "Language: ca\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 @@ -25,7 +25,7 @@ msgstr "Demanar ajuda" #: ../../source/help.rst:5 msgid "Read This Website" -msgstr "" +msgstr "Llegeix aquest web" #: ../../source/help.rst:7 msgid "" diff --git a/docs/source/locale/ca/LC_MESSAGES/index.po b/docs/source/locale/ca/LC_MESSAGES/index.po index f14a6ae0..96514a4e 100644 --- a/docs/source/locale/ca/LC_MESSAGES/index.po +++ b/docs/source/locale/ca/LC_MESSAGES/index.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-09-03 11:46-0700\n" -"PO-Revision-Date: 2020-11-25 18:28+0000\n" +"PO-Revision-Date: 2021-11-28 19:16+0000\n" "Last-Translator: fadelkon \n" "Language-Team: LANGUAGE \n" "Language: ca\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\n" #: ../../source/index.rst:2 @@ -28,3 +28,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 és una eina de codi obert que et permet, de forma anònima i " +"segura, compartir arxius, allotjar webs i xatejar amb amics, fent servir la " +"xarxa Tor." diff --git a/docs/source/locale/ca/LC_MESSAGES/security.po b/docs/source/locale/ca/LC_MESSAGES/security.po index d6140d16..9e5e5611 100644 --- a/docs/source/locale/ca/LC_MESSAGES/security.po +++ b/docs/source/locale/ca/LC_MESSAGES/security.po @@ -8,14 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-12-13 15:48-0800\n" -"PO-Revision-Date: 2020-11-25 18:28+0000\n" +"PO-Revision-Date: 2021-11-28 19:16+0000\n" "Last-Translator: fadelkon \n" -"Language: ca\n" "Language-Team: ca \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/security.rst:2 @@ -25,6 +26,8 @@ msgstr "Disseny de seguretat" #: ../../source/security.rst:4 msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works." msgstr "" +"Pots llegir :ref:`how_it_works` per entendre una mica com funciona " +"OnionShare." #: ../../source/security.rst:6 msgid "Like all software, OnionShare may contain bugs or vulnerabilities." @@ -242,4 +245,3 @@ msgstr "" #~ " share the address. This isn't " #~ "necessary unless anonymity is a goal." #~ msgstr "" - diff --git a/docs/source/locale/de/LC_MESSAGES/features.po b/docs/source/locale/de/LC_MESSAGES/features.po index 9d4d559a..aca23e44 100644 --- a/docs/source/locale/de/LC_MESSAGES/features.po +++ b/docs/source/locale/de/LC_MESSAGES/features.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: register718 \n" +"PO-Revision-Date: 2021-11-28 19:16+0000\n" +"Last-Translator: ilumium \n" "Language-Team: de \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -74,19 +74,17 @@ msgstr "" "Empfänger eingegeben werden muss." #: ../../source/features.rst:24 -#, fuzzy msgid "" "If you run OnionShare on your laptop to send someone files, and then " "suspend it before the files are sent, the service will not be available " "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" -"Wenn du OnionShare auf deinem Laptop laufen lässt, um jemandem Dateien zu" -" schicken, und du den Laptop in den Ruhemodus versetzt, ehe die Dateien " -"gesendet wurden, wird der Dienst so lange nicht erreichbar sein, bis dein" -" Laptop wieder läuft und mit dem Internet verbunden ist. OnionShare " -"funktioniert am besten, wenn du in Echtzeit mit den Leuten in Verbindung " -"stehst." +"Wenn du OnionShare auf deinem Laptop laufen lässt, um jemandem Dateien zu " +"schicken, und du den Laptop in den Ruhemodus versetzt, ehe die Dateien " +"gesendet wurden, wird der Dienst so lange nicht erreichbar sein wie der " +"Laptop im Ruhezustand ist. OnionShare funktioniert am besten, wenn du mit " +"den Leuten, mit denen du Dateien teilst, in Echtzeit in Verbindung stehst." #: ../../source/features.rst:26 msgid "" @@ -127,7 +125,6 @@ msgstr "" "startest." #: ../../source/features.rst:39 -#, fuzzy msgid "" "As soon as someone finishes downloading your files, OnionShare will " "automatically stop the server, removing the website from the internet. To" @@ -135,11 +132,11 @@ msgid "" " files have been sent (uncheck to allow downloading individual files)\" " "box." msgstr "" -"Sobald jemand deine Dateien vollständig heruntergeladen hat, wird " -"OnionShare den Dienst automatisch starten und die Webseite vom Internet " -"nehmen. Um mehreren Leuten das Herunterladen zu ermöglichen, entferne den" -" Haken bei „Dateifreigabe beenden, sobald alle Dateien versendet wurden " -"(abwählen, um das Herunterladen einzelner Dateien zu erlauben)“." +"Sobald jemand deine Dateien vollständig heruntergeladen hat, wird OnionShare " +"das Teilen der Dateien automatisch beenden und die Webseite vom Internet " +"nehmen. Um mehreren Personen das Herunterladen zu ermöglichen, öffne die " +"Einstellungen von OnionShare und entferne den Haken bei „Server nach " +"Download der Dateien stoppen“." #: ../../source/features.rst:42 msgid "" @@ -166,29 +163,27 @@ msgstr "" "Downloads anzeigen zu lassen." #: ../../source/features.rst:48 -#, fuzzy msgid "" "Now that you have a OnionShare, copy the address and the private key and " "send it to the person you want to receive the files. If the files need to" " stay secure, or the person is otherwise exposed to danger, use an " "encrypted messaging app." msgstr "" -"Jetzt, wo du eine OnionShare-Freigabe hast, kopiere die Adresse und " -"schicke sie der Person, die die Dateien empfangen soll. Falls die Dateien" -" sicher bleiben sollen oder die Person anderweitig irgendeiner Gefahr " -"ausgesetzt ist, nutze einen verschlüsselten Messenger." +"Jetzt, wo du eine OnionShare-Freigabe hast, kopiere die Adresse und schicke " +"sie der Person, die die Dateien empfangen soll. Falls die Dateien vor " +"Anderen geschützt bleiben sollen oder die Empfängerperson anderweitig in " +"Gefahr ist, nutze einen verschlüsselten Messenger zum senden der Adresse." #: ../../source/features.rst:50 -#, fuzzy msgid "" "That person then must load the address in Tor Browser. After logging in " "with the private key, the files can be downloaded directly from your " "computer by clicking the \"Download Files\" link in the corner." msgstr "" -"Diese Person muss nun die Adresse mit dem Tor Browser öffnen. Nachdem sie" -" sich mit dem zufällig erzeugten Passwort eingeloggt hat, das in der " -"Adresse enthalten ist, kann sie die Dateien direkt von deinem Rechner " -"über den „Dateien herunterladen”-Link in der Ecke herunterladen." +"Diese Person muss nun die Adresse mit dem Tor Browser öffnen. Nachdem sie " +"sich mit dem zufällig erzeugten Passwort eingeloggt hat, das in der Adresse " +"enthalten ist, kann sie die Dateien direkt von deinem Rechner über den Link „" +"Dateien herunterladen” in der Ecke herunterladen." #: ../../source/features.rst:55 msgid "Receive Files and Messages" @@ -309,7 +304,6 @@ msgid "Use at your own risk" msgstr "Nutzung auf eigene Gefahr" #: ../../source/features.rst:88 -#, fuzzy msgid "" "Just like with malicious email attachments, it's possible someone could " "try to attack your computer by uploading a malicious file to your " @@ -317,10 +311,9 @@ msgid "" "protect your system from malicious files." msgstr "" "Ähnlich wie bei bösartigen E-Mail-Anhängen kann es sein, dass jemand " -"deinen Rechner anzugreifen versucht, indem er eine bösartige Datei auf " -"deinen OnionShare-Dienst hochlädt. OnionShare bringt keine " -"Sicherheitsmechanismen mit, um dein System vor bösartigen Dateien zu " -"schützen." +"versucht deinen Rechner anzugreifen, indem er eine bösartige Datei auf " +"deinen OnionShare-Dienst hochlädt. OnionShare selbst hat keine " +"Sicherheitsmechanismen, um deinen Rechner vor solchen Angriffen zu schützen." #: ../../source/features.rst:90 msgid "" @@ -349,20 +342,18 @@ msgid "Tips for running a receive service" msgstr "Tipps für einen OnionShare-Empfangsdienst" #: ../../source/features.rst:97 -#, fuzzy msgid "" "If you want to host your own anonymous dropbox using OnionShare, it's " "recommended you do so on a separate, dedicated computer always powered on" " and connected to the internet, and not on the one you use on a regular " "basis." msgstr "" -"Wenn du deinen eigenen anonymen Briefkasten per OnionShare betreiben " -"willst, solltest du dies auf einem separaten, eigens dafür eingerichteten" -" Rechner tun, der immer läuft und mit dem Internet verbunden ist; nicht " -"mit dem, den du sonst regelmäßig benutzt." +"Wenn du deinen eigenen anonymen OnionShare-Briefkasten betreiben willst, " +"solltest du dies auf einem separaten, eigens dafür eingerichteten Rechner " +"tun, der immer läuft und mit dem Internet verbunden ist; nicht mit dem " +"Rechner, den du sonst regelmäßig benutzt." #: ../../source/features.rst:99 -#, fuzzy msgid "" "If you intend to put the OnionShare address on your website or social " "media profiles, save the tab (see :ref:`save_tabs`) and run it as a " @@ -370,9 +361,9 @@ msgid "" "to give it a custom title (see :ref:`custom_titles`)." msgstr "" "Falls du deine OnionShare-Adresse auf deiner Webseite oder deinen Social " -"Media-Profilen teilen willst, solltest du den Reiter speichern (siehe " -":ref:`save_tabs`) und den Service als öffentlich festlegen. (siehe " -":ref:`disable password`). In diesem Fall wäre es auch eine gute Idee, " +"Media-Profilen veröffentlichen willst, solltest du den entsprechenden Reiter " +"speichern (siehe :ref:`save_tabs`) und den Service als öffentlich festlegen. " +"(siehe :ref:`disable password`). In diesem Fall wäre es auch eine gute Idee, " "einen benutzerdefinierten Titel festzulegen (siehe :ref:`custom_titles`)." #: ../../source/features.rst:102 @@ -420,7 +411,6 @@ msgid "Content Security Policy" msgstr "Content-Security-Policy" #: ../../source/features.rst:119 -#, fuzzy msgid "" "By default OnionShare helps secure your website by setting a strict " "`Content Security Policy " @@ -428,11 +418,10 @@ msgid "" "However, this prevents third-party content from loading inside the web " "page." msgstr "" -"Standardmäßig wird OnionShare beim Absichern deiner Webseite helfen, " -"indem es einen strikten `Content-Security-Policy " -"`_-Header setzt. " -"Allerdings wird hierdurch verhindert, dass Inhalte von Drittanbietern " -"innerhalb der Webseite geladen werden." +"Standardmäßig sichert OnionShare deine Webseite, indem es einen strikten " +"`Content-Security-Policy `_-Header setzt. Das verhindert allerdings auch das " +"Laden von Inhalten von Drittanbietern innerhalb deiner Webseite." #: ../../source/features.rst:121 msgid "" @@ -452,7 +441,6 @@ msgid "Tips for running a website service" msgstr "Tipps zum Betreiben eines Webseiten-Dienstes" #: ../../source/features.rst:126 -#, fuzzy msgid "" "If you want to host a long-term website using OnionShare (meaning not " "just to quickly show someone something), it's recommended you do it on a " @@ -461,23 +449,22 @@ msgid "" " (see :ref:`save_tabs`) so you can resume the website with the same " "address if you close OnionShare and re-open it later." msgstr "" -"Falls du eine Webseite längerfristig über OnionShare anbieten (und nicht " +"Falls du eine Webseite längerfristig über OnionShare anbieten (also nicht " "nur kurz jemandem etwas zeigen) möchtest, solltest du dies auf einem " -"separaten, eigens dafür eingerichteten Rechner tun, der immer läuft und " -"mit dem Internet verbunden ist; nicht mit dem, den du sonst regelmäßig " -"benutzt. Außerdem solltest du den Reiter speichern (see " -":ref:`save_tabs`), so dass du die Webseite mit derselben Adresse " -"weiterbetreiben kannst, falls du OnionShare schließt und später wieder " -"öffnest." +"separaten, eigens dafür eingerichteten Rechner tun, der immer läuft und mit " +"dem Internet verbunden ist; nicht auf dem Rechner, den du sonst regelmäßig " +"benutzt. Außerdem solltest du den entsprechenden Reiter speichern (see " +":ref:`save_tabs`), so dass du die Webseite dann mit derselben Adresse " +"anbieten kannst, wenn OnionShare zwischenzeitig beendet und neu gestartet " +"wird." #: ../../source/features.rst:129 -#, fuzzy msgid "" "If your website is intended for the public, you should run it as a public" " service (see :ref:`turn_off_private_key`)." msgstr "" -"Falls du die Webseite öffentlich betreiben wilst, solltest du sie als " -"öffentlichen Dienst hosten (see :ref:`disable_passwords`)." +"Wenn du deine Webseite öffentlich betreiben willst, solltest du sie als " +"öffentlichen Dienst starten (see :ref:`disable_passwords`)." #: ../../source/features.rst:132 msgid "Chat Anonymously" @@ -493,18 +480,16 @@ msgstr "" "klicke auf „Chat starten“." #: ../../source/features.rst:138 -#, fuzzy msgid "" "After you start the server, copy the OnionShare address and private key " "and send them to the people you want in the anonymous chat room. If it's " "important to limit exactly who can join, use an encrypted messaging app " "to send out the OnionShare address and private key." msgstr "" -"Nachdem du den Dienst gestartest hast, kopiere die OnionShare-Adresse und" -" schicke sie den Leuten, die du in dem anonymen Chatroom gerne hättest. " -"Falls es wichtig ist, den Teilnehmerkreis strikt zu beschränken, solltest" -" du einen verschlüsselten Messenger zum Teilen der OnionShare-Adresse " -"verwenden." +"Nachdem du den Dienst gestartest hast, kopiere die OnionShare-Adresse und " +"schicke sie den Leuten, die dem anonymen Chat beitreten sollen. Falls es " +"wichtig ist, den Teilnehmerkreis strikt zu beschränken, solltest du einen " +"verschlüsselten Messenger zum Teilen der OnionShare-Adresse verwenden." #: ../../source/features.rst:143 msgid "" @@ -577,7 +562,6 @@ msgid "" msgstr "" #: ../../source/features.rst:165 -#, fuzzy msgid "" "OnionShare chat rooms can also be useful for people wanting to chat " "anonymously and securely with someone without needing to create any " @@ -586,12 +570,12 @@ msgid "" "journalist to join the chat room, all without compromosing their " "anonymity." msgstr "" -"OnionShare-Chatrooms können außerdem für einander unbekannte Personen " -"nützlich sein, die sicher untereinander chatten wollen, ohne " -"Benutzerkonten zu erstellen. Beispielsweise könnte eine Quelle einem " -"Journalisten über eine Wegwerf-E-Mail-Adresse eine OnionShare-Adresse " -"schicken und dann warten, bis der Journalist den Chatroom betritt; all " -"dies, ohne die Anonymität zu gefährden." +"OnionShare-Chats ermöglichen es außerdem einander unbekannten Personen, " +"miteinander zu chatten ohne dafür eigene Benutzerkonten erstellen zu müssen. " +"Beispielsweise könnte eine Quelle einem Journalisten über eine Wegwerf-E" +"-Mail-Adresse eine OnionShare-Adresse schicken und dann warten, bis der " +"Journalist den Chat betritt, ohne dass die Quelle dabei ihre Anonymität " +"gefährdet." #: ../../source/features.rst:169 msgid "How does the encryption work?" diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/tor.po b/docs/source/locale/sr@latin/LC_MESSAGES/tor.po index f73d3756..90160a42 100644 --- a/docs/source/locale/sr@latin/LC_MESSAGES/tor.po +++ b/docs/source/locale/sr@latin/LC_MESSAGES/tor.po @@ -3,23 +3,26 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-12-13 15:48-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-11-27 22:53+0000\n" +"Last-Translator: tics tics \n" "Language-Team: LANGUAGE \n" +"Language: sr@latin\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.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 msgid "Connecting to Tor" -msgstr "" +msgstr "Povezivanje sa Tor-om" #: ../../source/tor.rst:4 msgid "" @@ -36,6 +39,9 @@ msgid "" "This is the default, simplest and most reliable way that OnionShare " "connects to Tor. For this reason, it's recommended for most users." msgstr "" +"Ovo je podrazumevani, naj jednostavniji i najpouzdaniji način na koji se " +"OnionShare povezuje sa Tor-om. Iz tog razloga se preporučuje većini " +"korisnika." #: ../../source/tor.rst:14 msgid "" @@ -44,10 +50,13 @@ msgid "" "with other ``tor`` processes on your computer, so you can use the Tor " "Browser or the system ``tor`` on their own." msgstr "" +"Kada otvorite OnionShare, on pokreće već konfigurisani ``tor`` proces u " +"pozadini koji OnionShare koristi. Ne ometa druge ``tor`` procese na vašem " +"računaru, tako da možete koristiti Tor Browser ili sistem ``tor`` nezavisno." #: ../../source/tor.rst:18 msgid "Attempt auto-configuration with Tor Browser" -msgstr "" +msgstr "Pokušaj automatsku konfiguraciju Tor Browser-a" #: ../../source/tor.rst:20 msgid "" @@ -56,16 +65,22 @@ msgid "" "process from the Tor Browser. Keep in mind you need to keep Tor Browser " "open in the background while you're using OnionShare for this to work." msgstr "" +"Ako ste `preuzeli Tor Browser https://www.torproject.org`_ i ne želite da se " +"pokreću dva ``tor`` procesa, možete koristiti proces ``tor`` iz Tor Browser-" +"a. Imajte na umu da trebate držati Tor Browser otvoren u pozadini dok " +"koristite OnionShare da bi ovo funkcionisalo." #: ../../source/tor.rst:24 msgid "Using a system ``tor`` in Windows" -msgstr "" +msgstr "Korišćenje sistemskog ``tor`` u Windows-u" #: ../../source/tor.rst:26 msgid "" "This is fairly advanced. You'll need to know how edit plaintext files and" " do stuff as an administrator." msgstr "" +"Ovo je dosta napredno. Morate znati kako da uređujete tekstualne datoteke uz " +"korišćenje administratorskih privilegija." #: ../../source/tor.rst:28 msgid "" @@ -74,6 +89,10 @@ msgid "" " and copy the extracted folder to ``C:\\Program Files (x86)\\`` Rename " "the extracted folder with ``Data`` and ``Tor`` in it to ``tor-win32``." msgstr "" +"Preuzmite Tor Windows Expert Bundle `sa https://www.torproject.org/download/" +"tor/`_. Otpakujte kompresovanu datoteku i kopirajte dobijeni direktorijum u " +"``C:\\\\Program Files (x86)\\\\`` Preimenujte direktorijum koji sadrži " +"``Data`` i ``Tor`` u novo ime``tor-win32``." #: ../../source/tor.rst:32 msgid "" @@ -83,6 +102,11 @@ msgid "" "administrator, and use ``tor.exe --hash-password`` to generate a hash of " "your password. For example::" msgstr "" +"Napravite lozinku za control port. (Korišćenje 7 reči u nizu kao što je ``" +"comprised stumble rummage work avenging construct volatile`` je dobra ideja " +"za lozinku.) Sada otvorite komandnu liniju (``cmd``) kao administrator i " +"koristite ``tor. exe --hash-password`` da generišete hash vaše lozinke. Na " +"primer::" #: ../../source/tor.rst:39 msgid "" @@ -90,6 +114,9 @@ msgid "" "can ignore). In the case of the above example, it is " "``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." msgstr "" +"Izlaz hashed lozinke se prikazuje nakon nekih upozorenja (koja možete " +"zanemariti). U slučaju gornjeg primera, to je " +"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``." #: ../../source/tor.rst:41 msgid "" @@ -97,6 +124,9 @@ msgid "" "win32\\torrc`` and put your hashed password output in it, replacing the " "``HashedControlPassword`` with the one you just generated::" msgstr "" +"Sada kreirajte novu tekstualnu datoteku na ``C:\\\\Program Files (x86" +")\\\\tor-win32\\\\torrc`` i unesite svoju hashed lozinku u nju, zamenjujući " +"``HashedControlPassword`` s onom koju ste upravo generisali::" #: ../../source/tor.rst:46 msgid "" @@ -105,10 +135,14 @@ msgid "" "``_). Like " "this::" msgstr "" +"U administratorskoj komandnoj liniji, instalirajte ``tor`` kao servis " +"koristeći odgovarajuću datoteku ``torrc`` koju ste upravo kreirali (kako je " +"opisano u `https://2019.www.torproject.org/docs/faq.html. en#NTService`_). " +"Kao ovo::" #: ../../source/tor.rst:50 msgid "You are now running a system ``tor`` process in Windows!" -msgstr "" +msgstr "Sada imate pokrenut sistemski ``tor`` proces u Windows-u!" #: ../../source/tor.rst:52 msgid "" @@ -120,24 +154,33 @@ msgid "" "Connection to Tor\" button. If all goes well, you should see \"Connected " "to the Tor controller\"." msgstr "" +"Otvorite OnionShare i kliknite na ikonu '⚙' u njemu. Pod 'Kako bi se " +"OnionShare trebao povezati s Torom?' odaberite 'Poveži se pomoću kontrolnog " +"porta' i postavite 'Kontrolni port' na ``127.0.0.1`` i 'Port' na ``9051``. " +"Pod 'Postavke autentifikacije Tor-a' odaberite 'Lozinka' i postavite lozinku " +"na lozinku kontrolnog porta koju ste odabrali gore. Kliknite na dugme 'Test " +"Connection to Tor'. Ako sve prođe kako treba, trebali biste videti 'Povezano " +"s Tor kontrolerom'." #: ../../source/tor.rst:61 msgid "Using a system ``tor`` in macOS" -msgstr "" +msgstr "Korišćenje sistema ``tor`` u macOS-u" #: ../../source/tor.rst:63 msgid "" "First, install `Homebrew `_ if you don't already have " "it, and then install Tor::" msgstr "" +"Prvo instalirajte `Homebrew https://brew.sh/`_ ako ga već nemate, a zatim " +"instalirajte Tor::" #: ../../source/tor.rst:67 msgid "Now configure Tor to allow connections from OnionShare::" -msgstr "" +msgstr "Sada konfigurišite Tor da dozvoli konekcije sa OnionShare::" #: ../../source/tor.rst:74 msgid "And start the system Tor service::" -msgstr "" +msgstr "I pokrenite sistemski Tor servis::" #: ../../source/tor.rst:78 msgid "" @@ -147,14 +190,21 @@ msgid "" "Under \"Tor authentication settings\" choose \"No authentication, or " "cookie authentication\". Click the \"Test Connection to Tor\" button." msgstr "" +"Otvorite OnionShare i kliknite na ikonu '⚙' u njemu. Pod 'Kako bi se " +"OnionShare trebao povezati s Torom?' odaberite 'Poveži se pomoću datoteke " +"socketa' i postavite datoteku socketa na ``/usr/local/var/run/tor/control." +"socket``. U odeljku 'Tor autentifikacijske postavke' odaberite 'Bez " +"autentifikacije ili autentifikacije putem kolačića'. Kliknite na dugme 'Test " +"Connection to Tor'." #: ../../source/tor.rst:84 ../../source/tor.rst:104 msgid "If all goes well, you should see \"Connected to the Tor controller\"." msgstr "" +"Ako sve prođe kako treba, trebali biste videti 'Povezano s Tor kontrolerom'." #: ../../source/tor.rst:87 msgid "Using a system ``tor`` in Linux" -msgstr "" +msgstr "Korišćenje sistemskog ``tor`` na Linuxu" #: ../../source/tor.rst:89 msgid "" @@ -163,6 +213,9 @@ msgid "" "`official repository `_." msgstr "" +"Prvo instalirajte ``tor`` paket. Ako koristite Debian, Ubuntu ili sličnu " +"Linux distribuciju, preporučuje se korišćenje `official repository projekta " +"Tor https://support.torproject.org/apt/tor-deb-repo/`_." #: ../../source/tor.rst:91 msgid "" @@ -170,12 +223,17 @@ msgid "" "case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to " "connect to your system ``tor``'s control socket file." msgstr "" +"Zatim dodajte svog korisnika u grupu koja pokreće proces ``tor`` (u slučaju " +"Debiana i Ubuntua, ``debian-tor``) i konfigurišite OnionShare da se poveže " +"sa vašim sistemom ``tor`` control socket file." #: ../../source/tor.rst:93 msgid "" "Add your user to the ``debian-tor`` group by running this command " "(replace ``username`` with your actual username)::" msgstr "" +"Dodajte svog korisnika u grupu ``debian-tor`` pokretanjem ove komande (" +"zamenite ``username`` svojim stvarnim korisničkim imenom)::" #: ../../source/tor.rst:97 msgid "" @@ -186,6 +244,12 @@ msgid "" "\"No authentication, or cookie authentication\". Click the \"Test " "Connection to Tor\" button." msgstr "" +"Ponovo pokrenite računar. Nakon što se ponovo pokrene, otvorite OnionShare i " +"kliknite na ikonu '⚙' u njemu. Pod 'Kako bi se OnionShare trebao povezati s " +"Torom?' izaberite 'Poveži se koristeći socket file'. Postavite socket file " +"na ``/var/run/tor/control``. U odeljku 'Tor autentifikacijske postavke' " +"odaberite 'Bez autentifikacije ili autentifikacije putem kolačića'. Kliknite " +"na dugme 'Test Connection to Tor'." #: ../../source/tor.rst:107 msgid "Using Tor bridges" @@ -443,4 +507,3 @@ msgstr "" #~ "if you don't already have it. " #~ "Then, install Tor::" #~ msgstr "" - -- cgit v1.2.3-54-g00ecf From 109d63a10c90c656409c6a3d66e146becc151b0b Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 1 Dec 2021 20:10:51 -0800 Subject: Use NamedTemporaryFile instead of TemporaryFile, to fix crash when sharing one file --- cli/onionshare_cli/web/share_mode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py index 09799679..75c11a83 100644 --- a/cli/onionshare_cli/web/share_mode.py +++ b/cli/onionshare_cli/web/share_mode.py @@ -467,7 +467,7 @@ class ShareModeWeb(SendBaseModeWeb): return self.web.error404(history_id) def build_zipfile_list(self, filenames, processed_size_callback=None): - self.common.log("ShareModeWeb", "build_zipfile_list") + self.common.log("ShareModeWeb", "build_zipfile_list", f"filenames={filenames}") for filename in filenames: info = { "filename": filename, @@ -492,7 +492,7 @@ class ShareModeWeb(SendBaseModeWeb): self.download_etag = make_etag(f) # Compress the file with gzip now, so we don't have to do it on each request - self.gzip_file = tempfile.TemporaryFile( + self.gzip_file = tempfile.NamedTemporaryFile( "wb+", dir=self.common.build_tmp_dir() ) self._gzip_compress( -- cgit v1.2.3-54-g00ecf From 8ec9a24af1402b0c86b1e811b5e6925d39d3bcdb Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 1 Dec 2021 20:34:54 -0800 Subject: Explicitly cleanup temp files and dirs --- cli/onionshare_cli/onionshare.py | 7 +++---- cli/onionshare_cli/web/send_base_mode.py | 3 +++ cli/onionshare_cli/web/share_mode.py | 11 +++++++++-- cli/onionshare_cli/web/web.py | 29 ++++++++++++++++------------- desktop/src/onionshare/tab/tab.py | 13 ++++++------- desktop/src/onionshare/tab_widget.py | 1 + 6 files changed, 38 insertions(+), 26 deletions(-) diff --git a/cli/onionshare_cli/onionshare.py b/cli/onionshare_cli/onionshare.py index c2711b89..2bb22296 100644 --- a/cli/onionshare_cli/onionshare.py +++ b/cli/onionshare_cli/onionshare.py @@ -40,9 +40,6 @@ class OnionShare(object): self.onion_host = None self.port = None - # files and dirs to delete on shutdown - self.cleanup_filenames = [] - # do not use tor -- for development self.local_only = local_only @@ -75,7 +72,9 @@ class OnionShare(object): if self.local_only: self.onion_host = f"127.0.0.1:{self.port}" if not mode_settings.get("general", "public"): - self.auth_string = "E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA" + self.auth_string = ( + "E2GOT5LTUTP3OAMRCRXO4GSH6VKJEUOXZQUC336SRKAHTTT5OVSA" + ) return self.onion_host = self.onion.start_onion_service( diff --git a/cli/onionshare_cli/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py index 7b587182..d786b8b5 100644 --- a/cli/onionshare_cli/web/send_base_mode.py +++ b/cli/onionshare_cli/web/send_base_mode.py @@ -202,6 +202,9 @@ class SendBaseModeWeb: file_to_download = self.gzip_individual_files[filesystem_path] filesize = os.path.getsize(self.gzip_individual_files[filesystem_path]) + + # Cleanup this temp file + self.web.cleanup_tempfiles.append(gzip_file) else: file_to_download = filesystem_path filesize = os.path.getsize(filesystem_path) diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py index 75c11a83..d655255e 100644 --- a/cli/onionshare_cli/web/share_mode.py +++ b/cli/onionshare_cli/web/share_mode.py @@ -504,10 +504,13 @@ class ShareModeWeb(SendBaseModeWeb): self.is_zipped = False + # Cleanup this tempfile + self.web.cleanup_tempfiles.append(self.gzip_file) + else: # Zip up the files and folders self.zip_writer = ZipWriter( - self.common, processed_size_callback=processed_size_callback + self.common, self.web, processed_size_callback=processed_size_callback ) self.download_filename = self.zip_writer.zip_filename for info in self.file_info["files"]: @@ -538,8 +541,9 @@ class ZipWriter(object): filename. """ - def __init__(self, common, zip_filename=None, processed_size_callback=None): + def __init__(self, common, web, zip_filename=None, processed_size_callback=None): self.common = common + self.web = web self.cancel_compression = False if zip_filename: @@ -550,6 +554,9 @@ class ZipWriter(object): ) self.zip_filename = f"{self.zip_temp_dir.name}/onionshare_{self.common.random_string(4, 6)}.zip" + # Cleanup this temp dir + self.web.cleanup_tempdirs.append(self.zip_temp_dir) + self.z = zipfile.ZipFile(self.zip_filename, "w", allowZip64=True) self.processed_size_callback = processed_size_callback if self.processed_size_callback is None: diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py index e12fccc7..fe2dee87 100644 --- a/cli/onionshare_cli/web/web.py +++ b/cli/onionshare_cli/web/web.py @@ -155,7 +155,8 @@ class Web: self.socketio.init_app(self.app) self.chat_mode = ChatModeWeb(self.common, self) - self.cleanup_filenames = [] + self.cleanup_tempfiles = [] + self.cleanup_tempdirs = [] def get_mode(self): if self.mode == "share": @@ -199,7 +200,10 @@ class Web: for header, value in self.security_headers: r.headers.set(header, value) # Set a CSP header unless in website mode and the user has disabled it - if not self.settings.get("website", "disable_csp") or self.mode != "website": + if ( + not self.settings.get("website", "disable_csp") + or self.mode != "website" + ): r.headers.set( "Content-Security-Policy", "default-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; img-src 'self' data:;", @@ -380,14 +384,13 @@ class Web: """ self.common.log("Web", "cleanup") - # Cleanup files - try: - for filename in self.cleanup_filenames: - if os.path.isfile(filename): - os.remove(filename) - elif os.path.isdir(filename): - shutil.rmtree(filename) - except Exception: - # Don't crash if file is still in use - pass - self.cleanup_filenames = [] + # Close all of the tempfile.NamedTemporaryFile + for file in self.cleanup_tempfiles: + file.close() + + # Clean up the tempfile.NamedTemporaryDirectory objects + for dir in self.cleanup_tempdirs: + dir.cleanup() + + self.cleanup_tempfiles = [] + self.cleanup_tempdirs = [] diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py index 2e592771..b0aa25df 100644 --- a/desktop/src/onionshare/tab/tab.py +++ b/desktop/src/onionshare/tab/tab.py @@ -660,9 +660,6 @@ class Tab(QtWidgets.QWidget): # Close if self.close_dialog.clickedButton() == self.close_dialog.accept_button: - self.common.log("Tab", "close_tab", "close, closing tab") - self.get_mode().stop_server() - self.get_mode().web.cleanup() return True # Cancel else: @@ -671,8 +668,10 @@ class Tab(QtWidgets.QWidget): def cleanup(self): self.common.log("Tab", "cleanup", f"tab_id={self.tab_id}") - if self.get_mode() and self.get_mode().web_thread: - self.get_mode().web.stop(self.get_mode().app.port) - self.get_mode().web_thread.quit() - self.get_mode().web_thread.wait() + if self.get_mode(): + if self.get_mode().web_thread: + self.get_mode().web.stop(self.get_mode().app.port) + self.get_mode().web_thread.quit() + self.get_mode().web_thread.wait() + self.get_mode().web.cleanup() diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py index 7162fcc4..c43a9b9a 100644 --- a/desktop/src/onionshare/tab_widget.py +++ b/desktop/src/onionshare/tab_widget.py @@ -316,6 +316,7 @@ class TabWidget(QtWidgets.QTabWidget): self.common.log("TabWidget", "closing a service tab") if tab.close_tab(): self.common.log("TabWidget", "user is okay with closing the tab") + tab.cleanup() # If the tab is persistent, delete the settings file from disk if tab.settings.get("persistent", "enabled"): -- cgit v1.2.3-54-g00ecf From b3d53ca2f2594fec59b5daea12768984a28e3e66 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 1 Dec 2021 21:01:32 -0800 Subject: Fix CLI tests --- cli/onionshare_cli/web/share_mode.py | 7 ++++-- cli/tests/conftest.py | 25 +++++++++++---------- cli/tests/test_cli_settings.py | 4 ++-- cli/tests/test_cli_web.py | 42 +++++++++++++++++++++++------------- 4 files changed, 46 insertions(+), 32 deletions(-) diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py index d655255e..38f3f78d 100644 --- a/cli/onionshare_cli/web/share_mode.py +++ b/cli/onionshare_cli/web/share_mode.py @@ -541,7 +541,9 @@ class ZipWriter(object): filename. """ - def __init__(self, common, web, zip_filename=None, processed_size_callback=None): + def __init__( + self, common, web=None, zip_filename=None, processed_size_callback=None + ): self.common = common self.web = web self.cancel_compression = False @@ -555,7 +557,8 @@ class ZipWriter(object): self.zip_filename = f"{self.zip_temp_dir.name}/onionshare_{self.common.random_string(4, 6)}.zip" # Cleanup this temp dir - self.web.cleanup_tempdirs.append(self.zip_temp_dir) + if self.web: + self.web.cleanup_tempdirs.append(self.zip_temp_dir) self.z = zipfile.ZipFile(self.zip_filename, "w", allowZip64=True) self.processed_size_callback = processed_size_callback diff --git a/cli/tests/conftest.py b/cli/tests/conftest.py index 37b929ec..f4d51f9d 100644 --- a/cli/tests/conftest.py +++ b/cli/tests/conftest.py @@ -37,7 +37,7 @@ def temp_dir(): """Creates a persistent temporary directory for the CLI tests to use""" global test_temp_dir if not test_temp_dir: - test_temp_dir = tempfile.mkdtemp() + test_temp_dir = tempfile.TemporaryDirectory() return test_temp_dir @@ -47,10 +47,9 @@ def temp_dir_1024(temp_dir): particular size (1024 bytes). """ - new_temp_dir = tempfile.mkdtemp(dir=temp_dir) - tmp_file, tmp_file_path = tempfile.mkstemp(dir=new_temp_dir) - with open(tmp_file, "wb") as f: - f.write(b"*" * 1024) + new_temp_dir = tempfile.TemporaryDirectory(dir=temp_dir.name) + tmp_file = tempfile.NamedTemporaryFile(dir=new_temp_dir.name) + tmp_file.write(b"*" * 1024) return new_temp_dir @@ -61,9 +60,8 @@ def temp_dir_1024_delete(temp_dir): the file inside) will be deleted after fixture usage. """ - with tempfile.TemporaryDirectory(dir=temp_dir) as new_temp_dir: - tmp_file, tmp_file_path = tempfile.mkstemp(dir=new_temp_dir) - with open(tmp_file, "wb") as f: + with tempfile.TemporaryDirectory(dir=temp_dir.name) as new_temp_dir: + with open(os.path.join(new_temp_dir, "file"), "wb") as f: f.write(b"*" * 1024) yield new_temp_dir @@ -72,9 +70,10 @@ def temp_dir_1024_delete(temp_dir): def temp_file_1024(temp_dir): """Create a temporary file of a particular size (1024 bytes).""" - with tempfile.NamedTemporaryFile(delete=False, dir=temp_dir) as tmp_file: - tmp_file.write(b"*" * 1024) - return tmp_file.name + filename = os.path.join(temp_dir.name, "file") + with open(filename, "wb") as f: + f.write(b"*" * 1024) + return filename @pytest.fixture @@ -84,11 +83,11 @@ def temp_file_1024_delete(temp_dir): The temporary file will be deleted after fixture usage. """ - with tempfile.NamedTemporaryFile(dir=temp_dir, delete=False) as tmp_file: + with tempfile.NamedTemporaryFile(dir=temp_dir.name, delete=False) as tmp_file: tmp_file.write(b"*" * 1024) tmp_file.flush() tmp_file.close() - yield tmp_file.name + yield tmp_file @pytest.fixture(scope="session") diff --git a/cli/tests/test_cli_settings.py b/cli/tests/test_cli_settings.py index 9513b013..4a4e6fd0 100644 --- a/cli/tests/test_cli_settings.py +++ b/cli/tests/test_cli_settings.py @@ -54,7 +54,7 @@ class TestSettings: "socks_port": 9999, "use_stealth": True, } - tmp_file, tmp_file_path = tempfile.mkstemp(dir=temp_dir) + tmp_file, tmp_file_path = tempfile.mkstemp(dir=temp_dir.name) with open(tmp_file, "w") as f: json.dump(custom_settings, f) settings_obj.filename = tmp_file_path @@ -69,7 +69,7 @@ class TestSettings: def test_save(self, monkeypatch, temp_dir, settings_obj): settings_filename = "default_settings.json" - new_temp_dir = tempfile.mkdtemp(dir=temp_dir) + new_temp_dir = tempfile.mkdtemp(dir=temp_dir.name) settings_path = os.path.join(new_temp_dir, settings_filename) settings_obj.filename = settings_path settings_obj.save() diff --git a/cli/tests/test_cli_web.py b/cli/tests/test_cli_web.py index 71bfeeeb..e93e3e33 100644 --- a/cli/tests/test_cli_web.py +++ b/cli/tests/test_cli_web.py @@ -50,7 +50,8 @@ def web_obj(temp_dir, common_obj, mode, num_files=0): web = Web(common_obj, False, mode_settings, mode) web.running = True - web.cleanup_filenames == [] + web.cleanup_tempfiles == [] + web.cleanup_tempdirs == [] web.app.testing = True # Share mode @@ -58,7 +59,9 @@ def web_obj(temp_dir, common_obj, mode, num_files=0): # Add files files = [] for _ in range(num_files): - with tempfile.NamedTemporaryFile(delete=False, dir=temp_dir) as tmp_file: + with tempfile.NamedTemporaryFile( + delete=False, dir=temp_dir.name + ) as tmp_file: tmp_file.write(b"*" * 1024) files.append(tmp_file.name) web.share_mode.set_file_info(files) @@ -131,7 +134,9 @@ class TestWeb: with web.app.test_client() as c: # Load / with valid auth - res = c.get("/",) + res = c.get( + "/", + ) res.get_data() assert res.status_code == 200 @@ -169,7 +174,7 @@ class TestWeb: def test_receive_mode_message_no_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") - data_dir = os.path.join(temp_dir, "OnionShare") + data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) @@ -200,7 +205,7 @@ class TestWeb: def test_receive_mode_message_and_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") - data_dir = os.path.join(temp_dir, "OnionShare") + data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) @@ -235,7 +240,7 @@ class TestWeb: def test_receive_mode_files_no_message(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") - data_dir = os.path.join(temp_dir, "OnionShare") + data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) @@ -267,7 +272,7 @@ class TestWeb: def test_receive_mode_no_message_no_files(self, temp_dir, common_obj): web = web_obj(temp_dir, common_obj, "receive") - data_dir = os.path.join(temp_dir, "OnionShare") + data_dir = os.path.join(temp_dir.name, "OnionShare") os.makedirs(data_dir, exist_ok=True) web.settings.set("receive", "data_dir", data_dir) @@ -300,15 +305,21 @@ class TestWeb: res.get_data() assert res.status_code == 200 - def test_cleanup(self, common_obj, temp_dir_1024, temp_file_1024): + def test_cleanup(self, common_obj, temp_dir_1024): web = web_obj(temp_dir_1024, common_obj, "share", 3) - web.cleanup_filenames = [temp_dir_1024, temp_file_1024] + temp_file = tempfile.NamedTemporaryFile() + temp_dir = tempfile.TemporaryDirectory() + + web.cleanup_tempfiles = [temp_file] + web.cleanup_tempdirs = [temp_dir] web.cleanup() - assert os.path.exists(temp_file_1024) is False - assert os.path.exists(temp_dir_1024) is False - assert web.cleanup_filenames == [] + assert os.path.exists(temp_file.name) is False + assert os.path.exists(temp_dir.name) is False + + assert web.cleanup_tempfiles == [] + assert web.cleanup_tempdirs == [] class TestZipWriterDefault: @@ -339,8 +350,10 @@ class TestZipWriterDefault: assert default_zw.processed_size_callback(None) is None def test_add_file(self, default_zw, temp_file_1024_delete): - default_zw.add_file(temp_file_1024_delete) - zipfile_info = default_zw.z.getinfo(os.path.basename(temp_file_1024_delete)) + default_zw.add_file(temp_file_1024_delete.name) + zipfile_info = default_zw.z.getinfo( + os.path.basename(temp_file_1024_delete.name) + ) assert zipfile_info.compress_type == zipfile.ZIP_DEFLATED assert zipfile_info.file_size == 1024 @@ -568,7 +581,6 @@ class TestRangeRequests: resp = client.get(url, headers=headers) assert resp.status_code == 206 - @pytest.mark.skipif(sys.platform != "linux", reason="requires Linux") @check_unsupported("curl", ["--version"]) def test_curl(self, temp_dir, tmpdir, common_obj): -- cgit v1.2.3-54-g00ecf From 1dde6f6debb8c9b21e63b40d5bea81b5217d2461 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 2 Dec 2021 18:51:06 -0800 Subject: Add temp file to cleanup list just once when its first created --- cli/onionshare_cli/web/send_base_mode.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/onionshare_cli/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py index d786b8b5..d0fccf06 100644 --- a/cli/onionshare_cli/web/send_base_mode.py +++ b/cli/onionshare_cli/web/send_base_mode.py @@ -200,11 +200,11 @@ class SendBaseModeWeb: self._gzip_compress(filesystem_path, gzip_file.name, 6, None) self.gzip_individual_files[filesystem_path] = gzip_file.name + # Cleanup this temp file + self.web.cleanup_tempfiles.append(gzip_file) + file_to_download = self.gzip_individual_files[filesystem_path] filesize = os.path.getsize(self.gzip_individual_files[filesystem_path]) - - # Cleanup this temp file - self.web.cleanup_tempfiles.append(gzip_file) else: file_to_download = filesystem_path filesize = os.path.getsize(filesystem_path) -- cgit v1.2.3-54-g00ecf From 50a603ac02f2d8ae30499bc900b7ae54c08d67ef Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Fri, 10 Dec 2021 03:52:16 +0100 Subject: Translated using Weblate (Japanese) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (7 of 7 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (8 of 8 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Japanese) Currently translated at 100.0% (30 of 30 strings) Translated using Weblate (Japanese) Currently translated at 83.3% (25 of 30 strings) Translated using Weblate (German) Currently translated at 100.0% (27 of 27 strings) Translated using Weblate (German) Currently translated at 100.0% (28 of 28 strings) Translated using Weblate (German) Currently translated at 100.0% (57 of 57 strings) Translated using Weblate (Swedish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/sv/ Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (24 of 24 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (33 of 33 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (28 of 28 strings) Translated using Weblate (Portuguese (Brazil)) Currently translated at 100.0% (60 of 60 strings) Translated using Weblate (Portuguese (Brazil)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/pt_BR/ Translated using Weblate (Greek) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/el/ Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Co-authored-by: Gabriel Cardoso Co-authored-by: Hosted Weblate Co-authored-by: Jannes Leßmann Co-authored-by: M Co-authored-by: Taro Tanaka Co-authored-by: Venilson Carneiro Co-authored-by: aezjrareareare Co-authored-by: george kitsoukakis Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/de/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-develop/de/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/de/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-help/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-install/pt_BR/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-sphinx/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/pt_BR/ Translation: OnionShare/Doc - Advanced Translation: OnionShare/Doc - Develop Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Help Translation: OnionShare/Doc - Index Translation: OnionShare/Doc - Install Translation: OnionShare/Doc - Security Translation: OnionShare/Doc - Sphinx Translation: OnionShare/Doc - Tor --- desktop/src/onionshare/resources/locale/el.json | 37 +++++++++-- desktop/src/onionshare/resources/locale/fr.json | 37 +++++++++-- desktop/src/onionshare/resources/locale/pt_BR.json | 37 +++++++++-- desktop/src/onionshare/resources/locale/sv.json | 5 +- docs/source/locale/de/LC_MESSAGES/advanced.po | 47 +++++++------ docs/source/locale/de/LC_MESSAGES/develop.po | 9 ++- docs/source/locale/de/LC_MESSAGES/features.po | 33 +++++----- docs/source/locale/ja/LC_MESSAGES/features.po | 76 +++++++++++++++------- docs/source/locale/ja/LC_MESSAGES/help.po | 25 +++---- docs/source/locale/ja/LC_MESSAGES/index.po | 15 +++-- docs/source/locale/ja/LC_MESSAGES/security.po | 29 ++++++--- docs/source/locale/ja/LC_MESSAGES/sphinx.po | 15 +++-- docs/source/locale/pt_BR/LC_MESSAGES/advanced.po | 15 ++++- docs/source/locale/pt_BR/LC_MESSAGES/features.po | 30 ++++++--- docs/source/locale/pt_BR/LC_MESSAGES/install.po | 9 ++- docs/source/locale/pt_BR/LC_MESSAGES/tor.po | 32 ++++++--- 16 files changed, 309 insertions(+), 142 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json index b195869c..d47d92d2 100644 --- a/desktop/src/onionshare/resources/locale/el.json +++ b/desktop/src/onionshare/resources/locale/el.json @@ -90,16 +90,16 @@ "gui_settings_authenticate_no_auth_option": "Χωρίς επαλήθευση ή επαλήθευση με cookie", "gui_settings_authenticate_password_option": "Κωδικός", "gui_settings_password_label": "Κωδικός", - "gui_settings_tor_bridges": "Υποστήριξη γεφυρών Tor", + "gui_settings_tor_bridges": "Σύνδεση με χρήση γέφυρας Tor;", "gui_settings_tor_bridges_no_bridges_radio_option": "Να μη χρησιμοποιηθούν γέφυρες", "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": "Προσοχή: Τα meek_lite bridges επιβαρύνουν πολύ το Tor Project στη λειτουργία.

Χρησιμοποιήστε τα μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών bridges.", + "gui_settings_meek_lite_expensive_warning": "Προσοχή: Οι γέφυρες meek_azure επιβαρύνουν τη λειτουργία του Tor Project.

Χρησιμοποιήστε τες μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών γεφυρών.", "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων γεφυρών", "gui_settings_tor_bridges_custom_label": "Αποκτήστε γέφυρες στο https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Δεν λειτούργησε κάποιο από τα bridges που προσθέσατε.\nΞαναελέγξτε τα ή προσθέστε άλλα.", + "gui_settings_tor_bridges_invalid": "Καμία γέφυρα που προσθέσατε δεν λειτουργεί. Ελέγξτε ξανά ή προσθέστε άλλες.", "gui_settings_button_save": "Αποθήκευση", "gui_settings_button_cancel": "Άκυρο", "gui_settings_button_help": "Βοήθεια", @@ -178,7 +178,7 @@ "gui_upload_finished": "", "gui_download_in_progress": "", "gui_open_folder_error_nautilus": "Δεν μπορεί να ανοιχτεί ο φάκελος γιατί το nautilus δεν είναι διαθέσιμο. Το αρχείο είναι εδω: {}", - "gui_settings_language_label": "Προτιμώμενη γλώσσα", + "gui_settings_language_label": "Γλώσσα", "gui_settings_language_changed_notice": "Επανεκκινήστε το OnionShare για να εφαρμοστεί η αλλαγή γλώσσας.", "timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος", "gui_add_files": "Προσθήκη αρχείων", @@ -237,7 +237,7 @@ "gui_receive_flatpak_data_dir": "Επειδή έχετε εγκαταστήσει το OnionShare μέσω Flatpak, θα πρέπει να αποθηκεύσετε τα αρχεία μέσα σε έναν φάκελο στο ~/OnionShare.", "gui_chat_stop_server": "Τερματισμός διακομιστή συνομιλίας", "gui_chat_start_server": "Έναρξη διακομιστή συνομιλίας", - "mode_settings_website_disable_csp_checkbox": "Μην στέλνετε κεφαλίδα με περιεχόμενο από την πολιτικής ασφάλειας σας (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)", + "mode_settings_website_disable_csp_checkbox": "Μην στέλνετε την προεπιλεγμένη κεφαλίδα Πολιτικής Ασφάλειας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)", "mode_settings_receive_data_dir_browse_button": "Επιλογή", "mode_settings_receive_data_dir_label": "Αποθήκευση αρχείων σε", "mode_settings_share_autostop_sharing_checkbox": "Τερματισμός κοινής χρήσης με την ολοκλήρωση αρχείων (αποεπιλέξτε για λήψη μεμονωμένων αρχείων)", @@ -309,5 +309,30 @@ "gui_settings_theme_dark": "Σκοτεινό", "gui_url_instructions": "Αρχικά, στείλτε την παρακάτω διεύθυνση OnionShare:", "gui_settings_theme_light": "Φωτεινό", - "gui_client_auth_instructions": "Στη συνέχεια, στείλτε το ιδιωτικό κλειδί για πρόσβαση στην υπηρεσία OnionShare:" + "gui_client_auth_instructions": "Στη συνέχεια, στείλτε το ιδιωτικό κλειδί για πρόσβαση στην υπηρεσία OnionShare:", + "gui_dragdrop_sandbox_flatpak": "Για να γίνει πιο ασφαλές το sandbox του Flatpak, δεν υποστηρίζεται η μεταφορά και απόθεση. Χρησιμοποιήστε τα κουμπιά Προσθήκη αρχείων και Προσθήκη φακέλου για να αναζητήσετε αρχεία.", + "moat_captcha_label": "Λύστε το CAPTCHA για να αιτηθείτε μια γέφυρα.", + "gui_settings_tor_bridges_label": "Οι γέφυρες σας βοηθούν να αποκτήσετε πρόσβαση στο δίκτυο Tor σε τοποθεσίες όπου είναι αποκλεισμένο. Ανάλογα με το πού βρίσκεστε, μια γέφυρα μπορεί να λειτουργεί καλύτερα από μια άλλη.", + "moat_captcha_submit": "Υποβολή", + "moat_solution_empty_error": "Πρέπει να εισαγάγετε τους χαρακτήρες από την εικόνα", + "moat_contact_label": "Επικοινωνία με BridgeDB...", + "gui_tor_settings_window_title": "Ρυθμίσεις Tor", + "gui_settings_controller_extras_label": "Ρυθμίσεις Tor", + "gui_settings_bridge_use_checkbox": "Χρήση γέφυρας", + "gui_settings_bridge_radio_builtin": "Επιλέξτε μια ενσωματωμένη γέφυρα", + "gui_settings_bridge_none_radio_option": "Χωρίς χρήση γέφυρας", + "gui_settings_bridge_moat_radio_option": "Αιτηθείτε μια γέφυρα από torproject.org", + "gui_settings_bridge_moat_button": "Αίτημα για νέα γέφυρα", + "gui_settings_bridge_custom_radio_option": "Προτείνετε μια γέφυρα για την οποία ενημερωθήκατε από αξιόπιστη πηγή", + "gui_settings_bridge_custom_placeholder": "πληκτρολογήστε διεύθυνση: πόρτα (μια ανά γραμμή)", + "gui_settings_moat_bridges_invalid": "Δεν έχετε αιτηθεί ακόμα γέφυρα από το torproject.org.", + "gui_settings_stop_active_tabs_label": "Υπάρχουν υπηρεσίες που εκτελούνται σε ορισμένες από τις καρτέλες σας.\nΠρέπει να σταματήσετε όλες τις υπηρεσίες για να αλλάξετε τις ρυθμίσεις του Tor.", + "gui_settings_version_label": "Χρησιμοποιείτε το OnionShare {}", + "gui_settings_help_label": "Χρειάζεστε βοήθεια; Δείτε το docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Αποστολή προσαρμοσμένης κεφαλίδας Πολιτικής Ασφαλείας Περιεχομένου", + "moat_captcha_placeholder": "Εισαγάγετε τους χαρακτήρες από την εικόνα", + "moat_captcha_reload": "Επαναφόρτωση", + "moat_bridgedb_error": "Σφάλμα επικοινωνίας με BridgeDB.", + "moat_captcha_error": "Η λύση δεν είναι σωστή. Παρακαλούμε δοκιμάστε ξανά.", + "mode_tor_not_connected_label": "Το OnionShare δεν είναι συνδεδεμένο με το δίκτυο Tor" } diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json index fdbd6ae4..2441c821 100644 --- a/desktop/src/onionshare/resources/locale/fr.json +++ b/desktop/src/onionshare/resources/locale/fr.json @@ -80,10 +80,10 @@ "gui_settings_connection_type_test_button": "Tester la connexion à Tor", "gui_settings_control_port_label": "Port de contrôle", "gui_settings_authenticate_label": "Paramètres d’authentification de Tor", - "gui_settings_tor_bridges": "Prise en charge des ponts de Tor", + "gui_settings_tor_bridges": "Se connecter en utilisant un pont Tor ?", "gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés", "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne.\nVérifiez-les de nouveau ou ajoutez-en d’autres.", + "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne. Vérifiez-les de nouveau ou ajoutez-en d’autres.", "settings_error_unknown": "Impossible de se connecter au contrôleur Tor, car vos paramètres sont incohérents.", "settings_error_automatic": "Impossible de se connecter au contrôleur Tor. Le Navigateur Tor (téléchargeable sur torproject.org/fr) fonctionne-t-il en arrière-plan ?", "settings_error_socket_port": "Impossible de se connecter au contrôleur Tor à {}:{}.", @@ -140,7 +140,7 @@ "gui_upload_finished": "{} envoyé", "gui_download_in_progress": "Téléchargement démarré {}", "gui_open_folder_error_nautilus": "Impossible d’ouvrir le dossier, car nautilus n’est pas disponible. Le fichier est ici : {}", - "gui_settings_language_label": "Langue de choix", + "gui_settings_language_label": "Langue", "help_stealth": "Utilisation de l’autorisation client (avancé)", "help_receive": "Recevoir des partages au lieu de les envoyer", "gui_receive_start_server": "Démarrer le mode réception", @@ -172,7 +172,7 @@ "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_meek_lite_expensive_warning": "Avertissement : L’exploitation de ponts meek-azure 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_autostop_timer_checkbox": "Utiliser une 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. Veuillez 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. Veuillez la modifier pour commencer le partage.", @@ -247,7 +247,7 @@ "gui_close_tab_warning_persistent_description": "Cet onglet est persistant. Si vous le fermez, vous perdrez l’adresse onion qu’il utilise. Voulez-vous vraiment le fermer ?", "mode_settings_autostop_timer_checkbox": "Arrêter un service onion à une heure prédéterminée", "mode_settings_autostart_timer_checkbox": "Démarrer un service onion à une heure prédéterminée", - "mode_settings_website_disable_csp_checkbox": "Ne pas envoyer d’en-tête Politique de sécurité de contenu (permet à votre site Web d’utiliser des ressources tierces)", + "mode_settings_website_disable_csp_checkbox": "Ne pas envoyer l’en-tête par défaut de Politique de sécurité de contenu (permet à votre site Web d’utiliser des ressources tierces)", "mode_settings_receive_data_dir_browse_button": "Parcourir", "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans", "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)", @@ -316,5 +316,30 @@ "gui_website_url_public_description": "Quiconque disposant de cette adresse OnionShare peut visiter votre site Web en utilisant le Navigateur Tor : ", "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge la fonctionnalité \"stealth\" (le client d'authentification). Veuillez essayer avec une version plus récente de Tor, ou utilisez le mode 'public' s'il n'a pas besoin d'être privé.", "gui_receive_url_public_description": "Quiconque disposant de cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", - "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :" + "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :", + "gui_dragdrop_sandbox_flatpak": "Afin de rendre la sandbox Flatpak plus sécurisée, le glisser-coller n'est pas pris en charge. Utilisez les boutons Ajouter des fichiers et Ajouter des dossiers pour chercher vos fichiers à la place.", + "moat_solution_empty_error": "Vous devez saisir les caractères apparaissant sur l'image", + "gui_settings_stop_active_tabs_label": "Il y a des services en cours d'éxécution dans certains de vos onglets.\nVous devez arrêter tout les services pour changer vos paramètres Tor.", + "moat_captcha_label": "Résolvez le CAPTCHA pour demander un pont.", + "gui_tor_settings_window_title": "Paramètres Tor", + "gui_settings_controller_extras_label": "Paramètres Tor", + "gui_settings_tor_bridges_label": "Les ponts vous aident à accéder au réseau Tor dans les lieux où Tor est bloqué. Selon l'endroit où vous êtes, un pont peut marcher mieux qu'un autre.", + "gui_settings_bridge_use_checkbox": "Utiliser un pont", + "gui_settings_bridge_radio_builtin": "Choisir un pont pré-configuré", + "gui_settings_bridge_none_radio_option": "Ne pas utiliser de pont", + "gui_settings_bridge_moat_radio_option": "Demander un pont depuis torproject.org", + "gui_settings_bridge_moat_button": "Demander un nouveau pont", + "gui_settings_bridge_custom_radio_option": "Fournir un pont que vous avez appris par une source sure", + "gui_settings_bridge_custom_placeholder": "écrire address:port (une par ligne)", + "gui_settings_moat_bridges_invalid": "Vous n'avez pas encore demandé un pont depuis torprohect.com.", + "gui_settings_version_label": "Vous utilisez OnionShare {}", + "gui_settings_help_label": "Besoin d'aide ? Allez voir docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Envoyer en-tête de Politique de sécurité de contenu personnalisé", + "moat_contact_label": "Entrain de contacter BridgeDB...", + "moat_captcha_placeholder": "Saisissez les caractères apparaissant sur l'image", + "moat_captcha_submit": "Envoyer", + "moat_captcha_reload": "Recharger", + "moat_bridgedb_error": "Erreur en tentant de contacter BridgeDB.", + "moat_captcha_error": "La solution est erronée. Veuillez réessayer.", + "mode_tor_not_connected_label": "OnionShare n'est pas connecté au réseau Tor" } diff --git a/desktop/src/onionshare/resources/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json index 55789bf4..cab895e3 100644 --- a/desktop/src/onionshare/resources/locale/pt_BR.json +++ b/desktop/src/onionshare/resources/locale/pt_BR.json @@ -86,16 +86,16 @@ "gui_settings_authenticate_no_auth_option": "Sem autenticação nem cookie de autenticação", "gui_settings_authenticate_password_option": "Senha", "gui_settings_password_label": "Senha", - "gui_settings_tor_bridges": "Suporte para pontes Tor", + "gui_settings_tor_bridges": "Conectar usando uma ponte Tor?", "gui_settings_tor_bridges_no_bridges_radio_option": "Não usar pontes", "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportadores plugáveis obfs4 já instalados", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportadores plugáveis obfs4 já instalados (requer obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportadores plugáveis meek_lite (Azure) já instalados", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportadores plugáveis meek_lite (Azure) já instalados (requer obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek_lite são muito custosas para o Projeto Tor.

Use-as somente se você não conseguir se conectar ao Tor diretamente, via transportadores obfs4 ou outras pontes comuns.", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito custosas para o Projeto Tor.

Use-as somente se você não conseguir se conectar ao Tor diretamente, via transportadores obfs4 ou outras pontes comuns.", "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", "gui_settings_tor_bridges_custom_label": "Você pode obter pontes em https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nenhuma das ponte adicionadas funciona.\nTente usá-las de novo ou adicione outras.", + "gui_settings_tor_bridges_invalid": "Nenhuma das ponte adicionadas funciona. Tente usá-las de novo ou adicione outras.", "gui_settings_button_save": "Salvar", "gui_settings_button_cancel": "Cancelar", "gui_settings_button_help": "Ajuda", @@ -174,7 +174,7 @@ "gui_upload_finished": "Upload realizado de {}", "gui_download_in_progress": "Download Iniciado {}", "gui_open_folder_error_nautilus": "Não foi possível abrir a pasta porque o nautilus não está disponível. O arquivo está aqui: {}", - "gui_settings_language_label": "Idioma", + "gui_settings_language_label": "Língua", "gui_settings_language_changed_notice": "Reinicie OnionShare para que o novo idioma seja aplicado.", "timeout_upload_still_running": "Esperando o término do upload", "gui_add_files": "Adicionar Arquivos", @@ -229,7 +229,7 @@ "gui_website_mode_no_files": "Nenhum website compartilhado ainda", "history_requests_tooltip": "{} solicitações da web", "gui_settings_website_label": "Configurações do Website", - "mode_settings_website_disable_csp_checkbox": "Desativar cabeçalho da política de segurança de conteúdo (permite que seu site use recursos de terceiros)", + "mode_settings_website_disable_csp_checkbox": "Não envie o cabeçalho padrão da Política de Segurança de Conteúdo (permite que seu website utilize recursos de terceiros)", "mode_settings_receive_data_dir_browse_button": "Navegar", "mode_settings_receive_data_dir_label": "Salvar arquivos em", "mode_settings_share_autostop_sharing_checkbox": "Interrompa o compartilhamento após o envio dos arquivos (desmarque para permitir o download de arquivos individuais)", @@ -309,5 +309,30 @@ "gui_url_instructions": "Primeiro, envie o endereço OnionShare abaixo:", "gui_chat_url_public_description": "Qualquer pessoa com este endereço OnionShare pode entrar nesta sala de bate-papo usando o Navegador Tor: ", "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode carregar arquivos para o seu computador usando o Navegador Tor: ", - "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Navegador Tor: " + "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Navegador Tor: ", + "gui_dragdrop_sandbox_flatpak": "Para tornar a ferramenta Flatpak sandbox mais segura, a função de arrastar e largar não é suportada. Em vez disso, use os botões Adicionar Arquivos e Adicionar Pasta para procurar por arquivos.", + "gui_tor_settings_window_title": "Configurações do Tor", + "gui_settings_controller_extras_label": "Configurações do Tor", + "gui_settings_tor_bridges_label": "Pontes ajudam a acessar a Rede Tor em locais onde o Tor está bloqueado. Dependendo de onde você estiver, uma ponte pode funcionar melhor que outra.", + "gui_settings_bridge_use_checkbox": "Usar uma ponte", + "gui_settings_bridge_radio_builtin": "Selecione uma ponte embutida", + "gui_settings_bridge_none_radio_option": "Não usar uma ponte", + "gui_settings_bridge_moat_radio_option": "Solicite uma ponte no torproject.org", + "gui_settings_bridge_moat_button": "Solicitar uma nova ponte", + "gui_settings_bridge_custom_radio_option": "Fornece uma ponte que você teve acesso de uma fonte confiável", + "gui_settings_bridge_custom_placeholder": "digite adress:port (um por linha)", + "gui_settings_moat_bridges_invalid": "Você ainda não solicitou uma ponte do torproject.org.", + "gui_settings_stop_active_tabs_label": "Há serviços funcionando em algumas de suas abas.\nVocê deve parar todos os serviços para alterar suas configurações Tor.", + "gui_settings_version_label": "Você está usando o OnionShare {}", + "gui_settings_help_label": "Precisa de ajuda? Veja docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Enviar um cabeçalho personalizado da Política de Segurança de Conteúdo", + "moat_contact_label": "Contactando BridgeDB...", + "moat_captcha_label": "Resolva o CAPTCHA para solicitar uma ponte.", + "moat_captcha_placeholder": "Digite os caracteres que aparecem na imagem", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recarregar", + "moat_bridgedb_error": "Erro ao contactar BridgeDB.", + "moat_captcha_error": "A solução não está correta. Por favor tente novamente.", + "moat_solution_empty_error": "Você deve informar os caracteres que aparecem na imagem", + "mode_tor_not_connected_label": "OnionShare não está conectado com a rede Tor" } diff --git a/desktop/src/onionshare/resources/locale/sv.json b/desktop/src/onionshare/resources/locale/sv.json index 6593ed7f..d44b3a9e 100644 --- a/desktop/src/onionshare/resources/locale/sv.json +++ b/desktop/src/onionshare/resources/locale/sv.json @@ -315,5 +315,8 @@ "gui_qr_label_url_title": "OnionShare-adress", "gui_copied_client_auth": "Privat nyckel kopierad till Urklipp", "gui_copied_client_auth_title": "Kopierad privat nyckel", - "gui_copy_client_auth": "Kopiera den privata nyckeln" + "gui_copy_client_auth": "Kopiera den privata nyckeln", + "gui_tor_settings_window_title": "Torinställningar", + "gui_settings_controller_extras_label": "Torinställningar", + "gui_dragdrop_sandbox_flatpak": "För att göra Flatpak mer säkert, är dra och släpp inte tillåtet. Använd Lägg till filer och Lägg till katalog knapparna för att bläddra efter filer istället." } diff --git a/docs/source/locale/de/LC_MESSAGES/advanced.po b/docs/source/locale/de/LC_MESSAGES/advanced.po index 5aecf28f..29e8a947 100644 --- a/docs/source/locale/de/LC_MESSAGES/advanced.po +++ b/docs/source/locale/de/LC_MESSAGES/advanced.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-09-13 10:46+0000\n" -"Last-Translator: nautilusx \n" +"PO-Revision-Date: 2021-12-04 15:52+0000\n" +"Last-Translator: Jannes Leßmann \n" "Language-Team: de \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -54,16 +54,15 @@ msgstr "" "purpurfarbenen Stecknadelsymbol links dem Status des Dienstes." #: ../../source/advanced.rst:18 -#, fuzzy msgid "" "When you quit OnionShare and then open it again, your saved tabs will " "start opened. You'll have to manually start each service, but when you do" " they will start with the same OnionShare address and private key." msgstr "" "Wenn du OnionShare beendest und dann wieder öffnest, werden deine " -"gespeicherten Reiter wieder geöffnet. Du musst dann zwar jeden Dienst " -"manuell starten, aber wenn du dies tust, starten die Dienste mit " -"derselben OnionShare-Adresse und mit demselben Passwort wie zuvor." +"gespeicherten Tabs wieder geöffnet. Du musst dann zwar jeden Dienst manuell " +"starten, aber wenn du dies tust, starten die Dienste mit derselben " +"OnionShare-Adresse und mit demselben Passwort wie zuvor." #: ../../source/advanced.rst:21 msgid "" @@ -83,28 +82,29 @@ msgid "" "By default, all OnionShare services are protected with a private key, " "which Tor calls \"client authentication\"." msgstr "" +"Standardmäßig werden alle OnionShare-Dienste mit einem privaten Schlüssel " +"gesichert. Dies wird im Tor-Kontext \"Client-Authentifizierung\" genannt." #: ../../source/advanced.rst:30 msgid "" "When browsing to an OnionShare service in Tor Browser, Tor Browser will " "prompt for the private key to be entered." msgstr "" +"Wenn du einen OnionShare-Dienst im Tor-Browser aufrufst, wird Tor-Browser " +"dich auffordern, den privaten Schlüssel einzugeben." #: ../../source/advanced.rst:32 -#, fuzzy msgid "" "Sometimes you might want your OnionShare service to be accessible to the " "public, like if you want to set up an OnionShare receive service so the " "public can securely and anonymously send you files. In this case, it's " "better to disable the private key altogether." msgstr "" -"Manchmal könntest du wollen, dass dein OnionShare-Service der " -"Öffentlichkeit zugänglich ist; dies ist beispielsweise der Fall, wenn du " -"einen OnionShare-Empfangsdienst einrichten möchtest, über den dir die " -"Öffentlichkeit sicher und anonym Dateien schicken können. In diesem Fall " -"wäre es besser, das Passwort komplett zu deaktivieren. Wenn du dies nicht" -" tust, könnte jemand deinen Dienst anhalten, wenn er 20 mal das Passwort " -"falsch eingibt, selbst wenn er das richtige Passwort kennt." +"Manchmal könntest du wollen, dass dein OnionShare-Service der Öffentlichkeit " +"zugänglich ist; dies ist beispielsweise der Fall, wenn du einen OnionShare-" +"Empfangsdienst einrichten möchtest, über den dir die Öffentlichkeit sicher " +"und anonym Dateien schicken kann. In diesem Fall wäre es besser, den " +"privaten Schlüssel komplett zu deaktivieren." #: ../../source/advanced.rst:35 msgid "" @@ -113,6 +113,10 @@ msgid "" "server. Then the server will be public and won't need a private key to " "view in Tor Browser." msgstr "" +"Um den privaten Schlüssel für einen Tab zu deaktivieren, setze ein Kreuz in " +"das \"Dies ist ein öffentlicher OnionShare-Service (Deaktiviert den privaten " +"Schlüssel)\" Kästchen bevor du den Server startest. Dadurch wird der Server " +"öffentlich Zugänglich, wodurch kein privater Schlüssel mehr benötigt wird." #: ../../source/advanced.rst:40 msgid "Custom Titles" @@ -183,7 +187,6 @@ msgstr "" "gemäß Zeitsteuerung starten würde." #: ../../source/advanced.rst:60 -#, fuzzy msgid "" "**Scheduling an OnionShare service to automatically stop can be useful to" " limit exposure**, like if you want to share secret documents while " @@ -191,10 +194,10 @@ msgid "" "days." msgstr "" "**Der automatische, zeigesteuerte Stopp eines OnionShare-Dienstes kann " -"sinnvoll sein, um den Dienst nicht mehr als nötig einem Zugriff von außen" -" auszusetzen**; beispielsweise, wenn du geheime Dokumente freigeben " -"möchtest und diese nicht länger als für ein paar Tage über das Internet " -"zugänglich sein sollen." +"sinnvoll sein, um den Dienst nicht mehr als nötig einem Zugriff von Außen " +"auszusetzen**; beispielsweise, wenn du geheime Dokumente freigeben möchtest " +"und diese nicht länger als für ein paar Tage über das Internet zugänglich " +"sein sollen." #: ../../source/advanced.rst:67 msgid "Command-line Interface" @@ -235,6 +238,10 @@ msgid "" "`_ " "in the git repository." msgstr "" +"Um mehr Informationen darüber zu bekommen, wie du es auf verschiedenen " +"Betriebssystem installieren kannst, schau dir die `CLI README Datei " +"`_ im " +"Git-Repository an." #: ../../source/advanced.rst:83 msgid "" diff --git a/docs/source/locale/de/LC_MESSAGES/develop.po b/docs/source/locale/de/LC_MESSAGES/develop.po index de402daf..dbdace47 100644 --- a/docs/source/locale/de/LC_MESSAGES/develop.po +++ b/docs/source/locale/de/LC_MESSAGES/develop.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: register718 \n" +"PO-Revision-Date: 2021-12-04 15:52+0000\n" +"Last-Translator: Jannes Leßmann \n" "Language-Team: de \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/develop.rst:2 @@ -183,7 +183,6 @@ msgstr "" "Zum Beispiel::" #: ../../source/develop.rst:165 -#, fuzzy msgid "" "In this case, you load the URL ``http://127.0.0.1:17641`` in a normal " "web-browser like Firefox, instead of using the Tor Browser. The private " @@ -191,7 +190,7 @@ msgid "" msgstr "" "In diesem Fall lädst du die URL ``http://127.0.0.1:17614`` in einem normalen " "Webbrowser wie Firefox anstelle des Tor Browsers. Der private Schlüssel wird " -"bei lokalen Betrieb eigentlich nicht benötigt." +"im lokalen Betrieb für gewöhnlich nicht benötigt." #: ../../source/develop.rst:168 msgid "Contributing Translations" diff --git a/docs/source/locale/de/LC_MESSAGES/features.po b/docs/source/locale/de/LC_MESSAGES/features.po index aca23e44..9defefb4 100644 --- a/docs/source/locale/de/LC_MESSAGES/features.po +++ b/docs/source/locale/de/LC_MESSAGES/features.po @@ -8,8 +8,8 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:15-0700\n" -"PO-Revision-Date: 2021-11-28 19:16+0000\n" -"Last-Translator: ilumium \n" +"PO-Revision-Date: 2021-12-04 15:52+0000\n" +"Last-Translator: Jannes Leßmann \n" "Language-Team: de \n" "Language: de\n" "MIME-Version: 1.0\n" @@ -36,12 +36,12 @@ msgstr "" #: ../../source/features.rst:8 msgid "By default, OnionShare web addresses are protected with a private key." msgstr "" -"Standardmäßig wird die OnionShare Webadresse mit einem privaten Schlüssel " +"OnionShare-Webadressen werden standardmäßig mit einem privaten Schlüssel " "geschützt." #: ../../source/features.rst:10 msgid "OnionShare addresses look something like this::" -msgstr "OnionShare Adressen sehen in etwa so aus:" +msgstr "OnionShare-Adressen sehen in etwa so aus:" #: ../../source/features.rst:14 msgid "And private keys might look something like this::" @@ -56,9 +56,9 @@ msgid "" msgstr "" "Sie sind für die sichere Weitergabe dieser URL und des privaten Schlüssels " "verantwortlich. Die Weitergabe kann z.B. über eine verschlüsselte Chat-" -"Nachricht, oder eine weniger sichere Kommunikationsmethode wie eine " -"unverschlüsselte E-Mail erfolgen. Dies Entscheidung wie Sie Ihren Schlüssel " -"weitergeben sollten Sie aufgrund Ihres persönlichen `threat model " +"Nachricht, oder eine weniger sichere Kommunikationsmethode, wie eine " +"unverschlüsselte E-Mail, erfolgen. Dies Entscheidung wie Sie Ihren Schlüssel " +"weitergeben sollten Sie aufgrund Ihres persönlichen `Sicherheitsmodells " "`_ treffen." #: ../../source/features.rst:20 @@ -68,10 +68,10 @@ msgid "" " Tor Browser will then prompt for the private key, which the people can " "also then copy and paste in." msgstr "" -"Die Empfänger Ihrer URL müssen diesen in ihrem `Tor Browser `_ öffnen, um auf den OnionShare-Dienst zuzugreifen. Der Tor " -"Browser wird nach einem privaten Schlüssel fragen, der ebenfalls vom " -"Empfänger eingegeben werden muss." +"Browser wird nach einem privaten Schlüssel fragen, welcher anschließend vom " +"Empfänger, z.B. über Copy-Paste, eingegeben werden kann." #: ../../source/features.rst:24 msgid "" @@ -80,11 +80,11 @@ msgid "" "until your laptop is unsuspended and on the internet again. OnionShare " "works best when working with people in real-time." msgstr "" -"Wenn du OnionShare auf deinem Laptop laufen lässt, um jemandem Dateien zu " -"schicken, und du den Laptop in den Ruhemodus versetzt, ehe die Dateien " -"gesendet wurden, wird der Dienst so lange nicht erreichbar sein wie der " -"Laptop im Ruhezustand ist. OnionShare funktioniert am besten, wenn du mit " -"den Leuten, mit denen du Dateien teilst, in Echtzeit in Verbindung stehst." +"Solltest du deinen Laptop in den Ruhemodus versetzen und währenddessen " +"Dateien mit jemandem teilen, so werden die Dateien erst versandt, sobald " +"sich dein Laptop nicht mehr im Ruhemodus befindet. OnionShare funktioniert " +"am besten, wenn du mit den Leuten, mit denen du Dateien teilst, in Echtzeit " +"in Verbindung stehst." #: ../../source/features.rst:26 msgid "" @@ -560,6 +560,9 @@ msgid "" "rooms don't store any messages anywhere, so the problem is reduced to a " "minimum." msgstr "" +"Solltest du zum Beispiel eine Nachricht an eine Signal-Gruppe schicken, dann " +"bleibt eine Kopie deiner Nachricht auf jedem Gerät aller Teilnehmer der " +"Gruppe." #: ../../source/features.rst:165 msgid "" diff --git a/docs/source/locale/ja/LC_MESSAGES/features.po b/docs/source/locale/ja/LC_MESSAGES/features.po index e71451fb..912833f1 100644 --- a/docs/source/locale/ja/LC_MESSAGES/features.po +++ b/docs/source/locale/ja/LC_MESSAGES/features.po @@ -3,23 +3,25 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-12-10 02:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 msgid "How OnionShare Works" -msgstr "" +msgstr "OnionShareの仕組みの説明" #: ../../source/features.rst:6 msgid "" @@ -27,6 +29,9 @@ msgid "" "other people as `Tor `_ `onion services " "`_." msgstr "" +"ウェブサーバーが自宅のパソコンでローカルに作られ、`Tor `_ネットワーク上で " +"`「オニオン・サービス」 `_として閲覧できるようにされます。." #: ../../source/features.rst:8 msgid "" @@ -64,10 +69,13 @@ msgid "" "Tor onion services too, it also protects your anonymity. See the " ":doc:`security design ` for more info." msgstr "" +"ウェブサーバーは自宅のパソコンだからこそ、開発者さえも、*第三者はOnionShare内のコンテンツにアクセスできない。*完全にプライベートです。そしてO" +"nionShareはTorのオニオン・サービスに基づいているので、匿名性も守られています。詳しくは「`security design " +"`」という:doc:を訪れて下さい。" #: ../../source/features.rst:21 msgid "Share Files" -msgstr "" +msgstr "ファイルを共有" #: ../../source/features.rst:23 msgid "" @@ -75,12 +83,14 @@ msgid "" "anonymously. Open a share tab, drag in the files and folders you wish to " "share, and click \"Start sharing\"." msgstr "" +"OnionShareで、ファイルやフォルダーを安全そして匿名で他の人と共有できます。共有タブを開いて、共有したいファイルをドラッグアンドドロップして、「共" +"有を開始」をクリックする。" #: ../../source/features.rst:27 ../../source/features.rst:93 msgid "" "After you add files, you'll see some settings. Make sure you choose the " "setting you're interested in before you start sharing." -msgstr "" +msgstr "ファイルを追加したら、設定は表示されます。共有を開始する前に、ふさわしい設定を選択して下さい。" #: ../../source/features.rst:31 msgid "" @@ -96,7 +106,7 @@ msgid "" "Also, if you uncheck this box, people will be able to download the " "individual files you share rather than a single compressed version of all" " the files." -msgstr "" +msgstr "このチェックを外すと、全ファイルの圧縮された版ではなく各ファイルを別々にダウンロードできるようにします。" #: ../../source/features.rst:36 msgid "" @@ -105,6 +115,8 @@ msgid "" " website down. You can also click the \"↑\" icon in the top-right corner " "to show the history and progress of people downloading files from you." msgstr "" +"共有の始めたい時に、「共有を開始」ボタンをクリックして下さい。いつでも「共有を停止」ボタンをクリックしたら、もしくはOnionShareを閉じたらウェブサ" +"イトは停止されます。右上にある「↑」ボタンをクリックすると、ファイルのダウンロード状態・歴史は表示されます。" #: ../../source/features.rst:40 msgid "" @@ -144,7 +156,7 @@ msgstr "" msgid "" "You can also click the down \"↓\" icon in the top-right corner to show " "the history and progress of people sending files to you." -msgstr "" +msgstr "右上にある「↓」ボタンをクリックすると、ファイルのアップロード状態・歴史は表示されます。" #: ../../source/features.rst:60 msgid "Here is what it looks like for someone sending you files." @@ -166,10 +178,13 @@ msgid "" "quite as secure version of `SecureDrop `_, the " "whistleblower submission system." msgstr "" +"OnionShareのファイル受信サービスは匿名情報筋から安全に文書を受け入るのにジャーナリストなどに役立つでしょう。このように使うと、OnionShar" +"eはライトウェイト、単純、そして安全性の少し低い`SecureDrop `_(安全に匿名情報源から情報を入手するためのシステム)の代替品になります。" #: ../../source/features.rst:69 msgid "Use at your own risk" -msgstr "" +msgstr "自己責任で使って下さい" #: ../../source/features.rst:71 msgid "" @@ -188,10 +203,13 @@ msgid "" "`_ or in a `Qubes `_ " "disposableVM." msgstr "" +"OnionShareでオフィス文書やPDFを受信する場合、`Dangerzone `_を使って安全に開けるようなPDFファイルに変換できます。さらに、`Tails `_または`" +"Qubes `_ の使い捨て仮想マシンを使ってより安全に信頼できないファイルを開くことができます。" #: ../../source/features.rst:76 msgid "Tips for running a receive service" -msgstr "" +msgstr "ファイル受信サービスを管理するアドバイス" #: ../../source/features.rst:78 msgid "" @@ -210,7 +228,7 @@ msgstr "" #: ../../source/features.rst:83 msgid "Host a Website" -msgstr "" +msgstr "ウェブサイトをホストする" #: ../../source/features.rst:85 msgid "" @@ -218,6 +236,8 @@ msgid "" "the files and folders that make up the static content there, and click " "\"Start sharing\" when you are ready." msgstr "" +"OnionShareでスタティック型のウェブサイトをホストするのに、ウェブサイトのタブを開いて、スタティック型のコンテンツが含まれるファイルやフォルダーを" +"ドラッグアンドドロップして、そして「共有を開始」をクリックする。" #: ../../source/features.rst:89 msgid "" @@ -228,17 +248,20 @@ msgid "" "websites that execute code or use databases. So you can't for example use" " WordPress.)" msgstr "" +"``index.html``ファイルも追加すると、ウェブサイトがロードされる時にレンダーリングされます。サイトを構成するHTMLファイル、CSSファイル、" +"JavaScriptファイル、そして画像データも追加する必要があります。(OnionShareはスタティック型のウェブサイトのみをホストできることをご了承" +"ください。コードを実行するまたデータベースを利用するウェブサイトをホストできません。例えばWordPressを使えません。)" #: ../../source/features.rst:91 msgid "" "If you don't have an ``index.html`` file, it will show a directory " "listing instead, and people loading it can look through the files and " "download them." -msgstr "" +msgstr "``index.html``ファイルがない場合はディレクトリのリストは表示され、サイトをロードする人々はファイルを閲覧、ダウンロードできます。" #: ../../source/features.rst:98 msgid "Content Security Policy" -msgstr "" +msgstr "コンテンツセキュリティポリシー" #: ../../source/features.rst:100 msgid "" @@ -259,7 +282,7 @@ msgstr "" #: ../../source/features.rst:105 msgid "Tips for running a website service" -msgstr "" +msgstr "ウェブサイトのサービスを管理するアドバイス" #: ../../source/features.rst:107 msgid "" @@ -279,13 +302,14 @@ msgstr "" #: ../../source/features.rst:113 msgid "Chat Anonymously" -msgstr "" +msgstr "匿名でチャット" #: ../../source/features.rst:115 msgid "" "You can use OnionShare to set up a private, secure chat room that doesn't" " log anything. Just open a chat tab and click \"Start chat server\"." msgstr "" +"OnionShareを使って、何も記録しないプライベート、安全なチャットルームを作れます。チャットタブを開いて、「チャットサーバーを始動」をクリックする。" #: ../../source/features.rst:119 msgid "" @@ -302,6 +326,8 @@ msgid "" "participate must have their Tor Browser security level set to " "\"Standard\" or \"Safer\", instead of \"Safest\"." msgstr "" +"他の人はTorブラウザでOnionShareのアドレスを訪れたらチャットに参加できます。チャットルームにはJavaScriptが必要だから、参加したい方は" +"Torブラウザのセキュリティレベルを「最も安全」ではなく「標準」または「より安全」に設定する必要があります。" #: ../../source/features.rst:127 msgid "" @@ -310,12 +336,14 @@ msgid "" "and pressing ↵. Since the chat history isn't saved anywhere, it doesn't " "get displayed at all, even if others were already chatting in the room." msgstr "" +"チャットルームに入る方はランダムのユーザ名を付けられます。左パネルにあるボックスに新しいユーザ名を入力して「↵」を押すと変更できます。入る前に他のユーザが" +"チャットしてたかどうかにもかかわらず、チャット歴史はどこにも保存されていないので表示されません。" #: ../../source/features.rst:133 msgid "" "In an OnionShare chat room, everyone is anonymous. Anyone can change " "their name to anything, and there is no way to confirm anyone's identity." -msgstr "" +msgstr "OnionShareのチャットルームに、皆は匿名です。誰でも自由にユーザ名を変更できる、そして身元を認証する方法はありません。" #: ../../source/features.rst:136 msgid "" @@ -324,16 +352,18 @@ msgid "" "messages, you can be reasonably confident the people joining the chat " "room are your friends." msgstr "" +"でもOnionShareのチャットルームを作って、安全な通信でアドレスを信頼できる友達の少人数グループのみと共有すれば、チャットルームに入るユーザは実際に" +"友達だとそれなりに確信できるでしょう。" #: ../../source/features.rst:139 msgid "How is this useful?" -msgstr "" +msgstr "これは何の役に立ちますか?" #: ../../source/features.rst:141 msgid "" "If you need to already be using an encrypted messaging app, what's the " "point of an OnionShare chat room to begin with? It leaves less traces." -msgstr "" +msgstr "どうぜ暗号化メッセンジャーアプリを使う必要あるなら、OnionShareのチャットルームには何の意味がありますか?より少ない痕跡を残します。" #: ../../source/features.rst:143 msgid "" @@ -359,7 +389,7 @@ msgstr "" #: ../../source/features.rst:150 msgid "How does the encryption work?" -msgstr "" +msgstr "暗号化の仕組みは何ですか?" #: ../../source/features.rst:152 msgid "" @@ -370,12 +400,15 @@ msgid "" "other members of the chat room using WebSockets, through their E2EE onion" " connections." msgstr "" +"OnionShareはTorオニオンサービスに頼るので、TorブラウザとOnionShareの間の接続は全て終端間暗号化されている(E2EE)。メッセージ" +"はOnionShareチャットルームに投稿されるとき、E2EEオニオン接続を介してサーバーに送られて、サーバーがWebSocketを使ってE2EEオニオン" +"接続を介して他のユーザに送ります。" #: ../../source/features.rst:154 msgid "" "OnionShare doesn't implement any chat encryption on its own. It relies on" " the Tor onion service's encryption instead." -msgstr "" +msgstr "OnionShare自体はチャットの暗号を実行せず、Torオニオンサービスの暗号に頼ります。" #~ msgid "How OnionShare works" #~ msgstr "" @@ -764,4 +797,3 @@ msgstr "" #~ "WebSockets, through their E2EE onion " #~ "connections." #~ msgstr "" - diff --git a/docs/source/locale/ja/LC_MESSAGES/help.po b/docs/source/locale/ja/LC_MESSAGES/help.po index d1eb81e9..8002b28b 100644 --- a/docs/source/locale/ja/LC_MESSAGES/help.po +++ b/docs/source/locale/ja/LC_MESSAGES/help.po @@ -3,37 +3,39 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-12-10 02:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/help.rst:2 msgid "Getting Help" -msgstr "" +msgstr "サポートを受ける方法" #: ../../source/help.rst:5 msgid "Read This Website" -msgstr "" +msgstr "このサイトを見て回る" #: ../../source/help.rst:7 msgid "" "You will find instructions on how to use OnionShare. Look through all of " "the sections first to see if anything answers your questions." -msgstr "" +msgstr "OnionShareの説明書をここにアクセスできます。まずは見て回って、質問に回答する情報があるかどうかを確かめて下さい。" #: ../../source/help.rst:10 msgid "Check the GitHub Issues" -msgstr "" +msgstr "GitHubのissuesをチェック" #: ../../source/help.rst:12 msgid "" @@ -45,7 +47,7 @@ msgstr "" #: ../../source/help.rst:15 msgid "Submit an Issue Yourself" -msgstr "" +msgstr "新しいissueを提出する" #: ../../source/help.rst:17 msgid "" @@ -58,13 +60,13 @@ msgstr "" #: ../../source/help.rst:20 msgid "Join our Keybase Team" -msgstr "" +msgstr "Keybaseチームに参加する" #: ../../source/help.rst:22 msgid "" "See :ref:`collaborating` on how to join the Keybase team used to discuss " "the project." -msgstr "" +msgstr "プロジェクトを議論するためのKeybaseチームに参加する方法の詳しくは:ref:`協力`を訪れて下さい。" #~ msgid "If you need help with OnionShare, please follow the instructions below." #~ msgstr "" @@ -117,4 +119,3 @@ msgstr "" #~ "that we use to discuss the " #~ "project." #~ msgstr "" - diff --git a/docs/source/locale/ja/LC_MESSAGES/index.po b/docs/source/locale/ja/LC_MESSAGES/index.po index 2ad2653c..ba5b8e7c 100644 --- a/docs/source/locale/ja/LC_MESSAGES/index.po +++ b/docs/source/locale/ja/LC_MESSAGES/index.po @@ -3,27 +3,30 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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: FULL NAME \n" +"PO-Revision-Date: 2021-12-10 02:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\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/ja/LC_MESSAGES/security.po b/docs/source/locale/ja/LC_MESSAGES/security.po index 05816266..666a5baf 100644 --- a/docs/source/locale/ja/LC_MESSAGES/security.po +++ b/docs/source/locale/ja/LC_MESSAGES/security.po @@ -3,35 +3,37 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-12-13 15:48-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-12-10 02:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/security.rst:2 msgid "Security Design" -msgstr "" +msgstr "セキュリティー設計" #: ../../source/security.rst:4 msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works." -msgstr "" +msgstr "まずはOnionShareの仕組みを理解するには、:ref:`how_it_works`を訪れて下さい。" #: ../../source/security.rst:6 msgid "Like all software, OnionShare may contain bugs or vulnerabilities." -msgstr "" +msgstr "全てのソフトウェアのように、OnionShareにバグや脆弱性があるかもしれない。" #: ../../source/security.rst:9 msgid "What OnionShare protects against" -msgstr "" +msgstr "OnionShareが防衛できる脅威" #: ../../source/security.rst:11 msgid "" @@ -42,6 +44,9 @@ msgid "" "server for that too. This avoids the traditional model of having to trust" " the computers of others." msgstr "" +"**第三者はOnionShare内のデータやプロセスにアクセスできません。** OnionShareでは、全てのサービスは自宅のパソコンから直接にホストさ" +"れます。OnionShareでファイルを共有するときに、外部サーバーにアップロードされません。OnionShareのチャットルームを作るときにも、自宅のパ" +"ソコンはサーバー役になります。つまり、第三者のパソコンを信頼するという従来型モデルの必要がありません。" #: ../../source/security.rst:13 msgid "" @@ -53,6 +58,9 @@ msgid "" "Browser with OnionShare's onion service, the traffic is encrypted using " "the onion service's private key." msgstr "" +"**ネットワーク上の盗聴者がOnionShareで送受信されるデータを傍受できません。** TorオニオンサービスとTorブラウザの間の接続は終端間暗号化" +"されます。つまり、ネットワーク盗聴者は解読できないTorトラフィックしか傍受できません。たとえ盗聴者は悪用rendezvousノードを使ってTorブラウザ" +"/OnionShareのオニオンサービス間のトラフィックをルーティングしても、オニオンサービスの秘密鍵で暗号化されるから解読できません。" #: ../../source/security.rst:15 msgid "" @@ -62,6 +70,8 @@ msgid "" "Browser users, the Tor Browser users and eavesdroppers can't learn the " "identity of the OnionShare user." msgstr "" +"**OnionShareユーザの匿名性はTorに保護されます。** OnionShareとTorブラウザはユーザの匿名性を保護します。OnionShare" +"ユーザが匿名でTorブラウザのユーザとアドレスを共有する限り、誰もがOnionShareユーザの身元を突き止めることができません。" #: ../../source/security.rst:17 msgid "" @@ -79,7 +89,7 @@ msgstr "" #: ../../source/security.rst:20 msgid "What OnionShare doesn't protect against" -msgstr "" +msgstr "OnionShareが防衛できない脅威" #: ../../source/security.rst:22 msgid "" @@ -241,4 +251,3 @@ msgstr "" #~ " share the address. This isn't " #~ "necessary unless anonymity is a goal." #~ msgstr "" - diff --git a/docs/source/locale/ja/LC_MESSAGES/sphinx.po b/docs/source/locale/ja/LC_MESSAGES/sphinx.po index f2cc8ed5..ab86033a 100644 --- a/docs/source/locale/ja/LC_MESSAGES/sphinx.po +++ b/docs/source/locale/ja/LC_MESSAGES/sphinx.po @@ -3,25 +3,26 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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: FULL NAME \n" +"PO-Revision-Date: 2021-12-10 02:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.8.0\n" #: ../../source/_templates/versions.html:10 msgid "Versions" -msgstr "" +msgstr "バージョン" #: ../../source/_templates/versions.html:18 msgid "Languages" -msgstr "" - +msgstr "言語" diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po index 869a27a0..2f9cc266 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po @@ -8,15 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:49-0700\n" -"PO-Revision-Date: 2021-10-24 21:38+0000\n" -"Last-Translator: Gabriel Cardoso \n" +"PO-Revision-Date: 2021-12-02 14:52+0000\n" +"Last-Translator: Venilson Carneiro \n" "Language-Team: pt_BR \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -111,6 +111,10 @@ msgid "" "server. Then the server will be public and won't need a private key to " "view in Tor Browser." msgstr "" +"Para desligar a chave privada para qualquer aba, marque a caixa \"Este é um " +"serviço público OnionShare (desativa a chave privada)\" antes de iniciar o " +"servidor. Então o servidor será público e não precisará de uma chave privada " +"para visualizar no Tor Browser." #: ../../source/advanced.rst:40 msgid "Custom Titles" @@ -122,12 +126,17 @@ msgid "" "see the default title for the type of service. For example, the default " "title of a chat service is \"OnionShare Chat\"." msgstr "" +"Por padrão, quando as pessoas carregam um serviço OnionShare no Tor Browser " +"elas vêem o título padrão para o tipo de serviço. Por exemplo, o título " +"padrão de um serviço de bate-papo é \"OnionShare Chat\"." #: ../../source/advanced.rst:44 msgid "" "If you want to choose a custom title, set the \"Custom title\" setting " "before starting a server." msgstr "" +"Se você quiser escolher um título personalizado, defina a configuração " +"\"Título personalizado\" antes de iniciar um servidor." #: ../../source/advanced.rst:47 msgid "Scheduled Times" diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/features.po b/docs/source/locale/pt_BR/LC_MESSAGES/features.po index fd574ba1..aa0d01d4 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/features.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/features.po @@ -8,16 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-12-02 14:52+0000\n" +"Last-Translator: Venilson Carneiro \n" "Language-Team: pt_BR \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -229,6 +228,18 @@ msgid "" "your receive mode service, @webhookbot will send you a message on Keybase" " letting you know as soon as it happens." msgstr "" +"Você pode verificar \"Use o webhook de notificação\" e então escolher uma " +"URL webhook se você quiser ser notificado quando alguém enviar arquivos ou " +"mensagens para seu serviço OnionShare. Se você usar este recurso, o " +"OnionShare fará um pedido HTTP POST para esta URL sempre que alguém enviar " +"arquivos ou mensagens. Por exemplo, se você quiser obter uma mensagem de " +"texto criptografada no aplicativo de mensagens `Keybase `_, você pode iniciar uma conversa com `@webhookbot `_, digite ``!webhook create onionshare-alerts```, e ele " +"responderá com uma URL. Use isso como a URL do webhook de notificação. Se " +"alguém carregar um arquivo para seu serviço de modo de recebimento, @" +"webhookbot lhe enviará uma mensagem no Keybase para que você saiba assim que " +"acontecer." #: ../../source/features.rst:71 msgid "" @@ -405,15 +416,12 @@ msgstr "" "terceiros seja carregado dentro da página da web." #: ../../source/features.rst:121 -#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " "JavaScript libraries from CDNs, you have two options:" msgstr "" "Se você deseja carregar conteúdo de sites de terceiros, como ativos ou " -"bibliotecas JavaScript de CDNs, marque a caixa \"Não enviar o cabeçalho " -"Política de Segurança de Conteúdo (permite que seu site use recursos de " -"terceiros)\" antes de iniciar o serviço." +"bibliotecas JavaScript de CDNs, você tem duas opções:" #: ../../source/features.rst:123 msgid "" @@ -421,10 +429,16 @@ msgid "" "\"Don't send Content Security Policy header (allows your website to use " "third-party resources)\" box before starting the service." msgstr "" +"Você pode desativar o envio de um cabeçalho da Política de Segurança de " +"Conteúdo marcando a caixa \"Não enviar cabeçalho da Política de Segurança de " +"Conteúdo (permite que seu website use recursos de terceiros)\" antes de " +"iniciar o serviço." #: ../../source/features.rst:124 msgid "You can send a custom Content Security Policy header." msgstr "" +"Você pode enviar um cabeçalho personalizado da Política de Segurança de " +"Conteúdo." #: ../../source/features.rst:127 msgid "Tips for running a website service" diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/install.po b/docs/source/locale/pt_BR/LC_MESSAGES/install.po index 179cc61c..9d5b2a93 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/install.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/install.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-09-09 19:16-0700\n" -"PO-Revision-Date: 2021-10-23 18:43+0000\n" +"PO-Revision-Date: 2021-12-02 14:52+0000\n" "Last-Translator: Gabriel Cardoso \n" "Language-Team: pt_BR \n" "Language: pt_BR\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/install.rst:2 @@ -184,7 +184,6 @@ msgid "The expected output looks like this::" msgstr "O resultado esperado se parece com isso::" #: ../../source/install.rst:76 -#, fuzzy msgid "" "If you don't see ``Good signature from``, there might be a problem with " "the integrity of the file (malicious or otherwise), and you should not " @@ -195,8 +194,8 @@ msgstr "" "Se você não ver 'Boa assinatura de', pode haver um problema com a " "integridade do arquivo (malicioso ou outro) e você não deve instalar o " "pacote. (O \"AVISO:\" mostrado acima não é um problema com o pacote, " -"significa apenas que você ainda não definiu nenhum nível de 'confiança' " -"da chave PGP de Micah.)" +"significa apenas que você ainda não definiu nenhum nível de 'confiança' da " +"chave PGP de Micah.)" #: ../../source/install.rst:78 msgid "" diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po index 0047ed53..342515d1 100644 --- a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po +++ b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po @@ -8,16 +8,15 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-19 15:37+0000\n" -"Last-Translator: souovan \n" -"Language: pt_BR\n" +"PO-Revision-Date: 2021-12-02 14:52+0000\n" +"Last-Translator: Venilson Carneiro \n" "Language-Team: pt_BR \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.9-dev\n" +"X-Generator: Weblate 4.10-dev\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -25,17 +24,16 @@ msgid "Connecting to Tor" msgstr "Conectando ao Tor" #: ../../source/tor.rst:4 -#, fuzzy msgid "" "Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" " the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" -"Escolha um jeito de conectar o OnionShare ao Tor clicando no icone \"⚙\" " -"no canto inferior direito da janela do OnionShare para acessar as opções." +"Escolha uma forma de conectar o OnionShare ao Tor clicando no icone \"⚙\" no " +"canto inferior direito da janela do OnionShare para acessar as opções." #: ../../source/tor.rst:9 msgid "Use the Tor version built into OnionShare" -msgstr "" +msgstr "Use a versão do Tor que está integrada no OnionShare" #: ../../source/tor.rst:11 msgid "" @@ -60,7 +58,7 @@ msgstr "" #: ../../source/tor.rst:18 msgid "Getting Around Censorship" -msgstr "" +msgstr "Contornando a Censura" #: ../../source/tor.rst:20 msgid "" @@ -69,18 +67,27 @@ msgid "" "manual.torproject.org/bridges/>`_. If OnionShare connects to Tor without " "one, you don't need to use a bridge." msgstr "" +"Se o seu acesso à internet for censurado, você pode configurar o OnionShare " +"para conectar-se à rede Tor usando `Tor bridges ` _. Se o OnionShare se conectar à rede Tor sem o uso de uma " +"bridge, você não precisa usa-las." #: ../../source/tor.rst:22 msgid "" "To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" " version built into OnionShare\" and check the \"Use a bridge\" checkbox." msgstr "" +"Para usar uma ponte, abra a aba Configurações do Tor. Você deve selecionar " +"\"Use the Tor version built into OnionShare\" e marcar a caixa de seleção " +"\"Use a bridge\"." #: ../../source/tor.rst:25 msgid "" "Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " "is recommended over using `meek-azure`." msgstr "" +"Tente usar primeiro uma ponte embutida. Recomenda-se utilizar pontes \"obfs4" +"\" ou \"snowflake\" em vez de utilizar \"meek-azure\"." #: ../../source/tor.rst:29 msgid "" @@ -89,12 +96,18 @@ msgid "" "bridge. (This makes it more difficult for governments or ISPs to block " "access to Tor bridges.)" msgstr "" +"Se o uso de uma ponte integrada não funcionar, você pode solicitar uma ponte " +"ao torproject.org. Você terá que resolver um CAPTCHA para poder solicitar " +"uma ponte. (Isto torna mais difícil para os governos ou ISPs (provedores de " +"internet) bloquearem o acesso às pontes Tor)." #: ../../source/tor.rst:33 msgid "" "You also have the option of using a bridge that you learned about from a " "trusted source." msgstr "" +"Você também tem a opção de usar uma ponte que você teve acesso a partir de " +"uma fonte confiável." #: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" @@ -576,4 +589,3 @@ msgstr "" #~ "do Tor. Se você precisa usar uma" #~ " ponte, tente primeiro as obfs4 " #~ "integradas." - -- cgit v1.2.3-54-g00ecf From be8a2a894f23238927511555be21d3c5624751b3 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 10 Dec 2021 15:34:44 +1100 Subject: Update our bridge templates with the latest built-in bridges in the get-tor scripts --- .../resources/torrc_template-meek_lite_azure | 4 +- cli/onionshare_cli/resources/torrc_template-obfs4 | 24 +++---- .../resources/torrc_template-snowflake | 1 + desktop/scripts/bridges/__init__.py | 82 ++++++++++++++++++++++ desktop/scripts/build-meek-client.py | 4 +- desktop/scripts/get-tor-linux.py | 4 ++ desktop/scripts/get-tor-osx.py | 5 ++ desktop/scripts/get-tor-windows.py | 5 ++ 8 files changed, 114 insertions(+), 15 deletions(-) create mode 100644 desktop/scripts/bridges/__init__.py diff --git a/cli/onionshare_cli/resources/torrc_template-meek_lite_azure b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure index cbc5a9ee..ff67f518 100644 --- a/cli/onionshare_cli/resources/torrc_template-meek_lite_azure +++ b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure @@ -1,2 +1,2 @@ -# Enable built-in meek-azure bridge -Bridge meek_lite 0.0.2.0:3 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com +# Enable built-in meek bridge +Bridge meek_lite 0.0.2.0:2 97700DFE9F483596DDA6264C4D7DF7641E1E39CE url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com diff --git a/cli/onionshare_cli/resources/torrc_template-obfs4 b/cli/onionshare_cli/resources/torrc_template-obfs4 index 4ea90134..adf343de 100644 --- a/cli/onionshare_cli/resources/torrc_template-obfs4 +++ b/cli/onionshare_cli/resources/torrc_template-obfs4 @@ -1,16 +1,16 @@ -# Enable built-in obfs4-bridge -Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 -Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 -Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 +# Enable built-in obfs4 bridge +Bridge obfs4 144.217.20.138:80 FB70B257C162BF1038CA669D568D76F5B7F0BABB cert=vYIV5MgrghGQvZPIi1tJwnzorMgqgmlKaB77Y3Z9Q/v94wZBOAXkW+fdx4aSxLVnKO+xNw iat-mode=0 Bridge obfs4 146.57.248.225:22 10A6CD36A537FCE513A322361547444B393989F0 cert=K1gDtDAIcUfeLqbstggjIw2rtgIKqdIhUlHp82XRqNSq/mtAjp1BIC9vHKJ2FAEpGssTPw iat-mode=0 -Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 -Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 -Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 -Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 -Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 -Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 +Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 193.11.166.194:27015 2D82C2E354D531A68469ADF7F878FA6060C6BACA cert=4TLQPJrTSaDffMK7Nbao6LC7G9OW/NHkUwIdjLSS3KYf0Nv4/nQiiI8dY2TcsQx01NniOg iat-mode=0 Bridge obfs4 193.11.166.194:27020 86AC7B8D430DAC4117E9F42C9EAED18133863AAF cert=0LDeJH4JzMDtkJJrFphJCiPqKx7loozKN7VNfuukMGfHO0Z8OGdzHVkhVAOfo1mUdv9cMg iat-mode=0 +Bridge obfs4 193.11.166.194:27025 1AE2C08904527FEA90C4C4F8C1083EA59FBC6FAF cert=ItvYZzW5tn6v3G4UnQa6Qz04Npro6e81AP70YujmK/KXwDFPTs3aHXcHp4n8Vt6w/bv8cA iat-mode=0 +Bridge obfs4 209.148.46.65:443 74FAD13168806246602538555B5521A0383A1875 cert=ssH+9rP8dG2NLDN2XuFw63hIO/9MNNinLmxQDpVa+7kTOa9/m+tGWT1SmSYpQ9uTBGa6Hw iat-mode=0 Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0 -Bridge obfs4 144.217.20.138:80 FB70B257C162BF1038CA669D568D76F5B7F0BABB cert=vYIV5MgrghGQvZPIi1tJwnzorMgqgmlKaB77Y3Z9Q/v94wZBOAXkW+fdx4aSxLVnKO+xNw iat-mode=0 -Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1 +Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1 +Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1 +Bridge obfs4 45.145.95.6:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 +Bridge obfs4 51.222.13.177:80 5EDAC3B810E12B01F6FD8050D2FD3E277B289A08 cert=2uplIpLQ0q9+0qMFrK5pkaYRDOe460LL9WHBvatgkuRr/SL31wBOEupaMMJ6koRE6Ld0ew iat-mode=0 +Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0 +Bridge obfs4 85.31.186.98:443 011F2599C0E9B27EE74B353155E244813763C3E5 cert=ayq0XzCwhpdysn5o0EyDUbmSOx3X/oTEbzDMvczHOdBJKlvIdHHLJGkZARtT4dcBFArPPg iat-mode=0 Bridge obfs4 [2a0c:4d80:42:702::1]:27015 C5B7CD6946FF10C5B3E89691A7D3F2C122D2117C cert=TD7PbUO0/0k6xYHMPW3vJxICfkMZNdkRrb63Zhl5j9dW3iRGiCx0A7mPhe5T2EDzQ35+Zw iat-mode=0 diff --git a/cli/onionshare_cli/resources/torrc_template-snowflake b/cli/onionshare_cli/resources/torrc_template-snowflake index 20efe28c..06cb2734 100644 --- a/cli/onionshare_cli/resources/torrc_template-snowflake +++ b/cli/onionshare_cli/resources/torrc_template-snowflake @@ -1 +1,2 @@ +# Enable built-in snowflake bridge Bridge snowflake 0.0.3.0:1 2B280B23E1107BB62ABFC40DDCC8824814F80A72 diff --git a/desktop/scripts/bridges/__init__.py b/desktop/scripts/bridges/__init__.py new file mode 100644 index 00000000..1477d24d --- /dev/null +++ b/desktop/scripts/bridges/__init__.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +import requests + + +class UpdateTorBridges: + """ + Update the built-in Tor Bridges in OnionShare's torrc templates. + """ + + def __init__(self, root_path): + self.root_path = root_path + torrc_template_dir = os.path.join( + self.root_path, os.pardir, "cli/onionshare_cli/resources" + ) + endpoint = "https://bridges.torproject.org/moat/circumvention/builtin" + r = requests.post( + endpoint, + headers={"Content-Type": "application/vnd.api+json"}, + ) + if r.status_code != 200: + print( + f"There was a problem fetching the latest built-in bridges: status_code={r.status_code}" + ) + return False + + result = r.json() + + if "errors" in result: + print( + f"There was a problem fetching the latest built-in bridges: errors={result['errors']}" + ) + return False + + for bridge_type in ["meek", "obfs4", "snowflake"]: + if result[bridge_type]: + if bridge_type == "meek": + torrc_template_extension = "meek_lite_azure" + else: + torrc_template_extension = bridge_type + torrc_template = os.path.join( + self.root_path, + torrc_template_dir, + f"torrc_template-{torrc_template_extension}", + ) + + with open(torrc_template, "w") as f: + f.write(f"# Enable built-in {bridge_type} bridge\n") + bridges = result[bridge_type] + # Sorts the bridges numerically by IP, since they come back in + # random order from the API each time, and create noisy git diff. + bridges.sort(key=lambda s: s.split()[1]) + for item in bridges: + if bridge_type == "meek": + # obfs4proxy expects the bridge type to be meek_lite, and the url/front params + # are missing in the Tor API response, so we have to add them in ourselves. + bridge = item.replace("meek", "meek_lite") + f.write( + f"Bridge {bridge} url=https://meek.azureedge.net/ front=ajax.aspnetcdn.com\n" + ) + else: + f.write(f"Bridge {item}\n") diff --git a/desktop/scripts/build-meek-client.py b/desktop/scripts/build-meek-client.py index af58173a..ee4d28ee 100755 --- a/desktop/scripts/build-meek-client.py +++ b/desktop/scripts/build-meek-client.py @@ -48,7 +48,9 @@ def main(): os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) ) if platform.system() == "Windows": - dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor", "Tor") + dist_path = os.path.join( + root_path, "src", "onionshare", "resources", "tor", "Tor" + ) bin_filename = "meek-client.exe" else: dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor") diff --git a/desktop/scripts/get-tor-linux.py b/desktop/scripts/get-tor-linux.py index 51beb475..1f5e36fd 100755 --- a/desktop/scripts/get-tor-linux.py +++ b/desktop/scripts/get-tor-linux.py @@ -31,6 +31,7 @@ import hashlib import shutil import subprocess import requests +from bridges import UpdateTorBridges def main(): @@ -126,6 +127,9 @@ def main(): print(f"Tor binaries extracted to: {dist_path}") + # Fetch the built-in bridges + UpdateTorBridges(root_path) + if __name__ == "__main__": main() diff --git a/desktop/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py index 80d7aee8..c5c01836 100755 --- a/desktop/scripts/get-tor-osx.py +++ b/desktop/scripts/get-tor-osx.py @@ -32,6 +32,8 @@ import shutil import subprocess import requests +from bridges import UpdateTorBridges + def main(): dmg_url = "https://dist.torproject.org/torbrowser/11.0a10/TorBrowser-11.0a10-osx64_en-US.dmg" @@ -113,6 +115,9 @@ def main(): # Eject dmg subprocess.call(["diskutil", "eject", "/Volumes/Tor Browser"]) + # Fetch the built-in bridges + UpdateTorBridges(root_path) + if __name__ == "__main__": main() diff --git a/desktop/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py index 8ca2e79f..69c98a1b 100644 --- a/desktop/scripts/get-tor-windows.py +++ b/desktop/scripts/get-tor-windows.py @@ -31,6 +31,8 @@ import shutil import subprocess import requests +from bridges import UpdateTorBridges + def main(): exe_url = "https://dist.torproject.org/torbrowser/11.0a10/torbrowser-install-11.0a10_en-US.exe" @@ -98,6 +100,9 @@ def main(): os.path.join(working_path, "Data"), os.path.join(dist_path, "Data", "Tor") ) + # Fetch the built-in bridges + UpdateTorBridges(root_path) + if __name__ == "__main__": main() -- cgit v1.2.3-54-g00ecf From 2689f35635abdf8e6d17b9a0a7709a4b5f9cb182 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Wed, 15 Dec 2021 18:28:55 +1100 Subject: Don't enqueue stdout from Meek subprocess in a Thread, just read it as it comes. Solves infinite loop queue read issue on cleanup() --- cli/onionshare_cli/meek.py | 52 +++++++++++++--------------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/cli/onionshare_cli/meek.py b/cli/onionshare_cli/meek.py index dffbad83..3ada19c7 100644 --- a/cli/onionshare_cli/meek.py +++ b/cli/onionshare_cli/meek.py @@ -20,8 +20,6 @@ along with this program. If not, see . import os import subprocess import time -from queue import Queue, Empty -from threading import Thread class Meek(object): @@ -67,14 +65,6 @@ class Meek(object): Start the Meek Client and populate the SOCKS proxies dict for use with requests to the Tor Moat API. """ - # Small method to read stdout from the subprocess. - # We use this to obtain the random port that Meek - # started on - def enqueue_output(out, queue): - for line in iter(out.readline, b""): - queue.put(line) - out.close() - # Abort early if we can't find the Meek client if self.meek_client_file_path is None or not os.path.exists( self.meek_client_file_path @@ -124,34 +114,22 @@ class Meek(object): universal_newlines=True, ) - # Queue up the stdout from the subprocess for polling later - q = Queue() - t = Thread(target=enqueue_output, args=(self.meek_proc.stdout, q)) - t.daemon = True # thread dies with the program - t.start() - - while True: - # read stdout without blocking - try: - line = q.get_nowait() - self.common.log("Meek", "start", line.strip()) - except Empty: - # no stdout yet? - pass - else: # we got stdout - if "CMETHOD meek socks5" in line: - self.meek_host = line.split(" ")[3].split(":")[0] - self.meek_port = line.split(" ")[3].split(":")[1] - self.common.log( - "Meek", - "start", - f"Meek running on {self.meek_host}:{self.meek_port}", - ) - break + # Obtain the host and port that meek is running on + for line in iter(self.meek_proc.stdout.readline, b""): + if "CMETHOD meek socks5" in line: + self.meek_host = line.split(" ")[3].split(":")[0] + self.meek_port = line.split(" ")[3].split(":")[1] + self.common.log( + "Meek", + "start", + f"Meek running on {self.meek_host}:{self.meek_port}", + ) + break - if "CMETHOD-ERROR" in line: - self.cleanup() - raise MeekNotRunning() + if "CMETHOD-ERROR" in line: + self.cleanup() + raise MeekNotRunning() + break if self.meek_port: self.meek_proxies = { -- cgit v1.2.3-54-g00ecf From e6a17bc74338297fe345121a9a03196f6843a2e1 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 17 Dec 2021 17:53:15 +1100 Subject: Force the MIME type for .js files to be text/javascript, to override silly OS databases/registries with incorrect settings, which Flask would otherwise depend on --- cli/onionshare_cli/web/web.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py index cf65b69e..4f0625a0 100644 --- a/cli/onionshare_cli/web/web.py +++ b/cli/onionshare_cli/web/web.py @@ -18,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ import logging +import mimetypes import os import queue import requests @@ -80,6 +81,16 @@ class Web: self.settings = mode_settings + # Flask guesses the MIME type of files from a database on the operating + # system. + # Some operating systems, or applications that can modify the database + # (such as the Windows Registry) can treat .js files as text/plain, + # which breaks the chat app due to X-Content-Type-Options: nosniff. + # + # It's probably #notourbug but we can fix it by forcing the mimetype. + # https://github.com/onionshare/onionshare/issues/1443 + mimetypes.add_type('text/javascript', '.js') + # The flask app self.app = Flask( __name__, -- cgit v1.2.3-54-g00ecf From 99023a8702134fffb1b2cfc9a588b8dfa3a52e53 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 17 Dec 2021 17:59:34 +1100 Subject: Test javascript MIME type in different modes --- desktop/tests/gui_base_test.py | 7 +++++++ desktop/tests/test_gui_chat.py | 1 + desktop/tests/test_gui_receive.py | 1 + desktop/tests/test_gui_share.py | 1 + 4 files changed, 10 insertions(+) diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py index 9fbb4309..2bf762e1 100644 --- a/desktop/tests/gui_base_test.py +++ b/desktop/tests/gui_base_test.py @@ -177,6 +177,13 @@ class GuiBaseTest(unittest.TestCase): tab.get_mode().toggle_history.click() self.assertEqual(tab.get_mode().history.isVisible(), not currently_visible) + def javascript_is_correct_mime_type(self, tab, file): + """Test that the javascript file send.js is fetchable and that its MIME type is correct""" + path = f"{tab.get_mode().web.static_url_path}/js/{file}" + url = f"http://127.0.0.1:{tab.app.port}/{path}" + r = requests.get(url) + self.assertTrue(r.headers["Content-Type"].startswith("text/javascript;")) + def history_indicator(self, tab, indicator_count="1"): """Test that we can make sure the history is toggled off, do an action, and the indicator works""" # Make sure history is toggled off diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py index 786782f7..ee6c0787 100644 --- a/desktop/tests/test_gui_chat.py +++ b/desktop/tests/test_gui_chat.py @@ -61,6 +61,7 @@ class TestChat(GuiBaseTest): tab = self.new_chat_tab() self.run_all_chat_mode_started_tests(tab) self.view_chat(tab) + self.javascript_is_correct_mime_type(tab, "chat.js") self.change_username(tab) self.run_all_chat_mode_stopping_tests(tab) self.close_all_tabs() diff --git a/desktop/tests/test_gui_receive.py b/desktop/tests/test_gui_receive.py index ca69c957..8c1c44b3 100644 --- a/desktop/tests/test_gui_receive.py +++ b/desktop/tests/test_gui_receive.py @@ -122,6 +122,7 @@ class TestReceive(GuiBaseTest): def run_all_receive_mode_tests(self, tab): """Submit files and messages in receive mode and stop the share""" self.run_all_receive_mode_setup_tests(tab) + self.javascript_is_correct_mime_type(tab, "receive.js") self.upload_file(tab, self.tmpfile_test, "test.txt") self.history_widgets_present(tab) self.counter_incremented(tab, 1) diff --git a/desktop/tests/test_gui_share.py b/desktop/tests/test_gui_share.py index 2cc48d17..ba175fa9 100644 --- a/desktop/tests/test_gui_share.py +++ b/desktop/tests/test_gui_share.py @@ -197,6 +197,7 @@ class TestShare(GuiBaseTest): self.tmpfile_test ) self.web_page(tab, "Total size") + self.javascript_is_correct_mime_type(tab, "send.js") self.download_share(tab) self.history_widgets_present(tab) self.server_is_stopped(tab) -- cgit v1.2.3-54-g00ecf From 43e59cd8c1c2f71794dbe5c9a8197c00de2a0648 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Sat, 18 Dec 2021 06:52:39 +0100 Subject: Translated using Weblate (Japanese) Currently translated at 35.2% (6 of 17 strings) Translated using Weblate (Russian) Currently translated at 100.0% (33 of 33 strings) Translated using Weblate (Japanese) Currently translated at 11.7% (2 of 17 strings) Translated using Weblate (Russian) Currently translated at 90.9% (30 of 33 strings) Translated using Weblate (Russian) Currently translated at 100.0% (60 of 60 strings) Translated using Weblate (Russian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/ru/ Co-authored-by: Alexander Tarasenko Co-authored-by: Hosted Weblate Co-authored-by: Taro Tanaka Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/ja/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/ru/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-tor/ru/ Translation: OnionShare/Doc - Advanced Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Tor --- desktop/src/onionshare/resources/locale/ru.json | 35 ++++++++++++++++++---- docs/source/locale/ja/LC_MESSAGES/advanced.po | 24 +++++++++------ docs/source/locale/ru/LC_MESSAGES/features.po | 23 +++++++------- docs/source/locale/ru/LC_MESSAGES/tor.po | 40 +++++++++++++++---------- 4 files changed, 81 insertions(+), 41 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/ru.json b/desktop/src/onionshare/resources/locale/ru.json index 5819e38e..2636323f 100644 --- a/desktop/src/onionshare/resources/locale/ru.json +++ b/desktop/src/onionshare/resources/locale/ru.json @@ -98,16 +98,16 @@ "gui_settings_socks_label": "Порт SOCKS", "gui_settings_authenticate_label": "Настройки аутентификации Tor", "gui_settings_authenticate_no_auth_option": "Без аутентификации или cookie-аутентификации", - "gui_settings_tor_bridges": "Поддержка \"мостов\" Tor", + "gui_settings_tor_bridges": "Использовать \"мост\" Tor?", "gui_settings_tor_bridges_no_bridges_radio_option": "Не использовать \"мосты\"", "gui_settings_tor_bridges_obfs4_radio_option": "Использовать встроенные подключаемые транспорты obfs4", "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Использовать встроенные подключаемые транспорты obfs4 (необходим obfs4proxy)", "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Использовать встроенные транспорты meek_lite (Azure)", "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные транспорты meek_lite (Azure) (необходим obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_lite очень затратно для Tor Project.

Используйте их только если не можете подключиться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".", + "gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_azure очень затратно для Tor Project.

Используйте их только если не можете подключиться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".", "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_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работает. Проверьте их снова или добавьте другие.", "gui_settings_autostop_timer_checkbox": "Использовать стоп-таймер", "gui_settings_autostop_timer": "Остановить отправку в:", "settings_error_unknown": "Невозможно произвести подключение к контроллеру Tor: некорректные настройки.", @@ -230,7 +230,7 @@ "gui_settings_website_label": "Настройки Веб-сайта", "gui_main_page_share_button": "Сделать доступным для скачивания", "gui_close_tab_warning_title": "Вы уверены?", - "mode_settings_website_disable_csp_checkbox": "Не посылать заголовок Content Security Policy (позволяет Вашему веб сайту использовать ресурсы третих сторон)", + "mode_settings_website_disable_csp_checkbox": "Не посылать стандартный заголовок Content Security Policy (разрешить вашему веб-сайту использовать сторонние ресурсы)", "mode_settings_receive_data_dir_browse_button": "Обзор файлов", "mode_settings_receive_data_dir_label": "Сохранять файлы в", "mode_settings_share_autostop_sharing_checkbox": "Закрыть доступ к файлам после их отправки (отмените чтобы разрешить скачивание отдельных файлов)", @@ -305,5 +305,30 @@ "gui_qr_label_url_title": "Адрес OnionShare", "gui_copied_client_auth": "Секретный Ключ скопирован в буфер обмена", "gui_copied_client_auth_title": "Секретный Ключ Скопирован", - "gui_copy_client_auth": "Копировать Секретный Ключ" + "gui_copy_client_auth": "Копировать Секретный Ключ", + "gui_dragdrop_sandbox_flatpak": "Для обеспечения дополнительной безопасности, функция \"drag and drop\" не поддерживается песочницей Flatpak. Вместо этого используйте кнопки \"Добавить файлы\" и \"Добавить папку\".", + "gui_tor_settings_window_title": "Настройки Tor", + "gui_settings_controller_extras_label": "Настройки Tor", + "gui_settings_tor_bridges_label": "Мосты позволяют подключаться к сети Tor в местах, где его использование заблокировано. В зависимости от вашего местоположения лучше работать может тот или иной мост.", + "gui_settings_bridge_use_checkbox": "Использовать мост", + "gui_settings_bridge_radio_builtin": "Выбрать встроенный мост", + "gui_settings_bridge_none_radio_option": "Не использовать мост", + "gui_settings_bridge_moat_radio_option": "Запросить мост с сайта torproject.org", + "gui_settings_bridge_moat_button": "Запросить Новый Мост", + "gui_settings_bridge_custom_radio_option": "Подключить мост о котором вы узнали из доверенного источника", + "gui_settings_bridge_custom_placeholder": "ввести адрес:порт (по одному на каждой строке)", + "gui_settings_moat_bridges_invalid": "Вы ещё не запрашивали мост с сайта torproject.org.", + "gui_settings_stop_active_tabs_label": "На некоторых из ваших вкладок запущены сервисы.\nНеобходимо остановить все сервисы чтобы изменить настройки Tor.", + "gui_settings_version_label": "Вы используете OnionShare {}", + "gui_settings_help_label": "Нужна помощь? Вам сюда: docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Отправить самостоятельно настроенный заголовок Content Security Policy", + "moat_contact_label": "Устанавливается связь с BridgeDB...", + "moat_captcha_label": "Решите CAPTCHA, чтобы запросить мост.", + "moat_captcha_placeholder": "Введите символы на картинке", + "moat_captcha_submit": "Отправить", + "moat_captcha_reload": "Перезагрузить", + "moat_bridgedb_error": "Ошибка соединения с BridgeDB.", + "moat_captcha_error": "Решение не верно. Пожалуйста, попробуйте ещё раз.", + "moat_solution_empty_error": "Вы должны ввести символы с картинки", + "mode_tor_not_connected_label": "OnionShare не подключен к сети Tor" } diff --git a/docs/source/locale/ja/LC_MESSAGES/advanced.po b/docs/source/locale/ja/LC_MESSAGES/advanced.po index 8b9457ea..99e1201f 100644 --- a/docs/source/locale/ja/LC_MESSAGES/advanced.po +++ b/docs/source/locale/ja/LC_MESSAGES/advanced.po @@ -3,27 +3,29 @@ # This file is distributed under the same license as the OnionShare package. # FIRST AUTHOR , 2020. # -#, fuzzy 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-11-15 14:42-0800\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" +"PO-Revision-Date: 2021-12-18 05:52+0000\n" +"Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Weblate 4.10\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 msgid "Advanced Usage" -msgstr "" +msgstr "先進の使用" #: ../../source/advanced.rst:7 msgid "Save Tabs" -msgstr "" +msgstr "タブを保存する" #: ../../source/advanced.rst:9 msgid "" @@ -33,6 +35,9 @@ msgid "" "useful if you want to host a website available from the same OnionShare " "address even if you reboot your computer." msgstr "" +"OnionShareのデフォルト設定では、全ての機能は一時的です。OnionShareタブを閉じると、そのアドレスは消えて再びに使えません。場合によっては" +"永続的なOnionShareサービスが必要かもしれない。例えばパソコンを再起動しても、永続的なアドレスでOnionShareウェブサイトをホストしたい場合" +"には役立つでしょう。" #: ../../source/advanced.rst:13 msgid "" @@ -40,6 +45,8 @@ msgid "" "open it when I open OnionShare\" box before starting the server. When a " "tab is saved a purple pin icon appears to the left of its server status." msgstr "" +"タブを永続的にするのに、サービスを実行する前に「このタブを保存し、OnionShareがスタートアップの時に自動的に開く」というボックスをチェックする。保" +"存された場合、紫色のピンはタブの左側に表示されます。" #: ../../source/advanced.rst:18 msgid "" @@ -52,7 +59,7 @@ msgstr "" msgid "" "If you save a tab, a copy of that tab's onion service secret key will be " "stored on your computer with your OnionShare settings." -msgstr "" +msgstr "タブを保存すると、そのonionサービスの秘密鍵はOnionShare設定と一緒にパソコンに保存されます。" #: ../../source/advanced.rst:26 msgid "Turn Off Passwords" @@ -85,7 +92,7 @@ msgstr "" #: ../../source/advanced.rst:38 msgid "Scheduled Times" -msgstr "" +msgstr "予定した時間" #: ../../source/advanced.rst:40 msgid "" @@ -401,4 +408,3 @@ msgstr "" #~ " services will soon be removed from" #~ " OnionShare as well." #~ msgstr "" - diff --git a/docs/source/locale/ru/LC_MESSAGES/features.po b/docs/source/locale/ru/LC_MESSAGES/features.po index d1f90dfb..160834bf 100644 --- a/docs/source/locale/ru/LC_MESSAGES/features.po +++ b/docs/source/locale/ru/LC_MESSAGES/features.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-25 12:36+0000\n" +"PO-Revision-Date: 2021-12-16 21:41+0000\n" "Last-Translator: Alexander Tarasenko \n" -"Language: ru\n" "Language-Team: ru \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" +"Language: ru\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.10\n" "Generated-By: Babel 2.9.0\n" #: ../../source/features.rst:4 @@ -420,16 +421,12 @@ msgstr "" "содержимого из сторонних источников." #: ../../source/features.rst:121 -#, fuzzy msgid "" "If you want to load content from third-party websites, like assets or " "JavaScript libraries from CDNs, you have two options:" msgstr "" -"Если требуется загрузить и использовать содержимое из сторонних " -"иточников, например активы или библиотеки JavaScript из CDN, то нужно " -"установить флажок \"Не отправлять заголовок политики безопасности " -"контента\" перед запуском сервиса. Это позволит вебсайту использовать " -"сторонние источники содержимого." +"Если требуется загрузить и использовать содержимое из сторонних иточников, " +"например активы или библиотеки JavaScript из CDN, у вас есть две возможности:" #: ../../source/features.rst:123 msgid "" @@ -437,10 +434,15 @@ msgid "" "\"Don't send Content Security Policy header (allows your website to use " "third-party resources)\" box before starting the service." msgstr "" +"Вы можете отключить отправку заголовка \"Content Security Policy\" отметив " +"флажок \"Не отправлять заголовок Contenct Security Policy (разрешить сайту " +"использовать сторонние ресурсы)\" перед запуском сервиса." #: ../../source/features.rst:124 msgid "You can send a custom Content Security Policy header." msgstr "" +"Вы можете отправить самостоятельно настроенный заголовок Content Security " +"Policy." #: ../../source/features.rst:127 msgid "Tips for running a website service" @@ -1111,4 +1113,3 @@ msgstr "" #~ "быть сохранены. OnionShare не хранит " #~ "какие-либо сообщения, так что описанная " #~ "проблема сведена к минимуму." - diff --git a/docs/source/locale/ru/LC_MESSAGES/tor.po b/docs/source/locale/ru/LC_MESSAGES/tor.po index 38f8f3f4..3320f6ee 100644 --- a/docs/source/locale/ru/LC_MESSAGES/tor.po +++ b/docs/source/locale/ru/LC_MESSAGES/tor.po @@ -8,15 +8,16 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2021-11-23 19:33-0800\n" -"PO-Revision-Date: 2021-09-23 15:36+0000\n" +"PO-Revision-Date: 2021-12-17 04:52+0000\n" "Last-Translator: Alexander Tarasenko \n" -"Language: ru\n" "Language-Team: ru \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" +"Language: ru\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.10\n" "Generated-By: Babel 2.9.0\n" #: ../../source/tor.rst:2 @@ -24,18 +25,17 @@ msgid "Connecting to Tor" msgstr "Подключение к сети Тор" #: ../../source/tor.rst:4 -#, fuzzy msgid "" "Pick a way to connect OnionShare to Tor by clicking the Tor onion icon in" " the bottom right of the OnionShare window to open the Tor Settings tab." msgstr "" -"Чтобы выбрать способ подключения OnionShare к сети Tor, нажмите на значок" -" \"⚙\" в нижнем правом углу окна OnionShare. Так Вы попадёте в настройки " +"Чтобы выбрать способ подключения OnionShare к сети Tor, нажмите на значок \"⚙" +"\" в нижнем правом углу окна OnionShare. Так Вы попадёте в настройки " "приложения." #: ../../source/tor.rst:9 msgid "Use the Tor version built into OnionShare" -msgstr "" +msgstr "Использовать версию Tor встроенную в OnionShare" #: ../../source/tor.rst:11 msgid "" @@ -59,33 +59,36 @@ msgstr "" #: ../../source/tor.rst:18 msgid "Getting Around Censorship" -msgstr "" +msgstr "Обойти цензуру" #: ../../source/tor.rst:20 -#, fuzzy msgid "" "If your access to the internet is censored, you can configure OnionShare " "to connect to the Tor network using `Tor bridges `_. If OnionShare connects to Tor without " "one, you don't need to use a bridge." msgstr "" -"В случае, если доступ к сети Интернет подвергается цензуре, можно " -"настроить подключение OnionShare к сети Tor при помощи `мостов Tor` " -"`_. В случае, если " -"OnionShare успешно подключается к сети Tor, использование сетевого моста " -"необязательно." +"Если доступ к сети Интернет подвергается цензуре, можно настроить " +"подключение OnionShare к сети Tor при помощи `мостов Tor` `_. Если OnionShare успешно подключается " +"к сети Tor, использование сетевого моста необязательно." #: ../../source/tor.rst:22 msgid "" "To use a bridge, open the Tor Settings tab. You must select \"Use the Tor" " version built into OnionShare\" and check the \"Use a bridge\" checkbox." msgstr "" +"Чтобы изспользовать мост, откройте вкладку \"Настройки Tor\". Нужно выбрать " +"пункт \"Использовать версию Tor встроенную в OnionShare\" и установить " +"флажок \"Использовать мост\"." #: ../../source/tor.rst:25 msgid "" "Try using a built-in bridge first. Using `obfs4` or `snowflake` bridges " "is recommended over using `meek-azure`." msgstr "" +"Попробуйте сначала использовать встроенные мосты. Бльше рекомендуется " +"использование мостов `obfs4` или `snowflake`, нежели `meek-azure`." #: ../../source/tor.rst:29 msgid "" @@ -94,12 +97,18 @@ msgid "" "bridge. (This makes it more difficult for governments or ISPs to block " "access to Tor bridges.)" msgstr "" +"Если встроенный мост не работает, вы можете запросить мост с сайта " +"torproject.org. Вам придётся пройти проверку CAPTCHA чтобы запросить мост. (" +"Это затрудняет правительству и поставщикам услуг интернета блокировку мостов " +"Tor.)" #: ../../source/tor.rst:33 msgid "" "You also have the option of using a bridge that you learned about from a " "trusted source." msgstr "" +"Также вы можете использовать мост, о котором вы узнали из доверенного " +"источника." #: ../../source/tor.rst:36 msgid "Attempt auto-configuration with Tor Browser" @@ -569,4 +578,3 @@ msgstr "" #~ "`_. Если использование" #~ " мостов необходимо, рекомендуется в первую" #~ " очередь попробовать транспорты obfs4." - -- cgit v1.2.3-54-g00ecf From 709e4ae3c8f997e6c25bbf80c4279ad2b63acbd4 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:17:04 -0800 Subject: Move desktop code from desktop/src/onionshare to just desktop/onionshare --- .gitignore | 8 +- desktop/onionshare/__init__.py | 261 ++++++ desktop/onionshare/__main__.py | 24 + desktop/onionshare/gui_common.py | 510 ++++++++++++ desktop/onionshare/main_window.py | 356 ++++++++ desktop/onionshare/moat_dialog.py | 372 +++++++++ desktop/onionshare/resources/__init__.py | 0 desktop/onionshare/resources/images/close_tab.png | Bin 0 -> 688 bytes .../onionshare/resources/images/dark_icon-add.png | Bin 0 -> 203 bytes .../resources/images/dark_icon-close.png | Bin 0 -> 305 bytes .../onionshare/resources/images/dark_logo_text.png | Bin 0 -> 3120 bytes .../onionshare/resources/images/dark_mode_chat.png | Bin 0 -> 21827 bytes .../resources/images/dark_mode_new_tab_chat.png | Bin 0 -> 15086 bytes .../resources/images/dark_mode_new_tab_receive.png | Bin 0 -> 15277 bytes .../resources/images/dark_mode_new_tab_share.png | Bin 0 -> 13232 bytes .../resources/images/dark_mode_new_tab_website.png | Bin 0 -> 10538 bytes .../resources/images/dark_mode_receive.png | Bin 0 -> 23495 bytes .../resources/images/dark_mode_share.png | Bin 0 -> 9328 bytes .../resources/images/dark_mode_website.png | Bin 0 -> 9063 bytes .../onionshare/resources/images/dark_settings.png | Bin 0 -> 456 bytes .../resources/images/dark_tor_settings.png | Bin 0 -> 3600 bytes .../onionshare/resources/images/file_delete.png | Bin 0 -> 182 bytes .../resources/images/history_completed.png | Bin 0 -> 646 bytes .../resources/images/history_completed_none.png | Bin 0 -> 437 bytes .../resources/images/history_in_progress.png | Bin 0 -> 638 bytes .../resources/images/history_in_progress_none.png | Bin 0 -> 412 bytes .../resources/images/history_requests.png | Bin 0 -> 738 bytes .../resources/images/history_requests_none.png | Bin 0 -> 754 bytes desktop/onionshare/resources/images/info.png | Bin 0 -> 435 bytes .../resources/images/light_logo_text.png | Bin 0 -> 3334 bytes .../resources/images/light_mode_chat.png | Bin 0 -> 22092 bytes .../resources/images/light_mode_new_tab_chat.png | Bin 0 -> 15690 bytes .../images/light_mode_new_tab_receive.png | Bin 0 -> 15402 bytes .../resources/images/light_mode_new_tab_share.png | Bin 0 -> 13203 bytes .../images/light_mode_new_tab_website.png | Bin 0 -> 10670 bytes .../resources/images/light_mode_receive.png | Bin 0 -> 23614 bytes .../resources/images/light_mode_share.png | Bin 0 -> 9528 bytes .../resources/images/light_mode_website.png | Bin 0 -> 8613 bytes .../onionshare/resources/images/light_settings.png | Bin 0 -> 1157 bytes .../resources/images/light_tor_settings.png | Bin 0 -> 1503 bytes desktop/onionshare/resources/images/logo.png | Bin 0 -> 3824 bytes .../onionshare/resources/images/logo_grayscale.png | Bin 0 -> 2258 bytes .../resources/images/logo_transparent.png | Bin 0 -> 3740 bytes desktop/onionshare/resources/images/mode_chat.svg | 81 ++ .../onionshare/resources/images/mode_receive.svg | 74 ++ desktop/onionshare/resources/images/mode_share.svg | 63 ++ .../onionshare/resources/images/mode_website.svg | 35 + .../onionshare/resources/images/open_folder.png | Bin 0 -> 221 bytes .../onionshare/resources/images/open_message.png | Bin 0 -> 5403 bytes .../resources/images/persistent_enabled.png | Bin 0 -> 3398 bytes .../resources/images/receive_icon_toggle.png | Bin 0 -> 380 bytes .../images/receive_icon_toggle_selected.png | Bin 0 -> 468 bytes .../resources/images/receive_icon_transparent.png | Bin 0 -> 2138 bytes .../onionshare/resources/images/server_started.png | Bin 0 -> 347 bytes .../onionshare/resources/images/server_stopped.png | Bin 0 -> 342 bytes .../onionshare/resources/images/server_working.png | Bin 0 -> 349 bytes .../resources/images/share_icon_toggle.png | Bin 0 -> 389 bytes .../images/share_icon_toggle_selected.png | Bin 0 -> 473 bytes .../resources/images/share_icon_transparent.png | Bin 0 -> 2096 bytes desktop/onionshare/resources/locale/af.json | 179 +++++ desktop/onionshare/resources/locale/am.json | 179 +++++ desktop/onionshare/resources/locale/ar.json | 301 +++++++ desktop/onionshare/resources/locale/bg.json | 179 +++++ desktop/onionshare/resources/locale/bn.json | 312 +++++++ desktop/onionshare/resources/locale/ca.json | 288 +++++++ desktop/onionshare/resources/locale/ckb.json | 189 +++++ desktop/onionshare/resources/locale/cs.json | 122 +++ desktop/onionshare/resources/locale/da.json | 297 +++++++ desktop/onionshare/resources/locale/de.json | 345 ++++++++ desktop/onionshare/resources/locale/el.json | 338 ++++++++ desktop/onionshare/resources/locale/en.json | 236 ++++++ desktop/onionshare/resources/locale/enm.json | 219 +++++ desktop/onionshare/resources/locale/eo.json | 60 ++ desktop/onionshare/resources/locale/es.json | 350 ++++++++ desktop/onionshare/resources/locale/fa.json | 233 ++++++ desktop/onionshare/resources/locale/fi.json | 265 ++++++ desktop/onionshare/resources/locale/fr.json | 345 ++++++++ desktop/onionshare/resources/locale/ga.json | 236 ++++++ desktop/onionshare/resources/locale/gl.json | 245 ++++++ desktop/onionshare/resources/locale/gu.json | 182 +++++ desktop/onionshare/resources/locale/he.json | 185 +++++ desktop/onionshare/resources/locale/hi.json | 225 ++++++ desktop/onionshare/resources/locale/hr.json | 259 ++++++ desktop/onionshare/resources/locale/hu.json | 190 +++++ desktop/onionshare/resources/locale/id.json | 280 +++++++ desktop/onionshare/resources/locale/is.json | 338 ++++++++ desktop/onionshare/resources/locale/it.json | 279 +++++++ desktop/onionshare/resources/locale/ja.json | 334 ++++++++ desktop/onionshare/resources/locale/ka.json | 181 +++++ desktop/onionshare/resources/locale/km.json | 169 ++++ desktop/onionshare/resources/locale/ko.json | 179 +++++ desktop/onionshare/resources/locale/lg.json | 179 +++++ desktop/onionshare/resources/locale/lt.json | 256 ++++++ desktop/onionshare/resources/locale/mk.json | 179 +++++ desktop/onionshare/resources/locale/ms.json | 178 ++++ desktop/onionshare/resources/locale/nb_NO.json | 321 ++++++++ desktop/onionshare/resources/locale/nl.json | 297 +++++++ desktop/onionshare/resources/locale/pa.json | 179 +++++ desktop/onionshare/resources/locale/pl.json | 309 +++++++ desktop/onionshare/resources/locale/pt_BR.json | 338 ++++++++ desktop/onionshare/resources/locale/pt_PT.json | 319 ++++++++ desktop/onionshare/resources/locale/ro.json | 230 ++++++ desktop/onionshare/resources/locale/ru.json | 334 ++++++++ desktop/onionshare/resources/locale/si.json | 190 +++++ desktop/onionshare/resources/locale/sk.json | 190 +++++ desktop/onionshare/resources/locale/sl.json | 187 +++++ desktop/onionshare/resources/locale/sn.json | 182 +++++ desktop/onionshare/resources/locale/sr_Latn.json | 263 ++++++ desktop/onionshare/resources/locale/sv.json | 322 ++++++++ desktop/onionshare/resources/locale/sw.json | 169 ++++ desktop/onionshare/resources/locale/te.json | 170 ++++ desktop/onionshare/resources/locale/tr.json | 308 +++++++ desktop/onionshare/resources/locale/uk.json | 284 +++++++ desktop/onionshare/resources/locale/wo.json | 179 +++++ desktop/onionshare/resources/locale/yo.json | 188 +++++ desktop/onionshare/resources/locale/zh_Hans.json | 336 ++++++++ desktop/onionshare/resources/locale/zh_Hant.json | 282 +++++++ desktop/onionshare/resources/onionshare-128.png | Bin 0 -> 12788 bytes desktop/onionshare/resources/onionshare-16.png | Bin 0 -> 2437 bytes desktop/onionshare/resources/onionshare-256.png | Bin 0 -> 19034 bytes desktop/onionshare/resources/onionshare-32.png | Bin 0 -> 4051 bytes desktop/onionshare/resources/onionshare-512.png | Bin 0 -> 24613 bytes desktop/onionshare/resources/onionshare-64.png | Bin 0 -> 8486 bytes desktop/onionshare/resources/onionshare.icns | Bin 0 -> 34168 bytes desktop/onionshare/resources/onionshare.ico | Bin 0 -> 15086 bytes desktop/onionshare/resources/onionshare.png | Bin 0 -> 24613 bytes desktop/onionshare/settings_tab.py | 354 ++++++++ desktop/onionshare/strings.py | 63 ++ desktop/onionshare/tab/__init__.py | 21 + desktop/onionshare/tab/mode/__init__.py | 576 +++++++++++++ desktop/onionshare/tab/mode/chat_mode/__init__.py | 159 ++++ desktop/onionshare/tab/mode/file_selection.py | 534 ++++++++++++ desktop/onionshare/tab/mode/history.py | 892 ++++++++++++++++++++ .../onionshare/tab/mode/mode_settings_widget.py | 288 +++++++ .../onionshare/tab/mode/receive_mode/__init__.py | 427 ++++++++++ desktop/onionshare/tab/mode/share_mode/__init__.py | 478 +++++++++++ desktop/onionshare/tab/mode/share_mode/threads.py | 62 ++ .../onionshare/tab/mode/website_mode/__init__.py | 388 +++++++++ desktop/onionshare/tab/server_status.py | 598 ++++++++++++++ desktop/onionshare/tab/tab.py | 677 ++++++++++++++++ desktop/onionshare/tab_widget.py | 412 ++++++++++ desktop/onionshare/threads.py | 270 +++++++ desktop/onionshare/tor_connection.py | 324 ++++++++ desktop/onionshare/tor_settings_tab.py | 895 +++++++++++++++++++++ desktop/onionshare/update_checker.py | 232 ++++++ desktop/onionshare/widgets.py | 156 ++++ desktop/src/onionshare/__init__.py | 261 ------ desktop/src/onionshare/__main__.py | 24 - desktop/src/onionshare/gui_common.py | 510 ------------ desktop/src/onionshare/main_window.py | 356 -------- desktop/src/onionshare/moat_dialog.py | 372 --------- desktop/src/onionshare/resources/__init__.py | 0 .../src/onionshare/resources/images/close_tab.png | Bin 688 -> 0 bytes .../onionshare/resources/images/dark_icon-add.png | Bin 203 -> 0 bytes .../resources/images/dark_icon-close.png | Bin 305 -> 0 bytes .../onionshare/resources/images/dark_logo_text.png | Bin 3120 -> 0 bytes .../onionshare/resources/images/dark_mode_chat.png | Bin 21827 -> 0 bytes .../resources/images/dark_mode_new_tab_chat.png | Bin 15086 -> 0 bytes .../resources/images/dark_mode_new_tab_receive.png | Bin 15277 -> 0 bytes .../resources/images/dark_mode_new_tab_share.png | Bin 13232 -> 0 bytes .../resources/images/dark_mode_new_tab_website.png | Bin 10538 -> 0 bytes .../resources/images/dark_mode_receive.png | Bin 23495 -> 0 bytes .../resources/images/dark_mode_share.png | Bin 9328 -> 0 bytes .../resources/images/dark_mode_website.png | Bin 9063 -> 0 bytes .../onionshare/resources/images/dark_settings.png | Bin 456 -> 0 bytes .../resources/images/dark_tor_settings.png | Bin 3600 -> 0 bytes .../onionshare/resources/images/file_delete.png | Bin 182 -> 0 bytes .../resources/images/history_completed.png | Bin 646 -> 0 bytes .../resources/images/history_completed_none.png | Bin 437 -> 0 bytes .../resources/images/history_in_progress.png | Bin 638 -> 0 bytes .../resources/images/history_in_progress_none.png | Bin 412 -> 0 bytes .../resources/images/history_requests.png | Bin 738 -> 0 bytes .../resources/images/history_requests_none.png | Bin 754 -> 0 bytes desktop/src/onionshare/resources/images/info.png | Bin 435 -> 0 bytes .../resources/images/light_logo_text.png | Bin 3334 -> 0 bytes .../resources/images/light_mode_chat.png | Bin 22092 -> 0 bytes .../resources/images/light_mode_new_tab_chat.png | Bin 15690 -> 0 bytes .../images/light_mode_new_tab_receive.png | Bin 15402 -> 0 bytes .../resources/images/light_mode_new_tab_share.png | Bin 13203 -> 0 bytes .../images/light_mode_new_tab_website.png | Bin 10670 -> 0 bytes .../resources/images/light_mode_receive.png | Bin 23614 -> 0 bytes .../resources/images/light_mode_share.png | Bin 9528 -> 0 bytes .../resources/images/light_mode_website.png | Bin 8613 -> 0 bytes .../onionshare/resources/images/light_settings.png | Bin 1157 -> 0 bytes .../resources/images/light_tor_settings.png | Bin 1503 -> 0 bytes desktop/src/onionshare/resources/images/logo.png | Bin 3824 -> 0 bytes .../onionshare/resources/images/logo_grayscale.png | Bin 2258 -> 0 bytes .../resources/images/logo_transparent.png | Bin 3740 -> 0 bytes .../src/onionshare/resources/images/mode_chat.svg | 81 -- .../onionshare/resources/images/mode_receive.svg | 74 -- .../src/onionshare/resources/images/mode_share.svg | 63 -- .../onionshare/resources/images/mode_website.svg | 35 - .../onionshare/resources/images/open_folder.png | Bin 221 -> 0 bytes .../onionshare/resources/images/open_message.png | Bin 5403 -> 0 bytes .../resources/images/persistent_enabled.png | Bin 3398 -> 0 bytes .../resources/images/receive_icon_toggle.png | Bin 380 -> 0 bytes .../images/receive_icon_toggle_selected.png | Bin 468 -> 0 bytes .../resources/images/receive_icon_transparent.png | Bin 2138 -> 0 bytes .../onionshare/resources/images/server_started.png | Bin 347 -> 0 bytes .../onionshare/resources/images/server_stopped.png | Bin 342 -> 0 bytes .../onionshare/resources/images/server_working.png | Bin 349 -> 0 bytes .../resources/images/share_icon_toggle.png | Bin 389 -> 0 bytes .../images/share_icon_toggle_selected.png | Bin 473 -> 0 bytes .../resources/images/share_icon_transparent.png | Bin 2096 -> 0 bytes desktop/src/onionshare/resources/locale/af.json | 179 ----- desktop/src/onionshare/resources/locale/am.json | 179 ----- desktop/src/onionshare/resources/locale/ar.json | 301 ------- desktop/src/onionshare/resources/locale/bg.json | 179 ----- desktop/src/onionshare/resources/locale/bn.json | 312 ------- desktop/src/onionshare/resources/locale/ca.json | 288 ------- desktop/src/onionshare/resources/locale/ckb.json | 189 ----- desktop/src/onionshare/resources/locale/cs.json | 122 --- desktop/src/onionshare/resources/locale/da.json | 297 ------- desktop/src/onionshare/resources/locale/de.json | 345 -------- desktop/src/onionshare/resources/locale/el.json | 338 -------- desktop/src/onionshare/resources/locale/en.json | 236 ------ desktop/src/onionshare/resources/locale/enm.json | 219 ----- desktop/src/onionshare/resources/locale/eo.json | 60 -- desktop/src/onionshare/resources/locale/es.json | 350 -------- desktop/src/onionshare/resources/locale/fa.json | 233 ------ desktop/src/onionshare/resources/locale/fi.json | 265 ------ desktop/src/onionshare/resources/locale/fr.json | 345 -------- desktop/src/onionshare/resources/locale/ga.json | 236 ------ desktop/src/onionshare/resources/locale/gl.json | 245 ------ desktop/src/onionshare/resources/locale/gu.json | 182 ----- desktop/src/onionshare/resources/locale/he.json | 185 ----- desktop/src/onionshare/resources/locale/hi.json | 225 ------ desktop/src/onionshare/resources/locale/hr.json | 259 ------ desktop/src/onionshare/resources/locale/hu.json | 190 ----- desktop/src/onionshare/resources/locale/id.json | 280 ------- desktop/src/onionshare/resources/locale/is.json | 338 -------- desktop/src/onionshare/resources/locale/it.json | 279 ------- desktop/src/onionshare/resources/locale/ja.json | 334 -------- desktop/src/onionshare/resources/locale/ka.json | 181 ----- desktop/src/onionshare/resources/locale/km.json | 169 ---- desktop/src/onionshare/resources/locale/ko.json | 179 ----- desktop/src/onionshare/resources/locale/lg.json | 179 ----- desktop/src/onionshare/resources/locale/lt.json | 256 ------ desktop/src/onionshare/resources/locale/mk.json | 179 ----- desktop/src/onionshare/resources/locale/ms.json | 178 ---- desktop/src/onionshare/resources/locale/nb_NO.json | 321 -------- desktop/src/onionshare/resources/locale/nl.json | 297 ------- desktop/src/onionshare/resources/locale/pa.json | 179 ----- desktop/src/onionshare/resources/locale/pl.json | 309 ------- desktop/src/onionshare/resources/locale/pt_BR.json | 338 -------- desktop/src/onionshare/resources/locale/pt_PT.json | 319 -------- desktop/src/onionshare/resources/locale/ro.json | 230 ------ desktop/src/onionshare/resources/locale/ru.json | 334 -------- desktop/src/onionshare/resources/locale/si.json | 190 ----- desktop/src/onionshare/resources/locale/sk.json | 190 ----- desktop/src/onionshare/resources/locale/sl.json | 187 ----- desktop/src/onionshare/resources/locale/sn.json | 182 ----- .../src/onionshare/resources/locale/sr_Latn.json | 263 ------ desktop/src/onionshare/resources/locale/sv.json | 322 -------- desktop/src/onionshare/resources/locale/sw.json | 169 ---- desktop/src/onionshare/resources/locale/te.json | 170 ---- desktop/src/onionshare/resources/locale/tr.json | 308 ------- desktop/src/onionshare/resources/locale/uk.json | 284 ------- desktop/src/onionshare/resources/locale/wo.json | 179 ----- desktop/src/onionshare/resources/locale/yo.json | 188 ----- .../src/onionshare/resources/locale/zh_Hans.json | 336 -------- .../src/onionshare/resources/locale/zh_Hant.json | 282 ------- .../src/onionshare/resources/onionshare-128.png | Bin 12788 -> 0 bytes desktop/src/onionshare/resources/onionshare-16.png | Bin 2437 -> 0 bytes .../src/onionshare/resources/onionshare-256.png | Bin 19034 -> 0 bytes desktop/src/onionshare/resources/onionshare-32.png | Bin 4051 -> 0 bytes .../src/onionshare/resources/onionshare-512.png | Bin 24613 -> 0 bytes desktop/src/onionshare/resources/onionshare-64.png | Bin 8486 -> 0 bytes desktop/src/onionshare/resources/onionshare.icns | Bin 34168 -> 0 bytes desktop/src/onionshare/resources/onionshare.ico | Bin 15086 -> 0 bytes desktop/src/onionshare/resources/onionshare.png | Bin 24613 -> 0 bytes desktop/src/onionshare/settings_tab.py | 354 -------- desktop/src/onionshare/strings.py | 63 -- desktop/src/onionshare/tab/__init__.py | 21 - desktop/src/onionshare/tab/mode/__init__.py | 576 ------------- .../src/onionshare/tab/mode/chat_mode/__init__.py | 159 ---- desktop/src/onionshare/tab/mode/file_selection.py | 534 ------------ desktop/src/onionshare/tab/mode/history.py | 892 -------------------- .../onionshare/tab/mode/mode_settings_widget.py | 288 ------- .../onionshare/tab/mode/receive_mode/__init__.py | 427 ---------- .../src/onionshare/tab/mode/share_mode/__init__.py | 478 ----------- .../src/onionshare/tab/mode/share_mode/threads.py | 62 -- .../onionshare/tab/mode/website_mode/__init__.py | 388 --------- desktop/src/onionshare/tab/server_status.py | 598 -------------- desktop/src/onionshare/tab/tab.py | 677 ---------------- desktop/src/onionshare/tab_widget.py | 412 ---------- desktop/src/onionshare/threads.py | 270 ------- desktop/src/onionshare/tor_connection.py | 324 -------- desktop/src/onionshare/tor_settings_tab.py | 895 --------------------- desktop/src/onionshare/update_checker.py | 232 ------ desktop/src/onionshare/widgets.py | 156 ---- 291 files changed, 23671 insertions(+), 23677 deletions(-) create mode 100644 desktop/onionshare/__init__.py create mode 100644 desktop/onionshare/__main__.py create mode 100644 desktop/onionshare/gui_common.py create mode 100644 desktop/onionshare/main_window.py create mode 100644 desktop/onionshare/moat_dialog.py create mode 100644 desktop/onionshare/resources/__init__.py create mode 100644 desktop/onionshare/resources/images/close_tab.png create mode 100644 desktop/onionshare/resources/images/dark_icon-add.png create mode 100644 desktop/onionshare/resources/images/dark_icon-close.png create mode 100644 desktop/onionshare/resources/images/dark_logo_text.png create mode 100644 desktop/onionshare/resources/images/dark_mode_chat.png create mode 100644 desktop/onionshare/resources/images/dark_mode_new_tab_chat.png create mode 100644 desktop/onionshare/resources/images/dark_mode_new_tab_receive.png create mode 100644 desktop/onionshare/resources/images/dark_mode_new_tab_share.png create mode 100644 desktop/onionshare/resources/images/dark_mode_new_tab_website.png create mode 100644 desktop/onionshare/resources/images/dark_mode_receive.png create mode 100644 desktop/onionshare/resources/images/dark_mode_share.png create mode 100644 desktop/onionshare/resources/images/dark_mode_website.png create mode 100644 desktop/onionshare/resources/images/dark_settings.png create mode 100644 desktop/onionshare/resources/images/dark_tor_settings.png create mode 100644 desktop/onionshare/resources/images/file_delete.png create mode 100644 desktop/onionshare/resources/images/history_completed.png create mode 100644 desktop/onionshare/resources/images/history_completed_none.png create mode 100644 desktop/onionshare/resources/images/history_in_progress.png create mode 100644 desktop/onionshare/resources/images/history_in_progress_none.png create mode 100644 desktop/onionshare/resources/images/history_requests.png create mode 100644 desktop/onionshare/resources/images/history_requests_none.png create mode 100644 desktop/onionshare/resources/images/info.png create mode 100644 desktop/onionshare/resources/images/light_logo_text.png create mode 100644 desktop/onionshare/resources/images/light_mode_chat.png create mode 100644 desktop/onionshare/resources/images/light_mode_new_tab_chat.png create mode 100644 desktop/onionshare/resources/images/light_mode_new_tab_receive.png create mode 100644 desktop/onionshare/resources/images/light_mode_new_tab_share.png create mode 100644 desktop/onionshare/resources/images/light_mode_new_tab_website.png create mode 100644 desktop/onionshare/resources/images/light_mode_receive.png create mode 100644 desktop/onionshare/resources/images/light_mode_share.png create mode 100644 desktop/onionshare/resources/images/light_mode_website.png create mode 100644 desktop/onionshare/resources/images/light_settings.png create mode 100644 desktop/onionshare/resources/images/light_tor_settings.png create mode 100644 desktop/onionshare/resources/images/logo.png create mode 100644 desktop/onionshare/resources/images/logo_grayscale.png create mode 100644 desktop/onionshare/resources/images/logo_transparent.png create mode 100644 desktop/onionshare/resources/images/mode_chat.svg create mode 100644 desktop/onionshare/resources/images/mode_receive.svg create mode 100644 desktop/onionshare/resources/images/mode_share.svg create mode 100644 desktop/onionshare/resources/images/mode_website.svg create mode 100644 desktop/onionshare/resources/images/open_folder.png create mode 100644 desktop/onionshare/resources/images/open_message.png create mode 100644 desktop/onionshare/resources/images/persistent_enabled.png create mode 100644 desktop/onionshare/resources/images/receive_icon_toggle.png create mode 100644 desktop/onionshare/resources/images/receive_icon_toggle_selected.png create mode 100644 desktop/onionshare/resources/images/receive_icon_transparent.png create mode 100644 desktop/onionshare/resources/images/server_started.png create mode 100644 desktop/onionshare/resources/images/server_stopped.png create mode 100644 desktop/onionshare/resources/images/server_working.png create mode 100644 desktop/onionshare/resources/images/share_icon_toggle.png create mode 100644 desktop/onionshare/resources/images/share_icon_toggle_selected.png create mode 100644 desktop/onionshare/resources/images/share_icon_transparent.png create mode 100644 desktop/onionshare/resources/locale/af.json create mode 100644 desktop/onionshare/resources/locale/am.json create mode 100644 desktop/onionshare/resources/locale/ar.json create mode 100644 desktop/onionshare/resources/locale/bg.json create mode 100644 desktop/onionshare/resources/locale/bn.json create mode 100644 desktop/onionshare/resources/locale/ca.json create mode 100644 desktop/onionshare/resources/locale/ckb.json create mode 100644 desktop/onionshare/resources/locale/cs.json create mode 100644 desktop/onionshare/resources/locale/da.json create mode 100644 desktop/onionshare/resources/locale/de.json create mode 100644 desktop/onionshare/resources/locale/el.json create mode 100644 desktop/onionshare/resources/locale/en.json create mode 100644 desktop/onionshare/resources/locale/enm.json create mode 100644 desktop/onionshare/resources/locale/eo.json create mode 100644 desktop/onionshare/resources/locale/es.json create mode 100644 desktop/onionshare/resources/locale/fa.json create mode 100644 desktop/onionshare/resources/locale/fi.json create mode 100644 desktop/onionshare/resources/locale/fr.json create mode 100644 desktop/onionshare/resources/locale/ga.json create mode 100644 desktop/onionshare/resources/locale/gl.json create mode 100644 desktop/onionshare/resources/locale/gu.json create mode 100644 desktop/onionshare/resources/locale/he.json create mode 100644 desktop/onionshare/resources/locale/hi.json create mode 100644 desktop/onionshare/resources/locale/hr.json create mode 100644 desktop/onionshare/resources/locale/hu.json create mode 100644 desktop/onionshare/resources/locale/id.json create mode 100644 desktop/onionshare/resources/locale/is.json create mode 100644 desktop/onionshare/resources/locale/it.json create mode 100644 desktop/onionshare/resources/locale/ja.json create mode 100644 desktop/onionshare/resources/locale/ka.json create mode 100644 desktop/onionshare/resources/locale/km.json create mode 100644 desktop/onionshare/resources/locale/ko.json create mode 100644 desktop/onionshare/resources/locale/lg.json create mode 100644 desktop/onionshare/resources/locale/lt.json create mode 100644 desktop/onionshare/resources/locale/mk.json create mode 100644 desktop/onionshare/resources/locale/ms.json create mode 100644 desktop/onionshare/resources/locale/nb_NO.json create mode 100644 desktop/onionshare/resources/locale/nl.json create mode 100644 desktop/onionshare/resources/locale/pa.json create mode 100644 desktop/onionshare/resources/locale/pl.json create mode 100644 desktop/onionshare/resources/locale/pt_BR.json create mode 100644 desktop/onionshare/resources/locale/pt_PT.json create mode 100644 desktop/onionshare/resources/locale/ro.json create mode 100644 desktop/onionshare/resources/locale/ru.json create mode 100644 desktop/onionshare/resources/locale/si.json create mode 100644 desktop/onionshare/resources/locale/sk.json create mode 100644 desktop/onionshare/resources/locale/sl.json create mode 100644 desktop/onionshare/resources/locale/sn.json create mode 100644 desktop/onionshare/resources/locale/sr_Latn.json create mode 100644 desktop/onionshare/resources/locale/sv.json create mode 100644 desktop/onionshare/resources/locale/sw.json create mode 100644 desktop/onionshare/resources/locale/te.json create mode 100644 desktop/onionshare/resources/locale/tr.json create mode 100644 desktop/onionshare/resources/locale/uk.json create mode 100644 desktop/onionshare/resources/locale/wo.json create mode 100644 desktop/onionshare/resources/locale/yo.json create mode 100644 desktop/onionshare/resources/locale/zh_Hans.json create mode 100644 desktop/onionshare/resources/locale/zh_Hant.json create mode 100644 desktop/onionshare/resources/onionshare-128.png create mode 100644 desktop/onionshare/resources/onionshare-16.png create mode 100644 desktop/onionshare/resources/onionshare-256.png create mode 100644 desktop/onionshare/resources/onionshare-32.png create mode 100644 desktop/onionshare/resources/onionshare-512.png create mode 100644 desktop/onionshare/resources/onionshare-64.png create mode 100644 desktop/onionshare/resources/onionshare.icns create mode 100644 desktop/onionshare/resources/onionshare.ico create mode 100644 desktop/onionshare/resources/onionshare.png create mode 100644 desktop/onionshare/settings_tab.py create mode 100644 desktop/onionshare/strings.py create mode 100644 desktop/onionshare/tab/__init__.py create mode 100644 desktop/onionshare/tab/mode/__init__.py create mode 100644 desktop/onionshare/tab/mode/chat_mode/__init__.py create mode 100644 desktop/onionshare/tab/mode/file_selection.py create mode 100644 desktop/onionshare/tab/mode/history.py create mode 100644 desktop/onionshare/tab/mode/mode_settings_widget.py create mode 100644 desktop/onionshare/tab/mode/receive_mode/__init__.py create mode 100644 desktop/onionshare/tab/mode/share_mode/__init__.py create mode 100644 desktop/onionshare/tab/mode/share_mode/threads.py create mode 100644 desktop/onionshare/tab/mode/website_mode/__init__.py create mode 100644 desktop/onionshare/tab/server_status.py create mode 100644 desktop/onionshare/tab/tab.py create mode 100644 desktop/onionshare/tab_widget.py create mode 100644 desktop/onionshare/threads.py create mode 100644 desktop/onionshare/tor_connection.py create mode 100644 desktop/onionshare/tor_settings_tab.py create mode 100644 desktop/onionshare/update_checker.py create mode 100644 desktop/onionshare/widgets.py delete mode 100644 desktop/src/onionshare/__init__.py delete mode 100644 desktop/src/onionshare/__main__.py delete mode 100644 desktop/src/onionshare/gui_common.py delete mode 100644 desktop/src/onionshare/main_window.py delete mode 100644 desktop/src/onionshare/moat_dialog.py delete mode 100644 desktop/src/onionshare/resources/__init__.py delete mode 100644 desktop/src/onionshare/resources/images/close_tab.png delete mode 100644 desktop/src/onionshare/resources/images/dark_icon-add.png delete mode 100644 desktop/src/onionshare/resources/images/dark_icon-close.png delete mode 100644 desktop/src/onionshare/resources/images/dark_logo_text.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_chat.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_new_tab_chat.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_new_tab_receive.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_new_tab_share.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_new_tab_website.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_receive.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_share.png delete mode 100644 desktop/src/onionshare/resources/images/dark_mode_website.png delete mode 100644 desktop/src/onionshare/resources/images/dark_settings.png delete mode 100644 desktop/src/onionshare/resources/images/dark_tor_settings.png delete mode 100644 desktop/src/onionshare/resources/images/file_delete.png delete mode 100644 desktop/src/onionshare/resources/images/history_completed.png delete mode 100644 desktop/src/onionshare/resources/images/history_completed_none.png delete mode 100644 desktop/src/onionshare/resources/images/history_in_progress.png delete mode 100644 desktop/src/onionshare/resources/images/history_in_progress_none.png delete mode 100644 desktop/src/onionshare/resources/images/history_requests.png delete mode 100644 desktop/src/onionshare/resources/images/history_requests_none.png delete mode 100644 desktop/src/onionshare/resources/images/info.png delete mode 100644 desktop/src/onionshare/resources/images/light_logo_text.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_chat.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_new_tab_chat.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_new_tab_receive.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_new_tab_share.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_new_tab_website.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_receive.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_share.png delete mode 100644 desktop/src/onionshare/resources/images/light_mode_website.png delete mode 100644 desktop/src/onionshare/resources/images/light_settings.png delete mode 100644 desktop/src/onionshare/resources/images/light_tor_settings.png delete mode 100644 desktop/src/onionshare/resources/images/logo.png delete mode 100644 desktop/src/onionshare/resources/images/logo_grayscale.png delete mode 100644 desktop/src/onionshare/resources/images/logo_transparent.png delete mode 100644 desktop/src/onionshare/resources/images/mode_chat.svg delete mode 100644 desktop/src/onionshare/resources/images/mode_receive.svg delete mode 100644 desktop/src/onionshare/resources/images/mode_share.svg delete mode 100644 desktop/src/onionshare/resources/images/mode_website.svg delete mode 100644 desktop/src/onionshare/resources/images/open_folder.png delete mode 100644 desktop/src/onionshare/resources/images/open_message.png delete mode 100644 desktop/src/onionshare/resources/images/persistent_enabled.png delete mode 100644 desktop/src/onionshare/resources/images/receive_icon_toggle.png delete mode 100644 desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png delete mode 100644 desktop/src/onionshare/resources/images/receive_icon_transparent.png delete mode 100644 desktop/src/onionshare/resources/images/server_started.png delete mode 100644 desktop/src/onionshare/resources/images/server_stopped.png delete mode 100644 desktop/src/onionshare/resources/images/server_working.png delete mode 100644 desktop/src/onionshare/resources/images/share_icon_toggle.png delete mode 100644 desktop/src/onionshare/resources/images/share_icon_toggle_selected.png delete mode 100644 desktop/src/onionshare/resources/images/share_icon_transparent.png delete mode 100644 desktop/src/onionshare/resources/locale/af.json delete mode 100644 desktop/src/onionshare/resources/locale/am.json delete mode 100644 desktop/src/onionshare/resources/locale/ar.json delete mode 100644 desktop/src/onionshare/resources/locale/bg.json delete mode 100644 desktop/src/onionshare/resources/locale/bn.json delete mode 100644 desktop/src/onionshare/resources/locale/ca.json delete mode 100644 desktop/src/onionshare/resources/locale/ckb.json delete mode 100644 desktop/src/onionshare/resources/locale/cs.json delete mode 100644 desktop/src/onionshare/resources/locale/da.json delete mode 100644 desktop/src/onionshare/resources/locale/de.json delete mode 100644 desktop/src/onionshare/resources/locale/el.json delete mode 100644 desktop/src/onionshare/resources/locale/en.json delete mode 100644 desktop/src/onionshare/resources/locale/enm.json delete mode 100644 desktop/src/onionshare/resources/locale/eo.json delete mode 100644 desktop/src/onionshare/resources/locale/es.json delete mode 100644 desktop/src/onionshare/resources/locale/fa.json delete mode 100644 desktop/src/onionshare/resources/locale/fi.json delete mode 100644 desktop/src/onionshare/resources/locale/fr.json delete mode 100644 desktop/src/onionshare/resources/locale/ga.json delete mode 100644 desktop/src/onionshare/resources/locale/gl.json delete mode 100644 desktop/src/onionshare/resources/locale/gu.json delete mode 100644 desktop/src/onionshare/resources/locale/he.json delete mode 100644 desktop/src/onionshare/resources/locale/hi.json delete mode 100644 desktop/src/onionshare/resources/locale/hr.json delete mode 100644 desktop/src/onionshare/resources/locale/hu.json delete mode 100644 desktop/src/onionshare/resources/locale/id.json delete mode 100644 desktop/src/onionshare/resources/locale/is.json delete mode 100644 desktop/src/onionshare/resources/locale/it.json delete mode 100644 desktop/src/onionshare/resources/locale/ja.json delete mode 100644 desktop/src/onionshare/resources/locale/ka.json delete mode 100644 desktop/src/onionshare/resources/locale/km.json delete mode 100644 desktop/src/onionshare/resources/locale/ko.json delete mode 100644 desktop/src/onionshare/resources/locale/lg.json delete mode 100644 desktop/src/onionshare/resources/locale/lt.json delete mode 100644 desktop/src/onionshare/resources/locale/mk.json delete mode 100644 desktop/src/onionshare/resources/locale/ms.json delete mode 100644 desktop/src/onionshare/resources/locale/nb_NO.json delete mode 100644 desktop/src/onionshare/resources/locale/nl.json delete mode 100644 desktop/src/onionshare/resources/locale/pa.json delete mode 100644 desktop/src/onionshare/resources/locale/pl.json delete mode 100644 desktop/src/onionshare/resources/locale/pt_BR.json delete mode 100644 desktop/src/onionshare/resources/locale/pt_PT.json delete mode 100644 desktop/src/onionshare/resources/locale/ro.json delete mode 100644 desktop/src/onionshare/resources/locale/ru.json delete mode 100644 desktop/src/onionshare/resources/locale/si.json delete mode 100644 desktop/src/onionshare/resources/locale/sk.json delete mode 100644 desktop/src/onionshare/resources/locale/sl.json delete mode 100644 desktop/src/onionshare/resources/locale/sn.json delete mode 100644 desktop/src/onionshare/resources/locale/sr_Latn.json delete mode 100644 desktop/src/onionshare/resources/locale/sv.json delete mode 100644 desktop/src/onionshare/resources/locale/sw.json delete mode 100644 desktop/src/onionshare/resources/locale/te.json delete mode 100644 desktop/src/onionshare/resources/locale/tr.json delete mode 100644 desktop/src/onionshare/resources/locale/uk.json delete mode 100644 desktop/src/onionshare/resources/locale/wo.json delete mode 100644 desktop/src/onionshare/resources/locale/yo.json delete mode 100644 desktop/src/onionshare/resources/locale/zh_Hans.json delete mode 100644 desktop/src/onionshare/resources/locale/zh_Hant.json delete mode 100644 desktop/src/onionshare/resources/onionshare-128.png delete mode 100644 desktop/src/onionshare/resources/onionshare-16.png delete mode 100644 desktop/src/onionshare/resources/onionshare-256.png delete mode 100644 desktop/src/onionshare/resources/onionshare-32.png delete mode 100644 desktop/src/onionshare/resources/onionshare-512.png delete mode 100644 desktop/src/onionshare/resources/onionshare-64.png delete mode 100644 desktop/src/onionshare/resources/onionshare.icns delete mode 100644 desktop/src/onionshare/resources/onionshare.ico delete mode 100644 desktop/src/onionshare/resources/onionshare.png delete mode 100644 desktop/src/onionshare/settings_tab.py delete mode 100644 desktop/src/onionshare/strings.py delete mode 100644 desktop/src/onionshare/tab/__init__.py delete mode 100644 desktop/src/onionshare/tab/mode/__init__.py delete mode 100644 desktop/src/onionshare/tab/mode/chat_mode/__init__.py delete mode 100644 desktop/src/onionshare/tab/mode/file_selection.py delete mode 100644 desktop/src/onionshare/tab/mode/history.py delete mode 100644 desktop/src/onionshare/tab/mode/mode_settings_widget.py delete mode 100644 desktop/src/onionshare/tab/mode/receive_mode/__init__.py delete mode 100644 desktop/src/onionshare/tab/mode/share_mode/__init__.py delete mode 100644 desktop/src/onionshare/tab/mode/share_mode/threads.py delete mode 100644 desktop/src/onionshare/tab/mode/website_mode/__init__.py delete mode 100644 desktop/src/onionshare/tab/server_status.py delete mode 100644 desktop/src/onionshare/tab/tab.py delete mode 100644 desktop/src/onionshare/tab_widget.py delete mode 100644 desktop/src/onionshare/threads.py delete mode 100644 desktop/src/onionshare/tor_connection.py delete mode 100644 desktop/src/onionshare/tor_settings_tab.py delete mode 100644 desktop/src/onionshare/update_checker.py delete mode 100644 desktop/src/onionshare/widgets.py diff --git a/.gitignore b/.gitignore index c96d9d1d..00bd6ab4 100644 --- a/.gitignore +++ b/.gitignore @@ -59,10 +59,4 @@ venv # other .vscode onionshare.dist-info -desktop/src/onionshare/resources/tor -desktop/*.whl -desktop/linux -desktop/windows -desktop/macOS -# gets added automatically when building for Windows or macOS -desktop/include \ No newline at end of file +desktop/onionshare/resources/tor diff --git a/desktop/onionshare/__init__.py b/desktop/onionshare/__init__.py new file mode 100644 index 00000000..40a91913 --- /dev/null +++ b/desktop/onionshare/__init__.py @@ -0,0 +1,261 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from __future__ import division +import os +import sys +import argparse +import signal +import json +import psutil +import getpass +from PySide2 import QtCore, QtWidgets, QtGui + +from PySide2.QtCore import Slot,Qt +from PySide2.QtGui import QPalette, QColor + +from onionshare_cli.common import Common +from onionshare_cli.settings import Settings + +from .gui_common import GuiCommon +from .widgets import Alert +from .main_window import MainWindow + + +class Application(QtWidgets.QApplication): + """ + This is Qt's QApplication class. It has been overridden to support threads + and the quick keyboard shortcut. + """ + + def __init__(self, common): + if common.platform == "Linux" or common.platform == "BSD": + self.setAttribute(QtCore.Qt.AA_X11InitThreads, True) + QtWidgets.QApplication.__init__(self, sys.argv) + self.setStyle("Fusion") + + # Check color mode on starting the app + self.color_mode = self.get_color_mode(common) + + # Enable Dark Theme + if self.color_mode == "dark": + self.setDarkMode() + else: + self.setLightMode() + + self.installEventFilter(self) + + def eventFilter(self, obj, event): + if ( + event.type() == QtCore.QEvent.KeyPress + and event.key() == QtCore.Qt.Key_Q + and event.modifiers() == QtCore.Qt.ControlModifier + ): + self.quit() + return False + + def is_dark_mode(self): + baseColor = QtGui.QPalette().color(QtGui.QPalette.Base) + if baseColor.name().lower() == "#ffffff": + return False + return True + + def setLightMode(self): + light_palette = QPalette() + light_palette.setColor(QPalette.Window, QColor(236, 236, 236)) + light_palette.setColor(QPalette.WindowText, Qt.black) + light_palette.setColor(QPalette.Base, Qt.white) + light_palette.setColor(QPalette.AlternateBase, QColor(245, 245, 245)) + light_palette.setColor(QPalette.ToolTipBase, Qt.white) + light_palette.setColor(QPalette.ToolTipText, Qt.black) + light_palette.setColor(QPalette.Text, Qt.black) + light_palette.setColor(QPalette.Button, QColor(236, 236, 236)) + light_palette.setColor(QPalette.ButtonText, Qt.black) + light_palette.setColor(QPalette.BrightText, Qt.white) + light_palette.setColor(QPalette.Link, QColor(0, 104, 218)) + light_palette.setColor(QPalette.Highlight, QColor(179, 215, 255)) + light_palette.setColor(QPalette.HighlightedText, Qt.black) + light_palette.setColor(QPalette.Light, Qt.white) + light_palette.setColor(QPalette.Midlight, QColor(245, 245, 245)) + light_palette.setColor(QPalette.Dark, QColor(191, 191, 191)) + light_palette.setColor(QPalette.Mid, QColor(169, 169, 169)) + light_palette.setColor(QPalette.Shadow, Qt.black) + self.setPalette(light_palette) + + def setDarkMode(self): + dark_palette = QPalette() + dark_palette.setColor(QPalette.Window, QColor(53, 53, 53)) + dark_palette.setColor(QPalette.WindowText, Qt.white) + dark_palette.setColor(QPalette.Base, QColor(25, 25, 25)) + dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53)) + dark_palette.setColor(QPalette.ToolTipBase, Qt.white) + dark_palette.setColor(QPalette.ToolTipText, Qt.white) + dark_palette.setColor(QPalette.Text, Qt.white) + dark_palette.setColor(QPalette.Button, QColor(53, 53, 53)) + dark_palette.setColor(QPalette.ButtonText, Qt.white) + dark_palette.setColor(QPalette.BrightText, Qt.red) + dark_palette.setColor(QPalette.Link, QColor(42, 130, 218)) + dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218)) + dark_palette.setColor(QPalette.HighlightedText, Qt.black) + self.setPalette(dark_palette) + self.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }") + + def get_color_mode(self, common): + curr_settings = Settings(common) + curr_settings.load() + current_theme = curr_settings.get("theme") + + if current_theme == 1: + return "light" + elif current_theme == 2: + return "dark" + else: + return "dark" if self.is_dark_mode() else "light" + +def main(): + """ + The main() function implements all of the logic that the GUI version of onionshare uses. + """ + common = Common() + common.display_banner() + + # Required for macOS Big Sur: https://stackoverflow.com/a/64878899 + if common.platform == "Darwin": + os.environ["QT_MAC_WANTS_LAYER"] = "1" + + # Start the Qt app + global qtapp + qtapp = Application(common) + + # Parse arguments + parser = argparse.ArgumentParser( + formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=48) + ) + parser.add_argument( + "--local-only", + action="store_true", + dest="local_only", + help="Don't use Tor (only for development)", + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + dest="verbose", + help="Log OnionShare errors to stdout, and web errors to disk", + ) + parser.add_argument( + "--filenames", + metavar="filenames", + nargs="+", + help="List of files or folders to share", + ) + args = parser.parse_args() + + filenames = args.filenames + if filenames: + for i in range(len(filenames)): + filenames[i] = os.path.abspath(filenames[i]) + + local_only = bool(args.local_only) + verbose = bool(args.verbose) + + # Verbose mode? + common.verbose = verbose + + # Attach the GUI common parts to the common object + common.gui = GuiCommon(common, qtapp, local_only) + + # Validation + if filenames: + valid = True + for filename in filenames: + if not os.path.isfile(filename) and not os.path.isdir(filename): + Alert(common, f"{filename} is not a valid file.") + valid = False + if not os.access(filename, os.R_OK): + Alert(common, f"{filename} is not a readable file.") + valid = False + if not valid: + sys.exit() + + # Is there another onionshare-gui running? + if os.path.exists(common.gui.lock_filename): + with open(common.gui.lock_filename, "r") as f: + existing_pid = int(f.read()) + + # Is this process actually still running? + still_running = True + if not psutil.pid_exists(existing_pid): + still_running = False + else: + for proc in psutil.process_iter(["pid", "name", "username"]): + if proc.pid == existing_pid: + if ( + proc.username() != getpass.getuser() + or "onionshare" not in " ".join(proc.cmdline()).lower() + ): + still_running = False + + if still_running: + print(f"Opening tab in existing OnionShare window (pid {existing_pid})") + + # Make an event for the existing OnionShare window + if filenames: + obj = {"type": "new_share_tab", "filenames": filenames} + else: + obj = {"type": "new_tab"} + + # Write that event to disk + with open(common.gui.events_filename, "a") as f: + f.write(json.dumps(obj) + "\n") + return + else: + os.remove(common.gui.lock_filename) + + # Write the lock file + with open(common.gui.lock_filename, "w") as f: + f.write(f"{os.getpid()}\n") + + # Allow Ctrl-C to smoothly quit the program instead of throwing an exception + def signal_handler(s, frame): + print("\nCtrl-C pressed, quitting") + if os.path.exists(common.gui.lock_filename): + os.remove(common.gui.lock_filename) + sys.exit(0) + + signal.signal(signal.SIGINT, signal_handler) + + # Launch the gui + main_window = MainWindow(common, filenames) + + # If filenames were passed in, open them in a tab + if filenames: + main_window.tabs.new_share_tab(filenames) + + # Clean up when app quits + def shutdown(): + main_window.cleanup() + os.remove(common.gui.lock_filename) + + qtapp.aboutToQuit.connect(shutdown) + + # All done + sys.exit(qtapp.exec_()) diff --git a/desktop/onionshare/__main__.py b/desktop/onionshare/__main__.py new file mode 100644 index 00000000..3a7f3554 --- /dev/null +++ b/desktop/onionshare/__main__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from . import main + +if __name__ == "__main__": + main() diff --git a/desktop/onionshare/gui_common.py b/desktop/onionshare/gui_common.py new file mode 100644 index 00000000..2a0bae4d --- /dev/null +++ b/desktop/onionshare/gui_common.py @@ -0,0 +1,510 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +import shutil +from pkg_resources import resource_filename + +from . import strings +from onionshare_cli.onion import ( + Onion, + TorErrorInvalidSetting, + TorErrorAutomatic, + TorErrorSocketPort, + TorErrorSocketFile, + TorErrorMissingPassword, + TorErrorUnreadableCookieFile, + TorErrorAuthError, + TorErrorProtocolError, + BundledTorTimeout, + BundledTorBroken, + TorTooOldEphemeral, + TorTooOldStealth, + PortNotAvailable, +) + + +class GuiCommon: + """ + The shared code for all of the OnionShare GUI. + """ + + MODE_SHARE = "share" + MODE_RECEIVE = "receive" + MODE_WEBSITE = "website" + MODE_CHAT = "chat" + + def __init__(self, common, qtapp, local_only): + self.common = common + self.qtapp = qtapp + self.local_only = local_only + + # Are we running in a flatpak package? + self.is_flatpak = os.path.exists("/.flatpak-info") + + # Load settings + self.common.load_settings() + + # Load strings + strings.load_strings(self.common, self.get_resource_path("locale")) + + # Start the Onion + self.onion = Onion(common, get_tor_paths=self.get_tor_paths) + + # Lock filename + self.lock_filename = os.path.join(self.common.build_data_dir(), "lock") + + # Events filenames + self.events_dir = os.path.join(self.common.build_data_dir(), "events") + if not os.path.exists(self.events_dir): + os.makedirs(self.events_dir, 0o700, True) + self.events_filename = os.path.join(self.events_dir, "events") + + self.css = self.get_css(qtapp.color_mode) + self.color_mode = qtapp.color_mode + + def get_css(self, color_mode): + header_color = "#4E064F" # purple in light + title_color = "#333333" # dark gray color in main window + stop_button_color = "#d0011b" # red button color for stopping server + new_tab_button_background = "#ffffff" + new_tab_button_border = "#efeff0" + new_tab_button_text_color = "#4e0d4e" + downloads_uploads_progress_bar_border_color = "#4E064F" + downloads_uploads_progress_bar_chunk_color = "#4E064F" + share_zip_progess_bar_border_color = "#4E064F" + share_zip_progess_bar_chunk_color = "#4E064F" + history_background_color = "#ffffff" + history_label_color = "#000000" + settings_error_color = "#FF0000" + if color_mode == "dark": + header_color = "#F2F2F2" + title_color = "#F2F2F2" + stop_button_color = "#C32F2F" + new_tab_button_background = "#5F5F5F" + new_tab_button_border = "#878787" + new_tab_button_text_color = "#FFFFFF" + share_zip_progess_bar_border_color = "#F2F2F2" + history_background_color = "#191919" + history_label_color = "#ffffff" + settings_error_color = "#FF9999" + + return { + # OnionShareGui styles + "tab_widget": """ + QTabBar::tab { width: 170px; height: 30px; } + """, + "tab_widget_new_tab_button": """ + QPushButton { + font-weight: bold; + font-size: 20px; + }""", + "mode_new_tab_button": """ + QPushButton { + font-weight: bold; + font-size: 30px; + color: #601f61; + }""", + "mode_header_label": """ + QLabel { + color: """ + + header_color + + """; + font-size: 48px; + margin-bottom: 16px; + }""", + "settings_button": """ + QPushButton { + border: 0; + border-radius: 0; + }""", + "server_status_indicator_label": """ + QLabel { + font-style: italic; + color: #666666; + padding: 2px; + }""", + "status_bar": """ + QStatusBar { + font-style: italic; + color: #666666; + } + QStatusBar::item { + border: 0px; + }""", + # Common styles between modes and their child widgets + "mode_settings_toggle_advanced": """ + QPushButton { + color: #3f7fcf; + text-align: left; + } + """, + "mode_info_label": """ + QLabel { + font-size: 12px; + color: #666666; + } + """, + "server_status_url": """ + QLabel { + background-color: #ffffff; + color: #000000; + padding: 10px; + border: 1px solid #666666; + font-size: 12px; + } + """, + "server_status_url_buttons": """ + QPushButton { + padding: 4px 8px; + text-align: center; + } + """, + "server_status_button_stopped": """ + QPushButton { + background-color: #5fa416; + color: #ffffff; + padding: 10px 30px 10px 30px; + border: 0; + border-radius: 5px; + }""", + "server_status_button_working": """ + QPushButton { + background-color: #4c8211; + color: #ffffff; + padding: 10px 30px 10px 30px; + border: 0; + border-radius: 5px; + font-style: italic; + }""", + "server_status_button_started": """ + QPushButton { + background-color: """ + + stop_button_color + + """; + color: #ffffff; + padding: 10px 30px 10px 30px; + border: 0; + border-radius: 5px; + }""", + "downloads_uploads_not_empty": """ + QWidget{ + background-color: """ + + history_background_color + + """; + }""", + "downloads_uploads_empty": """ + QWidget { + background-color: """ + + history_background_color + + """; + border: 1px solid #999999; + } + QWidget QLabel { + background-color: none; + border: 0px; + } + """, + "downloads_uploads_empty_text": """ + QLabel { + color: #999999; + }""", + "downloads_uploads_label": """ + QLabel { + font-weight: bold; + font-size 14px; + text-align: center; + background-color: none; + border: none; + }""", + "downloads_uploads_clear": """ + QPushButton { + color: #3f7fcf; + } + """, + "download_uploads_indicator": """ + QLabel { + color: #ffffff; + background-color: #f44449; + font-weight: bold; + font-size: 10px; + padding: 2px; + border-radius: 7px; + text-align: center; + }""", + "downloads_uploads_progress_bar": """ + QProgressBar { + border: 1px solid """ + + downloads_uploads_progress_bar_border_color + + """; + background-color: #ffffff !important; + text-align: center; + color: #9b9b9b; + font-size: 14px; + } + QProgressBar::chunk { + background-color: """ + + downloads_uploads_progress_bar_chunk_color + + """; + width: 10px; + }""", + "history_default_label": """ + QLabel { + color: """ + + history_label_color + + """; + }""", + "history_individual_file_timestamp_label": """ + QLabel { + color: #666666; + }""", + "history_individual_file_status_code_label_2xx": """ + QLabel { + color: #008800; + }""", + "history_individual_file_status_code_label_4xx": """ + QLabel { + color: #cc0000; + }""", + "tor_not_connected_label": """ + QLabel { + font-size: 16px; + font-style: italic; + }""", + # New tab + "new_tab_button_image": """ + QLabel { + padding: 30px; + text-align: center; + } + """, + "new_tab_button_text": """ + QLabel { + border: 1px solid """ + + new_tab_button_border + + """; + border-radius: 4px; + background-color: """ + + new_tab_button_background + + """; + text-align: center; + color: """ + + new_tab_button_text_color + + """; + } + """, + "new_tab_title_text": """ + QLabel { + text-align: center; + color: """ + + title_color + + """; + font-size: 25px; + } + """, + # Share mode and child widget styles + "share_delete_all_files_button": """ + QPushButton { + color: #3f7fcf; + } + """, + "share_zip_progess_bar": """ + QProgressBar { + border: 1px solid """ + + share_zip_progess_bar_border_color + + """; + background-color: #ffffff !important; + text-align: center; + color: #9b9b9b; + } + QProgressBar::chunk { + border: 0px; + background-color: """ + + share_zip_progess_bar_chunk_color + + """; + width: 10px; + }""", + "share_filesize_warning": """ + QLabel { + padding: 10px 0; + font-weight: bold; + color: """ + + title_color + + """; + } + """, + "share_file_selection_drop_here_header_label": """ + QLabel { + color: """ + + header_color + + """; + font-size: 48px; + }""", + "share_file_selection_drop_here_label": """ + QLabel { + color: #666666; + }""", + "share_file_selection_drop_count_label": """ + QLabel { + color: #ffffff; + background-color: #f44449; + font-weight: bold; + padding: 5px 10px; + border-radius: 10px; + }""", + "share_file_list_drag_enter": """ + FileList { + border: 3px solid #538ad0; + } + """, + "share_file_list_drag_leave": """ + FileList { + border: none; + } + """, + "share_file_list_item_size": """ + QLabel { + color: #666666; + font-size: 11px; + }""", + # Receive mode and child widget styles + "receive_file": """ + QWidget { + background-color: #ffffff; + } + """, + "receive_file_size": """ + QLabel { + color: #666666; + font-size: 11px; + }""", + "receive_message_button": """ + QPushButton { + padding: 5px 10px; + }""", + # Tor Settings dialogs + "tor_settings_error": """ + QLabel { + color: """ + + settings_error_color + + """; + } + """, + } + + def get_tor_paths(self): + if self.common.platform == "Linux": + base_path = self.get_resource_path("tor") + if base_path and os.path.isdir(base_path): + self.common.log( + "GuiCommon", "get_tor_paths", "using paths in resources" + ) + tor_path = os.path.join(base_path, "tor") + tor_geo_ip_file_path = os.path.join(base_path, "geoip") + tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") + obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") + snowflake_file_path = os.path.join(base_path, "snowflake-client") + meek_client_file_path = os.path.join(base_path, "meek-client") + else: + # Fallback to looking in the path + self.common.log("GuiCommon", "get_tor_paths", "using paths from PATH") + tor_path = shutil.which("tor") + obfs4proxy_file_path = shutil.which("obfs4proxy") + snowflake_file_path = shutil.which("snowflake-client") + meek_client_file_path = shutil.which("meek-client") + prefix = os.path.dirname(os.path.dirname(tor_path)) + tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") + tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") + + if self.common.platform == "Windows": + base_path = self.get_resource_path("tor") + tor_path = os.path.join(base_path, "Tor", "tor.exe") + obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe") + snowflake_file_path = os.path.join(base_path, "Tor", "snowflake-client.exe") + meek_client_file_path = os.path.join(base_path, "Tor", "meek-client.exe") + tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip") + tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6") + elif self.common.platform == "Darwin": + base_path = self.get_resource_path("tor") + tor_path = os.path.join(base_path, "tor") + obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") + snowflake_file_path = os.path.join(base_path, "snowflake-client") + meek_client_file_path = os.path.join(base_path, "meek-client") + tor_geo_ip_file_path = os.path.join(base_path, "geoip") + tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") + elif self.common.platform == "BSD": + tor_path = "/usr/local/bin/tor" + tor_geo_ip_file_path = "/usr/local/share/tor/geoip" + tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6" + obfs4proxy_file_path = "/usr/local/bin/obfs4proxy" + meek_client_file_path = "/usr/local/bin/meek-client" + snowflake_file_path = "/usr/local/bin/snowflake-client" + + return ( + tor_path, + tor_geo_ip_file_path, + tor_geo_ipv6_file_path, + obfs4proxy_file_path, + snowflake_file_path, + meek_client_file_path, + ) + + @staticmethod + def get_resource_path(filename): + """ + Returns the absolute path of a resource + """ + try: + return resource_filename("onionshare", os.path.join("resources", filename)) + except KeyError: + return None + + @staticmethod + def get_translated_tor_error(e): + """ + Takes an exception defined in onion.py and returns a translated error message + """ + if type(e) is TorErrorInvalidSetting: + return strings._("settings_error_unknown") + elif type(e) is TorErrorAutomatic: + return strings._("settings_error_automatic") + elif type(e) is TorErrorSocketPort: + return strings._("settings_error_socket_port").format(e.args[0], e.args[1]) + elif type(e) is TorErrorSocketFile: + return strings._("settings_error_socket_file").format(e.args[0]) + elif type(e) is TorErrorMissingPassword: + return strings._("settings_error_missing_password") + elif type(e) is TorErrorUnreadableCookieFile: + return strings._("settings_error_unreadable_cookie_file") + elif type(e) is TorErrorAuthError: + return strings._("settings_error_auth").format(e.args[0], e.args[1]) + elif type(e) is TorErrorProtocolError: + return strings._("error_tor_protocol_error").format(e.args[0]) + elif type(e) is BundledTorTimeout: + return strings._("settings_error_bundled_tor_timeout") + elif type(e) is BundledTorBroken: + return strings._("settings_error_bundled_tor_broken").format(e.args[0]) + elif type(e) is TorTooOldEphemeral: + return strings._("error_ephemeral_not_supported") + elif type(e) is TorTooOldStealth: + return strings._("error_stealth_not_supported") + elif type(e) is PortNotAvailable: + return strings._("error_port_not_available") + return None diff --git a/desktop/onionshare/main_window.py b/desktop/onionshare/main_window.py new file mode 100644 index 00000000..546592a1 --- /dev/null +++ b/desktop/onionshare/main_window.py @@ -0,0 +1,356 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +import time +from PySide2 import QtCore, QtWidgets, QtGui + +from . import strings +from .tor_connection import TorConnectionDialog +from .widgets import Alert +from .update_checker import UpdateThread +from .tab_widget import TabWidget +from .gui_common import GuiCommon +from .threads import OnionCleanupThread + + +class MainWindow(QtWidgets.QMainWindow): + """ + MainWindow is the OnionShare main window, which contains the GUI elements, including all open tabs + """ + + def __init__(self, common, filenames): + super(MainWindow, self).__init__() + + self.common = common + self.common.log("MainWindow", "__init__") + + # Initialize the window + self.setMinimumWidth(1040) + self.setMinimumHeight(700) + self.setWindowTitle("OnionShare") + self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) + + # System tray + menu = QtWidgets.QMenu() + self.settings_action = menu.addAction(strings._("gui_settings_window_title")) + self.settings_action.triggered.connect(self.open_settings) + self.help_action = menu.addAction(strings._("gui_settings_button_help")) + self.help_action.triggered.connect(lambda: SettingsDialog.help_clicked(self)) + exit_action = menu.addAction(strings._("systray_menu_exit")) + exit_action.triggered.connect(self.close) + + self.system_tray = QtWidgets.QSystemTrayIcon(self) + + # The convention is Mac systray icons are always grayscale + if self.common.platform == "Darwin": + self.system_tray.setIcon( + QtGui.QIcon(GuiCommon.get_resource_path("images/logo_grayscale.png")) + ) + else: + self.system_tray.setIcon( + QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")) + ) + self.system_tray.setContextMenu(menu) + self.system_tray.show() + + # Status bar + self.status_bar = QtWidgets.QStatusBar() + self.status_bar.setSizeGripEnabled(False) + self.status_bar.setStyleSheet(self.common.gui.css["status_bar"]) + self.setStatusBar(self.status_bar) + + # Server status indicator icons + self.status_bar.server_status_image_stopped = QtGui.QImage( + GuiCommon.get_resource_path("images/server_stopped.png") + ) + self.status_bar.server_status_image_working = QtGui.QImage( + GuiCommon.get_resource_path("images/server_working.png") + ) + self.status_bar.server_status_image_started = QtGui.QImage( + GuiCommon.get_resource_path("images/server_started.png") + ) + + # Server status indicator on the status bar + self.status_bar.server_status_image_label = QtWidgets.QLabel() + self.status_bar.server_status_image_label.setFixedWidth(20) + self.status_bar.server_status_label = QtWidgets.QLabel("") + self.status_bar.server_status_label.setStyleSheet( + self.common.gui.css["server_status_indicator_label"] + ) + server_status_indicator_layout = QtWidgets.QHBoxLayout() + server_status_indicator_layout.addWidget( + self.status_bar.server_status_image_label + ) + server_status_indicator_layout.addWidget(self.status_bar.server_status_label) + self.status_bar.server_status_indicator = QtWidgets.QWidget() + self.status_bar.server_status_indicator.setLayout( + server_status_indicator_layout + ) + self.status_bar.addPermanentWidget(self.status_bar.server_status_indicator) + + # Tor settings button + self.tor_settings_button = QtWidgets.QPushButton() + self.tor_settings_button.setDefault(False) + self.tor_settings_button.setFixedSize(40, 50) + self.tor_settings_button.setIcon( + QtGui.QIcon( + GuiCommon.get_resource_path( + "images/{}_tor_settings.png".format(self.common.gui.color_mode) + ) + ) + ) + self.tor_settings_button.clicked.connect(self.open_tor_settings) + self.tor_settings_button.setStyleSheet(self.common.gui.css["settings_button"]) + self.status_bar.addPermanentWidget(self.tor_settings_button) + + if os.environ.get("ONIONSHARE_HIDE_TOR_SETTINGS") == "1": + self.tor_settings_button.hide() + + # Settings button + self.settings_button = QtWidgets.QPushButton() + self.settings_button.setDefault(False) + self.settings_button.setFixedSize(40, 50) + self.settings_button.setIcon( + QtGui.QIcon( + GuiCommon.get_resource_path( + "images/{}_settings.png".format(self.common.gui.color_mode) + ) + ) + ) + self.settings_button.clicked.connect(self.open_settings) + self.settings_button.setStyleSheet(self.common.gui.css["settings_button"]) + self.status_bar.addPermanentWidget(self.settings_button) + + # Tabs + self.tabs = TabWidget(self.common, self.system_tray, self.status_bar) + self.tabs.bring_to_front.connect(self.bring_to_front) + + # If we have saved persistent tabs, try opening those + if len(self.common.settings.get("persistent_tabs")) > 0: + for mode_settings_id in self.common.settings.get("persistent_tabs"): + self.tabs.load_tab(mode_settings_id) + else: + # Start with opening the first tab + self.tabs.new_tab_clicked() + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.tabs) + + central_widget = QtWidgets.QWidget() + central_widget.setLayout(layout) + self.setCentralWidget(central_widget) + self.show() + + # Start the "Connecting to Tor" dialog, which calls onion.connect() + tor_con = TorConnectionDialog(self.common) + tor_con.canceled.connect(self.tor_connection_canceled) + tor_con.open_tor_settings.connect(self.tor_connection_open_tor_settings) + if not self.common.gui.local_only: + tor_con.start() + self.settings_have_changed() + + # After connecting to Tor, check for updates + self.check_for_updates() + + # Create the close warning dialog -- the dialog widget needs to be in the constructor + # in order to test it + self.close_dialog = QtWidgets.QMessageBox() + self.close_dialog.setWindowTitle(strings._("gui_quit_warning_title")) + self.close_dialog.setText(strings._("gui_quit_warning_description")) + self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) + self.close_dialog.accept_button = self.close_dialog.addButton( + strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.AcceptRole + ) + self.close_dialog.reject_button = self.close_dialog.addButton( + strings._("gui_quit_warning_cancel"), QtWidgets.QMessageBox.NoRole + ) + self.close_dialog.setDefaultButton(self.close_dialog.reject_button) + + def tor_connection_canceled(self): + """ + If the user cancels before Tor finishes connecting, ask if they want to + quit, or open settings. + """ + self.common.log("MainWindow", "tor_connection_canceled") + + def ask(): + a = Alert( + self.common, + strings._("gui_tor_connection_ask"), + QtWidgets.QMessageBox.Question, + buttons=QtWidgets.QMessageBox.NoButton, + autostart=False, + ) + settings_button = QtWidgets.QPushButton( + strings._("gui_tor_connection_ask_open_settings") + ) + quit_button = QtWidgets.QPushButton( + strings._("gui_tor_connection_ask_quit") + ) + a.addButton(settings_button, QtWidgets.QMessageBox.AcceptRole) + a.addButton(quit_button, QtWidgets.QMessageBox.RejectRole) + a.setDefaultButton(settings_button) + a.exec_() + + if a.clickedButton() == settings_button: + # Open settings + self.common.log( + "OnionShareGui", + "_tor_connection_canceled", + "Settings button clicked", + ) + self.open_tor_settings() + + if a.clickedButton() == quit_button: + # Quit + self.common.log( + "OnionShareGui", "_tor_connection_canceled", "Quit button clicked" + ) + + # Wait 1ms for the event loop to finish, then quit + QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) + + # Wait 100ms before asking + QtCore.QTimer.singleShot(100, ask) + + def tor_connection_open_tor_settings(self): + """ + The TorConnectionDialog wants to open the Tor Settings dialog + """ + self.common.log("MainWindow", "tor_connection_open_tor_settings") + + # Wait 1ms for the event loop to finish closing the TorConnectionDialog + QtCore.QTimer.singleShot(1, self.open_tor_settings) + + def open_tor_settings(self): + """ + Open the TorSettingsTab + """ + self.common.log("MainWindow", "open_tor_settings") + self.tabs.open_tor_settings_tab() + + def open_settings(self): + """ + Open the SettingsTab + """ + self.common.log("MainWindow", "open_settings") + self.tabs.open_settings_tab() + + def settings_have_changed(self): + self.common.log("OnionShareGui", "settings_have_changed") + + if self.common.gui.onion.is_authenticated(): + self.status_bar.clearMessage() + + # Tell each tab that settings have changed + for index in range(self.tabs.count()): + tab = self.tabs.widget(index) + tab.settings_have_changed() + + def check_for_updates(self): + """ + Check for updates in a new thread, if enabled. + """ + if self.common.platform == "Windows" or self.common.platform == "Darwin": + if self.common.settings.get("use_autoupdate"): + + def update_available(update_url, installed_version, latest_version): + Alert( + self.common, + strings._("update_available").format( + update_url, installed_version, latest_version + ), + ) + + self.update_thread = UpdateThread(self.common, self.common.gui.onion) + self.update_thread.update_available.connect(update_available) + self.update_thread.start() + + def bring_to_front(self): + self.common.log("MainWindow", "bring_to_front") + self.raise_() + self.activateWindow() + + def closeEvent(self, e): + self.common.log("MainWindow", "closeEvent") + + if self.tabs.are_tabs_active(): + # Open the warning dialog + self.common.log("MainWindow", "closeEvent, opening warning dialog") + self.close_dialog.exec_() + + # Close + if self.close_dialog.clickedButton() == self.close_dialog.accept_button: + self.system_tray.hide() + e.accept() + # Cancel + else: + e.ignore() + return + + self.system_tray.hide() + e.accept() + + def event(self, event): + # Check if color mode switched while onionshare was open, if so, ask user to restart + if event.type() == QtCore.QEvent.Type.ApplicationPaletteChange: + QtCore.QTimer.singleShot(1, self.color_mode_warning) + return True + return QtWidgets.QMainWindow.event(self, event) + + def color_mode_warning(self): + """ + Open the color mode warning alert. + """ + notice = strings._("gui_color_mode_changed_notice") + Alert(self.common, notice, QtWidgets.QMessageBox.Information) + + def cleanup(self): + self.common.log("MainWindow", "cleanup") + self.tabs.cleanup() + + alert = Alert( + self.common, + strings._("gui_rendezvous_cleanup"), + QtWidgets.QMessageBox.Information, + buttons=QtWidgets.QMessageBox.NoButton, + autostart=False, + ) + quit_early_button = QtWidgets.QPushButton( + strings._("gui_rendezvous_cleanup_quit_early") + ) + alert.addButton(quit_early_button, QtWidgets.QMessageBox.RejectRole) + + self.onion_cleanup_thread = OnionCleanupThread(self.common) + self.onion_cleanup_thread.finished.connect(alert.accept) + self.onion_cleanup_thread.start() + + alert.exec_() + if alert.clickedButton() == quit_early_button: + self.common.log("MainWindow", "cleanup", "quitting early") + if self.onion_cleanup_thread.isRunning(): + self.onion_cleanup_thread.terminate() + self.onion_cleanup_thread.wait() + self.common.gui.onion.cleanup(wait=False) + + # Wait 1 second for threads to close gracefully, so tests finally pass + time.sleep(1) diff --git a/desktop/onionshare/moat_dialog.py b/desktop/onionshare/moat_dialog.py new file mode 100644 index 00000000..84a52390 --- /dev/null +++ b/desktop/onionshare/moat_dialog.py @@ -0,0 +1,372 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui +import requests +import os +import base64 +import json + +from . import strings +from .gui_common import GuiCommon +from onionshare_cli.meek import MeekNotFound, MeekNotRunning + + +class MoatDialog(QtWidgets.QDialog): + """ + Moat dialog: Request a bridge from torproject.org + """ + + got_bridges = QtCore.Signal(str) + + def __init__(self, common, meek): + super(MoatDialog, self).__init__() + + self.common = common + + self.common.log("MoatDialog", "__init__") + + self.meek = meek + + self.setModal(True) + self.setWindowTitle(strings._("gui_settings_bridge_moat_button")) + self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) + + # Label + self.label = QtWidgets.QLabel() + + # CAPTCHA image + self.captcha = QtWidgets.QLabel() + self.captcha.setFixedSize(400, 125) # this is the size of the CAPTCHA image + + # Solution input + self.solution_lineedit = QtWidgets.QLineEdit() + self.solution_lineedit.setPlaceholderText(strings._("moat_captcha_placeholder")) + self.solution_lineedit.editingFinished.connect( + self.solution_lineedit_editing_finished + ) + self.submit_button = QtWidgets.QPushButton(strings._("moat_captcha_submit")) + self.submit_button.clicked.connect(self.submit_clicked) + solution_layout = QtWidgets.QHBoxLayout() + solution_layout.addWidget(self.solution_lineedit) + solution_layout.addWidget(self.submit_button) + + # Error label + self.error_label = QtWidgets.QLabel() + self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) + self.error_label.hide() + + # Buttons + self.reload_button = QtWidgets.QPushButton(strings._("moat_captcha_reload")) + self.reload_button.clicked.connect(self.reload_clicked) + self.cancel_button = QtWidgets.QPushButton( + strings._("gui_settings_button_cancel") + ) + self.cancel_button.clicked.connect(self.cancel_clicked) + buttons_layout = QtWidgets.QHBoxLayout() + buttons_layout.addStretch() + buttons_layout.addWidget(self.reload_button) + buttons_layout.addWidget(self.cancel_button) + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label) + layout.addWidget(self.captcha) + layout.addLayout(solution_layout) + layout.addStretch() + layout.addWidget(self.error_label) + layout.addLayout(buttons_layout) + + self.setLayout(layout) + self.cancel_button.setFocus() + + self.reload_clicked() + + def reload_clicked(self): + """ + Reload button clicked. + """ + self.common.log("MoatDialog", "reload_clicked") + + self.label.setText(strings._("moat_contact_label")) + self.error_label.hide() + + self.captcha.hide() + self.solution_lineedit.hide() + self.reload_button.hide() + self.submit_button.hide() + + # BridgeDB fetch + self.t_fetch = MoatThread(self.common, self.meek, "fetch") + self.t_fetch.bridgedb_error.connect(self.bridgedb_error) + self.t_fetch.captcha_ready.connect(self.captcha_ready) + self.t_fetch.start() + + def submit_clicked(self): + """ + Submit button clicked. + """ + self.error_label.hide() + self.solution_lineedit.setEnabled(False) + + solution = self.solution_lineedit.text().strip() + if len(solution) == 0: + self.common.log("MoatDialog", "submit_clicked", "solution is blank") + self.error_label.setText(strings._("moat_solution_empty_error")) + self.error_label.show() + return + + # BridgeDB check + self.t_check = MoatThread( + self.common, + self.meek, + "check", + { + "transport": self.transport, + "challenge": self.challenge, + "solution": self.solution_lineedit.text(), + }, + ) + self.t_check.bridgedb_error.connect(self.bridgedb_error) + self.t_check.captcha_error.connect(self.captcha_error) + self.t_check.bridges_ready.connect(self.bridges_ready) + self.t_check.start() + + def cancel_clicked(self): + """ + Cancel button clicked. + """ + self.common.log("MoatDialog", "cancel_clicked") + self.close() + + def bridgedb_error(self): + self.common.log("MoatDialog", "bridgedb_error") + self.error_label.setText(strings._("moat_bridgedb_error")) + self.error_label.show() + + self.solution_lineedit.setEnabled(True) + + def captcha_error(self, msg): + self.common.log("MoatDialog", "captcha_error") + if msg == "": + self.error_label.setText(strings._("moat_captcha_error")) + else: + self.error_label.setText(msg) + self.error_label.show() + + self.solution_lineedit.setEnabled(True) + + def captcha_ready(self, transport, image, challenge): + self.common.log("MoatDialog", "captcha_ready") + + self.transport = transport + self.challenge = challenge + + # Save captcha image to disk, so we can load it + captcha_data = base64.b64decode(image) + captcha_filename = os.path.join(self.common.build_tmp_dir(), "captcha.jpg") + with open(captcha_filename, "wb") as f: + f.write(captcha_data) + + self.captcha.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(captcha_filename))) + os.remove(captcha_filename) + + self.label.setText(strings._("moat_captcha_label")) + self.captcha.show() + self.solution_lineedit.setEnabled(True) + self.solution_lineedit.setText("") + self.solution_lineedit.show() + self.solution_lineedit.setFocus() + self.reload_button.show() + self.submit_button.show() + + def solution_lineedit_editing_finished(self): + self.common.log("MoatDialog", "solution_lineedit_editing_finished") + + def bridges_ready(self, bridges): + self.common.log("MoatDialog", "bridges_ready", bridges) + self.got_bridges.emit(bridges) + self.close() + + +class MoatThread(QtCore.QThread): + """ + This does all of the communicating with BridgeDB in a separate thread. + + Valid actions are: + - "fetch": requests a new CAPTCHA + - "check": sends a CAPTCHA solution + + """ + + bridgedb_error = QtCore.Signal() + captcha_error = QtCore.Signal(str) + captcha_ready = QtCore.Signal(str, str, str) + bridges_ready = QtCore.Signal(str) + + def __init__(self, common, meek, action, data={}): + super(MoatThread, self).__init__() + self.common = common + self.common.log("MoatThread", "__init__", f"action={action}") + + self.meek = meek + self.transport = "obfs4" + self.action = action + self.data = data + + def run(self): + + # Start Meek so that we can do domain fronting + try: + self.meek.start() + except MeekNotFound: + self.common.log("MoatThread", "run", f"Could not find meek-client") + self.bridgedb_error.emit() + return + except MeekNotRunning: + self.common.log( + "MoatThread", "run", f"Ran meek-client, but there was an error" + ) + self.bridgedb_error.emit() + return + + # We should only fetch bridges if we can domain front, + # but we can override this in local-only mode. + if not self.meek.meek_proxies and not self.common.gui.local_only: + self.common.log( + "MoatThread", "run", f"Could not identify meek proxies to make request" + ) + self.bridgedb_error.emit() + return + + if self.action == "fetch": + self.common.log("MoatThread", "run", f"starting fetch") + + # Request a bridge + r = requests.post( + "https://bridges.torproject.org/moat/fetch", + headers={"Content-Type": "application/vnd.api+json"}, + proxies=self.meek.meek_proxies, + json={ + "data": [ + { + "version": "0.1.0", + "type": "client-transports", + "supported": ["obfs4", "snowflake"], + } + ] + }, + ) + + self.meek.cleanup() + + if r.status_code != 200: + self.common.log("MoatThread", "run", f"status_code={r.status_code}") + self.bridgedb_error.emit() + return + + try: + moat_res = r.json() + if "errors" in moat_res: + self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") + self.bridgedb_error.emit() + return + if "data" not in moat_res: + self.common.log("MoatThread", "run", f"no data") + self.bridgedb_error.emit() + return + if moat_res["data"][0]["type"] != "moat-challenge": + self.common.log("MoatThread", "run", f"type != moat-challange") + self.bridgedb_error.emit() + return + + transport = moat_res["data"][0]["transport"] + image = moat_res["data"][0]["image"] + challenge = moat_res["data"][0]["challenge"] + + self.captcha_ready.emit(transport, image, challenge) + except Exception as e: + self.common.log("MoatThread", "run", f"hit exception: {e}") + self.bridgedb_error.emit() + return + + elif self.action == "check": + self.common.log("MoatThread", "run", f"starting check") + + # Check the CAPTCHA + r = requests.post( + "https://bridges.torproject.org/moat/check", + headers={"Content-Type": "application/vnd.api+json"}, + proxies=self.meek.meek_proxies, + json={ + "data": [ + { + "id": "2", + "type": "moat-solution", + "version": "0.1.0", + "transport": self.data["transport"], + "challenge": self.data["challenge"], + "solution": self.data["solution"], + "qrcode": "false", + } + ] + }, + ) + + self.meek.cleanup() + + if r.status_code != 200: + self.common.log("MoatThread", "run", f"status_code={r.status_code}") + self.bridgedb_error.emit() + return + + try: + moat_res = r.json() + self.common.log( + "MoatThread", + "run", + f"got bridges:\n{json.dumps(moat_res,indent=2)}", + ) + + if "errors" in moat_res: + self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") + if moat_res["errors"][0]["code"] == 419: + self.captcha_error.emit("") + return + else: + errors = " ".join([e["detail"] for e in moat_res["errors"]]) + self.captcha_error.emit(errors) + return + + if moat_res["data"][0]["type"] != "moat-bridges": + self.common.log("MoatThread", "run", f"type != moat-bridges") + self.bridgedb_error.emit() + return + + bridges = moat_res["data"][0]["bridges"] + self.bridges_ready.emit("\n".join(bridges)) + + except Exception as e: + self.common.log("MoatThread", "run", f"hit exception: {e}") + self.bridgedb_error.emit() + return + + else: + self.common.log("MoatThread", "run", f"invalid action: {self.action}") diff --git a/desktop/onionshare/resources/__init__.py b/desktop/onionshare/resources/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/desktop/onionshare/resources/images/close_tab.png b/desktop/onionshare/resources/images/close_tab.png new file mode 100644 index 00000000..a7984a6d Binary files /dev/null and b/desktop/onionshare/resources/images/close_tab.png differ diff --git a/desktop/onionshare/resources/images/dark_icon-add.png b/desktop/onionshare/resources/images/dark_icon-add.png new file mode 100644 index 00000000..5b8600c9 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_icon-add.png differ diff --git a/desktop/onionshare/resources/images/dark_icon-close.png b/desktop/onionshare/resources/images/dark_icon-close.png new file mode 100644 index 00000000..b9efb45d Binary files /dev/null and b/desktop/onionshare/resources/images/dark_icon-close.png differ diff --git a/desktop/onionshare/resources/images/dark_logo_text.png b/desktop/onionshare/resources/images/dark_logo_text.png new file mode 100644 index 00000000..6568ee0d Binary files /dev/null and b/desktop/onionshare/resources/images/dark_logo_text.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_chat.png b/desktop/onionshare/resources/images/dark_mode_chat.png new file mode 100644 index 00000000..fe58d384 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_chat.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_new_tab_chat.png b/desktop/onionshare/resources/images/dark_mode_new_tab_chat.png new file mode 100644 index 00000000..e496a63a Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_new_tab_chat.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_new_tab_receive.png b/desktop/onionshare/resources/images/dark_mode_new_tab_receive.png new file mode 100644 index 00000000..6912ff24 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_new_tab_receive.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_new_tab_share.png b/desktop/onionshare/resources/images/dark_mode_new_tab_share.png new file mode 100644 index 00000000..3d8ae81f Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_new_tab_share.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_new_tab_website.png b/desktop/onionshare/resources/images/dark_mode_new_tab_website.png new file mode 100644 index 00000000..5eef2a2e Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_new_tab_website.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_receive.png b/desktop/onionshare/resources/images/dark_mode_receive.png new file mode 100644 index 00000000..60795631 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_receive.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_share.png b/desktop/onionshare/resources/images/dark_mode_share.png new file mode 100644 index 00000000..b6ea7202 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_share.png differ diff --git a/desktop/onionshare/resources/images/dark_mode_website.png b/desktop/onionshare/resources/images/dark_mode_website.png new file mode 100644 index 00000000..52bae58c Binary files /dev/null and b/desktop/onionshare/resources/images/dark_mode_website.png differ diff --git a/desktop/onionshare/resources/images/dark_settings.png b/desktop/onionshare/resources/images/dark_settings.png new file mode 100644 index 00000000..8bb96f8a Binary files /dev/null and b/desktop/onionshare/resources/images/dark_settings.png differ diff --git a/desktop/onionshare/resources/images/dark_tor_settings.png b/desktop/onionshare/resources/images/dark_tor_settings.png new file mode 100644 index 00000000..0b44bd95 Binary files /dev/null and b/desktop/onionshare/resources/images/dark_tor_settings.png differ diff --git a/desktop/onionshare/resources/images/file_delete.png b/desktop/onionshare/resources/images/file_delete.png new file mode 100644 index 00000000..b9057df5 Binary files /dev/null and b/desktop/onionshare/resources/images/file_delete.png differ diff --git a/desktop/onionshare/resources/images/history_completed.png b/desktop/onionshare/resources/images/history_completed.png new file mode 100644 index 00000000..e68fe5a2 Binary files /dev/null and b/desktop/onionshare/resources/images/history_completed.png differ diff --git a/desktop/onionshare/resources/images/history_completed_none.png b/desktop/onionshare/resources/images/history_completed_none.png new file mode 100644 index 00000000..8dbd6939 Binary files /dev/null and b/desktop/onionshare/resources/images/history_completed_none.png differ diff --git a/desktop/onionshare/resources/images/history_in_progress.png b/desktop/onionshare/resources/images/history_in_progress.png new file mode 100644 index 00000000..19694659 Binary files /dev/null and b/desktop/onionshare/resources/images/history_in_progress.png differ diff --git a/desktop/onionshare/resources/images/history_in_progress_none.png b/desktop/onionshare/resources/images/history_in_progress_none.png new file mode 100644 index 00000000..2d61dba4 Binary files /dev/null and b/desktop/onionshare/resources/images/history_in_progress_none.png differ diff --git a/desktop/onionshare/resources/images/history_requests.png b/desktop/onionshare/resources/images/history_requests.png new file mode 100644 index 00000000..4965744d Binary files /dev/null and b/desktop/onionshare/resources/images/history_requests.png differ diff --git a/desktop/onionshare/resources/images/history_requests_none.png b/desktop/onionshare/resources/images/history_requests_none.png new file mode 100644 index 00000000..93a71ef3 Binary files /dev/null and b/desktop/onionshare/resources/images/history_requests_none.png differ diff --git a/desktop/onionshare/resources/images/info.png b/desktop/onionshare/resources/images/info.png new file mode 100644 index 00000000..4be4e65e Binary files /dev/null and b/desktop/onionshare/resources/images/info.png differ diff --git a/desktop/onionshare/resources/images/light_logo_text.png b/desktop/onionshare/resources/images/light_logo_text.png new file mode 100644 index 00000000..4b05d0b2 Binary files /dev/null and b/desktop/onionshare/resources/images/light_logo_text.png differ diff --git a/desktop/onionshare/resources/images/light_mode_chat.png b/desktop/onionshare/resources/images/light_mode_chat.png new file mode 100644 index 00000000..cd3a4432 Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_chat.png differ diff --git a/desktop/onionshare/resources/images/light_mode_new_tab_chat.png b/desktop/onionshare/resources/images/light_mode_new_tab_chat.png new file mode 100644 index 00000000..ec1e29cb Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_new_tab_chat.png differ diff --git a/desktop/onionshare/resources/images/light_mode_new_tab_receive.png b/desktop/onionshare/resources/images/light_mode_new_tab_receive.png new file mode 100644 index 00000000..722fe3df Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_new_tab_receive.png differ diff --git a/desktop/onionshare/resources/images/light_mode_new_tab_share.png b/desktop/onionshare/resources/images/light_mode_new_tab_share.png new file mode 100644 index 00000000..17569fc2 Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_new_tab_share.png differ diff --git a/desktop/onionshare/resources/images/light_mode_new_tab_website.png b/desktop/onionshare/resources/images/light_mode_new_tab_website.png new file mode 100644 index 00000000..e88f344e Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_new_tab_website.png differ diff --git a/desktop/onionshare/resources/images/light_mode_receive.png b/desktop/onionshare/resources/images/light_mode_receive.png new file mode 100644 index 00000000..277ec487 Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_receive.png differ diff --git a/desktop/onionshare/resources/images/light_mode_share.png b/desktop/onionshare/resources/images/light_mode_share.png new file mode 100644 index 00000000..2339f69f Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_share.png differ diff --git a/desktop/onionshare/resources/images/light_mode_website.png b/desktop/onionshare/resources/images/light_mode_website.png new file mode 100644 index 00000000..56e492a3 Binary files /dev/null and b/desktop/onionshare/resources/images/light_mode_website.png differ diff --git a/desktop/onionshare/resources/images/light_settings.png b/desktop/onionshare/resources/images/light_settings.png new file mode 100644 index 00000000..b6f8fa55 Binary files /dev/null and b/desktop/onionshare/resources/images/light_settings.png differ diff --git a/desktop/onionshare/resources/images/light_tor_settings.png b/desktop/onionshare/resources/images/light_tor_settings.png new file mode 100644 index 00000000..e8db08eb Binary files /dev/null and b/desktop/onionshare/resources/images/light_tor_settings.png differ diff --git a/desktop/onionshare/resources/images/logo.png b/desktop/onionshare/resources/images/logo.png new file mode 100644 index 00000000..43884c1f Binary files /dev/null and b/desktop/onionshare/resources/images/logo.png differ diff --git a/desktop/onionshare/resources/images/logo_grayscale.png b/desktop/onionshare/resources/images/logo_grayscale.png new file mode 100644 index 00000000..950d9ff6 Binary files /dev/null and b/desktop/onionshare/resources/images/logo_grayscale.png differ diff --git a/desktop/onionshare/resources/images/logo_transparent.png b/desktop/onionshare/resources/images/logo_transparent.png new file mode 100644 index 00000000..1e8ed196 Binary files /dev/null and b/desktop/onionshare/resources/images/logo_transparent.png differ diff --git a/desktop/onionshare/resources/images/mode_chat.svg b/desktop/onionshare/resources/images/mode_chat.svg new file mode 100644 index 00000000..335e9cf4 --- /dev/null +++ b/desktop/onionshare/resources/images/mode_chat.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/onionshare/resources/images/mode_receive.svg b/desktop/onionshare/resources/images/mode_receive.svg new file mode 100644 index 00000000..5a0a29fd --- /dev/null +++ b/desktop/onionshare/resources/images/mode_receive.svg @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/onionshare/resources/images/mode_share.svg b/desktop/onionshare/resources/images/mode_share.svg new file mode 100644 index 00000000..9fb97c65 --- /dev/null +++ b/desktop/onionshare/resources/images/mode_share.svg @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/onionshare/resources/images/mode_website.svg b/desktop/onionshare/resources/images/mode_website.svg new file mode 100644 index 00000000..1a80846f --- /dev/null +++ b/desktop/onionshare/resources/images/mode_website.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/desktop/onionshare/resources/images/open_folder.png b/desktop/onionshare/resources/images/open_folder.png new file mode 100644 index 00000000..0a734c41 Binary files /dev/null and b/desktop/onionshare/resources/images/open_folder.png differ diff --git a/desktop/onionshare/resources/images/open_message.png b/desktop/onionshare/resources/images/open_message.png new file mode 100644 index 00000000..6712ecf9 Binary files /dev/null and b/desktop/onionshare/resources/images/open_message.png differ diff --git a/desktop/onionshare/resources/images/persistent_enabled.png b/desktop/onionshare/resources/images/persistent_enabled.png new file mode 100644 index 00000000..6c295db5 Binary files /dev/null and b/desktop/onionshare/resources/images/persistent_enabled.png differ diff --git a/desktop/onionshare/resources/images/receive_icon_toggle.png b/desktop/onionshare/resources/images/receive_icon_toggle.png new file mode 100644 index 00000000..846ececb Binary files /dev/null and b/desktop/onionshare/resources/images/receive_icon_toggle.png differ diff --git a/desktop/onionshare/resources/images/receive_icon_toggle_selected.png b/desktop/onionshare/resources/images/receive_icon_toggle_selected.png new file mode 100644 index 00000000..127ce208 Binary files /dev/null and b/desktop/onionshare/resources/images/receive_icon_toggle_selected.png differ diff --git a/desktop/onionshare/resources/images/receive_icon_transparent.png b/desktop/onionshare/resources/images/receive_icon_transparent.png new file mode 100644 index 00000000..99207097 Binary files /dev/null and b/desktop/onionshare/resources/images/receive_icon_transparent.png differ diff --git a/desktop/onionshare/resources/images/server_started.png b/desktop/onionshare/resources/images/server_started.png new file mode 100644 index 00000000..9c0c3176 Binary files /dev/null and b/desktop/onionshare/resources/images/server_started.png differ diff --git a/desktop/onionshare/resources/images/server_stopped.png b/desktop/onionshare/resources/images/server_stopped.png new file mode 100644 index 00000000..5c5b2ec0 Binary files /dev/null and b/desktop/onionshare/resources/images/server_stopped.png differ diff --git a/desktop/onionshare/resources/images/server_working.png b/desktop/onionshare/resources/images/server_working.png new file mode 100644 index 00000000..e5c8b318 Binary files /dev/null and b/desktop/onionshare/resources/images/server_working.png differ diff --git a/desktop/onionshare/resources/images/share_icon_toggle.png b/desktop/onionshare/resources/images/share_icon_toggle.png new file mode 100644 index 00000000..87303c9f Binary files /dev/null and b/desktop/onionshare/resources/images/share_icon_toggle.png differ diff --git a/desktop/onionshare/resources/images/share_icon_toggle_selected.png b/desktop/onionshare/resources/images/share_icon_toggle_selected.png new file mode 100644 index 00000000..0ba52cff Binary files /dev/null and b/desktop/onionshare/resources/images/share_icon_toggle_selected.png differ diff --git a/desktop/onionshare/resources/images/share_icon_transparent.png b/desktop/onionshare/resources/images/share_icon_transparent.png new file mode 100644 index 00000000..3648c3fb Binary files /dev/null and b/desktop/onionshare/resources/images/share_icon_transparent.png differ diff --git a/desktop/onionshare/resources/locale/af.json b/desktop/onionshare/resources/locale/af.json new file mode 100644 index 00000000..6a7219bd --- /dev/null +++ b/desktop/onionshare/resources/locale/af.json @@ -0,0 +1,179 @@ +{ + "preparing_files": "Pers lêers saam.", + "not_a_readable_file": "{0:s} is nie ’n leesbare lêer nie.", + "no_available_port": "Kon geen beskikbare poort vind om die uidiens te begin nie", + "other_page_loaded": "Adres gelaai", + "incorrect_password": "Verkeerde wagwoord", + "close_on_autostop_timer": "Gestop omdat outo-stoptydhouer afgeloop het", + "closing_automatically": "Gestop omdat die oordrag klaar is", + "large_filesize": "Waarskuwing: die stuur van ’n groot lêer kan ure duur", + "gui_drag_and_drop": "Sleep-en-los lêers en vouers\nom te begin deel", + "gui_add": "Voeg Toe", + "gui_add_files": "Voeg Lêers Toe", + "gui_add_folder": "Voeg Vouer Toe", + "gui_delete": "Skrap", + "gui_choose_items": "Kies", + "gui_share_start_server": "Begin deel", + "gui_share_stop_server": "Staak deel", + "gui_share_stop_server_autostop_timer": "Staak Deel ({})", + "gui_stop_server_autostop_timer_tooltip": "Outo-stoptydhouer eindig om {}", + "gui_start_server_autostart_timer_tooltip": "Outo-begintydhouer eindig om {}", + "gui_receive_start_server": "Begin Ontvangmodus", + "gui_receive_stop_server": "Staak Ontvangmodus", + "gui_receive_stop_server_autostop_timer": "Staak Ontvangmodus ({} oorblywend)", + "gui_copy_url": "Kopieer Adres", + "gui_canceled": "Gekanselleer", + "gui_copied_url_title": "OnionShare-adres Gekopieer", + "gui_copied_url": "OnionShare-adres na knipbord gekopieer", + "gui_waiting_to_start": "Geskeduleer om oor {} te begin. Klik om te kanselleer.", + "gui_please_wait": "Begin… Klik om te kanselleer.", + "gui_quit_title": "Nie so haastig nie", + "gui_share_quit_warning": "U is besig om lêers te verstuur. Is u seker u wil OnionShare afsluit?", + "gui_receive_quit_warning": "U is besig om lêers te ontvang. Is u seker u wil OnionShare afsluit?", + "gui_quit_warning_quit": "Sluit Af", + "gui_quit_warning_dont_quit": "Kanselleer", + "zip_progress_bar_format": "Samepersing: %p%", + "error_stealth_not_supported": "U benodig ten minste Tor 0.2.6.1-alfa (of TorBrowser 6.5) en python3-stem 1.5.0 om kliënt-magtiging te gebruik.", + "error_ephemeral_not_supported": "OnionShare vereis ten minste Tor 0.2.7.1 en python3-stem 1.4.0.", + "gui_settings_window_title": "Instellings", + "gui_settings_whats_this": "Wat is dit?", + "gui_settings_stealth_option": "Gebruik kliëntmagtiging", + "gui_settings_autoupdate_label": "Soek na nuwe weergawe", + "gui_settings_autoupdate_option": "Laat my weet wanneer ’n nuwe weergawe beskikbaar is", + "gui_settings_autoupdate_timestamp": "Laas gesoek: {}", + "gui_settings_autoupdate_timestamp_never": "Nooit", + "gui_settings_autoupdate_check_button": "Soek na Nuwe Weergawe", + "gui_settings_general_label": "Algemene instellings", + "gui_settings_onion_label": "Ui-instellings", + "gui_settings_sharing_label": "Deelinstellings", + "gui_settings_close_after_first_download_option": "Staak deel nadat lêers verstuur is", + "gui_settings_csp_header_disabled_option": "Deaktiveer Inhoudsekuriteitsbeleidkop", + "gui_settings_individual_downloads_label": "Merk af om aflaai van individuele lêers toe te staan", + "gui_settings_connection_type_label": "Hoe moet OnionShare aan Tor koppel?", + "gui_settings_connection_type_bundled_option": "Gebruik die Tor-weergawe wat by OnionShare ingebou is", + "gui_settings_connection_type_automatic_option": "Probeer outo-opstelling met Tor Browser", + "gui_settings_connection_type_control_port_option": "Koppel d.m.v. kontrolepoort", + "gui_settings_connection_type_socket_file_option": "Koppel d.m.v. soklêer", + "gui_settings_connection_type_test_button": "Toets Tor-koppeling", + "gui_settings_control_port_label": "Kontrolepoort", + "gui_settings_socket_file_label": "Soklêer", + "gui_settings_socks_label": "SOCKS-poort", + "gui_settings_authenticate_label": "Tormagtiginginstellings", + "gui_settings_authenticate_no_auth_option": "Geen magtiging of koekiemagtiging", + "gui_settings_authenticate_password_option": "Wagwoord", + "gui_settings_password_label": "Wagwoord", + "gui_settings_tor_bridges": "Tor-brugondersteuning", + "gui_settings_tor_bridges_no_bridges_radio_option": "Moenie brûe gebruik nie", + "gui_settings_tor_bridges_obfs4_radio_option": "Gebruik ingeboude obfs4-inpropbare vervoere", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gebruik ingeboude obfs4-inpropbare vervoere (vereis obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere (vereis obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Waarskuwing: Die meek_lite-brûe is baie duur vir die Tor-projek om uit te voer.

Gebruik dit slegs indien u nie direk aan Tor, d.m.v. obfs4-vervoere, of ander normale brûe kan koppel nie.", + "gui_settings_tor_bridges_custom_radio_option": "Gebruik pasgemaakte brûe", + "gui_settings_tor_bridges_custom_label": "U kan brûe vanaf https://bridges.torproject.org verkry", + "gui_settings_tor_bridges_invalid": "Geen van u toegevoegde brûe werk nie.\nGaan dit na of voeg ander toe.", + "gui_settings_button_save": "Bewaar", + "gui_settings_button_cancel": "Kanselleer", + "gui_settings_button_help": "Help", + "gui_settings_autostop_timer_checkbox": "Gebruik outo-stoptydhouer", + "gui_settings_autostop_timer": "Staak die deel om:", + "gui_settings_autostart_timer_checkbox": "Gebruik outo-begintydhouer", + "gui_settings_autostart_timer": "Begin die deel om:", + "settings_error_unknown": "Kan nie aan Tor-kontroleur koppel nie omdat u instellings onsinnig is.", + "settings_error_automatic": "Kon nie aan die Tor-kontroleur koppel nie. Loop Tor Browser (beskikbaar by torproject.org) in die agtergrond?", + "settings_error_socket_port": "Kan nie aan die Tor-kontroleur by {}:{} koppel nie .", + "settings_error_socket_file": "Kan nie aan die Tor-kontroleur d.m.v. soklêer {} koppel nie.", + "settings_error_auth": "Gekoppel aan {}:{} maar kan nie magtig nie. Miskien is die nie ’n Tor-kontroleur nie?", + "settings_error_missing_password": "Gekoppel aan Tor-kontroleur, maar dit vereis ’n wagwoord om te magtig.", + "settings_error_unreadable_cookie_file": "Gekoppel aan die Tor-kontroleur, maar wagwoord is dalk verkeerd of u gebruiker mag nie die koekielêer lees nie.", + "settings_error_bundled_tor_not_supported": "Die Tor-weergawe wat met OnionShare verskeep word werk nie in ontwikkelaarsmodus op Windows of macOS nie.", + "settings_error_bundled_tor_timeout": "Vat te lank om aan Tor te koppel. Miskien is u nie aan die Internet gekoppel nie of u stelselhorlosie is onakkuraat?", + "settings_error_bundled_tor_broken": "OnionShare kon nie in die agtergrond aan Tor koppel nie:\n{}", + "settings_test_success": "Gekoppel aan die Tor-kontroleur:\n\nTor-weergawe: {}\nSteun efemere uidienste: {}.\nSteun kliëntmagtiging: {}.\nSteun nuwegenerasie-.onionadresse: {}.", + "error_tor_protocol_error": "Daar was ’n fout met Tor: {}", + "error_tor_protocol_error_unknown": "Daar was ’n onbekende fout met Tor", + "connecting_to_tor": "Koppel tans aan die Tor-netwerk", + "update_available": "Nuwe OnionShare is beskikbaar. Klik hier om dit te kry.

U gebruik {} en die nuutste is {}.", + "update_error_check_error": "Kon nie na nuwe weergawe soek nie: die OnionShare-webwerf sê dat die nuutste weergawe die onherkenbare ‘{}’ is…", + "update_error_invalid_latest_version": "Kon nie na die nuwe weergawe soek nie. U is dalk nie aan Tor gekoppel nie of die OnionShare-webwerf is vanlyn.", + "update_not_available": "U gebruik die nuutste OnionShare.", + "gui_tor_connection_ask": "Open die instellings om Tor-koppeling op te los?", + "gui_tor_connection_ask_open_settings": "Ja", + "gui_tor_connection_ask_quit": "Sluit Af", + "gui_tor_connection_error_settings": "Probeer in die instellings verander hoe OnionShare aan die Tor-netwerk koppel.", + "gui_tor_connection_canceled": "Kon nie aan Tor koppel nie.\n\nMaak seker u is aan die Internet gekoppel, open OnionShare dan weer en stel die Tor-koppeling weer op.", + "gui_tor_connection_lost": "Ontkoppel van Tor.", + "gui_server_started_after_autostop_timer": "Die outo-stoptydhouer het afgeloop voor die bediener kon begin. Skep ’n nuwe deel.", + "gui_server_autostop_timer_expired": "Die outo-stoptydhouer het reeds afgeloop. Pas dit aan om te begin deel.", + "gui_server_autostart_timer_expired": "Die geskeduleerde tyd is verstreke. Verstel dit om met deel te begin met.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die outo-stoptyd kan nie dieselfde of vroeër as die outo-begintyd wees nie. Pas dit aan om te begin deel.", + "share_via_onionshare": "Deel d.m.v. OnionShare", + "gui_connect_to_tor_for_onion_settings": "Koppel aan Tor om uidiensinstellings te sien", + "gui_save_private_key_checkbox": "Gebruik ’n blywende adres", + "gui_share_url_description": "Enigeen met hierdie OnionShare-adres kan u lêers d.m.v. die Tor Browser aflaai: ", + "gui_website_url_description": "Enigeen met hierdie OnionShare-adres kan u webwerf d.m.v. die Tor Browser besoek: ", + "gui_receive_url_description": "Enigeen met hierdie OnionShare-adres kan lêers d.m.v. die Tor Browser na u rekenaar oplaai: ", + "gui_url_label_persistent": "Hierdie deel sal nie self stop nie.

Elke opvolgende deel hergebruik die adres. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)", + "gui_url_label_stay_open": "Hierdie deel sal nie self stop nie.", + "gui_url_label_onetime": "Hierdie deel sal stop na eerste voltooiing.", + "gui_url_label_onetime_and_persistent": "Hierdie deel sal nie self stop nie.

Elke opvolgende deel sal die adres hergebruik. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)", + "gui_status_indicator_share_stopped": "Gereed om te deel", + "gui_status_indicator_share_working": "Begin…", + "gui_status_indicator_share_scheduled": "Geskeduleer…", + "gui_status_indicator_share_started": "Deel tans", + "gui_status_indicator_receive_stopped": "Gereed om te ontvang", + "gui_status_indicator_receive_working": "Begin…", + "gui_status_indicator_receive_scheduled": "Geskeduleer…", + "gui_status_indicator_receive_started": "Ontvang tans", + "gui_file_info": "{} lêers, {}", + "gui_file_info_single": "{} lêer, {}", + "history_in_progress_tooltip": "{} besig", + "history_completed_tooltip": "{} afgehandel", + "history_requests_tooltip": "{} webversoeke", + "error_cannot_create_data_dir": "Kon nie OnionShare-datavouer skep nie: {}", + "gui_receive_mode_warning": "Ontvangsmodus laat ander mense lêers op u rekenaar plaas.

Sommige van die lêers kan moontlik u rekenaar oorneem indien u dit open. Open slegs lêers van mense wat u vertrou of indien u weet wat u doen.", + "gui_mode_share_button": "Deel Lêers", + "gui_mode_receive_button": "Ontvang Lêers", + "gui_mode_website_button": "Publiseer Webwerf", + "gui_settings_receiving_label": "Ontvangsinstellings", + "gui_settings_website_label": "Webwerfinstellings", + "gui_settings_data_dir_label": "Bewaar lêers na", + "gui_settings_data_dir_browse_button": "Blaai", + "gui_settings_public_mode_checkbox": "Openbaarmodus", + "gui_open_folder_error_nautilus": "Kan nie vouer oopmaak nie want nautilus is onbeskikbaar. Die lêer is hier: {}", + "gui_settings_language_label": "Voorkeurtaal", + "gui_settings_language_changed_notice": "Herbegin OnionShare om die nuwe taal te gebruik.", + "systray_menu_exit": "Sluit Af", + "systray_page_loaded_title": "Bladsy Gelaai", + "systray_page_loaded_message": "OnionShare-adres gelaai", + "systray_share_started_title": "Deel het Begin", + "systray_share_started_message": "Begin lêers aan iemand stuur", + "systray_share_completed_title": "Deel is Afgehandel", + "systray_share_completed_message": "Lêers klaar gestuur", + "systray_share_canceled_title": "Deel is Gekanselleer", + "systray_share_canceled_message": "Iemand het ontvangs van u lêers gekanselleer", + "systray_receive_started_title": "Ontvang het Begin", + "systray_receive_started_message": "Iemand stuur lêers aan u", + "gui_all_modes_history": "Geskiedenis", + "gui_all_modes_clear_history": "Wis Alles", + "gui_all_modes_transfer_started": "Begin {}", + "gui_all_modes_transfer_finished_range": "Oorgedra {} - {}", + "gui_all_modes_transfer_finished": "Oorgedra {}", + "gui_all_modes_transfer_canceled_range": "Gekanselleer {} - {}", + "gui_all_modes_transfer_canceled": "Gekanselleer {}", + "gui_all_modes_progress_complete": "%p%, {0:s} verstreke.", + "gui_all_modes_progress_starting": "{0:s}, %p% (bereken tans)", + "gui_all_modes_progress_eta": "{0:s}, Verwagte Aankomstyd: {1:s}, %p%", + "gui_share_mode_no_files": "Nog Geen Lêers Gestuur Nie", + "gui_share_mode_autostop_timer_waiting": "Wag om klaar te stuur", + "gui_website_mode_no_files": "Nog Geen Webwerf Gedeel Nie", + "gui_receive_mode_no_files": "Nog Geen Lêers Ontvang Nie", + "gui_receive_mode_autostop_timer_waiting": "Wag om klaar te ontvang", + "receive_mode_upload_starting": "Oplaai van totale grootte {} begin", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_file_selection_remove_all": "Verwyder Als", + "gui_remove": "Verwyder" +} diff --git a/desktop/onionshare/resources/locale/am.json b/desktop/onionshare/resources/locale/am.json new file mode 100644 index 00000000..9a93c31f --- /dev/null +++ b/desktop/onionshare/resources/locale/am.json @@ -0,0 +1,179 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "ተወው", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/ar.json b/desktop/onionshare/resources/locale/ar.json new file mode 100644 index 00000000..eaf26a4c --- /dev/null +++ b/desktop/onionshare/resources/locale/ar.json @@ -0,0 +1,301 @@ +{ + "config_onion_service": "تثبيت خدمة onion على المنفذ {0:d}.", + "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 service", + "other_page_loaded": "تم تحميل العنوان", + "close_on_autostop_timer": "تمّ الإيقاف بسبب بلوغ مؤقت الإيقاف أجله", + "closing_automatically": "تم الإيقاف بسبب تمام النقل", + "timeout_download_still_running": "انتظار اكتمال التحميل", + "large_filesize": "تحذير: رفع مشاركة كبيرة قد يستغرق ساعات", + "systray_menu_exit": "أنهِ", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "اكمل المستخدم تحميل الملفات", + "systray_download_canceled_title": "تم الغاء التحميل", + "systray_download_canceled_message": "الغى المستخدم التحميل", + "systray_upload_started_title": "بدأ الرفع", + "systray_upload_started_message": "بدأ مستخدم رفع ملفات الى حاسوبك", + "help_local_only": "لا تستخدم تور (فقط لغرض التطوير)", + "help_stay_open": "استمر في المشاركة بعد اول تحميل", + "help_autostop_timer": "أوقف المشاركة بعد ثواني محددة", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "أوقف المشاركة ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "فعّل طور التلقّي", + "gui_receive_stop_server": "أوقف طور التلقّي", + "gui_receive_stop_server_autostop_timer": "أوقف طور التلقّي (باقي {})", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "نسخ العنوان", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "تم الإلغاء", + "gui_copied_url_title": "OnionShare تمّ نسخ عنوان", + "gui_copied_url": "تمّ نسخ عوان اونينشير إلى الحافظة", + "gui_please_wait": "جاري البدء… اضغط هنا للإلغاء.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "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": "ألغِ", + "zip_progress_bar_format": "جاري الضغط: %p%", + "error_stealth_not_supported": "لاستعمال استيثاق العميل تلزمك إصدارة تور ‪0.2.9.1-alpha‬ أو (متصفّح تور 6.5) و python3-stem الإصدارة 1.5.0، أو ما بعدها.", + "error_ephemeral_not_supported": "يتطلّب OnionShare كلّا من إصدارة تور 0.2.7.1 و الإصدارة 1.4.0 من python3-stem.", + "gui_settings_window_title": "الإعدادات", + "gui_settings_whats_this": "ما هذا؟", + "gui_settings_stealth_option": "فعّل استيثاق العميل", + "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_sharing_label": "إعدادات المشاركة", + "gui_settings_close_after_first_download_option": "أوقف المشاركة بعد تمام تنزيل المتلقّي الملفات", + "gui_settings_connection_type_label": "كيف ينبغي أن يتصل اونينشير بشبكة تور؟", + "gui_settings_connection_type_bundled_option": "OnionShareباستخدام إصدار تور المضمّن في", + "gui_settings_connection_type_automatic_option": "Torجرب التهيئة التلقائية باستخدام متصفح", + "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": "SOCKSمنفذ", + "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": "باستخدام وسائل نقل obfs4 المضمّنة", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استخدام وسائل نقل obfs4 المضمّنة يتطلّب obfs4proxy", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "باستخدام وسائل نقل meek_lite ‮(‪Azure في‬)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استخدام وسائل نقل meek_lite ‮(‪Azure‬)‬ يتطلّب obfs4proxy", + "gui_settings_meek_lite_expensive_warning": "تنبيه: استخدام جسور meek_lite يكلّف مشروع تور للغاية..

استخدمها عند الضرورة فقط لتعذّر الاتّصال بتور مباشرة، أو عبر وسائل نقل obfs4 أو الجسور الاعتيادية.", + "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_button_save": "احفظ", + "gui_settings_button_cancel": "ألغِ", + "gui_settings_button_help": "مساعدة", + "gui_settings_autostop_timer_checkbox": "استخدم مؤقِّت الإيقاف", + "gui_settings_autostop_timer": "أوقف المشاركة في:", + "settings_error_unknown": "تعذّر الاتصال بمتحكّم تور لأنّ تضبيطاتك غير صحيحة.", + "settings_error_automatic": "تعذّر الاتّصال بمتحكم تور. هل متصفح Tor (و هو متاح في torproject.org) يعمل في الخلفية؟", + "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": "استعمال إصدارة تور المضمّنة في OnionShare لا يعمل في طور التطوير في وِندوز و لا ماك أوإس.", + "settings_error_bundled_tor_timeout": "استغرق الاتّصال بتور وقتا أطول من اللازم. ربما أنت غير متصّل بالإنترنت، أو أنّ ساعة النظام غير مضبوطة بدقة؟", + "settings_error_bundled_tor_broken": "تعذّر على OnionShare الاتصّال بتور في الخلفية:\n{}", + "settings_test_success": "تمّ الاتصال بمتحكّم تور.\n\nإصدار تور: {}\nيدعم خدمات البصلة الزائلة: {}.\nيدعم استيثاق العميل: {}.\nيدعم الجيل الأحدث من عناوين ‪.onion‬: {}.", + "error_tor_protocol_error": "ثمّة عطل في تور: {}", + "error_tor_protocol_error_unknown": "طرأ عطل مجهول في تور", + "error_invalid_private_key": "نوع المفتاح الخاص هذا غير معتمد", + "connecting_to_tor": "يجري الاتصال بشبكة تور", + "update_available": "توجد إصدارة أحدث من OnionShare. يمكنك تنزيلها الآن.

إصدارتك {} و الأحدث {}.", + "update_error_check_error": "تعذر التحقق من وجود إصدار أحدث: ربما أنت لست متصلًا بTor، أو أن موقع 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_autostop_timer": "بلغ مؤقِّت الإيقاف أجله قبل اشتغال الخادوم. أنشئ مشاركة جديدة.", + "gui_server_autostop_timer_expired": "انتهى وقت الايقاف التلقائي للمشاركة. من فضلك عدّله للبدء بالمشاركة.", + "share_via_onionshare": "شارك باستعمال OnionShare", + "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_started": "يجري التلقّي", + "gui_file_info": "{} ملفات، {}", + "gui_file_info_single": "{} ملف، {}", + "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": "", + "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_downloads_label": "", + "gui_settings_downloads_button": "استعراض", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "الطور العلني", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "تم تحميل الصفحة", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "تعذّر فتح الدليل لأنَّ نوتِلَس ليس متاحًا. الملف موجود في: {}", + "gui_settings_language_label": "اللغة المفضلة", + "gui_settings_language_changed_notice": "أعد تشغيل OnionShare لتطبيق خيار اللغة الجديد.", + "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_autostop_timer_waiting": "في انتظار إتمام الإرسال", + "gui_receive_mode_no_files": "لَمْ تُتَلقَّ أيّة ملفات بعد", + "gui_receive_mode_autostop_timer_waiting": "في انتظار إتمام التلقّي", + "gui_stop_server_autostop_timer_tooltip": "مؤقت الإيقاف التلقائي ينتهي في {}", + "gui_start_server_autostart_timer_tooltip": "مؤقت البدأ التلقائي ينتهي في {}", + "gui_waiting_to_start": "مُجدولة للبدأ في {}. اضغط هنا للإلغاء.", + "gui_settings_autostart_timer_checkbox": "استخدم مؤقِّت البدء", + "gui_settings_autostart_timer": "ابدأ المشاركة في:", + "gui_server_autostart_timer_expired": "انتهى الوقت المُجدول للمشاركة. عدلّه للبدء بالمشاركة.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "وقت الإيقاف التلقائى لا يمكن أن يكون قبل او نفس وقت البدء. من فضلك عدّله للبدء بالمشاركة.", + "gui_status_indicator_share_scheduled": "تمّت الجدولة…", + "gui_status_indicator_receive_scheduled": "تمّت الجدولة…", + "error_cannot_create_data_dir": "تعذَّر إنشاء دليل بيانات OnionShare: {}", + "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": "%p%، الوقت المنقضي {0:s}.", + "gui_all_modes_progress_starting": "(يجري الحساب) {0:s}، %p%", + "gui_all_modes_progress_eta": "{0:s}، الزمن الباقي المقدّر: {1:s}، %p%", + "days_first_letter": "يوم", + "hours_first_letter": "ساعة", + "minutes_first_letter": "دقيقة", + "seconds_first_letter": "ثانية", + "gui_website_url_description": "أى شخص معه مسار OnionsShare هذا سيكون بامكانه زيارة موقعك باستخدام متصفح تور: ", + "gui_mode_website_button": "قم بإصدار الموقع", + "gui_website_mode_no_files": "لا يوجد موقع تمت مشاركته حتى الآن", + "incorrect_password": "كلمة السر غير صحيحة", + "gui_settings_individual_downloads_label": "ازل لتسمح بتحميل الملفات فرادى", + "history_requests_tooltip": "{} طلب من الويب", + "gui_settings_csp_header_disabled_option": "أوقف حماية Content Security Policy", + "gui_settings_website_label": "اعدادات الموقع", + "gui_receive_flatpak_data_dir": "بسبب أنت قد ثبّت OnionShare باستخدام Flatpak، يجب عليك حفظ الملفات داخل مُجلد في المسار ~/OnionShare.", + "gui_qr_code_dialog_title": "OnionShare رمز الاستجابة السريعة", + "gui_show_qr_code": "اظهر رمز الاستجابة السريعة", + "gui_chat_stop_server": "إيقاف خادم الدردشة", + "gui_chat_start_server": "ابدأ خادم الدردشة", + "gui_file_selection_remove_all": "إزالة الكُل", + "gui_remove": "إزالة", + "error_port_not_available": "منفذ OnionShare غير متاح", + "gui_rendezvous_cleanup_quit_early": "قم بالإنهاء مبكرًا", + "gui_rendezvous_cleanup": "في انتظار إغلاق دوائر Tor للتأكد من أن ملفاتك تم نقلها بنجاح.\t\n\t\nهذا قد يستغرق بعض الدقائق.", + "mode_settings_website_disable_csp_checkbox": "لا ترسل عنوان سياسة أمان المحتوى (يسمح لموقعك على الويب باستخدام موارد الجهات الخارجية)", + "mode_settings_receive_data_dir_browse_button": "تصفح", + "mode_settings_receive_data_dir_label": "حفظ الملفات إلى", + "mode_settings_share_autostop_sharing_checkbox": "إيقاف المشاركة بعد إرسال الملفات ( قم بإلغاء التحديد للسماح بتنزيل الملفات الفردية)", + "mode_settings_legacy_checkbox": "استخدم عنوانًا قديمًا (النسخة الثانية من خدمة onion، لا ينصح بها)", + "mode_settings_autostop_timer_checkbox": "إيقاف خدمة Onion في ميعاد مجدول", + "mode_settings_autostart_timer_checkbox": "بدء خدمة Onion في ميعاد مجدول", + "mode_settings_public_checkbox": "هذه هي خدمة OnionShare خاصة بالعامة (تعطّل المفتاح الخاص)", + "mode_settings_persistent_checkbox": "حفظ هذا التبويب، وقم بفتحه تلقائيا عند تشغيل OnionShare", + "mode_settings_advanced_toggle_hide": "إخفاء الإعدادات المتقدمة", + "mode_settings_advanced_toggle_show": "عرض إعدادات متقدمة", + "gui_quit_warning_cancel": "إلغاء", + "gui_quit_warning_description": "المشاركة نشطة على بعض تبويباتك. إذا قمت بالخروج، جميع تبويباتك سيتم إغلاقها. هل أنت متأكد من رغبتك في الخروج؟", + "gui_quit_warning_title": "هل أنت متأكد؟", + "gui_close_tab_warning_cancel": "إلغاء", + "gui_close_tab_warning_close": "إغلاق", + "gui_close_tab_warning_website_description": "أنت تقوم باستضافة موقعًا نشطًا. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", + "gui_close_tab_warning_receive_description": "أنت الآن تقوم باستقبال ملفات. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", + "gui_close_tab_warning_share_description": "أنت الآن تقوم بإرسال ملفات. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", + "gui_close_tab_warning_persistent_description": "هذا التبويب قيد العمل. إذا قمت بإغلاقه سوق تفقد العنوان الذي تستخدمه. هل أنت متأكد من رغبتك في إغلاقه؟", + "gui_close_tab_warning_title": "هل أنت متأكد؟", + "gui_tab_name_chat": "دردشة", + "gui_tab_name_website": "موقع", + "gui_tab_name_receive": "استقبال", + "gui_tab_name_share": "مشاركة", + "gui_main_page_chat_button": "بدء الدردشة", + "gui_main_page_website_button": "بدء الاستضافة", + "gui_main_page_receive_button": "بدء الاستقبال", + "gui_main_page_share_button": "ابدء المشاركة", + "gui_new_tab_chat_button": "الدردشة بشكل مجهول", + "gui_new_tab_website_button": "استضافة موقع", + "gui_new_tab_receive_button": "استلام ملفات", + "gui_new_tab_share_button": "مشاركة ملفات", + "gui_new_tab_tooltip": "افتح تبويب جديد", + "gui_new_tab": "تبويب جديد", + "gui_color_mode_changed_notice": "يُرجى إعادة تشغيل OnionShare من أجل تطبيق المظهر باللون الجديد.", + "gui_open_folder_error": "فشل فتح ملف باستخدام xdg-open. الملف هنا: {}", + "gui_chat_url_description": "أي شخص يوجد معه عنوان OnionShare يمكنه الانضمام إلى غرفة المحادثة هذه باستخدام متصفح تور Tor Browser", + "history_receive_read_message_button": "اقرأ الرسالة", + "mode_settings_receive_webhook_url_checkbox": "استخدم خطاف الويب التلقائي للإخطارات", + "mode_settings_receive_disable_files_checkbox": "تعطيل تحميل الملفات", + "mode_settings_receive_disable_text_checkbox": "تعطيل إرسال النص", + "mode_settings_title_label": "عنوان مخصص", + "gui_settings_theme_dark": "داكن", + "gui_settings_theme_light": "فاتح", + "gui_settings_theme_auto": "تلقائي", + "gui_settings_theme_label": "المظهر", + "gui_status_indicator_chat_started": "في محادثة", + "gui_status_indicator_chat_scheduled": "مُبَرمَج…", + "gui_status_indicator_chat_working": "يبدأ…", + "gui_status_indicator_chat_stopped": "جاهز للدردشة", + "gui_client_auth_instructions": "بعد ذلك ، أرسل المفتاح الخاص للسماح بالوصول إلى خدمة OnionShare الخاصة بك:", + "gui_url_instructions_public_mode": "أرسل عنوان OnionShare أدناه:", + "gui_url_instructions": "أولاً، أرسل عنوان OnionShare أدناه:", + "gui_please_wait_no_button": "يبدأ…", + "gui_hide": "إخف", + "gui_qr_label_auth_string_title": "المفتاح الخاص", + "gui_qr_label_url_title": "عنوان OnionShare", + "gui_copied_client_auth": "تم نسخ المفتاح الخاص إلى الحافظة", + "gui_copy_client_auth": "نسخ المفتاح الخاص" +} diff --git a/desktop/onionshare/resources/locale/bg.json b/desktop/onionshare/resources/locale/bg.json new file mode 100644 index 00000000..76feab06 --- /dev/null +++ b/desktop/onionshare/resources/locale/bg.json @@ -0,0 +1,179 @@ +{ + "config_onion_service": "Създаване на onion услуга на порт {0:d}.", + "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_autostop_timer": "Спряно, защото автоматично спиращият таймер приключи", + "closing_automatically": "Спряно, защото свалянето приключи", + "timeout_download_still_running": "Изчакване на свалянето да приключи", + "timeout_upload_still_running": "Изчакване ъплоудът да приключи", + "large_filesize": "Предупреждение: изпращане на голям дял може да отнеме часове", + "systray_menu_exit": "Изход", + "systray_download_started_title": "OnionShare сваляне започна", + "systray_download_started_message": "Потребител започна да сваля файловете Ви", + "systray_download_completed_title": "OnionShare свалянето приключи", + "systray_download_completed_message": "Потребителят приключи с изтегляне на Вашите файлове", + "systray_download_canceled_title": "OnionShare сваляне е отменено", + "systray_download_canceled_message": "Потребителят отмени свалянето", + "systray_upload_started_title": "OnionShare ъплоуд започна", + "systray_upload_started_message": "Ползвател започна да ъплоудва файлове на компютъра Ви", + "help_local_only": "Не използвайте Тор (само за разработване)", + "help_stay_open": "Продължи споделянето след първото изтегляне", + "help_autostop_timer": "Спри споделянето след дадено количество секунди", + "help_stealth": "Използвай клиент авторизация (напреднал)", + "help_receive": "Получаване на дялове вместо изпращане", + "help_verbose": "Протоколирай OnionShare грешки на stdout и уеб грешки на диск", + "help_filename": "Списък на документи или папки за споделяне", + "help_config": "Персонализирано местоположение на JSON конфигурационен файл (незадължително)", + "gui_drag_and_drop": "Плъзнете и пуснете файлове и папки, \nза да започнете споделяне", + "gui_add": "Добавете", + "gui_delete": "Изтриване", + "gui_choose_items": "Изберете", + "gui_share_start_server": "Започнете споделянето", + "gui_share_stop_server": "Спрете споделянето", + "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_autostop_timer": "Спрете получаващия режим ({} остават)", + "gui_receive_stop_server_autostop_timer_tooltip": "Автоматично спиращият таймер спира в {}", + "gui_copy_url": "Копирайте адрес", + "gui_downloads": "Свалете история", + "gui_no_downloads": "Още няма изтегляния", + "gui_canceled": "Отменен", + "gui_copied_url_title": "OnionShare адресът е копиран", + "gui_copied_url": "OnionShare адресът е копиран към клипборда", + "gui_please_wait": "Започва... кликни за отменяне.", + "gui_download_upload_progress_complete": "%p%, {0:s} изтече.", + "gui_download_upload_progress_starting": "{0:s}, %p% (изчисляване)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "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": "Отказ", + "zip_progress_bar_format": "Компресира: %p%", + "error_stealth_not_supported": "За да използвате ауторизация на клиента Ви трябва поне Tor 0.2.9.1-alpha (или на браузъра 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_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_sharing_label": "Настройки на споделяне", + "gui_settings_close_after_first_download_option": "Спри споделянето след първото изтегляне", + "gui_settings_connection_type_label": "Как OnionShare да се свържe с Тор?", + "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_socket_file_label": "Сокет файл", + "gui_settings_socks_label": "SOCKS порт", + "gui_settings_authenticate_label": "Настройки на Тор за удостоверяване на автентичността", + "gui_settings_authenticate_no_auth_option": "Без автентикация или cookie автентикация", + "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": "Използвайте вградените obfs4 pluggable транспорти", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Използвайте вградените obfs4 pluggable транспорти (изисква obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Използвайте вградените meek_lite (Azure) pluggable транспорти", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Използвайте вградените meek_lite (Azure) pluggable транспорти (изискват obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Предупреждение: meek_lite мостовета са много скъпи за проекта Тор.

Използвайте ги само, ако не можете да се свържете пряко чрез obfs4 транспорти или други нормални мостове с Тор.", + "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_button_save": "Запазване", + "gui_settings_button_cancel": "Отказ", + "gui_settings_button_help": "Помощ", + "gui_settings_autostop_timer_checkbox": "Използвайте автоматично спиращия таймер", + "gui_settings_autostop_timer": "Спри дела на:", + "settings_error_unknown": "Не мога да се свържа с Тор контролера, защото Вашите настройки не правят смисъл.", + "settings_error_automatic": "Не мога да се свържа с Тор контролера. Стартиран ли е Тор браузерът във фонов режим (достъпен от torproject. org)?", + "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": "Използване на Тор версия, идваща с OnionShare не работи в режим на разработчик под Windows или macOS.", + "settings_error_bundled_tor_timeout": "Oтнема прекалено дълго време да се свържа с Тор. Може би не сте свързани с интернет или системният часовник е неточен?", + "settings_error_bundled_tor_broken": "OnionShare не можа да се свърже с Тор във фонов режим:\n{}", + "settings_test_success": "Свързан с Тор контролер.\n\nТор версия: {}\nПоддържа ephemeral onion services: {}\nПоддържа клиент автентикация: {}\nПоддържа следваща генерация .onion адреси: {}", + "error_tor_protocol_error": "Станала е грешка с Тор: {}", + "error_tor_protocol_error_unknown": "Имаше неизвестена грешка с Тор", + "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_autostop_timer": "Автоматично спиращият таймер спря преди сървърът да стартира.\nМоля направете нов дял.", + "gui_server_autostop_timer_expired": "Автоматично спиращият таймер спря.\nМоля актуализирайте за да започнете споделяне.", + "share_via_onionshare": "Споделете го чрез OnionShare", + "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_started": "Получаване", + "gui_file_info": "{} файлове, {}", + "gui_file_info_single": "{} файл, {}", + "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": "Предупреждение: Режим на приемане позволява на хора да качват файлове на Вашия компютър. Някои файлове могат потенциално да поемат контрол над компютъра Ви, ако ги отворите. Отваряйте единствено неща от хора, на които вярвате или ако знаете какво правите.", + "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_downloads_label": "Запазете файлове в", + "gui_settings_downloads_button": "Разглеждане", + "gui_settings_public_mode_checkbox": "Публичен режим", + "systray_close_server_title": "OnionShare сървърът приключи", + "systray_close_server_message": "Един ползвател затвори сървъра", + "systray_page_loaded_title": "OnionShare страницата е заредена", + "systray_download_page_loaded_message": "Един ползвател зареди свалената страница", + "systray_upload_page_loaded_message": "Един ползвател зареди ъплоуд страницата", + "gui_uploads": "Ъплоуд история", + "gui_no_uploads": "Все още няма качвания", + "gui_clear_history": "Изтрий всичко", + "gui_upload_in_progress": "Качването започна", + "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." +} diff --git a/desktop/onionshare/resources/locale/bn.json b/desktop/onionshare/resources/locale/bn.json new file mode 100644 index 00000000..a156afb3 --- /dev/null +++ b/desktop/onionshare/resources/locale/bn.json @@ -0,0 +1,312 @@ +{ + "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": "অনিয়ন সার্ভিস চালু করার জন্য কোন পোর্ট পাওয়া যাচ্ছে না", + "other_page_loaded": "ঠিকানা লোড হয়েছে", + "close_on_autostop_timer": "বন্ধ হয়ে গিয়েছে, কারণ অটো-স্টপ টাইমার এর সময় শেষ", + "closing_automatically": "ট্রান্সফার শেষ, তাই থেমে যাওয়া হলো", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "সতর্কতা: বড় ফাইল পাঠাতে গেলে অনেক সময় লাগতে পারে", + "systray_menu_exit": "করুন", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "Tor ব্যবহার করবে না (শুধুমাত্র ডেভেলপারদের জন্য)", + "help_stay_open": "ফাইলগুলো পাঠানো হয়ে গেলেও শেয়ার করা থামিও না", + "help_autostop_timer": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও", + "help_stealth": "ক্লায়েন্ট অনুমোদন ব্যবহার করুন (উন্নততর)", + "help_receive": "কোনকিছু শেয়ার না করে শুধু গ্রহণ করবে", + "help_verbose": "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_autostop_timer": "শেয়ার বন্ধ করো ({})", + "gui_share_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", + "gui_receive_start_server": "রিসিভ মোড আরম্ভ করো", + "gui_receive_stop_server": "রিসিভ মোড বন্ধ করো", + "gui_receive_stop_server_autostop_timer": "রিসিভ মোড বন্ধ করো({} বাকি)", + "gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", + "gui_copy_url": "এড্রেস কপি করো", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "বাতিল করা হয়েছে", + "gui_copied_url_title": "OnionShare ঠিকানা কপি করা হয়েছে", + "gui_copied_url": "OnionShare ঠিকানাটি ক্লিপবোর্ডে কপি করা হয়েছে", + "gui_please_wait": "চালু করছি… বাতিল করতে এখানে ক্লিক করো।", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "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": "বাতিল", + "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.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।", + "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_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_socket_file_label": "সকেট ফাইল", + "gui_settings_socks_label": "SOCKS পোর্ট", + "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": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)", + "gui_settings_meek_lite_expensive_warning": "সতর্কতা: meek_lite ব্রিজ পরিচালনা করা Tor Project-এর জন্য অনেক ব্যয়বহুল।

এগুলো তখনই ব্যবহার করো যখন Tor-এ সরাসরি কানেক্ট করতে পারছো না, obfs4 ট্রান্সপোর্ট দিয়ে, অথবা অন্যান্য সাধারণ ব্রিজ দিয়ে।", + "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_button_save": "সেভ", + "gui_settings_button_cancel": "বাতিল", + "gui_settings_button_help": "সাহায্য", + "gui_settings_autostop_timer_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো", + "gui_settings_autostop_timer": "শেয়ার বন্ধ করো:", + "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করা যায় না কারণ তোমার বিন্যাসসমূহ বোধগম্য নয়।", + "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন্ডে কি চলমান?", + "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": "OnionShare এর সাথে আসা টর সংস্করণটি উইন্ডোজ বা ম্যাক এ ডেভেলপার মোডে কাজ করে না।", + "settings_error_bundled_tor_timeout": "টর সাথে সংযোগ করার জন্য খুব বেশি সময় লাগছে। হয়তো তুমি ইন্টারনেটের সাথে সংযুক্ত নন, অথবা তোমার কম্পিউটারের সময় ঠিক নেই?", + "settings_error_bundled_tor_broken": "OnionShare টর এর সাথে কানেক্ট করতে পারছে না:\n{}", + "settings_test_success": "টর নিয়ন্ত্রকের সঙ্গে যুক্ত হয়েছে।\n\nটর সংস্করণ: {}\nঅস্থায়ী অনিয়ন ঠিকানা সমর্থন করে: {}.\nক্লায়েন্ট অথেনটিকেশন সমর্থন করে: {}.\n৩য় প্রজন্মের অনিয়ন ঠিকানাগুলো(৫৬ অক্ষর) সমর্থন করে: {} .", + "error_tor_protocol_error": "টরে একটি ত্রুটি ছিল: {}", + "error_tor_protocol_error_unknown": "টরে একটি অজানা ত্রুটি আছে", + "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত", + "connecting_to_tor": "টর নেটওয়ার্কে যুক্ত হচ্ছে", + "update_available": "নতুন OnionShare সংস্করণ বের হয়েছে। এটি পেতে এখানে ক্লিক করো

তুমি ব্যবহার করছো {} এবং সাম্প্রতিক সংস্করণ হলো {}।", + "update_error_check_error": "নতুন সংস্করণের জন্য দেখা যায়নি: হয়তো তুমি টর-এর সাথে সংযুক্ত না, অথবা অনিওনশেয়ার ওয়েবসাইট বন্ধ?", + "update_error_invalid_latest_version": "নতুন সংস্করণের জন্য জানা যায়নি: অনিওনশেয়ার ওয়েবসাইট বলছে সর্বশেষ সংস্করণ চেনা যাচ্ছে না '{}'…", + "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 পুনরায় খুলো এবং টর এর সাথে OnionShare কে সেট আপ করো।", + "gui_tor_connection_lost": "টর এর সাথে যোগাযোগ বিচ্ছিন্ন হয়ে গেছে।", + "gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই স্বয়ংক্রিয়-বন্ধ ঘড়ির সময় শেষ হয়ে গেছে। অনুগ্রহ করে আবার নতুনভাবে শেয়ার করো।", + "gui_server_autostop_timer_expired": "অটো-স্টপ টাইমারের সময় ইতিমধ্যেই শেষ হয়ে গিয়েছে। দয়া করে, শেয়ারিং শুরু করতে নতুনভাবে সময় সেট করো।", + "share_via_onionshare": "OnionShare এর মাধমে শেয়ার করো", + "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_started": "গ্রহণ", + "gui_file_info": "{} ফাইল, {}", + "gui_file_info_single": "{} ফাইল, {}", + "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": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।", + "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_downloads_label": "", + "gui_settings_downloads_button": "দেখা", + "gui_settings_public_mode_checkbox": "সর্বজনীন মোড", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "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_add_files": "ফাইল যোগ করো", + "gui_add_folder": "ফোল্ডার যোগ করো", + "gui_settings_onion_label": "অনিয়ন সেটিংস", + "gui_connect_to_tor_for_onion_settings": "অনিওন সার্ভিস সেটিংস দেখতে টর এর সাথে কানেক্ট করো", + "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_share_started_title": "শেয়ারিং শুরু করা হয়েছে", + "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": "{} শুরু হয়েছে", + "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_autostop_timer_waiting": "পাঠানো শেষ হওয়ার জন্য অপেক্ষা করছি", + "gui_receive_mode_no_files": "কোন ফাইল এখনও পাওয়া যায়নি", + "gui_receive_mode_autostop_timer_waiting": "রিসিভ শেষ হওয়ার জন্য অপেক্ষা করছি", + "gui_stop_server_autostop_timer_tooltip": "অটো-স্টপ টাইমার বন্ধ হবে {} পরে", + "gui_start_server_autostart_timer_tooltip": "অটো স্টার্ট টাইমার বন্ধ হবে {} পরে", + "gui_waiting_to_start": "{} এর মধ্যে শেয়ারিং শুরু হবে। বাতিল করতে এখানে ক্লিক করো।", + "gui_settings_autostart_timer_checkbox": "অটো-স্টার্ট টাইমার ব্যবহার করো", + "gui_settings_autostart_timer": "শেয়ার শুরু করো:", + "gui_server_autostart_timer_expired": "পূর্বনির্ধারিত সময় শেষ হয়ে গিয়েছে। শেয়ার শুরু করার জন্য আবার টাইম সেট করো।", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "অটো স্টপ টাইম, অটো স্টার্ট টাইমের আগে বা একই সময় হতে পারবে না। শেয়ারিং চালু করতে দয়া করে এটি ঠিক করুন।", + "gui_status_indicator_share_scheduled": "শিডিউল করা হয়েছে…", + "gui_status_indicator_receive_scheduled": "শিডিউল করা হয়েছে…", + "days_first_letter": "দি", + "hours_first_letter": "ঘ", + "minutes_first_letter": "মি", + "seconds_first_letter": "সে", + "gui_website_url_description": "যার কাছেই নিচের OnionShare ঠিকানাটি এবং ব্যক্তিগত কী থাকবে সেই টর ব্রাউজারের মাধ্যমে উক্ত ঠিকানায় গিয়ে আপনার ফাইল(গুলো) ডাউনলোড করতে পারবে: ", + "gui_mode_website_button": "ওয়েবসাইট পাবলিশ করুন", + "gui_website_mode_no_files": "এখনো কোন ওয়েবসাইট শেয়ার করা হয়নি", + "incorrect_password": "ভুল পাসওয়ার্ড", + "gui_settings_individual_downloads_label": "একাধিক ফাইলের ক্ষেত্রে আলাদাভাবে প্রত্যেক ফাইলকে ডাউনলোড করার জন্য চেক উঠিয়ে দিন", + "history_requests_tooltip": "{} ওয়েব রিকুয়েস্ট", + "gui_settings_csp_header_disabled_option": "\"কন্টেন্ট নিরাপত্তা পলিসি\" হেডারকে বন্ধ করো", + "gui_settings_website_label": "ওয়েবসাইট সেটিংস", + "gui_new_tab_receive_button": "ফাইল গ্রহণ করো", + "gui_new_tab_share_button": "ফাইল শেয়ার করো", + "gui_new_tab_tooltip": "একটি নতুন ট্যাব খুলো", + "gui_new_tab": "নতুন ট্যাব", + "mode_settings_website_disable_csp_checkbox": "বিষয়বস্তু নিরাপত্তা নীতি শীর্ষাংশ নিষ্ক্রিয় করো (তোমার ওয়েবসাইটকে তৃতীয় পক্ষের সম্পদ ব্যবহার করতে সম্মতি দাও)", + "mode_settings_legacy_checkbox": "একটি লেগাসি ঠিকানা ব্যবহার করো (অনিওন সেবা স.২, এর ব্যবহার উৎসাহযোগ্য না)", + "gui_new_tab_receive_description": "তোমার কম্পিউটারকে একটি অনলাইন ড্রপবক্স বানাও। অন্যরা টর ব্রাউজার ব্যবহার করে তোমার কম্পিউটারে ফাইল পাঠাতে পারবে।", + "gui_new_tab_share_description": "অন্য কাউকে পাঠাতে তোমার কম্পিউটারের ফাইল নির্বাচন করো. তুমি যাকে বা যাদের কাছে ফাইল পাঠাতে চাও তাকে বা তাদেরকে তোমার কাছ থেকে ফাইল ডাউনলোড করতে টর ব্রাউজার ব্যবহার করতে হবে।", + "mode_settings_share_autostop_sharing_checkbox": "ফাইল পাঠানোর পর শেয়ার করা বন্ধ করো (স্বতন্ত্র ফাইল ডাউনলোড এর মঞ্জুরি দিতে টিক চিহ্ন তুলে দাও)", + "mode_settings_autostop_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা বন্ধ করো", + "mode_settings_autostart_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা শুরু করো", + "mode_settings_persistent_checkbox": "এই ট্যাব সংরক্ষণ করো, এবং যখন আমি অনিওনশেয়ার খুলব তখন এটি স্বয়ংক্রিয়ভাবে খুলো", + "gui_quit_warning_description": "তোমার কিছু ট্যাবে শেয়ারিং সক্রিয়। তুমি যদি প্রস্থান করো, তোমার সমস্ত ট্যাব বন্ধ হয়ে যাবে। তুমি কি নিশ্চিত যে তুমি প্রস্থান করতে চাও?", + "gui_close_tab_warning_website_description": "তুমি সক্রিয়ভাবে একটি ওয়েবসাইট হোস্ট করছো। আপনি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", + "gui_close_tab_warning_receive_description": "তুমি ফাইল পাওয়ার প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", + "gui_close_tab_warning_share_description": "তুমি ফাইল পাঠানোর প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", + "gui_close_tab_warning_persistent_description": "এই ট্যাবটি স্থায়ী। তুমি যদি এটা বন্ধ করো তাহলে তুমি যে অনিওন ঠিকানা ব্যবহার করছো তা হারিয়ে ফেলবে। তুমি কি নিশ্চিত যে তুমি এটা বন্ধ করতে চাও?", + "gui_quit_warning_title": "তুমি নিশ্চিত?", + "gui_new_tab_website_description": "তোমার কম্পিউটার থেকে একটি স্ট্যাটিক এইচটিএমএল অনিওন ওয়েবসাইট হোস্ট করো।", + "gui_new_tab_website_button": "ওয়েবসাইট প্রকাশ করো", + "gui_close_tab_warning_title": "তুমি নিশ্চিত?", + "gui_close_tab_warning_close": "বন্ধ", + "gui_close_tab_warning_cancel": "বাতিল", + "gui_quit_warning_cancel": "বাতিল", + "mode_settings_advanced_toggle_show": "উন্নততর সেটিংস দেখাও", + "mode_settings_advanced_toggle_hide": "উন্নততর সেটিংস লুকাও", + "mode_settings_public_checkbox": "এটি পব্লিক অনিওনশেয়ার ঠিকানা (ব্যক্তিগত কী ডিসেবল করে)", + "mode_settings_receive_data_dir_browse_button": "অনুসন্ধান করো", + "mode_settings_receive_data_dir_label": "ফাইল সংরক্ষণ করো", + "gui_chat_stop_server": "চ্যাট সার্ভার বন্ধ করো", + "gui_chat_start_server": "চ্যাট সার্ভার শুরু করো", + "gui_file_selection_remove_all": "সব সরাও", + "gui_remove": "সরাও", + "gui_main_page_share_button": "শেয়ার করা শুরু করো", + "gui_new_tab_chat_button": "বেনামে আলাো করো", + "gui_tab_name_chat": "আলাপ", + "gui_tab_name_website": "ওয়েবসাইট", + "gui_tab_name_receive": "গ্রহণ", + "gui_tab_name_share": "শেয়ার", + "gui_qr_code_dialog_title": "অনিওনশেয়ার কিউআর কোড", + "gui_show_qr_code": "কিউআর কোড দেখাও", + "gui_receive_flatpak_data_dir": "যেহেতু অনিওনশেয়ার ফ্ল্যাটপ্যাক দিয়ে ইন্সটল করেছো, তাই তোমাকে ~/OnionShare এ ফাইল সংরক্ষণ করতে হবে।", + "gui_rendezvous_cleanup": "তোমার ফাইলগুলি সফলভাবে স্থানান্তরিত হয়েছে তা নিশ্চিত হয়ে টর সার্কিট বন্ধের অপেক্ষা করা হচ্ছে।\n\nএটি কয়েক মিনিট সময় নিতে পারে।", + "gui_open_folder_error": "xdg-open দিয়ে ফোল্ডার খুলতে ব্যর্থ হয়েছে। ফাইলটি এখানে: {}", + "gui_chat_url_description": "এই অনিওনশেয়ার ঠিকানা এবং ব্যক্তিগত কী দিয়ে যে কেউ টর ব্রাউজার: ব্যবহার করে এই চ্যাট রুমটিতে যোগ দিতে পারে", + "error_port_not_available": "অনিয়নশায়ার পোর্ট নেই", + "gui_rendezvous_cleanup_quit_early": "তাড়াতাড়ি বন্ধ করো", + "gui_main_page_chat_button": "চ্যাটিং শুরু করো", + "gui_main_page_website_button": "হোস্টিং শুরু করো", + "gui_main_page_receive_button": "গ্রহণ শুরু করো", + "gui_color_mode_changed_notice": "নতুন রঙের মোড প্রয়োগ করার জন্য OnionShare পুনরারম্ভ করুন।", + "history_receive_read_message_button": "বার্তা পড়ুন", + "mode_settings_receive_webhook_url_checkbox": "বিজ্ঞপ্তি ওয়েবহুক ব্যবহার করুন", + "mode_settings_receive_disable_files_checkbox": "ফাইল আপলোড করা অক্ষম করুন", + "mode_settings_receive_disable_text_checkbox": "পাঠ্য জমা দেওয়া অক্ষম করুন", + "mode_settings_title_label": "কাস্টম শিরোনাম", + "gui_status_indicator_chat_started": "চ্যাট করছে", + "gui_status_indicator_chat_scheduled": "শিডিউল করা হয়েছে…", + "gui_status_indicator_chat_working": "শুরু…", + "gui_status_indicator_chat_stopped": "চ্যাট করতে প্রস্তুত", + "gui_server_doesnt_support_stealth": "দুখিত, টোরের এই সংস্করণটি স্টেল্থ (ক্লায়েন্ট প্রমাণীকরণ) সমর্থন করে না। দয়া করে টোরের একটি নতুন সংস্করণ দিয়ে চেষ্টা করুন, অথবা ব্যক্তিগত হওয়ার প্রয়োজন না হলে 'পাবলিক' মোড ব্যবহার করুন।", + "gui_settings_theme_dark": "কাল", + "gui_settings_theme_light": "হালকা", + "gui_settings_theme_auto": "স্বয়ংক্রিয়", + "gui_settings_theme_label": "থিম", + "gui_client_auth_instructions": "পরবর্তী, অনিওনশেয়ার অ্যাক্সেসের অনুমতি দেওয়ার জন্য ব্যক্তিগত কী পাঠান:", + "gui_url_instructions_public_mode": "নিচের অনিওনশেয়ার ঠিকানা পাঠান:", + "gui_url_instructions": "প্রথমে, নিচের অনিওনশেয়ার ঠিকানা পাঠান:", + "gui_chat_url_public_description": "এই অনিওনশেয়ার ঠিকানা দিয়ে যে কেউ টর ব্রাউজার: ব্যবহার করে এই চ্যাট রুমটিতে যোগ দিতে পারে", + "gui_receive_url_public_description": "যার কাছেই এই ঠিকানা থাকবে সে ই টর ব্রাউজার ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে যে কেউ আপনার কম্পিউটারে ফাইল আপলোড করতে পারবে:", + "gui_website_url_public_description": "যার কাছেই নিচের OnionShare ঠিকানাটি থাকবে সেই টর ব্রাউজারের মাধ্যমে উক্ত ঠিকানায় গিয়ে আপনার ফাইল(গুলো) ডাউনলোড করতে পারবে: ", + "gui_share_url_public_description": "যার কাছেই এই ঠিকানা থাকবে সে ই টর ব্রাউজার ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে যে কেউ আপনার ফাইল(গুলি) ডাউনলোড করতে পারবে:", + "gui_please_wait_no_button": "চালু করছি…", + "gui_hide": "লুকান", + "gui_reveal": "দেখাও", + "gui_qr_label_auth_string_title": "ব্যক্তিগত কী", + "gui_qr_label_url_title": "OnionShare ঠিকানা", + "gui_copied_client_auth": "ব্যক্তিগত কী ক্লিপবোর্ডে কপি করা হয়েছে", + "gui_copied_client_auth_title": "ব্যক্তিগত কী কপি করা হয়েছে", + "gui_copy_client_auth": "ব্যক্তিগত কী কপি করো" +} diff --git a/desktop/onionshare/resources/locale/ca.json b/desktop/onionshare/resources/locale/ca.json new file mode 100644 index 00000000..132c764a --- /dev/null +++ b/desktop/onionshare/resources/locale/ca.json @@ -0,0 +1,288 @@ +{ + "config_onion_service": "S'està establint el servei onion al port {0:d}.", + "preparing_files": "S'estan comprimint els fitxers.", + "give_this_url": "Dóna aquesta adreça a la persona destinatària:", + "give_this_url_stealth": "Fes arribar aquestes dues línies a la/es persona/es destinatària/es:", + "give_this_url_receive": "Dóna aquesta adreça a la persona remitent:", + "give_this_url_receive_stealth": "Dóna aquesta adreça i la línia HidServAuth a la persona remitent:", + "ctrlc_to_stop": "Prem Control+C per aturar el servidor", + "not_a_file": "{0:s} no és un arxiu vàlid.", + "not_a_readable_file": "{0:s} no és un fitxer 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_autostop_timer": "S'ha aturat perquè s'ha acabat el temporitzador d'aturada automàtica", + "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 de fitxers molt grans podria trigar hores", + "systray_menu_exit": "Surt", + "systray_download_started_title": "S'ha iniciat la descàrrega amb OnionShare", + "systray_download_started_message": "Algú ha començat a descarregar els teus arxius", + "systray_download_completed_title": "S'ha completat la descàrrega amb OnionShare", + "systray_download_completed_message": "Algú ha acabat de descarregar els teus arxius", + "systray_download_canceled_title": "S'ha canceŀlat la descàrrega", + "systray_download_canceled_message": "L'usuari va cancel·lar la descàrrega", + "systray_upload_started_title": "S'ha iniciat la pujada", + "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_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_verbose": "Envia els errors d'OnionShare a stdout i els errors web al disc", + "help_filename": "Llista d'arxius o carpetes a compartir", + "help_config": "Ubicació de la configuració JSON personalitzada", + "gui_drag_and_drop": "Arrossegueu fitxers i carpetes per a començar a compartir", + "gui_add": "Afegeix", + "gui_delete": "Esborra", + "gui_choose_items": "Trieu", + "gui_share_start_server": "Comparteix", + "gui_share_stop_server": "Deixa de compartir", + "gui_share_stop_server_autostop_timer": "Deixa de compartir (queden {})", + "gui_share_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", + "gui_receive_start_server": "Inicia el mode de recepció", + "gui_receive_stop_server": "Atura el mode de recepció", + "gui_receive_stop_server_autostop_timer": "Atura el mode de recepció (queden {})", + "gui_receive_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", + "gui_copy_url": "Copia l'adreça", + "gui_downloads": "Historial de descàrregues", + "gui_no_downloads": "No n'hi ha cap", + "gui_canceled": "S'ha cancel·lat", + "gui_copied_url_title": "S'ha copiat l'adreça OnionShare", + "gui_copied_url": "S'ha copiat l'adreça OnionShare al porta-retalls", + "gui_please_wait": "S'està iniciant… Feu clic per a cancel·lar.", + "gui_download_upload_progress_complete": "Han passat %p%, {0:s}.", + "gui_download_upload_progress_starting": "{0:s}, %p% (s'està calculant)", + "gui_download_upload_progress_eta": "{0:s}, temps restant: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Espereu un moment", + "gui_share_quit_warning": "Encara s'estan enviant fitxers. Segur que voleu sortir de l'OnionShare?", + "gui_receive_quit_warning": "Encara s'estan rebent fitxers. Segur que voleu sortir de l'OnionShare?", + "gui_quit_warning_quit": "Surt", + "gui_quit_warning_dont_quit": "Cancel·la", + "zip_progress_bar_format": "S'està comprimint: %p%", + "error_stealth_not_supported": "Per a fer servir l'autorització de client, necessiteu versions iguals o superiors a Tor 0.2.9.1-alpha (o Tor Browser 6.5) i python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare necessita almenys les versions Tor 0.2.7.1 i python3-stem 1.4.0.", + "gui_settings_window_title": "Paràmetres", + "gui_settings_whats_this": "Què és això?", + "gui_settings_stealth_option": "Fes servir autorització de client", + "gui_settings_autoupdate_label": "Comprova si hi ha versions noves", + "gui_settings_autoupdate_option": "Notifica'm si hi ha una actualització disponible", + "gui_settings_autoupdate_timestamp": "Última comprovació: {}", + "gui_settings_autoupdate_timestamp_never": "Mai", + "gui_settings_autoupdate_check_button": "Comprova si hi ha una versió més nova", + "gui_settings_general_label": "Configuració general", + "gui_settings_sharing_label": "Configuració de compartició", + "gui_settings_close_after_first_download_option": "Deixa de compartir després d'enviar fitxers", + "gui_settings_connection_type_label": "Com hauria de connectar-se l'OnionShare al Tor?", + "gui_settings_connection_type_bundled_option": "Fes servir la versió de Tor inclosa dins d'OnionShare", + "gui_settings_connection_type_automatic_option": "Intenta la configuració automàtica amb el navegador Tor", + "gui_settings_connection_type_control_port_option": "Connecta fent servir el port de control", + "gui_settings_connection_type_socket_file_option": "Connecta fent servir un fitxer de socket", + "gui_settings_connection_type_test_button": "Comprova la connexió a Tor", + "gui_settings_control_port_label": "Port de control", + "gui_settings_socket_file_label": "Fitxer de sòcol", + "gui_settings_socks_label": "Port SOCKS", + "gui_settings_authenticate_label": "Paràmetres d'autenticació a Tor", + "gui_settings_authenticate_no_auth_option": "Sense autenticació, o autenticació amb galetes", + "gui_settings_authenticate_password_option": "Contrasenya", + "gui_settings_password_label": "Contrasenya", + "gui_settings_tor_bridges": "Ponts de Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "No facis servir ponts", + "gui_settings_tor_bridges_obfs4_radio_option": "Fes servir el transport integrat obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Fes servir el transport integrat obfs4 (necessita obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Fes servir el transport integrat meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Fes servir el transport integrat meek_lite (Azure, necessita obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Compte: fer funcionar els ponts meek_lite suposa un cost molt gran per al Tor Project .

Feu-los servir només si no podeu connectar-vos a Tor directament, a través d'obfs4, o a través de ponts normals.", + "gui_settings_tor_bridges_custom_radio_option": "Fes servir ponts personalitzats", + "gui_settings_tor_bridges_custom_label": "Podeu trobar-ne a https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Cap dels ponts que heu afegit funciona.\nComproveu-los o proveu d'afegir-ne de nous.", + "gui_settings_button_save": "Desa", + "gui_settings_button_cancel": "Cancel·la", + "gui_settings_button_help": "Ajuda", + "gui_settings_autostop_timer_checkbox": "Utilitza 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. Heu iniciat el navegador Tor? (disponible a torproject.org)", + "settings_error_socket_port": "No s'ha pogut establir la connexió al controlador de Tor a {}:{}.", + "settings_error_socket_file": "No s'ha pogut connectar al controlador de Tor fent servir el fitxer de socket {}.", + "settings_error_auth": "S'ha establert la connexió a {}:{} però ha fallat l'autenticació. Pot ser que no sigui un controlador de Tor?", + "settings_error_missing_password": "S'ha establer la connexió al controlador de Tor, però necessita una contrasenya d'autenticació.", + "settings_error_unreadable_cookie_file": "S'ha establert la connexió al controlador de Tor, però pot ser que la contrasenya sigui errònia o que faltin permisos de lectura en el fitxer de galetes.", + "settings_error_bundled_tor_not_supported": "La versió de Tor inclosa a OnionShare no funciona en mode de desenvolupador a Windows ni MacOS.", + "settings_error_bundled_tor_timeout": "La connexió està trigant molt. Podeu revisar que tingueu connexió a Internet i que el rellotge del sistema estigui en hora?", + "settings_error_bundled_tor_broken": "OnionShare no s'ha pogut connectar a Tor:\n{}", + "settings_test_success": "S'ha connectat al controlador de Tor.\n\nVersió de Tor: {}\nCompatible amb serveis onion efímers: {}.\nCompatible amb autenticació del client: {}.\nCompatible amb adreces .onion de nova generació: {}.", + "error_tor_protocol_error": "Hi ha hagut un error amb Tor: {}", + "error_tor_protocol_error_unknown": "Hi ha hagut un error desconegut amb Tor", + "error_invalid_private_key": "Aquest tipus de clau privada no està suportat", + "connecting_to_tor": "S'està connectant a la xarxa Tor", + "update_available": "Hi ha una nova versió d'OnionShare.Feu clic aquí per a obtenir-la.

Esteu usant {} i la més recent és {}.", + "update_error_check_error": "No s'ha pogut comprovar si hi ha una versió més nova. Pot ser que no estigueu connectat a Tor o que el web d'OnionShare estigui caigut?", + "update_error_invalid_latest_version": "No s'ha pogut comprovar si hi ha una versió més nova. La web d'OnionShare diu que l'última versió és '{}' però no s'ha pogut reconèixer…", + "update_not_available": "Aquesta és l'última versió d'OnionShare.", + "gui_tor_connection_ask": "Voleu anar a la configuració per a provar d'arreglar la connexió a Tor?", + "gui_tor_connection_ask_open_settings": "Sí", + "gui_tor_connection_ask_quit": "Surt", + "gui_tor_connection_error_settings": "Proveu 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\nAssegureu-vos que teniu connexió a internet, torneu a obrir l'OnionShare i prepareu la connexió a Tor.", + "gui_tor_connection_lost": "S'ha perdut la connexió amb Tor.", + "gui_server_started_after_autostop_timer": "El temporitzador de finalització automàtica ha acabat abans que s'iniciés el servidor. Torneu a compartir-ho.", + "gui_server_autostop_timer_expired": "El temporitzador de finalització automàtica ja s'ha acabat. Ajusteu-lo per a poder compartir.", + "share_via_onionshare": "Comparteix-ho amb l'OnionShare", + "gui_save_private_key_checkbox": "Fes servir una adreça persistent", + "gui_share_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot baixar els vostres fitxers fent servir el Navegador Tor: ", + "gui_receive_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot pujar fitxers al vostre ordinador fent servir el Navegador Tor: ", + "gui_url_label_persistent": "Aquest recurs no es tancarà ell sol.

Cada recurs compartit reutilitzarà aquesta mateixa adreça. Si voleu crear una adreça diferent per a cada recurs, desactiveu l'opció «Feu servir una adreça persistent».", + "gui_url_label_stay_open": "Aquest recurs no es tancarà ell sol.", + "gui_url_label_onetime": "Aquest recurs deixarà de compartir-se després de la primera baixada.", + "gui_url_label_onetime_and_persistent": "Aquest recurs no es tancarà ell sol.

Cada recurs compartit reutilitzarà aquesta mateixa adreça. Si voleu crear una adreça diferent per a cada recurs, desactiveu l'opció «Feu servir una adreça persistent».", + "gui_status_indicator_share_stopped": "A punt per a compartir", + "gui_status_indicator_share_working": "S'està iniciant…", + "gui_status_indicator_share_started": "S'està compartint", + "gui_status_indicator_receive_stopped": "A punt per a rebre", + "gui_status_indicator_receive_working": "S'està iniciant…", + "gui_status_indicator_receive_started": "S'està rebent", + "gui_file_info": "{} fitxers, {}", + "gui_file_info_single": "{} fitxer, {}", + "history_in_progress_tooltip": "{} en procés", + "history_completed_tooltip": "{} completats", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "Alerta: El mode de rebuda permet a qualsevol de pujar arxius al teu ordinador. Algú amb males intencions podria pendre el control de la teva màquina si obrissis arxius maliciosos que haguessin pujat. Obre només arxius de persones que confiïs si no saps com evitar aquests riscos.", + "gui_receive_mode_warning": "El mode de rebuda permet a qualsevol pujar fitxers al vostre ordinador.

Alguns fitxers podrien guanyar el control de la vostra màquina si els obriu. Obriu només fitxers de persones de confiança, o si realment sabeu el que esteu fent.", + "receive_mode_upload_starting": "S'està començant la pujada. Total: {}", + "receive_mode_received_file": "S'han rebut: {}", + "gui_mode_share_button": "Comparteix fitxers", + "gui_mode_receive_button": "Rep fitxers", + "gui_settings_receiving_label": "Configuració de rebuda", + "gui_settings_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Mode públic", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "S'ha carregat la pàgina", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "No s'ha pogut obrir la carpeta perquè el Nautilus no és disponible. El fitxer és a: {}", + "gui_settings_language_label": "Llengua preferida", + "gui_settings_language_changed_notice": "Torneu a obrir l'OnionShare perquè s'apliqui la llengua nova.", + "timeout_upload_still_running": "S'està esperant que acabi la pujada", + "gui_add_files": "Afegeix fitxers", + "gui_add_folder": "Afegeix una carpeta", + "gui_settings_onion_label": "Configuració Onion", + "gui_connect_to_tor_for_onion_settings": "Connecteu-vos a Tor per a configurar els serveis onion", + "error_cannot_create_data_dir": "No s'ha pogut crear la carpeta de dades d'OnionShare: {}", + "receive_mode_data_dir": "Els arxius que rebis apareixeran aquí: {}", + "gui_settings_data_dir_label": "Desa els fitxers a", + "gui_settings_data_dir_browse_button": "Explora", + "systray_page_loaded_message": "S'ha carregat l'adreça d'OnionShare", + "systray_share_started_title": "S'ha començat a compartir", + "systray_share_started_message": "S'està començant a enviar els fitxers a algú", + "systray_share_completed_title": "S'ha acabat de compartir", + "systray_share_completed_message": "S'ha acabat d'enviar els fitxers", + "systray_share_canceled_title": "S'ha deixat de compartir", + "systray_share_canceled_message": "Algú ha cancel·lat la recepció dels vostres fitxers", + "systray_receive_started_title": "S'ha començat a rebre", + "systray_receive_started_message": "Algú us està enviant fitxers", + "gui_all_modes_history": "Historial", + "gui_all_modes_clear_history": "Esborra-ho tot", + "gui_all_modes_transfer_started": "Ha començat el {}", + "gui_all_modes_transfer_finished_range": "S'ha transferit entre: {} - {}", + "gui_all_modes_transfer_finished": "Transferit el {}", + "gui_all_modes_transfer_canceled_range": "S'ha cancel·lat entre: {} - {}", + "gui_all_modes_transfer_canceled": "S'ha cancel·lat el {}", + "gui_all_modes_progress_complete": "%p%, {0:s} transferits.", + "gui_all_modes_progress_starting": "{0:s}, %p% (s'està calculant)", + "gui_all_modes_progress_eta": "{0:s}, Temps estimat: {1:s}, %p%", + "gui_share_mode_no_files": "Encara no s'han enviat fitxers", + "gui_share_mode_autostop_timer_waiting": "S'està esperant que finalitzi l'enviament", + "gui_receive_mode_no_files": "Encara no s'ha rebut cap fitxer", + "gui_receive_mode_autostop_timer_waiting": "S'està esperant que finalitzi la recepció", + "gui_stop_server_autostop_timer_tooltip": "El temporitzador d'aturada automàtica finalitza a les {}", + "gui_start_server_autostart_timer_tooltip": "El temporitzador d'inici automàtic finalitza a les {}", + "gui_waiting_to_start": "S'ha programat per a iniciar en {}. Feu clic per a cancel·lar.", + "gui_settings_autostart_timer_checkbox": "Usa un temporitzador d'inici automàtic", + "gui_settings_autostart_timer": "Inicia la compartició:", + "gui_server_autostart_timer_expired": "L'hora programada ja ha passat. Ajusteu-la per a començar la compartició.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "L'hora d'aturada automàtica no pot ser igual ni anterior que l'hora d'inici automàtic. Ajusteu-la per a començar la compartició.", + "gui_status_indicator_share_scheduled": "Programat…", + "gui_status_indicator_receive_scheduled": "Programat…", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "min", + "seconds_first_letter": "s", + "gui_website_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot visitar el vostre lloc web fent servir el Navegador Tor: ", + "gui_mode_website_button": "Publica el lloc web", + "systray_site_loaded_title": "S'ha carregat el lloc web", + "systray_site_loaded_message": "S'ha carregat el lloc web de l'OnionShare", + "systray_website_started_title": "S'ha començat a compartir el lloc web", + "systray_website_started_message": "Algú està visitant el vostre lloc web", + "gui_website_mode_no_files": "Encara no s'han compartit llocs web", + "gui_visit_started": "Algú ha visitat el vostre lloc web {}", + "incorrect_password": "La contrasenya no és correcta", + "history_requests_tooltip": "{} peticions web", + "systray_individual_file_downloaded_title": "S'ha carregat el fitxer individual", + "gui_settings_individual_downloads_label": "Desmarqueu per a permetre la baixada de fitxers individuals", + "systray_individual_file_downloaded_message": "S'ha visualitzat el fitxer individual {}", + "gui_settings_csp_header_disabled_option": "Desactiva la capçalera de la Política de Seguretat de Contingut", + "gui_settings_website_label": "Configuració del lloc web", + "gui_new_tab_share_button": "Comparteix arxius", + "gui_new_tab_tooltip": "Obre una pestanya nova", + "gui_new_tab": "Nova pestanya", + "mode_settings_website_disable_csp_checkbox": "Desactiva la capçalera de la política de seguretat de contingut (permet que el vostre lloc web usi recursos de tercers)", + "mode_settings_receive_data_dir_browse_button": "Navega", + "mode_settings_receive_data_dir_label": "Desa els fitxers a", + "mode_settings_share_autostop_sharing_checkbox": "Atura la compartició després que s'hagin enviat els fitxers (desmarqueu-ho per a permetre baixar fitxers individuals)", + "mode_settings_legacy_checkbox": "Usa una adreça antiga (servei ceba v2, no recomanat)", + "mode_settings_autostop_timer_checkbox": "Atura el servei ceba a una hora programada", + "mode_settings_autostart_timer_checkbox": "Inicia el servei ceba a una hora programada", + "mode_settings_public_checkbox": "No usis cap contrasenya", + "mode_settings_persistent_checkbox": "Desa aquesta pestanya i obre-la automàticament quan obri l'OnionShare", + "mode_settings_advanced_toggle_hide": "Amaga la configuració avançada", + "mode_settings_advanced_toggle_show": "Mostra la configuració avançada", + "gui_quit_warning_cancel": "Cancel·la", + "gui_quit_warning_description": "La compartició és activa en alguna de les pestanyes. Si sortiu, es tancaran totes les pestanyes. Esteu segur de voler sortir?", + "gui_quit_warning_title": "N'esteu segur?", + "gui_close_tab_warning_cancel": "Cancel·la", + "gui_close_tab_warning_close": "Tanca", + "gui_close_tab_warning_website_description": "Esteu hostatjant un lloc web. Esteu segur de voler tancar aquesta pestanya?", + "gui_close_tab_warning_receive_description": "Esteu en procés de rebre fitxers. Esteu segur de voler tancar aquesta pestanya?", + "gui_close_tab_warning_share_description": "Esteu en el procés d'enviar fitxers. Esteu segur de voler tancar aquesta pestanya?", + "gui_close_tab_warning_persistent_description": "Aquesta pestanya és persistent. Si la tanqueu, perdreu l'adreça ceba que està usant. Esteu segur de voler tancar-la?", + "gui_close_tab_warning_title": "N'esteu segur?", + "gui_new_tab_website_description": "Hostatgeu un lloc web ceba HTML estàtic en el vostre ordinador.", + "gui_new_tab_website_button": "Publicar un lloc web", + "gui_new_tab_receive_description": "Convertiu el vostre ordinador en un servei de fiters en línia. Les persones podran usar el navegador Tor per a enviar-vos fitxers al vostre ordinador.", + "gui_new_tab_receive_button": "Rebre fitxers", + "gui_new_tab_share_description": "Trieu els fitxers del vostre ordinador que voleu enviar a algú altre. La persona a qui voleu enviar els fitxers haurà d'usar el navegador Tor per a baixar-los del vostre equip.", + "gui_qr_code_description": "Escanegeu aquest codi amb un lector de QR, com ara la càmera del telèfon, per a facilitar la compartició de l'adreça de l'OnionShare amb altres.", + "gui_qr_code_dialog_title": "Codi QR de l'OnionShare", + "gui_show_qr_code": "Mostra el codi QR", + "gui_receive_flatpak_data_dir": "Com que heu instal·lat l'OnionShare amb el Flatpak, heu de desar els fitxers en una carpeta dins ~/OnionShare.", + "gui_chat_stop_server": "Atura el servidor de xat", + "gui_chat_start_server": "Inicia el servidor de xat", + "gui_file_selection_remove_all": "Treu-ho tot", + "gui_remove": "Treu", + "error_port_not_available": "El port OnionShare no és disponible", + "gui_tab_name_chat": "Xat", + "gui_tab_name_website": "Lloc web", + "gui_tab_name_receive": "Rep", + "gui_tab_name_share": "Comparteix", + "gui_main_page_chat_button": "Comença el xat", + "gui_main_page_website_button": "Comença l'allotjatment", + "gui_main_page_receive_button": "Comença la recepció", + "gui_main_page_share_button": "Comença la compartició", + "gui_new_tab_chat_button": "Xat anònim", + "gui_open_folder_error": "No s'ha pogut obrir la carpeta amb xdg-open. El fitxer és aquí: {}", + "gui_chat_url_description": "Qualsevol persona amb aquesta adreça OnionShare pot unir-se a aquesta sala de xat fent servir el navegador Tor: " +} diff --git a/desktop/onionshare/resources/locale/ckb.json b/desktop/onionshare/resources/locale/ckb.json new file mode 100644 index 00000000..68122adb --- /dev/null +++ b/desktop/onionshare/resources/locale/ckb.json @@ -0,0 +1,189 @@ +{ + "not_a_readable_file": "‌{0:s} nikare were xwendin.", + "other_page_loaded": "Malper bar bû", + "incorrect_password": "Şîfre nerast ye", + "close_on_autostop_timer": "Sekinî ji ber demê otomatîk-sekinandin qediya", + "closing_automatically": "Sekinî ji ber wergirtin bi giştî qediya", + "large_filesize": "Hîşyarî: Şandina parvekirinên mezin dikare bi demjimêran bidome", + "gui_drag_and_drop": "Ji bo parvekirin destpê bike belge û dosyayan bitikîne û bikşînê", + "gui_add": "Zêde bike", + "gui_add_files": "Belgeyan zêde bike", + "gui_add_folder": "Dosya zêde bike", + "gui_remove": "Jê bibe", + "gui_file_selection_remove_all": "Hemû jê bibe", + "gui_choose_items": "Hilbijêre", + "gui_share_start_server": "Weşanê destpê bike", + "gui_share_stop_server": "Weşan biseknîne", + "gui_share_stop_server_autostop_timer": "Weşan biseknîne ({})", + "gui_chat_start_server": "Server yê pêwendî destpê bike", + "gui_chat_stop_server": "Server yê pêwendî biseknîne", + "gui_stop_server_autostop_timer_tooltip": "Demê otomatîk-seknandin di {} disekine", + "gui_start_server_autostart_timer_tooltip": "Demê otomatîk-destpêkirin di {} destpê dike", + "gui_receive_start_server": "Mod ya wergirtinê destpê bike", + "gui_receive_stop_server": "Mod yâ wergirtinê betal bike", + "gui_receive_stop_server_autostop_timer": "Mod ya wergirtinê betal bike ({} maye)", + "gui_receive_flatpak_data_dir": "Ji ber tu Onionshare bi rêya Flatpak bar kir, pêwîste tu belge di dosyayek di nav ~/OnionShare qeyd bikî.", + "gui_copy_url": "Malper kopî bike", + "gui_canceled": "Betal bû", + "gui_copied_url_title": "Malpera OnionShare kopî bû", + "gui_copied_url": "Malpera OnionShare lis ser taxtê kopî bû", + "gui_show_qr_code": "QR kod nîşan bide", + "gui_qr_code_dialog_title": "OnionShare QR kod", + "gui_waiting_to_start": "Pilankirî ye di {} destpê bike. Bitkîne ji bo betal bike.", + "gui_please_wait": "Destpê dike...Bitikîne ji bo betal bike.", + "zip_progress_bar_format": "Dewisandin %p%", + "gui_settings_window_title": "Ayar", + "gui_settings_autoupdate_label": "Ji bo versyonekî nû kontrol bike", + "gui_settings_autoupdate_option": "Dema versyonekî nû derket min agahdar bike", + "gui_settings_autoupdate_timestamp": "Kontrolê dawî: {}", + "gui_settings_autoupdate_timestamp_never": "Tu carî nebû", + "gui_settings_autoupdate_check_button": "Ji bo versyonekî nû kontrol bike", + "gui_settings_connection_type_label": "OnionShare xwe çawa bi Tor ve girêbide?", + "gui_settings_connection_type_bundled_option": "Versyona Tor a di nav OnionShare de hatiye ava kirin bikar bîne", + "gui_settings_connection_type_automatic_option": "Hewl bide ayarê-otomatîk bi Tor-Browser bikar bîne", + "gui_settings_connection_type_control_port_option": "Bi kontrol port girê bide", + "gui_settings_connection_type_socket_file_option": "Bi nameya socket girê bide", + "gui_settings_connection_type_test_button": "Girêdanê ji bo Tor biceribîne", + "gui_settings_control_port_label": "Kontrol port", + "gui_settings_socket_file_label": "Socket name", + "gui_settings_socks_label": "SOCKS port", + "gui_settings_authenticate_label": "Ayarê kontrola rastbûyîna Tor", + "gui_settings_authenticate_no_auth_option": "Rastbûyin kontrol neke, an kontrola rastbûyîne bi cookie", + "gui_settings_authenticate_password_option": "Şîfre", + "gui_settings_password_label": "Şîfre", + "gui_settings_tor_bridges": "Alîkari ji pirên Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "Piran bi kar neyne", + "gui_settings_tor_bridges_obfs4_radio_option": "Transportê obfs4 yên îlankirî bikar bîne", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Transportên obfs4 yên îlankirî bikar bîne (obfs4proxy pêwîste)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Transportên meek_lite (Azure) yên îlankirî bikar bîne", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Transportên îlankirî yên meek_lite (Azure) bikar bîne (obfs4proxy pêwîste)", + "gui_settings_meek_lite_expensive_warning": "Hîşyarî: Pirên meek_lite ji bo Tor Project gelek buha ne.

Tenê bikar bîne dema tu rasterast ne bi Tor, obfs4 servîs û bi pirên ji rêzê nikarî werî girêdan.", + "gui_settings_tor_bridges_custom_radio_option": "Pirên bi xwe avakirî bikar bîne", + "gui_settings_tor_bridges_custom_label": "Tu dikarî piran li ser https://bridges.torproject.org bibînî", + "gui_settings_tor_bridges_invalid": "Tu pirên hilbijartî kar nakin.\nCarekî din kontrol bike an jî yên cûda zêde bike.", + "gui_settings_button_save": "Qeyd bike", + "gui_settings_button_cancel": "Betal bike", + "gui_settings_button_help": "Alîkarî", + "settings_test_success": "Bi rêvebirina Tor girêdayî ye.\n\nVersyona Tor: {}\nPiştgirî dide ephemeral onion servîs: {}.\nPiştgirî dide rastbûyîna muşterî: {}.\nPiştgirî dide malperên .onion yê pengava nû: {}.", + "connecting_to_tor": "Bi tora Tor tê girêdan", + "update_available": "OnionShare a nû derket. Li vir bitikîne ji bo daxistin.

Yê kû tu niha bikar tînî {} û yê herî nû {}.", + "update_error_invalid_latest_version": "Nedikarîbû ji bo versyonên nû kontrol bike: Malpera OnionShare dibêje versyona nû ya nayê bîra wî '{}'…", + "update_error_check_error": "Nedikarîbû ji bo versyonên nû kontrol bike: Gelo tu bi Tor ve girêdayî nîne, an jî malpera OnionShare girtî ye?", + "update_not_available": "Tu OnionShare ya herî dawî bikar tînî.", + "gui_tor_connection_ask": "Ji bo hilbijartinên girêdanên Tor ayarê veke?", + "gui_tor_connection_ask_open_settings": "Erê", + "gui_tor_connection_ask_quit": "Betal", + "gui_tor_connection_error_settings": "Hewl bide di nava ayarê de biguherîne çawa OnionShare xwe bi Tor ve girê bide.", + "gui_tor_connection_canceled": "Nikarîbû bi Tor re girêbide.\n\nEkîd bike tu bi înternetê re girêdayî ye, piştre OnionShare ji nûve veke û girêdanbûne wî bi Tor ve ayar bike.", + "gui_tor_connection_lost": "Girêdanbûn bi Tor ve qut bû.", + "gui_server_started_after_autostop_timer": "Demê otomatîk-sekinandin qediya berê server weşand. Ji kerema xwe weşanekê nû bide detpê kirin.", + "gui_server_autostop_timer_expired": "Demê otomotîk-sekinandin ji berê de qediya. Ji kerema xwe dem dirêj bike ji bo weşan destpê bike.", + "gui_server_autostart_timer_expired": "Demê pilankirî derbas bû. Ji kerema xwe dîsa dirêj bike ji bo weşan destpê bike.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Demê otomatîk-qedandin nikare ji demê otomatîk-despêkirin kêmtir and wek heve bibe. Ji kerema xwe demê wê dirêjtir bike ji bo weşan despê bike.", + "share_via_onionshare": "Bi rêya OnionShare parve bike", + "gui_share_url_description": "Her kesî bi vê malpera OnionShare bikare belgeryên te bi TorBrowser berjêr bike: ", + "gui_website_url_description": "Her kesî bi vê malpera OnionShare dikare were li ser malpera te dema TorBrowser bikar tîne: ", + "gui_receive_url_description": "Her kesekî bi vê malpera OnionShare dikare belgeran li ser komputera te bi kar anîna Tor Broweser bar bike: ", + "gui_url_label_persistent": "Ev weşan otomatîk nasekine.

Her weşanê bin vê de heman malper bikar tîne.(Ji bo maleperê yekcar bikar bînî \"Malpera bêdawî bikar bîne\" li ayarê de vemirîne.)", + "gui_url_label_stay_open": "Ev weşan bi xwe ve naqede.", + "gui_url_label_onetime": "Ev weşan piştî temambûna yekemîn biqede.", + "gui_url_label_onetime_and_persistent": "Ev weşan otomatîk nasekine.

Her weşanê bi vê ve girêdayî wê heman malper bikar bîne.(Ji bo malperekî yekcar bikar bînî \"Malperê bêdawî bikar bîne\" di ayarê de vemirîne.)", + "gui_status_indicator_share_stopped": "Ji bo weşanê amade", + "gui_status_indicator_share_working": "Destpê dike…", + "gui_status_indicator_share_scheduled": "Pilankirî…", + "gui_status_indicator_share_started": "Diweşîne", + "gui_status_indicator_receive_stopped": "Amade ji bo wergirtin", + "gui_status_indicator_receive_working": "Destpê dike…", + "gui_status_indicator_receive_scheduled": "Pilankirî…", + "gui_status_indicator_receive_started": "Werdigire", + "gui_file_info": "{} name. {}", + "gui_file_info_single": "{} name, {}", + "history_in_progress_tooltip": "{} di nava pêşketinê de", + "history_completed_tooltip": "{} bi dawî bû", + "history_requests_tooltip": "{} daxwazên torê", + "error_cannot_create_data_dir": "Ava kirina data dosya yê OnionShare ne gengaz bû: {}", + "gui_receive_mode_warning": "Moda wergirtinê dihêle mirovan belgeyan li ser komputerê te bar bike.

Hinek belge belkî dikarîn kontrol li ser komputerê te bike dema to wan vekî. Tenê belgeyan ji mirovên kû tu nas dikî veke, an jî dema tu baş dizanî tu çi dikî.", + "gui_open_folder_error": "Vekirina doysa bi xdg-open pêk nehat. Belge li vir e: {}", + "gui_settings_language_label": "Zimanê xwestî", + "gui_settings_language_changed_notice": "OnionShare ji nûve veke ji bo ayarê ziman werin guhertin.", + "systray_menu_exit": "Derkeve", + "systray_page_loaded_title": "Malper bar bû", + "systray_page_loaded_message": "Malpera OnionShare bar bû", + "systray_share_started_title": "Weşandin destpêkir", + "systray_share_started_message": "Destpê bike nameyan ji bo kesekî re bişîne", + "systray_share_completed_title": "Weşandin qediya", + "systray_share_completed_message": "Şandina nameyan qediya", + "systray_share_canceled_title": "Weşandin betal bû", + "systray_share_canceled_message": "Kesekî wergirtina nameyên te betal kir", + "systray_receive_started_title": "Wergirtin destpê kir", + "systray_receive_started_message": "Kesekî nameyan ji te re dişîne", + "gui_all_modes_history": "Dîrok", + "gui_all_modes_clear_history": "Hemûyan jê bibe", + "gui_all_modes_transfer_started": "Destpê kirin {}", + "gui_all_modes_progress_complete": "%p%, {0:s} qediya.", + "gui_all_modes_progress_starting": "{0:s}, %p% (jimartin)", + "gui_all_modes_progress_eta": "{0:s}, ETA:{1:s}, %p%", + "gui_share_mode_no_files": "Name nehatin şandin haya niha", + "gui_share_mode_autostop_timer_waiting": "Benda qedandina şandinê ye", + "gui_website_mode_no_files": "Malper parve nekir haya niha", + "gui_receive_mode_no_files": "Name haya niha wernegirtî", + "gui_receive_mode_autostop_timer_waiting": "Bendê ye wergirtin biqede", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_new_tab": "Şibakê nû", + "gui_new_tab_tooltip": "Şibakê nû veke", + "gui_new_tab_share_button": "Nameyan biweşîne", + "gui_new_tab_receive_button": "Nameyan werbigire", + "gui_new_tab_website_button": "Malper host bike", + "gui_new_tab_chat_button": "Bê nasname bikeve pêwendî", + "gui_main_page_share_button": "Weşan destpê bike", + "gui_main_page_receive_button": "Wergirtin despê bike", + "gui_main_page_website_button": "Hosting destpê bike", + "gui_main_page_chat_button": "Pêwendî dayîn despê bike", + "gui_tab_name_share": "Parve bike", + "gui_tab_name_receive": "Werbigire", + "gui_tab_name_website": "Malper", + "gui_tab_name_chat": "Pêwendî", + "gui_close_tab_warning_title": "Tu bi rastî dibêjî?", + "gui_close_tab_warning_persistent_description": "Ev beş herdem e. Dema tu vemirînî wê malpera onion kû bi kar tê wenda bibe. Tu bi rastî dixwazî vemirînî?", + "gui_close_tab_warning_share_description": "Tu di nava şandina nameyan de ye. Tu di rastî dixwazî vê beşê vemirînî?", + "gui_close_tab_warning_receive_description": "Tu niha de wergirtina nameyan de yî. Tu bi rastî dixwazî vê beşê vemirînî?", + "gui_close_tab_warning_website_description": "Tu niha aktîv malperekî diweşînî. Tu bi rastî dixwazî vê beşê vermirînî?", + "gui_close_tab_warning_close": "Vemirîne", + "gui_close_tab_warning_cancel": "Betal bike", + "gui_quit_warning_title": "Bi rastî?", + "gui_quit_warning_description": "Weşandin hîn di hinek beşan de aktîf e. Dema tu vemirînî hemû beş werin girtin. Tu bi rastî dixwazî vemirînî?", + "gui_quit_warning_quit": "Vemirîne", + "gui_quit_warning_cancel": "Betal", + "mode_settings_advanced_toggle_show": "Ayarên pêsketîtir nîsan bide", + "mode_settings_advanced_toggle_hide": "Ayarên pêşketîtir veşêre", + "mode_settings_persistent_checkbox": "Vê beşê qeyd bike û veke dema ez OnionShare dîsa vekim", + "mode_settings_public_checkbox": "Şîfre bikar neyêne", + "mode_settings_autostart_timer_checkbox": "Servîsa onion di wextekî ayarkirî despê bike", + "mode_settings_autostop_timer_checkbox": "Servîsa onion di wextekî ayarkirî biseknîne", + "mode_settings_legacy_checkbox": "Malperekî kêrhatî bişxulîne(servîsa onion v2 nayê pêsniyar kirin)", + "mode_settings_share_autostop_sharing_checkbox": "Parvekirin piştî name haitn şandin biseknîne (Ji bo destûra berjêrkirina nameyên yekane tikandin derbixe)", + "mode_settings_receive_data_dir_label": "Nameyan li qeyd bike", + "mode_settings_receive_data_dir_browse_button": "Bigere", + "mode_settings_website_disable_csp_checkbox": "Sernivîsa kanûnên naveroka ewlekarî rê neke (destûr dide malpera te bi kaniyên sêyemîn kar bike)", + "gui_all_modes_transfer_finished_range": "Şandî {} - {}", + "gui_all_modes_transfer_finished": "Şandî {}", + "gui_all_modes_transfer_canceled_range": "Betal bû {} - {}", + "gui_all_modes_transfer_canceled": "Betal bû {}", + "settings_error_unknown": "Nikarbû bi Tor girê bide ji ber ayarê te li hev nayên.", + "settings_error_automatic": "Girêdanbûn bi navenda rêveberina Tor pêk nehat. Gelo Tor Browser (amade li torproject.org) li piştê de dixebite?", + "settings_error_socket_port": "Girêdan bi rêveberina Tor pêk nehat {}:{}.", + "settings_error_socket_file": "Girêdan bi rêvebirina Tor dema bikaranîa nameya socket pêk nehat{}.", + "settings_error_auth": "Bi {}:{} girêdayî ye, lê nikare jê bawer bike. Gelo ev ne rêvebirina Tor ye?", + "settings_error_missing_password": "Bi rêvebirina Tor girêdayî ye, lê ji bo bawer kirinê şîfre dixwaze.", + "settings_error_unreadable_cookie_file": "Bi rêvebirina Tor girêdayî te, lê şîfre rast nîne an jî destûra hesabê te ji xwendina nameya cookie nîne.", + "settings_error_bundled_tor_not_supported": "Bikaranîna nifşa Tor yê kû bi OnionShare bi hevre tê di moda avasazî de li ser Windows û macOS wê kar neke.", + "settings_error_bundled_tor_timeout": "Ji bo bi Tor re girê bide gelekî dirêj dike. Gelo tu ne bi înternetê re girêdayî ye an jî demê şîstema te neraste ?", + "settings_error_bundled_tor_broken": "OnionShare nedikarî xwe bi Tor girêbide:\n{}", + "error_port_not_available": "Port yê OnionShare tune", + "gui_rendezvous_cleanup_quit_early": "Zû bigire", + "gui_rendezvous_cleanup": "Li bendê ne haya kû Tor rêya hatî bikaranîn dîsa bigire ji bo ekîd bike nameyên te serkeftî hatine şandin.\n\nEw dikare hinek xulekan bidome.", + "gui_chat_url_description": " Herkesî bi vê navnîşanê OnionShare dikaretevlî vê rûniştinê bibebi bikaranîna Tor Browser:" +} diff --git a/desktop/onionshare/resources/locale/cs.json b/desktop/onionshare/resources/locale/cs.json new file mode 100644 index 00000000..901f6439 --- /dev/null +++ b/desktop/onionshare/resources/locale/cs.json @@ -0,0 +1,122 @@ +{ + "config_onion_service": "Nastavuji onion požadavky na portu {0:d}.", + "preparing_files": "Probíhá komprese souborů.", + "give_this_url": "Dejte tuto URL osobě, které dané soubory posíláte:", + "give_this_url_stealth": "Sděl příjemci tuto URL a HidServAuth:", + "ctrlc_to_stop": "Stiskněte Ctrl+C pro zastavení serveru", + "not_a_file": "{0:s} není platný soubor.", + "other_page_loaded": "URL loaded", + "closing_automatically": "Zastavuji automaticky, protože stahování skončilo", + "large_filesize": "Varování: Posílání velkých souborů může trvat hodiny", + "help_local_only": "Nepoužívat Tor: jen pro vývoj", + "help_stay_open": "Nechat běžet onion service po skončení stahování", + "help_stealth": "Create stealth onion service (advanced)", + "help_verbose": "Zaznamenat chyby na disk", + "help_filename": "Seznam souborů a složek ke sdílení", + "gui_drag_and_drop": "Táhni a pusť\nsoubory sem", + "gui_add": "Přidat", + "gui_delete": "Smazat", + "gui_choose_items": "Vybrat", + "gui_share_start_server": "Spustit sdílení", + "gui_share_stop_server": "Zastavit sdílení", + "gui_copy_url": "Kopírovat URL", + "gui_downloads": "Historie stahování", + "gui_canceled": "Zrušeno", + "gui_copied_url": "URL zkopírováno do schránky", + "gui_please_wait": "Spouštění... Klikněte pro zrušení.", + "gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "Onionshare {0:s} | https://onionshare.org/", + "gui_share_quit_warning": "Jste si jistí, že chcete odejít? URL, kterou sdílíte poté nebude existovat.", + "gui_quit_warning_quit": "Zavřít", + "gui_quit_warning_dont_quit": "Zůstat", + "zip_progress_bar_format": "Zpracovávám soubory: %p%", + "error_stealth_not_supported": "K autorizaci klienta potřebujete alespoň Tor 0.2.9.1-alpha (or Tor Browser 6.5) a python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare vyžaduje nejméně Tor 0.2.7.1 a nejméně python3-stem 1.4.0.", + "gui_settings_window_title": "Nastavení", + "gui_settings_connection_type_label": "Jak by se měl OnionShare připojit k Toru?", + "gui_settings_connection_type_automatic_option": "Zkusit automatické nastavení s Tor Browserem", + "gui_settings_connection_type_control_port_option": "Připojit použitím control port", + "gui_settings_connection_type_socket_file_option": "Připojit použitím socket file", + "gui_settings_control_port_label": "Control port", + "gui_settings_socket_file_label": "Socket file", + "gui_settings_authenticate_label": "Autentizační nastavení Toru", + "gui_settings_authenticate_no_auth_option": "Žádná autentizace ani cookie autentizace", + "gui_settings_authenticate_password_option": "Heslo", + "gui_settings_password_label": "Heslo", + "gui_settings_button_save": "Uložit", + "gui_settings_button_cancel": "Zrušit", + "settings_saved": "Nastavení uloženo do {}", + "settings_error_unknown": "Nejde se připojit k ovladači Toru, protože nastavení nedává smysl.", + "settings_error_automatic": "Nejde se připojit k ovladači Toru. Běží Tor Browser na pozadí? Pokud ho ještě nemáte, můžete ho získat na:\nhttps://www.torproject.org/.", + "settings_error_socket_port": "Nejde se připojit k ovladači Toru na {}:{}.", + "settings_error_socket_file": "Can't connect to Tor controller using socket file {}.", + "settings_error_auth": "Připojen k {}:{}, ale nejde se autentizovat. Možná to není ovladač Toru?", + "settings_error_missing_password": "Připojen k ovladači Toru, ale vyžaduje heslo pro autentizaci.", + "settings_error_unreadable_cookie_file": "Připojen k ovladači Toru, ale nejde se autentizovat, protože heslo je možná špatné a váš uživatel nemá povolení číst soubor cookie.", + "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", + "error_tor_protocol_error": "Error talking to the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.", + "give_this_url_receive": "Sděl tuto adresu odesilateli:", + "give_this_url_receive_stealth": "Sdělte tuto adresu a HidServAuth odesilateli:", + "no_available_port": "Port potřebný ke spuštění služeb onion nelze nalézt", + "not_a_readable_file": "{0:s} soubor není čitelný.", + "timeout_download_still_running": "Čeká se na konec stahování", + "systray_menu_exit": "Ukončit", + "systray_download_started_title": "Stahování pomocí OnionShare začalo", + "systray_download_started_message": "Někdo stahuje vaše soubory", + "systray_download_completed_title": "Stahování pomocí OnionShare skončilo", + "systray_download_completed_message": "Uživatel dokončil stahování vašich souborů", + "systray_download_canceled_title": "Stahování pomocí OnionShare bylo zrušeno", + "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_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_autostop_timer": "Zastavit mód přijímání ({} zbývá)", + "gui_copied_url_title": "OnionShare adresa zkopírována", + "gui_quit_title": "Ne tak rychle", + "gui_settings_stealth_option": "Autorizace klienta", + "gui_settings_autoupdate_label": "Kontrola nové verze", + "gui_settings_autoupdate_option": "Upozornit na dostupnost nové verze", + "gui_settings_autoupdate_timestamp": "Poslední kontrola {}", + "gui_settings_autoupdate_timestamp_never": "Nikdy", + "gui_settings_autoupdate_check_button": "Kontrola nové verze", + "gui_settings_sharing_label": "Nastavení sdílení", + "gui_settings_close_after_first_download_option": "Zastavit sdílení po odeslání dat", + "gui_settings_connection_type_bundled_option": "Použít Tor verzi vestavěnou v OnionShare", + "gui_settings_connection_type_test_button": "Test připojení do Tor sítě", + "gui_settings_socks_label": "SOCKS port", + "gui_settings_tor_bridges": "Tor bridge podpora", + "gui_settings_tor_bridges_no_bridges_radio_option": "Nepoužívať Tor bridge", + "gui_settings_tor_bridges_obfs4_radio_option": "Použít vestavěný obfs4 přenos", + "gui_receive_quit_warning": "Jste v procesu příjímání dat. Jste si opravdu jistí, že chcete OnionShare ukončit?", + "gui_settings_whats_this": "Co je to?", + "gui_settings_general_label": "Obecná nastavení", + "gui_add_files": "Přidat soubory", + "gui_add_folder": "Přidat adresář", + "gui_settings_onion_label": "Onion nastavení", + "close_on_autostop_timer": "Zastaveno protože vypršel čas auto-stop časovače", + "gui_stop_server_autostop_timer_tooltip": "Auto-stop skončí v {}", + "gui_start_server_autostart_timer_tooltip": "Auto-start skončí v {}", + "gui_waiting_to_start": "Naplánovaný start v {}. Klikněte pro zrušení.", + "incorrect_password": "Nesprávné heslo", + "gui_settings_individual_downloads_label": "Odškrtnout k povolení stahování libovolných souborů", + "gui_settings_csp_header_disabled_option": "Zakázat Conent Security Policy hlavičku", + "gui_hide": "Schovat", + "gui_reveal": "Odhalit", + "gui_qr_label_auth_string_title": "Soukromý klíč", + "gui_qr_label_url_title": "OnionShare adresa", + "gui_qr_code_dialog_title": "OnionShare QR kód", + "gui_show_qr_code": "Zobrazit QR kód", + "gui_copied_client_auth": "Soukromý klíč zkopírován do schránky", + "gui_copied_client_auth_title": "Soukromý klíč zkopírován", + "gui_please_wait_no_button": "Spouštění…", + "gui_copy_client_auth": "Kopírovat soukromý klíč", + "gui_receive_flatpak_data_dir": "Protože jste nainstalovali OnionShare pomocí Flatpaku, musíte soubory uložit do složky v ~/OnionShare.", + "gui_chat_stop_server": "Zastavit chatovací server", + "gui_chat_start_server": "Spustit chatovací server", + "gui_file_selection_remove_all": "Odstranit Vše", + "gui_remove": "Odstranit" +} diff --git a/desktop/onionshare/resources/locale/da.json b/desktop/onionshare/resources/locale/da.json new file mode 100644 index 00000000..57ff605a --- /dev/null +++ b/desktop/onionshare/resources/locale/da.json @@ -0,0 +1,297 @@ +{ + "config_onion_service": "Opsætter onion-tjeneste på port {0:d}.", + "preparing_files": "Komprimerer filer.", + "give_this_url": "Giv adressen til modtageren:", + "give_this_url_stealth": "Giv adressen og HidServAuth-linjen til modtageren:", + "ctrlc_to_stop": "Tryk på Ctrl+C for at stoppe serveren", + "not_a_file": "{0:s} er ikke en gyldig fil.", + "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_autostop_timer": "Stoppede fordi timer med automatisk stop 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", + "systray_menu_exit": "Afslut", + "systray_download_started_title": "OnionShare-download begyndte", + "systray_download_started_message": "En bruger begyndte download af dine filer", + "systray_download_completed_title": "OnionShare-download færdig", + "systray_download_completed_message": "Brugeren er færdig med at downloade dine filer", + "systray_download_canceled_title": "OnionShare-download annulleret", + "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_autostop_timer": "Stop deling efter et vist antal sekunder", + "help_stealth": "Brug klientautentifikation (avanceret)", + "help_verbose": "Log OnionShare-fejl til stdout, og webfejl til disk", + "help_filename": "Liste over filer eller mapper som skal deles", + "help_config": "Tilpasset placering af JSON-konfigurationsfil (valgfri)", + "gui_drag_and_drop": "Træk og slip filer og mapper her\nfor at begynde at dele", + "gui_add": "Tilføj", + "gui_delete": "Slet", + "gui_choose_items": "Vælg", + "gui_share_start_server": "Begynd at dele", + "gui_share_stop_server": "Stop deling", + "gui_copy_url": "Kopiér adresse", + "gui_downloads": "Downloadhistorik", + "gui_canceled": "Annulleret", + "gui_copied_url": "OnionShare-adressen blev kopieret til udklipsholderen", + "gui_please_wait": "Starter ... klik for at annullere.", + "gui_download_upload_progress_complete": ".", + "gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_share_quit_warning": "Du er ved at afsende filer. Er du sikker på, at du vil afslutte OnionShare?", + "gui_quit_warning_quit": "Afslut", + "gui_quit_warning_dont_quit": "Annuller", + "zip_progress_bar_format": "Komprimerer: %p%", + "error_stealth_not_supported": "For at bruge klientautentifikation skal du have mindst Tor 0.2.9.1-alpha (eller Tor Browser 6.5) og python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare kræver mindst både Tor 0.2.7.1 og python3-stem 1.4.0.", + "gui_settings_window_title": "Indstillinger", + "gui_settings_stealth_option": "Brug klientautentifikation", + "gui_settings_autoupdate_label": "Søg efter ny version", + "gui_settings_autoupdate_option": "Giv mig besked når der findes en ny version", + "gui_settings_autoupdate_timestamp": "Sidste søgning: {}", + "gui_settings_autoupdate_timestamp_never": "Aldrig", + "gui_settings_autoupdate_check_button": "Søg efter ny version", + "gui_settings_sharing_label": "Delingsindstillinger", + "gui_settings_close_after_first_download_option": "Stop deling efter filerne er blevet sendt", + "gui_settings_connection_type_label": "Hvordan skal OnionShare oprette forbindelse til Tor?", + "gui_settings_connection_type_bundled_option": "Brug den Tor-version som er indbygget i OnionShare", + "gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser", + "gui_settings_connection_type_control_port_option": "Opret forbindelse med kontrolport", + "gui_settings_connection_type_socket_file_option": "Opret forbindelse med sokkelfil", + "gui_settings_connection_type_test_button": "Test forbindelsen til Tor", + "gui_settings_control_port_label": "Kontrolport", + "gui_settings_socket_file_label": "Sokkelfil", + "gui_settings_socks_label": "SOCKS-port", + "gui_settings_authenticate_label": "Indstillinger for Tor-autentifikation", + "gui_settings_authenticate_no_auth_option": "Ingen autentifikation, eller cookieautentifikation", + "gui_settings_authenticate_password_option": "Adgangskode", + "gui_settings_password_label": "Adgangskode", + "gui_settings_tor_bridges": "Understøttelse af Tor-bro", + "gui_settings_tor_bridges_no_bridges_radio_option": "Brug ikke broer", + "gui_settings_tor_bridges_obfs4_radio_option": "Brug indbyggede obfs4 udskiftelige transporter", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Brug indbyggede obfs4 udskiftelige transporter (kræver obfs4proxy)", + "gui_settings_tor_bridges_custom_radio_option": "Brug tilpassede broer", + "gui_settings_tor_bridges_custom_label": "Du kan få broer fra https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Ingen at de broer du tilføjede virker.\nDobbelttjek dem eller tilføj andre.", + "gui_settings_button_save": "Gem", + "gui_settings_button_cancel": "Annuller", + "gui_settings_button_help": "Hjælp", + "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?", + "settings_error_socket_port": "Kan ikke oprette forbindelse til Tor-kontrolleren på {}:{}.", + "settings_error_socket_file": "Kan ikke oprette forbindelse til Tor-kontrolleren med sokkelfilen {}.", + "settings_error_auth": "Forbundet til {}:{}, men kan ikke autentificere. Er det fordi det ikke er en Tor-kontroller?", + "settings_error_missing_password": "Forbundet til Tor-kontroller, men den kræver en adgangskode for at autentificere.", + "settings_error_unreadable_cookie_file": "Forbundet til Tor-kontrolleren, men adgangskoden kan være forkert, eller din bruger har ikke tilladelse til at læse cookiefilen.", + "settings_error_bundled_tor_not_supported": "Brug af den Tor-version som kom med OnionShare virker ikke i udviklertilstand på Windows eller macOS.", + "settings_error_bundled_tor_timeout": "For længe om at oprette forbindelse til Tor. Måske har du ikke forbindelse til internettet, eller går dit systems ur forkert?", + "settings_error_bundled_tor_broken": "OnionShare kunne ikke oprette forbindelse til Tor:\n{}", + "settings_test_success": "Forbundet til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige oniontjenester: {}.\nUnderstøtter klientautentifikation: {}.\nUnderstøtter næstegenerations .onion-adresser: {}.", + "error_tor_protocol_error": "Der opstod en fejl med Tor: {}", + "connecting_to_tor": "Opretter forbindelse til Tor-netværket", + "update_available": "Der findes en ny OnionShare. Klik her for at hente den.

Du bruger {} og den seneste er {}.", + "update_error_check_error": "Kunne ikke søge efter nye version: Måske har du ikke oprettet forbindelse til Tor eller også er OnionShare-webstedet nede?", + "update_error_invalid_latest_version": "Kunne ikke søge efter ny version: OnionShare-webstedet siger at den seneste version er den ugenkendelige '{}' …", + "update_not_available": "Du kører den seneste OnionShare.", + "gui_tor_connection_ask": "Åbn indstillingerne for at rette forbindelsen til Tor?", + "gui_tor_connection_ask_open_settings": "Ja", + "gui_tor_connection_ask_quit": "Afslut", + "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_autostop_timer": "Timeren med automatisk stop løb ud inden serveren startede. Opret venligst en ny deling.", + "gui_server_autostop_timer_expired": "Timeren med automatisk stop er allerede løbet ud. Juster den venligst for at begynde at dele.", + "share_via_onionshare": "Del via OnionShare", + "gui_save_private_key_checkbox": "Brug en vedvarende adresse", + "gui_copied_url_title": "Kopierede OnionShare-adresse", + "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_autostop_timer_checkbox": "Brug timer med autostop", + "gui_url_label_persistent": "Delingen stopper ikke automatisk.

Enhver 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 er færdig for første gang.", + "gui_url_label_onetime_and_persistent": "Delingen stopper ikke automatisk.

Enhver efterfølgende deling bruger den samme adresse igen (hvis du vil bruge engangsadresser, så deaktivér \"Brug vedvarende adresse\", i indstillingerne).", + "gui_file_info": "{} filer, {}", + "gui_file_info_single": "{} fil, {}", + "info_in_progress_downloads_tooltip": "{} igangværende downloads", + "info_completed_downloads_tooltip": "{} færdige downloads", + "give_this_url_receive": "Giv adressen til afsenderen:", + "give_this_url_receive_stealth": "Giv adressen og HidServAuth til afsenderen:", + "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_autostop_timer": "Stop deling ({})", + "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_autostop_timer_tooltip": "Timer med autostop slutter ved {}", + "gui_receive_start_server": "Start modtagetilstand", + "gui_receive_stop_server": "Stop modtagetilstand", + "gui_receive_stop_server_autostop_timer": "Stop modtagetilstand ({} 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", + "gui_status_indicator_share_stopped": "Klar til at dele", + "gui_status_indicator_share_working": "Starter …", + "gui_status_indicator_share_started": "Deler", + "gui_status_indicator_receive_stopped": "Klar til at modtage", + "gui_status_indicator_receive_working": "Starter …", + "gui_status_indicator_receive_started": "Modtager", + "receive_mode_received_file": "Modtaget: {}", + "gui_mode_share_button": "Del filer", + "gui_mode_receive_button": "Modtag filer", + "gui_settings_receiving_label": "Modtagelsesindstillinger", + "gui_settings_downloads_label": "Gem filer til", + "gui_settings_downloads_button": "Gennemse", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "Modtagetilstand kan ikke stoppes af afsenderen", + "gui_settings_public_mode_checkbox": "Offentlig tilstand", + "systray_close_server_title": "OnionShare-server lukket", + "systray_close_server_message": "En bruger lukkede serveren", + "systray_page_loaded_title": "Side indlæst", + "systray_download_page_loaded_message": "En bruger indlæste downloadsiden", + "systray_upload_page_loaded_message": "En bruger indlæste uploadsiden", + "gui_uploads": "Uploadhistorik", + "gui_no_uploads": "Ingen uploads endnu", + "gui_clear_history": "Ryd alle", + "gui_upload_finished_range": "Uploadede {} til {}", + "gui_upload_finished": "Uploadet {}", + "gui_settings_language_label": "Foretrukne sprog", + "gui_settings_language_changed_notice": "Genstart OnionShare for at få det nye sprog til at træde i kraft.", + "gui_settings_meek_lite_expensive_warning": "Advarsel: meek_lite-broerne er meget dyre at køre for Tor-projektet.

Brug dem kun hvis du ikke er i stand til at oprette forbindelse til Tor direkte, via obfs4-transporter eller andre normale broer.", + "gui_share_url_description": "Alle med OnionShare-adressen kan downloade dine filer, med Tor Browser: ", + "gui_receive_url_description": "Alle med OnionShare-adressen kan uploade filer til din computer, med Tor Browser: ", + "history_in_progress_tooltip": "{} igangværende", + "history_completed_tooltip": "{} færdige", + "info_in_progress_uploads_tooltip": "{} igangværende upload(s)", + "info_completed_uploads_tooltip": "{} upload(s) færdige", + "error_cannot_create_downloads_dir": "Kunne ikke oprette modtagetilstand-mappe: {}", + "receive_mode_downloads_dir": "Filer som sendes til dig vises i denne mappe: {}", + "receive_mode_warning": "Advarsel: Modtagetilstand lader folk uploade filer til din computer. Nogle filer kan potentielt tage kontrol over din computer hvis du åbner dem. Åbn kun ting fra folk du har tillid til, eller hvis du ved hvad du har gang i.", + "gui_receive_mode_warning": "Modtagetilstand lader folk uploade filer til din computer.

Nogle filer kan potentielt tage kontrol over din computer hvis du åbner dem. Åbn kun ting fra folk du har tillid til, eller hvis du ved hvad du gør.", + "receive_mode_upload_starting": "Upload med samlet størrelse på {} starter", + "gui_open_folder_error_nautilus": "Kan ikke åbne mappe fordi nautilus ikke er tilgængelig. Filen er her: {}", + "timeout_upload_still_running": "Venter på at upload skal blive færdig", + "gui_add_files": "Tilføj filer", + "gui_add_folder": "Tilføj mappe", + "gui_connect_to_tor_for_onion_settings": "Opret forbindelse til Tor for at se indstillinger for onion-tjeneste", + "error_cannot_create_data_dir": "Kunne ikke oprette OnionShare-datamappe: {}", + "receive_mode_data_dir": "Filer som sendes til dig vises i denne mappe: {}", + "gui_settings_data_dir_label": "Gem filer i", + "gui_settings_data_dir_browse_button": "Gennemse", + "systray_page_loaded_message": "OnionShare-adresse indlæst", + "systray_share_started_title": "Deling startet", + "systray_share_started_message": "Starter på at sende filer til nogen", + "systray_share_completed_title": "Deling færdig", + "systray_share_completed_message": "Færdig med at sende filer", + "systray_share_canceled_title": "Deling annulleret", + "systray_share_canceled_message": "Nogen annullerede modtagelsen af dine filer", + "systray_receive_started_title": "Modtagelse startet", + "systray_receive_started_message": "Nogen sender filer til dig", + "gui_all_modes_history": "Historik", + "gui_all_modes_clear_history": "Ryd alle", + "gui_all_modes_transfer_started": "Startede {}", + "gui_all_modes_transfer_finished_range": "Overførte {} - {}", + "gui_all_modes_transfer_finished": "Overførte {}", + "gui_all_modes_progress_complete": "%p%, {0:s} forløbet.", + "gui_all_modes_progress_starting": "{0:s}, %p% (udregner)", + "gui_all_modes_progress_eta": "{0:s}, anslået ankomsttid: {1:s}, %p%", + "gui_share_mode_no_files": "Der er endnu ikke sendt nogle filer", + "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 nogle filer", + "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", + "gui_stop_server_autostop_timer_tooltip": "Timer med automatisk stop slutter {}", + "gui_start_server_autostart_timer_tooltip": "Timer med automatisk start slutter {}", + "gui_waiting_to_start": "Planlagt til start om {}. Klik for at annullere.", + "gui_settings_autostart_timer_checkbox": "Brug timer med autostart", + "gui_settings_autostart_timer": "Start deling ved:", + "gui_server_autostart_timer_expired": "Det planlagte tidspunkt er allerede passeret. Juster det venligst for at begynde at dele.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Timeren med automatisk stop må ikke være det samme som eller tidligere end timeren med automatisk start. Juster den venligst for at begynde at dele.", + "gui_status_indicator_share_scheduled": "Planlagt …", + "gui_status_indicator_receive_scheduled": "Planlagt …", + "days_first_letter": "d", + "hours_first_letter": "t", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_website_url_description": "Alle med OnionShare-adressen kan besøge dit websted med Tor Browser: ", + "gui_mode_website_button": "Udgiv websted", + "gui_website_mode_no_files": "Der er endnu ikke delt noget websted", + "incorrect_password": "Forkert adgangskode", + "gui_settings_individual_downloads_label": "Fravælg for at tillade download af individuelle filer", + "history_requests_tooltip": "{}-webforespørgsler", + "gui_settings_csp_header_disabled_option": "Deaktivér indholdets header om sikkerhedspolitik", + "gui_settings_website_label": "Webstedsindstillinger", + "gui_new_tab_share_description": "Vælg filer på din computer som skal sendes til andre. Personen eller dem du vil sende filer til skal bruge Tor Browser til at downloade dem fra dig.", + "mode_settings_website_disable_csp_checkbox": "Deaktivér Content Security Policy-header (giver dit websted mulighed for at bruge tredjepartsressourcer)", + "gui_new_tab_receive_description": "Brug din computer som en online-dropbox. Andre vil kunne bruge Tor Browser til at sende filer til din computer.", + "mode_settings_share_autostop_sharing_checkbox": "Stop deling efter filerne er blevet sendt (fravælg for at gøre det muligt at downloade individuelle filer)", + "mode_settings_legacy_checkbox": "Brug en udgået adresse (v2 oniontjeneste, anbefales ikke)", + "mode_settings_autostop_timer_checkbox": "Stop oniontjeneste på det planlagte tidspunkt", + "mode_settings_autostart_timer_checkbox": "Start oniontjeneste på det planlagte tidspunkt", + "mode_settings_persistent_checkbox": "Gem fanebladet og åbn det automatisk når jeg åbner OnionShare", + "gui_quit_warning_description": "Deling er aktiv i nogle af dine faneblade. Hvis du afslutter, så lukkes alle dine faneblade. Er du sikker på, at du vil afslutte?", + "gui_close_tab_warning_website_description": "Du er vært for et websted. Er du sikker på, at du vil lukke fanebladet?", + "gui_close_tab_warning_receive_description": "Du er ved at modtage filer. Er du sikker på, at du vil lukke fanebladet?", + "gui_close_tab_warning_share_description": "Du er ved at sende filer. Er du sikker på, at du vil lukke fanebladet?", + "gui_close_tab_warning_persistent_description": "Fanebladet er vedvarende. Hvis du lukker det, så mister du den onionadresse som det bruger. Er du sikker på, at du vil lukke det?", + "gui_new_tab_website_description": "Vær vært for et statisk HTML-onionwebsted fra din computer.", + "gui_new_tab_website_button": "Vær vært for et websted", + "gui_new_tab_receive_button": "Modtag filer", + "gui_new_tab_share_button": "Del filer", + "gui_new_tab_tooltip": "Åbn et nyt faneblad", + "mode_settings_receive_data_dir_browse_button": "Gennemse", + "mode_settings_receive_data_dir_label": "Gem filer i", + "mode_settings_public_checkbox": "Brug ikke en adgangskode", + "mode_settings_advanced_toggle_hide": "Skjul avancerede indstillinger", + "mode_settings_advanced_toggle_show": "Vis avancerede indstillinger", + "gui_quit_warning_cancel": "Annuller", + "gui_quit_warning_title": "Er du sikker?", + "gui_close_tab_warning_cancel": "Annuller", + "gui_close_tab_warning_close": "Luk", + "gui_close_tab_warning_title": "Er du sikker?", + "gui_new_tab": "Nyt faneblad", + "gui_tab_name_chat": "Chat", + "gui_tab_name_website": "Websted", + "gui_tab_name_receive": "Modtag", + "gui_tab_name_share": "Del", + "gui_new_tab_chat_button": "Chat anonymt", + "gui_open_folder_error": "Kunne ikke åbne mappen med xdg-open. Filen er her: {}", + "gui_qr_code_description": "Skan QR-koden med en QR-læser såsom kameraet i din telefon for at gøre det lettere at dele OnionShare-adressen med andre.", + "gui_qr_code_dialog_title": "QR-kode til OnionShare", + "gui_show_qr_code": "Vis QR-kode", + "gui_receive_flatpak_data_dir": "Da du installerede OnionShare med Flatpak, så skal du gemme filer til en mappe i ~/OnionShare.", + "gui_chat_stop_server": "Stop chatserver", + "gui_chat_start_server": "Start chatserver", + "gui_chat_stop_server_autostop_timer": "Stop chatserver ({})", + "gui_file_selection_remove_all": "Fjern alle", + "gui_remove": "Fjern", + "gui_main_page_share_button": "Begynd at dele", + "gui_main_page_receive_button": "Begynd at modtage", + "gui_main_page_website_button": "Begynd at være vært", + "gui_main_page_chat_button": "Begynd at chatte", + "gui_chat_url_description": "Alle med denne OnionShare-adresse kan deltage i chatrummet med Tor Browser: ", + "error_port_not_available": "OnionShare-port ikke tilgængelig", + "gui_rendezvous_cleanup": "Venter på at Tor-kredsløb lukker for at være sikker på, at det lykkedes at overføre dine filer.\n\nDet kan tage noget tid.", + "gui_rendezvous_cleanup_quit_early": "Afslut tidligt", + "history_receive_read_message_button": "Læs meddelelse", + "mode_settings_receive_webhook_url_checkbox": "Brug underretningswebhook", + "mode_settings_receive_disable_files_checkbox": "Deaktivér upload af filer", + "mode_settings_receive_disable_text_checkbox": "Deaktivér indsendelse af tekst", + "mode_settings_title_label": "Tilpasset titel", + "gui_color_mode_changed_notice": "Genstart OnionShare for at anvende den nye farvetilstand.", + "gui_status_indicator_chat_started": "Chatter", + "gui_status_indicator_chat_scheduled": "Planlagt …", + "gui_status_indicator_chat_working": "Starter …", + "gui_status_indicator_chat_stopped": "Klar til at chatte" +} diff --git a/desktop/onionshare/resources/locale/de.json b/desktop/onionshare/resources/locale/de.json new file mode 100644 index 00000000..04cce9e3 --- /dev/null +++ b/desktop/onionshare/resources/locale/de.json @@ -0,0 +1,345 @@ +{ + "preparing_files": "Dateien werden komprimiert.", + "give_this_url": "Gib diese URL an den Empfänger:", + "ctrlc_to_stop": "Drücke Strg+C um den Server anzuhalten", + "not_a_file": "{0:s} ist keine gültige Datei.", + "other_page_loaded": "Daten geladen", + "closing_automatically": "Gestoppt, da die Übertragung erfolgreich beendet wurde", + "large_filesize": "Achtung: Das Senden von großen Dateien kann Stunden dauern", + "help_local_only": "Tor nicht verwenden (nur für Entwicklung)", + "help_stay_open": "Den Server weiterlaufen lassen, nachdem die Dateien verschickt wurden", + "help_verbose": "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, um sie zu teilen", + "gui_add": "Hinzufügen", + "gui_delete": "Löschen", + "gui_choose_items": "Auswählen", + "gui_share_start_server": "Teilen beginnen", + "gui_share_stop_server": "Freigabe beenden", + "gui_copy_url": "Adresse kopieren", + "gui_downloads": "Bisherige Downloads", + "gui_copied_url": "OnionShare-Adresse wurde in die Zwischenablage kopiert", + "gui_please_wait": "Startet… Klicken zum Abbrechen.", + "timeout_download_still_running": "Warte auf Beendigung des Downloads", + "systray_menu_exit": "Beenden", + "gui_settings_authenticate_password_option": "Passwort", + "gui_settings_password_label": "Passwort", + "gui_settings_button_save": "Speichern", + "gui_settings_button_cancel": "Abbrechen", + "gui_settings_button_help": "Hilfe", + "gui_settings_autostop_timer": "Teilen stoppen 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", + "systray_download_completed_message": "Der Benutzer hat deine Dateien heruntergeladen", + "systray_download_canceled_title": "OnionShare Download abgebrochen", + "systray_download_canceled_message": "Der Benutzer hat den Download abgebrochen", + "gui_canceled": "Abgebrochen", + "gui_quit_warning_quit": "Beenden", + "gui_quit_warning_dont_quit": "Abbrechen", + "gui_settings_window_title": "Einstellungen", + "gui_settings_autoupdate_timestamp": "Letzte Überprüfung: {}", + "gui_settings_autoupdate_timestamp_never": "Niemals", + "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:", + "give_this_url_receive": "Gib diese URL dem Sender:", + "give_this_url_receive_stealth": "Gib diese URL und die HidServAuth-Zeile an den Sender:", + "not_a_readable_file": "{0:s} ist keine lesbare Datei.", + "no_available_port": "Es konnte kein freier verfügbarer Port gefunden werden, um OnionShare zu starten", + "close_on_autostop_timer": "Angehalten, da der automatische 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_autostop_timer": "Freigabe beenden ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Zeit läuft in {} Sekunden ab", + "gui_settings_connection_type_control_port_option": "Verbinde über den Steuerungs-Port", + "gui_settings_connection_type_socket_file_option": "Verbinde über eine Socket-Datei", + "gui_settings_control_port_label": "Steuerungs-Port", + "gui_settings_socket_file_label": "Socket-Datei", + "gui_settings_socks_label": "SOCKS-Port", + "gui_settings_authenticate_no_auth_option": "Keine Authentifizierung oder Authentifizierung per Cookie", + "gui_settings_tor_bridges_no_bridges_radio_option": "Keine Bridges benutzen", + "gui_settings_tor_bridges_obfs4_radio_option": "Benutze integrierte „obfs4 pluggable transports“", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Benutze integrierte „obfs4 pluggable transports“ (benötigt obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Benutze integrierte „meek_lite (Amazon) pluggable transports“", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Benutze integrierte „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_autostop_timer_checkbox": "Automatische Stoppuhr verwenden", + "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 Tor-Netzwerk", + "gui_tor_connection_ask_quit": "Beenden", + "gui_tor_connection_lost": "Verbindung zu Tor getrennt.", + "help_stealth": "Nutze Klientauthorisierung (fortgeschritten)", + "gui_receive_start_server": "Empfangsmodus starten", + "gui_receive_stop_server": "Empfangsmodus stoppen", + "gui_receive_stop_server_autostop_timer": "Empfangsmodus stoppen ({} verbleibend)", + "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_download_upload_progress_complete": "%p%, {0:s} vergangen.", + "gui_download_upload_progress_starting": "{0:s}, %p% (berechne)", + "gui_download_upload_progress_eta": "{0:s}, Voraussichtliche Dauer: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Nicht so schnell", + "gui_share_quit_warning": "Du versendest gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?", + "gui_receive_quit_warning": "Du empfängst gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?", + "zip_progress_bar_format": "Komprimiere: %p%", + "error_stealth_not_supported": "Um die Client-Authorisierung zu nutzen, benötigst du mindestens Tor 0.2.9.1-alpha (oder Tor Browser 6.5) und python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare benötigt mindestens sowohl Tor 0.2.7.1 als auch python3-stem 1.4.0.", + "gui_settings_whats_this": "Was ist das?", + "gui_settings_stealth_option": "Client-Authorisierung benutzen", + "gui_settings_autoupdate_label": "Suche nach neuer Version", + "gui_settings_autoupdate_option": "Benachrichtige mich, wenn eine neue Version verfügbar ist", + "gui_settings_autoupdate_check_button": "Suche nach neuer Version", + "gui_settings_general_label": "Allgemeine Einstellungen", + "gui_settings_sharing_label": "Freigabe-Einstellungen", + "gui_settings_connection_type_automatic_option": "Versuche automatische Konfiguration mittels Tor Browser", + "gui_settings_connection_type_test_button": "Verbindung zu Tor testen", + "gui_settings_authenticate_label": "Authentifizierungseinstellungen für Tor", + "gui_settings_tor_bridges": "Mittels einer Tor-Bridge verbinden?", + "gui_settings_meek_lite_expensive_warning": "Achtung: Die „meek-azure“-Bridges sind für das Tor-Projekt sehr kostspielig.

Nutze sie nur, wenn du dich nicht direkt, per obfs4-Transport oder über andere, normale Bridges zum Tor-Netzwerk verbinden kannst.", + "gui_settings_tor_bridges_invalid": "Keine der ausgewählten Bridges funktioniert. Überprüfe sie oder gib andere an.", + "settings_error_unknown": "Kann nicht zum Tor-Controller verbinden, weil deine Einstellungen keinen Sinn ergeben.", + "settings_error_automatic": "Kann nicht zum Tor-Controller verbinden. Läuft der Tor Browser (kann von https://www.torproject.org/ heruntergeladen werden) im Hintergrund?", + "settings_error_socket_port": "Kann unter {}:{} nicht zum Tor-Controller verbinden.", + "settings_error_unreadable_cookie_file": "Verbindung zum Tor-Controller hergestellt, aber dein Passwort ist falsch oder dein Nutzer darf die Cookie-Datei nicht lesen.", + "settings_error_bundled_tor_not_supported": "Im Entwicklermodus auf Windows oder macOS kannst du nicht die Tor-Version nutzen, die mit OnionShare geliefert wird.", + "settings_error_bundled_tor_timeout": "Die Verbindung zum Tor-Netzwerk braucht zu lang. Bist du vielleicht nicht mit dem Internet verbunden oder geht die Uhr auf deinem System falsch?", + "settings_error_bundled_tor_broken": "OnionShare konnte sich nicht mit Tor verbinden:\n{}", + "settings_test_success": "Verbunden mit dem Tor-Controller.\n\nTor-Version: {}\nUnterstützt vergängliche Onion-Dienste: {}.\nUnterstützt Client-Authorisierung: {}.\nUnterstützt .onion-Adressen der nächsten Generation: {}.", + "error_tor_protocol_error": "Es gab einen Fehler mit Tor: {}", + "error_tor_protocol_error_unknown": "Es gab einen unbekannten Fehler mit Tor", + "error_invalid_private_key": "Diese Art von privatem Schlüssel wird nicht unterstützt", + "update_available": "Es gibt eine neue Version von OnionShare. Klicke hier, um sie herunterzuladen.

Du benutzt {}, und die neueste Version ist {}.", + "update_error_check_error": "Konnte nicht nach neueren Versionen suchen: Bist du vielleicht nicht mit dem Tor-Netzwerk verbunden oder ist die OnionShare-Webseite offline?", + "update_error_invalid_latest_version": "Konnte nicht nach neueren Versionen suchen: Laut OnionShare-Webseite ist die neueste Version die nicht bestimmbare Version '{}'…", + "update_not_available": "Du benutzt die neueste Version von OnionShare.", + "gui_tor_connection_ask": "Einstellungen öffnen, um die Verbindung zum Tor-Netzwerk zu reparieren?", + "gui_tor_connection_ask_open_settings": "Ja", + "gui_tor_connection_error_settings": "Versuche in den Einstellungen zu ändern, wie sich OnionShare mit dem Tor-Netzwerk verbindet.", + "gui_tor_connection_canceled": "Konnte keine Verbindung zu Tor herstellen.\n\nStelle sicher, dass du mit dem Internet verbunden bist, öffne OnionShare erneut und richte die Verbindung zu Tor ein.", + "share_via_onionshare": "Teilen über OnionShare", + "gui_save_private_key_checkbox": "Nutze eine gleichbleibende Adresse", + "gui_share_url_description": "Jeder mit dieser OnionShare-Adresse dem privaten Schlüssel kann deine Dateien mit dem Tor Browser herunterladen: ", + "gui_receive_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann mit dem Tor Browser Dateien auf deinen Computer hochladen: ", + "gui_url_label_persistent": "Diese Freigabe wird nicht automatisch stoppen.

Jede folgende Freigabe wird die Adresse erneut nutzen. (Um Adressen nur einmal zu nutzen, schalte „Nutze beständige Adressen“ in den Einstellungen aus.)", + "gui_url_label_stay_open": "Diese Freigabe wird nicht automatisch stoppen.", + "gui_url_label_onetime": "Diese Freigabe wird nach dem ersten vollständigen Download stoppen.", + "gui_status_indicator_share_working": "Starte…", + "gui_status_indicator_share_started": "Teilen", + "gui_status_indicator_receive_stopped": "Bereit zum Empfangen", + "gui_status_indicator_receive_working": "Starte…", + "gui_status_indicator_receive_started": "Empfange", + "gui_file_info": "{} Dateien, {}", + "gui_file_info_single": "{} Datei, {}", + "history_completed_tooltip": "{} abgeschlossen", + "info_in_progress_uploads_tooltip": "{} Upload(s) laufen", + "info_completed_uploads_tooltip": "{} Upload(s) vollständig", + "error_cannot_create_downloads_dir": "Konnte den Ordner für den Empfängermodus nicht erstellen: {}", + "receive_mode_downloads_dir": "Dateien, die dir geschickt werden, findest du in diesem Ordner: {}", + "receive_mode_warning": "Achtung: Im Empfängermodus können Leute Dateien auf deinen Computer laden. Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust oder wenn du genau weißt, was du tust.", + "gui_receive_mode_warning": "Im Empfangsmodus können Personen Dateien auf deinen Computer laden.

Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust, oder wenn du genau weißt, was du tust.", + "receive_mode_received_file": "Empfangen: {}", + "gui_mode_share_button": "Versende Dateien", + "gui_mode_receive_button": "Empfange Dateien", + "gui_settings_receiving_label": "Empfangs-Einstellungen", + "gui_settings_downloads_label": "Speichere Dateien in", + "gui_settings_downloads_button": "Durchsuchen", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "Der Empfängermodus kann vom Versender gestoppt werden", + "gui_settings_public_mode_checkbox": "Öffentlicher Modus", + "systray_close_server_title": "OnionShareServer gestoppt", + "systray_close_server_message": "Ein Nutzer hat den Server gestoppt", + "systray_download_page_loaded_message": "Ein Nutzer hat die Downloadseite geöffnet", + "systray_upload_page_loaded_message": "Ein Nutzer hat die Uploadseite geöffnet", + "gui_uploads": "Uploadhistorie", + "gui_no_uploads": "Bisher keine Uploads", + "gui_clear_history": "Alle löschen", + "gui_upload_in_progress": "Upload gestartet {}", + "gui_download_in_progress": "Download gestartet {}", + "gui_open_folder_error_nautilus": "Kann den Ordner nicht öffnen, weil Nautilus nicht verfügbar ist. Die Datei ist hier: {}", + "gui_settings_language_label": "Sprache", + "gui_settings_language_changed_notice": "Starte OnionShare neu, damit die neue Sprache übernommen wird.", + "help_config": "Ort deiner eigenen JSON Konfigurationsdatei (optional)", + "timeout_upload_still_running": "Warte bis Upload vollständig ist", + "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_autostop_timer": "Die Zeit ist abgelaufen, bevor der Server gestartet werden konnte. Bitte starte einen erneuten Teilvorgang.", + "gui_server_autostop_timer_expired": "Der automatische Stopp-Timer ist bereits abgelaufen. Bitte pass diesen an, 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", + "systray_page_loaded_title": "Seite geladen", + "gui_upload_finished_range": "{} hochgeladen zu {}", + "gui_upload_finished": "{} hochgeladen", + "gui_add_files": "Dateien hinzufügen", + "gui_add_folder": "Ordner hinzufügen", + "gui_connect_to_tor_for_onion_settings": "Verbinde dich mit Tor, um die Einstellungen für die Onion-Dienste zu sehen", + "gui_url_label_onetime_and_persistent": "Diese Freigabe wird nicht automatisch stoppen. >br>
Jede nachfolgende Freigabe wird die gleiche Adresse nutzen. (Um jedes Mal eine andere Adresse zu nutzen, schalte „Nutze eine gleichbleibende Adresse“ in den Einstellungen aus.)", + "gui_settings_onion_label": "Adresseinstellungen", + "error_cannot_create_data_dir": "Der Ordner für die OnionShare-Dateien konnte nicht erstellt werden: {}", + "receive_mode_data_dir": "Die Dateien, die dir geschickt wurden, findest du in folgendem Ordner: {}", + "gui_settings_data_dir_label": "Speichere Dateien in", + "gui_settings_data_dir_browse_button": "Durchsuchen", + "systray_page_loaded_message": "OnionShare-Adresse geladen", + "systray_share_started_title": "Freigabe gestartet", + "systray_share_started_message": "Upload von Dateien begonnen", + "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_receive_started_title": "Empfange", + "systray_receive_started_message": "Jemand sendet dir Dateien", + "gui_all_modes_history": "Verlauf", + "gui_all_modes_clear_history": "Liste leeren", + "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": "Noch keine Dateien versendet", + "gui_share_mode_autostop_timer_waiting": "Warte auf Abschluss des Sendens", + "gui_receive_mode_no_files": "Noch keine Dateien empfangen", + "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.", + "gui_settings_autostart_timer_checkbox": "Automatische Startuhr verwenden", + "gui_settings_autostart_timer": "Teilen starten um:", + "gui_waiting_to_start": "Geplant in {} zu starten. Klicken zum Abbrechen.", + "gui_stop_server_autostop_timer_tooltip": "Automatischer Stopptimer endet um {}", + "gui_start_server_autostart_timer_tooltip": "Automatischer Stopptimer endet um {}", + "gui_server_autostart_timer_expired": "Die geplante Zeit ist bereits abgelaufen. Bitte passe diese an, um das Teilen zu starten.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die automatische Stoppzeit kann nicht gleich oder früher als die Startzeit sein. Bitte passe die Zeiten an, um das Teilen zu starten.", + "gui_status_indicator_share_scheduled": "Geplant…", + "gui_status_indicator_receive_scheduled": "Geplant…", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_website_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann deine Webseite mit dem Tor Browser ansehen: ", + "gui_mode_website_button": "Webseite veröffentlichen", + "systray_site_loaded_title": "Webseite geladen", + "systray_site_loaded_message": "OnionShare Website geladen", + "systray_website_started_title": "Freigabe der Webseite starten", + "systray_website_started_message": "Jemand besucht deine Webseite", + "gui_website_mode_no_files": "Noch keine Webseite freigegeben", + "gui_visit_started": "Jemand hat deine Webseite besucht {}", + "incorrect_password": "Falsches Passwort", + "systray_individual_file_downloaded_title": "Individuelle Datei geladen", + "gui_settings_individual_downloads_label": "Abwählen, um den Download einzelner Dateien zu erlauben", + "history_requests_tooltip": "{} Web-Anfragen", + "systray_individual_file_downloaded_message": "Individuelle Datei {} betrachtet", + "mode_settings_share_autostop_sharing_checkbox": "Dateifreigabe beenden, sobald alle Dateien versendet wurden (abwählen, um das Herunterladen einzelner Dateien zu erlauben)", + "mode_settings_website_disable_csp_checkbox": "Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen von Drittanbietern auf deiner Onion-Webseite einzubinden)", + "mode_settings_receive_data_dir_browse_button": "Durchsuchen", + "mode_settings_receive_data_dir_label": "Dateien speichern unter", + "mode_settings_legacy_checkbox": "Benutze ein veraltetes Adressformat (Onion-Dienste-Adressformat v2, nicht empfohlen)", + "mode_settings_autostop_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt stoppen", + "mode_settings_autostart_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt starten", + "mode_settings_public_checkbox": "Dies ist ein öffentlicher OnionShare-Dienst (deaktiviert den privaten Schlüssel)", + "mode_settings_persistent_checkbox": "Speichere diesen Reiter und öffne ihn automatisch, wenn ich OnionShare starte", + "mode_settings_advanced_toggle_hide": "Erweiterte Einstellungen ausblenden", + "mode_settings_advanced_toggle_show": "Erweiterte Einstellungen anzeigen", + "gui_quit_warning_cancel": "Abbrechen", + "gui_quit_warning_description": "In einigen Reitern sind noch Dateifreigaben aktiv. Wenn du beendest, werden alle Reiter geschlossen. Möchtest du wirklich beenden?", + "gui_quit_warning_title": "Bist du sicher?", + "gui_close_tab_warning_cancel": "Abbrechen", + "gui_close_tab_warning_close": "Schließen", + "gui_close_tab_warning_website_description": "Du hostest gerade eine Webseite. Möchtest du diesen Reiter wirklich schließen?", + "gui_close_tab_warning_receive_description": "Du empfängst gerade Dateien. Möchtest du diesen Reiter wirklich schließen?", + "gui_close_tab_warning_share_description": "Du versendest gerade Dateien. Möchtest du diesen Reiter wirklich schließen?", + "gui_close_tab_warning_persistent_description": "Dies ist ein dauerhafter Reiter. Wenn du ihn schließt, verlierst du die dazugehörige Onion-Adresse. Möchtest du den Reiter wirklich schließen?", + "gui_close_tab_warning_title": "Bist du sicher?", + "gui_new_tab_website_description": "Hoste eine statische HTML-Onion-Webseite auf deinem Computer.", + "gui_new_tab_website_button": "Webseite veröffentlichen", + "gui_new_tab_receive_description": "Verwandle deinen Computer in eine Online-Packstation. Nutzer des Tor Browsers können dir Dateien auf deinen Computer schicken.", + "gui_new_tab_receive_button": "Dateien empfangen", + "gui_new_tab_share_description": "Wähle Dateien auf deinem Computer, um sie jemand anderem zu schicken. Die Empfänger benötigen den Tor Browser, um die Dateien empfangen zu können.", + "gui_new_tab_share_button": "Dateien teilen", + "gui_new_tab_tooltip": "Einen neuen Reiter öffnen", + "gui_new_tab": "Neuer Reiter", + "gui_settings_website_label": "Webseiten-Einstellung", + "gui_settings_csp_header_disabled_option": "Content-Security-Policy-Header deaktivieren", + "gui_tab_name_website": "Webseite", + "gui_tab_name_chat": "Chat", + "gui_tab_name_receive": "Empfangen", + "gui_tab_name_share": "Teilen", + "gui_file_selection_remove_all": "Alle entfernen", + "gui_remove": "Entfernen", + "gui_new_tab_chat_button": "Anonym chatten", + "gui_qr_code_dialog_title": "OnionShare QR-Code", + "gui_show_qr_code": "QR-Code anzeigen", + "gui_chat_stop_server": "Chatserver stoppen", + "gui_chat_start_server": "Chatserver starten", + "gui_main_page_chat_button": "Chat starten", + "gui_main_page_website_button": "Webseiten-Freigabe starten", + "gui_main_page_receive_button": "Empfangsmodus starten", + "gui_main_page_share_button": "Freigabe starten", + "gui_open_folder_error": "Fehler beim Öffnen des Ordners mit xdg-open. Die Datei befindet sich hier: {}", + "gui_qr_code_description": "Scanne diesen QR-Code mit einem QR-Scanner, wie zB. mit der Kamera deines Smartphones, um die OnionShare-Adresse einfacher mit anderen zu teilen.", + "gui_receive_flatpak_data_dir": "Da OnionShare durch Flatpak installiert wurde, müssen Dateien im Verzeichnis ~/OnionShare gespeichert werden.", + "gui_chat_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann diesem Chatroom beitreten, indem er den Tor Browser benutzt: ", + "error_port_not_available": "OnionShare-Port nicht verfügbar", + "gui_rendezvous_cleanup": "Warte darauf, dass alle Tor-Verbindungen beendet wurden, um den vollständigen Dateitransfer sicherzustellen.\n\nDies kann einige Minuten dauern.", + "gui_rendezvous_cleanup_quit_early": "Vorzeitig beenden", + "gui_color_mode_changed_notice": "OnionShare neustarten um den neuen Farbmodus zu aktivieren.", + "history_receive_read_message_button": "Nachricht gelesen", + "mode_settings_receive_webhook_url_checkbox": "Benutze Benachrichtigungs-WebHook", + "mode_settings_receive_disable_files_checkbox": "Datei-Übermittlung deaktivieren", + "mode_settings_receive_disable_text_checkbox": "Text-Übermittlung deaktivieren", + "mode_settings_title_label": "Benutzerdefinierter Titel", + "gui_status_indicator_chat_started": "Chatted", + "gui_status_indicator_chat_scheduled": "Geplant…", + "gui_status_indicator_chat_working": "Startet…", + "gui_status_indicator_chat_stopped": "Bereit zum Chatten", + "gui_settings_theme_dark": "Dunkel", + "gui_settings_theme_light": "Hell", + "gui_settings_theme_auto": "Automatisch", + "gui_settings_theme_label": "Design", + "gui_client_auth_instructions": "Sende anschließend den privaten Schlüssel, um den Zugriff auf deinen OnionShare-Dienst zu ermöglichen:", + "gui_url_instructions_public_mode": "Sende die OnionShare-Adresse unten:", + "gui_url_instructions": "Sende zunächst die folgende OnionShare-Adresse:", + "gui_chat_url_public_description": "Jeder mit dieser OnionShare-Adresse kann diesem Chatroom beitreten, indem er den Tor Browser benutzt: ", + "gui_receive_url_public_description": "Jeder mit dieser OnionShare-Adresse kann mit dem Tor-Browser Dateien auf deinen Computer hochladen: ", + "gui_website_url_public_description": "Jeder mit dieser OnionShare-Adresse kann deine Webseite mit dem Tor Browser ansehen: ", + "gui_share_url_public_description": "Jeder mit dieser OnionShare-Adresse kann deine Dateien mit dem Tor Browser herunterladen: ", + "gui_server_doesnt_support_stealth": "Sorry, diese Version von Tor unterstützt keine Stealth (Client Authentication). Bitte versuche es mit einer neueren Version von Tor oder benutze den \"öffentlichen\" Modus, wenn es nicht privat sein muss.", + "gui_please_wait_no_button": "Starte…", + "gui_hide": "Ausblenden", + "gui_reveal": "Zeigen", + "gui_qr_label_auth_string_title": "Privater Schlüssel", + "gui_qr_label_url_title": "OnionShare-Adresse", + "gui_copied_client_auth": "Privater Schlüssel in die Zwischenablage kopiert", + "gui_copied_client_auth_title": "Privater Schlüssel kopiert", + "gui_copy_client_auth": "Privaten Schlüssel kopieren", + "gui_dragdrop_sandbox_flatpak": "Um die Flatpak Sandbox sicherer zu machen, wird Drag und Drop nicht unterstützt. Bitte nutze stattdessen die Buttons \"Dateien hinzufügen\" und \"Ordner hinzufügen\".", + "gui_tor_settings_window_title": "Tor Einstellungen", + "gui_settings_controller_extras_label": "Tor Einstellungen", + "gui_settings_bridge_use_checkbox": "Benutze eine Brigde", + "gui_settings_bridge_radio_builtin": "Wähle eine eingebaute Bridge", + "gui_settings_bridge_none_radio_option": "Keine Bridge verwenden", + "gui_settings_bridge_moat_button": "Neue Bridge verwenden", + "gui_settings_bridge_custom_placeholder": "Schreibe im Format adresse:port (eine pro Zeile)", + "gui_settings_moat_bridges_invalid": "Du hast noch keine Bridge von torproject.org angefragt.", + "gui_settings_stop_active_tabs_label": "Es laufen noch Services in deinen Tabs.\nDu musst alle Services beenden, bevor du die Tor Einstellungen ändern kannst.", + "gui_settings_version_label": "Du verwendest OnionShare {}", + "gui_settings_help_label": "Du benötigst Hilfe? Gehe zu docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Sende einen benutzerdefinierten Content Security Policy header", + "moat_contact_label": "Kontaktiere BridgeDB...", + "moat_captcha_label": "Löse das CAPTCHA um eine Bridge zu laden.", + "moat_captcha_placeholder": "Gib die Zeichen auf dem Bild ein", + "moat_captcha_submit": "Absenden", + "moat_captcha_reload": "Neu laden", + "moat_bridgedb_error": "Fehler beim kontaktieren der BridgeDB.", + "moat_captcha_error": "Die Lösung ist nicht korrekt. Bitte nochmal versuchen.", + "mode_tor_not_connected_label": "OnionShare ist nicht mit dem Tor Netzwerk verbunden", + "gui_settings_bridge_moat_radio_option": "Verwende eine Bridge von torproject.org", + "moat_solution_empty_error": "Du musst die Zeichen auf dem Bild eingeben", + "gui_settings_bridge_custom_radio_option": "Stelle eine Bridge aus einer dir bekannten vertraulichen Quelle bereit", + "gui_settings_tor_bridges_label": "Brigdes helfen dir das Tor Netzwerk an Orten zu verwenden, wo es blockiert wird. Je nachdem wo du bist, funktioniert eine Bridge besser als eine andere." +} diff --git a/desktop/onionshare/resources/locale/el.json b/desktop/onionshare/resources/locale/el.json new file mode 100644 index 00000000..d47d92d2 --- /dev/null +++ b/desktop/onionshare/resources/locale/el.json @@ -0,0 +1,338 @@ +{ + "config_onion_service": "Δημιουργία onion service στην πύλη {0:d}.", + "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_autostop_timer": "Τερματίστηκε λόγω αυτόματης διακοπής", + "closing_automatically": "Τερματίστηκε λόγω ολοκλήρωσης της λήψης", + "timeout_download_still_running": "Αναμονή ολοκλήρωσης της λήψης", + "large_filesize": "Προειδοποίηση: Η αποστολή μεγάλου όγκου δεδομένων μπορεί να διαρκέσει ώρες", + "systray_menu_exit": "Έξοδος", + "systray_download_started_title": "Η λήψη του OnionShare ξεκίνησε", + "systray_download_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να κατεβάζει τα αρχεία σου", + "systray_download_completed_title": "Η λήψη του OnionShare ολοκληρώθηκε", + "systray_download_completed_message": "Ο/η χρήστης/τρια ολοκλήρωσε την λήψη των αρχείων σου", + "systray_download_canceled_title": "Η λήψη του OnionShare ακυρώθηκε", + "systray_download_canceled_message": "Ο/η χρήστης/τρια ακύρωσε τη λήψη", + "systray_upload_started_title": "Η λήψη του OnionShare ξεκίνησε", + "systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου", + "help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)", + "help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά την αποστολή των αρχείων", + "help_autostop_timer": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων", + "help_stealth": "Κάντε χρήση εξουσιοδότησης πελάτη (Για προχωρημένους)", + "help_receive": "Λάβετε διαμοιρασμένα αρχεία αντι να τα στέλνετε", + "help_verbose": "Κατέγραψε τα σφάλματα του OnionShare στο stdout (συνήθως οθόνη) και τα σφάλματα web στον δίσκο", + "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_autostop_timer": "Διακοπή διαμοιρασμού ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", + "gui_receive_start_server": "Εκκίνηση λειτουργίας λήψης", + "gui_receive_stop_server": "Τερματισμός λειτουργίας λήψης", + "gui_receive_stop_server_autostop_timer": "Διακοπή λειτουργίας λήψης (απομένουν {})", + "gui_receive_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", + "gui_copy_url": "Αντιγραφή διεύθυνσης", + "gui_copy_hidservauth": "Αντιγραφή HidServAuth", + "gui_downloads": "Ιστορικό Λήψεων", + "gui_no_downloads": "Καμία λήψη ως τώρα", + "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": "%p%, {0:s} πέρασαν.", + "gui_download_upload_progress_starting": "{0:s}, %p% (υπολογισμός)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "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": "Ακύρωση", + "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": "Έχοντας αποθηκεύσει το ιδιωτικό σας κλειδί για επαναχρησιμοποίηση, μπορείτε πλέον να επιλέξετε την αντιγραφή του HidServAuth σας.", + "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_sharing_label": "Ρυθμίσεις κοινοποίησης", + "gui_settings_close_after_first_download_option": "Τερματισμός κοινοποίησης αρχείων μετά την αποστολή τους", + "gui_settings_connection_type_label": "Πώς να συνδέεται το OnionShare με το Tor;", + "gui_settings_connection_type_bundled_option": "Χρησιμοποιήστε την έκδοση του Tor που είναι ενσωματωμένη στο OnionShare", + "gui_settings_connection_type_automatic_option": "Προσπάθεια αυτόματης παραμετροποίησης με τον Tor Browser", + "gui_settings_connection_type_control_port_option": "Σύνδεση μέσω θύρας ελέγχου", + "gui_settings_connection_type_socket_file_option": "Σύνδεση μέσω αρχείου μετάβασης", + "gui_settings_connection_type_test_button": "Έλεγχος σύνδεσης με το Tor", + "gui_settings_control_port_label": "Πύλη ελέγχου", + "gui_settings_socket_file_label": "Αρχείο μετάβασης", + "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;", + "gui_settings_tor_bridges_no_bridges_radio_option": "Να μη χρησιμοποιηθούν γέφυρες", + "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": "Προσοχή: Οι γέφυρες meek_azure επιβαρύνουν τη λειτουργία του Tor Project.

Χρησιμοποιήστε τες μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών γεφυρών.", + "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων γεφυρών", + "gui_settings_tor_bridges_custom_label": "Αποκτήστε γέφυρες στο https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Καμία γέφυρα που προσθέσατε δεν λειτουργεί. Ελέγξτε ξανά ή προσθέστε άλλες.", + "gui_settings_button_save": "Αποθήκευση", + "gui_settings_button_cancel": "Άκυρο", + "gui_settings_button_help": "Βοήθεια", + "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 στις {}:{}.", + "settings_error_socket_file": "Δεν ήταν δυνατή η σύνδεση στον ελεγκτή Tor χρησιμοποιώντας το αρχείο socket {}.", + "settings_error_auth": "Εγινε σύνδεση με {}:{}, αλλα δεν μπορεί να γίνει πιστοποίηση. Ίσως δεν είναι ελεγκτής Tor;", + "settings_error_missing_password": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.", + "settings_error_unreadable_cookie_file": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλα ο κωδικός ενδέχεται να είναι λανθασμένος, ή δεν σας επιτρέπεται να διαβάζετε αρχεία cookie.", + "settings_error_bundled_tor_not_supported": "Η χρήση της έκδοσης Tor που περιέχεται στο OnionShare δεν είναι συμβατή με το περιβάλλον προγραμματιστή σε Windows ή macOS.", + "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor καθυστερεί αρκετά. Ίσως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι του συστήματος δεν είναι ρυθμισμένο σωστά;", + "settings_error_bundled_tor_broken": "Το OnionShare δεν μπορεί να συνδεθεί με το Tor στο παρασκήνιο:\n{}", + "settings_test_success": "Εγινε σύνδεση με τον ελεγκτή Tor.\n\nΕκδοση Tor: {}\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": "Υπάρχει διαθέσιμη ενημέρωση. Κάντε κλικ εδώ για να την αποκτήσετε.

Χρησιμοποιείτε την έκδοση {}, ενώ η πιο πρόσφατη είναι η {}.", + "update_error_check_error": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: ίσως δεν είστε συνδεδεμένος στο Tor ή ο ιστότοπος OnionShare είναι εκτός λειτουργίας;", + "update_error_invalid_latest_version": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: η ιστοσελίδα 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_autostop_timer": "Το χρονόμετρο αυτόματης διακοπής τελείωσε πριν την εκκίνηση του server. Παρακαλώ κάντε ένα νέο διαμοιρασμό.", + "gui_server_autostop_timer_expired": "Το χρονόμετρο αυτόματης διακοπής έχει ήδη τελειώσει. Παρακαλώ ρυθμίστε το για να ξεκινήσετε το διαμοιρασμό.", + "share_via_onionshare": "Μοιραστείτε μέσω OnionShare", + "gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης", + "gui_share_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", + "gui_receive_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να ανεβάσει αρχεία στον υπολογιστή σας χρησιμοποιώντας το Tor Browser: ", + "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": "{} ολοκληρώθηκε", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Δημόσια λειτουργία", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Η σελίδα φορτώθηκε", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "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 για να εφαρμοστεί η αλλαγή γλώσσας.", + "timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος", + "gui_add_files": "Προσθήκη αρχείων", + "gui_add_folder": "Προσθήκη φακέλου", + "gui_connect_to_tor_for_onion_settings": "Συνδεθείτε στο Tor για να δείτε τις ρυθμίσεις της υπηρεσίας 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_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_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": "Δεν έχουν αποσταλεί ακόμα αρχεία", + "gui_share_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της αποστολής", + "gui_receive_mode_no_files": "Δεν έχει γίνει λήψη αρχείων ακόμα", + "gui_receive_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της λήψης", + "gui_settings_onion_label": "Ρυθμίσεις Onion", + "gui_all_modes_transfer_canceled_range": "Ακυρώθηκε {} - {}", + "gui_all_modes_transfer_canceled": "Ακυρώθηκε {}", + "gui_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματης διακοπής λήγει σε {}", + "gui_start_server_autostart_timer_tooltip": "Το χρονόμετρο αυτόματης εκκίνησης λήγει σε {}", + "gui_waiting_to_start": "Προγραμματισμένο να ξεκινήσει σε {}. Κάντε κλικ για ακύρωση.", + "gui_settings_autostart_timer_checkbox": "Χρήση χρονομέτρου αυτόματης έναρξης", + "gui_settings_autostart_timer": "Εκκίνηση διαμοιρασμού σε:", + "gui_server_autostart_timer_expired": "Η προγραμματισμένη ώρα έχει ήδη παρέλθει. Παρακαλώ ρυθμίστε τη για να ξεκινήσετε το διαμοιρασμό.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Η ώρα αυτόματης διακοπής δεν μπορεί να είναι ίδια ή νωρίτερα από την ώρα έναρξης. Παρακαλούμε ρυθμίστε τη για έναρξη του διαμοιρασμού.", + "gui_status_indicator_share_scheduled": "Δρομολόγηση…", + "gui_status_indicator_receive_scheduled": "Προγραμματισμένο…", + "days_first_letter": "ημ", + "hours_first_letter": "ώ", + "minutes_first_letter": "λ", + "seconds_first_letter": "δ", + "gui_website_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να επισκεφτεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", + "gui_mode_website_button": "Δημοσίευση ιστοσελίδας", + "gui_website_mode_no_files": "Δεν έχει γίνει διαμοιρασμός ιστοσελίδας ακόμα", + "incorrect_password": "Λάθος κωδικός", + "gui_settings_individual_downloads_label": "Απεπιλέξτε για να επιτρέψετε τη λήψη μεμονωμένων αρχείων", + "history_requests_tooltip": "{} αιτήματα δικτύου", + "gui_settings_csp_header_disabled_option": "Απενεργοποίηση της κεφαλίδας Content Security Policy", + "gui_settings_website_label": "Ρυθμίσεις ιστοσελίδας", + "gui_open_folder_error": "Το άνοιγμα του φακέλου με xdg-open απέτυχε. Το αρχείο βρίσκετε : {}", + "gui_receive_flatpak_data_dir": "Επειδή έχετε εγκαταστήσει το OnionShare μέσω Flatpak, θα πρέπει να αποθηκεύσετε τα αρχεία μέσα σε έναν φάκελο στο ~/OnionShare.", + "gui_chat_stop_server": "Τερματισμός διακομιστή συνομιλίας", + "gui_chat_start_server": "Έναρξη διακομιστή συνομιλίας", + "mode_settings_website_disable_csp_checkbox": "Μην στέλνετε την προεπιλεγμένη κεφαλίδα Πολιτικής Ασφάλειας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)", + "mode_settings_receive_data_dir_browse_button": "Επιλογή", + "mode_settings_receive_data_dir_label": "Αποθήκευση αρχείων σε", + "mode_settings_share_autostop_sharing_checkbox": "Τερματισμός κοινής χρήσης με την ολοκλήρωση αρχείων (αποεπιλέξτε για λήψη μεμονωμένων αρχείων)", + "mode_settings_legacy_checkbox": "Χρήση παλαιάς διεύθυνσης (δεν προτείνεται η χρήση υπηρεσία v2 onion)", + "mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός", + "mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση", + "mode_settings_public_checkbox": "Δημόσια υπηρεσία OnionShare (απενεργοποιεί το ιδιωτικό κλειδί)", + "mode_settings_persistent_checkbox": "Αποθήκευση της καρτέλας και αυτόματο άνοιγμά της με την έναρξη του OnionShare", + "mode_settings_advanced_toggle_hide": "Απόκρυψη προχωρημένων ρυθμίσεων", + "mode_settings_advanced_toggle_show": "Εμφάνιση προχωρημένων ρυθμίσεων", + "gui_quit_warning_cancel": "Άκυρο", + "gui_quit_warning_description": "Είναι ενεργή η κοινή χρήση σε ορισμένες καρτέλες. Εάν κάνετε έξοδο, όλες οι καρτέλες σας θα κλείσουν. Είστε σίγουρος/η;", + "gui_quit_warning_title": "Είστε σίγουρος/η;", + "gui_close_tab_warning_cancel": "Άκυρο", + "gui_close_tab_warning_close": "Κλείσιμο", + "gui_close_tab_warning_website_description": "Φιλοξενείτε έναν ιστότοπο. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", + "gui_close_tab_warning_receive_description": "Η λήψη αρχείων δεν έχει ολοκληρωθεί. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", + "gui_close_tab_warning_share_description": "Η αποστολή αρχείων δεν έχει ολοκληρωθεί ακόμα. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", + "gui_close_tab_warning_persistent_description": "Η καρτέλα δεν είναι μόνιμη. Εάν την κλείσετε, θα χαθεί η διεύθυνση onion που χρησιμοποιείτε. Είστε βέβαιοι ότι θέλετε να την κλείσετε;", + "gui_close_tab_warning_title": "Είστε σίγουρος/η;", + "gui_tab_name_chat": "Συνομιλία", + "gui_tab_name_website": "Ιστότοπος", + "gui_tab_name_receive": "Λήψη", + "gui_tab_name_share": "Κοινοποίηση", + "gui_main_page_chat_button": "Έναρξη συνομιλίας", + "gui_main_page_website_button": "Έναρξη φιλοξενίας", + "gui_main_page_receive_button": "Έναρξη λήψης", + "gui_main_page_share_button": "Έναρξη διαμοιρασμού", + "gui_new_tab_chat_button": "Συνομιλήστε ανώνυμα", + "gui_new_tab_website_button": "Φιλοξενία ιστότοπου", + "gui_new_tab_receive_button": "Λήψη αρχείων", + "gui_new_tab_share_button": "Διαμοιρασμός αρχείων", + "gui_new_tab_tooltip": "Άνοιγμα νέας καρτέλας", + "gui_new_tab": "Νέα καρτέλα", + "gui_qr_code_dialog_title": "Κώδικας QR OnionShare", + "gui_show_qr_code": "Προβολή κώδικα QR", + "gui_file_selection_remove_all": "Αφαίρεση όλων", + "gui_remove": "Αφαίρεση", + "error_port_not_available": "Η θύρα OnionShare δεν είναι διαθέσιμη", + "gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος", + "gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.", + "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", + "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα.", + "history_receive_read_message_button": "Ανάγνωση μηνύματος", + "mode_settings_receive_webhook_url_checkbox": "Χρήση ειδοποίησης webhook", + "mode_settings_receive_disable_files_checkbox": "Απενεργοποίηση της μεταφόρτωσης αρχείων", + "mode_settings_receive_disable_text_checkbox": "Απενεργοποίηση υποβολής κειμένου", + "mode_settings_title_label": "Προσαρμοσμένος τίτλος", + "gui_status_indicator_chat_started": "Σε συνομιλία", + "gui_status_indicator_chat_scheduled": "Δρομολόγηση…", + "gui_status_indicator_chat_working": "Εκκίνηση…", + "gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία", + "gui_copied_client_auth_title": "Το ιδιωτικό κλειδί αντιγράφηκε", + "gui_qr_label_url_title": "Διεύθυνση OnionShare", + "gui_reveal": "Εμφάνιση", + "gui_hide": "Απόκρυψη", + "gui_share_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", + "gui_website_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να επισκεφθεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", + "gui_chat_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", + "gui_url_instructions_public_mode": "Στείλτε την παρακάτω διεύθυνση OnionShare:", + "gui_settings_theme_label": "Θέμα", + "gui_copy_client_auth": "Αντιγραφή ιδιωτικού κλειδιού", + "gui_copied_client_auth": "Το ιδιωτικό κλειδί αντιγράφηκε στο πρόχειρο", + "gui_qr_label_auth_string_title": "Ιδιωτικό κλειδί", + "gui_please_wait_no_button": "Εκκίνηση…", + "gui_server_doesnt_support_stealth": "Αυτή η έκδοση Tor, δεν υποστηρίζει το stealth (πιστοποίηση πελάτη). Παρακαλούμε δοκιμάστε με μια νεότερη έκδοση του Tor ή χρησιμοποιήστε τη λειτουργία 'δημόσιο' αν δεν χρειάζεται να είναι ιδιωτική.", + "gui_receive_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να ανεβάσει αρχεία στον υπολογιστή σας, χρησιμοποιώντας το Tor Browser: ", + "gui_settings_theme_auto": "Αυτόματο", + "gui_settings_theme_dark": "Σκοτεινό", + "gui_url_instructions": "Αρχικά, στείλτε την παρακάτω διεύθυνση OnionShare:", + "gui_settings_theme_light": "Φωτεινό", + "gui_client_auth_instructions": "Στη συνέχεια, στείλτε το ιδιωτικό κλειδί για πρόσβαση στην υπηρεσία OnionShare:", + "gui_dragdrop_sandbox_flatpak": "Για να γίνει πιο ασφαλές το sandbox του Flatpak, δεν υποστηρίζεται η μεταφορά και απόθεση. Χρησιμοποιήστε τα κουμπιά Προσθήκη αρχείων και Προσθήκη φακέλου για να αναζητήσετε αρχεία.", + "moat_captcha_label": "Λύστε το CAPTCHA για να αιτηθείτε μια γέφυρα.", + "gui_settings_tor_bridges_label": "Οι γέφυρες σας βοηθούν να αποκτήσετε πρόσβαση στο δίκτυο Tor σε τοποθεσίες όπου είναι αποκλεισμένο. Ανάλογα με το πού βρίσκεστε, μια γέφυρα μπορεί να λειτουργεί καλύτερα από μια άλλη.", + "moat_captcha_submit": "Υποβολή", + "moat_solution_empty_error": "Πρέπει να εισαγάγετε τους χαρακτήρες από την εικόνα", + "moat_contact_label": "Επικοινωνία με BridgeDB...", + "gui_tor_settings_window_title": "Ρυθμίσεις Tor", + "gui_settings_controller_extras_label": "Ρυθμίσεις Tor", + "gui_settings_bridge_use_checkbox": "Χρήση γέφυρας", + "gui_settings_bridge_radio_builtin": "Επιλέξτε μια ενσωματωμένη γέφυρα", + "gui_settings_bridge_none_radio_option": "Χωρίς χρήση γέφυρας", + "gui_settings_bridge_moat_radio_option": "Αιτηθείτε μια γέφυρα από torproject.org", + "gui_settings_bridge_moat_button": "Αίτημα για νέα γέφυρα", + "gui_settings_bridge_custom_radio_option": "Προτείνετε μια γέφυρα για την οποία ενημερωθήκατε από αξιόπιστη πηγή", + "gui_settings_bridge_custom_placeholder": "πληκτρολογήστε διεύθυνση: πόρτα (μια ανά γραμμή)", + "gui_settings_moat_bridges_invalid": "Δεν έχετε αιτηθεί ακόμα γέφυρα από το torproject.org.", + "gui_settings_stop_active_tabs_label": "Υπάρχουν υπηρεσίες που εκτελούνται σε ορισμένες από τις καρτέλες σας.\nΠρέπει να σταματήσετε όλες τις υπηρεσίες για να αλλάξετε τις ρυθμίσεις του Tor.", + "gui_settings_version_label": "Χρησιμοποιείτε το OnionShare {}", + "gui_settings_help_label": "Χρειάζεστε βοήθεια; Δείτε το docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Αποστολή προσαρμοσμένης κεφαλίδας Πολιτικής Ασφαλείας Περιεχομένου", + "moat_captcha_placeholder": "Εισαγάγετε τους χαρακτήρες από την εικόνα", + "moat_captcha_reload": "Επαναφόρτωση", + "moat_bridgedb_error": "Σφάλμα επικοινωνίας με BridgeDB.", + "moat_captcha_error": "Η λύση δεν είναι σωστή. Παρακαλούμε δοκιμάστε ξανά.", + "mode_tor_not_connected_label": "Το OnionShare δεν είναι συνδεδεμένο με το δίκτυο Tor" +} diff --git a/desktop/onionshare/resources/locale/en.json b/desktop/onionshare/resources/locale/en.json new file mode 100644 index 00000000..f8c4cd2b --- /dev/null +++ b/desktop/onionshare/resources/locale/en.json @@ -0,0 +1,236 @@ +{ + "not_a_readable_file": "{0:s} is not a readable file.", + "other_page_loaded": "Address loaded", + "incorrect_password": "Incorrect password", + "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", + "gui_drag_and_drop": "Drag and drop files and folders to start sharing", + "gui_add": "Add", + "gui_add_files": "Add Files", + "gui_add_folder": "Add Folder", + "gui_remove": "Remove", + "gui_dragdrop_sandbox_flatpak": "To make the Flatpak sandbox more secure, drag and drop is not supported. Use the Add Files and Add Folder buttons to browse for files instead.", + "gui_file_selection_remove_all": "Remove All", + "gui_choose_items": "Choose", + "gui_share_start_server": "Start sharing", + "gui_share_stop_server": "Stop sharing", + "gui_share_stop_server_autostop_timer": "Stop Sharing ({})", + "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 {}", + "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 ({} remaining)", + "gui_receive_flatpak_data_dir": "Because you installed OnionShare using Flatpak, you must save files to a folder in ~/OnionShare.", + "gui_copy_url": "Copy Address", + "gui_copy_client_auth": "Copy Private Key", + "gui_canceled": "Canceled", + "gui_copied_url_title": "Copied OnionShare Address", + "gui_copied_url": "OnionShare address copied to clipboard", + "gui_copied_client_auth_title": "Copied Private Key", + "gui_copied_client_auth": "Private Key copied to clipboard", + "gui_show_qr_code": "Show QR Code", + "gui_qr_code_dialog_title": "OnionShare QR Code", + "gui_qr_label_url_title": "OnionShare Address", + "gui_qr_label_auth_string_title": "Private Key", + "gui_reveal": "Reveal", + "gui_hide": "Hide", + "gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.", + "gui_please_wait_no_button": "Starting…", + "gui_please_wait": "Starting… Click to cancel.", + "zip_progress_bar_format": "Compressing: %p%", + "gui_tor_settings_window_title": "Tor Settings", + "gui_settings_window_title": "Settings", + "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_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", + "gui_settings_controller_extras_label": "Tor settings", + "gui_settings_connection_type_control_port_option": "Connect using control port", + "gui_settings_connection_type_socket_file_option": "Connect using socket file", + "gui_settings_connection_type_test_button": "Test Connection to Tor", + "gui_settings_control_port_label": "Control port", + "gui_settings_socket_file_label": "Socket file", + "gui_settings_socks_label": "SOCKS port", + "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", + "gui_settings_authenticate_password_option": "Password", + "gui_settings_password_label": "Password", + "gui_settings_tor_bridges": "Connect using a Tor bridge?", + "gui_settings_tor_bridges_label": "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.", + "gui_settings_bridge_use_checkbox": "Use a bridge", + "gui_settings_bridge_radio_builtin": "Select a built-in bridge", + "gui_settings_bridge_none_radio_option": "Don't use a bridge", + "gui_settings_meek_lite_expensive_warning": "Warning: The meek-azure 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_bridge_moat_radio_option": "Request a bridge from torproject.org", + "gui_settings_bridge_moat_button": "Request a New Bridge", + "gui_settings_bridge_custom_radio_option": "Provide a bridge you learned about from a trusted source", + "gui_settings_bridge_custom_placeholder": "type address:port (one per line)", + "gui_settings_moat_bridges_invalid": "You have not requested a bridge from torproject.org yet.", + "gui_settings_tor_bridges_invalid": "None of the bridges you added work. Double-check them or add others.", + "gui_settings_stop_active_tabs_label": "There are services running in some of your tabs.\nYou must stop all services to change your Tor settings.", + "gui_settings_button_save": "Save", + "gui_settings_button_cancel": "Cancel", + "gui_settings_button_help": "Help", + "gui_settings_version_label": "You are using OnionShare {}", + "gui_settings_help_label": "Need help? See docs.onionshare.org", + "settings_test_success": "Connected to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}.\nSupports client authentication: {}.\nSupports next-gen .onion addresses: {}.", + "connecting_to_tor": "Connecting to the Tor network", + "update_available": "New OnionShare out. Click here to get it.

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 '{}'…", + "update_error_check_error": "Could not check for new version: Maybe you're not connected to Tor, or the OnionShare website is down?", + "update_not_available": "You are running the latest OnionShare.", + "gui_tor_connection_ask": "Open the settings to sort out connection to Tor?", + "gui_tor_connection_ask_open_settings": "Yes", + "gui_tor_connection_ask_quit": "Quit", + "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\nMake sure 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_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 adjust it to start sharing.", + "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.", + "gui_server_doesnt_support_stealth": "Sorry, this version of Tor doesn't support stealth (Client Authentication). Please try with a newer version of Tor, or use 'public' mode if it doesn't need to be private.", + "share_via_onionshare": "Share via OnionShare", + "gui_share_url_description": "Anyone with this OnionShare address and private key can download your files using the Tor Browser: ", + "gui_share_url_public_description": "Anyone with this OnionShare address can download your files using the Tor Browser: ", + "gui_website_url_description": "Anyone with this OnionShare address and private key can visit your website using the Tor Browser: ", + "gui_website_url_public_description": "Anyone with this OnionShare address can visit your website using the Tor Browser: ", + "gui_receive_url_description": "Anyone with this OnionShare address and private key can upload files to your computer using the Tor Browser: ", + "gui_receive_url_public_description": "Anyone with this OnionShare address can upload files to your computer using the Tor Browser: ", + "gui_chat_url_description": "Anyone with this OnionShare address and private key can join this chat room using the Tor Browser: ", + "gui_chat_url_public_description": "Anyone with this OnionShare address can join this chat room using the Tor Browser: ", + "gui_url_label_persistent": "This share will not auto-stop.

Every subsequent share reuses the address. (To use one-time addresses, turn off \"Use persistent address\" in the settings.)", + "gui_url_label_stay_open": "This share will not auto-stop.", + "gui_url_label_onetime": "This share will stop after first completion.", + "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_url_instructions": "First, send the OnionShare address below:", + "gui_url_instructions_public_mode": "Send the OnionShare address below:", + "gui_client_auth_instructions": "Next, send the private key to allow access to your OnionShare service:", + "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_status_indicator_chat_stopped": "Ready to chat", + "gui_status_indicator_chat_working": "Starting…", + "gui_status_indicator_chat_scheduled": "Scheduled…", + "gui_status_indicator_chat_started": "Chatting", + "gui_file_info": "{} files, {}", + "gui_file_info_single": "{} file, {}", + "history_in_progress_tooltip": "{} in progress", + "history_completed_tooltip": "{} completed", + "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.

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.", + "gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}", + "gui_settings_language_label": "Language", + "gui_settings_theme_label": "Theme", + "gui_settings_theme_auto": "Auto", + "gui_settings_theme_light": "Light", + "gui_settings_theme_dark": "Dark", + "gui_settings_language_changed_notice": "Restart OnionShare for the new language to be applied.", + "gui_color_mode_changed_notice": "Restart OnionShare for the new color mode to be applied.", + "systray_menu_exit": "Quit", + "systray_page_loaded_title": "Page Loaded", + "systray_page_loaded_message": "OnionShare address loaded", + "systray_share_started_title": "Sharing Started", + "systray_share_started_message": "Starting to send files to someone", + "systray_share_completed_title": "Sharing Complete", + "systray_share_completed_message": "Finished sending files", + "systray_share_canceled_title": "Sharing Canceled", + "systray_share_canceled_message": "Someone canceled receiving your files", + "systray_receive_started_title": "Receiving Started", + "systray_receive_started_message": "Someone is sending files to you", + "gui_all_modes_history": "History", + "gui_all_modes_clear_history": "Clear All", + "gui_all_modes_transfer_started": "Started {}", + "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%", + "gui_share_mode_no_files": "No Files Sent Yet", + "gui_share_mode_autostop_timer_waiting": "Waiting to finish sending", + "gui_website_mode_no_files": "No Website Shared Yet", + "gui_receive_mode_no_files": "No Files Received Yet", + "gui_receive_mode_autostop_timer_waiting": "Waiting to finish receiving", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_new_tab": "New Tab", + "gui_new_tab_tooltip": "Open a new tab", + "gui_new_tab_share_button": "Share Files", + "gui_new_tab_receive_button": "Receive Files", + "gui_new_tab_website_button": "Host a Website", + "gui_new_tab_chat_button": "Chat Anonymously", + "gui_main_page_share_button": "Start Sharing", + "gui_main_page_receive_button": "Start Receiving", + "gui_main_page_website_button": "Start Hosting", + "gui_main_page_chat_button": "Start Chatting", + "gui_tab_name_share": "Share", + "gui_tab_name_receive": "Receive", + "gui_tab_name_website": "Website", + "gui_tab_name_chat": "Chat", + "gui_close_tab_warning_title": "Are you sure?", + "gui_close_tab_warning_persistent_description": "This tab is persistent. If you close it you'll lose the onion address that it's using. Are you sure you want to close it?", + "gui_close_tab_warning_share_description": "You're in the process of sending files. Are you sure you want to close this tab?", + "gui_close_tab_warning_receive_description": "You're in the process of receiving files. Are you sure you want to close this tab?", + "gui_close_tab_warning_website_description": "You're actively hosting a website. Are you sure you want to close this tab?", + "gui_close_tab_warning_close": "Close", + "gui_close_tab_warning_cancel": "Cancel", + "gui_quit_warning_title": "Are you sure?", + "gui_quit_warning_description": "Sharing is active in some of your tabs. If you quit, all of your tabs will close. Are you sure you want to quit?", + "gui_quit_warning_quit": "Quit", + "gui_quit_warning_cancel": "Cancel", + "mode_settings_advanced_toggle_show": "Show advanced settings", + "mode_settings_advanced_toggle_hide": "Hide advanced settings", + "mode_settings_title_label": "Custom title", + "mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare", + "mode_settings_public_checkbox": "This is a public OnionShare service (disables private key)", + "mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time", + "mode_settings_autostop_timer_checkbox": "Stop onion service at scheduled time", + "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_receive_disable_text_checkbox": "Disable submitting text", + "mode_settings_receive_disable_files_checkbox": "Disable uploading files", + "mode_settings_receive_webhook_url_checkbox": "Use notification webhook", + "mode_settings_website_disable_csp_checkbox": "Don't send default Content Security Policy header (allows your website to use third-party resources)", + "mode_settings_website_custom_csp_checkbox": "Send a custom Content Security Policy header", + "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 {}", + "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{}", + "gui_rendezvous_cleanup": "Waiting for Tor circuits to close to be sure your files have successfully transferred.\n\nThis might take a few minutes.", + "gui_rendezvous_cleanup_quit_early": "Quit Early", + "error_port_not_available": "OnionShare port not available", + "history_receive_read_message_button": "Read Message", + "error_tor_protocol_error": "There was an error with Tor: {}", + "moat_contact_label": "Contacting BridgeDB...", + "moat_captcha_label": "Solve the CAPTCHA to request a bridge.", + "moat_captcha_placeholder": "Enter the characters from the image", + "moat_captcha_submit": "Submit", + "moat_captcha_reload": "Reload", + "moat_bridgedb_error": "Error contacting BridgeDB.", + "moat_captcha_error": "The solution is not correct. Please try again.", + "moat_solution_empty_error": "You must enter the characters from the image", + "mode_tor_not_connected_label": "OnionShare is not connected to the Tor network" +} diff --git a/desktop/onionshare/resources/locale/enm.json b/desktop/onionshare/resources/locale/enm.json new file mode 100644 index 00000000..7db75f7d --- /dev/null +++ b/desktop/onionshare/resources/locale/enm.json @@ -0,0 +1,219 @@ +{ + "not_a_readable_file": "", + "other_page_loaded": "", + "incorrect_password": "", + "close_on_autostop_timer": "", + "closing_automatically": "", + "large_filesize": "", + "gui_drag_and_drop": "", + "gui_add": "", + "gui_add_files": "", + "gui_add_folder": "", + "gui_remove": "", + "gui_file_selection_remove_all": "", + "gui_choose_items": "", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "gui_share_stop_server_autostop_timer": "", + "gui_chat_start_server": "", + "gui_chat_stop_server": "", + "gui_stop_server_autostop_timer_tooltip": "", + "gui_start_server_autostart_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_flatpak_data_dir": "", + "gui_copy_url": "", + "gui_copy_client_auth": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_copied_client_auth_title": "", + "gui_copied_client_auth": "", + "gui_show_qr_code": "", + "gui_qr_code_dialog_title": "", + "gui_qr_label_url_title": "", + "gui_qr_label_auth_string_title": "", + "gui_reveal": "", + "gui_hide": "", + "gui_waiting_to_start": "", + "gui_please_wait_no_button": "", + "gui_please_wait": "", + "zip_progress_bar_format": "", + "gui_settings_window_title": "", + "gui_settings_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "", + "gui_settings_autoupdate_check_button": "", + "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": "", + "settings_test_success": "", + "connecting_to_tor": "", + "update_available": "", + "update_error_invalid_latest_version": "", + "update_error_check_error": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "gui_server_autostart_timer_expired": "", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", + "gui_server_doesnt_support_stealth": "", + "share_via_onionshare": "", + "gui_share_url_description": "", + "gui_share_url_public_description": "", + "gui_website_url_description": "", + "gui_website_url_public_description": "", + "gui_receive_url_description": "", + "gui_receive_url_public_description": "", + "gui_chat_url_description": "", + "gui_chat_url_public_description": "", + "gui_url_label_persistent": "", + "gui_url_label_stay_open": "", + "gui_url_label_onetime": "", + "gui_url_label_onetime_and_persistent": "", + "gui_url_instructions": "", + "gui_url_instructions_public_mode": "", + "gui_client_auth_instructions": "", + "gui_status_indicator_share_stopped": "", + "gui_status_indicator_share_working": "", + "gui_status_indicator_share_scheduled": "", + "gui_status_indicator_share_started": "", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_scheduled": "", + "gui_status_indicator_receive_started": "", + "gui_status_indicator_chat_stopped": "", + "gui_status_indicator_chat_working": "", + "gui_status_indicator_chat_scheduled": "", + "gui_status_indicator_chat_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "history_requests_tooltip": "", + "error_cannot_create_data_dir": "", + "gui_receive_mode_warning": "", + "gui_open_folder_error": "", + "gui_settings_language_label": "", + "gui_settings_theme_label": "", + "gui_settings_theme_auto": "", + "gui_settings_theme_light": "", + "gui_settings_theme_dark": "", + "gui_settings_language_changed_notice": "", + "gui_color_mode_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_progress_complete": "", + "gui_all_modes_progress_starting": "", + "gui_all_modes_progress_eta": "", + "gui_share_mode_no_files": "", + "gui_share_mode_autostop_timer_waiting": "", + "gui_website_mode_no_files": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "", + "days_first_letter": "", + "hours_first_letter": "", + "minutes_first_letter": "", + "seconds_first_letter": "", + "gui_new_tab": "", + "gui_new_tab_tooltip": "", + "gui_new_tab_share_button": "", + "gui_new_tab_receive_button": "", + "gui_new_tab_website_button": "", + "gui_new_tab_chat_button": "", + "gui_main_page_share_button": "", + "gui_main_page_receive_button": "", + "gui_main_page_website_button": "", + "gui_main_page_chat_button": "", + "gui_tab_name_share": "", + "gui_tab_name_receive": "", + "gui_tab_name_website": "", + "gui_tab_name_chat": "", + "gui_close_tab_warning_title": "", + "gui_close_tab_warning_persistent_description": "", + "gui_close_tab_warning_share_description": "", + "gui_close_tab_warning_receive_description": "", + "gui_close_tab_warning_website_description": "", + "gui_close_tab_warning_close": "", + "gui_close_tab_warning_cancel": "", + "gui_quit_warning_title": "", + "gui_quit_warning_description": "", + "gui_quit_warning_quit": "", + "gui_quit_warning_cancel": "", + "mode_settings_advanced_toggle_show": "", + "mode_settings_advanced_toggle_hide": "", + "mode_settings_title_label": "", + "mode_settings_persistent_checkbox": "", + "mode_settings_public_checkbox": "", + "mode_settings_autostart_timer_checkbox": "", + "mode_settings_autostop_timer_checkbox": "", + "mode_settings_share_autostop_sharing_checkbox": "", + "mode_settings_receive_data_dir_label": "", + "mode_settings_receive_data_dir_browse_button": "", + "mode_settings_receive_disable_text_checkbox": "", + "mode_settings_receive_disable_files_checkbox": "", + "mode_settings_receive_webhook_url_checkbox": "", + "mode_settings_website_disable_csp_checkbox": "", + "gui_all_modes_transfer_finished_range": "", + "gui_all_modes_transfer_finished": "", + "gui_all_modes_transfer_canceled_range": "", + "gui_all_modes_transfer_canceled": "", + "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": "", + "gui_rendezvous_cleanup": "", + "gui_rendezvous_cleanup_quit_early": "", + "error_port_not_available": "", + "history_receive_read_message_button": "", + "error_tor_protocol_error": "" +} diff --git a/desktop/onionshare/resources/locale/eo.json b/desktop/onionshare/resources/locale/eo.json new file mode 100644 index 00000000..9f450275 --- /dev/null +++ b/desktop/onionshare/resources/locale/eo.json @@ -0,0 +1,60 @@ +{ + "config_onion_service": "Agordas onion service je pordo {0:d}.", + "preparing_files": "Preparas dosierojn por kundivido.", + "give_this_url": "Donu ĉi tiun URL al la persono al kiu vi sendas la dosieron:", + "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", + "ctrlc_to_stop": "Presu Ctrl-C por halti la servilon", + "not_a_file": "{0:s} ne estas dosiero.", + "other_page_loaded": "", + "closing_automatically": "Haltas aŭtomate ĉar la elŝuto finiĝis", + "large_filesize": "Atentigo: Sendado de grandaj dosieroj povas daŭri horojn", + "help_local_only": "Ne strebu uzi tor: nur por evoluado", + "help_stay_open": "Lasu onion service funkcii post fino de elŝuto", + "help_stealth": "Create stealth onion service (advanced)", + "help_verbose": "Protokoli erarojn sur disko", + "help_filename": "Listo de dosieroj aŭ dosierujoj por kundividi", + "gui_drag_and_drop": "Ŝovu kaj metu\nla dosierojn ĉi tien", + "gui_add": "Aldoni", + "gui_delete": "Forviŝi", + "gui_choose_items": "Elekti", + "gui_share_start_server": "Komenci kundividon", + "gui_share_stop_server": "Ĉesigi kundividon", + "gui_copy_url": "Kopii URL", + "gui_downloads": "Elŝutoj:", + "gui_canceled": "Nuligita", + "gui_copied_url": "URL kopiita en tondujon", + "gui_please_wait": "Bonvolu atendi...", + "gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}", + "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "Onionshare {0:s} | https://onionshare.org/", + "gui_share_quit_warning": "Ĉu vi certas ke vi volas foriri?\nLa URL, kiun vi kundividas ne plu ekzistos.", + "gui_quit_warning_quit": "Foriri", + "gui_quit_warning_dont_quit": "Ne foriri", + "zip_progress_bar_format": "Compressing files: %p%", + "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare postulas almenaŭ Tor 0.2.7.1 kaj almenaŭ python3-stem 1.4.0.", + "gui_settings_window_title": "", + "gui_settings_connection_type_label": "Kiel OnionShare devus konektiĝi al Tor?", + "gui_settings_connection_type_automatic_option": "Provi aŭtomate agordi kun Tor Browser", + "gui_settings_connection_type_control_port_option": "Konekti per kontrolpordo", + "gui_settings_connection_type_socket_file_option": "Konekti per socket-dosiero", + "gui_settings_control_port_label": "Kontrolpordo", + "gui_settings_socket_file_label": "Socket-dosiero", + "gui_settings_authenticate_label": "Tor authentication options", + "gui_settings_authenticate_no_auth_option": "", + "gui_settings_authenticate_password_option": "Pasvorto", + "gui_settings_password_label": "Pasvorto", + "gui_settings_button_save": "Konservi", + "gui_settings_button_cancel": "Nuligi", + "settings_saved": "Agordoj konservitaj en {}", + "settings_error_unknown": "Ne eblas konektiĝi al Tor-kontrolilo, ĉar la agordoj ne havas sencon.", + "settings_error_automatic": "Ne eblas konektiĝi al Tor-kontrolilo. Ĉu Tor Browser funkcias en la fono? Se vi ne havas ĝin, vi povas ekhavi ĝin je:\nhttps://www.torproject.org/.", + "settings_error_socket_port": "Ne eblas konektiĝi al Tor-kontrolilo je {}:{}.", + "settings_error_socket_file": "Ne eblas konektiĝi al Tor-kontrolilo per socket-dosiero {}.", + "settings_error_auth": "", + "settings_error_missing_password": "", + "settings_error_unreadable_cookie_file": "Connected to Tor controller, but can't authenticate because your password may be wrong, and your user doesn't have permission to read the cookie file.", + "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", + "error_tor_protocol_error": "Error talking to the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work." +} diff --git a/desktop/onionshare/resources/locale/es.json b/desktop/onionshare/resources/locale/es.json new file mode 100644 index 00000000..ed4cab2b --- /dev/null +++ b/desktop/onionshare/resources/locale/es.json @@ -0,0 +1,350 @@ +{ + "preparing_files": "Comprimiendo los archivos.", + "give_this_url": "Entrega esta URL al receptor:", + "ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor", + "not_a_file": "{0:s} no es un archivo válido.", + "other_page_loaded": "Dirección cargada", + "closing_automatically": "Detenido porque ya se completó la transferencia", + "help_local_only": "No usar Tor (sólo para desarrollo)", + "help_stay_open": "Continuar compartiendo luego que los archivos hayan sido enviados", + "help_verbose": "Enviar los errores de OnionShare a stdout, y los errores web al disco", + "help_filename": "Lista de archivos o carpetas para compartir", + "gui_drag_and_drop": "Arrastra y suelta archivos y carpetas para comenzar a compartir", + "gui_add": "Añadir", + "gui_delete": "Eliminar", + "gui_choose_items": "Elegir", + "gui_share_start_server": "Comienza a compartir", + "gui_share_stop_server": "Deja de compartir", + "gui_copy_url": "Copiar Dirección", + "gui_downloads": "Historial de descargas", + "gui_copied_url": "Dirección OnionShare copiada al portapapeles", + "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 encontrar un puerto disponible para iniciar el servicio cebolla", + "close_on_autostop_timer": "Detenido porque el temporizador de parada automática expiró", + "timeout_download_still_running": "Esperando a que se complete la descarga", + "large_filesize": "Advertencia: Enviar un recurso compartido grande podría llevar horas", + "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 OnionShare Copiada", + "gui_please_wait": "Comenzando… Clic para cancelar.", + "gui_quit_title": "No tan rápido", + "zip_progress_bar_format": "Comprimiendo: %p%", + "error_stealth_not_supported": "Para utilizar autorización de cliente, necesitas al menos Tor 0.2.9.1-alpha (o Navegador Tor 6.5) y python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare necesita por lo menos Tor 0.2.7.1 y python3-stem 1.4.0.", + "gui_settings_window_title": "Configuración", + "gui_settings_stealth_option": "Utilizar autorización de cliente", + "gui_settings_autoupdate_label": "Comprobar nuevas versiones", + "gui_settings_autoupdate_option": "Notifícame cuando haya una versión nueva disponible", + "gui_settings_autoupdate_check_button": "Comprobar Nueva Versión", + "gui_settings_connection_type_bundled_option": "Usa la versión de Tor incorporada en OnionShare", + "gui_settings_connection_type_automatic_option": "Intentar la configuración automática con el Navegador Tor", + "gui_settings_connection_type_test_button": "Probar la conexión a Tor", + "gui_settings_tor_bridges": "¿Conectar usando un puente Tor?", + "gui_settings_tor_bridges_invalid": "No funciona ninguno de los puentes que agregaste. Vuelve a comprobarlos o añade otros.", + "settings_saved": "Ajustes guardados en {}", + "give_this_url_receive": "Dele esta dirección al remitente:", + "give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:", + "not_a_readable_file": "{0:s} no es un archivo legible.", + "systray_menu_exit": "Salir", + "systray_download_started_title": "Iniciada la descarga de OnionShare", + "systray_download_started_message": "Alguien comenzó a descargar tus archivos", + "systray_download_completed_title": "Descarga de OnionShare finalizada", + "systray_download_completed_message": "Alguien ha terminado de descargar tus archivos", + "systray_download_canceled_title": "Descarga de OnionShare Cancelada", + "systray_download_canceled_message": "El usuario canceló la descarga", + "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_autostop_timer": "Deja de compartir ({})", + "gui_share_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", + "gui_receive_start_server": "Iniciar Modo de Recepción", + "gui_receive_stop_server": "Detener Modo de Recepción", + "gui_receive_stop_server_autostop_timer": "Detener Modo de Recepción (quedan {})", + "gui_receive_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", + "gui_no_downloads": "Ninguna Descarga Todavía", + "gui_canceled": "Cancelado", + "settings_error_unknown": "No se puede conectar al controlador Tor porque tu configuración no tiene sentido.", + "settings_error_automatic": "No se puede conectar al controlador Tor. ¿Se está ejecutando el Navegador Tor (disponible en torproject.org) en segundo plano?", + "settings_error_socket_port": "No se puede conectar al controlador Tor en {}:{}.", + "settings_error_socket_file": "No se puede conectar al controlador Tor usando el archivo de socket {}.", + "settings_error_auth": "Conectado con {}:{}, pero no se puede autenticar. ¿Quizás este no sea un controlador Tor?", + "settings_error_missing_password": "Conectado al controlador Tor, pero se requiere una contraseña para autenticar.", + "settings_error_unreadable_cookie_file": "Conectado al controlador Tor, pero la contraseña puede ser errónea, o a tu usuario no le es permitido leer el archivo cookie.", + "settings_error_bundled_tor_not_supported": "La versión de Tor que viene con OnionShare no funciona en el modo de desarrollador en Windows o macOS.", + "settings_error_bundled_tor_timeout": "La conexión con Tor está demorando demasiado. ¿Quizás el equipo está desconectado de Internet o el reloj no está en hora?", + "settings_error_bundled_tor_broken": "OnionShare no pudo conectarse a Tor:\n{}", + "settings_test_success": "Se conectó con el controlador Tor.\n\nVersión de Tor: {}.\nAdmite servicios cebolla efímeros: {}.\nAdmite autenticación de cliente: {}.\nAdmite direcciones .onion de nueva generación: {}.", + "error_tor_protocol_error": "Hubo un error con Tor: {}", + "error_tor_protocol_error_unknown": "Hubo un error desconocido con Tor", + "error_invalid_private_key": "Este tipo de clave privada no está soportado", + "connecting_to_tor": "Conectar a la red Tor", + "update_available": "Salió un OnionShare nuevo. Haz clic aquí para obtenerlo.

Estás usando {} y el más reciente es {}.", + "update_error_check_error": "No se pudo comprobar si hay versiones nuevas: ¿Tal vez no estás conectado a Tor, o el sitio web de OnionShare está caído?", + "update_error_invalid_latest_version": "No se pudo comprobar si hay versiones nuevas: El sitio web de OnionShare dice que la última versión es la '{}', pero eso es irreconocible…", + "update_not_available": "Estás usando la versión más reciente de OnionShare.", + "gui_tor_connection_ask": "¿Abrir la configuración para arreglar la conexión a Tor?", + "gui_tor_connection_ask_open_settings": "Sí", + "gui_tor_connection_ask_quit": "Salir", + "gui_tor_connection_error_settings": "Prueba cambiar la forma en que OnionShare se conecta a la red Tor en la configuración.", + "gui_tor_connection_canceled": "No se pudo conectar a Tor.\n\nAsegúrate de haber conectado a Internet, vuelve a abrir OnionShare y configura su conexión a Tor.", + "gui_tor_connection_lost": "Se desconectó de Tor.", + "gui_server_started_after_autostop_timer": "El temporizador de parada automática expiró antes de que se iniciara el servidor. Por favor crea un recurso compartido nuevo.", + "gui_server_autostop_timer_expired": "El temporizador de parada automática ya expiró. Por favor ajústalo para comenzar a compartir.", + "share_via_onionshare": "Compartir con OnionShare", + "gui_save_private_key_checkbox": "Usar una dirección persistente", + "gui_share_url_description": "Cualquiera con esta dirección OnionShare y la clave privada puede descargar tus archivos usando el Navegador Tor: ", + "gui_receive_url_description": "Cualquiera con esta dirección de OnionShare y clave privada puede subir archivos a tu ordenador usando el Navegador Tor: ", + "gui_url_label_persistent": "Este recurso compartido no se detendrá automáticamente.

Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)", + "gui_url_label_stay_open": "Este recurso compartido no se detendrá automáticamente.", + "gui_url_label_onetime": "Este recurso compartido se detendrá después de la primera operación completada.", + "gui_url_label_onetime_and_persistent": "Este recurso compartido no se detendrá automáticamente.

Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)", + "gui_status_indicator_share_stopped": "Listo para compartir", + "gui_status_indicator_share_working": "Comenzando.…", + "gui_status_indicator_share_started": "Compartiendo", + "gui_status_indicator_receive_stopped": "Listo para recibir", + "gui_status_indicator_receive_working": "Comenzando.…", + "gui_status_indicator_receive_started": "Recibiendo", + "gui_file_info": "{} archivos, {}", + "gui_file_info_single": "{} archivo, {}", + "info_in_progress_downloads_tooltip": "{} descarga(s) en curso", + "info_completed_downloads_tooltip": "{} descarga(s) completada(s)", + "info_in_progress_uploads_tooltip": "{} subida(s) en curso", + "info_completed_uploads_tooltip": "{} subida(s) completada(s)", + "receive_mode_downloads_dir": "Los archivos que te envíen aparecerán en esta carpeta: {}", + "receive_mode_warning": "Advertencia: El modo de recepción permite a la gente subir archivos a tu ordenador. Algunos archivos, si los abres, podrían tomar el control de tu ordenador. Abre sólo cosas de personas en las que confíe, o si sabes lo que estás haciendo.", + "gui_download_upload_progress_complete": "%p%, {0:s} transcurrido.", + "gui_download_upload_progress_starting": "{0:s}, %p% (calculando)", + "gui_download_upload_progress_eta": "{0:s}, tiempo restante estimado: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_share_quit_warning": "Aún está enviando archivos. ¿Confirma que quiere salir de OnionShare?", + "gui_quit_warning_quit": "Salir", + "gui_quit_warning_dont_quit": "Cancelar", + "gui_settings_whats_this": "¿Qué es esto?", + "gui_settings_autoupdate_timestamp": "Última comprobación: {}", + "gui_settings_autoupdate_timestamp_never": "Nunca", + "gui_settings_general_label": "Configuración general", + "gui_settings_sharing_label": "Configuración de compartición", + "gui_settings_close_after_first_download_option": "Dejar de compartir luego que los archivos hayan sido enviados", + "gui_settings_connection_type_label": "¿Cómo debería conectarse OnionShare a Tor?", + "gui_settings_connection_type_control_port_option": "Conectar usando el puerto de control", + "gui_settings_connection_type_socket_file_option": "Conectar usando un archivo de socket", + "gui_settings_control_port_label": "Puerto de control", + "gui_settings_socket_file_label": "Archivo socket", + "gui_settings_socks_label": "Puerto SOCKS", + "gui_settings_authenticate_label": "Configuración de autenticación de Tor", + "gui_settings_authenticate_no_auth_option": "Sin autenticación, o autenticación por cookies", + "gui_settings_authenticate_password_option": "Contraseña", + "gui_settings_password_label": "Contraseña", + "gui_settings_tor_bridges_no_bridges_radio_option": "No usar puentes", + "gui_receive_quit_warning": "Aún está recibiendo archivos. ¿Confirma que quiere salir de OnionShare?", + "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportes conectables obfs4 incorporados", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportes conectables obfs4 incorporados (requiere obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportes conectables incorporados meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportes conectables meek_lite (Azure) incorporados (requiere obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Advertencia: Los puentes meek-azure son muy costosos de mantener para el Proyecto Tor.

Utilízalos solo si no puedes conectarte a Tor directamente, a través de transportes obfs4 u otros puentes normales.", + "gui_settings_tor_bridges_custom_radio_option": "Usar puentes personalizados", + "gui_settings_tor_bridges_custom_label": "Puedes obtener puentes en https://bridges.torproject.org", + "gui_settings_button_save": "Guardar", + "gui_settings_button_cancel": "Cancelar", + "gui_settings_button_help": "Ayuda", + "gui_settings_autostop_timer_checkbox": "Utilizar temporizador de parada automática", + "gui_settings_autostop_timer": "Detener compartición a las:", + "history_in_progress_tooltip": "{} en curso", + "history_completed_tooltip": "{} completado", + "error_cannot_create_downloads_dir": "No se ha podido crear la carpeta en modo de recepción: {}", + "error_downloads_dir_not_writable": "La carpeta del modo de recepción está protegida contra escritura: {}", + "gui_receive_mode_warning": "El modo de recepción permite que otras personas suban archivos a tu computadora.

Algunos archivos, potencialmente, podrían tomar control de tu computadora si los abres. Abre solo cosas de personas en las que confías, o si sabes lo que estás haciendo.", + "receive_mode_upload_starting": "Ha comenzado la carga. Total: {}", + "receive_mode_received_file": "Recibido: {}", + "gui_mode_share_button": "Compartir archivos", + "gui_mode_receive_button": "Recibir archivos", + "gui_settings_receiving_label": "Ajustes de recepción", + "gui_settings_downloads_label": "Guardar archivos en", + "gui_settings_downloads_button": "Examinar", + "gui_settings_public_mode_checkbox": "Modo público", + "systray_close_server_title": "Servidor OnionShare cerrado", + "systray_close_server_message": "Un usuario cerró el servidor", + "systray_page_loaded_title": "Página Cargada", + "systray_download_page_loaded_message": "Un usuario cargó la página de descarga", + "systray_upload_page_loaded_message": "Un usuario cargó la página de carga", + "gui_uploads": "Historial de carga", + "gui_no_uploads": "No hay subidas todavía", + "gui_clear_history": "Limpiar todo", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "El modo de recepción puede ser detenido por el remitente", + "gui_upload_in_progress": "Subida Iniciada {}", + "gui_upload_finished": "Subido {}", + "gui_download_in_progress": "Descarga iniciada {}", + "gui_open_folder_error_nautilus": "No se puede abrir la carpeta porque nautilus no está disponible. El archivo está aquí: {}", + "gui_settings_language_label": "Idioma", + "gui_settings_language_changed_notice": "Reinicia OnionShare para que se aplique el idioma nuevo.", + "gui_upload_finished_range": "Cargado {} a {}", + "timeout_upload_still_running": "Esperando a que se complete la subida", + "gui_add_files": "Añadir Archivos", + "gui_add_folder": "Añadir Carpeta", + "gui_connect_to_tor_for_onion_settings": "Conectarse a Tor para ver configuraciones de servicio cebolla", + "error_cannot_create_data_dir": "No se pudo crear carpeta de datos OnionShare: {}", + "receive_mode_data_dir": "Archivos enviados a usted aparecen en esta carpeta: {}", + "gui_settings_data_dir_label": "Guardar archivos en", + "gui_settings_data_dir_browse_button": "Navegar", + "systray_page_loaded_message": "Dirección OnionShare cargada", + "systray_share_started_title": "Compartición iniciada", + "systray_share_started_message": "Se empezó a enviar archivos a alguien", + "systray_share_completed_title": "Compartición completada", + "systray_share_completed_message": "Finalizó envío de archivos", + "systray_share_canceled_title": "Compartición cancelada", + "systray_share_canceled_message": "Alguien canceló la recepción de tus archivos", + "systray_receive_started_title": "Recepción iniciada", + "systray_receive_started_message": "Alguien te está enviando archivos", + "gui_all_modes_history": "Historial", + "gui_all_modes_clear_history": "Limpiar todo", + "gui_all_modes_transfer_started": "Iniciado {}", + "gui_all_modes_transfer_finished_range": "Transferido {} - {}", + "gui_all_modes_transfer_finished": "Transferido {}", + "gui_all_modes_progress_complete": "%p%, {0:s} transcurridos.", + "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_autostop_timer_waiting": "Esperando a que termine el envío", + "gui_receive_mode_no_files": "Todavía no se ha recibido ningún archivo", + "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 Onion", + "gui_stop_server_autostop_timer_tooltip": "El temporizador de parada automática finaliza a las {}", + "gui_start_server_autostart_timer_tooltip": "El temporizador de inicio automático finaliza a las {}", + "gui_waiting_to_start": "Inicio programado en {}. Clic para cancelar.", + "gui_settings_autostart_timer_checkbox": "Utilizar temporizador de inicio automático", + "gui_settings_autostart_timer": "Iniciar compartición a las:", + "gui_server_autostart_timer_expired": "La hora programada ya ha pasado. Modifícala para comenzar a compartir.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La hora de inicio automático no puede ser igual ni anterior a la de parada automática. Ajústala para comenzar a compartir.", + "gui_status_indicator_share_scheduled": "Programado…", + "gui_status_indicator_receive_scheduled": "Programado…", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_website_url_description": "Cualquiera con esta dirección de OnionShare y clave privada puede visitar tu sitio web usando el Navegador Tor: ", + "gui_mode_website_button": "Publicar sitio web", + "systray_site_loaded_title": "Sitio web cargado", + "systray_site_loaded_message": "Sitio web de OnionShare cargado", + "systray_website_started_title": "Se comenzó a compartir el sitio web", + "systray_website_started_message": "Alguien está visitando su sitio web", + "gui_website_mode_no_files": "Aún no se han compartido sitios web", + "gui_visit_started": "Alguien ha visitado su sitio web {}", + "incorrect_password": "Contraseña incorrecta", + "gui_settings_individual_downloads_label": "Desmarca para permitir descargar archivos individuales", + "history_requests_tooltip": "{} solicitudes web", + "systray_individual_file_downloaded_title": "Archivo individual cargado", + "systray_individual_file_downloaded_message": "Archivo individual {} visto", + "gui_settings_csp_header_disabled_option": "Deshabilitar encabezado de Política de Seguridad de Contenido", + "gui_settings_website_label": "Configuración de sitio web", + "mode_settings_legacy_checkbox": "Usar una dirección obsoleta (servicio cebolla v2, no recomendado)", + "mode_settings_autostop_timer_checkbox": "Detener el servicio cebolla a una hora determinada", + "mode_settings_autostart_timer_checkbox": "Iniciar el servicio cebolla a una hora determinada", + "mode_settings_public_checkbox": "Este es un servicio público OnionShare (Deshabilita clave privada)", + "mode_settings_persistent_checkbox": "Guardar esta pestaña, y abrirla automáticamente cuando abra OnionShare", + "mode_settings_advanced_toggle_hide": "Ocultar la configuración avanzada", + "mode_settings_advanced_toggle_show": "Mostrar configuración avanzada", + "gui_quit_warning_cancel": "Cancelar", + "gui_quit_warning_description": "Compartir está activo en algunas de tus pestañas. Si sales, todas tus pestañas se cerrarán. ¿Estás seguro/a de que quieres salir?", + "gui_quit_warning_title": "¿Estás seguro/a?", + "gui_close_tab_warning_cancel": "Cancelar", + "gui_close_tab_warning_close": "Cerrar", + "gui_close_tab_warning_website_description": "Estás alojando un sitio web. ¿Estás seguro/a de que quieres cerrar esta pestaña?", + "gui_close_tab_warning_receive_description": "Estás en el proceso de recibir archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?", + "gui_close_tab_warning_share_description": "Estás en el proceso de enviar archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?", + "gui_close_tab_warning_persistent_description": "Esta pestaña es persistente. Si la cierras, perderás la dirección cebolla que usa. ¿Estás seguro/a de que quieres cerrarla?", + "gui_close_tab_warning_title": "¿Seguro?", + "gui_new_tab_website_description": "Hospedar un sitio cebolla HTML estático desde tu computadora.", + "gui_new_tab_website_button": "Alojar un sitio web", + "gui_new_tab_receive_description": "Convierte tu computadora en un buzón en línea. La gente podrá usar el Tor Browser para enviar archivos a tu ordenador.", + "gui_new_tab_receive_button": "Recibir archivos", + "gui_new_tab_share_button": "Compartir archivos", + "gui_new_tab_tooltip": "Abrir una pestaña nueva", + "gui_new_tab": "Nueva pestaña", + "gui_new_tab_share_description": "Elige los archivos de tu ordenador para enviarlos a otra persona. La persona o personas a las que quieras enviar los archivos tendrán que usar el Tor Browser para descargarlos de ti.", + "mode_settings_website_disable_csp_checkbox": "No enviar encabezado predeterminado de Política de Seguridad de Contenido (permite que tu sitio web utilice recursos de terceros)", + "mode_settings_receive_data_dir_browse_button": "Navegar", + "mode_settings_receive_data_dir_label": "Guardar archivos en", + "mode_settings_share_autostop_sharing_checkbox": "Dejar de compartir después de haber enviado archivos (desmarcar para permitir la descarga de archivos individuales)", + "gui_tab_name_chat": "Chat", + "gui_tab_name_website": "Sitio web", + "gui_tab_name_receive": "Recibir", + "gui_tab_name_share": "Compartir", + "gui_new_tab_chat_button": "Chatear Anónimamente", + "gui_open_folder_error": "Fallo al abrir carpeta con xdg-open. El archivo está aquí: {}", + "gui_qr_code_description": "Escanea este código QR con un lector QR, como la cámara de tu teléfono para compartir la dirección OnionShare.", + "gui_qr_code_dialog_title": "Código QR de OnionShare", + "gui_show_qr_code": "Mostrar Código QR", + "gui_receive_flatpak_data_dir": "Al instalar OnionShare usando Flatpak, debes guardar los archivos en una carpeta en ~/OnionShare.", + "gui_chat_stop_server": "Detener servidor de chat", + "gui_chat_start_server": "Iniciar servidor de chat", + "gui_chat_stop_server_autostop_timer": "Detener Servidor de Chat ({})", + "gui_file_selection_remove_all": "Remover Todo", + "gui_remove": "Remover", + "gui_main_page_chat_button": "Empezar a charlar", + "gui_main_page_website_button": "Empezar a alojar", + "gui_main_page_receive_button": "Empezar a recibir", + "gui_main_page_share_button": "Empezar a compartir", + "gui_chat_url_description": "Cualquiera con esta dirección de OnionShare y la clave privada puede unirse a esta sala de chat usando el Navegador Tor: ", + "error_port_not_available": "Puerto OnionShare no disponible", + "gui_rendezvous_cleanup_quit_early": "Salir Antes", + "gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.", + "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color.", + "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificaciones", + "history_receive_read_message_button": "Leer mensaje", + "mode_settings_receive_disable_files_checkbox": "Deshabilitar la subida de archivos", + "mode_settings_receive_disable_text_checkbox": "Deshabilitar el envío de texto", + "mode_settings_title_label": "Título personalizado", + "gui_status_indicator_chat_started": "Chateando", + "gui_status_indicator_chat_scheduled": "Programado…", + "gui_status_indicator_chat_working": "Iniciando…", + "gui_status_indicator_chat_stopped": "Listo para chatear", + "gui_reveal": "Revelar", + "gui_settings_theme_label": "Tema", + "gui_url_instructions": "Primero, envíe la dirección de OnionShare a continuación:", + "gui_qr_label_url_title": "Dirección de OnionShare", + "gui_server_doesnt_support_stealth": "Lo sentimos, esta versión de Tor no soporta stealth (Autenticación de Cliente). Por favor pruebe con una nueva versión de Tor o use el modo 'público' si no necesita ser privado.", + "gui_website_url_public_description": "Cualquiera con esta dirección de OnionShare puede visitar tu sitio web utilizando el Navegador Tor: ", + "gui_share_url_public_description": "Cualquiera con esta dirección de OnionShare puede descargar tus archivos usando el Navegador Tor: ", + "gui_please_wait_no_button": "Iniciando…", + "gui_hide": "Ocultar", + "gui_copy_client_auth": "Copiar Llave Privada", + "gui_qr_label_auth_string_title": "Llave Privada", + "gui_copied_client_auth": "Llave Privada copiada al portapapeles", + "gui_copied_client_auth_title": "Llave Privada Copiada", + "gui_client_auth_instructions": "A continuación, envíe la llave privada para permitir el acceso a su servicio OnionShare:", + "gui_chat_url_public_description": "Cualquiera con esta dirección de OnionShare puede unirse a esta sala de chat usando el Navegador Tor: ", + "gui_receive_url_public_description": "Cualquiera con esta dirección OnionShare puede Cargar archivos a tu computadora usando el Navegador Tor: ", + "gui_settings_theme_dark": "Oscuro", + "gui_settings_theme_light": "Claro", + "gui_settings_theme_auto": "Automático", + "gui_url_instructions_public_mode": "Envíe la siguiente dirección de OnionShare:", + "gui_dragdrop_sandbox_flatpak": "Para hacer que la zona de prueba de Flatpak sea más segura, arrastrar y colocar no es soportado. En vez, usa los botones Agregar Archivos y Agregar Carpeta para navegar entre archivos.", + "gui_tor_settings_window_title": "Configuraciones de Tor", + "gui_settings_controller_extras_label": "Configuraciones de Tor", + "gui_settings_tor_bridges_label": "Los puentes te ayudan a acceder a la red Tor en lugares donde Tor está bloqueado. Dependiendo de dónde estés, un puente podría funcionar mejor que otro.", + "gui_settings_bridge_use_checkbox": "Usar un puente", + "gui_settings_bridge_radio_builtin": "Seleccionar un puente incorporado", + "gui_settings_bridge_none_radio_option": "No usar un puente", + "gui_settings_bridge_moat_radio_option": "Solicita un puente desde torproject.org", + "gui_settings_bridge_moat_button": "Solicitar un Nuevo Puente", + "gui_settings_bridge_custom_radio_option": "Provee un puente del que te enteraste a través de una fuente confiable", + "gui_settings_bridge_custom_placeholder": "tipea dirección:puerto (una por línea)", + "gui_settings_moat_bridges_invalid": "Aún no has solicitado un puente desde torproject.org.", + "gui_settings_stop_active_tabs_label": "Estos son servicios ejecutándose en algunas de tus pestañas.\nDebes detenerlos a todos para cambiar tus configuraciones de Tor.", + "gui_settings_version_label": "Estás usando OnionShare {}", + "gui_settings_help_label": "¿Necesitas ayuda? Mira docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Enviar un encabezado personaizado de Política de Seguridad de Contenido", + "moat_contact_label": "Contactando BridgeDB...", + "moat_captcha_label": "Resuelve el CAPTCHA para solicitar un puente.", + "moat_captcha_placeholder": "Ingresa los caracteres en la imagen", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recargar", + "moat_bridgedb_error": "Error contactando BridgeDB.", + "moat_captcha_error": "La solución no es correcta. Por favor, inténtalo de nuevo.", + "moat_solution_empty_error": "Debes ingresar los caracteres en la imagen", + "mode_tor_not_connected_label": "OnionShare no está conectado a la red Tor" +} diff --git a/desktop/onionshare/resources/locale/fa.json b/desktop/onionshare/resources/locale/fa.json new file mode 100644 index 00000000..2c27c998 --- /dev/null +++ b/desktop/onionshare/resources/locale/fa.json @@ -0,0 +1,233 @@ +{ + "config_onion_service": "آماده سازی سرویس onion روی پورت {0:d}.", + "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_autostop_timer": "متوقف شد چون تایمر توقف خودکار به پایان رسید", + "closing_automatically": "متوقف شد چون انتقال انجام شد", + "timeout_download_still_running": "انتظار برای تکمیل دانلود", + "large_filesize": "هشدار: یک هم‌رسانی بزرگ ممکن است ساعت‌ها طول بکشد", + "systray_menu_exit": "خروج", + "systray_download_started_title": "دانلود OnionShare آغاز شد", + "systray_download_started_message": "یک کاربر شروع به دانلود فایل های شما کرد", + "systray_download_completed_title": "دانلود OnionShare به پایان رسید", + "systray_download_completed_message": "دانلود فایل های شما توسط کاربر به پایان رسید", + "systray_download_canceled_title": "دانلود OnionShare لغو شد", + "systray_download_canceled_message": "کاربر دانلود را لغو کرد", + "systray_upload_started_title": "آپلود OnionShare آغاز شد", + "systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است", + "help_local_only": "عدم استفاده از Tor (فقط برای توسعه)", + "help_stay_open": "ادامه اشتراک گذاری پس از ارسال دانلود ها", + "help_autostop_timer": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص", + "help_stealth": "استفاده از احراز هویت کلاینت (پیشرفته)", + "help_receive": "دریافت اشتراک به جای ارسال آن", + "help_verbose": "لاگ کردن خطاهای OnionShare روی stdout، و خطاهای وب بر روی دیسک", + "help_filename": "لیست فایل ها یا فولدر ها برای به اشتراک گذاری", + "help_config": "مکان فایل کانفیگ JSON کاستوم (اختیاری)", + "gui_drag_and_drop": "پرونده‌ها و پوشه‌ها را بکشید و رها کنید\nتا هم‌رسانی آغاز شود", + "gui_add": "افزودن", + "gui_delete": "حذف", + "gui_choose_items": "انتخاب", + "gui_share_start_server": "شروع هم‌رسانی", + "gui_share_stop_server": "توقف هم‌رسانی", + "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_autostop_timer": "توقف حالت دریافت ({} باقیمانده)", + "gui_receive_stop_server_autostop_timer_tooltip": "تایمر توقف خودکار در {} به پایان می رسد", + "gui_copy_url": "کپی آدرس", + "gui_downloads": "دانلود تاریخچه", + "gui_no_downloads": "", + "gui_canceled": "لغو شده", + "gui_copied_url_title": "آدرس OnionShare کپی شد", + "gui_copied_url": "آدرس OnionShare بر کلیپ بورد کپی شد", + "gui_please_wait": "در حال آغاز... برای لغو کلیک کنید.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "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": "لغو", + "zip_progress_bar_format": "فشرده سازی: %p%", + "error_stealth_not_supported": "برای استفاده از احراز هویت کلاینت، شما نیاز به داشتن Tor 0.2.9.1-alpha (یا مرورگر Tor 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_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_sharing_label": "تنظیمات هم‌رسانی", + "gui_settings_close_after_first_download_option": "توقف هم‌رسانی پس از اولین ارسال", + "gui_settings_connection_type_label": "OnionShare چگونه به Tor باید متصل شود؟", + "gui_settings_connection_type_bundled_option": "استفاده از نسخه Tor قرار گرفته در OnionShare", + "gui_settings_connection_type_automatic_option": "اعمال پیکربندی خودکار با مرورگر Tor", + "gui_settings_connection_type_control_port_option": "اتصال از طریق پورت کنترل", + "gui_settings_connection_type_socket_file_option": "اتصال از طریق پرونده سوکت", + "gui_settings_connection_type_test_button": "تست اتصال به Tor", + "gui_settings_control_port_label": "پورت کنترل", + "gui_settings_socket_file_label": "پرونده سوکت‌", + "gui_settings_socks_label": "پورت SOCKS", + "gui_settings_authenticate_label": "تنظیمات احراز هویت Tor", + "gui_settings_authenticate_no_auth_option": "هیچ احراز هویت، یا احراز هویت کوکی", + "gui_settings_authenticate_password_option": "رمز عبور", + "gui_settings_password_label": "رمز عبور", + "gui_settings_tor_bridges": "پشتیبانی پل Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "عدم استفاده از پل", + "gui_settings_tor_bridges_obfs4_radio_option": "استفاده از پلاگبل ترنسپورت obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت obfs4 (نیازمند obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "استفاده از پلاگبل ترنسپورت meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت meek_lite (Azure) (نیازمند obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "هشدار: پل‌های meek_lite برای پروژه Tor بسیار هزینه بر هستند.

فقط در صورت ناتوانی در اتصال به Tor به صورت مستقیم، از طریق obfs4، یا دیگر پل‌ها از آن استفاده کنید.", + "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_button_save": "ذخیره", + "gui_settings_button_cancel": "لغو", + "gui_settings_button_help": "راهنما", + "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 در {}:{}.", + "settings_error_socket_file": "ناتوانی در اتصال به کنترل کننده Tor از طریق پرونده سوکت {}.", + "settings_error_auth": "متصل به {}:{}، اما ناتوانی در احراز هویت. شاید این یک کنترل کننده Tor نیست؟", + "settings_error_missing_password": "متصل به کنترل کننده Tor، اما نیاز به یک رمز عبور برای احراز هویت است.", + "settings_error_unreadable_cookie_file": "اتصال به کنترل کننده Tor برقرار است، اما رمز عبور ممکن است اشتباه باشد، یا کاربری شما اجازه خواندن پرونده کوکی را ندارد.", + "settings_error_bundled_tor_not_supported": "استفاده از نسخه Tor که با OnionShare می‌آید در حالت توسعه روی ویندوز یا مک کار نمی‌کند.", + "settings_error_bundled_tor_timeout": "اتصال به Tor زمان زیادی می‌برد. شاید شما به اینترنت متصل نیستید، یا ساعت سیستم شما دقیق نیست؟", + "settings_error_bundled_tor_broken": "OnionShare نمی‌تواند در پس زمینه به Tor متصل شود:\n{}", + "settings_test_success": "اتصال به کنترل کننده Tor برقرار است.\n\nنسخه Tor: {}\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_autostop_timer": "زمان‌سنج توقف خودکار، قبل از آغاز کارساز به پایان رسید. لطفا یک هم‌رسانی جدید درست کنید.", + "gui_server_autostop_timer_expired": "زمان‌سنج توقف خودکار به پایان رسید. لطفا برای آغاز هم‌رسانی آن را تنظیم کنید.", + "share_via_onionshare": "هم‌رسانی با OnionShare", + "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_started": "درحال دریافت", + "gui_file_info": "{} پرونده‌ها، {}", + "gui_file_info_single": "{} پرونده، {}", + "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": "هشدار: حالت دریافت به سایر افراد اجازه می دهد تا به روی کامپیوتر شما فایل آپلود کنند. برخی فایل ها را اگر باز کنید پتانسیل آن را دارند تا کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی که از کسانی دریافت کردید که به آن ها اعتماد دارید را باز کنید، یا اگر میدانید دارید چه کار میکنید.", + "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_downloads_label": "ذخیره فایل ها در", + "gui_settings_downloads_button": "فهرست", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "حالت عمومی", + "systray_close_server_title": "سرور OnionShare بسته شد", + "systray_close_server_message": "یک کاربر سرور را بست", + "systray_page_loaded_title": "صفحه بارگذاری شد", + "systray_download_page_loaded_message": "یک کاربر صفحه دانلود را بارگذاری کرد", + "systray_upload_page_loaded_message": "یک کاربر صفحه آپلود را بارگذاری کرد", + "gui_uploads": "تاریخچه آپلود", + "gui_no_uploads": "هیچ آپلودی هنوز وجود ندارد", + "gui_clear_history": "پاکسازی همه", + "gui_upload_in_progress": "آپلود آغاز شد {}", + "gui_upload_finished_range": "{} به {} آپلود شد", + "gui_upload_finished": "{} آپلود شد", + "gui_download_in_progress": "دانلود آغاز شد {}", + "gui_open_folder_error_nautilus": "ناتوانی در باز کردن پوشه به دلیل موجود نبودن ناتیلوس. پرونده در اینجا قرار دارد: {}", + "gui_settings_language_label": "زبان ترجیحی", + "gui_settings_language_changed_notice": "برای اعمال شدن زبان جدید، OnionShare را از نو راه‌اندازی کنید.", + "timeout_upload_still_running": "انتظار برای تکمیل آپلود", + "gui_add_files": "افزودن پرونده‌ها", + "gui_add_folder": "افزودن پوشه", + "gui_connect_to_tor_for_onion_settings": "اتصال به Tor برای دیدن تنظیمات سرویس 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_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_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": "هیچ پرونده‌ای هنوز فرستاده نشده است", + "gui_share_mode_autostop_timer_waiting": "در انتظار پایان یافتن ارسال", + "gui_receive_mode_no_files": "هیچ پرونده‌ای هنوز دریافت نشده است", + "gui_receive_mode_autostop_timer_waiting": "در انتظار برای پایان یافتن دریافت", + "gui_all_modes_transfer_canceled_range": "{} - {} لغو شد", + "gui_all_modes_transfer_canceled": "{} لغو شد", + "gui_settings_onion_label": "تنظیمات Onion", + "gui_stop_server_autostop_timer_tooltip": "زمان‌سنج توقف خودکار در {} به پایان می‌رسد", + "gui_start_server_autostart_timer_tooltip": "زمان‌سنج شروع خودکار در {} به پایان می‌رسد", + "gui_waiting_to_start": "زمان‌بندی شده برای شروع در {}. برای لغو، کلیک کنید.", + "gui_settings_autostart_timer_checkbox": "استفاده از زمان‌سنج شروع خودکار", + "gui_settings_autostart_timer": "شروع هم‌رسانی در:", + "gui_server_autostart_timer_expired": "زمان برنامه‌ریزی شده سپری شده است. لطفا برای شروع هم‌رسانی، آن را تنظیم کنید.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "زمان توقف خودکار نمی‌توان مشابه با و یا زودتر از زمان شروع خودکار باشد. لطفا برای شروع هم‌رسانی، آن را تنظیم کنید.", + "gui_status_indicator_share_scheduled": "زمان‌بندی‌شده…", + "gui_status_indicator_receive_scheduled": "زمان‌بندی‌شده…", + "days_first_letter": "ر", + "hours_first_letter": "س", + "minutes_first_letter": "د", + "seconds_first_letter": "ث", + "gui_website_url_description": "هرکسی با این نشانی OnionShare می‌تواند با استفاده از مرورگر تور سایت شما را بازدید کند: ", + "gui_mode_website_button": "انتشار سایت", + "gui_website_mode_no_files": "هنوز سایتی هم‌رسانی نشده است", + "incorrect_password": "گذرواژه نادرست", + "gui_settings_individual_downloads_label": "برای دادن اجازه بارگیری پرونده‌ها مجزا، از انتخاب خارج کنید", + "history_requests_tooltip": "{} درخواست وب", + "gui_settings_csp_header_disabled_option": "غیرفعال‌سازی سرایند سیاست امنیت محتوا", + "gui_settings_website_label": "تنظیمات سایت", + "gui_new_tab_share_button": "اشتراک‌‌گذاری فایل‌ها" +} diff --git a/desktop/onionshare/resources/locale/fi.json b/desktop/onionshare/resources/locale/fi.json new file mode 100644 index 00000000..37c28dac --- /dev/null +++ b/desktop/onionshare/resources/locale/fi.json @@ -0,0 +1,265 @@ +{ + "preparing_files": "Pakataan tiedostoja.", + "give_this_url": "Anna tämä URL-osoite vastaanottajalle:", + "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": "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_verbose": "Kirjaa OnionShare virheet stdout:tiin, ja verkko virheet levylle", + "help_filename": "Luettele jaettavat tiedostot tai kansiot", + "gui_drag_and_drop": "Vedä ja pudota tiedostot tänne aloittaaksesi jakamisen", + "gui_add": "Lisää", + "gui_delete": "Poista", + "gui_choose_items": "Valitse", + "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": "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_autostop_timer": "Automaattinen lopetusajastin pysäytti toiminnon", + "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_autostop_timer": "Lopeta jakaminen ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu {} jälkeen", + "gui_receive_start_server": "Aloita vastaanottotila", + "gui_receive_stop_server": "Lopeta vastaanottotila", + "gui_receive_stop_server_autostop_timer": "Lopeta vastaanottotila ({} jäljellä)", + "gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu kello {}", + "gui_copied_url_title": "Kopioi OnionShare-osoite", + "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_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_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": "Jakoasetukset", + "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-todennusasetukset", + "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-siltojen 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-solmuja osoitteesta https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Mikään lisäämistäsi silta-solmuista ei toiminut\nTarkista ne uudelleen tai lisää muita.", + "gui_settings_button_save": "Tallenna", + "gui_settings_button_cancel": "Peruuta", + "gui_settings_button_help": "Ohje", + "gui_settings_autostop_timer_checkbox": "Käytä automaattista lopetusajastinta", + "gui_settings_autostop_timer": "Lopeta jako aikaan:", + "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\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 versio on julkaistu. Paina tästä ladataksesi sen.

Käytät versiota {} ja uusin versio on {}.", + "update_error_check_error": "Ei pystytty tarkistamaan päivityksiä: Ehkä et ole yhteydessä Tor-verkkoon, tai OnionShare-nettisivu on kaatunut?", + "update_error_invalid_latest_version": "Päivityksien tarkistaminen epäonnistui: OnionShare-sivuston mukaan uusin versio on tuntematon '{}'…", + "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 avaa OnionShare uudelleen ja ota käyttöön sen Tor-yhteys.", + "gui_tor_connection_lost": "Tor-yhteys katkaistu.", + "gui_server_started_after_autostop_timer": "Automaattinen loputusajastin pysäytti toiminnon ennen palvelimen käynnistymistä. Luo uusi jako.", + "gui_server_autostop_timer_expired": "Automaattinen pysäytysajastin päättyi jo. Säädä se jaon aloittamiseksi.", + "share_via_onionshare": "Jaa OnionSharella", + "gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset", + "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 ottaaksesi uuden kielen käyttöön.", + "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ä kaikki", + "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_autostop_timer_waiting": "Odotetaan lähetyksen valmistumista", + "gui_receive_mode_no_files": "Yhtäkään tiedostoa ei ole vastaanotettu vielä", + "gui_receive_mode_autostop_timer_waiting": "Odotetaan vastaanottamisen valmistumista", + "gui_stop_server_autostop_timer_tooltip": "Automaattinen pysäytysajastin loppuu {} kuluttua", + "gui_start_server_autostart_timer_tooltip": "Automaattinen aloitusajastin loppuu {} kuluttua", + "gui_waiting_to_start": "Ajastettu aloitus {} kuluttua. Peruuta napsauttamalla.", + "gui_settings_autostart_timer_checkbox": "Käytä automaattista aloitusajastinta", + "gui_settings_autostart_timer": "Aloita jakaminen:", + "gui_server_autostart_timer_expired": "Ajastettu aika on jo mennyt. Säädä se aloittaaksesi jakamisen.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automaattinen pysätysaika ei voi olla sama tai aikaisempi kuin automaattinen aloitusaika. Säädä se aloittaaksesi jakamisen.", + "gui_status_indicator_share_scheduled": "Ajastettu…", + "gui_status_indicator_receive_scheduled": "Ajastettu…", + "days_first_letter": "pv", + "hours_first_letter": "t", + "minutes_first_letter": "min", + "seconds_first_letter": "s", + "gui_website_url_description": "Kaikki voivat käyttää tätä OnionShare-osoitetta vieraillakseen verkkosivullasi käyttäen Tor Browser-verkkoselainta: ", + "gui_mode_website_button": "Julkaise verkkosivu", + "gui_website_mode_no_files": "Yhtäkään verkkosivustoa ei ole vielä jaettu", + "incorrect_password": "väärä salasana", + "gui_settings_individual_downloads_label": "Poista rasti ruudusta salliaksesi yksittäisten tiedostojen lataamisen", + "history_requests_tooltip": "{} verkkopyyntöä", + "gui_settings_csp_header_disabled_option": "Poista Content Security Policy -otsake käytöstä", + "gui_settings_website_label": "Verkkosivun asetukset", + "mode_settings_receive_data_dir_browse_button": "Selaa", + "mode_settings_receive_data_dir_label": "Tallenna tiedostot", + "mode_settings_share_autostop_sharing_checkbox": "Lopeta jakaminen kun tiedostot on lähetetty (poista valinta malhdollistaaksesi yksittäisten tiedostojen jakamisen)", + "mode_settings_public_checkbox": "Älä käytä salasanaa", + "mode_settings_persistent_checkbox": "Tallenna tämä välilehti ja avaa se automaattisesti kun käynnistän OnionSharen", + "mode_settings_advanced_toggle_hide": "Piilota edistyneet asetukset", + "mode_settings_advanced_toggle_show": "Näytä edistyneet asetukset", + "gui_quit_warning_cancel": "Peruuta", + "gui_quit_warning_title": "Oletko varma?", + "gui_close_tab_warning_cancel": "Peruuta", + "gui_close_tab_warning_close": "Sulje", + "gui_close_tab_warning_title": "Oletko varma?", + "gui_new_tab_website_button": "Julkaise nettisivu", + "gui_new_tab_receive_button": "Vastaanota tiedostoja", + "gui_new_tab_share_description": "Valitse tietokoneeltasi tiedostot jotka haluat lähettää jollekin. Vastaanottajan pitää käyttää Tor-selainta ladatakseen tiedostot sinulta.", + "gui_new_tab_share_button": "Jaa tiedostoja", + "gui_new_tab_tooltip": "Avaa uusi välilehti", + "gui_new_tab": "Uusi välilehti", + "mode_settings_website_disable_csp_checkbox": "Poista 'Sisällön suojauskäytännön' otsikko käytöstä (mahdollistaa kolmansien osapuolien resurssien käytön nettisivussasi)", + "mode_settings_legacy_checkbox": "Käytä vanhaa osoitetta (v2 onion-palvelu, ei suositella)", + "mode_settings_autostop_timer_checkbox": "Lopeta onion-palvelu tiettyyn kellon aikaan", + "mode_settings_autostart_timer_checkbox": "Aloita onion-palvelu tiettyyn kellon aikaan", + "gui_quit_warning_description": "Jakaminen on päällä jollain välilehdillä. Jos lopetat, kaikki välilehtesi suljetaan. Oletko varma, että haluat lopettaa jakamisen?", + "gui_close_tab_warning_website_description": "Isännöit tällä hetkellä nettisivua. Oletko varma, että haluat sulkea tämän välilehden?", + "gui_close_tab_warning_receive_description": "Olet saamassa tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?", + "gui_close_tab_warning_share_description": "Olet lähettämässä tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?", + "gui_close_tab_warning_persistent_description": "Tämä välilehti on pysyvä. Jos suljet sen, menetät sen käyttämän onion-osoitteen. Oletko varma, että haluat sulkea tämän välilehden?", + "gui_new_tab_website_description": "Isännöi staattinen HTML-onion-nettisivu tietokoneestasi.", + "gui_new_tab_receive_description": "Tee tietokoneestasi online-pudotuslaatikko. Tor-selainta voidaan käyttää tiedostojen lähettämiseen koneellesi.", + "gui_main_page_receive_button": "Aloita vastaanottaminen", + "gui_main_page_share_button": "Aloita jakaminen", + "gui_tab_name_chat": "Keskustelu", + "gui_tab_name_website": "Verkkosivu", + "gui_tab_name_receive": "Vastaanota", + "gui_tab_name_share": "Jaa", + "gui_file_selection_remove_all": "Poista kaikki", + "gui_remove": "Poista", + "mode_settings_receive_webhook_url_checkbox": "Käytä ilmoitusten verkkotoimintokutsua", + "history_receive_read_message_button": "Lue viesti", + "error_port_not_available": "OnionSharen portti ei saatavilla", + "gui_rendezvous_cleanup_quit_early": "Poistu aikaisin", + "gui_rendezvous_cleanup": "Odotetaan Tor-kierrosten sulkeutumista, jotta voidaan varmistaa onnistunut tiedonsiirto.\n\nTässä voi kestää joitain minuutteja.", + "mode_settings_receive_disable_files_checkbox": "Poista käytöstä tiedostojen lataaminen", + "mode_settings_receive_disable_text_checkbox": "Poista käytöstä tekstin syöttö", + "mode_settings_title_label": "Muokattu otsikko", + "gui_main_page_chat_button": "Aloita keskustelu", + "gui_main_page_website_button": "Aloita isännöinti", + "gui_new_tab_chat_button": "Keskustele anonyymisti", + "gui_color_mode_changed_notice": "Käynnistä uudelleen Onionshare, jotta uusi väritila tulee voimaan.", + "gui_settings_theme_dark": "Tumma", + "gui_settings_theme_light": "Vaalea", + "gui_settings_theme_auto": "Automaattinen", + "gui_settings_theme_label": "Teema", + "gui_open_folder_error": "Ei voitu avata kansiota xdg-open:lla. Tiedosto on tässä: {}", + "gui_status_indicator_chat_started": "Keskustellaan", + "gui_status_indicator_chat_scheduled": "Ajastettu…", + "gui_status_indicator_chat_working": "Aloitetaan…", + "gui_status_indicator_chat_stopped": "Valmiina keskustelemaan", + "gui_chat_url_description": "Kuka tahansa tällä Onionshare-osoitteella voi liittyä tähän keskusteluryhmään käyttämällä Tor-selainta: ", + "gui_please_wait_no_button": "Aloitetaan…", + "gui_qr_code_dialog_title": "OnionSharen QR-koodi", + "gui_show_qr_code": "Näytä QR-koodi", + "gui_receive_flatpak_data_dir": "Koska asensin OnionSharen käyttämällä Flatpakia, sinun täytyy tallentaa tiedostot kansioon sijainnissa ~/OnionShare.", + "gui_chat_stop_server": "Pysäytä chat-palvelin", + "gui_chat_start_server": "Perusta chat-palvelin" +} diff --git a/desktop/onionshare/resources/locale/fr.json b/desktop/onionshare/resources/locale/fr.json new file mode 100644 index 00000000..2441c821 --- /dev/null +++ b/desktop/onionshare/resources/locale/fr.json @@ -0,0 +1,345 @@ +{ + "preparing_files": "Compression des fichiers.", + "give_this_url": "Donnez cette adresse au destinataire :", + "ctrlc_to_stop": "Appuyez sur Ctrl+c pour arrêter le serveur", + "not_a_file": "{0:s} n’est pas un fichier valide.", + "other_page_loaded": "L’adresse a été chargée", + "closing_automatically": "Arrêté, car le transfert est achevé", + "systray_menu_exit": "Fermer", + "systray_download_started_title": "Téléchargement OnionShare démarré", + "systray_download_started_message": "Une personne télécharge vos fichiers", + "systray_download_completed_title": "Téléchargement OnionShare terminé", + "systray_download_canceled_title": "Téléchargement OnionShare annulé", + "systray_download_canceled_message": "La personne a annulé le téléchargement", + "help_local_only": "Ne pas utiliser Tor (uniquement pour le développement)", + "help_stay_open": "Continuer le partage après l’envoi des fichiers", + "help_verbose": "Journaliser les erreurs d’OnionShare sur la sortie standard et les erreurs Web sur le disque", + "help_filename": "Liste des fichiers ou dossiers à partager", + "gui_drag_and_drop": "Glisser-déposer des fichiers et dossiers pour commencer le partage", + "gui_add": "Ajouter", + "gui_delete": "Supprimer", + "gui_choose_items": "Sélectionner", + "gui_share_start_server": "Commencer le partage", + "gui_share_stop_server": "Arrêter le partage", + "gui_copy_url": "Copier l’adresse", + "gui_downloads": "Historique de téléchargement", + "gui_canceled": "Annulé", + "gui_copied_url": "L’adresse OnionShare a été copiée dans le presse-papiers", + "gui_please_wait": "Démarrage… Cliquez pour annuler.", + "gui_quit_warning_quit": "Fermer", + "gui_quit_warning_dont_quit": "Annuler", + "gui_settings_autoupdate_timestamp_never": "Jamais", + "gui_settings_language_changed_notice": "Redémarrez OnionShare afin que la nouvelle langue soit appliquée.", + "config_onion_service": "Mise en place du service oignon sur le port {0:d}.", + "give_this_url_stealth": "Donnez cette adresse et cette ligne HidServAuth au destinataire :", + "give_this_url_receive": "Donnez cette adresse à l’expéditeur :", + "give_this_url_receive_stealth": "Donnez cette adresse et cette ligne HidServAuth à l'expéditeur :", + "not_a_readable_file": "{0:s} n’est pas un fichier lisible.", + "timeout_download_still_running": "En attente de la fin du téléchargement", + "systray_download_completed_message": "La personne a terminé de télécharger vos fichiers", + "gui_settings_window_title": "Paramètres", + "gui_settings_autoupdate_timestamp": "Dernière vérification : {}", + "gui_settings_close_after_first_download_option": "Arrêter le partage après l’envoi des fichiers", + "gui_settings_connection_type_label": "Comment OnionShare devrait-il se connecter à Tor ?", + "gui_settings_connection_type_control_port_option": "Se connecter en utilisant le port de contrôle", + "gui_settings_connection_type_socket_file_option": "Se connecter en utilisant un fichier d’interface de connexion", + "gui_settings_socket_file_label": "Fichier d’interface de connexion", + "gui_settings_socks_label": "Port SOCKS", + "gui_settings_authenticate_no_auth_option": "Pas d’authentification, ou authentification par témoin", + "gui_settings_authenticate_password_option": "Mot de passe", + "gui_settings_password_label": "Mot de passe", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ne pas utiliser de pont", + "gui_settings_button_save": "Enregistrer", + "gui_settings_button_cancel": "Annuler", + "gui_settings_button_help": "Aide", + "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 : L’envoi d’un partage volumineux peut prendre des heures", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "zip_progress_bar_format": "Compression : %p %", + "error_ephemeral_not_supported": "OnionShare exige au moins et Tor 0.2.7.1 et python3-stem 1.4.0.", + "help_autostop_timer": "Arrêter le partage après un certain nombre de secondes", + "gui_tor_connection_error_settings": "Dans les paramètres, essayez de changer 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 onion", + "gui_share_stop_server_autostop_timer": "Arrêter le partage ({})", + "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", + "gui_copied_url_title": "L’adresse OnionShare a été copiée", + "gui_quit_title": "Pas si vite", + "gui_share_quit_warning": "Des fichiers sont en cours d’envoi. Voulez-vous vraiment quitter OnionShare ?", + "gui_receive_quit_warning": "Des fichiers sont en cours de réception. Voulez-vous vraiment quitter OnionShare ?", + "gui_settings_whats_this": "Qu’est-ce que ceci ?", + "gui_settings_autoupdate_label": "Vérifier la présence d’une nouvelle version", + "gui_settings_autoupdate_option": "Me signaler toute nouvelle version", + "gui_settings_general_label": "Paramètres généraux", + "gui_settings_sharing_label": "Paramètres de partage", + "gui_settings_connection_type_bundled_option": "Utiliser la version de Tor intégrée dans OnionShare", + "gui_settings_connection_type_automatic_option": "Essayer la configuration automatique avec le Navigateur Tor", + "gui_settings_connection_type_test_button": "Tester la connexion à Tor", + "gui_settings_control_port_label": "Port de contrôle", + "gui_settings_authenticate_label": "Paramètres d’authentification de Tor", + "gui_settings_tor_bridges": "Se connecter en utilisant un pont Tor ?", + "gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés", + "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne. Vérifiez-les de nouveau ou ajoutez-en d’autres.", + "settings_error_unknown": "Impossible de se connecter au contrôleur Tor, car vos paramètres sont incohérents.", + "settings_error_automatic": "Impossible de se connecter au contrôleur Tor. Le Navigateur Tor (téléchargeable sur torproject.org/fr) fonctionne-t-il en arrière-plan ?", + "settings_error_socket_port": "Impossible de se connecter au contrôleur Tor à {}:{}.", + "settings_error_socket_file": "Impossible de se connecter au contrôleur Tor en utilisant le fichier d’interface de connexion {}.", + "settings_error_auth": "Connecté à {}:{}, mais il est impossible de s’authentifier. Est-ce bien un contrôleur Tor ?", + "settings_error_missing_password": "Vous êtes connecté au contrôleur Tor, mais il exige un mot de passe d’authentification.", + "settings_error_unreadable_cookie_file": "Vous êtes connecté au contrôleur Tor, mais le mot de passe est peut-être erroné ou votre utilisateur n’est pas autorisé à lire le fichier témoin.", + "settings_error_bundled_tor_not_supported": "Utiliser la version de Tor intégrée à OnionShare ne fonctionne pas en mode développeur sous Windows ou macOS.", + "settings_error_bundled_tor_timeout": "La connexion à Tor prend trop de temps. Vous n’êtes peut-être pas connecté à Internet ou votre horloge système est-elle mal réglée ?", + "settings_error_bundled_tor_broken": "OnionShare n’a pas réussi à se connecter à Tor :\n{}", + "error_tor_protocol_error": "Une erreur est survenue avec Tor : {}", + "error_tor_protocol_error_unknown": "Une erreur inconnue est survenue avec Tor", + "error_invalid_private_key": "Ce type de clé privée n’est pas pris en charge", + "update_available": "Une nouvelle version d’OnionShare est proposée. Cliquez ici pour l’obtenir.

Vous utilisez la version {} et {} est la dernière version.", + "update_not_available": "Vous utilisez la dernière version d’OnionShare.", + "gui_tor_connection_ask_open_settings": "Oui", + "gui_tor_connection_ask_quit": "Fermer", + "gui_tor_connection_lost": "Vous êtes déconnecté de Tor.", + "share_via_onionshare": "Partager avec OnionShare", + "gui_save_private_key_checkbox": "Utiliser une adresse persistante", + "gui_share_url_description": "Quiconque disposant de cette adresse OnionShare et cette clé privée peut télécharger vos fichiers en utilisant le Navigateur Tor : ", + "gui_receive_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", + "gui_url_label_persistent": "Ce partage ne s’arrêtera pas automatiquement.

Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)", + "gui_url_label_stay_open": "Ce partage ne s’arrêtera pas automatiquement.", + "gui_url_label_onetime": "Ce partage s’arrêtera une fois que le premier téléchargement sera terminé.", + "gui_url_label_onetime_and_persistent": "Ce partage ne s’arrêtera pas automatiquement.

Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)", + "gui_status_indicator_share_stopped": "Prêt à partager", + "gui_status_indicator_share_working": "Démarrage…", + "gui_status_indicator_share_started": "Partage en cours", + "gui_status_indicator_receive_stopped": "Prêt à recevoir", + "gui_status_indicator_receive_working": "Démarrage…", + "gui_status_indicator_receive_started": "Réception", + "gui_file_info": "{} fichiers, {}", + "gui_file_info_single": "{} fichier, {}", + "history_in_progress_tooltip": "{} en cours", + "history_completed_tooltip": "Terminés :{}", + "receive_mode_downloads_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}", + "receive_mode_warning": "Avertissement : Le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur. Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.", + "gui_receive_mode_warning": "Le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur.

Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.", + "receive_mode_received_file": "Reçu : {}", + "gui_mode_share_button": "Partager des fichiers", + "gui_mode_receive_button": "Recevoir des fichiers", + "gui_settings_receiving_label": "Paramètres de réception", + "gui_settings_downloads_label": "Enregistrer les fichiers sous", + "gui_settings_downloads_button": "Parcourir", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "Le mode réception peut-être arrêté par l'expéditeur", + "gui_settings_public_mode_checkbox": "Mode public", + "systray_close_server_title": "Serveur OnionShare arrêté", + "gui_uploads": "Historique d'envoi", + "gui_no_uploads": "Pas encore d'envoi", + "gui_clear_history": "Tout effacer", + "gui_upload_in_progress": "Envoi démarré {}", + "gui_upload_finished_range": "Envoyé {} de {}", + "gui_upload_finished": "{} envoyé", + "gui_download_in_progress": "Téléchargement démarré {}", + "gui_open_folder_error_nautilus": "Impossible d’ouvrir le dossier, car nautilus n’est pas disponible. Le fichier est ici : {}", + "gui_settings_language_label": "Langue", + "help_stealth": "Utilisation de l’autorisation client (avancé)", + "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_autostop_timer": "Arrêter le mode réception ({} 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%", + "error_stealth_not_supported": "Pour utiliser l’autorisation client, Tor 0.2.9.1-alpha (ou le Navigateur Tor 6.5) et python3-stem 1.5.0 ou versions ultérieures sont exigés.", + "gui_settings_stealth_option": "Utiliser l’autorisation du client", + "timeout_upload_still_running": "En attente de la fin de l'envoi", + "gui_settings_autoupdate_check_button": "Vérifier la présence d’une nouvelle version", + "settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services onion éphémères : {}.\nPrend en charge l’authentification client : {}.\nPrend en charge la nouvelle génération d’adresses .onion : {}.", + "update_error_check_error": "Impossible de vérifier l’existence d’une mise à jour : peut-être n’êtes-vous pas connecté à Tor ou le site Web d’OnionShare est-il hors service ?", + "update_error_invalid_latest_version": "Impossible de vérifier la présence d’une mise à jour : le site Web d’OnionShare indique que la version la plus récente est la « {} » qui n’est pas reconnue…", + "gui_tor_connection_ask": "Ouvrir les paramètres pour résoudre le problème de connexion à Tor ?", + "gui_tor_connection_canceled": "Impossible de se connecter à Tor.\n\nAssurez-vous d’être connecté à Internet, puis rouvrez OnionShare et configurez sa connexion à Tor.", + "info_in_progress_uploads_tooltip": "{} envoi(s) en cours", + "info_completed_uploads_tooltip": "{} envoi(s) terminé(s)", + "error_cannot_create_downloads_dir": "Impossible de créer le dossier du mode réception : {}", + "receive_mode_upload_starting": "Un téléversement d’une taille totale de {} commence", + "systray_close_server_message": "Une personne a arrêté le serveur", + "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_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-azure 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_autostop_timer_checkbox": "Utiliser une 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. Veuillez 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. Veuillez la modifier 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 : {}", + "receive_mode_data_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}", + "gui_settings_data_dir_label": "Enregistrer les fichiers dans", + "gui_settings_data_dir_browse_button": "Parcourir", + "systray_page_loaded_message": "L’adresse OnionShare a été chargée", + "systray_share_started_title": "Le partage est commencé", + "systray_share_started_message": "L’envoi de fichiers à quelqu’un est commencé", + "systray_share_completed_title": "Le partage est achevé", + "systray_share_canceled_title": "Le partage a été annulé", + "systray_share_canceled_message": "Quelqu’un a annulé la réception de vos fichiers", + "systray_receive_started_title": "La réception est commencée", + "systray_receive_started_message": "Quelqu’un vous envoie des fichiers", + "gui_all_modes_history": "Historique", + "gui_all_modes_clear_history": "Tout effacer", + "gui_all_modes_transfer_started": "Démarré le {}", + "gui_all_modes_transfer_finished_range": "Transféré le {} à {}", + "gui_all_modes_transfer_finished": "Transféré le {}", + "gui_all_modes_progress_complete": "%p %, {0:s} écoulé.", + "gui_all_modes_progress_starting": "{0:s}, %p % (calcul en cours)", + "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_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_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 {}", + "gui_settings_onion_label": "Paramètres onion", + "gui_all_modes_transfer_canceled_range": "Annulé {} à {}", + "gui_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}", + "gui_start_server_autostart_timer_tooltip": "La minuterie de démarrage automatique se termine à {}", + "gui_waiting_to_start": "Programmé pour démarrer dans {}. Cliquez pour annuler.", + "gui_settings_autostart_timer_checkbox": "Utiliser une minuterie de démarrage automatique", + "gui_settings_autostart_timer": "Démarrer le partage à :", + "gui_server_autostart_timer_expired": "L’heure programmée est déjà passée. Veuillez la modifier pour démarrer le partage.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La minuterie d’arrêt automatique ne peut pas être identique ou antérieure à l’heure de démarrage automatique. Veuillez la modifier pour démarrer le partage.", + "gui_status_indicator_share_scheduled": "Programmé…", + "gui_status_indicator_receive_scheduled": "Programmé…", + "days_first_letter": "j", + "hours_first_letter": "h", + "minutes_first_letter": "min", + "seconds_first_letter": "s", + "gui_website_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut visiter votre site Web en utilisant le Navigateur Tor : ", + "systray_site_loaded_title": "Le site Web a été chargé", + "systray_site_loaded_message": "Le site Web OnionShare a été chargé", + "systray_website_started_title": "Début du partage du site Web", + "systray_website_started_message": "Quelqu’un visite votre site Web", + "gui_website_mode_no_files": "Aucun site Web n’a encore été partagé", + "gui_mode_website_button": "Publier un site Web", + "incorrect_password": "Le mot de passe est erroné", + "gui_settings_individual_downloads_label": "Décocher pour permettre le téléchargement de fichiers individuels", + "history_requests_tooltip": "{} requêtes Web", + "systray_individual_file_downloaded_title": "Le fichier individuel a été chargé", + "systray_individual_file_downloaded_message": "Le fichier individuel {} a été visualisé", + "gui_settings_csp_header_disabled_option": "Désactiver l’en-tête Politique de sécurité de contenu", + "gui_settings_website_label": "Paramètres des sites Web", + "gui_close_tab_warning_title": "Confirmez-vous ?", + "gui_new_tab_website_description": "Hébergez un site Web onion statique HTML à partir de votre ordinateur.", + "gui_new_tab_website_button": "Héberger un site Web", + "gui_new_tab_receive_description": "Transformez votre ordinateur en service de stockage fichiers. Les gens pourront utiliser le Navigateur Tor pour envoyer des fichiers vers votre ordinateur.", + "gui_new_tab_receive_button": "Recevoir des fichiers", + "gui_new_tab_share_description": "Choisissez sur votre ordinateur des fichiers à envoyer à quelqu’un d’autre. La ou les personnes à qui vous souhaitez envoyer des fichiers devront utiliser le Navigateur Tor pour les télécharger de vous.", + "gui_new_tab_share_button": "Partager des fichiers", + "gui_new_tab_tooltip": "Ouvrir un nouvel onglet", + "gui_new_tab": "Nouvel onglet", + "gui_close_tab_warning_persistent_description": "Cet onglet est persistant. Si vous le fermez, vous perdrez l’adresse onion qu’il utilise. Voulez-vous vraiment le fermer ?", + "mode_settings_autostop_timer_checkbox": "Arrêter un service onion à une heure prédéterminée", + "mode_settings_autostart_timer_checkbox": "Démarrer un service onion à une heure prédéterminée", + "mode_settings_website_disable_csp_checkbox": "Ne pas envoyer l’en-tête par défaut de Politique de sécurité de contenu (permet à votre site Web d’utiliser des ressources tierces)", + "mode_settings_receive_data_dir_browse_button": "Parcourir", + "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans", + "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)", + "mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)", + "mode_settings_public_checkbox": "Ceci est un service OnionShare public (sans clé privée)", + "mode_settings_persistent_checkbox": "Enregistrer cet onglet et l’ouvrir automatiquement quand j’ouvre OnionShare", + "mode_settings_advanced_toggle_hide": "Cacher les paramètres avancés", + "mode_settings_advanced_toggle_show": "Afficher les paramètres avancés", + "gui_quit_warning_cancel": "Annuler", + "gui_quit_warning_description": "Le partage est actif dans certains de vos onglets. Si vous fermez l’appli, tous vos onglets seront fermés. Voulez-vous vraiment la fermer ?", + "gui_quit_warning_title": "Confirmez-vous ?", + "gui_close_tab_warning_cancel": "Annuler", + "gui_close_tab_warning_close": "Fermer", + "gui_close_tab_warning_website_description": "Vous hébergez activement un site Web. Voulez-vous vraiment fermer cet onglet ?", + "gui_close_tab_warning_receive_description": "Vous êtes en train de recevoir des fichiers. Voulez-vous vraiment fermer cet onglet ?", + "gui_close_tab_warning_share_description": "Vous êtes en train d’envoyer des fichiers. Voulez-vous vraiment fermer cet onglet ?", + "gui_tab_name_chat": "Dialogue en ligne", + "gui_tab_name_website": "Site Web", + "gui_tab_name_receive": "Recevoir", + "gui_tab_name_share": "Partager", + "gui_new_tab_chat_button": "Dialoguer anonymement", + "gui_open_folder_error": "Échec d’ouverture du dossier avec xdg-open. Le fichier est ici : {}", + "gui_qr_code_description": "Balayez ce code QR avec un lecteur de code QR, tel que l’appareil photo votre appareil, afin de partager plus facilement l’adresse OnionShare avec quelqu’un.", + "gui_qr_code_dialog_title": "Code QR d’OnionShare", + "gui_show_qr_code": "Afficher le code QR", + "gui_receive_flatpak_data_dir": "Comme vous avez installé OnionShare grâce à Flatpak, vous devez enregistrer vos fichiers dans un sous-dossier de ~/OnionShare.", + "gui_chat_stop_server": "Arrêter le serveur de dialogue en ligne", + "gui_chat_start_server": "Démarrer le serveur de dialogue en ligne", + "gui_chat_stop_server_autostop_timer": "Arrêter le serveur de dialogue en ligne ({})", + "gui_file_selection_remove_all": "Tout supprimer", + "gui_remove": "Supprimer", + "gui_main_page_chat_button": "Lancer le dialogue en ligne", + "gui_main_page_website_button": "Lancer l’hébergement", + "gui_main_page_receive_button": "Lancer la réception", + "gui_main_page_share_button": "Lancer le partage", + "gui_chat_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut se joindre à ce salon de discussion avec le Navigateur Tor : ", + "error_port_not_available": "Le port OnionShare n’est pas accessible", + "gui_rendezvous_cleanup_quit_early": "Fermer avant", + "gui_rendezvous_cleanup": "En attente de la fermeture des circuits Tor pour être certain que vos fichiers ont été transférés avec succès.\n\nCela pourrait prendre quelques minutes.", + "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué.", + "history_receive_read_message_button": "Lire le message", + "mode_settings_receive_webhook_url_checkbox": "Utiliser un point d’ancrage Web de notification", + "mode_settings_receive_disable_files_checkbox": "Désactiver le téléversement de fichiers", + "mode_settings_receive_disable_text_checkbox": "Désactiver l’envoi de texte", + "mode_settings_title_label": "Titre personnalisé", + "gui_status_indicator_chat_started": "En conversation", + "gui_status_indicator_chat_scheduled": "Planifié…", + "gui_status_indicator_chat_working": "Démarrage…", + "gui_status_indicator_chat_stopped": "Prêt à dialoguer", + "gui_copied_client_auth_title": "Clé privée copiée", + "gui_please_wait_no_button": "Démarrage…", + "gui_copied_client_auth": "Clé privée copiée dans le presse-papiers", + "gui_qr_label_url_title": "Adresse OnionShare", + "gui_hide": "Cacher", + "gui_qr_label_auth_string_title": "Clé privée", + "gui_copy_client_auth": "Copier la clé privée", + "gui_share_url_public_description": "Quiconque disposant de cette adresse OnionShare peut télécharger vos fichiers en utilisant le Navigateur Tor : ", + "gui_url_instructions": "Tout d'abord, envoyez l'adresse OnionShare ci-dessous :", + "gui_settings_theme_light": "Clair", + "gui_reveal": "Montrer", + "gui_chat_url_public_description": "Quiconque disposant de cette adresse OnionShare peut se joindre à ce salon de discussion en utilisant le Navigateur Tor : ", + "gui_url_instructions_public_mode": "Envoyez l'adresse OnionShare ci-dessous :", + "gui_settings_theme_label": "Thème", + "gui_settings_theme_auto": "Automatique", + "gui_settings_theme_dark": "Sombre", + "gui_website_url_public_description": "Quiconque disposant de cette adresse OnionShare peut visiter votre site Web en utilisant le Navigateur Tor : ", + "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge la fonctionnalité \"stealth\" (le client d'authentification). Veuillez essayer avec une version plus récente de Tor, ou utilisez le mode 'public' s'il n'a pas besoin d'être privé.", + "gui_receive_url_public_description": "Quiconque disposant de cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", + "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :", + "gui_dragdrop_sandbox_flatpak": "Afin de rendre la sandbox Flatpak plus sécurisée, le glisser-coller n'est pas pris en charge. Utilisez les boutons Ajouter des fichiers et Ajouter des dossiers pour chercher vos fichiers à la place.", + "moat_solution_empty_error": "Vous devez saisir les caractères apparaissant sur l'image", + "gui_settings_stop_active_tabs_label": "Il y a des services en cours d'éxécution dans certains de vos onglets.\nVous devez arrêter tout les services pour changer vos paramètres Tor.", + "moat_captcha_label": "Résolvez le CAPTCHA pour demander un pont.", + "gui_tor_settings_window_title": "Paramètres Tor", + "gui_settings_controller_extras_label": "Paramètres Tor", + "gui_settings_tor_bridges_label": "Les ponts vous aident à accéder au réseau Tor dans les lieux où Tor est bloqué. Selon l'endroit où vous êtes, un pont peut marcher mieux qu'un autre.", + "gui_settings_bridge_use_checkbox": "Utiliser un pont", + "gui_settings_bridge_radio_builtin": "Choisir un pont pré-configuré", + "gui_settings_bridge_none_radio_option": "Ne pas utiliser de pont", + "gui_settings_bridge_moat_radio_option": "Demander un pont depuis torproject.org", + "gui_settings_bridge_moat_button": "Demander un nouveau pont", + "gui_settings_bridge_custom_radio_option": "Fournir un pont que vous avez appris par une source sure", + "gui_settings_bridge_custom_placeholder": "écrire address:port (une par ligne)", + "gui_settings_moat_bridges_invalid": "Vous n'avez pas encore demandé un pont depuis torprohect.com.", + "gui_settings_version_label": "Vous utilisez OnionShare {}", + "gui_settings_help_label": "Besoin d'aide ? Allez voir docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Envoyer en-tête de Politique de sécurité de contenu personnalisé", + "moat_contact_label": "Entrain de contacter BridgeDB...", + "moat_captcha_placeholder": "Saisissez les caractères apparaissant sur l'image", + "moat_captcha_submit": "Envoyer", + "moat_captcha_reload": "Recharger", + "moat_bridgedb_error": "Erreur en tentant de contacter BridgeDB.", + "moat_captcha_error": "La solution est erronée. Veuillez réessayer.", + "mode_tor_not_connected_label": "OnionShare n'est pas connecté au réseau Tor" +} diff --git a/desktop/onionshare/resources/locale/ga.json b/desktop/onionshare/resources/locale/ga.json new file mode 100644 index 00000000..7d8563a9 --- /dev/null +++ b/desktop/onionshare/resources/locale/ga.json @@ -0,0 +1,236 @@ +{ + "config_onion_service": "Seirbhís onion á shocrú ar phort {0:d}.", + "preparing_files": "Comhaid á gcomhbhrú.", + "give_this_url": "Tabhair an seoladh seo don fhaighteoir:", + "give_this_url_stealth": "Tabhair an seoladh seo agus an líne HidServAuth seo don fhaighteoir:", + "give_this_url_receive": "Tabhair an seoladh seo don seoltóir:", + "give_this_url_receive_stealth": "Tabhair an seoladh seo agus an líne HidServAuth seo don seoltóir:", + "ctrlc_to_stop": "Brúigh Ctrl+C chun stop a chur leis an bhfreastalaí", + "not_a_file": "Ní comhad bailí é {0:s}.", + "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_autostop_timer": "Cuireadh stop leis toisc go bhfuil an t-amadóir uathstoptha caite", + "closing_automatically": "Cuireadh stop leis toisc go bhfuil an t-aistriú 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", + "systray_menu_exit": "Scoir", + "systray_download_started_title": "Tosaíodh Íoslódáil OnionShare", + "systray_download_started_message": "Thosaigh úsáideoir ag íoslódáil do chuid comhad", + "systray_download_completed_title": "Críochnaíodh Íoslódáil OnionShare", + "systray_download_completed_message": "Tá do chuid comhad íoslódáilte ag an úsáideoir", + "systray_download_canceled_title": "Cuireadh Íoslódáil OnionShare ar ceal", + "systray_download_canceled_message": "Chuir an t-úsáideoir an íoslódáil ar ceal", + "systray_upload_started_title": "Tosaíodh Uaslódáil OnionShare", + "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_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_verbose": "Déan tuairisc ar earráidí OnionShare ar stdout, agus earráidí Gréasáin ar an diosca", + "help_filename": "Liosta comhad nó fillteán le comhroinnt", + "help_config": "Suíomh saincheaptha don chomhad cumraíochta JSON (roghnach)", + "gui_drag_and_drop": "Tarraing agus scaoil comhaid agus fillteáin chun iad a chomhroinnt", + "gui_add": "Cuir Leis", + "gui_delete": "Scrios", + "gui_choose_items": "Roghnaigh", + "gui_share_start_server": "Comhroinn", + "gui_share_stop_server": "Stop ag comhroinnt", + "gui_share_stop_server_autostop_timer": "Stop ag Comhroinnt ({})", + "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_autostop_timer": "Stop an Mód Glactha ({} fágtha)", + "gui_receive_stop_server_autostop_timer_tooltip": "Amadóir uathstoptha caite {}", + "gui_copy_url": "Cóipeáil an Seoladh", + "gui_downloads": "Stair Íoslódála", + "gui_no_downloads": "Níl aon rud íoslódáilte agat fós", + "gui_canceled": "Curtha ar ceal", + "gui_copied_url_title": "Cóipeáladh an Seoladh OnionShare", + "gui_copied_url": "Cóipeáladh an seoladh OnionShare go dtí an ghearrthaisce", + "gui_please_wait": "Ag tosú... Cliceáil lena chur ar ceal.", + "gui_download_upload_progress_complete": "%[%, {0:s} caite.", + "gui_download_upload_progress_starting": "{0:s}, %p% (á áireamh)", + "gui_download_upload_progress_eta": "{0:s}, am teachta measta: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Fan soic", + "gui_share_quit_warning": "Tá tú le linn roinnt comhad a sheoladh. An bhfuil tú cinnte gur mhaith leat OnionShare a scor?", + "gui_receive_quit_warning": "Tá tú le linn roinnt comhad a íoslódáil. An bhfuil tú cinnte gur mhaith leat OnionShare a scor?", + "gui_quit_warning_quit": "Scoir", + "gui_quit_warning_dont_quit": "Cealaigh", + "zip_progress_bar_format": "Á chomhbhrú: %p%", + "error_stealth_not_supported": "Chun údarú cliaint a úsáid, teastaíonn uait Tor 0.2.9.1-alpha (nó Brabhsálaí 6.5) agus python3-stem 1.5.0.", + "error_ephemeral_not_supported": "Teastaíonn uait ar a laghad Tor 0.2.7.1 agus python3-stem 1.4.0 chun OnionShare a úsáid.", + "gui_settings_window_title": "Socruithe", + "gui_settings_whats_this": "Cad é seo", + "gui_settings_stealth_option": "Úsáid údarú cliaint", + "gui_settings_autoupdate_label": "Lorg nuashonruithe", + "gui_settings_autoupdate_option": "Cuir in iúl dom nuair a bheidh leagan nua ar fáil", + "gui_settings_autoupdate_timestamp": "Seiceáilte: {}", + "gui_settings_autoupdate_timestamp_never": "Níor seiceáladh riamh", + "gui_settings_autoupdate_check_button": "Lorg Nuashonrú", + "gui_settings_general_label": "Socruithe ginearálta", + "gui_settings_sharing_label": "Socruithe comhroinnte", + "gui_settings_close_after_first_download_option": "Stop ag comhroinnt tar éis na comhaid a sheoladh", + "gui_settings_connection_type_label": "Cén chaoi ar chóir do OnionShare ceangal le Tor?", + "gui_settings_connection_type_bundled_option": "Úsáid an leagan de Tor ionsuite in OnionShare", + "gui_settings_connection_type_automatic_option": "Déan cumraíocht uathoibríoch le Brabhsálaí Tor", + "gui_settings_connection_type_control_port_option": "Ceangal trí phort rialaithe", + "gui_settings_connection_type_socket_file_option": "Ceangal trí chomhad soicéid", + "gui_settings_connection_type_test_button": "Tástáil an Ceangal le Tor", + "gui_settings_control_port_label": "Port rialaithe", + "gui_settings_socket_file_label": "Comhad soicéid", + "gui_settings_socks_label": "Port SOCKS", + "gui_settings_authenticate_label": "Socruithe fíordheimhnithe Tor", + "gui_settings_authenticate_no_auth_option": "Gan fíordheimhniú, nó fíordheimhniú le fianán", + "gui_settings_authenticate_password_option": "Focal faire", + "gui_settings_password_label": "Focal faire", + "gui_settings_tor_bridges": "Tacaíocht do dhroichid Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ná húsáid droichid", + "gui_settings_tor_bridges_obfs4_radio_option": "Bain úsáid as córais iompair ionphlugáilte ionsuite obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Bain úsáid as córais iompair ionphlugáilte ionsuite obfs4 (obfs4proxy de dhíth)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Bain úsáid as córais iompair ionphlugáilte ionsuite meek_lite(Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bain úsáid as córais iompair ionphlugáilte ionsuite meek_lite (Azure) (obfs4proxy de dhíth)", + "gui_settings_meek_lite_expensive_warning": "Rabhadh: Tá sé an-chostasach ar Thionscadal Tor na droichid meek_lite a chur ar fáil.

Iarraimid ort gan iad a úsáid má tá tú in ann ceangal díreach a bhunú le Tor, nó trí chóras iompair obfs4, nó trí dhroichead eile.", + "gui_settings_tor_bridges_custom_radio_option": "Úsáid droichid shaincheaptha", + "gui_settings_tor_bridges_custom_label": "Is féidir leat droichid a fháil ó https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Níl aon cheann de na droichid ag obair.\nSeiceáil arís iad, nó bain triail as droichid eile.", + "gui_settings_button_save": "Sábháil", + "gui_settings_button_cancel": "Cealaigh", + "gui_settings_button_help": "Cabhair", + "gui_settings_autostop_timer_checkbox": "Úsáid an t-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 {}:{}.", + "settings_error_socket_file": "Ní féidir ceangal a bhunú leis an rialaitheoir Tor trí chomhad soicéid {}.", + "settings_error_auth": "Ceangailte le {}:{}, ach ní féidir an ceangal a fhíordheimhniú. B'fhéidir nach rialaitheoir Tor é seo?", + "settings_error_missing_password": "Ceangailte le rialaitheoir Tor, ach teastaíonn focal faire uaidh.", + "settings_error_unreadable_cookie_file": "Ceangailte le rialaitheoir Tor, ach seans go bhfuil an focal faire mícheart, nó níl cead ag an úsáideoir an comhad ina bhfuil na fianáin a léamh.", + "settings_error_bundled_tor_not_supported": "Ní féidir an leagan de Tor a thagann le OnionShare a úsáid sa mód forbartha ar Windows nó ar macOS.", + "settings_error_bundled_tor_timeout": "An iomarca ama ag ceangal le Tor. B'fhéidir nach bhfuil ceangailte leis an Idirlíon, nó nach bhfuil clog do chórais socraithe mar is ceart?", + "settings_error_bundled_tor_broken": "Níorbh fhéidir le OnionShare ceangal le Tor sa gcúlra:\n{}", + "settings_test_success": "Ceangailte leis an rialaitheoir Tor.\n\nLeagan de Tor: {}\nTacaíonn sé le seirbhísí onion gearrshaolacha: {}.\nTacaíonn sé le fíordheimhniú cliaint: {}.\nTacaíonn sé le seoltaí .onion den chéad ghlúin eile: {}.", + "error_tor_protocol_error": "Tharla earráid le Tor: {}", + "error_tor_protocol_error_unknown": "Tharla earráid anaithnid le Tor", + "error_invalid_private_key": "Ní thacaítear le heochair phríobháideach den sórt seo", + "connecting_to_tor": "Ag ceangal le líonra Tor", + "update_available": "Leagan nua de OnionShare ar fáil. Cliceáil anseo lena íoslódáil.

Tá {} agat agus is é {} an leagan is déanaí.", + "update_error_check_error": "Theip orainn nuashonrú a lorg: B'fhéidir nach bhfuil tú ceangailte le Tor, nó nach bhfuil suíomh OnionShare ag obair faoi láthair?", + "update_error_invalid_latest_version": "Theip orainn nuashonruithe a lorg: Deir suíomh OnionShare gurb é '{}' an leagan is déanaí ach ní aithnítear é seo…", + "update_not_available": "Tá an leagan is déanaí de OnionShare agat cheana.", + "gui_tor_connection_ask": "An bhfuil fonn ort na socruithe líonra a oscailt chun an fhadhb a réiteach?", + "gui_tor_connection_ask_open_settings": "Tá", + "gui_tor_connection_ask_quit": "Scoir", + "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_autostop_timer": "Bhí an t-amadóir uathstoptha caite sular thosaigh an freastalaí. Caithfidh tú comhroinnt nua a chruthú.", + "gui_server_autostop_timer_expired": "Tá an t-amadóir uathstoptha caite cheana. Caithfidh tú é a athshocrú sular féidir leat comhaid a chomhroinnt.", + "share_via_onionshare": "Comhroinn trí OnionShare", + "gui_save_private_key_checkbox": "Úsáid seoladh seasmhach", + "gui_share_url_description": "Tá aon duine a bhfuil an seoladh agus eochair phríobháideach seo OnionShare aige/aici in ann do chuid comhad a íoslódáil le Brabhsálaí Tor: ", + "gui_receive_url_description": "Tá aon duine a bhfuil an seoladh agus eochair phríobháideach seo OnionShare aige/aici in ann comhaid a uaslódáil go dtí do ríomhaire le Brabhsálaí Tor: ", + "gui_url_label_persistent": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.

Úsáidfear an seoladh seo arís gach uair a dhéanfaidh tú comhroinnt. (Chun seoladh aon uaire a úsáid, múch \"Úsáid seoladh seasmhach\" sna socruithe.)", + "gui_url_label_stay_open": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.", + "gui_url_label_onetime": "Stopfaidh an chomhroinnt seo nuair a chríochnóidh sé den chéad uair.", + "gui_url_label_onetime_and_persistent": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.

Úsáidfear an seoladh seo arís gach uair a dhéanfaidh tú comhroinnt. (Chun seoladh aon uaire a úsáid, múch \"Úsáid seoladh seasmhach\" sna socruithe.)", + "gui_status_indicator_share_stopped": "Réidh le comhroinnt", + "gui_status_indicator_share_working": "Á thosú…", + "gui_status_indicator_share_started": "Comhroinnt", + "gui_status_indicator_receive_stopped": "Réidh le glacadh le comhaid", + "gui_status_indicator_receive_working": "Á thosú…", + "gui_status_indicator_receive_started": "Glacadh", + "gui_file_info": "{} comhad, {}", + "gui_file_info_single": "{} chomhad, {}", + "history_in_progress_tooltip": "{} ar siúl", + "history_completed_tooltip": "{} críochnaithe", + "info_in_progress_uploads_tooltip": "{} uaslódáil ar siúl faoi láthair", + "info_completed_uploads_tooltip": "{} uaslódáil críochnaithe", + "error_cannot_create_downloads_dir": "Níorbh fhéidir fillteán a chruthú do chomhaid a nglacann tú leo: {}", + "receive_mode_downloads_dir": "Cuirfear comhaid a sheoltar chugat san fhillteán seo: {}", + "receive_mode_warning": "Rabhadh: Sa mód glactha, beidh daoine in ann comhaid a uaslódáil ar do ríomhaire, fiú comhaid chontúirteacha a dhéanfadh dochar do do ríomhaire dá n-osclófá iad. Ná hoscail ach comhaid ó dhaoine iontaofa mura bhfuil tú i do shaineolaí cruthanta slándála.", + "gui_receive_mode_warning": "Sa mód glactha, beidh daoine in ann comhaid a uaslódáil ar do ríomhaire.

Tá comhaid áirithe an-chontúirteach agus dhéanfaidís dochar do do ríomhaire dá n-osclófá iad. Ná hoscail ach comhaid ó dhaoine iontaofa mura bhfuil tú i do shaineolaí cruthanta slándála.", + "receive_mode_upload_starting": "Uaslódáil, méid iomlán {}, á tosú", + "receive_mode_received_file": "Faighte: {}", + "gui_mode_share_button": "Comhroinn Comhaid", + "gui_mode_receive_button": "Glac le Comhaid", + "gui_settings_receiving_label": "Socruithe glactha", + "gui_settings_downloads_label": "Sábháil comhaid i", + "gui_settings_downloads_button": "Brabhsáil", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "Tá cead ag an seoltóir stop a chur leis an mód glactha", + "gui_settings_public_mode_checkbox": "Mód poiblí", + "systray_close_server_title": "Tá an freastalaí OnionShare dúnta", + "systray_close_server_message": "Dhún úsáideoir an freastalaí", + "systray_page_loaded_title": "Lódáladh an leathanach", + "systray_download_page_loaded_message": "Lódáil úsáideoir an leathanach íoslódála", + "systray_upload_page_loaded_message": "Lódáil úsáideoir an leathanach uaslódála", + "gui_uploads": "Stair Uaslódála", + "gui_no_uploads": "Níl aon rud uaslódáilte agat fós", + "gui_clear_history": "Glan Uile", + "gui_upload_in_progress": "Tosaíodh an Uaslódáil {}", + "gui_upload_finished_range": "Uaslódáladh {} go {}", + "gui_upload_finished": "Uaslódáladh {}", + "gui_download_in_progress": "Tosaíodh an Íoslódáil {}", + "gui_open_folder_error_nautilus": "Ní féidir an fillteán a oscailt toisc nach bhfuil nautilus ar fáil. Tá an comhad anseo: {}", + "gui_settings_language_label": "Do rogha teanga", + "gui_settings_language_changed_notice": "Atosaigh OnionShare chun an teanga nua a chur i bhfeidhm.", + "gui_add_files": "Cuir Comhaid Leis", + "gui_add_folder": "Cuir Fillteán Leis", + "gui_stop_server_autostop_timer_tooltip": "Críochnóidh an t-amadóir uathstoptha ag {}", + "gui_start_server_autostart_timer_tooltip": "Críochnóidh an t-amadóir uath-thosaithe ag {}", + "gui_waiting_to_start": "Tosóidh sé i gceann {}. Cliceáil lena chur ar ceal.", + "gui_settings_onion_label": "Socruithe Onion", + "gui_settings_autostart_timer_checkbox": "Úsáid an t-amadóir uath-thosaithe", + "gui_settings_autostart_timer": "Tosaigh ag comhroinnt ag:", + "gui_server_autostart_timer_expired": "Tá an t-am sceidealta caite cheana. Caithfidh tú é a nuashonrú chun comhaid a chomhroinnt.", + "gui_connect_to_tor_for_onion_settings": "Ceangail le Tor chun socruithe na seirbhíse onion a fheiceáil", + "gui_status_indicator_share_scheduled": "Sceidealaithe…", + "gui_status_indicator_receive_scheduled": "Sceidealaithe…", + "error_cannot_create_data_dir": "Níorbh fhéidir fillteán sonraí OnionShare a chruthú: {}", + "gui_settings_data_dir_label": "Sábháil comhaid i", + "gui_settings_data_dir_browse_button": "Brabhsáil", + "systray_page_loaded_message": "Lódáladh an seoladh OnionShare", + "systray_share_started_title": "Tosaíodh an Chomhroinnt", + "systray_share_started_message": "Seoladh na gcomhad á thosú", + "systray_share_completed_title": "Comhroinnt curtha i gcrích", + "systray_receive_started_message": "Tá duine éigin ag seoladh comhad chugat", + "gui_all_modes_history": "Stair", + "gui_all_modes_clear_history": "Glan Uile", + "gui_all_modes_transfer_started": "Tosaithe {}", + "gui_all_modes_transfer_finished_range": "Aistrithe {} - {}", + "gui_all_modes_transfer_finished": "Aistrithe {}", + "gui_all_modes_transfer_canceled_range": "Cealaithe {} - {}", + "gui_all_modes_transfer_canceled": "Cealaithe {}", + "systray_share_completed_message": "Seoladh na comhaid", + "systray_share_canceled_title": "Cealaíodh an Chomhroinnt", + "systray_share_canceled_message": "Chealaigh duine éigin an chomhroinnt", + "gui_all_modes_progress_starting": "{0:s}, %p% (á áireamh)", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_share_mode_no_files": "Níl aon chomhaid seolta fós", + "days_first_letter": "l", + "hours_first_letter": "u", + "minutes_first_letter": "n", + "seconds_first_letter": "s", + "gui_mode_website_button": "Foilsigh an Suíomh", + "incorrect_password": "Focal faire mícheart", + "history_requests_tooltip": "{} iarratas gréasáin", + "gui_settings_csp_header_disabled_option": "Díchumasaigh an ceanntásc Content Security Policy", + "gui_settings_website_label": "Socruithe an tsuímh", + "gui_please_wait_no_button": "Á thosú…", + "gui_hide": "Folaigh", + "gui_reveal": "Nocht", + "gui_qr_label_auth_string_title": "Eochair Phríobháideach", + "gui_qr_label_url_title": "Seoladh OnionShare", + "gui_qr_code_dialog_title": "Cód QR OnionShare", + "gui_show_qr_code": "Taispeáin an Cód QR", + "gui_copied_client_auth": "Cóipeáladh an Eochair Phríobháideach go dtí an ghearrthaisce", + "gui_copied_client_auth_title": "Cóipeáladh an Eochair Phríobháideach", + "gui_copy_client_auth": "Cóipeáil an Eochair Phríobháideach", + "gui_receive_flatpak_data_dir": "Toisc gur bhain tú úsáid as Flatpak chun OnionShare a shuiteáil, caithfidh tú comhaid a shábháil in ~/OnionShare.", + "gui_chat_stop_server": "Stop an freastalaí comhrá", + "gui_chat_start_server": "Tosaigh an freastalaí comhrá", + "gui_file_selection_remove_all": "Bain Uile", + "gui_remove": "Bain" +} diff --git a/desktop/onionshare/resources/locale/gl.json b/desktop/onionshare/resources/locale/gl.json new file mode 100644 index 00000000..6600dd9b --- /dev/null +++ b/desktop/onionshare/resources/locale/gl.json @@ -0,0 +1,245 @@ +{ + "not_a_readable_file": "{0:s} non é un ficheiro lexible.", + "other_page_loaded": "O enderezo cargou", + "incorrect_password": "Contrasinal incorrecto", + "close_on_autostop_timer": "Detido porque o temporizador de parada automática rematou", + "closing_automatically": "Detido porque se completou a transferencia", + "large_filesize": "Aviso: unha compartición moi grande podería tomar horas", + "gui_drag_and_drop": "Arrastra e solta ficheiros e cartafoles para compartir", + "gui_add": "Engadir", + "gui_add_files": "Engadir ficheiros", + "gui_add_folder": "Engadir cartafol", + "gui_remove": "Eliminar", + "gui_file_selection_remove_all": "Eliminar todo", + "gui_choose_items": "Escolle", + "gui_share_start_server": "Comeza a compartir", + "gui_share_stop_server": "Deixar de compartir", + "gui_share_stop_server_autostop_timer": "Deixar de compartir ({})", + "gui_chat_start_server": "Inicia o servidor de chat", + "gui_chat_stop_server": "Deter o servidor de chat", + "gui_stop_server_autostop_timer_tooltip": "O temporizador de detención automática rematará o {}", + "gui_start_server_autostart_timer_tooltip": "O temporizador de inicio automático comeza o {}", + "gui_receive_start_server": "Iniciar o modo de recepción", + "gui_receive_stop_server": "Deter o modo de Recepción", + "gui_receive_stop_server_autostop_timer": "Deter o modo Recepción ({} restante)", + "gui_receive_flatpak_data_dir": "Debido a que instalaches OnionShare usando Flatpk, tes que gardar os ficheiros nun cartafol dentro de ~/OnionShare.", + "gui_copy_url": "Copiar enderezo", + "gui_canceled": "Cancelado", + "gui_copied_url_title": "Enderezo de OnionShare copiado", + "gui_copied_url": "Enderezo OnionShare copiado ó portapapeis", + "gui_show_qr_code": "Mostrar código QR", + "gui_qr_code_dialog_title": "Código QR OnionShare", + "gui_waiting_to_start": "Programado para comezar en {}. Fai clic para cancelar.", + "gui_please_wait": "Iniciando... Fai click para cancelar.", + "zip_progress_bar_format": "Comprimindo: %p%", + "gui_settings_window_title": "Axustes", + "gui_settings_autoupdate_label": "Comproba se hai nova versión", + "gui_settings_autoupdate_option": "Avisarme cando esté dispoñible unha nova versión", + "gui_settings_autoupdate_timestamp": "Última comprobación: {}", + "gui_settings_autoupdate_timestamp_never": "Nunca", + "gui_settings_autoupdate_check_button": "Comprobar se hai nova versión", + "gui_settings_connection_type_label": "Como debe conectarse OnionShare a Tor?", + "gui_settings_connection_type_bundled_option": "Usa a versión de Tor incluída en OnionShare", + "gui_settings_connection_type_automatic_option": "Intenta a configuración automática con Tor Browser", + "gui_settings_connection_type_control_port_option": "Conecta usando porto de control", + "gui_settings_connection_type_socket_file_option": "Conecta usando ficheiro socket", + "gui_settings_connection_type_test_button": "Probar conexión con Tor", + "gui_settings_control_port_label": "Porto de control", + "gui_settings_socket_file_label": "Ficheiro Socket", + "gui_settings_socks_label": "Porto SOCKS", + "gui_settings_authenticate_label": "Axustes de autenticación Tor", + "gui_settings_authenticate_no_auth_option": "Sen autenticación, ou autenticación por cookie", + "gui_settings_authenticate_password_option": "Contrasinal", + "gui_settings_password_label": "Contrasinal", + "gui_settings_tor_bridges": "Conectar usando unha ponte Tor?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Non usar pontes", + "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transporte engadido obfs4 incluído", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transporte engadido obfs4 (require obfs4proxy) incluído", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transporte engadido meek_lite (Azure) incluído", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transporte engadido meek_lite (Azure) incluído (require obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure requiren moitos recursos do Proxecto Tor.

Utilízao só se non podes conectar directamente con Tor, vía transporte obfs4 ou outras pontes habituais.", + "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", + "gui_settings_tor_bridges_custom_label": "Podes obter pontes en https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Non funciona ningunha das pontes engadidas. Compróbaas ou engade outras.", + "gui_settings_button_save": "Gardar", + "gui_settings_button_cancel": "Cancelar", + "gui_settings_button_help": "Axuda", + "settings_test_success": "Conectado ó controlador Tor.\n\nVersión Tor: {}\nSoporte de servicios efémeros onion: {}.\nSoporte da autenticación do cliente: {}.\nSoporte de enderezos next-gen .onion: {}.", + "connecting_to_tor": "Conectando á rede Tor", + "update_available": "Nova saída OnionShare. Preme aquí para obtela.

Estas a usar {} e a última é {}.", + "update_error_invalid_latest_version": "Non se puido comprobar actualización: A web de OnionShare di que a última versión non é recoñecible '{}'…", + "update_error_check_error": "Non se puido comprobar actualización: Pode que non estés conectado a Tor, ou a web OnionShare está caída?", + "update_not_available": "Xa estás executando a última OnionShare.", + "gui_tor_connection_ask": "Abrir os axustes para arranxar a conexión a Tor?", + "gui_tor_connection_ask_open_settings": "Si", + "gui_tor_connection_ask_quit": "Non", + "gui_tor_connection_error_settings": "Intenta cambiar nos axustes o xeito en que OnionShare se conecta á rede Tor.", + "gui_tor_connection_canceled": "Non hai conexión a Tor.\n\nAsegúrate de ter conexión a Internet, volve a abrir OnionShare e configura a súa conexión a Tor.", + "gui_tor_connection_lost": "Desconectado de Tor.", + "gui_server_started_after_autostop_timer": "O temporizador de detención automática esgotouse antes de iniciar o servidor. Fai outra compartición.", + "gui_server_autostop_timer_expired": "O temporizador de detención automática esgotouse. Configúrao para comezar a compartir.", + "gui_server_autostart_timer_expired": "A hora programada xa pasou. Configúraa para comezar a compartir.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "A hora de detención automática non pode ser a mesma ou anterior á hora de inicio. Configúraa para comezar a compartir.", + "share_via_onionshare": "Compartir vía OnionShare", + "gui_share_url_description": "Calquera con este enderezo OnionShare e chave privada pode descargar os teus ficheiros usando o Tor Browser: ", + "gui_website_url_description": "Calqueracon este enderezo OnionShare e chave privada pode visitar o teu sition web usando Tor Browser: ", + "gui_receive_url_description": "Calquera con este enderezo OnionShare e chave privada pode subir ficheiros ó teu ordenador usando Tor Browser: ", + "gui_chat_url_description": "Calquera con este enderezo OnionShare e chave privada pode unirse a esta sala de conversa usando Tor Browser: ", + "gui_url_label_persistent": "Esta compartición non se rematará automáticamente.

En futuras comparticións reutilizará o enderezo. (Para enderezos dun só uso, desactiva nos axustes \"Usar enderezo persistente\".)", + "gui_url_label_stay_open": "Este enderezo non desaparecerá automáticamente.", + "gui_url_label_onetime": "Esta compartición deterase tras o primeiro completado.", + "gui_url_label_onetime_and_persistent": "Esta compartición non se deterá automáticamente.

Cada futura compartición reutilizará o enderezo. (Para usar enderezos dun só uso, desactiva nos axustes \"Usar enderezo persistente\".)", + "gui_status_indicator_share_stopped": "Preparado para compartir", + "gui_status_indicator_share_working": "Comezando…", + "gui_status_indicator_share_scheduled": "Programado…", + "gui_status_indicator_share_started": "Compartindo", + "gui_status_indicator_receive_stopped": "Preparado para recibir", + "gui_status_indicator_receive_working": "Comezando…", + "gui_status_indicator_receive_scheduled": "Programado…", + "gui_status_indicator_receive_started": "Recibindo", + "gui_file_info": "{} ficheiros, {}", + "gui_file_info_single": "{} ficheiro, {}", + "history_in_progress_tooltip": "{} en progreso", + "history_completed_tooltip": "{} completado", + "history_requests_tooltip": "{} solicitudes web", + "error_cannot_create_data_dir": "Non se puido crear o cartafol de datos OnionShare: {}", + "gui_receive_mode_warning": "O modo Recepción permite que outras poidan subir ficheiros á túa computadora.

Potencialmente algúns ficheiros poderían tomar control sobre a túa computadora ó abrilos. Abre só elementos que recibas de xente de confianza, ou se realmente sabes o que fas.", + "gui_open_folder_error": "Fallou a apertura do cartafol con xdg-open. O ficheiro está aquí: {}", + "gui_settings_language_label": "Idioma", + "gui_settings_language_changed_notice": "Reinicia OnionShare para utilizar o idioma seleccionado.", + "systray_menu_exit": "Saír", + "systray_page_loaded_title": "Páxina cargada", + "systray_page_loaded_message": "Cargado enderezo OnionShare", + "systray_share_started_title": "Compartición iniciada", + "systray_share_started_message": "Comezou o envío de ficheiros para alguén", + "systray_share_completed_title": "Compartición completa", + "systray_share_completed_message": "Rematou o envío de ficheiros", + "systray_share_canceled_title": "Compartición cancelada", + "systray_share_canceled_message": "Alguén cancelou a recepción dos teus ficheiros", + "systray_receive_started_title": "Recepción iniciada", + "systray_receive_started_message": "Alguén estache enviando ficheiros", + "gui_all_modes_history": "Historial", + "gui_all_modes_clear_history": "Baleirar todo", + "gui_all_modes_transfer_started": "Iniciado {}", + "gui_all_modes_progress_complete": "%p%, {0:s} transcorridos.", + "gui_all_modes_progress_starting": "{0:s}, %p% (calculando)", + "gui_all_modes_progress_eta": "{0:s}, Estimado: {1:s}, %p%", + "gui_share_mode_no_files": "Aínda non se enviou nada", + "gui_share_mode_autostop_timer_waiting": "Agardando a que remate o envío", + "gui_website_mode_no_files": "Aínda non se publicou unha web", + "gui_receive_mode_no_files": "Aínda non se recibiu nada", + "gui_receive_mode_autostop_timer_waiting": "Agardando a que remate a recepción", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_new_tab": "Nova lapela", + "gui_new_tab_tooltip": "Abrir nova lapela", + "gui_new_tab_share_button": "Compartir ficheiros", + "gui_new_tab_receive_button": "Recibir ficheiros", + "gui_new_tab_website_button": "Publicar sitio web", + "gui_new_tab_chat_button": "Chat anónimo", + "gui_main_page_share_button": "Comeza a compartir", + "gui_main_page_receive_button": "Recibe ficheiros", + "gui_main_page_website_button": "Publica un Sitio web", + "gui_main_page_chat_button": "Conversa", + "gui_tab_name_share": "Compartir", + "gui_tab_name_receive": "Recibir", + "gui_tab_name_website": "Sitio Web", + "gui_tab_name_chat": "Chat", + "gui_close_tab_warning_title": "Estás certo?", + "gui_close_tab_warning_persistent_description": "Esta lapela é persistente. Se a pechas perderás o enderezo onion que está a utilizar. Tes a certeza de querer pechala?", + "gui_close_tab_warning_share_description": "Estás enviando ficheiros. Tes a certeza de querer pechar esta lapela?", + "gui_close_tab_warning_receive_description": "Estás recibindo ficheiros. Tes a certeza de querer pechar esta lapela?", + "gui_close_tab_warning_website_description": "Estás publicando un sitio web. Tes a certeza de querer pechar esta lapela?", + "gui_close_tab_warning_close": "Pechar", + "gui_close_tab_warning_cancel": "Cancelar", + "gui_quit_warning_title": "Estas certo?", + "gui_quit_warning_description": "A compartición está activa nalgunha das túas lapelas. Se saes, pecharás todas as lapelas. Tes a certeza de querer saír?", + "gui_quit_warning_quit": "Saír", + "gui_quit_warning_cancel": "Cancelar", + "mode_settings_advanced_toggle_show": "Mostrar axustes avanzados", + "mode_settings_advanced_toggle_hide": "Agochar axustes avanzados", + "mode_settings_persistent_checkbox": "Garda esta lapela, e abrirase automáticamente cando abras OnionShare", + "mode_settings_public_checkbox": "Este é un servizo OnionShare público (desactiva a chave privada)", + "mode_settings_autostart_timer_checkbox": "Iniciar o servizo onion na hora programada", + "mode_settings_autostop_timer_checkbox": "Deter o servizo onion na hora programada", + "mode_settings_legacy_checkbox": "Usar enderezos antigos (servizo onion v2, non recomendado)", + "mode_settings_share_autostop_sharing_checkbox": "Deixar de compartir unha vez enviado o ficheiro (desmarca para permitir a descarga de ficheiros individuais)", + "mode_settings_receive_data_dir_label": "Gardar ficheiros en", + "mode_settings_receive_data_dir_browse_button": "Navegar", + "mode_settings_website_disable_csp_checkbox": "Non enviar cabeceira Content Security Policy (isto permite ao teu sitio web usar recursos de terceiros)", + "gui_all_modes_transfer_finished_range": "Transferido {} - {}", + "gui_all_modes_transfer_finished": "Transferido {}", + "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", + "gui_all_modes_transfer_canceled": "Cancelado {}", + "settings_error_unknown": "Non se puido conectar ó contralor Tor porque os teus axustes non teñen sentido.", + "settings_error_automatic": "Non se puido conectar ó controlador Tor. Estase executando o Tor Browser (dispoñible en torproject.org) en segundo plano?", + "settings_error_socket_port": "Non se puido conectar co controlador Tor en {}:{}.", + "settings_error_socket_file": "Non se puido conectar co controlador Tor usando o ficheiro socket {}.", + "settings_error_auth": "Conectado a {}:{}, pero sen autenticar. Pode que non sexa un controlador Tor?", + "settings_error_missing_password": "Conectado ó controlador Tor, pero require un contrasinal para autenticar.", + "settings_error_unreadable_cookie_file": "Conectado ó controlador Tor, pero o contrasinal igual está mal, ou o teu usuario non ten permiso para ler o ficheiro de cookie.", + "settings_error_bundled_tor_not_supported": "A versión Tor que ven con OnionShare non funciona en modo desenvolvedor en Windows ou macOS.", + "settings_error_bundled_tor_timeout": "Tarda demasiado en conectar a Tor. Igual non tes conexión a Internet, ou o reloxo do sistema está mal axustado?", + "settings_error_bundled_tor_broken": "OnionShare non puido conectar a Tor:\n{}", + "error_port_not_available": "Non está dispoñible o porto OnionShare", + "gui_rendezvous_cleanup_quit_early": "Saír axiña", + "gui_rendezvous_cleanup": "Agardando a que se pechen tódolos circuitos de Tor para ter certeza de que os ficheiros foron transferidos.\n\nEsto podería tardar un pouco.", + "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor.", + "error_tor_protocol_error": "Hai un erro con Tor: {}", + "history_receive_read_message_button": "Ler mensaxe", + "mode_settings_receive_disable_files_checkbox": "Desactivar a subida de ficheiros", + "mode_settings_receive_disable_text_checkbox": "Desactivar o envío de texto", + "mode_settings_title_label": "Título personalizado", + "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificación", + "gui_status_indicator_chat_started": "Conversando", + "gui_status_indicator_chat_scheduled": "Programado…", + "gui_status_indicator_chat_working": "Comezando…", + "gui_status_indicator_chat_stopped": "Preparado para conversar", + "gui_settings_theme_dark": "Escuro", + "gui_settings_theme_light": "Claro", + "gui_settings_theme_auto": "Auto", + "gui_settings_theme_label": "Decorado", + "gui_please_wait_no_button": "Iniciando…", + "gui_client_auth_instructions": "A continuación, envía a chave privada para permitir o acceso ao teu servicio OnionShare:", + "gui_url_instructions_public_mode": "Envia o enderezo OnionShare inferior:", + "gui_url_instructions": "Primeiro, envía o enderezo OnionShare inferior:", + "gui_chat_url_public_description": "Calquera con este enderezo OnionShare pode unirse a esta sala de conversa usando o Tor Browser: ", + "gui_receive_url_public_description": "Calquera con este enderezo OnionShare pode descargar ficheiros ao teu computador utilizando o Tor Browser: ", + "gui_website_url_public_description": "Calquera con este enderezo OnionShare pode visitar o teu sitio web usando o Tor Browser: ", + "gui_share_url_public_description": "Calquera con este enderezo OnionShare pode descargar os teus ficheiros usando o Tor Browser: ", + "gui_server_doesnt_support_stealth": "Lamentámolo, pero esta versión de Tor non soporta ocultación (Autenticación do cliente). Inténtao cunha nova versión de Tor, ou utiliza o modo 'público' se non ten que ser privado.", + "gui_hide": "Agochar", + "gui_reveal": "Amosar", + "gui_qr_label_auth_string_title": "Chave Privada", + "gui_qr_label_url_title": "Enderezo OnionShare", + "gui_copied_client_auth": "Chave privada copiada ao portapapeis", + "gui_copied_client_auth_title": "Copiouse a chave privada", + "gui_copy_client_auth": "Copiar Chave privada", + "gui_tor_settings_window_title": "Axustes Tor", + "gui_settings_controller_extras_label": "Axustes Tor", + "gui_settings_bridge_use_checkbox": "Usar unha ponte", + "gui_settings_bridge_radio_builtin": "Elixe unha ponte prestablecida", + "gui_settings_bridge_none_radio_option": "Non usar unha ponte", + "gui_settings_bridge_moat_radio_option": "Solicitar unha ponte a torproject.org", + "gui_settings_bridge_custom_radio_option": "Proporcionar unha ponte que coñeces e é da túa confianza", + "gui_settings_bridge_custom_placeholder": "escribe enderezo:porto (un por liña)", + "gui_settings_moat_bridges_invalid": "Aínda non solicitaches unha ponte a torproject.org", + "gui_settings_version_label": "Estás utilizando OnionShare {}", + "gui_settings_help_label": "Precisas axuda? Le docs.onionshare.org", + "moat_captcha_label": "Completa o CAPTCHA para solicitar unha ponte.", + "moat_captcha_placeholder": "Escribe os caracteres da imaxe", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recargar", + "moat_bridgedb_error": "Fallou a conexión a BridgeDB.", + "moat_captcha_error": "A solución non é correcta. Inténtao outra vez.", + "moat_solution_empty_error": "Debes escribir os caracteres que aparecen na imaxe", + "mode_tor_not_connected_label": "OnionShare non está conectado á rede Tor", + "gui_dragdrop_sandbox_flatpak": "Para facer aínda máis segura a instancia Flatpak, non hai soporte para arrastrar e soltar. Usa o botón Engadir Ficheiros e Engadir Cartafol para buscar ficheiros.", + "gui_settings_bridge_moat_button": "Solicitar Nova Ponte", + "gui_settings_stop_active_tabs_label": "Hai servizos en execución nalgunha das túas lapelas.\nDebes deter tódolos servizo para cambiar os axustes Tor.", + "mode_settings_website_custom_csp_checkbox": "Envía cabeceira Content Security Policy personalizada", + "gui_settings_tor_bridges_label": "As Pontes axúdanche a acceder á Rede Tor en lugares onde Tor está bloqueada. Dependendo de onde estés unha ponte podería funcionar mellor que outras.", + "moat_contact_label": "Contactando BridgeDB..." +} diff --git a/desktop/onionshare/resources/locale/gu.json b/desktop/onionshare/resources/locale/gu.json new file mode 100644 index 00000000..313f17d8 --- /dev/null +++ b/desktop/onionshare/resources/locale/gu.json @@ -0,0 +1,182 @@ +{ + "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": "{0: s} એ વાંચી શકાય તેવી ફાઇલ નથી.", + "no_available_port": "Onion સેવા શરૂ કરવા માટે ઉપલબ્ધ બંદર શોધી શકાયું નહીં", + "other_page_loaded": "સરનામું લોડ થયું", + "close_on_autostop_timer": "બંધ થયું કારણ કે સ્વત stop-સ્ટોપ ટાઇમર સમાપ્ત થઈ ગયો છે", + "closing_automatically": "અટક્યું કારણ કે સ્થાનાંતરણ પૂર્ણ છે", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "ચેતવણી: મોટો શેર મોકલવામાં કલાકો લાગી શકે છે", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "ફાઇલો અને ફોલ્ડર્સ ખેંચો અને છોડો\nવહેંચણી શરૂ કરવા માટે", + "gui_add": "ઉમેરો", + "gui_delete": "", + "gui_choose_items": "", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "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_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_add_files": "ફાઇલો ઉમેરો", + "gui_add_folder": "ફોલ્ડર ઉમેરો", + "incorrect_password": "ખોટો પાસવર્ડ" +} diff --git a/desktop/onionshare/resources/locale/he.json b/desktop/onionshare/resources/locale/he.json new file mode 100644 index 00000000..ee941304 --- /dev/null +++ b/desktop/onionshare/resources/locale/he.json @@ -0,0 +1,185 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "", + "systray_menu_exit": "יציאה", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_autostop_timer": "הפסק לשתף ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "העתק כתובת", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "מבוטל", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "ביטול", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_settings_data_dir_browse_button": "עיין", + "gui_all_modes_history": "היסטוריה", + "gui_all_modes_clear_history": "למחוק הכול" +} diff --git a/desktop/onionshare/resources/locale/hi.json b/desktop/onionshare/resources/locale/hi.json new file mode 100644 index 00000000..4d2ff6e5 --- /dev/null +++ b/desktop/onionshare/resources/locale/hi.json @@ -0,0 +1,225 @@ +{ + "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": "{0:s} रीड होने योग्य फाइल नहीं है।", + "no_available_port": "अनियन सेवा शुरू करने के लिए कोई उपलब्ध पोर्ट नहीं सका", + "other_page_loaded": "पता लोड हो गया", + "close_on_autostop_timer": "ऑटो-स्टॉप टाइमर बंद होने के कारण बंद हो गया", + "closing_automatically": "स्थानांतरण पूरा होने के कारण रुक गया", + "large_filesize": "चेतावनी: बड़े आकार की फाइल साझा करने में घंटों लग सकते हैं", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_autostop_timer": "साझा बंद करें ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "रिसीव मोड चालू करें", + "gui_receive_stop_server": "रिसीव मोड बंद करें", + "gui_receive_stop_server_autostop_timer": "रिसीव मोड बंद करें ({} remaining)", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "पता कॉपी करें", + "gui_canceled": "रद्द हो गया", + "gui_copied_url_title": "OnionShare पता कॉपी हो गया", + "gui_copied_url": "अनियन शेयर पता क्लिपबोर्ड में कॉपी हो गया", + "gui_please_wait": "शुरू हो रहा है... रद्द करने के लिए क्लिक करें।", + "version_string": "", + "gui_quit_title": "इतनी तेज़ी से नहीं", + "gui_share_quit_warning": "आपके फाइल अभी जा रहे हैं। क्या आप वाकई OnionShare को बंद करना चाहते हैं?", + "gui_receive_quit_warning": "आप अभी फाइलों को प्राप्त रहे हैं। क्या आप वाकई OnionShare को बंद करना चाहते हैं?", + "gui_quit_warning_quit": "छोड़ें", + "gui_quit_warning_dont_quit": "रद्द करें", + "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_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": "Onion सेटिंग्स", + "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 के साथ ऑटो-कॉन्फ़िगरेशन का प्रयास करें", + "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": "SOCKS पोर्ट", + "gui_settings_authenticate_label": "Tor प्रमाणीकरण सेटिंग्स", + "gui_settings_authenticate_no_auth_option": "कोई प्रमाणीकरण या कुकी प्रमाणीकरण नहीं", + "gui_settings_authenticate_password_option": "पासवर्ड", + "gui_settings_password_label": "पासवर्ड", + "gui_settings_tor_bridges": "Tor ब्रिज सपोर्ट", + "gui_settings_tor_bridges_no_bridges_radio_option": "ब्रिड्जेस का प्रयोग न करें", + "gui_settings_tor_bridges_obfs4_radio_option": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य है)", + "gui_settings_meek_lite_expensive_warning": "चेतावनी: टॉर प्रोजेक्ट को चलाने के लिए मीक_लाइट ब्रिज एक अच्छा विकल्प नहीं हैं।

केवल उनका उपयोग तभी करें यदि ओबीफएस4 ट्रांसपोर्ट, या अन्य सामान्य ब्रिड्जेस के माध्यम से टोर से सीधे कनेक्ट करने में आप असमर्थ हों।", + "gui_settings_tor_bridges_custom_radio_option": "कस्टम ब्रिड्जेस का उपयोग करे", + "gui_settings_tor_bridges_custom_label": "https://bridges.torproject.org से ब्रिड्जेस प्राप्त कर सकते हैं", + "gui_settings_tor_bridges_invalid": "", + "gui_settings_button_save": "सहेजें", + "gui_settings_button_cancel": "रद्द करे", + "gui_settings_button_help": "मदद", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "settings_error_unknown": "टोर कंट्रोलर से कनेक्ट नहीं हो सकता क्योंकि आपकी सेटिंग्स गलत हैः ।", + "settings_error_automatic": "टोर कंट्रोलर से कनेक्ट नहीं हो सका हैः । क्या टोर ब्राउज़र (torproject.org से उपलब्ध) बैकग्राउंड में चल रहा है?", + "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": "अनियन शेयर टोर से कनेक्ट नहीं हो सका :\n{}", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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_autostop_timer_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "", + "gui_stop_server_autostop_timer_tooltip": "ऑटो-स्टॉप टाइमर {} पर बंद होगा", + "gui_start_server_autostart_timer_tooltip": "ऑटो-स्टार्ट टाइमर {} पर बंद होगा", + "gui_waiting_to_start": "{} में शुरू होने के लिए शेडयूल है। रद्द करने के लिए क्लिक करें।", + "incorrect_password": "पासवर्ड गलत है", + "gui_settings_individual_downloads_label": "विशिष्ट फाइलों के डाउनलोड को मंजूरी देने के लिए अचिन्हित करें", + "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें", + "gui_show_qr_code": "क्यूआर कोड दिखाएं", + "gui_chat_stop_server": "चैट सर्वर बंद करें", + "gui_chat_start_server": "चैट सर्वर शुरू करें", + "gui_file_selection_remove_all": "सभी हटाएं", + "gui_remove": "हटाएं", + "gui_qr_code_dialog_title": "अनियन शेयर क्यूआर कोड", + "gui_receive_flatpak_data_dir": "चूँकि आपने फ़्लैटपैक का उपयोग करके OnionShare स्थापित किया है, इसलिए आपको फ़ाइलों को ~/OnionShare फ़ोल्डर में सहेजना होगा।", + "history_receive_read_message_button": "मैसेज पढ़े", + "error_port_not_available": "ओनियनशेयर पोर्ट उपलब्ध नहीं है", + "gui_rendezvous_cleanup_quit_early": "जल्दी छोड़ो", + "gui_rendezvous_cleanup": "यह सुनिश्चित करने के लिए कि आपकी फ़ाइलें सक्सेस्स्फुल्ली ट्रांसफर हो गई हैं, टोर सर्किट के बंद होने की प्रतीक्षा कर रहा है।\n\nइसमें कुछ मिनट लग सकते हैं।", + "mode_settings_website_disable_csp_checkbox": "कंटेंट सिक्योरिटी पॉलिसी हैडर ना भेजे (आपकी वेबसाइट को थर्ड पार्टी रिसोर्सेज का उपयोग करने की अनुमति देता है)", + "mode_settings_receive_webhook_url_checkbox": "नोटिफिकेशन वेबहुक का प्रयोग करें", + "mode_settings_receive_disable_files_checkbox": "फ़ाइलें अपलोड करना अक्षम करें", + "mode_settings_receive_disable_text_checkbox": "टेक्स्ट सबमिट करना अक्षम करें", + "mode_settings_receive_data_dir_browse_button": "ब्राउज", + "mode_settings_share_autostop_sharing_checkbox": "फ़ाइलें भेजे जाने के बाद शेरिंग करना बंद करें (अलग-अलग फ़ाइलों को डाउनलोड करने की अनुमति देने के लिए अनचेक करें)", + "mode_settings_autostop_timer_checkbox": "निर्धारित समय पर अनियन सर्विस बंद करें", + "mode_settings_autostart_timer_checkbox": "निर्धारित समय पर अनियन सर्विस शुरू करें", + "mode_settings_public_checkbox": "यह एक पब्लिक अनियन शेयर सर्विस है (कि अक्षम करे )", + "mode_settings_title_label": "कस्टम टाइटल", + "mode_settings_advanced_toggle_hide": "एडवांस्ड सेटिंग छुपाए", + "mode_settings_advanced_toggle_show": "एडवांस्ड सेटिंग दिखाएं", + "gui_quit_warning_cancel": "रद्द करना", + "gui_quit_warning_description": "आपके कुछ टैब में शेरिंग सक्रिय है। यदि आप छोड़ते हैं, तो आपके सभी टैब बंद हो जाएंगे। क्या आप वाकई छोड़ना चाहते हैं?", + "gui_quit_warning_title": "क्या आप सुनिचित हैः?", + "gui_close_tab_warning_cancel": "रद्द करे", + "gui_close_tab_warning_close": "बंद करे", + "gui_close_tab_warning_website_description": "आप सक्रिय रूप से एक वेबसाइट होस्ट कर रहे हैं। क्या आप वाकई इस टैब को बंद करना चाहते हैं?", + "gui_close_tab_warning_receive_description": "आप फ़ाइलें प्राप्त करने की प्रक्रिया में हैं. क्या आप वाकई इस टैब को बंद करना चाहते हैं?", + "gui_close_tab_warning_share_description": "आप फ़ाइलें भेजने की प्रक्रिया में हैं. क्या आप वाकई इस टैब को बंद करना चाहते हैं?", + "gui_close_tab_warning_persistent_description": "यह टैब पर्सिस्टेंट है। यदि आप इसे बंद करते हैं तो आप अनियन एड्रेस खो देंगे जिसका आप उपयोग कर रहे है। क्या आप वाकई इसे बंद करना चाहते हैं?", + "gui_close_tab_warning_title": "क्या आप सुनिश्त है?", + "gui_please_wait_no_button": "शुरू हो रहा हैः …", + "gui_hide": "छुपाइ", + "gui_reveal": "दिखाए", + "gui_qr_label_auth_string_title": "प्राइवेट कि", + "gui_qr_label_url_title": "अनियन शेयर एड्रेस", + "gui_copied_client_auth": "प्राइवेट कि क्लिपबोर्ड पर कॉपी हो गयी हैः", + "gui_copied_client_auth_title": "प्राइवेट कि कॉपी हो गयी हैः", + "gui_copy_client_auth": "प्राइवेट कि कॉपी करें" +} diff --git a/desktop/onionshare/resources/locale/hr.json b/desktop/onionshare/resources/locale/hr.json new file mode 100644 index 00000000..39df94fa --- /dev/null +++ b/desktop/onionshare/resources/locale/hr.json @@ -0,0 +1,259 @@ +{ + "preparing_files": "Komprimiranje datoteka.", + "not_a_readable_file": "{0:s} nije čitljiva datoteka.", + "no_available_port": "Priključak za pokretanje Onion usluge nije pronađen", + "other_page_loaded": "Adresa učitana", + "incorrect_password": "Neispravna lozinka", + "close_on_autostop_timer": "Prekinuto, jer je vrijeme timera za automatsko prekidanje isteklo", + "closing_automatically": "Prekinuto, jer je prijenos završen", + "large_filesize": "Upozorenje: Slanje velike količine podataka može trajati satima", + "gui_drag_and_drop": "Povuci i ispusti datoteke i mape koje želiš dijeliti", + "gui_add": "Dodaj", + "gui_add_files": "Dodaj datoteke", + "gui_add_folder": "Dodaj mapu", + "gui_delete": "Izbriši", + "gui_choose_items": "Odaberi", + "gui_share_start_server": "Pokreni dijeljenje", + "gui_share_stop_server": "Prekini dijeljenje", + "gui_share_stop_server_autostop_timer": "Prekini dijeljenje ({})", + "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko prekidanje završava u {}", + "gui_start_server_autostart_timer_tooltip": "Timer za automatsko pokretanje završava u {}", + "gui_receive_start_server": "Pokreni modus primanja", + "gui_receive_stop_server": "Prekini modus primanja", + "gui_receive_stop_server_autostop_timer": "Prekini modus primanja ({} preostalo)", + "gui_copy_url": "Kopiraj adresu", + "gui_canceled": "Prekinuto", + "gui_copied_url_title": "OnionShare adresa je kopirana", + "gui_copied_url": "OnionShare adresa je kopirana u međuspremnik", + "gui_waiting_to_start": "Planirano pokretanje za {}. Pritisni za prekid.", + "gui_please_wait": "Pokretanje … Pritisni za prekid.", + "gui_quit_title": "Ne tako brzo", + "gui_share_quit_warning": "Proces slanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?", + "gui_receive_quit_warning": "Proces primanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?", + "gui_quit_warning_quit": "Izađi", + "gui_quit_warning_dont_quit": "Odustani", + "zip_progress_bar_format": "Komprimiranje: %p %", + "error_stealth_not_supported": "Za korištenje autorizacije klijenta, potrebni su barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare zahtijeva barem Tor 0.2.7.1 i python3-stem 1.4.0.", + "gui_settings_window_title": "Postavke", + "gui_settings_whats_this": "Što je ovo?", + "gui_settings_stealth_option": "Koristi autorizaciju klijenta", + "gui_settings_autoupdate_label": "Traži nove verzije", + "gui_settings_autoupdate_option": "Obavijesti me o novim verzijama", + "gui_settings_autoupdate_timestamp": "Zadnja provjera: {}", + "gui_settings_autoupdate_timestamp_never": "Nikada", + "gui_settings_autoupdate_check_button": "Traži nove verzije", + "gui_settings_general_label": "Opće postavke", + "gui_settings_onion_label": "Onion postavke", + "gui_settings_sharing_label": "Postavke za dijeljenje", + "gui_settings_close_after_first_download_option": "Zaustavi dijeljenje nakon što se datoteke pošalju", + "gui_settings_csp_header_disabled_option": "Isključi zaglavlje za politike sigurnosti sadržaja", + "gui_settings_individual_downloads_label": "Odznači, za preuzimanje pojedinačnih datoteka", + "gui_settings_connection_type_label": "Kako se OnionShare treba povezati s Torom?", + "gui_settings_connection_type_bundled_option": "Koristi verziju Tora koja je ugrađena u OnionShareu", + "gui_settings_connection_type_automatic_option": "Pokušaj automatsku konfiguraciju s Tor preglednikom", + "gui_settings_connection_type_control_port_option": "Poveži se koristeći kontrolni priključak", + "gui_settings_connection_type_socket_file_option": "Poveži se koristeći socket datoteku", + "gui_settings_connection_type_test_button": "Ispitaj vezu s Torom", + "gui_settings_control_port_label": "Kontrolni priključak", + "gui_settings_socket_file_label": "Socket datoteka", + "gui_settings_socks_label": "SOCKS priključak", + "gui_settings_authenticate_label": "Postavke za autentifikaciju na Tor", + "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem", + "gui_settings_authenticate_password_option": "Lozinka", + "gui_settings_password_label": "Lozinka", + "gui_settings_tor_bridges": "Torova podrška za mostove", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove", + "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 uključive prijenose", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 uključive prijenose (potreban je obfs4proksi)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) uključive prijenose", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) uključive prijenose (potreban je obfs4proksi)", + "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek_lite mostovi troše velike količine resursa za pokretanje Tor projekta.

Koristi ih samo ako se ne možeš povezati s Torom direktno putem obfs4 prijenosa ili drugih normalnih mostova.", + "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", + "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti na https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nijedan od dodanih mostova ne funkcionira.\nProvjeri ih ili dodaj druge.", + "gui_settings_button_save": "Spremi", + "gui_settings_button_cancel": "Odustani", + "gui_settings_button_help": "Pomoć", + "gui_settings_autostop_timer_checkbox": "Koristi timer za automatsko zaustavljanje", + "gui_settings_autostop_timer": "Zaustavi dijeljenje pri:", + "gui_settings_autostart_timer_checkbox": "Koristi timer za automatsko pokretanje", + "gui_settings_autostart_timer": "Pokreni dijeljenje pri:", + "settings_error_unknown": "Nije moguće povezivanje s Tor kontrolerom, jer tvoje postavke nemaju smisla.", + "settings_error_automatic": "Neuspjelo povezivanje s Tor kontrolerom. Radi li Tor preglednik (dostupan na torproject.org) u pozadini?", + "settings_error_socket_port": "Nije moguće povezivanje s Tor kontrolerom pri {}:{}.", + "settings_error_socket_file": "Nije moguće povezivanje s Tor kontrolerom pomoću socket datoteke {}.", + "settings_error_auth": "Povezan s {}:{}, ali autentifikacija nije moguća. Možda ovo nije Tor kontroler?", + "settings_error_missing_password": "Povezan s Tor kontrolerom, ali zahtijeva lozinku za autentifikaciju.", + "settings_error_unreadable_cookie_file": "Povezan s Tor kontrolerom, ali je lozinka možda pogrešna ili tvom korisniku nije dozvoljeno čitati datoteku kolačića.", + "settings_error_bundled_tor_not_supported": "Tor verzija koja se isporučuje s OnionShare ne radi u razvojnom modusu operacijskih sustava Windows ili macOS.", + "settings_error_bundled_tor_timeout": "Povezivanje s Torom traje predugo. Možda nemaš vezu s internetom ili imaš netočno postavljen sat sustava?", + "settings_error_bundled_tor_broken": "Neuspjelo povezivanje OnionShare-a s Torom:\n{}", + "settings_test_success": "Povezan s Tor kontrolerom.\n\nTor verzija: {}\nPodržava kratkotrajne Onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava .onion adrese sljedeće generacije: {}.", + "error_tor_protocol_error": "Dogodila se greška s Torom: {}", + "error_tor_protocol_error_unknown": "Nepoznata greška s Torom", + "connecting_to_tor": "Povezivanje s Tor mrežom", + "update_available": "Objavljen je novi OnionShare. Pritisni ovdje za preuzimanje.

Trenutačno koristiš verziju {}, a najnovija verzija je {}.", + "update_error_check_error": "Neuspjela pretraga za novom verzijom: možda nemaš vezu s Torom ili OnionShare web-stranica ne radi?", + "update_error_invalid_latest_version": "Neuspjela pretraga za novom verzijom: OnionShare web-stranica kaže, da je zadnja verzija neprepoznatljiva „{}” …", + "update_not_available": "Koristiš najnoviji OnionShare.", + "gui_tor_connection_ask": "Otvoriti postavke za podešavanje veze s Torom?", + "gui_tor_connection_ask_open_settings": "Da", + "gui_tor_connection_ask_quit": "Zatvori", + "gui_tor_connection_error_settings": "U postavkama promijeni način na koji se OnionShare povezuje s Tor mrežom.", + "gui_tor_connection_canceled": "Neuspjelo povezivanje s Torom.\n\nProvjeri vezu s internetom, a zatim ponovo pokreni OnionShare i postavi njegovu vezu s Torom.", + "gui_tor_connection_lost": "Prekinuta veza s Torom.", + "gui_server_started_after_autostop_timer": "Vrijeme timera za automatsko prekidanje je isteklo prije nego što je poslužitelj započeo. Izradi novo dijeljenje.", + "gui_server_autostop_timer_expired": "Vrijeme timera za automatsko prekidanje je već isteklo. Za pokretanje dijeljenja, podesi vrijeme.", + "gui_server_autostart_timer_expired": "Planirano vrijeme je već prošlo. Za pokretanje dijeljenja, podesi vrijeme.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vrijeme za automatsko prekidanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. Za pokretanje dijeljenja, podesi vrijeme.", + "share_via_onionshare": "Dijeli putem OnionSharea", + "gui_connect_to_tor_for_onion_settings": "Poveži se s Torom za prikaz postavki Onion usluge", + "gui_save_private_key_checkbox": "Koristi trajnu adresu", + "gui_share_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može preuzeti tvoje datoteke koristeći Tor preglednik: ", + "gui_website_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može posjetiti tvoju web-stranicu koristeći Tor preglednik: ", + "gui_receive_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može prenijeti datoteke na tvoje računalo koristeći Tor preglednik: ", + "gui_url_label_persistent": "Ovo se dijeljenje neće automatski prekinuti.

Svako naredno dijeljenje koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)", + "gui_url_label_stay_open": "Ovo se dijeljenje neće automatski prekinuti.", + "gui_url_label_onetime": "Ovo će se dijeljenje prekinuti nakon prvog završavanja.", + "gui_url_label_onetime_and_persistent": "Ovo se dijeljenje neće automatski prekinuti.

Svako naredno dijeljenje će koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)", + "gui_status_indicator_share_stopped": "Spremno za dijeljenje", + "gui_status_indicator_share_working": "Pokretanje …", + "gui_status_indicator_share_scheduled": "Planirano …", + "gui_status_indicator_share_started": "Dijeljenje", + "gui_status_indicator_receive_stopped": "Spremno za primanje", + "gui_status_indicator_receive_working": "Pokretanje …", + "gui_status_indicator_receive_scheduled": "Planirano …", + "gui_status_indicator_receive_started": "Primanje", + "gui_file_info": "{} datoteke, {}", + "gui_file_info_single": "{} datoteka, {}", + "history_in_progress_tooltip": "{} u tijeku", + "history_completed_tooltip": "{} završeno", + "history_requests_tooltip": "{} web zahtjeva", + "error_cannot_create_data_dir": "Neuspjelo stvaranje mape za OnionShare podatke: {}", + "gui_receive_mode_warning": "Modus primanja dozvoljava korisnicima prenijeti datoteke na tvoje računalo.

Pri tome neke datoteke mogu preuzeti kontrolu nad tvojim računalom, ako ih otvoriš. Otvaraj samo stvari od ljudi kojima vjeruješ ili ako znaš što radiš.", + "gui_mode_share_button": "Dijeli datoteke", + "gui_mode_receive_button": "Primaj datoteke", + "gui_mode_website_button": "Objavi web-stranicu", + "gui_settings_receiving_label": "Postavke za primanje", + "gui_settings_website_label": "Postavke za web-stranicu", + "gui_settings_data_dir_label": "Spremi datoteke u", + "gui_settings_data_dir_browse_button": "Pretraži", + "gui_settings_public_mode_checkbox": "Javni modus", + "gui_open_folder_error_nautilus": "Nije moguće otvoriti mapu, jer Nautilus nije dostupan. Datoteka je ovdje: {}", + "gui_settings_language_label": "Željeni jezik", + "gui_settings_language_changed_notice": "Za primjenu novog jezika, ponovo pokreni OnionShare.", + "systray_menu_exit": "Izađi", + "systray_page_loaded_title": "Stranica učitana", + "systray_page_loaded_message": "OnionShare adresa učitana", + "systray_share_started_title": "Dijeljenje pokrenuto", + "systray_share_started_message": "Počinje slanja datoteka nekome", + "systray_share_completed_title": "Dijeljenje završeno", + "systray_share_completed_message": "Završeno je slanje datoteka", + "systray_share_canceled_title": "Dijeljenje prekinuto", + "systray_share_canceled_message": "Netko je prekinuo primanje tvojih datoteka", + "systray_receive_started_title": "Primanje pokrenuto", + "systray_receive_started_message": "Netko ti šalje datoteke", + "gui_all_modes_history": "Kronologija", + "gui_all_modes_clear_history": "Izbriši sve", + "gui_all_modes_transfer_started": "Pokrenuto {}", + "gui_all_modes_transfer_finished_range": "Preneseno {} – {}", + "gui_all_modes_transfer_finished": "Preneseno {}", + "gui_all_modes_transfer_canceled_range": "Prekinuto {} – {}", + "gui_all_modes_transfer_canceled": "Prekinuto {}", + "gui_all_modes_progress_complete": "%p %, {0:s} proteklo.", + "gui_all_modes_progress_starting": "{0:s}, %p % (izračunavanje)", + "gui_all_modes_progress_eta": "{0:s}, procijenjeno: {1:s}, %p %", + "gui_share_mode_no_files": "Nijedna datoteka još nije poslana", + "gui_share_mode_autostop_timer_waiting": "Čeka se na završetak slanja", + "gui_website_mode_no_files": "Nijedna web-stranica još nije dijeljena", + "gui_receive_mode_no_files": "Nijedna datoteka još nije primljena", + "gui_receive_mode_autostop_timer_waiting": "Čeka se na završetak primanja", + "receive_mode_upload_starting": "Započinje prijenos ukupne veličine od {}", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "mode_settings_website_disable_csp_checkbox": "Ne šalji zaglavlja politike sigurnosti sadržaja (omogućuje tvojim web-stranicama koristiti strane resurse)", + "mode_settings_receive_data_dir_browse_button": "Pregledaj", + "mode_settings_receive_data_dir_label": "Spremi datoteke u", + "mode_settings_share_autostop_sharing_checkbox": "Prekini dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)", + "mode_settings_legacy_checkbox": "Koristi stare adrese (v2 onion usluge, ne preporučuje se)", + "mode_settings_autostop_timer_checkbox": "Prekini onion uslugu u planirano vrijeme", + "mode_settings_autostart_timer_checkbox": "Pokreni onion uslugu u planirano vrijeme", + "mode_settings_public_checkbox": "Ovo je javna OnionShare usluga (deaktivira privatni ključ)", + "mode_settings_persistent_checkbox": "Spremi ovu karticu i automatski je otvori kad otvorim OnionShare", + "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke", + "mode_settings_advanced_toggle_show": "Prikaži napredne postavke", + "gui_quit_warning_cancel": "Odustani", + "gui_quit_warning_description": "Na nekim tvojim karticama je dijeljenje aktivno. Ako zatvoriš program, zatvorit će se sve kartice. Stvarno želiš zatvoriti program?", + "gui_quit_warning_title": "Stvarno?", + "gui_close_tab_warning_cancel": "Odustani", + "gui_close_tab_warning_close": "Zatvori", + "gui_close_tab_warning_website_description": "Imaš aktivni hosting za web-stranicu. Stvarno želiš zatvoriti ovu karticu?", + "gui_close_tab_warning_receive_description": "Trenutačno primaš datoteke. Stvarno želiš zatvoriti ovu karticu?", + "gui_close_tab_warning_share_description": "Trenutačno šalješ datoteke. Stvarno želiš zatvoriti ovu karticu?", + "gui_close_tab_warning_persistent_description": "Ovo je trajna kartica. Ako je zatvoriš, izgubit ćeš onion adresu koju koristi. Stvarno je želiš zatvoriti?", + "gui_close_tab_warning_title": "Stvarno?", + "gui_new_tab_website_description": "Postavi hosting za statičku HTML onion web-stranicu na tvom računalu.", + "gui_new_tab_website_button": "Objavi web-stranicu", + "gui_new_tab_share_description": "Odaberi datoteke na računalu koje nekome želiš poslati. Za preuzimanje tih datoteka, osoba ili ljudi kojima šalješ datoteke moraju koristiti Tor preglednik.", + "gui_new_tab_receive_description": "Pretvori svoje računalo u internetski dropbox. Ljudi će moći koristiti Tor preglednik za slanje datoteka na tvoje računalo.", + "gui_new_tab_receive_button": "Primaj datoteke", + "gui_new_tab_share_button": "Dijeli datoteke", + "gui_new_tab_tooltip": "Otvori novu karticu", + "gui_new_tab": "Nova kartica", + "gui_qr_code_description": "Skeniraj ovaj QR kȏd pomoću QR čitača, kao što je kamera na tvom telefonu, za lakše dijeljenje adrese OnionSharea.", + "gui_receive_flatpak_data_dir": "Budući da je tvoj OnionShare instaliran pomoću Flatpak-a, datoteke moraš spremiti u jednu mapu u ~/OnionShare.", + "gui_tab_name_chat": "Razgovor", + "gui_new_tab_chat_button": "Razgovaraj anonimno", + "gui_chat_start_server": "Pokreni poslužitelja za razgovor", + "gui_chat_stop_server": "Prekini poslužitelja za razgovor", + "gui_chat_stop_server_autostop_timer": "Zaustavi poslužitelja za chat ({})", + "gui_tab_name_receive": "Primi", + "gui_open_folder_error": "Otvaranje mape s xdg-open nije uspjelo. Datoteka je ovdje: {}", + "gui_tab_name_website": "Web-stranica", + "gui_tab_name_share": "Dijeli", + "gui_qr_code_dialog_title": "OnionShare QR-kod", + "gui_show_qr_code": "Prikaži QR-kod", + "gui_file_selection_remove_all": "Ukloni sve", + "gui_remove": "Ukloni", + "gui_main_page_chat_button": "Pokreni razgovor", + "gui_main_page_website_button": "Pokreni hosting", + "gui_main_page_receive_button": "Pokreni primanje", + "gui_main_page_share_button": "Pokreni dijeljenje", + "gui_chat_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može se pridružiti ovoj sobi za razgovor koristeći Tor preglednik: ", + "error_port_not_available": "OnionShare priključak nije dostupan", + "gui_rendezvous_cleanup_quit_early": "Prekini preuranjeno", + "gui_rendezvous_cleanup": "Čekanje na zatvarnje Tor lanaca, kako bi se osigurao uspješan prijenos datoteka.\n\nOvo može potrajati nekoliko minuta.", + "gui_color_mode_changed_notice": "Za primjenu novog modusa boja ponovo pokreni OnionShare .", + "history_receive_read_message_button": "Čitaj poruku", + "mode_settings_receive_disable_files_checkbox": "Onemogući prenošenje datoteka", + "mode_settings_receive_disable_text_checkbox": "Onemogući slanje teksta", + "mode_settings_title_label": "Prilagođeni naslov", + "gui_status_indicator_chat_scheduled": "Planirano …", + "gui_status_indicator_chat_working": "Pokretanje …", + "mode_settings_receive_webhook_url_checkbox": "Koristi automatsko obavještavanje", + "gui_status_indicator_chat_started": "Razgovor u tijeku", + "gui_status_indicator_chat_stopped": "Spremno za razgovor", + "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušaj s novijom Tor verzijom ili koristi „javni” način rada ako ne mora biti privatni.", + "gui_settings_theme_dark": "Tamna", + "gui_settings_theme_light": "Svjetla", + "gui_settings_theme_auto": "Automatski", + "gui_settings_theme_label": "Tema", + "gui_client_auth_instructions": "Zatim pošalji privatni ključ za dozvoljavanje pristupa tvoji OnionShare usluzi:", + "gui_url_instructions_public_mode": "Pošalji donju OnionShare adresu:", + "gui_url_instructions": "Najprije pošalji donju OnionShare adresu:", + "gui_chat_url_public_description": "Svatko s ovom OnionShare adresom može se pridružiti ovoj sobi za razgovor koristeći Tor preglednik: ", + "gui_receive_url_public_description": "Svatko s ovom OnionShare adresom može prenijeti datoteke na tvoje računalo koristeći Tor preglednik: ", + "gui_website_url_public_description": "Svatko s ovom OnionShare adresom može posjetiti tvoju web-stranicu koristeći Tor preglednik: ", + "gui_share_url_public_description": "Svatko s ovom OnionShare adresom može preuzeti tvoje datoteke koristeći Tor preglednik: ", + "gui_please_wait_no_button": "Pokretanje …", + "gui_hide": "Sakrij", + "gui_reveal": "Otkrij", + "gui_qr_label_auth_string_title": "Privatni ključ", + "gui_qr_label_url_title": "OnionShare adresa", + "gui_copied_client_auth": "Privatni ključ je kopiran u međuspremnik", + "gui_copied_client_auth_title": "Privatni ključ je kopiran", + "gui_copy_client_auth": "Kopiraj privatni ključ" +} diff --git a/desktop/onionshare/resources/locale/hu.json b/desktop/onionshare/resources/locale/hu.json new file mode 100644 index 00000000..3a725427 --- /dev/null +++ b/desktop/onionshare/resources/locale/hu.json @@ -0,0 +1,190 @@ +{ + "config_onion_service": "", + "preparing_files": "Fájlok tömörítése.", + "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": "{0:s} nem egy olvasható fájl.", + "no_available_port": "Nem található elérhető port az onion szolgáltatás indításához", + "other_page_loaded": "Cím betöltve", + "close_on_autostop_timer": "Leállítva, mert az auto-sop időzítő lejárt", + "closing_automatically": "Leállítva, mert az átvitel véget ért", + "timeout_download_still_running": "", + "large_filesize": "Figyelem: A nagyobb fájlok elküldése órákat vehet igénybe", + "systray_menu_exit": "Kilépés", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "Húzzon ide fájlt vagy mappát\na megosztás megkezdéséhez", + "gui_add": "Hozzáadás", + "gui_delete": "Törlés", + "gui_choose_items": "Kiválaszt", + "gui_share_start_server": "Megosztás kezdése", + "gui_share_stop_server": "Megosztás leállítása", + "gui_share_stop_server_autostop_timer": "Megosztás leállítása ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "Fogadó mód indítása", + "gui_receive_stop_server": "Fogadó mód leállítása", + "gui_receive_stop_server_autostop_timer": "Fogadó mód leállítása ({} van hátra)", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "Cím másolása", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Megszakítva", + "gui_copied_url_title": "OnionShare-cím másolva", + "gui_copied_url": "OnionShare-cím a vágólapra másolva", + "gui_please_wait": "Indítás... Kattints a megszakításhoz.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "version_string": "", + "gui_quit_title": "Állj csak meg", + "gui_share_quit_warning": "A fájlküldés folyamatban van. Biztosan kilépsz az OnionShare-ből?", + "gui_receive_quit_warning": "A fájlok fogadása folyamatban van. Biztosan kilépsz az OnionShare-ből?", + "gui_quit_warning_quit": "Kilépés", + "gui_quit_warning_dont_quit": "Mégse", + "zip_progress_bar_format": "Tömörítés: %p%", + "error_stealth_not_supported": "A kliens-hitelesítés használatához szükséged van legalább ezekre: Tor 0.2.9.1-alpha (vagy Tor Browser 6.5) és python3-stem 1.5.0.", + "error_ephemeral_not_supported": "Az OnionShare minimális követelményei: Tor 0.2.7.1 és python3-stem 1.4.0.", + "gui_settings_window_title": "Beállítások", + "gui_settings_whats_this": "Mi ez?", + "gui_settings_stealth_option": "Kliens-hitelesítés használata", + "gui_settings_autoupdate_label": "Új verzió keresése", + "gui_settings_autoupdate_option": "Értesítést kérek, ha új verzió érhető el", + "gui_settings_autoupdate_timestamp": "Utoljára ellenőrizve: {}", + "gui_settings_autoupdate_timestamp_never": "Soha", + "gui_settings_autoupdate_check_button": "Új Verzió keresése", + "gui_settings_general_label": "Általános beállítások", + "gui_settings_sharing_label": "Megosztás beállításai", + "gui_settings_close_after_first_download_option": "Fejezze be a megosztást, ha a fájlokat elküldte", + "gui_settings_connection_type_label": "Hogyan csatlakozzon az OnionShare a Tor-hoz?", + "gui_settings_connection_type_bundled_option": "Beépített Tor-verzió használata", + "gui_settings_connection_type_automatic_option": "Automatikus konfiguráció a Tor-ral", + "gui_settings_connection_type_control_port_option": "Csatlakozás kontroll port által", + "gui_settings_connection_type_socket_file_option": "Szokettfájl használata", + "gui_settings_connection_type_test_button": "Tor-kapcsolat tesztelése", + "gui_settings_control_port_label": "Kontroll port", + "gui_settings_socket_file_label": "Szokettfájl", + "gui_settings_socks_label": "SOCKS port", + "gui_settings_authenticate_label": "Tor hitelesítési beállítások", + "gui_settings_authenticate_no_auth_option": "Nincs hitelesítés, vagy sütik általi hitelesítés", + "gui_settings_authenticate_password_option": "Jelszó", + "gui_settings_password_label": "Jelszó", + "gui_settings_tor_bridges": "Tor híd támogatása", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ne használjon hidakat", + "gui_settings_tor_bridges_obfs4_radio_option": "Beépített obfs4 pluggable transports használata", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Beépített obfs4 pluggable transports használata (obfs4proxy szükséges)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Beépített meek_lite (Azure) pluggable transports használata", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Beépített meek_lite (Azure) pluggable transports használata (obfs4proxy szükséges)", + "gui_settings_meek_lite_expensive_warning": "Figyelem: A meek_lite hidak fenntartása nagyon költséges a Tor Project számára.

Csak akkor használd őket, ha nem tudsz közetlenül a Tor-hoz csatlakozni az obfs4 vagy más hidak által.", + "gui_settings_tor_bridges_custom_radio_option": "Egyéb hidak használata", + "gui_settings_tor_bridges_custom_label": "Hidakat innen szerezhetsz: https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Egyetlen híd sem működik.\nEllenőrizd őket, vagy adj hozzá újakat.", + "gui_settings_button_save": "Mentés", + "gui_settings_button_cancel": "Mégse", + "gui_settings_button_help": "Súgó", + "gui_settings_autostop_timer_checkbox": "Leállítás automata időzítővel", + "gui_settings_autostop_timer": "Megosztás leállítása ekkor:", + "settings_error_unknown": "Nem lehet csatlakozni a Tor-kontrollerhez, mert értelmetlenek a beállításaid.", + "settings_error_automatic": "Nem lehet csatlakozni a Tor-kontrollerhez. Fut-e a Tor böngésző (letölthető innen: torproject.org) a háttérben?", + "settings_error_socket_port": "Nem lehet csatlakozni a Tor-kontrollerhez itt: {}:{}.", + "settings_error_socket_file": "Nem lehet csatlakozni a Tor-kontrollerhez az alábbi szokettfájl használatával: {}.", + "settings_error_auth": "Csatlakozva itt: {}:{}, de nem hitelesíthető. Biztos, hogy ez egy Tor-kontroller?", + "settings_error_missing_password": "Csatlakozva a Tor-kontrollerhez, de a hitelesítéshez jelszó szükséges.", + "settings_error_unreadable_cookie_file": "Csatlakozva a Tor-kontrollerhez, de vagy a jelszó hibás, vagy a felhasználó nem jogosult a süti fájl olvasására.", + "settings_error_bundled_tor_not_supported": "Az OnionShare beépített Tor-verziója nem használható fejlesztői módban Windows ill. macOS alatt.", + "settings_error_bundled_tor_timeout": "Túl sok időbe telik csatlakozni a Tor-hoz. Lehet hogy nincs internetkapcsolatod, vagy a rendszer órája pontatlan?", + "settings_error_bundled_tor_broken": "Az OnionShare nem tudott a háttérben a Tor-hoz csatlakozni:\n{}", + "settings_test_success": "Csatlakozva a Tor-kontrollerhez.\n\nTor-verziószám: {}\nTámogatott ideiglenes Onion szolgáltatások: {}.\nTámogatott kliens-hitelesítés: {}.\nTámogatott újgenerációs .onion címek: {}.", + "error_tor_protocol_error": "Hiba a Tor-ral: {}", + "error_tor_protocol_error_unknown": "Ismeretlen hiba a Tor-ral", + "error_invalid_private_key": "", + "connecting_to_tor": "Csatlakozás a Tor-hálózathoz", + "update_available": "Új OnionShare-verzió érhető el. Kattints ide a letöltéshez.

A te verziód {}, a mostani pedig {}.", + "update_error_check_error": "Nem sikerült az új verzió keresése: Az OnionShare weboldal szerint az új verzió '{}' ám az felismerhetetlen…", + "update_error_invalid_latest_version": "Nem sikerült az új verzió keresése: Lehet, hogy nem csatlakoztál a Tor-hoz, vagy az OnionShare oldal nem elérhető?", + "update_not_available": "A legújabb OnionShare-verziót használod.", + "gui_tor_connection_ask": "", + "gui_tor_connection_ask_open_settings": "Igen", + "gui_tor_connection_ask_quit": "Kilépés", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "Megosztás", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_started": "Bevétel", + "gui_file_info": "", + "gui_file_info_single": "", + "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": "", + "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_downloads_label": "", + "gui_settings_downloads_button": "Tallózás", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "Az összes törlése", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "Előnyben részesített nyelv", + "gui_settings_language_changed_notice": "", + "gui_add_files": "Fájlok hozzáadása", + "gui_add_folder": "Mappák hozzáadása", + "gui_stop_server_autostop_timer_tooltip": "Auto-stop időzítő megáll: {}", + "gui_start_server_autostart_timer_tooltip": "Auto-start időzítő megáll: {}", + "incorrect_password": "Rossz jelszó", + "gui_settings_autostart_timer": "Megosztás indítása ekkor:", + "gui_settings_autostart_timer_checkbox": "Indítás automata időzítővel", + "gui_settings_individual_downloads_label": "Ne pipáld be az egyenkénti fájlletöltés engedélyezéséhez", + "gui_settings_csp_header_disabled_option": "Tartalombiztonsági Irányelvek-fejléc tiltása", + "gui_settings_onion_label": "Onion-beállítások", + "gui_waiting_to_start": "Indulás ütemezve: {}. Kattints a megszakításhoz." +} diff --git a/desktop/onionshare/resources/locale/id.json b/desktop/onionshare/resources/locale/id.json new file mode 100644 index 00000000..7cdb5993 --- /dev/null +++ b/desktop/onionshare/resources/locale/id.json @@ -0,0 +1,280 @@ +{ + "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_autostop_timer": "Berhenti karena timer berhenti otomatis habis", + "closing_automatically": "Terhenti karena transfer telah tuntas", + "timeout_download_still_running": "", + "large_filesize": "Peringatan: Mengirim dalam jumlah besar dapat memakan waktu berjam-jam", + "systray_menu_exit": "Keluar", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "Tidak menggunakan Tor (hanya untuk pengembangan)", + "help_stay_open": "Lanjutkan berbagi setelah berkas telah terkirim", + "help_autostop_timer": "Berhenti berbagi setelah beberapa detik", + "help_stealth": "Gunakan otorisasi klien (lanjutan)", + "help_receive": "", + "help_verbose": "Catat kesalahan OnionShare ke stdout, dan kesalahan web ke disk", + "help_filename": "Daftar berkas atau folder untuk dibagikan", + "help_config": "", + "gui_drag_and_drop": "Seret dan lepas berkas dan folder untuk mulai berbagi", + "gui_add": "Tambahkan", + "gui_delete": "Hapus", + "gui_choose_items": "Pilih", + "gui_share_start_server": "Mulai berbagi", + "gui_share_stop_server": "Berhenti berbagi", + "gui_share_stop_server_autostop_timer": "Berhenti berbagi ({})", + "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_autostop_timer": "Menghentikan Mode Menerima ({}d tersisa)", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "Salin Alamat", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Dibatalkan", + "gui_copied_url_title": "Alamat OnionShare disalin", + "gui_copied_url": "Alamat OnionShare 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": "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", + "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": "Apakah ini?", + "gui_settings_stealth_option": "Gunakan otorisasi klien", + "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": "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": "Gunakan versi Tor yang terintegrasi dengan OnionShare", + "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": "Hubungkan menggunakan file socket", + "gui_settings_connection_type_test_button": "Menguji sambungan ke Tor", + "gui_settings_control_port_label": "Port kontrol", + "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": "Dukungan Tor bridge", + "gui_settings_tor_bridges_no_bridges_radio_option": "Jangan gunakan bridges", + "gui_settings_tor_bridges_obfs4_radio_option": "Gunakan obfs4 pluggable transports bawaan", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gunakan obfs4 pluggable transports bawaan (memerlukan obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gunakan meek_lite (Azure) pluggable transports bawaan", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gunakan meek_lite (Azure) pluggable transports bawaan (memerlukan obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Peringatan: meek_lite sangat mahal untuk dijalankan oleh Tor Project.

Gunakan hanya jika tidak dapat terhubung ke Tor secara langsung, melalui obfs4 transports,, atau bridge normal lainnya.", + "gui_settings_tor_bridges_custom_radio_option": "Gunakan bridge kustom", + "gui_settings_tor_bridges_custom_label": "Anda bisa mendapatkan bridge dari https://bridges.torproject.org ", + "gui_settings_tor_bridges_invalid": "Tak satu pun dari bridge yang Anda tambahkan bekerja.\nPeriksa kembali atau tambahkan yang lain.", + "gui_settings_button_save": "Simpan", + "gui_settings_button_cancel": "Batal", + "gui_settings_button_help": "Bantuan", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "settings_error_unknown": "Tidak dapat tersambung ke pengontrol Tor karena pengaturan Anda tidak masuk akal.", + "settings_error_automatic": "Tidak dapat terhubung ke pengontrol Tor. Apakah Tor Browser (unduh di torproject.org) berjalan di latar belakang?", + "settings_error_socket_port": "Tidak dapat tersambung ke pengontrol Tor di {}:{}.", + "settings_error_socket_file": "Tidak dapat tersambung ke pengontrol Tor menggunakan file soket {}.", + "settings_error_auth": "Tersambung ke {}:{}, tetapi tidak bisa mengautentikasi. Mungkin ini bukan pengontrol Tor?", + "settings_error_missing_password": "Terhubung ke pengontrol Tor, tetapi memerlukan kata sandi untuk mengotentikasi.", + "settings_error_unreadable_cookie_file": "Terhubung ke pengontrol Tor, tetapi kata sandi mungkin salah, atau pengguna Anda tidak diizinkan untuk membaca file kuki.", + "settings_error_bundled_tor_not_supported": "Menggunakan versi Tor bawaan OnioShare tidak bekerja dalam mode pengembang di Windows atau macOS.", + "settings_error_bundled_tor_timeout": "Terlalu lama terhubung ke Tor. Mungkin Anda tidak terhubung Internet, atau jam sistem tidak akurat?", + "settings_error_bundled_tor_broken": "OnioShare tidak dapat terhubung Tor:\n{}", + "settings_test_success": "Terhubung ke pengontrol Tor.\n\nVersi tor: {}\nMendukung layanan ephemeral onion: {}.\nMendukung otentikasi klien: {}.\nMendukung alamat .onion generasi berikutnya: {}.", + "error_tor_protocol_error": "Ada kesalahan dengan Tor: {}", + "error_tor_protocol_error_unknown": "", + "error_invalid_private_key": "", + "connecting_to_tor": "Menghubungkan ke jaringan Tor", + "update_available": "OnionShare Baru tersedia. klik di sini untuk mendapatkannya.

Anda menggunakan {} dan yang terbaru adalah {}.", + "update_error_check_error": "Tidak dapat memeriksa versi baru: Mungkin Anda tidak terhubung ke Tor, atau situs web OnionShare sedang down?", + "update_error_invalid_latest_version": "Tidak dapat memeriksa versi baru: Situs web OnionShare mengatakan bahwa versi terbaru adalah '{}' yang tidak dapat dikenali…", + "update_not_available": "Anda menjalankan OnionShare terbaru.", + "gui_tor_connection_ask": "Buka pengaturan untuk memilah koneksi ke Tor?", + "gui_tor_connection_ask_open_settings": "Ya", + "gui_tor_connection_ask_quit": "Keluar", + "gui_tor_connection_error_settings": "Coba ubah cara OnionShare terhubung ke jaringan Tor di pengaturan.", + "gui_tor_connection_canceled": "Tidak dapat terhubung ke Tor.\n\nPastikan Anda terhubung ke Internet, kemudian buka kembali OnionShare dan atur koneksinya ke Tor.", + "gui_tor_connection_lost": "Terputus dari Tor.", + "gui_server_started_after_autostop_timer": "Timer berhenti otomatis habis sebelum server dimulai. Silakan buat pembagian baru.", + "gui_server_autostop_timer_expired": "Timer berhenti otomatis sudah habis. Silakan sesuaikan untuk mulai berbagi.", + "share_via_onionshare": "Bagikan via OnionShare", + "gui_save_private_key_checkbox": "", + "gui_share_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunduh berkas Anda menggunakan Tor Browser:", + "gui_receive_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunggah berkas ke komputer Anda menggunakan Tor Browser:", + "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.

Setiap pembagian selanjutnya menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", + "gui_url_label_stay_open": "Pembagian ini tidak akan berhenti otomatis.", + "gui_url_label_onetime": "Pembagian ini akan berhenti setelah penyelesaian pertama.", + "gui_url_label_onetime_and_persistent": "Pembagian ini tidak akan berhenti otomatis.

Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", + "gui_status_indicator_share_stopped": "Siap untuk berbagi", + "gui_status_indicator_share_working": "Memulai…", + "gui_status_indicator_share_started": "Berbagi", + "gui_status_indicator_receive_stopped": "Siap untuk menerima", + "gui_status_indicator_receive_working": "Memulai…", + "gui_status_indicator_receive_started": "Menerima", + "gui_file_info": "{} file, {}", + "gui_file_info_single": "{} file, {}", + "history_in_progress_tooltip": "{} sedang berlangsung", + "history_completed_tooltip": "{} selesai", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "", + "gui_receive_mode_warning": "Mode menerima membiarkan orang mengunggah berkas ke komputer Anda.

Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.", + "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": "Jelajahi", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Halaman dimuat", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "Bahasa", + "gui_settings_language_changed_notice": "Mulai ulang OnionShare untuk menerapkan bahasa baru.", + "gui_add_files": "Tambahkan berkas", + "gui_add_folder": "Tambahkan Folder", + "gui_settings_onion_label": "Pengaturan Onion", + "incorrect_password": "Password salah", + "gui_waiting_to_start": "Dijadwalkan akan dimulai pada {}. Klik untuk membatalkan.", + "gui_start_server_autostart_timer_tooltip": "Timer mulai otomatis berakhir pada {}", + "gui_stop_server_autostop_timer_tooltip": "Timer berhenti otomatis berakhir pada {}", + "gui_new_tab_chat_button": "Mengobrol secara Anonim", + "gui_new_tab_website_button": "Host sebuah situs web", + "gui_main_page_share_button": "Mulai Berbagi", + "gui_main_page_website_button": "Mulai Hosting", + "gui_main_page_receive_button": "Mulai Menerima", + "gui_close_tab_warning_cancel": "Batal", + "gui_close_tab_warning_title": "Anda yakin?", + "gui_tab_name_chat": "Obrolan", + "gui_tab_name_website": "Situs web", + "gui_tab_name_receive": "Menerima", + "gui_tab_name_share": "Berbagi", + "gui_main_page_chat_button": "Mulai Obrolan", + "gui_quit_warning_title": "Anda yakin?", + "gui_receive_flatpak_data_dir": "Karena Anda menginstal OnionShare menggunakan Flatpak, Anda harus menyimpan file ke folder di ~/OnionShare.", + "mode_settings_website_disable_csp_checkbox": "Jangan kirim header Kebijakan Keamanan Konten (memungkinkan situs web Anda menggunakan sumber daya pihak ketiga)", + "gui_open_folder_error": "Gagal membuka folder dengan xdg-open. File ada di sini: {}", + "gui_status_indicator_share_scheduled": "Dijadwalkan…", + "error_cannot_create_data_dir": "Tidak dapat membuat folder data OnionShare: {}", + "history_requests_tooltip": "{} permintaan web", + "gui_status_indicator_receive_scheduled": "Dijadwalkan…", + "systray_page_loaded_message": "Alamat OnionShare dimuat", + "gui_all_modes_transfer_canceled": "Dibatalkan {}", + "gui_all_modes_transfer_canceled_range": "Dibatalkan {} - {}", + "gui_all_modes_transfer_finished": "Ditransfer {}", + "gui_all_modes_transfer_finished_range": "Ditransfer {} - {}", + "mode_settings_receive_data_dir_browse_button": "Telusur", + "mode_settings_receive_data_dir_label": "Simpan file ke", + "mode_settings_share_autostop_sharing_checkbox": "Berhenti berbagi setelah file dikirim (hapus centang untuk memperbolehkan mengunduh file individual)", + "mode_settings_legacy_checkbox": "Gunakan alamat legacy (layanan onion v2, tidak disarankan)", + "mode_settings_autostop_timer_checkbox": "Hentikan layanan onion pada waktu yang dijadwalkan", + "mode_settings_autostart_timer_checkbox": "Mulai layanan onion pada waktu yang dijadwalkan", + "mode_settings_public_checkbox": "Jangan gunakan kata sandi", + "mode_settings_persistent_checkbox": "Simpan tab ini, dan secara otomatis membukanya saat saya membuka OnionShare", + "mode_settings_advanced_toggle_hide": "Sembunyikan pengaturan lanjut", + "mode_settings_advanced_toggle_show": "Tampilkan pengaturan lanjut", + "gui_quit_warning_cancel": "Batal", + "gui_new_tab_receive_button": "Terima File", + "gui_new_tab_share_button": "Bagikan file", + "gui_new_tab_tooltip": "Buka tab baru", + "gui_new_tab": "Tab Baru", + "seconds_first_letter": "d", + "minutes_first_letter": "m", + "hours_first_letter": "j", + "days_first_letter": "h", + "gui_receive_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan penerimaan", + "gui_receive_mode_no_files": "Belum Ada File yang Diterima", + "gui_website_mode_no_files": "Belum Ada Situs Web yang Dibagikan", + "gui_share_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan pengiriman", + "gui_share_mode_no_files": "Belum Ada File yang Dikirim", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_all_modes_progress_starting": "{0:s}, %p% (menghitung)", + "gui_all_modes_progress_complete": "%p%, {0:s} berlalu.", + "gui_all_modes_transfer_started": "Dimulai {}", + "gui_all_modes_clear_history": "Bersihkan Semua", + "gui_all_modes_history": "Riwayat", + "systray_receive_started_message": "Seseorang mengirim file kepada Anda", + "systray_receive_started_title": "Menerima Dimulai", + "systray_share_canceled_message": "Seseorang membatalkan menerima file Anda", + "systray_share_canceled_title": "Berbagi Dibatalkan", + "systray_share_completed_message": "Selesai mengirim file", + "systray_share_completed_title": "Berbagi Selesai", + "systray_share_started_message": "Mulai mengirim file ke seseorang", + "systray_share_started_title": "Berbagi dimulai", + "gui_color_mode_changed_notice": "Mulai ulang OnionShare agar mode warna baru diterapkan.", + "gui_qr_code_dialog_title": "Kode QR OnionShare", + "gui_show_qr_code": "Tampilkan kode QR", + "error_port_not_available": "Port OnionShare tidak tersedia", + "gui_chat_stop_server": "Hentikan server obrolan", + "gui_chat_start_server": "Mulai server obrolan", + "gui_file_selection_remove_all": "Hapus Semua", + "gui_remove": "Hapus", + "history_receive_read_message_button": "Baca Pesan", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Waktu berhenti otomatis tidak boleh sama atau lebih awal dari waktu mulai otomatis. Silakan sesuaikan untuk mulai berbagi.", + "gui_rendezvous_cleanup_quit_early": "Keluar Dini", + "gui_rendezvous_cleanup": "Menunggu sirkuit Tor menutup untuk memastikan berkas Anda telah berhasil ditransfer.\n\nIni mungkin perlu beberapa menit.", + "mode_settings_receive_webhook_url_checkbox": "Gunakan notifikasi webhook", + "mode_settings_receive_disable_files_checkbox": "Nonaktifkan pengunggahan berkas", + "mode_settings_receive_disable_text_checkbox": "Nonaktifkan pengiriman teks", + "mode_settings_title_label": "Judul kustom", + "gui_quit_warning_description": "Pembagian sedang aktif di beberapa tab Anda. Jika Anda keluar, seluruh tab Anda akan tertutup. Apakah Anda yakin mau keluar?", + "gui_close_tab_warning_close": "Tutup", + "gui_close_tab_warning_website_description": "Anda secara aktif menghosting situs web. Apakah Anda yakin mau menutup tab ini?", + "gui_close_tab_warning_receive_description": "Anda dalam proses menerima berkas. Apakah Anda yakin mau menutup tab ini?", + "gui_close_tab_warning_share_description": "Anda dalam proses mengirim berkas. Apakah Anda yakin mau menutup tab ini?", + "gui_close_tab_warning_persistent_description": "Tab ini persisten. Jika Anda menutup tab ini Anda akan kehilangan alamat onion yang sedang digunakan. Apakah Anda yakin mau menutup tab ini?", + "gui_chat_url_description": "Siapa saja dengan alamat OnionShare ini dapat bergabung di ruang obrolan ini menggunakan Tor Browser:", + "gui_website_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunjungi situs web Anda menggunakan Tor Browser:", + "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi.", + "gui_status_indicator_chat_started": "Mengobrol", + "gui_status_indicator_chat_scheduled": "Menjadwalkan…", + "gui_status_indicator_chat_working": "Memulai…", + "gui_status_indicator_chat_stopped": "Siap untuk mengobrol", + "gui_copied_client_auth_title": "Kunci Pribadi Disalin", + "gui_copy_client_auth": "Salin Kunci Pribadi" +} diff --git a/desktop/onionshare/resources/locale/is.json b/desktop/onionshare/resources/locale/is.json new file mode 100644 index 00000000..a1c2b9af --- /dev/null +++ b/desktop/onionshare/resources/locale/is.json @@ -0,0 +1,338 @@ +{ + "config_onion_service": "Set upp onion-þjónustu á gátt {0:d}.", + "preparing_files": "Þjappa skrám.", + "give_this_url": "Láttu viðtakandann hafa þetta vistfang:", + "give_this_url_stealth": "Láttu viðtakandann hafa þetta vistfang ásamt línunni með HidServAuth:", + "give_this_url_receive": "Láttu sendandann hafa þetta vistfang:", + "give_this_url_receive_stealth": "Láttu sendandann hafa þetta vistfang ásamt línunni með HidServAuth:", + "ctrlc_to_stop": "Ýttu á Ctrl+C til að stöðva þjóninn", + "not_a_file": "{0:s} er ekki gild skrá.", + "not_a_readable_file": "{0:s} er ekki læsileg skrá.", + "no_available_port": "Fann ekki tiltæka gátt til að hefja á onion-þjónustuna", + "other_page_loaded": "Vistfangi hlaðið inn", + "close_on_autostop_timer": "Stöðvað vegna þess að sjálfvirk niðurtalning endaði", + "closing_automatically": "Stöðvað vegna þess að flutningi er lokið", + "timeout_download_still_running": "", + "large_filesize": "Aðvörun: að senda stóra skrá getur tekið klukkustundir", + "systray_menu_exit": "Hætta", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "Ekki nota Tor (einungis fyrir þróunarvinnu)", + "help_stay_open": "Halda áfram deilingu eftir að skrár hafa verið sendar", + "help_autostop_timer": "Hætta deilingu eftir tiltekinn fjölda sekúndna", + "help_stealth": "Nota auðkenningu biðlaraforrits (ítarlegt)", + "help_receive": "Taka á móti sameignum í staðinn fyrir að senda þær", + "help_debug": "Skrá OnionShare-villur í stdout og vefvillur á disk", + "help_filename": "Listi yfir skrár eða möppur sem á að deila", + "help_config": "Staðsetning sérsniðinnar JSON-stillingaskrár (valfrjálst)", + "gui_drag_and_drop": "Dragðu og slepptu skrám og möppum til að hefja deilingu", + "gui_add": "Bæta við", + "gui_delete": "Eyða", + "gui_choose_items": "Veldu", + "gui_share_start_server": "Hefja deilingu", + "gui_share_stop_server": "Hætta deilingu", + "gui_share_stop_server_autostop_timer": "Hætta deilingu ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar {}", + "gui_receive_start_server": "Byrja í móttökuham", + "gui_receive_stop_server": "Hætta í móttökuham", + "gui_receive_stop_server_autostop_timer": "Hætta í móttökuham ({} eftir)", + "gui_receive_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar {}", + "gui_copy_url": "Afrita vistfang", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Hætt við", + "gui_copied_url_title": "Afritaði OnionShare-vistfang", + "gui_copied_url": "OnionShare-vistfang afritað á klippispjald", + "gui_please_wait": "Ræsi... Smelltu til að hætta við.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Ekki svona snöggt", + "gui_share_quit_warning": "Þú ert að senda skrár. Ertu viss um að þú viljir hætta í OnionShare?", + "gui_receive_quit_warning": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir hætta í OnionShare?", + "gui_quit_warning_quit": "Hætta", + "gui_quit_warning_dont_quit": "Hætta við", + "zip_progress_bar_format": "Þjappa: %p%", + "error_stealth_not_supported": "Til að nota biðlaraauðkenningu þarf a.m.k. bæði Tor 0.2.9.1-Alpha (eða Tor Browser 6,5) og python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare krefst a.m.k. bæði Tor 0.2.7.1 og python3-stem 1.4.0.", + "gui_settings_window_title": "Stillingar", + "gui_settings_whats_this": "Hvað er þetta?", + "gui_settings_stealth_option": "Nota auðkenningu biðlaraforrits", + "gui_settings_autoupdate_label": "Athuga með nýja útgáfu", + "gui_settings_autoupdate_option": "Láta vita þegar ný útgáfa er tiltæk", + "gui_settings_autoupdate_timestamp": "Síðast athugað: {}", + "gui_settings_autoupdate_timestamp_never": "Aldrei", + "gui_settings_autoupdate_check_button": "Athuga með nýjar útgáfur", + "gui_settings_general_label": "Almennar stillingar", + "gui_settings_sharing_label": "Stillingar deilingar", + "gui_settings_close_after_first_download_option": "Hætta deilingu eftir að skrár hafa verið sendar", + "gui_settings_connection_type_label": "Hvernig ætti OnionShare að tengjast við Tor?", + "gui_settings_connection_type_bundled_option": "Nota Tor útgáfuna sem er innbyggð í OnionShare", + "gui_settings_connection_type_automatic_option": "Reyna sjálfvirka uppsetningu með Tor-vafranum", + "gui_settings_connection_type_control_port_option": "Tengjast með stýrigátt", + "gui_settings_connection_type_socket_file_option": "Tengjast með sökkulskrá", + "gui_settings_connection_type_test_button": "Prófa tengingu við Tor", + "gui_settings_control_port_label": "Stýrigátt", + "gui_settings_socket_file_label": "Sökkulskrá", + "gui_settings_socks_label": "SOCKS-gátt", + "gui_settings_authenticate_label": "Auðkenningarstillingar Tor", + "gui_settings_authenticate_no_auth_option": "Engin auðkenning eða auðkenning með vefköku", + "gui_settings_authenticate_password_option": "Lykilorð", + "gui_settings_password_label": "Lykilorð", + "gui_settings_tor_bridges": "Tengjast með Tor-brú?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ekki nota brýr", + "gui_settings_tor_bridges_obfs4_radio_option": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Aðvörun: Að reka meek_azure brýrnar er kostnaðarsamt fyrir Tor-verkefnið.

Ekki nota þær nema þér takist ekki að tengjast beint við Tor, með obfs4 tengileið, eða öðrum venjulegum brúm.", + "gui_settings_tor_bridges_custom_radio_option": "Nota sérsniðnar brýr", + "gui_settings_tor_bridges_custom_label": "Þú getur náð í brýr frá https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka. Yfirfarðu þær eða bættu öðrum við.", + "gui_settings_button_save": "Vista", + "gui_settings_button_cancel": "Hætta við", + "gui_settings_button_help": "Hjálp", + "gui_settings_autostop_timer_checkbox": "Nota sjálfvirka niðurtalningu", + "gui_settings_autostop_timer": "Stöðva deilinguna:", + "settings_error_unknown": "Gat ekki tengst við Tor-stýringu því engin glóra er í stillingunum þínum.", + "settings_error_automatic": "Ekki tókst að tengjast Tor-stýringunni. Er Tor-vafrinn (tiltækur á torproject.org) keyrandi í bakgrunni?", + "settings_error_socket_port": "Gat ekki tengst við Tor-stýringu á {}:{}.", + "settings_error_socket_file": "Gat ekki tengst við Tor-stýringu með sökkulskránni {}.", + "settings_error_auth": "Tengt við {}:{}, en get ekki auðkennt. Kannski er þetta ekki Tor-stýring?", + "settings_error_missing_password": "Tengt við Tor-stýringu, en hún krefst lykilorðs fyrir auðkenningu.", + "settings_error_unreadable_cookie_file": "Tengt við Tor-stýringuna, en lykilorðið gæti verið rangt eða að notandinn þinn hafi ekki heimild til að lesa vefkökuskrána.", + "settings_error_bundled_tor_not_supported": "Sé notuð Tor útgáfan sem er innbyggð í OnionShare, virkar hún ekki í þróunarham á Windows eða macOS.", + "settings_error_bundled_tor_timeout": "Það tekur of langan tíma að tengjast við Tor. Kannski er ekki tenging við internetið, nú eða að klukka kerfisins sé ekki rétt stillt?", + "settings_error_bundled_tor_broken": "OnionShare gat ekki tengst við Tor:\n{}", + "settings_test_success": "Tengt við Tor-stýringuna.\n\nTor útgáfa: {}\nStyður stuttlifandi onion-þjónustur: {}.\nStyður auðkenningu biðlaraforrits: {}.\nStyður næstu-kynslóðar .onion vistföng: {}.", + "error_tor_protocol_error": "Það kom upp villa í Tor: {}", + "error_tor_protocol_error_unknown": "Það kom uppóþekkt villa varðandi Tor", + "error_invalid_private_key": "Þessi gerð einkalykils er ekki studd", + "connecting_to_tor": "Tengist við Tor-netkerfið", + "update_available": "Ný útgáfa OnionShare er komin út. Smelltu hér til að ná í hana.

Þú ert að nota útgáfu {} og sú nýjasta er {}.", + "update_error_check_error": "Gat ekki athugað með nýjar uppfærslur: mögulega ertu ekki tengd(ur) við Tor eða að vefsvæði OnionShare sé óvirkt í augnablikinu?", + "update_error_invalid_latest_version": "Gat ekki athugað með nýjar uppfærslu: vefsvæði OnionShare tilkynnir að nýjasta útgáfan sé hin óskiljanlega '{}'…", + "update_not_available": "Þú ert þegar að keyra nýjustu útgáfu OnionShare.", + "gui_tor_connection_ask": "Opna stillingarnar til að ráða fram úr tengingu við Tor?", + "gui_tor_connection_ask_open_settings": "Já", + "gui_tor_connection_ask_quit": "Hætta", + "gui_tor_connection_error_settings": "Prófaðu að breyta í stillingunum hvernig OnionShare tengist við Tor-netkerfið.", + "gui_tor_connection_canceled": "Tókst ekki að tengjast Tor.\n\nGakktu úr skugga um að þú sért tengd/ur internetinu, opnaðu síðan aftur OnionShare og settu upp tengingu þess við Tor.", + "gui_tor_connection_lost": "Aftengt frá Tor.", + "gui_server_autostop_timer_expired": "Sjálfvirkri niðurtalningu er þegar lokið. Lagaðu hana til að hefja deilingu.", + "share_via_onionshare": "Deila með OnionShare", + "gui_save_private_key_checkbox": "Nota viðvarandi vistföng", + "gui_share_url_description": "Hver sem er með þetta OnionShare vistfang og þennan einkalykil getur sótt skrárnar þínar með því að nota Tor-vafrann: ", + "gui_receive_url_description": "Hver sem er með þetta OnionShare vistfang og einkalykil getur sent skrár inn á tölvuna þína með því að nota Tor-vafrann: ", + "gui_url_label_persistent": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.

Allar deilingar sem á eftir koma munu endurnýta vistfangið. (Til að nota eins-skiptis vistföng skaltu slökkva á \"Nota viðvarandi vistföng\" í stillingunum.)", + "gui_url_label_stay_open": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.", + "gui_url_label_onetime": "Deiling þessarar sameignar mun stöðvast eftir fyrstu klárun.", + "gui_url_label_onetime_and_persistent": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.

Allar deilingar sem á eftir koma munu endurnýta vistfangið. (Til að nota eins-skiptis vistföng skaltu slökkva á \"Nota viðvarandi vistföng\" í stillingunum.)", + "gui_status_indicator_share_stopped": "Tilbúið til að deila", + "gui_status_indicator_share_working": "Ræsi…", + "gui_status_indicator_share_started": "Deiling", + "gui_status_indicator_receive_stopped": "Tilbúið til að taka við", + "gui_status_indicator_receive_working": "Ræsi…", + "gui_status_indicator_receive_started": "Tek á móti", + "gui_file_info": "{} skrár, {}", + "gui_file_info_single": "{} skrá, {}", + "history_in_progress_tooltip": "{} í vinnslu", + "history_completed_tooltip": "{} lokið", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "Aðvörun: móttökuhamur leyfir fólk að hlaða skrám inn á tölvuna þína. Sumar skrár geta hugsanlega tekið yfir stjórn á tölvunni ef þær eru opnaðar. Ekki opna hluti nema frá fólki sem þú treystir, eða ef þú veist raunverulega hvað þú ert að gera.", + "gui_receive_mode_warning": "Móttökuhamur leyfir fólk að hlaða skrám inn á tölvuna þína.

Sumar skrár geta hugsanlega tekið yfir stjórn á tölvunni ef þær eru opnaðar. Ekki opna hluti nema frá fólki sem þú treystir, eða ef þú veist raunverulega hvað þú ert að gera.", + "receive_mode_upload_starting": "Innsending alls {} er að ræsast", + "receive_mode_received_file": "Móttekið: {}", + "gui_mode_share_button": "Deila skrám", + "gui_mode_receive_button": "Taka á móti skrám", + "gui_settings_receiving_label": "Stillingar á móttöku", + "gui_settings_downloads_label": "", + "gui_settings_downloads_button": "Flakka", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Opinber hamur", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Síða lesin inn", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "Get ekki opnað möppu því nautilus er ekki til taks. Skráin er hér: {}", + "gui_settings_language_label": "Tungumál", + "gui_settings_language_changed_notice": "Þú þarft að endurræsa OnionShare til að nýtt tungumál taki gildi.", + "gui_add_files": "Bæta við skrám", + "gui_add_folder": "Bæta við möppu", + "gui_settings_onion_label": "Onion-stillingar", + "gui_connect_to_tor_for_onion_settings": "Tengstu við Tor til að sjá stillingar onion-þjónustu", + "error_cannot_create_data_dir": "Gat ekki búið til OnionShare gagnamöppu: {}", + "receive_mode_data_dir": "Skrár sem þér eru sendar munu birtast í þessari möppu: {}", + "gui_settings_data_dir_label": "Vista skrár í", + "gui_settings_data_dir_browse_button": "Flakka", + "systray_page_loaded_message": "OnionShare-vistfang hlaðið inn", + "systray_share_started_title": "Deiling hafin", + "systray_share_started_message": "Byrja að senda skrár til einhvers", + "systray_share_completed_title": "Deilingu lokið", + "systray_share_completed_message": "Lokið við að senda skrár", + "systray_share_canceled_title": "Hætt við deilingu", + "systray_share_canceled_message": "Einhver hætti við að taka á móti skrám frá þér", + "systray_receive_started_title": "Móttaka hafin", + "systray_receive_started_message": "Einhver er að senda þér skrár", + "gui_all_modes_history": "Vinnsluferill", + "gui_all_modes_clear_history": "Hreinsa allt", + "gui_all_modes_transfer_started": "Ræsti {}", + "gui_all_modes_transfer_finished_range": "Færði {} - {}", + "gui_all_modes_transfer_finished": "Færði {}", + "gui_all_modes_transfer_canceled_range": "Hætt við {} - {}", + "gui_all_modes_transfer_canceled": "Hætt við {}", + "gui_all_modes_progress_complete": "%p%, {0:s} liðnar.", + "gui_all_modes_progress_starting": "{0:s}, %p% (reikna)", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_share_mode_no_files": "Engar skrár sendar ennþá", + "gui_share_mode_autostop_timer_waiting": "Bíð þess að sendingu ljúki", + "gui_receive_mode_no_files": "Engar skrár mótteknar ennþá", + "gui_receive_mode_autostop_timer_waiting": "Bíð þess að móttöku ljúki", + "gui_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar kl. {}", + "gui_start_server_autostart_timer_tooltip": "Sjálfvirk ræsing endar kl. {}", + "gui_waiting_to_start": "Áætlað að ræsa eftir {}. Smelltu til að hætta við.", + "gui_settings_autostart_timer_checkbox": "Nota sjálfvirka niðurtalningu ræsingar", + "gui_settings_autostart_timer": "Byrja deilinguna:", + "gui_server_started_after_autostop_timer": "Sjálfvirka niðurtalningin rann út áður en þjónninn ræstist. Útbúðu nýja sameign.", + "gui_server_autostart_timer_expired": "Áætlaðri tímasetningu er þegar lokið. Lagaðu hana til að hefja deilingu.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Tímasetning sjálfvirkrar lokaniðurtalningar má ekki vera sú sama eða á undan sjálfvirkri ræsiniðurtalningu. Lagaðu tímasetninguna til að hefja deilingu.", + "gui_status_indicator_share_scheduled": "Áætlað…", + "gui_status_indicator_receive_scheduled": "Áætlað…", + "days_first_letter": "dag", + "hours_first_letter": "klst", + "minutes_first_letter": "mín", + "seconds_first_letter": "sek", + "gui_website_url_description": "Hver sem er með þetta OnionShare vistfang og einkalykil getur skoðað vefsvæðið þitt með því að nota Tor-vafrann: ", + "gui_mode_website_button": "Birta vefsvæði", + "gui_website_mode_no_files": "Ennþá hefur engu vefsvæði verið deilt", + "incorrect_password": "Rangt lykilorð", + "gui_settings_individual_downloads_label": "Taktu merkið úr til að leyfa niðurhal á stökum skrám", + "history_requests_tooltip": "{} vefbeiðnir", + "gui_settings_csp_header_disabled_option": "Gera haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan", + "gui_settings_website_label": "Stillingar vefsvæðis", + "gui_new_tab_share_description": "Veldu skrár á tölvunni til að senda einhverjum öðrum. Sá eða þau sem þú ætlar að senda skrárnar þarf að nota Tor-vafrann til að sækja þær frá þér.", + "gui_new_tab_receive_description": "Breyttu tölvunni þinni í nettengt afhendingarhólf (dropbox). Fólk getur þá notað Tor-vafrann til að senda skrár inn á tölvuna þína.", + "mode_settings_persistent_checkbox": "Vista þennan flipa og opna hann sjálfkrafa þegar ég opna OnionShare", + "gui_close_tab_warning_persistent_description": "Þessi flipi er viðvarandi. Ef þú lokar honum muntu tapa onion-vistfanginu sem hann er að nota. Ertu viss að þú viljir loka honum?", + "gui_quit_warning_description": "Deiling er virk í sumum flipanna þinna. Ef þú hættir núna, lokast allir fliparnir. Ertu viss um að þú viljir hætta?", + "mode_settings_share_autostop_sharing_checkbox": "Hætta að deila eftir að skrár hafa verið sendar (taka merkið úr reitnum til að leyfa niðurhal á stökum skrám)", + "mode_settings_website_disable_csp_checkbox": "Gera sjálfgefinn haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan (gerir vefsvæðinu þínu kleift að nota tilföng frá utanaðkomandi aðilum)", + "gui_close_tab_warning_share_description": "Þú ert að senda skrár. Ertu viss um að þú viljir loka þessum flipa?", + "mode_settings_legacy_checkbox": "Nota eldri gerð vistfangs (onion-þjónusta af útgáfu 2, ekki mælt með því)", + "gui_close_tab_warning_website_description": "Þú ert að hýsa vefsvæði. Ertu viss um að þú viljir loka þessum flipa?", + "gui_close_tab_warning_receive_description": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir loka þessum flipa?", + "gui_new_tab_website_description": "Hýstu statskt HTML onion-vefsvæði frá tölvunni þinni.", + "mode_settings_receive_data_dir_browse_button": "Skoða", + "mode_settings_public_checkbox": "Þetta er opinber OnionShare-þjónusta (gerir einkalykil óvirkann)", + "mode_settings_receive_data_dir_label": "Vista skrár í", + "mode_settings_autostart_timer_checkbox": "Ræsa onion-þjónustu á áætluðum tíma", + "gui_quit_warning_title": "Ertu viss?", + "gui_new_tab_share_button": "Deila skrám", + "mode_settings_advanced_toggle_show": "Birta ítarlegar stillingar", + "gui_new_tab_tooltip": "Opna nýjan flipa", + "gui_new_tab_receive_button": "Taka á móti skrám", + "mode_settings_advanced_toggle_hide": "Fela ítarlegar stillingar", + "gui_quit_warning_cancel": "Hætta við", + "gui_close_tab_warning_title": "Ertu viss?", + "gui_new_tab_website_button": "Hýsa vefsvæði", + "gui_new_tab": "Nýr flipi", + "gui_close_tab_warning_close": "Loka", + "gui_close_tab_warning_cancel": "Hætta við", + "mode_settings_autostop_timer_checkbox": "Stöðva onion-þjónustu á áætluðum tíma", + "gui_receive_flatpak_data_dir": "Þar sem þú settir OnionShare upp með því að nota Flatpak, þá verður þú að vista skrár í möppu undir ~/OnionShare.", + "gui_tab_name_receive": "Taka á móti", + "gui_chat_stop_server": "Stöðva spjallþjón", + "gui_chat_start_server": "Ræsa spjallþjón", + "gui_tab_name_chat": "Spjall", + "gui_tab_name_website": "Vefsvæði", + "gui_tab_name_share": "Deila", + "gui_open_folder_error": "Mistókst að opna möppu með xdg-open. Skráin er hér: {}", + "gui_qr_code_description": "Skannaðu þennan QR-kóða með QR-kóðalesara, svo sem eins og með myndavélinni á símanum þínum, svo auðveldara sé fyrir þig að deila OnionShare-vistfanginu með öðrum.", + "gui_remove": "Fjarlægja", + "gui_chat_stop_server_autostop_timer": "Stöðva spjallþjón ({})", + "gui_qr_code_dialog_title": "QR-kóði OnionShare", + "gui_file_selection_remove_all": "Fjarlægja allt", + "gui_show_qr_code": "Birta QR-kóða", + "gui_new_tab_chat_button": "Spjalla nafnlaust", + "gui_main_page_chat_button": "Hefja spjall", + "gui_main_page_website_button": "Hefja hýsingu", + "gui_main_page_receive_button": "Hefja móttöku", + "gui_main_page_share_button": "Hefja deilingu", + "gui_chat_url_description": "Hver og einn með þetta OnionShare-vistfang og einkalykil getur tekið þátt í þessari spjallrás í gegnum Tor-vafrann: ", + "error_port_not_available": "OnionShare-gátt ekki tiltæk", + "gui_rendezvous_cleanup_quit_early": "Hætta snemma", + "gui_rendezvous_cleanup": "Bíð eftir að Tor-rásir lokist svo öruggt sé að tekist hafi að flytja skrárnar þínar.\n\nÞetta gæti tekið nokkrar mínútur.", + "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi.", + "history_receive_read_message_button": "Lesa skilaboð", + "mode_settings_receive_webhook_url_checkbox": "Nota webhook fyrir tilkynningar", + "mode_settings_receive_disable_files_checkbox": "Gera innsendingu skráa óvirka", + "mode_settings_receive_disable_text_checkbox": "Gera innsendingu texta óvirka", + "mode_settings_title_label": "Sérsniðinn titill", + "gui_status_indicator_chat_started": "Spjalla", + "gui_status_indicator_chat_scheduled": "Áætlað…", + "gui_status_indicator_chat_working": "Ræsi…", + "gui_status_indicator_chat_stopped": "Tilbúið í spjall", + "gui_please_wait_no_button": "Ræsi…", + "gui_settings_theme_dark": "Dökkt", + "gui_settings_theme_light": "Ljóst", + "gui_settings_theme_auto": "Sjálfvirkt", + "gui_settings_theme_label": "Þema", + "gui_server_doesnt_support_stealth": "Því miður, þessi útgáfa Tor styður ekki huliðsham (stealth - m. auðkenningu biðlara). Prófaðu að nota nýrri útgáfu af Tor eða að nota opinberan 'public' ham ef þetta þarf ekki að vera einkamál.", + "gui_client_auth_instructions": "Næst skaltu senda einkalykilinn til að heimila aðgang að OnionShare-þjónustunni þinni:", + "gui_url_instructions_public_mode": "Sendu OnionShare-vistfangið sem er hér fyrir neðan:", + "gui_url_instructions": "Fyrst skaltu senda OnionShare-vistfangið sem er hér fyrir neðan:", + "gui_chat_url_public_description": "Hver og einn með þetta OnionShare-vistfang getur tekið þátt í þessari spjallrás í gegnum Tor-vafrann: ", + "gui_receive_url_public_description": "Hver sem er með þetta OnionShare vistfang getur sent skrár inn á tölvuna þína með því að nota Tor-vafrann: ", + "gui_website_url_public_description": "Hver sem er með þetta OnionShare vistfang getur skoðað vefsvæðið þitt með því að nota Tor-vafrann: ", + "gui_share_url_public_description": "Hver sem er með þetta OnionShare vistfang getur sótt skrárnar þínar með því að nota Tor-vafrann: ", + "gui_hide": "Fela", + "gui_reveal": "Birta", + "gui_qr_label_auth_string_title": "Einkalykill", + "gui_qr_label_url_title": "OnionShare-vistfang", + "gui_copied_client_auth": "Einkalykill afritaður á klippispjald", + "gui_copied_client_auth_title": "Afritaði einkalykil", + "gui_copy_client_auth": "Afrita einkalykil", + "gui_tor_settings_window_title": "Stillingar Tor", + "gui_settings_controller_extras_label": "Stillingar Tor", + "gui_settings_bridge_use_checkbox": "Nota brú", + "gui_settings_bridge_radio_builtin": "Velja innbyggða brú", + "gui_settings_bridge_none_radio_option": "Ekki nota brú", + "gui_settings_tor_bridges_label": "Brýr hjálpa þér við að tengjast Tor-netinu þar sem lokað er á Tor. Það fer eftir því hvar þú ert hvaða brýr virka best, ein brú getur virkað betur en aðrar.", + "mode_settings_website_custom_csp_checkbox": "Senda sérsniðinn haus fyrir öryggisstefnu efnis (Content Security Policy)", + "moat_captcha_submit": "Senda inn", + "gui_settings_bridge_moat_radio_option": "Biðja um brú frá torproject.org", + "gui_settings_bridge_moat_button": "Biðja um nýja brú", + "gui_settings_bridge_custom_radio_option": "Settu inn brúna sem þú heyrðir um hjá áreiðanlegum aðila", + "gui_settings_bridge_custom_placeholder": "skrifaðu vistfang:gátt (eitt á hverja línu)", + "gui_settings_moat_bridges_invalid": "Þú hefur ekki ennþá beðið um brú frá torproject.org.", + "gui_settings_stop_active_tabs_label": "Það eru þjónustur að keyra í sumum flipanna þinna.\nÞú þarft að stöðva allar þjónustur til að breyta Tor-stillingunum þínum.", + "gui_settings_version_label": "Þú ert að nota OnionShare {}", + "gui_settings_help_label": "Þarftu aðstoð? Skoðaðu docs.onionshare.org", + "moat_captcha_error": "Þetta er ekki rétt, reyndu aftur.", + "moat_contact_label": "Hef samband við brúagagnagrunn...", + "moat_captcha_label": "Leystu CAPTCHA-þraut til að biðja um brýr.", + "moat_captcha_placeholder": "Settu inn stafina úr myndinni", + "moat_solution_empty_error": "Þú verður að setja inn stafina úr myndinni", + "moat_captcha_reload": "Endurhlaða", + "moat_bridgedb_error": "Villa við að tengjast brúagagnagrunni.", + "mode_tor_not_connected_label": "OnionShare er ekki tengt við Tor-netið", + "gui_dragdrop_sandbox_flatpak": "Til að auka öryggi Flatpak sandkassans, er draga/sleppa ekki stutt. Notaðu frekar hnappana til að bæta við skrám og möppum." +} diff --git a/desktop/onionshare/resources/locale/it.json b/desktop/onionshare/resources/locale/it.json new file mode 100644 index 00000000..9063f0f0 --- /dev/null +++ b/desktop/onionshare/resources/locale/it.json @@ -0,0 +1,279 @@ +{ + "preparing_files": "Compressione dei file in corso.", + "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": "Indirizzo caricato", + "closing_automatically": "Fermato perché il trasferimento è completato", + "large_filesize": "Attenzione: inviare file di grandi dimensioni può richiedere ore", + "help_local_only": "Non usare Tor (solo per lo sviluppo)", + "help_stay_open": "Mantieni la condivisione attiva anche dopo che i file sono stati inviati", + "help_verbose": "Registra gli errori sul disco", + "help_filename": "Lista dei file o cartelle da condividere", + "gui_drag_and_drop": "Trascina e rilascia i file e le cartelle per iniziare la condivisione", + "gui_add": "Aggiungi", + "gui_delete": "Cancella", + "gui_choose_items": "Scegli", + "gui_share_start_server": "Inizia la condivisione", + "gui_share_stop_server": "Arresta la condivisione", + "gui_copy_url": "Copia Indirizzo", + "gui_downloads": "Cronologia dei Download", + "gui_canceled": "Annullato", + "gui_copied_url": "Indirizzo OnionShare copiato negli appunti", + "gui_please_wait": "Avviato... Clicca per annullare.", + "zip_progress_bar_format": "Compressione al: %p%", + "config_onion_service": "Preparando il servizio onion sulla porta {0:d}.", + "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.", + "no_available_port": "Non è stato possibile trovare alcuna porta per avviare il servizio onion", + "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", + "systray_download_started_message": "Un utente ha iniziato il download dei tuoi file", + "systray_download_completed_title": "Download completato", + "systray_download_completed_message": "L'utente ha terminato il download dei tuoi file", + "systray_download_canceled_title": "OnionShare Download cancellato", + "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_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_autostop_timer": "Arresta la condivisione ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Il timer si arresterà tra {}", + "gui_receive_start_server": "Avvia modalità Ricezione", + "gui_receive_stop_server": "Arresta modalità Ricezione", + "gui_receive_stop_server_autostop_timer": "Interrompi la ricezione ({} rimanenti)", + "gui_receive_stop_server_autostop_timer_tooltip": "Il timer termina tra {}", + "gui_no_downloads": "Ancora nessun Download", + "gui_copied_url_title": "Indirizzo OnionShare copiato", + "gui_download_upload_progress_complete": "%p%, {0:s} trascorsi.", + "gui_download_upload_progress_starting": "{0:s}, %p% (calcolato)", + "gui_download_upload_progress_eta": "{0:s}, Terminando in: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org", + "gui_quit_title": "Non così in fretta", + "gui_share_quit_warning": "Stai inviando dei file. Sei sicuro di voler uscire da OnionShare?", + "gui_receive_quit_warning": "Stai ricevendo dei file, vuoi davvero terminare OnionShare?", + "gui_quit_warning_quit": "Esci", + "gui_quit_warning_dont_quit": "Annulla", + "error_stealth_not_supported": "Per usare l'opzione \"client auth\" hai bisogno almeno della versione di Tor 0.2.9.1-alpha (o Tor Browser 6.5) con python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare richiede almeno Tor 0.2.7.1 e python3-stem 1.4.0.", + "gui_settings_window_title": "Impostazioni", + "gui_settings_whats_this": "Cos'è questo?", + "help_receive": "Ricevi le condivisioni invece di inviarle", + "gui_settings_stealth_option": "Usa l'autorizzazione client (legacy)", + "gui_settings_autoupdate_label": "Verifica se c'è una nuova versione", + "gui_settings_autoupdate_option": "Avvisami quando è disponibile una nuova versione", + "gui_settings_autoupdate_timestamp": "Ultimo controllo: {}", + "gui_settings_autoupdate_timestamp_never": "Mai", + "gui_settings_autoupdate_check_button": "Controlla se esiste una nuova versione", + "gui_settings_general_label": "Impostazioni generali", + "gui_settings_sharing_label": "Impostazioni di condivisione", + "gui_settings_close_after_first_download_option": "Interrompe la condivisione dopo che i file sono stati inviati", + "gui_settings_connection_type_label": "Come dovrebbe connettersi OnionShare a Tor?", + "gui_settings_connection_type_bundled_option": "Usa la versione Tor integrata in OnionShare", + "gui_settings_connection_type_automatic_option": "Tentativo di auto-configurazione con Tor Browser", + "gui_settings_language_label": "Lingua preferita", + "gui_settings_language_changed_notice": "Riavvia OnionShare affinché il cambiamento della tua lingua abbia effetto.", + "gui_settings_tor_bridges_custom_radio_option": "Usa bridge personalizzati", + "timeout_upload_still_running": "In attesa del completamento dell'upload", + "gui_add_files": "Aggiungi file", + "gui_add_folder": "Aggiungi una cartella", + "gui_settings_connection_type_control_port_option": "Connetti usando la porta di controllo", + "gui_settings_connection_type_socket_file_option": "Collegamento tramite file socket", + "gui_settings_connection_type_test_button": "Verifica la connessione a Tor", + "gui_settings_socket_file_label": "File di socket", + "gui_settings_socks_label": "Porta SOCKS", + "gui_settings_authenticate_label": "Impostazioni di autenticazione Tor", + "gui_settings_authenticate_password_option": "Password", + "gui_settings_password_label": "Password", + "gui_settings_control_port_label": "Porta di controllo", + "gui_settings_authenticate_no_auth_option": "Nessuna autenticazione, o cookie di autenticazione", + "gui_settings_tor_bridges": "Supporto bridge Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "Non usare i bridge", + "gui_settings_tor_bridges_obfs4_radio_option": "Usa i trasporti collegabili obfs4 integrati", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usa i trasporti collegabili obfs4 integrati (richiede obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usa i trasporti collegabili meek_lite (Azure) integrati", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usa i trasporti collegabili meek_lite (Azure) integrati (richiede obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Attenzione: i bridge meek_lite sono molto costosi da mantenere per il Progetto Tor.

Usali solo se è impossibile connettersi a Tor direttamente, con i trasporti obfs4, o con un altro bridge normale.", + "gui_settings_tor_bridges_custom_label": "Puoi ottenere i bridge da https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nessuno dei bridge che hai aggiunto funziona.\nControllali nuovamente o aggiungine altri.", + "gui_settings_button_save": "Salva", + "gui_settings_button_cancel": "Cancella", + "gui_settings_button_help": "Aiuto", + "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. Il Tor Browser (disponibile da torproject.org) è in esecuzione in background?", + "settings_error_socket_port": "Impossibile connettersi al controller Tor in {}: {}.", + "settings_error_socket_file": "Impossibile connettersi al controller Tor utilizzando il file socket {}.", + "settings_error_auth": "Connesso a {}: {}, ma non può autenticarsi. Forse questo non è un controller Tor?", + "settings_error_missing_password": "Collegato al controller Tor, ma richiede una password per l'autenticazione.", + "settings_error_unreadable_cookie_file": "Collegato al controller Tor, ma la password potrebbe essere errata o l'utente non è autorizzato a leggere il file cookie.", + "settings_error_bundled_tor_not_supported": "L'uso della versione Tor fornita con OnionShare non funziona in modalità sviluppatore su Windows o macOS.", + "settings_error_bundled_tor_timeout": "Prendendo troppo tempo per connettersi a Tor. Forse non sei connesso a Internet o hai un orologio di sistema impreciso?", + "settings_error_bundled_tor_broken": "OnionShare non è riuscito a connettersi a Tor in background:\n{}", + "settings_test_success": "Collegato al controller Tor.\n\nVersione Tor: {}\nSupporta servizi onion effimeri: {}.\nSupporta l'autenticazione del client: {}.\nSupporta indirizzi .onion next-gen: {}.", + "error_tor_protocol_error": "Si è verificato un errore con Tor: {}", + "error_tor_protocol_error_unknown": "Si è verificato un errore sconosciuto con Tor", + "error_invalid_private_key": "Questo tipo di chiave privata non è supportato", + "connecting_to_tor": "In connessione alla rete Tor", + "update_available": "E' disponibile una nuova versione di OnionShare. Clicca qui per scaricarla.

Stai usando {} e l'ultima versione è {}.", + "update_error_check_error": "Non è possibile controllare per una nuova versione: Magari non sei connesso a Tor, o il sito OnionShare non funziona?", + "update_error_invalid_latest_version": "Non è possibile verificare per la nuova versione: il sito OnionShare dice che l'ultima versione non è riconoscibile '{}'…", + "update_not_available": "Stai usando la ultima versione di OnionShare.", + "gui_tor_connection_ask": "Apri le impostazione per trovare la connessione a Tor?", + "gui_tor_connection_ask_open_settings": "Sì", + "gui_tor_connection_ask_quit": "Esci", + "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\nAssicurati di essere connesso a Internet, dopo prova a riaprire OnionShare e configurare la connessione a Tor.", + "gui_tor_connection_lost": "Disconnesso da Tor.", + "gui_server_started_after_autostop_timer": "Il timer ad arresto automatico si è fermato prima dell'avvio del server. Si prega di fare una nuova condivisione.", + "gui_server_autostop_timer_expired": "Il timer di arresto automatico è già scaduto. Si prega di modificarlo per iniziare la condivisione.", + "share_via_onionshare": "Condividi via OnionShare", + "gui_connect_to_tor_for_onion_settings": "Connetti a Tor per vedere le impostazioni del servizio onion", + "gui_save_private_key_checkbox": "Usa un indirizzo persistente", + "gui_share_url_description": "1 Tutti2 con questo l'indirizzo di OnionShare possono 3 scaricare4 i tuoi file usando 5 il Browser Tor6: 7", + "gui_receive_url_description": "1 Tutti2 con questo indirizzo OnionShare possono 3 caricare4 file nel tuo computer usando 5 Tor Browser6: 7", + "gui_url_label_persistent": "Questa condivisione non si arresterà automaticamente.

Ogni successiva condivisione riutilizza l'indirizzo. (Per utilizzare indirizzi monouso, disattivare \"Usa indirizzo persistente\" nelle impostazioni.)", + "gui_url_label_stay_open": "Questa condivisione non si arresterà automaticamente.", + "gui_url_label_onetime": "Questa condivisione verrà interrotta dopo il primo completamento.", + "gui_url_label_onetime_and_persistent": "Questa condivisione non si arresterà automaticamente.

Ogni condivisione successiva riutilizzerà l'indirizzo. (Per utilizzare indirizzi monouso, disattivare \"Usa indirizzo persistente\" nelle impostazioni.)", + "gui_status_indicator_share_stopped": "Pronto per condividere", + "gui_status_indicator_share_working": "Iniziando…", + "gui_status_indicator_share_started": "Condividendo", + "gui_status_indicator_receive_stopped": "Pronto per ricevere", + "gui_status_indicator_receive_working": "Iniziando…", + "gui_status_indicator_receive_started": "Ricevendo", + "gui_file_info": "{} file, {}", + "gui_file_info_single": "{} file, {}", + "history_in_progress_tooltip": "{} in avanzamento", + "history_completed_tooltip": "{} completato", + "info_in_progress_uploads_tooltip": "{} upload(s) in avanzamento", + "info_completed_uploads_tooltip": "{} upload(s) completati", + "error_cannot_create_downloads_dir": "Non è stato possibile creare la cartella in modalità ricezione: {}", + "receive_mode_downloads_dir": "I file a te mandati appariranno in questa cartella: {}", + "receive_mode_warning": "Attenzione: La modalità ricezione permette alla gente di fare l'upload di file nel tuo computer. Alcuni file possono potenzialmente prendere il controllo del tuo computer se aperti. Apri solamente file inviati da persone di cui ti fidi, o se sai quello che stai facendo.", + "gui_receive_mode_warning": "La modalità ricezione permette alle persone di fare l'upload di file nel tuo computer.

Alcuni file possono potenzialmente prendere il controllo del tuo computer se li apri. Apri solamente file di persone di cui ti fidi, o se sai quello che stai facendo.", + "receive_mode_upload_starting": "Upload di dimensione totale {} sta partendo", + "receive_mode_received_file": "Ricevuto: {}", + "gui_mode_share_button": "Condividi File", + "gui_mode_receive_button": "Ricevi File", + "gui_settings_receiving_label": "Impostazioni di Ricezione", + "gui_settings_downloads_label": "Salva i file in", + "gui_settings_downloads_button": "Navigare", + "gui_settings_public_mode_checkbox": "Modalità pubblica", + "systray_close_server_title": "Il server OnionShare è inattivo", + "systray_close_server_message": "Un utente ha disattivato il Server", + "systray_page_loaded_title": "Pagina caricata", + "systray_download_page_loaded_message": "Un utente ha caricato la pagina di Download", + "systray_upload_page_loaded_message": "Un utente ha caricato la pagina di Upload", + "gui_uploads": "Storia degli Upload", + "gui_no_uploads": "Nessun Upload ancora", + "gui_clear_history": "Pulisci tutto", + "gui_upload_in_progress": "Upload iniziato {}", + "gui_upload_finished_range": "Upload eseguito {} a {}", + "gui_upload_finished": "Caricato {}", + "gui_download_in_progress": "Download iniziato {}", + "gui_open_folder_error_nautilus": "Impossibile aprire la cartella perché Nautilus non è disponibile. Il file è qui: {}", + "gui_settings_onion_label": "Impostazioni Onion", + "error_cannot_create_data_dir": "Non è possibile creare la cartella dati OnionShare: {}", + "receive_mode_data_dir": "I file inviati a te appariranno in questa cartella: {}", + "gui_settings_data_dir_label": "Salva i file in", + "gui_settings_data_dir_browse_button": "Naviga", + "systray_page_loaded_message": "Indirizzo OnionShare caricato", + "systray_share_started_title": "Condivisione iniziata", + "systray_share_started_message": "Inizio dell'invio dei file a qualcuno", + "systray_share_completed_title": "Condivisione completata", + "systray_share_completed_message": "Completato l'invio dei file", + "systray_share_canceled_title": "Condivisione annullata", + "systray_share_canceled_message": "Qualcuno ha annullato la ricezione dei file", + "systray_receive_started_title": "Inizio ricezione", + "systray_receive_started_message": "Qualcuno ti sta inviando dei file", + "gui_all_modes_history": "Storico", + "gui_all_modes_clear_history": "Pulisci tutto", + "gui_all_modes_transfer_started": "Iniziato {}", + "gui_all_modes_transfer_finished_range": "Trasferito {} - {}", + "gui_all_modes_transfer_finished": "Trasferito {}", + "gui_all_modes_transfer_canceled_range": "Annullato {} - {}", + "gui_all_modes_transfer_canceled": "Annullato {}", + "gui_all_modes_progress_complete": "%p%, {0:s} trascorsi.", + "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_autostop_timer_waiting": "In attesa di finire l'invio", + "gui_receive_mode_no_files": "Nessun file ricevuto ancora", + "gui_receive_mode_autostop_timer_waiting": "In attesa di finire la ricezione", + "gui_stop_server_autostop_timer_tooltip": "Il timer di arresto automatico termina alle {}", + "gui_start_server_autostart_timer_tooltip": "Il timer Auto-start termina alle {}", + "gui_waiting_to_start": "Programmato per avviarsi in {}. Clicca per annullare.", + "gui_settings_autostart_timer_checkbox": "Usa il timer a partenza automatica", + "gui_settings_autostart_timer": "Inizia la condivisione a:", + "gui_server_autostart_timer_expired": "L'ora pianificata è già passata. Si prega di modificarla per iniziare la condivisione.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Il tempo di arresto automatico non può essere uguale o precedente all'ora di avvio automatico. Si prega di modificarlo per iniziare la condivisione.", + "gui_status_indicator_share_scheduled": "In programma…", + "gui_status_indicator_receive_scheduled": "In programma…", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "incorrect_password": "Password errata", + "gui_settings_individual_downloads_label": "Disabilita per consentire il download di file singoli", + "gui_website_url_description": "Chiunque, con questo indirizzo di OnionShare, può visitare il tuo sito web utilizzando il Browser Tor: ", + "gui_mode_website_button": "Pubblica sito web", + "gui_website_mode_no_files": "Nessun sito web condiviso al momento", + "history_requests_tooltip": "{} richieste web", + "gui_settings_csp_header_disabled_option": "Disabilita header dei criteri di sicurezza dei contenuti", + "gui_settings_website_label": "Impostazioni sito web", + "gui_chat_start_server": "Avvia il server della chat", + "mode_settings_advanced_toggle_hide": "Nascondi le impostazioni avanzate", + "mode_settings_advanced_toggle_show": "Mostra impostazioni avanzate", + "gui_tab_name_chat": "Chat", + "gui_tab_name_website": "Sito web", + "gui_tab_name_receive": "Ricevi", + "gui_tab_name_share": "Condividi", + "gui_main_page_chat_button": "Inizia a Chattare", + "gui_main_page_receive_button": "Inizia a Ricevere", + "gui_main_page_share_button": "Inizia a Condividere", + "gui_new_tab_chat_button": "Chatta in modo anonimo", + "gui_new_tab_receive_button": "Ricevi File", + "gui_new_tab_share_button": "Condividi Files", + "gui_new_tab_tooltip": "Apri una nuova scheda", + "gui_new_tab": "Nuova Scheda", + "gui_open_folder_error": "Impossibile aprire la cartella con xdg-open. Il file è qui: {}", + "gui_qr_code_dialog_title": "OnionShare QR Code", + "gui_show_qr_code": "Mostra QR Code", + "gui_receive_flatpak_data_dir": "Dato che hai installato OnionShare usando Flatpak, devi salvare i file nella cartella ~/OnionShare.", + "gui_chat_stop_server": "Arresta il server della chat", + "gui_file_selection_remove_all": "Rimuovi tutto", + "gui_remove": "Rimuovi", + "gui_close_tab_warning_receive_description": "Stai ricevendo dei file. Sei sicuro di voler chiudere questa scheda?", + "gui_close_tab_warning_share_description": "Stai inviando dei file. Sei sicuro di voler chiudere questa scheda?", + "gui_close_tab_warning_title": "Sei sicuro?", + "gui_new_tab_website_button": "Ospita un sito web", + "gui_quit_warning_description": "La condivisione è attiva in alcune delle tue schede. Uscendo, tutte le tue schede verranno chiuse. Sei sicuro di voler uscire?", + "gui_quit_warning_title": "Sei sicuro?", + "gui_close_tab_warning_close": "Chiudi", + "gui_close_tab_warning_website_description": "Stai ospitando un sito web. Sei sicuro di voler chiudere questa scheda?", + "mode_settings_website_disable_csp_checkbox": "Non inviare l'intestazione della Politica sulla Sicurezza dei Contenuti (consente al sito web di utilizzare risorse di terze parti)", + "mode_settings_receive_data_dir_browse_button": "Naviga", + "mode_settings_autostop_timer_checkbox": "Interrompere il servizio onion all'ora pianificata", + "mode_settings_autostart_timer_checkbox": "Avviare il servizio onion all'ora pianificata", + "mode_settings_persistent_checkbox": "Salva questa scheda e aprirla automaticamente quando apro OnionShare", + "gui_quit_warning_cancel": "Annulla", + "gui_close_tab_warning_cancel": "Annulla", + "gui_close_tab_warning_persistent_description": "Questa scheda è persistente. Se lo chiudi perderai l'indirizzo onion che sta usando. Sei sicuro di volerlo chiudere?", + "gui_main_page_website_button": "Inizia a Ospitare", + "gui_chat_url_description": "Chiunque con questo indirizzo OnionShare può unirsi a questa chat room utilizzando Tor Browser:", + "mode_settings_receive_data_dir_label": "Salva i file in", + "mode_settings_share_autostop_sharing_checkbox": "Interrompi la condivisione dopo che i file sono stati inviati (deseleziona per consentire lo scaricamento di singoli file)", + "mode_settings_legacy_checkbox": "Usa un indirizzo legacy (servizio onion v2, non consigliato)", + "mode_settings_public_checkbox": "Non usare una password", + "gui_rendezvous_cleanup_quit_early": "Chiudi in anticipo", + "gui_rendezvous_cleanup": "In attesa che i circuiti Tor si chiudano per assicurarsi che i file siano stati trasferiti con successo.\n\nQuesto potrebbe richiedere alcuni minuti.", + "error_port_not_available": "Porta OnionShare non disponibile", + "gui_color_mode_changed_notice": "Riavvia OnionShare per applicare la nuova modalità colore." +} diff --git a/desktop/onionshare/resources/locale/ja.json b/desktop/onionshare/resources/locale/ja.json new file mode 100644 index 00000000..5290ea63 --- /dev/null +++ b/desktop/onionshare/resources/locale/ja.json @@ -0,0 +1,334 @@ +{ + "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_autostop_timer": "自動タイマーがタイムアウトしたため停止されました", + "closing_automatically": "転送が完了されたため停止されました", + "timeout_download_still_running": "ダウンロード完了待ち", + "timeout_upload_still_running": "アップロード完了待ち", + "large_filesize": "注意:大きいなファイルを送信するに数時間かかるかもしれない", + "systray_menu_exit": "終了", + "systray_download_started_title": "OnionShareダウンロードは開始されました", + "systray_download_started_message": "ユーザーがダウンロードを開始しました", + "systray_download_completed_title": "OnionShareダウンロード完了", + "systray_download_completed_message": "ユーザーがダウンロードし終えました", + "systray_download_canceled_title": "OnionShareダウンロードは中止されました", + "systray_download_canceled_message": "ユーザーがダウンロードを中止しました", + "systray_upload_started_title": "OnionShareアップロードは開始されました", + "systray_upload_started_message": "ユーザーがファイルをアップロードし始めました", + "help_local_only": "Torを使わない(開発利用のみ)", + "help_stay_open": "ファイルが送信された後に共有し続けます", + "help_autostop_timer": "数秒後に共有が停止されます", + "help_stealth": "クライアント認証を使う(上級者向け)", + "help_receive": "共有を送信する代わりに受信する", + "help_verbose": "OnionShareのエラーを標準出力に、Webのエラーをディスクに記録する", + "help_filename": "共有するファイルとフォルダの一覧", + "help_config": "カスタムJSON設定ファイルの位置(任意)", + "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_autostop_timer": "共有を停止中です({})", + "gui_share_stop_server_autostop_timer_tooltip": "{}に自動停止します", + "gui_receive_start_server": "受信モードを開始", + "gui_receive_stop_server": "受信モードを停止", + "gui_receive_stop_server_autostop_timer": "受信モードを停止(残り {} 秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "{}に自動停止します", + "gui_copy_url": "アドレスをコピー", + "gui_downloads": "ダウンロード履歴", + "gui_no_downloads": "まだダウンロードがありません", + "gui_canceled": "キャンセルされました", + "gui_copied_url_title": "OnionShareのアドレスをコピーしました", + "gui_copied_url": "OnionShareのアドレスをクリップボードへコピーしました", + "gui_please_wait": "実行中… クリックでキャンセルします。", + "gui_download_upload_progress_complete": "%p%、 経過時間 ({0:s})。", + "gui_download_upload_progress_starting": "{0:s}, %p% (計算中)", + "gui_download_upload_progress_eta": "{0:s} 終了予定:{1:s}、%p%", + "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": "キャンセル", + "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_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_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と自動設定してみる", + "gui_settings_connection_type_control_port_option": "コントロールポートを使用して接続する", + "gui_settings_connection_type_socket_file_option": "ソケットファイルを使用して接続する", + "gui_settings_connection_type_test_button": "Torへの接続をテストする", + "gui_settings_control_port_label": "コントロールポート", + "gui_settings_socket_file_label": "ソケットファイル", + "gui_settings_socks_label": "SOCKSポート", + "gui_settings_authenticate_label": "Tor認証の設定", + "gui_settings_authenticate_no_auth_option": "認証なし、それともクッキー認証", + "gui_settings_authenticate_password_option": "パスワード", + "gui_settings_password_label": "パスワード", + "gui_settings_tor_bridges": "Torブリッジを利用して接続しますか?", + "gui_settings_tor_bridges_no_bridges_radio_option": "ブリッジを使用しない", + "gui_settings_tor_bridges_obfs4_radio_option": "組み込みのobs4 pluggable transportを使用する", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "組み込みのobs4 pluggable transportを使用する(obsf4proxy必要)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "組み込みのmeek_lite (Azure) pluggable transportを使用する", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "組み込みのmeek_lite (Azure) pluggable transportを使用する(obsf4proxy必要)", + "gui_settings_meek_lite_expensive_warning": "警告:meek-azureブリッジはTor Projectにとって維持費がかさむ

直接にTorと接続できない場合、あるいはobsf4ブリッジや他のブリッジが使用できない場合のみに使って下さい。", + "gui_settings_tor_bridges_custom_radio_option": "カスタムブリッジを使用する", + "gui_settings_tor_bridges_custom_label": "https://bridges.torproject.orgからブリッジを入手できます", + "gui_settings_tor_bridges_invalid": "全ての追加したブリッジは機能しませんでした。再確認して、あるいは他のを追加して下さい。", + "gui_settings_button_save": "保存", + "gui_settings_button_cancel": "キャンセル", + "gui_settings_button_help": "ヘルプ", + "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コントローラーと接続できません。", + "settings_error_socket_file": "ソケットファイル{}を使用してTorコントローラーと接続できません。", + "settings_error_auth": "{}:{}と接続できましたが、認証ができません。これは実際にTorコントローラーですか?", + "settings_error_missing_password": "Torコントローラーと接続できましたが、認証にはパスワードが必要です。", + "settings_error_unreadable_cookie_file": "Torコントローラーと接続できましたが、パスワードが診違っているあるいはクッキーファイルの読み出し許可がないかもしれない。", + "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クライアント認証をサポートする:{}\nnext-gen .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": "新バージョンのチェックは失敗:多分Torと接続していない、あるいはOnionShare公式サイトはダウンかもしれない?", + "update_error_invalid_latest_version": "新バージョンチェック失敗: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": "設定でTorとの接続方法を変更してみて下さい。", + "gui_tor_connection_canceled": "Torと接続できませんでした。\n\nインターネット接続を確認してから、OnionShareを再開してTorとの接続を設定して下さい。", + "gui_tor_connection_lost": "Torから切断されました。", + "gui_server_started_after_autostop_timer": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。再びファイル共有をして下さい。", + "gui_server_autostop_timer_expired": "自動停止タイマーはすでにタイムアウトしています。共有し始めるにはタイマーを調整して下さい。", + "share_via_onionshare": "OnionShareで共有する", + "gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい", + "gui_save_private_key_checkbox": "永続的アドレスを使用する", + "gui_share_url_description": "このOnionShareアドレスと秘密鍵を持つ限り誰でもTor Browserを利用してこのファイルをダウンロードできます", + "gui_receive_url_description": "このOnionShareアドレスと秘密鍵を持つ限り誰でもTor Browserを利用してこのPCにファイルをアップロードできます", + "gui_url_label_persistent": "このファイル共有には自動停止はありません。

その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)", + "gui_url_label_stay_open": "このファイル共有には自動停止はありません。", + "gui_url_label_onetime": "このファイル共有は最初の完了後に停止されます。", + "gui_url_label_onetime_and_persistent": "このファイル共有には自動停止はありません。

その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)", + "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": "{} 完了", + "info_in_progress_uploads_tooltip": "{} 進行中のアップロード", + "info_completed_uploads_tooltip": "{} 完了のアップロード", + "error_cannot_create_downloads_dir": "受信モードフォルダを作成できなかった: {}", + "receive_mode_downloads_dir": "受信されるファイルはこのフォルダに保存されます: {}", + "receive_mode_warning": "警告:受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。", + "gui_receive_mode_warning": "受信モードでは他の人があなたのPCへファイルをアップロードできるようにします。

悪意ある人物によってアップロードされたファイルを開いたら、PCが乗っ取られる可能性があります。内容を完全に理解しているファイルか、信頼できる人物がアップロードしたファイル以外は開かないでください。", + "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": "公開モード", + "systray_close_server_title": "OnionShareサーバーは閉鎖されました", + "systray_close_server_message": "ユーザーがサーバーを閉鎖しました", + "systray_page_loaded_title": "ページはロードされました", + "systray_download_page_loaded_message": "ユーザーがダウンロードページをロードしました", + "systray_upload_page_loaded_message": "ユーザーがアップロードページをロードしました", + "gui_uploads": "アップロード履歴", + "gui_no_uploads": "アップロードはまだありません", + "gui_clear_history": "全てをクリアする", + "gui_upload_in_progress": "アップロード開始しました {}", + "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を再起動して下さい。", + "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_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": "%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": "送信されたファイルがまだありません", + "gui_share_mode_autostop_timer_waiting": "送信完了を待機しています", + "gui_receive_mode_no_files": "受信されたファイルがまだありません", + "gui_receive_mode_autostop_timer_waiting": "受信完了を待機しています", + "gui_settings_onion_label": "Onion設定", + "gui_stop_server_autostop_timer_tooltip": "自動停止タイマーは {} に終了します", + "gui_start_server_autostart_timer_tooltip": "自動スタートタイマーは {} に終了します", + "gui_waiting_to_start": "{} 後に開始予定。クリックして中止する。", + "gui_settings_autostart_timer_checkbox": "自動スタートタイマーを利用する", + "gui_settings_autostart_timer": "共有を実行する時間:", + "gui_server_autostart_timer_expired": "予定した時間がすでに終了しました。共有し始めるには、タイマーを調整して下さい。", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自動停止タイマーを自動スタートタイマーより後に設定しなければなりません。共有し始めるには、タイマーを調整して下さい。", + "gui_status_indicator_share_scheduled": "予定されました…", + "gui_status_indicator_receive_scheduled": "予定されました…", + "days_first_letter": "日", + "hours_first_letter": "時間", + "minutes_first_letter": "分", + "seconds_first_letter": "秒", + "gui_website_url_description": "誰でも このOnionShareアドレスと秘密鍵を知る限り、Tor Browserで サイトを訪れることができます: ", + "gui_mode_website_button": "ウェブサイトを発行する", + "gui_website_mode_no_files": "共有されたウェブサイトは未だありません", + "incorrect_password": "不正なパスワード", + "gui_settings_individual_downloads_label": "個別ファイルのダウンロード許可を与えるのにチェックを外す", + "history_requests_tooltip": "{} ウェブリクエスト", + "gui_settings_csp_header_disabled_option": "コンテンツセキュリティポリシーヘッダーを無効にする", + "gui_settings_website_label": "ウェブサイト設定", + "mode_settings_website_disable_csp_checkbox": "デフォルトのコンテンツセキュリティポリシーヘッダーを送らない(ウェブサイトにはサードパーティーのリソースを可能にします)", + "mode_settings_receive_data_dir_browse_button": "閲覧", + "mode_settings_receive_data_dir_label": "保存するファイルの位置", + "mode_settings_share_autostop_sharing_checkbox": "ファイル送信が終了したら共有を停止(個別ファイルのダウンロードを許可するにはチェックマークを消す)", + "mode_settings_legacy_checkbox": "レガシーアドレスを利用する(v2 onionサービス、非推奨)", + "mode_settings_autostop_timer_checkbox": "指定の日時にonionサービスを停止する", + "mode_settings_autostart_timer_checkbox": "指定の日時にonionサービスを起動する", + "mode_settings_public_checkbox": "これは公開OnionShareサービス(秘密鍵は無効されます)", + "mode_settings_persistent_checkbox": "このタブを保存し、OnionShareがスタートアップの時に自動的に開く", + "mode_settings_advanced_toggle_hide": "詳細設定を非表示", + "mode_settings_advanced_toggle_show": "詳細設定を表示", + "gui_quit_warning_cancel": "キャンセル", + "gui_quit_warning_description": "開いてるタブにはアクティブな共有はあります。終了すると、全てのタブは閉じられます。本当に終了してもよろしいですか?", + "gui_quit_warning_title": "本当によろしいですか?", + "gui_close_tab_warning_cancel": "キャンセル", + "gui_close_tab_warning_close": "閉じる", + "gui_close_tab_warning_website_description": "ウェブサイトをホストする中です。本当に閉じてもよろしいですか?", + "gui_close_tab_warning_receive_description": "ファイルはまだ受信中です。本当に閉じてもよろしいですか?", + "gui_close_tab_warning_share_description": "ファイルはまだ送信中です。本当に閉じてもよろしいですか?", + "gui_close_tab_warning_persistent_description": "これは永続的タブです。閉じると、利用しているonionアドレスを失う。本当に閉じてもよろしいですか?", + "gui_close_tab_warning_title": "本当によろしいですか?", + "gui_tab_name_chat": "チャット", + "gui_tab_name_website": "ウェブサイト", + "gui_tab_name_receive": "受信", + "gui_tab_name_share": "共有", + "gui_main_page_chat_button": "チャットを開始", + "gui_main_page_website_button": "ホストを開始", + "gui_main_page_receive_button": "受信を開始", + "gui_main_page_share_button": "共有を開始", + "gui_new_tab_chat_button": "匿名でチャットする", + "gui_new_tab_website_button": "サイトをホスト", + "gui_new_tab_receive_button": "ファイルを受信", + "gui_new_tab_share_button": "ファイルを共有", + "gui_new_tab_tooltip": "新しいタブを開く", + "gui_new_tab": "新しいタブ", + "gui_open_folder_error": "xdg-openでフォルダー開くの失敗。ファイルはここにあります: {}", + "gui_qr_code_description": "より簡単にOnionShareアドレスを共有するため、スマホのカメラなどのQRリーダーでこのコードをスキャンして下さい。", + "gui_qr_code_dialog_title": "OnionShareのQRコード", + "gui_show_qr_code": "QRコードを表示する", + "gui_receive_flatpak_data_dir": "FlatpakでOnionShareをインストールしたため、ファイルを~/OnionShareの中のフォルダーに保存しなければなりません。", + "gui_chat_stop_server": "チャットサーバーを停止", + "gui_chat_start_server": "チャットサーバーを始動", + "gui_file_selection_remove_all": "全てを削除", + "gui_remove": "削除", + "error_port_not_available": "OnionShareポートは利用可能ではありません", + "gui_rendezvous_cleanup_quit_early": "早めに終了", + "gui_rendezvous_cleanup": "ファイルは成功に転送されたか確実にするために、Torサーキットの切断を待機しています。\n\n数分かかります。", + "gui_chat_url_description": "このOnionShareアドレスと秘密鍵を持つ限り、誰でもTor Browserを利用してチャットルームに入れます", + "history_receive_read_message_button": "既読メッセージ", + "mode_settings_receive_webhook_url_checkbox": "通知webhookを利用する", + "mode_settings_receive_disable_files_checkbox": "ファイルのアップロードを無効にする", + "mode_settings_receive_disable_text_checkbox": "テキストの提出を無効にする", + "mode_settings_title_label": "カスタムタイトル", + "gui_color_mode_changed_notice": "新しいカラーモードを適用するのに、OnionShareを再起動して下さい。", + "gui_settings_theme_dark": "ダーク", + "gui_settings_theme_light": "ライト", + "gui_settings_theme_auto": "自動", + "gui_settings_theme_label": "テーマ", + "gui_status_indicator_chat_started": "チャット中", + "gui_status_indicator_chat_scheduled": "予定されています…", + "gui_status_indicator_chat_working": "起動中…", + "gui_status_indicator_chat_stopped": "チャット準備完了", + "gui_client_auth_instructions": "次に、OnionShareサービスにアクセスを許可する秘密鍵を送る:", + "gui_url_instructions_public_mode": "以下に表示されるOnionShareアドレスを送る:", + "gui_url_instructions": "まずは、以下に表示されるOnionShareアドレスを送る:", + "gui_chat_url_public_description": "このOnionShareアドレスを持つ限り、誰でもTor Browserを利用してチャットルームに入れます", + "gui_receive_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのPCにファイルをアップロードできます", + "gui_website_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのサイトを訪れる", + "gui_share_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのファイルをダウンロードできます", + "gui_server_doesnt_support_stealth": "申し訳ない、このTorバージョンではステルス(クライアント認証)がサポートされていません。より新しいTorバージョンを使うか、プライバシーの必要なければ公開モードを使って下さい。", + "gui_please_wait_no_button": "起動中…", + "gui_hide": "非表示", + "gui_reveal": "表示", + "gui_qr_label_auth_string_title": "秘密鍵", + "gui_qr_label_url_title": "OnionShareアドレス", + "gui_copied_client_auth": "秘密鍵をクリップボードにコピーしました", + "gui_copied_client_auth_title": "秘密鍵をコピーしました", + "gui_copy_client_auth": "秘密鍵をコピーする", + "gui_tor_settings_window_title": "Tor設定", + "gui_settings_controller_extras_label": "Tor設定", + "gui_settings_bridge_use_checkbox": "ブリッジを利用する", + "gui_settings_bridge_radio_builtin": "組み込みブリッジを選択", + "gui_settings_bridge_moat_radio_option": "torproject.orgからブリッジを要求する", + "gui_settings_bridge_custom_radio_option": "信頼できる筋からもらったブリッジを提供する", + "gui_settings_bridge_custom_placeholder": "「アドレス:ポート番号」を入力する(行内ごと1つ)", + "gui_settings_moat_bridges_invalid": "まだtorproject.orgからブリッジを要求していません。", + "gui_settings_version_label": "OnionShare {}を使っています", + "gui_settings_help_label": "サポートが必要ですか? docs.onionshare.orgを訪れて下さい", + "mode_settings_website_custom_csp_checkbox": "カスタムなコンテンツセキュリティポリシーヘッダーを送る", + "moat_contact_label": "BridgeDBと接続中…", + "moat_captcha_label": "ブリッジを要求するのにCAPTCHAを解決して下さい。", + "moat_captcha_placeholder": "イメージにある文字を入力して下さい", + "moat_captcha_submit": "提出する", + "moat_captcha_reload": "リロード", + "moat_bridgedb_error": "BridgeDB接続にエラーが生じました。", + "moat_captcha_error": "間違った解答です。もう一度試して下さい。", + "moat_solution_empty_error": "イメージからの文字を入力しなければなりません", + "mode_tor_not_connected_label": "OnionShareはTorネットワークと接続されていません", + "gui_dragdrop_sandbox_flatpak": "Flatpakサンドボックスの安全性を確保するため、ドラッグ・アンド・ドロップは無効されました。ファイルを探すのに「ファイルを追加」、「フォルダを追加」ボタンを使って下さい。", + "gui_settings_tor_bridges_label": "Torがブロックされる場合、ブリッジはTorネットワークにアクセスするのに役立ちます。一番効果的なブリッジは場所によります。", + "gui_settings_bridge_none_radio_option": "ブリッジを利用しない", + "gui_settings_bridge_moat_button": "新しいブリッジを要求する", + "gui_settings_stop_active_tabs_label": "タブに実行しているサービスはまだあります。\nTor設定を変更するには、全てのサービスを停止する必要があります。" +} diff --git a/desktop/onionshare/resources/locale/ka.json b/desktop/onionshare/resources/locale/ka.json new file mode 100644 index 00000000..87d5c0c5 --- /dev/null +++ b/desktop/onionshare/resources/locale/ka.json @@ -0,0 +1,181 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "large_filesize": "", + "systray_menu_exit": "პროგრამის დატოვება", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "არჩევა", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_settings_data_dir_browse_button": "არჩევა", + "gui_all_modes_history": "" +} diff --git a/desktop/onionshare/resources/locale/km.json b/desktop/onionshare/resources/locale/km.json new file mode 100644 index 00000000..11b3cdb3 --- /dev/null +++ b/desktop/onionshare/resources/locale/km.json @@ -0,0 +1,169 @@ +{ + "preparing_files": "", + "not_a_readable_file": "", + "no_available_port": "", + "other_page_loaded": "", + "close_on_autostop_timer": "", + "closing_automatically": "", + "large_filesize": "", + "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_autostop_timer": "", + "gui_stop_server_autostop_timer_tooltip": "", + "gui_start_server_autostart_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_copy_url": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_waiting_to_start": "", + "gui_please_wait": "", + "gui_quit_title": "", + "gui_share_quit_warning": "", + "gui_receive_quit_warning": "", + "gui_quit_warning_quit": "", + "gui_quit_warning_dont_quit": "", + "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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "gui_settings_autostart_timer_checkbox": "", + "gui_settings_autostart_timer": "", + "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": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "gui_server_autostart_timer_expired": "", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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_scheduled": "", + "gui_status_indicator_share_started": "", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_scheduled": "", + "gui_status_indicator_receive_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "error_cannot_create_data_dir": "", + "gui_receive_mode_warning": "", + "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_autostop_timer_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "", + "receive_mode_upload_starting": "", + "days_first_letter": "", + "hours_first_letter": "", + "minutes_first_letter": "", + "seconds_first_letter": "" +} diff --git a/desktop/onionshare/resources/locale/ko.json b/desktop/onionshare/resources/locale/ko.json new file mode 100644 index 00000000..76c0c814 --- /dev/null +++ b/desktop/onionshare/resources/locale/ko.json @@ -0,0 +1,179 @@ +{ + "config_onion_service": "어니언 서비스를 포트{0:d} 에서 설정하기.", + "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": "어니언 서비스를 시작하기 위한 사용 가능한 포트를 찾을수 없었습니다", + "other_page_loaded": "주소가 로드되다", + "close_on_autostop_timer": "자동멈춤 타이머가 끝났기 때문에 정지되다", + "closing_automatically": "다운로드가 완료되었기 때문에 정지되다", + "timeout_download_still_running": "다운로드가 완료되기를 기다리는 중입니다", + "timeout_upload_still_running": "업로드가 완료되기를 기다리는 중입니다", + "large_filesize": "경고: 대용량의 자료를 보내는것은 오래 걸릴수 있습니다", + "systray_menu_exit": "종료", + "systray_download_started_title": "어니언쉐어 다운로드가 시작됨", + "systray_download_started_message": "사용자가 당신의 파일들을 다운로딩 하기 시작했습니다", + "systray_download_completed_title": "어니언쉐어 다운로드가 완료됨", + "systray_download_completed_message": "사용자가 당신의 파일들을 다운로딩 하는것을 완료했습니다", + "systray_download_canceled_title": "어니언쉐어 다운로드가 취소됨", + "systray_download_canceled_message": "사용자가 다운로드를 취소했습니다", + "systray_upload_started_title": "어니언쉐어 업로드가 시작됨", + "systray_upload_started_message": "사용자가 파일들을 당신의 컴퓨터로 업로딩 하는것을 시작했습니다", + "help_local_only": "Tor를 사용하지 마시오 (오직 개발자용)", + "help_stay_open": "첫 다운로드 후 계속 공유하시오", + "help_autostop_timer": "정해진 초단위의 시간이 지난후 공유하는 것을 멈추시오", + "help_stealth": "고객 허가를 사용 (고급 수준의)", + "help_receive": "그것들을 보내는것 대신 공유를 받으시오", + "help_verbose": "어니언쉐어 에러들은 표준 출력 장치로 접속하고, 웹 에러들은 디스크로 접속 ", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "취소 된", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "취소", + "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_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_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_button_save": "저장", + "gui_settings_button_cancel": "취소", + "gui_settings_button_help": "도움말", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "보기", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "모두 삭제", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "선호 언어", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/lg.json b/desktop/onionshare/resources/locale/lg.json new file mode 100644 index 00000000..13e70fdf --- /dev/null +++ b/desktop/onionshare/resources/locale/lg.json @@ -0,0 +1,179 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/lt.json b/desktop/onionshare/resources/locale/lt.json new file mode 100644 index 00000000..2436efcd --- /dev/null +++ b/desktop/onionshare/resources/locale/lt.json @@ -0,0 +1,256 @@ +{ + "preparing_files": "Glaudinami failai.", + "not_a_readable_file": "{0:s} nėra perskaitomas failas.", + "no_available_port": "", + "other_page_loaded": "Adresas įkeltas", + "incorrect_password": "Neteisingas slaptažodis", + "close_on_autostop_timer": "Sustabdyta, nes baigėsi automatinio sustabdymo laikmatis", + "closing_automatically": "Sustabdyta, nes perdavimas yra užbaigtas", + "large_filesize": "Įspėjimas: Didelio viešinio siuntimas gali užtrukti ilgą laiką (kelias valandas)", + "gui_drag_and_drop": "Norėdami bendrinti, tempkite failus ir aplankus čia", + "gui_add": "Pridėti", + "gui_add_files": "Pridėti failus", + "gui_add_folder": "Pridėti aplanką", + "gui_delete": "Ištrinti", + "gui_choose_items": "Pasirinkti", + "gui_share_start_server": "Pradėti bendrinti", + "gui_share_stop_server": "Nustoti bendrinti", + "gui_share_stop_server_autostop_timer": "Nustoti bendrinti ({})", + "gui_stop_server_autostop_timer_tooltip": "Automatinio sustabdymo laikmatis baigiasi {}", + "gui_start_server_autostart_timer_tooltip": "Automatinio paleidimo laikmatis baigiasi {}", + "gui_receive_start_server": "Įjungti gavimo veikseną", + "gui_receive_stop_server": "Išjungti gavimo veikseną", + "gui_receive_stop_server_autostop_timer": "Išjungti gavimo veikseną (Liko {})", + "gui_copy_url": "Kopijuoti adresą", + "gui_copy_hidservauth": "Kopijuoti HidServAuth", + "gui_canceled": "Atsisakyta", + "gui_copied_url_title": "OnionShare adresas nukopijuotas", + "gui_copied_url": "OnionShare adresas nukopijuotas į iškarpinę", + "gui_copied_hidservauth_title": "HidServAuth nukopijuota", + "gui_copied_hidservauth": "HidServAuth eilutė nukopijuota į iškarpinę", + "gui_waiting_to_start": "Planuojama pradėti {}. Spustelėkite , jei norite atšaukti.", + "gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.", + "zip_progress_bar_format": "Glaudinama: %p%", + "error_stealth_not_supported": "", + "error_ephemeral_not_supported": "", + "gui_settings_window_title": "Nustatymai", + "gui_settings_whats_this": "Kas tai?", + "gui_settings_stealth_option": "", + "gui_settings_stealth_hidservauth_string": "", + "gui_settings_autoupdate_label": "Tikrinti, ar yra nauja versija", + "gui_settings_autoupdate_option": "Pranešti, kai bus prieinama nauja versija", + "gui_settings_autoupdate_timestamp": "Paskutinį kartą tikrinta: {}", + "gui_settings_autoupdate_timestamp_never": "Niekada", + "gui_settings_autoupdate_check_button": "Tikrinti, ar yra nauja versija", + "gui_settings_general_label": "Bendri nustatymai", + "gui_settings_onion_label": "", + "gui_settings_sharing_label": "", + "gui_settings_close_after_first_download_option": "", + "gui_settings_csp_header_disabled_option": "", + "gui_settings_individual_downloads_label": "", + "gui_settings_connection_type_label": "Kaip OnionShare turėtų jungtis prie Tor?", + "gui_settings_connection_type_bundled_option": "Naudokite „Tor“ versiją, integruotą į „OnionShare“", + "gui_settings_connection_type_automatic_option": "Bandyti automatiškai konfigūruoti naudojant „Tor“ naršyklę", + "gui_settings_connection_type_control_port_option": "Prisijunkti naudojant valdymo prievadą", + "gui_settings_connection_type_socket_file_option": "Prisijungti naudojant socket failą", + "gui_settings_connection_type_test_button": "Tikrinti ryšį su „Tor“", + "gui_settings_control_port_label": "Valdymo prievadas", + "gui_settings_socket_file_label": "Socket failas", + "gui_settings_socks_label": "SOCKS prievadas", + "gui_settings_authenticate_label": "Tor autentifikavimo nustatymai", + "gui_settings_authenticate_no_auth_option": "Jokio autentifikavimo ar slapukų autentifikavimo", + "gui_settings_authenticate_password_option": "Slaptažodis", + "gui_settings_password_label": "Slaptažodis", + "gui_settings_tor_bridges": "„Tor“ tilto palaikymas", + "gui_settings_tor_bridges_no_bridges_radio_option": "Nenaudoti tiltų", + "gui_settings_tor_bridges_obfs4_radio_option": "Naudoti integruotą obfs4 prijungiamą transportą", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Naudoti integruotą obfs4 prijungiamą transportą (reikalingas obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus (reikalingas obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Įspėjimas:

Meek_lite tiltai labai brangiai kainuoja „Tor“ projektui.

Jais naudokitės tik tuo atveju, jei negalite prisijungti prie „Tor“ tiesiogiai, per obfs4 transportą ar kitus įprastus tiltus.", + "gui_settings_tor_bridges_custom_radio_option": "Naudoti tinkintus tinklų tiltus", + "gui_settings_tor_bridges_custom_label": "Galite gauti tinklų tiltus iš https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nei vienas iš jūsų pridėtų tinklų tiltų neveikia.\nPatikrinkite juos dar kartą arba pridėkite kitus.", + "gui_settings_button_save": "Įrašyti", + "gui_settings_button_cancel": "Atsisakyti", + "gui_settings_button_help": "Žinynas", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "gui_settings_autostart_timer_checkbox": "", + "gui_settings_autostart_timer": "", + "settings_error_unknown": "Nepavyksta prisijungti prie „Tor“ valdiklio, nes jūsų nustatymai nustatyti nesuprantamai.", + "settings_error_automatic": "Nepavyko prisijungti prie „Tor“ valdiklio. Ar „Tor“ naršyklė (prieinama torproject.org) veikia fone?", + "settings_error_socket_port": "Nepavyksta prisijungti prie „Tor“ valdiklio adresu {}:{}.", + "settings_error_socket_file": "Negalima prisijungti prie „Tor“ valdiklio naudojant lizdo failą {}.", + "settings_error_auth": "Prisijungta prie {}:{}, bet negalima patvirtinti autentiškumo. Galbūt tai ne „Tor“ valdiklis?", + "settings_error_missing_password": "Prisijungta prie „Tor“ valdiklio, tačiau norint jį autentifikuoti reikia slaptažodžio.", + "settings_error_unreadable_cookie_file": "Prisijungta prie „Tor“ valdiklio, bet slaptažodis gali būti klaidingas arba jūsų naudotojui neleidžiama skaityti slapukų failo.", + "settings_error_bundled_tor_not_supported": "Naudojant „Tor“ versiją, kuri pateikiama kartu su \"OnionShare\", \"Windows\" arba \"macOS\" sistemose ji neveiks kūrėjo režime.", + "settings_error_bundled_tor_timeout": "Per ilgai trunka prisijungimas prie „Tor“. Galbūt nesate prisijungę prie interneto arba turite netikslų sistemos laikrodį?", + "settings_error_bundled_tor_broken": "OnionShare nepavyko prisijungti prie Tor:\n{}", + "settings_test_success": "Prisijungta prie „Tor“ valdiklio.\n\n„Tor“ versija: {}\nPalaiko efemerines onion paslaugas: {}.\nPalaiko kliento autentifikavimą: {}.\nPalaiko naujos kartos .onion adresus: {}.", + "error_tor_protocol_error": "Įvyko „Tor“ klaida: {}", + "error_tor_protocol_error_unknown": "", + "connecting_to_tor": "Jungiamasi prie Tor tinklo", + "update_available": "Išleistas naujas „OnionShare“. Paspauskite čia, kad jį gautumėte.

Jūs naudojate {}, o naujausia versija yra {}.", + "update_error_invalid_latest_version": "Nepavyko patikrinti naujos versijos: „OnionShare“ svetainė sako, kad naujausia versija yra neatpažįstama „{}“…", + "update_error_check_error": "Nepavyko patikrinti naujos versijos: Galbūt nesate prisijungę prie „Tor“ arba „OnionShare“ svetainė neveikia?", + "update_not_available": "Jūs naudojate naujausią OnionShare versiją.", + "gui_tor_connection_ask": "Atidarykite nustatymus, kad sutvarkytumėte ryšį su „Tor“?", + "gui_tor_connection_ask_open_settings": "Taip", + "gui_tor_connection_ask_quit": "Išeiti", + "gui_tor_connection_error_settings": "Pabandykite nustatymuose pakeisti tai, kaip OnionShare jungiasi prie Tor tinklo.", + "gui_tor_connection_canceled": "Nepavyko prisijungti prie Tor.\n\nĮsitikinkite, kad esate prisijungę prie interneto, o tuomet iš naujo atverkite OnionShare ir nustatykite prisijungimą prie Tor.", + "gui_tor_connection_lost": "Atsijungta nuo Tor.", + "gui_server_started_after_autostop_timer": "Automatinio sustabdymo laikmatis baigėsi prieš paleidžiant serverį. Prašome sukurti naują bendrinimą.", + "gui_server_autostop_timer_expired": "Automatinio sustabdymo laikmatis jau baigėsi. Sureguliuokite jį, kad pradėtumėte dalintis.", + "gui_server_autostart_timer_expired": "Numatytas laikas jau praėjo. Pakoreguokite jį, kad galėtumėte pradėti dalintis.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatinio sustabdymo laikas negali būti toks pat arba ankstesnis už automatinio paleidimo laiką. Sureguliuokite jį, kad galėtumėte pradėti dalytis.", + "share_via_onionshare": "Bendrinti per OnionShare", + "gui_connect_to_tor_for_onion_settings": "", + "gui_save_private_key_checkbox": "", + "gui_share_url_description": "Visi, turintys šį OnionShare adresą ir privatųjį raktą gali atsisiųsti jūsų failus, naudodamiesi Tor Naršykle: ", + "gui_website_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali apsilankyti jūsų svetainėje naudodamas „Tor“ naršyklę: ", + "gui_receive_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali įkelti failus į jūsų kompiuterį naudodamas „Tor“ naršyklę: ", + "gui_url_label_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.

Kiekvienas vėlesnis bendrinimas pakartotinai naudoja adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)", + "gui_url_label_stay_open": "Šis bendrinimas nebus automatiškai sustabdytas.", + "gui_url_label_onetime": "Šis bendrinimas pabaigus bus automatiškai sustabdytas.", + "gui_url_label_onetime_and_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.

Kiekvienas vėlesnis bendrinimas pakartotinai naudos adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)", + "gui_status_indicator_share_stopped": "Parengta dalintis", + "gui_status_indicator_share_working": "Pradedama…", + "gui_status_indicator_share_scheduled": "Suplanuota…", + "gui_status_indicator_share_started": "Dalijimasis", + "gui_status_indicator_receive_stopped": "Parengta gauti", + "gui_status_indicator_receive_working": "Pradedama…", + "gui_status_indicator_receive_scheduled": "Suplanuota…", + "gui_status_indicator_receive_started": "Gaunama", + "gui_file_info": "{} failai, {}", + "gui_file_info_single": "{} failas, {}", + "history_in_progress_tooltip": "{} vykdoma", + "history_completed_tooltip": "{} baigta", + "history_requests_tooltip": "{} žiniatinklio užklausos", + "error_cannot_create_data_dir": "Nepavyko sukurti OnionShare duomenų aplanko: {}", + "gui_receive_mode_warning": "Gavimo režimas leidžia žmonėms nusiųsti failus į jūsų kompiuterį.

Kai kurie failai gali perimti kompiuterio valdymą, jei juos atidarysite. Atidarykite failus tik iš žmonių, kuriais pasitikite, arba jei žinote, ką darote.", + "gui_mode_share_button": "", + "gui_mode_receive_button": "", + "gui_mode_website_button": "", + "gui_settings_receiving_label": "", + "gui_settings_website_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": "Pageidaujama kalba", + "gui_settings_language_changed_notice": "Norėdami pritaikyti naują kalbą, paleiskite OnionShare iš naujo.", + "systray_menu_exit": "Išeiti", + "systray_page_loaded_title": "Puslapis įkeltas", + "systray_page_loaded_message": "OnionShare adresas įkeltas", + "systray_share_started_title": "Pradėtas dalijimasis", + "systray_share_started_message": "Pradedama kažkam siųsti failus", + "systray_share_completed_title": "Dalijimasis baigtas", + "systray_share_completed_message": "Failų siuntimas užbaigtas", + "systray_share_canceled_title": "Dalijimasis atšauktas", + "systray_share_canceled_message": "Kažkas atšaukė jūsų failų gavimą", + "systray_receive_started_title": "Pradėtas gavimas", + "systray_receive_started_message": "Kažkas siunčia jums failus", + "gui_all_modes_history": "Istorija", + "gui_all_modes_clear_history": "Išvalyti viską", + "gui_all_modes_transfer_started": "Pradėta {}", + "gui_all_modes_transfer_finished_range": "Perkelta {} - {}", + "gui_all_modes_transfer_finished": "Perkelta {}", + "gui_all_modes_transfer_canceled_range": "Atšaukta {} - {}", + "gui_all_modes_transfer_canceled": "Atšaukta {}", + "gui_all_modes_progress_complete": "Praėjo %p%, {0:s}.", + "gui_all_modes_progress_starting": "{0:s}, %p% (apskaičiuojama)", + "gui_all_modes_progress_eta": "{0:s}, Preliminarus laikas: {1:s}, %p%", + "gui_share_mode_no_files": "Kol kas nėra išsiųstų failų", + "gui_share_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas siuntimas", + "gui_website_mode_no_files": "Dar nėra bendrinama jokia svetainė", + "gui_receive_mode_no_files": "Kol kas nėra gautų failų", + "gui_receive_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas gavimas", + "days_first_letter": "d", + "hours_first_letter": "val", + "minutes_first_letter": "min", + "seconds_first_letter": "s", + "gui_new_tab": "Nauja kortelė", + "gui_new_tab_tooltip": "Atverti naują kortelę", + "gui_new_tab_share_button": "Dalytis failais", + "gui_new_tab_share_description": "", + "gui_new_tab_receive_button": "Gauti failus", + "gui_new_tab_receive_description": "", + "gui_new_tab_website_button": "Talpinti svetainę", + "gui_new_tab_website_description": "", + "gui_close_tab_warning_title": "Ar tikrai?", + "gui_close_tab_warning_persistent_description": "Šis skirtukas yra nuolatinis. Jei jį uždarysite, prarasite jo naudojamą onion adresą. Ar tikrai norite jį uždaryti?", + "gui_close_tab_warning_share_description": "Šiuo metu siunčiate failus. Ar tikrai norite uždaryti šį skirtuką?", + "gui_close_tab_warning_receive_description": "Šiuo metu gaunate failus. Ar tikrai norite uždaryti šį skirtuką?", + "gui_close_tab_warning_website_description": "Aktyviai talpinate svetainę. Ar tikrai norite uždaryti šį skirtuką?", + "gui_close_tab_warning_close": "Užverti", + "gui_close_tab_warning_cancel": "Atsisakyti", + "gui_quit_warning_title": "Ar tikrai?", + "gui_quit_warning_description": "Kuriuose skirtukuose yra aktyviai dalijamasi . Jei išeisite, visi skirtukai bus uždaryti. Ar tikrai norite baigti?", + "gui_quit_warning_quit": "Išeiti", + "gui_quit_warning_cancel": "Atsisakyti", + "mode_settings_advanced_toggle_show": "Rodyti išplėstinius nustatymus", + "mode_settings_advanced_toggle_hide": "Slėpti išplėstinius nustatymus", + "mode_settings_persistent_checkbox": "Išsaugoti šį skirtuką ir automatiškai jį atidaryti, kai atidarysiu „OnionShare“", + "mode_settings_public_checkbox": "Tai yra vieša „OnionShare“ paslauga (išjungia privatųjį raktą)", + "mode_settings_autostart_timer_checkbox": "Pradėti onion paslaugos paleidimą suplanuotu laiku", + "mode_settings_autostop_timer_checkbox": "Sustabdyti onion paslaugos paleidimą suplanuotu laiku", + "mode_settings_legacy_checkbox": "Naudoti senąjį adresą (nerekomenduojama naudoti v2 onion paslaugos)", + "mode_settings_share_autostop_sharing_checkbox": "Sustabdyti dalijimąsi po to, kai failai buvo išsiųsti (atžymėkite, jei norite leisti atsisiųsti atskirus failus)", + "mode_settings_receive_data_dir_label": "Įrašyti failus į", + "mode_settings_receive_data_dir_browse_button": "Naršyti", + "mode_settings_website_disable_csp_checkbox": "Nesiųskite turinio saugumo politikos antraštės (leidžia jūsų svetainei naudoti trečiųjų šalių išteklius)", + "gui_file_selection_remove_all": "Šalinti visus", + "gui_remove": "Šalinti", + "gui_qr_code_dialog_title": "OnionShare QR kodas", + "gui_show_qr_code": "Rodyti QR kodą", + "gui_open_folder_error": "Nepavyko atverti aplanko naudojant xdg-open. Failas yra čia: {}", + "gui_chat_stop_server": "Sustabdyti pokalbių serverį", + "gui_chat_start_server": "Pradėti pokalbių serverį", + "history_receive_read_message_button": "Skaityti žinutę", + "mode_settings_title_label": "Pasirinktinis pavadinimas", + "gui_main_page_chat_button": "Pradėti pokalbį", + "gui_main_page_receive_button": "Pradėti gavimą", + "gui_main_page_share_button": "Pradėti dalintis", + "gui_new_tab_chat_button": "Kalbėtis anonimiškai", + "gui_status_indicator_chat_scheduled": "Suplanuota…", + "gui_status_indicator_chat_working": "Pradedama…", + "gui_tab_name_chat": "Pokalbiai", + "gui_tab_name_website": "Tinklalapis", + "gui_tab_name_receive": "Gauti", + "gui_tab_name_share": "Dalintis", + "gui_receive_flatpak_data_dir": "Kadangi „OnionShare“ įdiegėte naudodami „Flatpak“, turite išsaugoti failus aplanke, esančiame ~/OnionShare.", + "mode_settings_receive_webhook_url_checkbox": "Naudoti pranešimų webhook", + "gui_main_page_website_button": "Pradėti talpinimą", + "gui_status_indicator_chat_started": "Kalbamasi", + "gui_status_indicator_chat_stopped": "Paruošta pokalbiui", + "gui_color_mode_changed_notice": "Iš naujo paleiskite „OnionShare“, kad būtų pritaikytas naujas spalvų režimas.", + "mode_settings_receive_disable_files_checkbox": "Išjungti failų įkėlimą", + "mode_settings_receive_disable_text_checkbox": "Išjungti teksto pateikimą", + "gui_rendezvous_cleanup": "Laukiama, kol užsidarys „Tor“ grandinės, kad įsitikintume, jog jūsų failai sėkmingai perkelti.\n\nTai gali užtrukti kelias minutes.", + "gui_rendezvous_cleanup_quit_early": "Išeiti anksčiau", + "error_port_not_available": "„OnionShare“ prievadas nepasiekiamas", + "gui_chat_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali prisijungti prie šio pokalbių kambario naudodamas „Tor“ naršyklę: ", + "gui_settings_theme_dark": "Tamsi", + "gui_settings_theme_light": "Šviesi", + "gui_settings_theme_auto": "Automatinė", + "gui_settings_theme_label": "Tema", + "gui_please_wait_no_button": "Pradedama…", + "gui_client_auth_instructions": "Tuomet nusiųskite privatųjį raktą, kad leistumėte pasiekti jūsų \"OnionShare\" paslaugą:", + "gui_url_instructions_public_mode": "Siųsti toliau nurodytą \"OnionShare\" adresą:", + "gui_url_instructions": "Pirmiausia nusiųskite žemiau nurodytą \"OnionShare\" adresą:", + "gui_chat_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali prisijungti prie šio pokalbių kambario naudodamas „Tor“ naršyklę: ", + "gui_receive_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali įkelti failus į jūsų kompiuterį naudodamas „Tor“ naršyklę: ", + "gui_website_url_public_description": "Kiekvienas , turintis šį „OnionShare“ adresą, gali apsilankyti jūsų svetainėje naudodamas „Tor“ naršyklę : ", + "gui_share_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali atsisiųsti jūsų failus naudodamas „Tor“ naršyklę: ", + "gui_server_doesnt_support_stealth": "Atsiprašome, ši „Tor“ versija nepalaiko slapto (kliento autentifikavimo). Pabandykite naudoti naujesnę „Tor“ versiją arba naudokite viešąjį režimą, jei jis neturi būti privatus.", + "gui_hide": "Slėpti", + "gui_reveal": "Parodyti", + "gui_qr_label_auth_string_title": "Privatusis raktas", + "gui_qr_label_url_title": "OnionShare adresas", + "gui_copied_client_auth": "Privatusis raktas nukopijuotas į iškarpinę", + "gui_copied_client_auth_title": "Nukopijuotas privatusis raktas", + "gui_copy_client_auth": "Kopijuoti privatųjį raktą" +} diff --git a/desktop/onionshare/resources/locale/mk.json b/desktop/onionshare/resources/locale/mk.json new file mode 100644 index 00000000..a264021f --- /dev/null +++ b/desktop/onionshare/resources/locale/mk.json @@ -0,0 +1,179 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "large_filesize": "", + "systray_menu_exit": "Излези", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "Откажи", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "Преглед", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/ms.json b/desktop/onionshare/resources/locale/ms.json new file mode 100644 index 00000000..371c61b7 --- /dev/null +++ b/desktop/onionshare/resources/locale/ms.json @@ -0,0 +1,178 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "large_filesize": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "", + "gui_add": "Tambah", + "gui_add_files": "", + "gui_add_folder": "", + "gui_delete": "Padam", + "gui_choose_items": "", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "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_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_please_wait": "", + "version_string": "", + "gui_quit_title": "", + "gui_share_quit_warning": "", + "gui_receive_quit_warning": "", + "gui_quit_warning_quit": "Keluar", + "gui_quit_warning_dont_quit": "Batal", + "zip_progress_bar_format": "", + "error_stealth_not_supported": "", + "error_ephemeral_not_supported": "", + "gui_settings_window_title": "Tetapan", + "gui_settings_whats_this": "", + "gui_settings_stealth_option": "", + "gui_settings_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "Tidak pernah", + "gui_settings_autoupdate_check_button": "", + "gui_settings_general_label": "Tetapan umum", + "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": "Kara laluan", + "gui_settings_password_label": "Kara laluan", + "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": "Simpan", + "gui_settings_button_cancel": "Batal", + "gui_settings_button_help": "", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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": "Ya", + "gui_tor_connection_ask_quit": "Keluar", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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": "Penerimaan", + "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": "Lungsur", + "gui_settings_public_mode_checkbox": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "systray_menu_exit": "Keluar", + "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": "Sejarah", + "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_autostop_timer_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "" +} diff --git a/desktop/onionshare/resources/locale/nb_NO.json b/desktop/onionshare/resources/locale/nb_NO.json new file mode 100644 index 00000000..e4f9b317 --- /dev/null +++ b/desktop/onionshare/resources/locale/nb_NO.json @@ -0,0 +1,321 @@ +{ + "give_this_url": "Gi denne adressen til mottakeren:", + "ctrlc_to_stop": "Trykk Ctrl+C for å stoppe tjeneren", + "not_a_file": "{0:s} er ikke en fil.", + "gui_copied_url": "OnionShare-adresse kopiert til utklippstavle", + "other_page_loaded": "Adresse innlastet", + "config_onion_service": "Setter opp løk-tjeneste på port {0:d}.", + "preparing_files": "Pakker filer.", + "give_this_url_stealth": "Gi denne adressen og HidServAuth-linjen til mottakeren:", + "give_this_url_receive": "Gi denne adressen til avsenderen:", + "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øk-tjenesten", + "close_on_autostop_timer": "Stoppet fordi tidsavbruddsuret gikk ut", + "closing_automatically": "Stoppet fordi nedlastingen er ferdig", + "timeout_download_still_running": "Venter på at nedlastingen skal fullføres", + "large_filesize": "Advarsel: Forsendelse av stor deling kan ta flere timer", + "systray_menu_exit": "Avslutt", + "systray_download_started_title": "OnionShare-nedlasting startet", + "systray_download_started_message": "En bruker startet nedlasting av filene dine", + "systray_download_completed_title": "OnionShare-nedlasting fullført", + "systray_download_completed_message": "Brukeren fullførte nedlasting av filene dine", + "systray_download_canceled_title": "OnionShare-nedlasting avbrutt", + "systray_download_canceled_message": "Brukeren avbrøt nedlastingen", + "systray_upload_started_title": "OnionShare-opplasting startet", + "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_autostop_timer": "Stopp deling etter et gitt antall sekunder", + "help_stealth": "Bruk klientidentifisering (avansert)", + "help_receive": "Motta delinger istedenfor å sende dem", + "help_verbose": "Log OnionShare-feil til stdout, og vev-feil til disk", + "help_filename": "Liste over filer eller mapper å dele", + "help_config": "Egendefinert JSON-oppsettsfil (valgfri)", + "gui_drag_and_drop": "Dra og slipp filer og mapper for å starte deling", + "gui_add": "Legg til", + "gui_delete": "Slett", + "gui_choose_items": "Velg", + "gui_share_start_server": "Start deling", + "gui_share_stop_server": "Stopp deling", + "gui_share_stop_server_autostop_timer": "Stopp deling ({})", + "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_autostop_timer": "Stopp mottaksmodus ({} gjenstår)", + "gui_receive_stop_server_autostop_timer_tooltip": "Tidsavbruddsuret går ut {}", + "gui_copy_url": "Kopier nettadresse", + "gui_downloads": "Nedlastingshistorikk", + "gui_no_downloads": "Ingen nedlastinger enda.", + "gui_canceled": "Avbrutt", + "gui_copied_url_title": "Kopierte OnionShare-adressen", + "gui_please_wait": "Starter… Klikk for å avbryte.", + "gui_download_upload_progress_complete": "%p%, {0:s} forløpt.", + "gui_download_upload_progress_starting": "{0:s}, %p% (regner ut)", + "gui_download_upload_progress_eta": "{0:s}, anslått ferdigstilt: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Hold an", + "gui_share_quit_warning": "Filer er i ferd med å bli sendt. Er du sikker på at du ønsker å avslutte OnionShare?", + "gui_receive_quit_warning": "Du har ikke fått alle filene enda. Er du sikker på at du ønsker å avslutte OnionShare?", + "gui_quit_warning_quit": "Avslutt", + "gui_quit_warning_dont_quit": "Avbryt", + "zip_progress_bar_format": "Pakker sammen: %p%", + "error_stealth_not_supported": "For å bruke klientidentitetsbekreftelse, trenger du minst Tor 0.2.9.1-alpha (eller Tor-Browser 6.5) og python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare krever minst både Tor 0.2.7.1 og pything3-stem 1.4.0.", + "gui_settings_window_title": "Innstillinger", + "gui_settings_whats_this": "Hva er dette?", + "gui_settings_stealth_option": "Bruk klientidentifisering", + "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: {}", + "gui_settings_autoupdate_timestamp_never": "Aldri", + "gui_settings_autoupdate_check_button": "Se etter ny versjon", + "gui_settings_general_label": "Generelle innstillinger", + "gui_settings_sharing_label": "Delingsinnstillinger", + "gui_settings_close_after_first_download_option": "Stopp deling etter at filene har blitt sendt", + "gui_settings_connection_type_label": "Hvordan skal OnionShare koble seg til Tor?", + "gui_settings_connection_type_bundled_option": "Bruk Tor-versjonen som er bygget inn i OnionShare", + "gui_settings_connection_type_automatic_option": "Forsøk automatisk oppsett med Tor-nettleseren", + "gui_settings_connection_type_control_port_option": "Koble til ved bruk av kontrollport", + "gui_settings_connection_type_socket_file_option": "Koble til ved bruk av socket-fil", + "gui_settings_connection_type_test_button": "Test tilkobling til Tor", + "gui_settings_control_port_label": "Kontrollport", + "gui_settings_socket_file_label": "Socket-fil", + "gui_settings_socks_label": "SOCKS-port", + "gui_settings_authenticate_label": "Tor-identitetsbekreftelsesinnstillinger", + "gui_settings_authenticate_no_auth_option": "Ingen identitetsbekreftelse, eller cookie-identifiseringsbekreftelse", + "gui_settings_authenticate_password_option": "Passord", + "gui_settings_password_label": "Passord", + "gui_settings_tor_bridges": "Støtte for Tor-bro", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ikke benytt broer", + "gui_settings_tor_bridges_obfs4_radio_option": "Bruk innebygd pluggbare obfs4-transporter", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Bruk innebygd pluggbare obfs4-transporter (krever obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Bruk innebygd pluggbare meek_lite (Azure)-transporter", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bruk innebygd pluggbare meek_lite (Azure) transporter (krever obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Advarsel: Meek-lite-broene er veldig kostbare å kjøre for Tor-prosjektet.

Kun bruk dem hvis direkte tilkobling til Tor ikke virker, via obfs-transporter, eller andre normale broer.", + "gui_settings_tor_bridges_custom_radio_option": "Bruk egendefinerte broer", + "gui_settings_tor_bridges_custom_label": "Du kan hente broer fra https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Ingen av broene du la til virker.\nDobbeltsjekk dem eller legg til andre.", + "gui_settings_button_save": "Lagre", + "gui_settings_button_cancel": "Avbryt", + "gui_settings_button_help": "Hjelp", + "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 Browser (tilgjengelig fra torproject.org) i bakgrunnen?", + "settings_error_socket_port": "Kan ikke koble til Tor-kontroller på {}:{}.", + "settings_error_socket_file": "Kan ikke koble til Tor-kontroller ved bruk av socket-fil {}.", + "settings_error_auth": "Koblet til {}:{}, men kan ikke identitetsbekrefte. Kanskje dette ikke er en Tor-kontroller?", + "settings_error_missing_password": "Tilkoblet til Tor-kontroller, men den krever et passord for å identitetsbekrefte.", + "settings_error_unreadable_cookie_file": "Koblet til Tor-kontrolleren, men passordet kan være galt, eller så har ikke brukeren din tilgang til å lese fra kakefilen.", + "settings_error_bundled_tor_not_supported": "Bruk av Tor-versjonen som kommer med OnionShare fungerer ikke i utviklermodus på Windows eller macOS.", + "settings_error_bundled_tor_timeout": "Det tar for lang tid å koble til Tor. Kanskje du ikke er koblet til Internett, eller har du kanskje en unøyaktig systemklokke?", + "settings_error_bundled_tor_broken": "OnionShare kunne ikke koble til Tor i bakgrunnen:\n{}", + "settings_test_success": "Koblet til Tor-kontrolleren.\n\nTor-versjon: {}.\nStøtter flyktige løk-tjenester: {}.\nStøtter klientidentifisering: {}.\nStøtter nestegenerasjons .onion-adresser: {}.", + "error_tor_protocol_error": "Det oppsto en feil med Tor: {}", + "error_tor_protocol_error_unknown": "Ukjent feil med Tor", + "error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet", + "connecting_to_tor": "Kobler til Tor-nettverket", + "update_available": "Ny OnionShare-versjon tilgjenglig. Klikk her for å laste den ned.

Du bruker {} og nyeste versjon er {}.", + "update_error_check_error": "Kunne ikke sjekke etter ny versjon: Kanskje du ikke er tilknyttet Tor, eller OnionShare-nettsiden er nede?", + "update_error_invalid_latest_version": "Kunne ikke sjekke etter ny versjon: OnionShare-nettsiden melder at siste versjon er det ugjenkjennelige «{}»…", + "update_not_available": "Du kjører siste versjon av OnionShare.", + "gui_tor_connection_ask": "Åpne innstillingene for å ordne opp i tilkoblingen til Tor?", + "gui_tor_connection_ask_open_settings": "Ja", + "gui_tor_connection_ask_quit": "Avslutt", + "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_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet. Lag en ny deling.", + "gui_server_autostop_timer_expired": "Tidsavbruddsuret har gått ut allerede. Juster det for å starte deling.", + "share_via_onionshare": "Del via OnionShare", + "gui_save_private_key_checkbox": "Bruk en vedvarende adresse", + "gui_share_url_description": "Alle som har denne OnionShare-adressen og tilhørende privat nøkkel kan Laste ned filene dine ved bruk av Tor-Browser: ", + "gui_receive_url_description": "Alle som har denne OnionShare-adressen og tilhørende privat nøkkel kan Laste opp filer til din datamaskin ved bruk av Tor-Browser: ", + "gui_url_label_persistent": "Delingen vil ikke stoppe automatisk.

Hver påfølgende deling vil gjenbruke adressen. (For engangsadresser, skru av \"Bruk vedvarende adresse\" i innstillingene.)", + "gui_url_label_stay_open": "Denne delingen vil ikke stoppe automatisk.", + "gui_url_label_onetime": "Denne delingen vil stoppe etter første fullføring.", + "gui_url_label_onetime_and_persistent": "Delingen vil ikke stoppe automatisk.

Hver påfølgende deling vil gjenbruke adressen. (For å bruke engangsadresser, skru av \"Bruk vedvarende adresse\" i innstillingene.)", + "gui_status_indicator_share_stopped": "Klar til å dele", + "gui_status_indicator_share_working": "Starter…", + "gui_status_indicator_share_started": "Deler", + "gui_status_indicator_receive_stopped": "Klar til mottak", + "gui_status_indicator_receive_working": "Starter…", + "gui_status_indicator_receive_started": "Mottar", + "gui_file_info": "{} filer, {}", + "gui_file_info_single": "{} fil, {}", + "info_in_progress_downloads_tooltip": "{} nedlasting(er) underveis", + "info_completed_downloads_tooltip": "{} nedlasting(er) fullført", + "info_in_progress_uploads_tooltip": "{} opplasting(er) underveis", + "info_completed_uploads_tooltip": "{} nedlasting(er) fullført", + "error_cannot_create_downloads_dir": "Kunne ikke opprette mottaksmodusmappe: {}", + "error_downloads_dir_not_writable": "Mottaksmodusmappen er skrivebeskyttet: {}", + "receive_mode_downloads_dir": "Filer sendt til deg vil vises i denne mappen: {}", + "receive_mode_warning": "Advarsel: Mottaksmodus lar folk laste opp filer til din datamaskin. Noen filer kan potensielt ta over datamaskinen din hvis du åpner dem. Kun åpne ting fra folk du stoler på, eller hvis du vet hva du gjør.", + "gui_receive_mode_warning": "Mottaksmodus lar folk laste opp filer til din datamaskin.

Noen filer kan potensielt ta over datamaskinen din hvis du åpner dem. Åpne kun filer fra personer du stoler på, eller hvis du vet hva du gjør.", + "receive_mode_upload_starting": "Opplasting av total størrelse {} starter", + "receive_mode_received_file": "Mottatt: {}", + "gui_mode_share_button": "Del filer", + "gui_mode_receive_button": "Motta filer", + "gui_settings_receiving_label": "Mottaksinnstillinger", + "gui_settings_downloads_label": "Lagre filer i", + "gui_settings_downloads_button": "Utforstk", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "Mottaksmodus kan stoppes av avsenderen", + "gui_settings_public_mode_checkbox": "Offentlig modus", + "systray_close_server_title": "OnionShare-tjener lukket", + "systray_close_server_message": "En bruker stengte tjeneren", + "systray_page_loaded_title": "Side innlastet", + "systray_download_page_loaded_message": "En bruker lastet inn nedlastingssiden", + "systray_upload_page_loaded_message": "En bruker lastet inn opplastingssiden", + "gui_uploads": "Opplastingshistorikk", + "gui_no_uploads": "Ingen opplastinger enda.", + "gui_clear_history": "Tøm alt", + "gui_upload_in_progress": "Opplasting startet {}", + "gui_upload_finished_range": "Lastet opp {} til {}", + "gui_upload_finished": "Lastet opp {}", + "gui_open_folder_error_nautilus": "Kan ikke åpne mappe fordi nautilus ikke er tilgjengelig. Filen er her: {}", + "history_in_progress_tooltip": "{} underveis", + "history_completed_tooltip": "{} fullført", + "gui_download_in_progress": "Nedlasting startet {}", + "gui_settings_language_label": "Foretrukket språk", + "gui_settings_language_changed_notice": "Start OnionShare på ny for å se nytt språkvalg.", + "timeout_upload_still_running": "Venter på at opplastingen fullføres", + "gui_add_files": "Legg til filer", + "gui_add_folder": "Legg til mappe", + "gui_connect_to_tor_for_onion_settings": "Koble til Tor for å se Onion-innstillinger", + "error_cannot_create_data_dir": "Kunne ikke opprette OnionShare-datamappe: {}", + "receive_mode_data_dir": "Filers sendt til deg havner i denne mappen: {}", + "gui_settings_data_dir_label": "Lagre filer i", + "gui_settings_data_dir_browse_button": "Utforsk", + "systray_page_loaded_message": "OnionShare-adresse lastet", + "systray_share_started_title": "Deling startet", + "systray_share_started_message": "Begynner å sende filer til noen", + "systray_share_completed_title": "Deling fullført", + "systray_share_completed_message": "Forsendelse av filer utført", + "systray_share_canceled_title": "Deling avbrutt", + "systray_share_canceled_message": "Noen avbrøt mottak av filene dine", + "systray_receive_started_title": "Mottak startet", + "systray_receive_started_message": "Noen sender deg filer", + "gui_all_modes_history": "Historikk", + "gui_all_modes_clear_history": "Tøm alt", + "gui_all_modes_transfer_started": "Startet {}", + "gui_all_modes_transfer_finished_range": "Overført {} - {}", + "gui_all_modes_transfer_finished": "Overført {}", + "gui_all_modes_progress_complete": "%p%, {0:s} forløpt.", + "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_autostop_timer_waiting": "Venter på fullføring av forsendelse", + "gui_receive_mode_no_files": "Ingen filer mottatt enda", + "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", + "gui_stop_server_autostop_timer_tooltip": "Automatisk tidsavbruddsur utløper {}", + "gui_start_server_autostart_timer_tooltip": "Automatisk tidsur slutter {}", + "gui_waiting_to_start": "Planlagt start om {}. Klikk for å avbryte.", + "gui_settings_autostart_timer_checkbox": "Bruk tidur for automatisk start", + "gui_settings_autostart_timer": "Start delingen:", + "gui_server_autostart_timer_expired": "Planlagt tid allerede tilbakelagt. Juster det for å starte deling.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatisk tidsavbruddsur kan ikke være likt eller predatere auomatisk starttid. Juster det for å starte deling.", + "gui_status_indicator_share_scheduled": "Planlagt…", + "gui_status_indicator_receive_scheduled": "Planlagt…", + "days_first_letter": "d", + "hours_first_letter": "t", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_website_url_description": "Hvem som helst med denne OnionShare-adressen og tilhørende privat nøkkel kan besøke din nettside ved bruk av Tor-nettleseren: ", + "gui_mode_website_button": "Publiser nettside", + "systray_site_loaded_title": "Nettside innlastet", + "systray_site_loaded_message": "OnionShare-nettside innlastet", + "systray_website_started_title": "Starter deling av nettside", + "systray_website_started_message": "Noen besøker din nettside", + "gui_website_mode_no_files": "Ingen nettside delt enda", + "incorrect_password": "Feil passord", + "gui_settings_individual_downloads_label": "Forby nedlasting av enkeltfiler", + "history_requests_tooltip": "{} vevforespørsler", + "systray_individual_file_downloaded_title": "Enkeltfil innlastet", + "systray_individual_file_downloaded_message": "Enkeltfil {} sett", + "mode_settings_advanced_toggle_hide": "Skjul avanserte innstillinger", + "mode_settings_advanced_toggle_show": "Vis avanserte innstillinger", + "gui_quit_warning_cancel": "Avbryt", + "gui_quit_warning_title": "Er du sikker?", + "gui_close_tab_warning_cancel": "Avbryt", + "gui_close_tab_warning_close": "Lukk", + "gui_close_tab_warning_title": "Er du sikker?", + "gui_new_tab_website_button": "Offentliggjør nettside", + "gui_new_tab_share_button": "Del filer", + "gui_new_tab_tooltip": "Åpne en ny fane", + "gui_new_tab": "Ny fane", + "gui_settings_website_label": "Nettsideinnstillinger", + "mode_settings_receive_data_dir_browse_button": "Utforsk", + "mode_settings_receive_data_dir_label": "Lagre filer i", + "gui_new_tab_receive_button": "Motta filer", + "mode_settings_autostop_timer_checkbox": "Stopp løktjeneste ved planlagt tidspunkt", + "mode_settings_autostart_timer_checkbox": "Start løktjeneste ved planlagt tidspunkt", + "mode_settings_public_checkbox": "Dette er en offentlig OnionShare-tjeneste (skrur av privat nøkkel)", + "gui_close_tab_warning_receive_description": "Du mottar filer. Er du sikker på at du vil lukke denne fanen?", + "gui_close_tab_warning_share_description": "Du sender filer. Er du sikker på at du vil lukke denne fanen?", + "gui_chat_stop_server": "Stopp sludringstjener", + "gui_chat_start_server": "Start sludringstjener", + "gui_chat_stop_server_autostop_timer": "Stopp sludringstjener ({})", + "gui_file_selection_remove_all": "Fjern alle", + "gui_remove": "Fjern", + "gui_quit_warning_description": "Deling er aktiv i noen av fanene dine. Hvis du avslutter, vil alle fanene dine lukkes. Er du sikker på at du vil avslutte?", + "gui_close_tab_warning_website_description": "Du deler en nettside akkurat nå. Er du sikker på at du vil lukke denne fanen?", + "gui_settings_csp_header_disabled_option": "Ikke send hode for innholdssikkerhetspraksis", + "mode_settings_website_disable_csp_checkbox": "Ikke send hode for innholdsikkerhetspraksis (tillater nettsiden din å bruke tredjepartsressurser)", + "mode_settings_legacy_checkbox": "Bruk en gammeldags adresse (v2-onion tjeneste, anbefales ikke)", + "mode_settings_persistent_checkbox": "Lagre denne fanen og åpne den automatisk sammen med OnionShare", + "gui_open_folder_error": "Klarte ikke å åpne mappe med xdg-open. Filen er her: {}", + "gui_receive_flatpak_data_dir": "Fordi du har installert OnionShare som Flatpak må du lagre filer til en mappe i ~/OnionShare.", + "mode_settings_share_autostop_sharing_checkbox": "Stopp deling etter at filer er sendt (fravelg for å tillate nedlasting av individuelle filer)", + "gui_close_tab_warning_persistent_description": "Denne fanen er vedvarende. Hvis du lukker den vil du miste onion-adressen den bruker. Er du sikker på at du vil lukke den?", + "gui_tab_name_chat": "Prat", + "gui_tab_name_website": "Nettside", + "gui_tab_name_receive": "Motta", + "gui_tab_name_share": "Del", + "gui_new_tab_chat_button": "Sludre anonymt", + "gui_qr_code_description": "Skann denne QR-koden med en QR-kodeleser (f.eks. kameraprogrammet på enheten din) for enklere deling av OnionShare-adressen med noen.", + "gui_qr_code_dialog_title": "OnionShare-QR-kode", + "gui_show_qr_code": "Vis QR-kode", + "gui_main_page_chat_button": "Start sludring", + "gui_main_page_website_button": "Start vertsjening", + "gui_main_page_receive_button": "Start mottak", + "gui_main_page_share_button": "Start deling", + "gui_chat_url_description": "Alle med denne OnionShare-adressen og tilhørende privat nøkkel kan ta del i dette sludrerommet ved bruk av Tor-nettleseren: ", + "error_port_not_available": "OnionShare-port ikke tilgjengelig", + "gui_rendezvous_cleanup_quit_early": "Avslutt tidlig", + "gui_rendezvous_cleanup": "Venter på at Tor-kretsene lukkes for å være sikker på at filene dine er overført.\n\nDette kan ta noen minutter.", + "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus.", + "history_receive_read_message_button": "Les melding", + "mode_settings_receive_webhook_url_checkbox": "Bruk varsling webhook", + "mode_settings_receive_disable_files_checkbox": "Deaktiver opplasting av filer", + "mode_settings_receive_disable_text_checkbox": "Deaktiver innsending av tekst", + "mode_settings_title_label": "Egendefinert tittel", + "gui_url_instructions": "Først sender du OnionShare-adressen nedenfor:", + "gui_website_url_public_description": "Alle med denne OnionShare-adressen kan besøke nettsiden din ved bruk av Tor-nettleseren: ", + "gui_status_indicator_chat_started": "Sludrer", + "gui_status_indicator_chat_scheduled": "Planlagt …", + "gui_status_indicator_chat_working": "Starter …", + "gui_status_indicator_chat_stopped": "Klar til å sludre", + "gui_client_auth_instructions": "Så sender du den private nøkkelen for å innvilge tilgang til din OnionShare-tjeneste:", + "gui_url_instructions_public_mode": "Send OnionShare-adressen nedenfor:", + "gui_chat_url_public_description": "Alle med denne OnionShare-adressen kan ta del i dette sludrerommet ved bruk av Tor-nettleseren: ", + "gui_receive_url_public_description": "Alle med denne OnionShare-adressen kan laste opp filer til datamaskinen din ved bruk av Tor-nettleseren: ", + "gui_share_url_public_description": "Alle med dene OnionShare-adressen kan laste ned filene dine ved bruk av Tor-nettleseren: ", + "gui_server_doesnt_support_stealth": "Denne versjonen av Tor støtter ikke stealth (klient-identitetsbekreftelse). Prøv med en nyere versjon av Tor, eller bruk «offentlig» modus hvis det ikke trenger å være privat.", + "gui_settings_theme_light": "Lys", + "gui_settings_theme_auto": "Auto", + "gui_settings_theme_label": "Drakt", + "gui_settings_theme_dark": "Mørk", + "gui_please_wait_no_button": "Starter …", + "gui_hide": "Skjul", + "gui_reveal": "Avslør", + "gui_qr_label_auth_string_title": "Privat nøkkel", + "gui_qr_label_url_title": "OnionShare-adresse", + "gui_copied_client_auth": "Privat nøkkel kopiert til utklippstavle", + "gui_copied_client_auth_title": "Privat nøkkel kopiert", + "gui_copy_client_auth": "Kopier privat nøkkel" +} diff --git a/desktop/onionshare/resources/locale/nl.json b/desktop/onionshare/resources/locale/nl.json new file mode 100644 index 00000000..2ae1351a --- /dev/null +++ b/desktop/onionshare/resources/locale/nl.json @@ -0,0 +1,297 @@ +{ + "config_onion_service": "Onion-dienst configureren op poort {0:d}.", + "preparing_files": "Bezig met comprimeren van bestanden.", + "give_this_url": "Geef dit adres aan de ontvanger:", + "give_this_url_stealth": "Geef dit adres en de HidServAuth-regel aan de ontvanger:", + "ctrlc_to_stop": "Druk op Ctrl+C om de server te stoppen", + "not_a_file": "{0:s} is geen geldig bestand.", + "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_autostop_timer": "Gestopt omdat de automatische stop-timer afgelopen was", + "closing_automatically": "Gestopt omdat de overdracht klaar is", + "timeout_download_still_running": "Bezig met wachten op afronden van download", + "large_filesize": "Waarschuwing: het versturen van grote bestanden kan uren duren", + "systray_menu_exit": "Afsluiten", + "systray_download_started_title": "OnionShare-download gestart", + "systray_download_started_message": "Een gebruiker is begonnen met downloaden van je bestanden", + "systray_download_completed_title": "OnionShare-download afgerond", + "systray_download_completed_message": "De gebruiker is klaar met downloaden", + "systray_download_canceled_title": "OnionShare-download afgebroken", + "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_autostop_timer": "Stoppen met delen na het opgegeven aantal seconden", + "help_stealth": "Client-authorisatie gebruiken (geavanceerd)", + "help_verbose": "Log OnionShare fouten naar stdout, en web fouten naar disk", + "help_filename": "Lijst van bestanden of mappen om te delen", + "help_config": "Instelbaar pad naar JSON configuratie bestand (optioneel)", + "gui_drag_and_drop": "Sleep bestanden hier naar toe om het delen te starten", + "gui_add": "Toevoegen", + "gui_delete": "Verwijder", + "gui_choose_items": "Kies", + "gui_copy_url": "Kopieer URL", + "gui_downloads": "Download Geschiedenis", + "gui_canceled": "Afgebroken", + "gui_copied_url": "OnionShare adres gekopieerd naar klembord", + "gui_please_wait": "Aan het starten... Klik om te annuleren.", + "gui_download_upload_progress_complete": "%p%, {0:s} verstreken.", + "gui_download_upload_progress_starting": "{0:s}, %p% (berekenen)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_share_quit_warning": "Je bent in het proces van bestanden versturen. Weet je zeker dat je OnionShare af wilt sluiten?", + "gui_quit_warning_quit": "Afsluiten", + "gui_quit_warning_dont_quit": "Annuleren", + "zip_progress_bar_format": "Comprimeren: %p%", + "error_stealth_not_supported": "Om client authorization te gebruiken heb je op zijn minst zowel Tor 0.2.9.1-alpha (of Tor Browser 6.5) en python3-stem 1.5.0 nodig.", + "error_ephemeral_not_supported": "OnionShare vereist minstens zowel Tor 0.2.7.1 als python3-stem 1.4.0.", + "gui_settings_window_title": "Instellingen", + "gui_settings_stealth_option": "Gebruik cliëntautorisatie", + "gui_settings_autoupdate_label": "Controleer op nieuwe versies", + "gui_settings_autoupdate_option": "Laat me weten als er een nieuwe versie beschikbaar is", + "gui_settings_autoupdate_timestamp": "Laatste controle: {}", + "gui_settings_autoupdate_timestamp_never": "Nooit", + "gui_settings_autoupdate_check_button": "Controleer op een Nieuwe Versie", + "gui_settings_sharing_label": "Instelling voor delen", + "gui_settings_close_after_first_download_option": "Stop met delen, nadat de bestanden verstuurd zijn", + "gui_settings_connection_type_label": "Hoe moet OnionShare verbinden met Tor?", + "gui_settings_connection_type_bundled_option": "Gebruik de Tor versie die is ingebouwd in OnionShare", + "gui_settings_connection_type_automatic_option": "Probeer auto-configuratie met Tor Browser", + "gui_settings_connection_type_control_port_option": "Verbinden via controle poort", + "gui_settings_connection_type_socket_file_option": "Verbinden via socket bestand", + "gui_settings_connection_type_test_button": "Test Connectie naar Tor", + "gui_settings_control_port_label": "Controle poort", + "gui_settings_socket_file_label": "Socket bestand", + "gui_settings_socks_label": "SOCKS poort", + "gui_settings_authenticate_label": "Tor authenticatie instellingen", + "gui_settings_authenticate_no_auth_option": "Geen authenticatie, of cookie authenticatie", + "gui_settings_authenticate_password_option": "Wachtwoord", + "gui_settings_password_label": "Wachtwoord", + "gui_settings_button_save": "Opslaan", + "gui_settings_button_cancel": "Annuleren", + "gui_settings_button_help": "Help", + "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?", + "settings_error_socket_port": "Kan geen verbinding maken met de Tor controller op {}:{}.", + "settings_error_socket_file": "Kan geen verbinding maken met de Tor controller via socket bestand {}.", + "settings_error_auth": "Verbonden met {}:{}, maar kan niet authenticeren. Misschien is het geen Tor controller?", + "settings_error_missing_password": "Verbonden met Tor controller, maar het heeft een wachtwoord nodig voor authenticatie.", + "settings_error_unreadable_cookie_file": "Verbonden met de Tor controller, maar het wachtwoord kan onjuist zijn, of je gebruiker heeft geen toestemming om het cookie bestand te lezen.", + "settings_error_bundled_tor_not_supported": "De Tor versie die is meegeleverd bij OnionShare werkt niet in de ontwikkelaarsmodus op Windows of macOS.", + "settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer niet verbonden met internet, of je hebt een inaccurate systeemklok?", + "settings_error_bundled_tor_broken": "OnionShare kan geen verbinding maken met Tor:\n{}", + "settings_test_success": "Verbonden met de Tor controller.\n\nTor versie: {}\nOndersteunt ephemeral onion services: {}.\nOndersteunt client authentication: {}.\nOndersteunt next-gen .onion addresses: {}.", + "error_tor_protocol_error": "Er was een fout met Tor: {}", + "connecting_to_tor": "Verbinden met het Tor netwerk", + "update_available": "Nieuwe OnionShare is uitgekomen. Klik hier om hem te krijgen.

Jij gebruikt {} en de laatste is {}.", + "update_error_check_error": "Kon niet controleren op een nieuwe versie: Wellicht ben je niet met Tor verbonden, of de OnionShare website is niet beschikbaar?", + "update_error_invalid_latest_version": "Kon niet controleren op een nieuwe versie: de OnionShare website meldt dat de laatste versie de onherkenbare is '{}' is…", + "update_not_available": "Je draait de laatst beschikbare OnionShare.", + "gui_tor_connection_ask": "Open de instellingen om het verbindingsprobleem met Tor op te lossen?", + "gui_tor_connection_ask_open_settings": "Ja", + "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\nZorg dat je met het internet verbonden bent, herstart OnionShare en configureer de verbinding met Tor.", + "gui_server_started_after_autostop_timer": "De auto-stop timer verliep, voordat de server startte. Maak een nieuwe share aan.", + "gui_server_autostop_timer_expired": "De auto-stop timer is al verlopen. Stel 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:", + "systray_upload_started_title": "OnionShare-upload gestart", + "systray_upload_started_message": "Een gebruiker is begonnen met uploaden van bestanden naar je computer", + "help_receive": "Bestanden ontvangen in plaats van ze versturen", + "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_autostop_timer": "Stop met Delen ({})", + "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_autostop_timer": "Stop Ontvangstmodus ({} 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_quit_title": "Niet zo snel", + "gui_receive_quit_warning": "Je bent in het proces van bestanden ontvangen. Weet je zeker dat je OnionShare af wilt sluiten?", + "gui_settings_whats_this": "1Wat is dit?2", + "gui_settings_general_label": "Algemene instellingen", + "gui_settings_tor_bridges": "Tor bridge ondersteuning", + "gui_settings_tor_bridges_no_bridges_radio_option": "Gebruik geen bridges", + "gui_settings_tor_bridges_obfs4_radio_option": "Gebruik ingebouwde obfs4 pluggable transports", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gebruik ingebouwde pluggable transports (vereist obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gebruik ingebouwde meek_lite (Azure) pluggable transports", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingebouwde meek_lite (Azure) pluggable transports (vereist obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Waarschuwing: De meek_lite bridges zijn erg kostbaar voor het Tor Project om uit te voeren.

Gebruik ze alleen als je niet direct met Tor kan verbinden, via obfs4 transports, of andere normale bridges.", + "gui_settings_tor_bridges_custom_radio_option": "Gebruik custom bridges", + "gui_settings_tor_bridges_custom_label": "Je kan bridges krijgen via https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Geen van de bridges die je hebt toegevoegd werken. \nControleer ze of voeg andere toe.", + "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.", + "gui_save_private_key_checkbox": "Gebruik een vast adres", + "gui_share_url_description": "1Iedereen2 met dit OnionShare-adres kan je bestanden 3binnenhalen4 met de 5Tor Browser6: ", + "gui_receive_url_description": "Iedereen met dit OnionShare adres kan bestanden op je computer plaatsen met de Tor Browser: ", + "gui_url_label_persistent": "Deze share stopt niet vanzelf.

Elke volgende share zal het adres hergebruiken. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)", + "gui_url_label_stay_open": "Deze share stopt niet automatisch.", + "gui_url_label_onetime": "Deze share stopt na de eerste voltooiïng.", + "gui_url_label_onetime_and_persistent": "Deze share stopt niet vanzelf.

Elke volgende share zal het adres hergebruiken. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)", + "gui_status_indicator_share_stopped": "Klaar om te delen", + "gui_status_indicator_share_working": "Starten…", + "gui_status_indicator_share_started": "Aan het delen", + "gui_status_indicator_receive_stopped": "Klaar om te ontvangen", + "gui_status_indicator_receive_working": "Starten…", + "gui_status_indicator_receive_started": "Ontvangen", + "gui_file_info": "{} bestanden, {}", + "gui_file_info_single": "{} bestand, {}", + "history_in_progress_tooltip": "{} bezig", + "history_completed_tooltip": "{} klaar", + "info_in_progress_uploads_tooltip": "{} upload(s) zijn bezig", + "info_completed_uploads_tooltip": "de {} upload(s) zijn klaar", + "error_cannot_create_downloads_dir": "Kon de ontvangst modus map niet aanmaken: {}", + "receive_mode_downloads_dir": "De naar je verstuurde bestanden verschijnen in deze map: {}", + "receive_mode_warning": "Waarschuwing: Ontvangst mode laat het toe dat mensen bestanden op je computer zetten. Sommige bestanden kunnen mogelijk de controle over je computer overnemen als je ze opent. Open alleen dingen van mensen die je vertrouwd of als je weet wat je aan het doen bent.", + "gui_receive_mode_warning": "Ontvangstmodus laat anderen bestanden op je computer zetten.

Sommige van die bestanden kunnen mogelijk je computer overnemen, als je ze opent. Open alleen dingen van mensen die je vertrouwt, of als je heel zeker weet wat je doet.", + "receive_mode_upload_starting": "Upload met totale grootte {} is aan het starten", + "receive_mode_received_file": "Ontvangen: {}", + "gui_mode_share_button": "Deel Bestanden", + "gui_mode_receive_button": "Ontvang Bestanden", + "gui_settings_receiving_label": "Instellingen voor Ontvangen", + "gui_settings_downloads_label": "Sla bestanden op naar", + "gui_settings_downloads_button": "Surf", + "gui_settings_public_mode_checkbox": "Openbare modus", + "systray_close_server_title": "OnionShare Server Afgesloten", + "systray_close_server_message": "Een gebruiker heeft de server gestopt", + "systray_page_loaded_title": "Pagina Geladen", + "systray_download_page_loaded_message": "Een gebruiker heeft de download pagina geladen", + "systray_upload_page_loaded_message": "Een gebruiker heeft de upload pagina geladen", + "gui_uploads": "Upload Geschiedenis", + "gui_no_uploads": "Er Zijn Nog Geen Uploads", + "gui_clear_history": "Wis Alles", + "gui_upload_in_progress": "Upload Is Gestart{}", + "gui_upload_finished_range": "{} is naar {} gestuurd", + "gui_upload_finished": "Verzonden {}", + "gui_download_in_progress": "Downloaden Gestart {}", + "gui_open_folder_error_nautilus": "Kan de map niet openen, omdat nautilus niet beschikbaar is. Het bestand staat hier: {}", + "gui_settings_language_label": "Voorkeurstaal", + "gui_settings_language_changed_notice": "Herstart OnionShare om de nieuwe taal te gebruiken.", + "gui_add_files": "Voeg bestanden toe", + "gui_add_folder": "Voeg map toe", + "gui_connect_to_tor_for_onion_settings": "Verbind met Tor om de instellingen van onion-diensten te zien", + "gui_settings_data_dir_label": "Bewaar bestanden naar", + "gui_settings_data_dir_browse_button": "Surf", + "systray_page_loaded_message": "OnionShare adres geladen", + "systray_share_started_title": "Delen Begonnen", + "systray_share_started_message": "Begint bestanden aan iemand te sturen", + "systray_share_completed_title": "Delen Afgerond", + "systray_share_completed_message": "Klaar met versturen van bestanden", + "systray_share_canceled_title": "Delen geannulleerd", + "systray_share_canceled_message": "Iemand heeft het ontvangen van je bestanden geannulleerd", + "systray_receive_started_title": "Ontvangen Begonnen", + "systray_receive_started_message": "Iemand stuurt bestanden naar je", + "gui_all_modes_history": "Geschiedenis", + "gui_all_modes_clear_history": "Wis Alles", + "gui_all_modes_transfer_started": "Begonnen {}", + "gui_all_modes_transfer_finished_range": "Overgezet {} - {}", + "gui_all_modes_transfer_finished": "Overgezet {}", + "gui_all_modes_progress_complete": "%p%, {0:s} verlopen.", + "gui_all_modes_progress_starting": "{0:s}, %p% (aan het berekenen)", + "gui_share_mode_no_files": "Nog Geen Bestanden Verzonden", + "gui_receive_mode_no_files": "Nog Geen Bestanden Ontvangen", + "gui_all_modes_transfer_canceled_range": "Geannuleerd {} - {}", + "gui_all_modes_transfer_canceled": "Geannuleerd {}", + "gui_settings_onion_label": "Onion instellingen", + "gui_stop_server_autostop_timer_tooltip": "Auto-stop timer stopt om {}", + "gui_start_server_autostart_timer_tooltip": "Auto-start timer stopt om {}", + "gui_waiting_to_start": "Gepland te beginnen in {}. Klik om af te breken.", + "gui_settings_autostart_timer_checkbox": "Gebruik auto-start timer", + "gui_settings_autostart_timer": "Begin het delen om:", + "gui_server_autostart_timer_expired": "De geplande timer is al verlopen. Stel een nieuwe in om te beginnen met delen.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "De auto-stop tijd mag niet identiek of vroeger zijn dan de auto-start tijd. Stel hem opnieuw in om te beginnen met delen.", + "gui_status_indicator_share_scheduled": "Gepland…", + "gui_status_indicator_receive_scheduled": "Gepland…", + "gui_share_mode_autostop_timer_waiting": "Wachten tot verzenden klaar is", + "gui_receive_mode_autostop_timer_waiting": "Wachten tot ontvangen klaar is", + "gui_website_url_description": "1Iedereen2 met dit OnionShare-adres kan je bestanden 3bezoeken4 met de 5Tor Browser6: ", + "gui_mode_website_button": "Zet website online", + "systray_site_loaded_title": "Website geladen", + "systray_site_loaded_message": "OnionShare website geladen", + "systray_website_started_title": "Delen van website begint", + "systray_website_started_message": "Iemand bezoekt je website nu", + "gui_website_mode_no_files": "Nog Geen Website Gedeeld", + "gui_visit_started": "Iemand heeft je website bezocht {}", + "incorrect_password": "Foutief wachtwoord", + "gui_settings_individual_downloads_label": "Klik uit om het downloaden van individuele bestanden toe te staan", + "systray_individual_file_downloaded_title": "Individueel bestand geladen", + "systray_individual_file_downloaded_message": "Individueel bestand {} bekeken", + "gui_settings_website_label": "Instellingen voor website", + "error_cannot_create_data_dir": "Kon geen OnionShare datamap aanmaken: {}", + "gui_all_modes_progress_eta": "{0:s}, Verwachte aankomsttijd: {1:s}, %p%", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "history_requests_tooltip": "{} webverzoeken", + "gui_settings_csp_header_disabled_option": "Schakel Content Security Policy header uit", + "mode_settings_share_autostop_sharing_checkbox": "Stop met het delen van bestanden nadat ze verzonden zijn (afvinken om het downloaden van individuele bestanden toe te staan)", + "mode_settings_legacy_checkbox": "Gebruik een verouderd adres (v2 onion service, niet aanbevolen)", + "mode_settings_public_checkbox": "Geen wachtwoord gebruiken", + "mode_settings_advanced_toggle_hide": "Verberg geavanceerde instellingen", + "mode_settings_advanced_toggle_show": "Toon geavanceerde instellingen", + "gui_quit_warning_cancel": "Annuleren", + "gui_quit_warning_title": "Weet je het zeker?", + "gui_close_tab_warning_cancel": "Annuleren", + "gui_close_tab_warning_close": "Afsluiten", + "gui_close_tab_warning_receive_description": "Je bent bezig met bestanden ontvangen. Weet je zeker dat je dit tabblad wilt sluiten?", + "gui_close_tab_warning_share_description": "Je bent bezig bestanden te sturen. Weet je zeker dat je dit tabblad wilt sluiten?", + "gui_close_tab_warning_title": "Weet je het zeker?", + "gui_new_tab_website_description": "Host een statische HTML onion website vanaf je computer.", + "gui_new_tab_receive_button": "Bestanden ontvangen", + "gui_new_tab_share_description": "Kies bestanden op jouw computer om naar iemand anders te sturen. De persoon of personen waar je de bestanden naar wilt sturen moeten de Tor Browser gebruiken om jouw bestanden te downloaden.", + "mode_settings_website_disable_csp_checkbox": "Stuur geen Content Security Policy header (hiermee kan uw website bronnen van derden gebruiken)", + "mode_settings_receive_data_dir_browse_button": "Blader", + "mode_settings_receive_data_dir_label": "Bewaar bestanden in", + "mode_settings_autostop_timer_checkbox": "Stop onion service op een geplande tijd", + "mode_settings_autostart_timer_checkbox": "Start onion service op een geplande tijd", + "mode_settings_persistent_checkbox": "Bewaar dit tabblad en open het automatisch wanneer ik OnionShare open", + "gui_quit_warning_description": "Delen is actief op sommige van uw tabbladen. Als u stopt, worden al uw tabbladen gesloten. Weet u zeker dat u wilt stoppen?", + "gui_close_tab_warning_website_description": "U host actief een website. Weet u zeker dat u dit tabblad wilt sluiten?", + "gui_close_tab_warning_persistent_description": "Dit tabblad heeft een vast onion adres. Als je het tabblad sluit wordt het gebruikte onion adres opgeheven. Weet je zeker dat je dit wil sluiten?", + "gui_tab_name_chat": "Chat", + "gui_tab_name_website": "Website", + "gui_tab_name_receive": "Ontvang", + "gui_tab_name_share": "Deel", + "gui_main_page_chat_button": "Begin met chatten", + "gui_main_page_website_button": "Begin met hosten", + "gui_main_page_receive_button": "Begin met ontvangen", + "gui_main_page_share_button": "Begin met delen", + "gui_new_tab_chat_button": "Chat anoniem", + "gui_new_tab_website_button": "Host een website", + "gui_new_tab_share_button": "Deel bestanden", + "gui_new_tab_tooltip": "Open een tabblad", + "gui_new_tab": "Nieuw tabblad", + "gui_open_folder_error": "Niet gelukt om de map te openen met xdg-open. Het bestand staat hier: {}", + "gui_qr_code_dialog_title": "OnionShare QR Code", + "gui_show_qr_code": "Toon QR Code", + "gui_receive_flatpak_data_dir": "Omdat je OnionShare installeerde met Flatpak, moet je bestanden opslaan in een folder in ~/OnionShare.", + "gui_chat_stop_server": "Stop chat server", + "gui_chat_start_server": "Start chat server", + "gui_file_selection_remove_all": "Alles verwijderen", + "gui_remove": "Verwijderen", + "gui_rendezvous_cleanup": "Wachten op Tor circuits om af te sluiten, om zeker te stellen dat je bestanden succesvol zijn verplaatst\n\nDit kan enkele minuten duren.", + "mode_settings_receive_disable_text_checkbox": "Schakel het versturen van tekst uit", + "mode_settings_receive_disable_files_checkbox": "Schakel uploaden bestanden uit", + "mode_settings_receive_webhook_url_checkbox": "Gebruik notificatie webhook", + "gui_rendezvous_cleanup_quit_early": "Vervroegd afsluiten", + "error_port_not_available": "OnionShare poort is niet beschikbaar", + "history_receive_read_message_button": "Lees bericht", + "gui_chat_url_description": "Iedereen met dit OnionShare adres kanin deze chatkamer aansluiten met de Tor Browser: ", + "mode_settings_title_label": "Handmatige titel", + "gui_status_indicator_chat_working": "Starten…", + "gui_status_indicator_chat_started": "in gesprek", + "gui_status_indicator_chat_scheduled": "Ingepland…", + "gui_color_mode_changed_notice": "Herstart OnionShare om de nieuwe kleur toe te passen.", + "gui_status_indicator_chat_stopped": "Klaar om te chatten" +} diff --git a/desktop/onionshare/resources/locale/pa.json b/desktop/onionshare/resources/locale/pa.json new file mode 100644 index 00000000..766e3a02 --- /dev/null +++ b/desktop/onionshare/resources/locale/pa.json @@ -0,0 +1,179 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "large_filesize": "", + "systray_menu_exit": "ਬਾਹਰ", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/pl.json b/desktop/onionshare/resources/locale/pl.json new file mode 100644 index 00000000..bd725126 --- /dev/null +++ b/desktop/onionshare/resources/locale/pl.json @@ -0,0 +1,309 @@ +{ + "config_onion_service": "Konfiguruję usługę onion na porcie {0:d}.", + "preparing_files": "Kompresuję pliki.", + "give_this_url": "Przekaż ten adres odbiorcy:", + "give_this_url_stealth": "Przekaż ten adres i linijkę HidServAuth odbiorcy:", + "give_this_url_receive": "Przekaż ten adres do nadawcy:", + "give_this_url_receive_stealth": "Przekaż ten adres i linijkę HidServAuth do nadawcy:", + "ctrlc_to_stop": "Przyciśnij kombinację klawiszy Ctrl i C aby zatrzymać serwer", + "not_a_file": "{0:s} nie jest prawidłowym plikiem.", + "not_a_readable_file": "Brak uprawnień do odczytu {0:s}.", + "no_available_port": "Nie można znaleźć dostępnego portu aby włączyć usługę onion", + "other_page_loaded": "Adres został wczytany", + "close_on_autostop_timer": "Upłynął maksymalny czas wysyłania - operacja zatrzymana", + "closing_automatically": "Transfer został zakończony", + "timeout_download_still_running": "Czekam na ukończenie pobierania", + "large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć wiele godzin", + "systray_menu_exit": "Wyjście", + "systray_download_started_title": "Pobieranie OnionShare zostało rozpoczęte", + "systray_download_started_message": "Użytkownik rozpoczął ściąganie Twoich plików", + "systray_download_completed_title": "Pobieranie OnionShare skończone", + "systray_download_completed_message": "Użytkownik ukończył ściąganie Twoich plików", + "systray_download_canceled_title": "Pobieranie OnionShare zostało anulowane", + "systray_download_canceled_message": "Użytkownik anulował pobieranie", + "systray_upload_started_title": "Wysyłanie OnionShare rozpoczęte", + "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_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_verbose": "Zapisz błędy OnionShare do stdout i zapisz błędy sieciowe na dysku", + "help_filename": "Lista plików i folderów do udostępnienia", + "help_config": "Lokalizacja niestandarowego pliku konfiguracyjnego JSON (opcjonalne)", + "gui_drag_and_drop": "Przeciągnij i upuść pliki i foldery, aby je udostępnić", + "gui_add": "Dodaj", + "gui_delete": "Usuń", + "gui_choose_items": "Wybierz", + "gui_share_start_server": "Rozpocznij udostępnianie", + "gui_share_stop_server": "Zatrzymaj udostępnianie", + "gui_share_stop_server_autostop_timer": "Przerwij udostępnianie ({})", + "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_autostop_timer": "Zatrzymaj tryb odbierania (pozostało: {})", + "gui_receive_stop_server_autostop_timer_tooltip": "Czas upływa za {}", + "gui_copy_url": "Kopiuj adres", + "gui_downloads": "Historia pobierania", + "gui_no_downloads": "Nie pobrano jeszcze niczego", + "gui_canceled": "Anulowano", + "gui_copied_url_title": "Skopiowano adres OnionShare", + "gui_copied_url": "Adres OnionShare został skopiowany do schowka", + "gui_please_wait": "Rozpoczynam... Kliknij, aby zatrzymać.", + "gui_download_upload_progress_complete": "%p%, {0:s} upłynęło.", + "gui_download_upload_progress_starting": "{0:s}, %p% (obliczam)", + "gui_download_upload_progress_eta": "{0:s}, pozostało: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Nie tak szybko", + "gui_share_quit_warning": "Jesteś w trakcie wysyłania plików. Jesteś pewien, że chcesz wyjść z OnionShare?", + "gui_receive_quit_warning": "Odbierasz teraz pliki. Jesteś pewien, że chcesz wyjść z OnionShare?", + "gui_quit_warning_quit": "Wyjście", + "gui_quit_warning_dont_quit": "Anuluj", + "zip_progress_bar_format": "Postęp kompresji: %p%", + "error_stealth_not_supported": "Aby skorzystać z autoryzacji klienta wymagana jest wersja programu Tor 0.2.9.1-alpha lub nowsza, bądź Tor Browser w wersji 6.5 lub nowszej oraz python3-stem w wersji 1.5 lub nowszej.", + "error_ephemeral_not_supported": "OnionShare wymaga programu Tor w wersji 0.2.7.1 lub nowszej oraz python3-stem w wersji 1.4.0 lub nowszej.", + "gui_settings_window_title": "Ustawienia", + "gui_settings_whats_this": "Co to jest?", + "gui_settings_stealth_option": "Użyj autoryzacji klienta", + "gui_settings_autoupdate_label": "Sprawdź nową wersję", + "gui_settings_autoupdate_option": "Poinformuj mnie, kiedy nowa wersja programu będzie dostępna", + "gui_settings_autoupdate_timestamp": "Ostatnie sprawdzenie aktualizacji: {}", + "gui_settings_autoupdate_timestamp_never": "Nigdy", + "gui_settings_autoupdate_check_button": "Sprawdź, czy nowa wersja programu jest dostępna", + "gui_settings_general_label": "Ustawienia ogólne", + "gui_settings_sharing_label": "Ustawienia udostępniania", + "gui_settings_close_after_first_download_option": "Zatrzymaj udostępnianie po wysłaniu plików", + "gui_settings_connection_type_label": "W jaki sposób OnionShare powinien połączyć się z siecią Tor?", + "gui_settings_connection_type_bundled_option": "Skorzystaj z wersji Tora wbudowanej w OnionShare", + "gui_settings_connection_type_automatic_option": "Spróbuj skonfigurować automatycznie przy pomocy Tor Browser", + "gui_settings_connection_type_control_port_option": "Połącz za pomocą portu sterowania", + "gui_settings_connection_type_socket_file_option": "Połącz z użyciem pliku socket", + "gui_settings_connection_type_test_button": "Sprawdź połączenie z siecią Tor", + "gui_settings_control_port_label": "Port sterowania", + "gui_settings_socket_file_label": "Plik socket", + "gui_settings_socks_label": "Port SOCKS", + "gui_settings_authenticate_label": "Ustawienia autoryzacji sieci Tor", + "gui_settings_authenticate_no_auth_option": "Bez uwierzytelniania lub uwierzytelnianie za pomocą cookie", + "gui_settings_authenticate_password_option": "Hasło", + "gui_settings_password_label": "Hasło", + "gui_settings_tor_bridges": "Wsparcie mostków sieci Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "Nie korzystaj z mostków sieci Tor", + "gui_settings_tor_bridges_obfs4_radio_option": "Użyj wbudowanych transportów wtykowych obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Użyj wbudowanych transportów plug-in obfs4 (wymaga obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Użyj wbudowanych transportów wtykowych meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Użyj wbudowanych transportów wtykowych meek_lite (Azure) (wymaga obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Uwaga: Mostki meek_lite są bardzo kosztowne dla Tor Project.

Korzystaj z nich tylko wtedy, gdy nie możesz połączyć się bezpośrednio z siecią Tor poprzez obsf4 albo przez inne normalne mostki.", + "gui_settings_tor_bridges_custom_radio_option": "Użyj niestandardowych mostków", + "gui_settings_tor_bridges_custom_label": "Mostki możesz znaleźć na https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Żadne z dodanych przez Ciebie mostków nie działają.\nZweryfikuj je lub dodaj inne.", + "gui_settings_button_save": "Zapisz", + "gui_settings_button_cancel": "Anuluj", + "gui_settings_button_help": "Pomoc", + "gui_settings_autostop_timer_checkbox": "Użyj czasomierza automatycznego zatrzymania", + "gui_settings_autostop_timer": "Zatrzymaj udział w:", + "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 {}:{}.", + "settings_error_socket_file": "Nie można połączyć się z kontrolerem Tor używając pliku socket znajdującym się w ścieżce {}.", + "settings_error_auth": "Połączono z {}:{} ale nie można uwierzytelnić. Być może to nie jest kontroler Tor?", + "settings_error_missing_password": "Połączono z kontrolerem Tor ale wymaga on hasła do uwierzytelnienia.", + "settings_error_unreadable_cookie_file": "Połączono z kontrolerem Tor, ale hasło może być niepoprawne albo Twój użytkownik nie ma uprawnień do odczytania pliku z cookie.", + "settings_error_bundled_tor_not_supported": "Używanie wersji Tora dołączonej do OnionShare nie działa w trybie programisty w systemie Windows i MacOS.", + "settings_error_bundled_tor_timeout": "Połączenie się z siecią Tor zajmuje zbyt dużo czasu. Być może nie jesteś połączony z internetem albo masz niedokładny zegar systemowy?", + "settings_error_bundled_tor_broken": "OnionShare nie mógł połączyć się z siecią Tor:\n{}", + "settings_test_success": "Połączono z kontrolerem Tor.\n\nWersja Tor: {}\nWsparcie ulotnych serwisów onion: {}.\nWsparcie autoryzacji klienta: {}.\nWsparcie adresów .onion nowej generacji: {}.", + "error_tor_protocol_error": "Pojawił się błąd z Tor: {}", + "error_tor_protocol_error_unknown": "Pojawił się nieznany błąd z Tor", + "error_invalid_private_key": "Ten typ klucza prywatnego jest niewspierany", + "connecting_to_tor": "Łączę z siecią Tor", + "update_available": "Nowa wersja programu OnionShare jest dostępna. Kliknij tutaj aby ją ściągnąć.

Korzystasz z wersji {}, a najnowszą jest {}.", + "update_error_check_error": "Nie można sprawdzić czy jest dostępna aktualizacja. Być może nie działa połączenie do sieci Tor albo strona OnionShare?", + "update_error_invalid_latest_version": "Nie można sprawdzić nowej wersji: strona OnionShare twierdzi, że najnowsza wersja jest nierozpoznawalna '{}'…", + "update_not_available": "Korzystasz z najnowszej wersji OnionShare.", + "gui_tor_connection_ask": "Otworzyć ustawienia w celu naprawienia połączenia z Tor?", + "gui_tor_connection_ask_open_settings": "Tak", + "gui_tor_connection_ask_quit": "Wyjście", + "gui_tor_connection_error_settings": "Spróbuj w ustawieniach zmienić sposób, w jaki OnionShare łączy się z siecią Tor.", + "gui_tor_connection_canceled": "Nie można połączyć się z Tor.\n\nSprawdź połączenie z Internetem, następnie ponownie otwórz OnionShare i skonfiguruj połączenie z Tor.", + "gui_tor_connection_lost": "Odłączony od sieci Tor.", + "gui_server_started_after_autostop_timer": "Czas automatycznego zatrzymania upłynął przed uruchomieniem serwera. Utwórz nowy udział.", + "gui_server_autostop_timer_expired": "Czas automatycznego zatrzymania już upłynął. Dostosuj go, aby rozpocząć udostępnianie.", + "share_via_onionshare": "Udostępniaj przez OnionShare", + "gui_save_private_key_checkbox": "Użyj stałego adresu", + "gui_share_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może pobrać Twoje pliki za pomocą przeglądarki Tor Browser: ", + "gui_receive_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może przesyłać pliki na Twój komputer za pomocą przeglądarki Tor Browser: ", + "gui_url_label_persistent": "Ten udział nie zatrzyma się automatycznie.

Każdy kolejny udział ponownie użyje tego adresu. (Aby użyć adresów jednorazowych, wyłącz w ustawieniach „Użyj stałego adresu”.)", + "gui_url_label_stay_open": "Ten udział nie zostanie automatycznie zatrzymany.", + "gui_url_label_onetime": "Ten udział zatrzyma się po pierwszym zakończeniu.", + "gui_url_label_onetime_and_persistent": "Ten udział nie zatrzyma się automatycznie.

Każdy kolejny udział ponownie wykorzysta adres. (Aby użyć adresów jednorazowych, wyłącz w ustawieniach „Użyj stałego adresu”.)", + "gui_status_indicator_share_stopped": "Gotowy do udostępniania", + "gui_status_indicator_share_working": "Rozpoczynanie…", + "gui_status_indicator_share_started": "Udostępnianie", + "gui_status_indicator_receive_stopped": "Gotowy do odbioru", + "gui_status_indicator_receive_working": "Rozpoczynanie…", + "gui_status_indicator_receive_started": "Odbieram", + "gui_file_info": "{} pliki/ów, {}", + "gui_file_info_single": "{} plik, {}", + "history_in_progress_tooltip": "{} w trakcie", + "history_completed_tooltip": "{} zakończone", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "", + "gui_receive_mode_warning": "Tryb odbioru umożliwia przesyłanie plików do komputera.

Niektóre pliki mogą potencjalnie przejąć kontrolę nad komputerem, jeśli je otworzysz. Otwieraj rzeczy tylko od osób, którym ufasz, lub jeśli wiesz, co robisz.", + "receive_mode_upload_starting": "Wysyłanie o całkowitej wielkości {} rozpoczyna się", + "receive_mode_received_file": "", + "gui_mode_share_button": "Udostępnij pliki", + "gui_mode_receive_button": "Odbierz pliki", + "gui_settings_receiving_label": "Ustawienia odbioru", + "gui_settings_downloads_label": "", + "gui_settings_downloads_button": "Przeglądaj", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Tryb publiczny", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Strona załadowana", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "Wyczyść wszystko", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "Nie można otworzyć folderu, ponieważ nautilus nie jest dostępny. Plik jest tutaj:{}", + "gui_settings_language_label": "Preferowany język", + "gui_settings_language_changed_notice": "Uruchom ponownie OnionShare, aby zastosować nowy język.", + "timeout_upload_still_running": "Czekam na ukończenie wysyłania", + "gui_add_files": "Dodaj pliki", + "gui_add_folder": "Dodaj folder", + "gui_stop_server_autostop_timer_tooltip": "Automatyczne zatrzymanie zakończy się za {}", + "gui_waiting_to_start": "Planowane rozpoczęcie za {}. Kliknij, aby anulować.", + "gui_settings_onion_label": "Ustawienia Onion", + "gui_settings_autostart_timer": "Rozpocznij udział w:", + "gui_server_autostart_timer_expired": "Zaplanowany czas już minął. Dostosuj go, aby rozpocząć udostępnianie.", + "gui_status_indicator_share_scheduled": "Zaplanowane…", + "gui_status_indicator_receive_scheduled": "Zaplanowane…", + "error_cannot_create_data_dir": "Nie można utworzyć folderu danych OnionShare: {}", + "gui_settings_data_dir_label": "Zapisz pliki do", + "gui_settings_data_dir_browse_button": "Przeglądaj", + "systray_page_loaded_message": "Załadowano adres OnionShare", + "systray_share_started_title": "Udostępnianie rozpoczęte", + "systray_share_started_message": "Rozpoczynam wysyłanie plików", + "systray_share_completed_title": "Udostępnianie zakończone", + "systray_share_completed_message": "Zakończono wysyłanie plików", + "systray_share_canceled_title": "Udostępnianie anulowane", + "systray_share_canceled_message": "Anulowano odbieranie plików", + "systray_receive_started_title": "Rozpoczęto odbieranie", + "systray_receive_started_message": "Ktoś wysyła Ci pliki", + "gui_all_modes_history": "Historia", + "gui_all_modes_clear_history": "Wyczyść wszystko", + "gui_all_modes_transfer_started": "Uruchomiono {}", + "gui_all_modes_transfer_finished_range": "Przesłano {} - {}", + "gui_all_modes_transfer_finished": "Przesłano {}", + "gui_all_modes_transfer_canceled_range": "Anulowano {} - {}", + "gui_all_modes_transfer_canceled": "Anulowano {}", + "gui_all_modes_progress_complete": "%p%, upłynęło {0:s}.", + "gui_all_modes_progress_starting": "{0:s}, %p% (obliczanie)", + "gui_share_mode_no_files": "Żadne pliki nie zostały jeszcze wysłane", + "gui_share_mode_autostop_timer_waiting": "Oczekiwanie na zakończenie wysyłania", + "gui_receive_mode_no_files": "Nie odebrano jeszcze żadnych plików", + "gui_receive_mode_autostop_timer_waiting": "Czekam na zakończenie odbioru", + "gui_start_server_autostart_timer_tooltip": "Automatyczne rozpoczęcie zakończy się za {}", + "gui_settings_autostart_timer_checkbox": "Użyj czasomierza automatycznego rozpoczęcia", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Czas automatycznego zakończenia powinien być późniejszy niż czas automatycznego rozpoczęcia. Dostosuj go, aby rozpocząć udostępnianie.", + "gui_connect_to_tor_for_onion_settings": "Połącz się z Tor, aby zobaczyć ustawienia usług onion", + "gui_all_modes_progress_eta": "{0:s}, pozostało: {1:s}, %p%", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "incorrect_password": "Niepoprawne hasło", + "gui_settings_csp_header_disabled_option": "Wyłącz nagłówek Polityki Bezpieczeństwa Treści", + "gui_website_mode_no_files": "Żadna strona nie została jeszcze udostępniona", + "gui_website_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może odwiedzić twoją stronę używając przeglądarki Tor Browser: ", + "gui_settings_website_label": "Ustawienia Strony", + "history_requests_tooltip": "{} żądań z sieci", + "gui_mode_website_button": "Opublikuj Stronę", + "gui_settings_individual_downloads_label": "Odznacz, aby umożliwić pobieranie pojedynczych plików.", + "gui_close_tab_warning_title": "Na pewno?", + "gui_tab_name_chat": "Czat", + "gui_tab_name_website": "Strona internetowa", + "gui_tab_name_receive": "Odbierz", + "gui_tab_name_share": "Udostępnij", + "gui_main_page_chat_button": "Rozpocznij czatowanie", + "gui_main_page_website_button": "Rozpocznij hostowanie", + "gui_main_page_receive_button": "Rozpocznij odbieranie", + "gui_main_page_share_button": "Rozpocznij udostępnianie", + "gui_new_tab_chat_button": "Czatuj anonimowo", + "gui_new_tab_website_button": "Hostuj witrynę internetową", + "gui_new_tab_receive_button": "Odbierz pliki", + "gui_new_tab_share_button": "Udostępnij pliki", + "gui_new_tab_tooltip": "Otwórz nową kartę", + "gui_new_tab": "Nowa karta", + "gui_open_folder_error": "Nie udało się otworzyć folderu za pomocą xdg-open. Plik jest tutaj: {}", + "gui_qr_code_description": "Zeskanuj ten kod QR za pomocą czytnika QR, takiego jak aparat w telefonie, aby łatwiej udostępnić komuś adres OnionShare.", + "gui_qr_code_dialog_title": "Kod QR OnionShare", + "gui_show_qr_code": "Pokaż kod QR", + "gui_receive_flatpak_data_dir": "Ponieważ zainstalowałeś OnionShare przy użyciu Flatpak, musisz zapisywać pliki w folderze w ~/OnionShare.", + "gui_chat_stop_server": "Zatrzymaj serwer czatu", + "gui_chat_start_server": "Uruchom serwer czatu", + "gui_file_selection_remove_all": "Usuń wszystko", + "gui_remove": "Usuń", + "error_port_not_available": "Port OnionShare nie jest dostępny", + "gui_rendezvous_cleanup_quit_early": "Zakończ wcześniej", + "gui_rendezvous_cleanup": "Oczekiwanie na zamknięcie obwodów Tor, aby upewnić się, że pliki zostały pomyślnie przeniesione.\n\nMoże to potrwać kilka minut.", + "mode_settings_website_disable_csp_checkbox": "Nie ustawiaj nagłówka Content Security Policy (pozwala Twojej witrynie na korzystanie z zasobów zewnętrznych)", + "mode_settings_receive_data_dir_browse_button": "Przeglądaj", + "mode_settings_receive_data_dir_label": "Zapisz pliki do", + "mode_settings_share_autostop_sharing_checkbox": "Zatrzymaj udostępnianie po wysłaniu plików (odznacz, aby umożliwić pobieranie pojedynczych plików)", + "mode_settings_legacy_checkbox": "Użyj starszego adresu (onion service v2, niezalecane)", + "mode_settings_autostop_timer_checkbox": "Zatrzymaj usługę .onion w zaplanowanym czasie", + "mode_settings_autostart_timer_checkbox": "Uruchom usługę cebulową w zaplanowanym czasie", + "mode_settings_public_checkbox": "To jest publiczny serwis OnionShare (wyłącza klucz prywatny)", + "mode_settings_persistent_checkbox": "Zapisz tę kartę i automatycznie otwieraj ją, gdy uruchamiam OnionShare", + "mode_settings_advanced_toggle_hide": "Ukryj ustawienia zaawansowane", + "mode_settings_advanced_toggle_show": "Pokaż ustawienia zaawansowane", + "gui_quit_warning_cancel": "Anuluj", + "gui_quit_warning_description": "Udostępnianie jest aktywne w niektórych kartach. Jeśli zakończysz pracę, wszystkie karty zostaną zamknięte. Czy na pewno chcesz zrezygnować?", + "gui_quit_warning_title": "Na pewno?", + "gui_close_tab_warning_cancel": "Anuluj", + "gui_close_tab_warning_close": "Zamknij", + "gui_close_tab_warning_website_description": "Prowadzisz aktywny hosting strony internetowej. Czy na pewno chcesz zamknąć tę zakładkę?", + "gui_close_tab_warning_receive_description": "Jesteś w trakcie odbierania plików. Czy na pewno chcesz zamknąć tę zakładkę?", + "gui_close_tab_warning_share_description": "Jesteś w trakcie wysyłania plików. Czy na pewno chcesz zamknąć tę kartę?", + "gui_close_tab_warning_persistent_description": "Ta zakładka jest trwała. Jeśli ją zamkniesz, stracisz adres .onion, którego używa. Czy na pewno chcesz ją zamknąć?", + "gui_color_mode_changed_notice": "Uruchom ponownie OnionShare aby zastosować nowy tryb kolorów.", + "gui_chat_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może dołączyć do tego czatu używając Przeglądarki Tor: ", + "mode_settings_receive_disable_files_checkbox": "Wyłącz wysyłanie plików", + "gui_status_indicator_chat_scheduled": "Zaplanowane…", + "gui_status_indicator_chat_working": "Uruchamianie…", + "history_receive_read_message_button": "Czytaj Wiadomość", + "mode_settings_receive_webhook_url_checkbox": "Użyj powiadomień webhook", + "mode_settings_receive_disable_text_checkbox": "Nie wysyłaj tekstu", + "mode_settings_title_label": "Tytuł", + "gui_settings_theme_dark": "Ciemny", + "gui_settings_theme_light": "Jasny", + "gui_settings_theme_auto": "Automatyczny", + "gui_settings_theme_label": "Motyw", + "gui_status_indicator_chat_started": "Czatuje", + "gui_status_indicator_chat_stopped": "Gotowy do rozmowy", + "gui_client_auth_instructions": "Następnie wyślij klucz prywatny, by umożliwić dostęp do Twojego serwisu OnionShare:", + "gui_url_instructions_public_mode": "Wyślij poniższy adres OnionShare:", + "gui_url_instructions": "Najpierw wyślij poniższy adres OnionShare:", + "gui_chat_url_public_description": "Każdy z tym adresem OnionShare może dołączyć do tego pokoju używając Przeglądarki Tor: ", + "gui_receive_url_public_description": "Każdy z tym adresem OnionShare może przesyłać pliki na Twój komputer za pomocą przeglądarki Tor Browser: ", + "gui_website_url_public_description": "Każdy z tym adresem OnionShare może odwiedzić twoją stronę używając przeglądarki Tor Browser: ", + "gui_share_url_public_description": "Każdy z tym adresem OnionShare może pobrać Twoje pliki za pomocą przeglądarki Tor Browser: ", + "gui_server_doesnt_support_stealth": "Przepraszamy, ta wersja Tora nie obsługuje skrytego uwierzytelniania klienta. Spróbuj z nowszą wersją Tora lub użyj trybu „publicznego”, jeśli nie musi być prywatny.", + "gui_please_wait_no_button": "Rozpoczynam…", + "gui_hide": "Ukryj", + "gui_reveal": "Odsłoń", + "gui_qr_label_auth_string_title": "Klucz Prywatny", + "gui_copy_client_auth": "Skopiuj Klucz Prywatny", + "gui_copied_client_auth_title": "Skopiowany Klucz Prywatny", + "gui_copied_client_auth": "Klucz Prywatny skopiowany do schowka", + "gui_qr_label_url_title": "Adres OnionShare" +} diff --git a/desktop/onionshare/resources/locale/pt_BR.json b/desktop/onionshare/resources/locale/pt_BR.json new file mode 100644 index 00000000..cab895e3 --- /dev/null +++ b/desktop/onionshare/resources/locale/pt_BR.json @@ -0,0 +1,338 @@ +{ + "config_onion_service": "Configurando o serviço onion na porta {0:d}.", + "preparing_files": "Comprimindo arquivos.", + "give_this_url": "Dar este endereço ao destinatário:", + "give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:", + "give_this_url_receive": "Enviar este endereço à pessoa remetente:", + "give_this_url_receive_stealth": "Dar este endereço e HidServAuth à pessoa remetente:", + "ctrlc_to_stop": "Pressione Ctrl+C para interromper o servidor", + "not_a_file": "{0:s} não é um arquivo válido.", + "not_a_readable_file": "{0:s} não é um arquivo legível.", + "no_available_port": "Não foi possível encontrar uma porta disponível para iniciar o serviço onion", + "other_page_loaded": "Endereço carregado", + "close_on_autostop_timer": "Interrompido ao final da contagem do cronômetro automático", + "closing_automatically": "Interrompido devido à conclusão da transferência", + "timeout_download_still_running": "Esperando que o download termine", + "large_filesize": "Aviso: O envio de arquivos grandes pode levar horas", + "systray_menu_exit": "Sair", + "systray_download_started_title": "O download de OnionShare começou", + "systray_download_started_message": "Alguém começou fazer o download dos seus arquivos", + "systray_download_completed_title": "O download de OnionShare terminou", + "systray_download_completed_message": "Essa pessoa terminou de fazer o download dos seus arquivos", + "systray_download_canceled_title": "O download de OnionShare foi cancelado", + "systray_download_canceled_message": "Essa pessoa cancelou o download", + "systray_upload_started_title": "OnionShare começou a carregar", + "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_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_verbose": "Registrar erros do OnionShare no stdout e erros de rede, no disco", + "help_filename": "Lista de arquivos ou pastas a compartilhar", + "help_config": "Personalizar a configuração JSON de localização de arquivos (opcional)", + "gui_drag_and_drop": "Arraste e solte arquivos e pastas para começar a compartilhá-los", + "gui_add": "Adicionar", + "gui_delete": "Apagar", + "gui_choose_items": "Escolher", + "gui_share_start_server": "Começar a compartilhar", + "gui_share_stop_server": "Parar de compartilhar", + "gui_share_stop_server_autostop_timer": "Parar de compartilhar em ({})", + "gui_share_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às", + "gui_receive_start_server": "Iniciar o Modo de Recepção", + "gui_receive_stop_server": "Parar o Modo Recepção", + "gui_receive_stop_server_autostop_timer": "Parar o Modo Recepção ({} para terminar)", + "gui_receive_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às {}", + "gui_copy_url": "Copiar endereço", + "gui_downloads": "Histórico de download", + "gui_no_downloads": "Nenhum download por enquanto", + "gui_canceled": "Cancelado", + "gui_copied_url_title": "O endereço OnionShare foi copiado", + "gui_copied_url": "O endereço OnionShare foi copiado para a área de transferência", + "gui_please_wait": "Começando... Clique para cancelar.", + "gui_download_upload_progress_complete": "%p%, {0:s} decorridos.", + "gui_download_upload_progress_starting": "{0:s}, %p% (calculando)", + "gui_download_upload_progress_eta": "{0:s}, tempo estimado para término: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Mais devagar", + "gui_share_quit_warning": "O envio dos seus arquivos ainda não terminou. Você tem certeza de que quer sair de OnionShare?", + "gui_receive_quit_warning": "O recebimento dos seus arquivos ainda não terminou. Você tem certeza de que quer sair do OnionShare?", + "gui_quit_warning_quit": "Sair", + "gui_quit_warning_dont_quit": "Cancelar", + "zip_progress_bar_format": "Comprimindo: %p%", + "error_stealth_not_supported": "Para usar uma autorização de cliente, você precisa ao menos de Tor 0.2.9.1-alpha (ou Navegador Tor 6.5) e de python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare requer ao menos Tor 0.2.7.1 e python3-stem 1.4.0.", + "gui_settings_window_title": "Configurações", + "gui_settings_whats_this": "O que é isso?", + "gui_settings_stealth_option": "Usar autorização de cliente", + "gui_settings_autoupdate_label": "Procurar por uma nova versão", + "gui_settings_autoupdate_option": "Notificar-me quando uma nova versão estiver disponível", + "gui_settings_autoupdate_timestamp": "Última verificação: {}", + "gui_settings_autoupdate_timestamp_never": "Nunca", + "gui_settings_autoupdate_check_button": "Procurar por uma nova versão", + "gui_settings_general_label": "Configurações gerais", + "gui_settings_sharing_label": "Configurações de compartilhamento", + "gui_settings_close_after_first_download_option": "Parar de compartilhar após o envio dos arquivos", + "gui_settings_connection_type_label": "Como OnionShare normalmente conecta-se a Tor?", + "gui_settings_connection_type_bundled_option": "Usar a versão de Tor já instalada no OnionShare", + "gui_settings_connection_type_automatic_option": "Tentar configuração automática com o Navegador Tor", + "gui_settings_connection_type_control_port_option": "Conectar usando porta de controle", + "gui_settings_connection_type_socket_file_option": "Conectar usando um arquivo socket", + "gui_settings_connection_type_test_button": "Testar a conexão com a rede Tor", + "gui_settings_control_port_label": "Porta de controle", + "gui_settings_socket_file_label": "Arquivo socket", + "gui_settings_socks_label": "Porta SOCKS", + "gui_settings_authenticate_label": "Configurações de autenticação do Tor", + "gui_settings_authenticate_no_auth_option": "Sem autenticação nem cookie de autenticação", + "gui_settings_authenticate_password_option": "Senha", + "gui_settings_password_label": "Senha", + "gui_settings_tor_bridges": "Conectar usando uma ponte Tor?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Não usar pontes", + "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportadores plugáveis obfs4 já instalados", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportadores plugáveis obfs4 já instalados (requer obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportadores plugáveis meek_lite (Azure) já instalados", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportadores plugáveis meek_lite (Azure) já instalados (requer obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito custosas para o Projeto Tor.

Use-as somente se você não conseguir se conectar ao Tor diretamente, via transportadores obfs4 ou outras pontes comuns.", + "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", + "gui_settings_tor_bridges_custom_label": "Você pode obter pontes em https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nenhuma das ponte adicionadas funciona. Tente usá-las de novo ou adicione outras.", + "gui_settings_button_save": "Salvar", + "gui_settings_button_cancel": "Cancelar", + "gui_settings_button_help": "Ajuda", + "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 foi possível conectar ao controlador do Tor às {}:{}.", + "settings_error_socket_file": "Não foi possível conectar ao controlador Tor usando o arquivo de socket {}.", + "settings_error_auth": "Conectado a {}:{}, mas não foi possível autenticar. Talvez este não seja um controlador Tor?", + "settings_error_missing_password": "Conectado ao controlador Tor, mas é preciso ter uma senha para autenticar.", + "settings_error_unreadable_cookie_file": "Conectado ao controlador Tor, mas talvez a senha esteja incorreta ou o seu usuário não possua autorização para ler o arquivo de cookie.", + "settings_error_bundled_tor_not_supported": "Não é possível usar a versão de Tor que vem junto com OnionShare, em modo 'programação', com Windows ou macOS.", + "settings_error_bundled_tor_timeout": "A conexão ao Tor está demorando muito. O seu computado está conectado à Internet e o seu relógio de sistema, ajustado?", + "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}", + "settings_test_success": "Conectado ao controlador Tor.\n\nVersão do Tor: {}\nPossui suporte para serviços onion efêmeros: {}.\nPossui suporte para autenticação de cliente: {}.\nPossui suporte para a próxima geração de endereços .onion: {}.", + "error_tor_protocol_error": "Houve um erro com Tor: {}", + "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com Tor", + "error_invalid_private_key": "Este tipo de chave privada não possui suporte", + "connecting_to_tor": "Conectando à rede Tor", + "update_available": "Atualização de OnionShare disponível. Clique aqui para obtê-la.

Você está usando a versão {} e a última é {}.", + "update_error_check_error": "Não foi possível verificar a nova versão: talvez você não esteja conectado ao Tor ou o site OnionShare esteja inativo?", + "update_error_invalid_latest_version": "Não foi possível verificar a nova versão: o site OnionShare está dizendo que a versão mais recente é a irreconhecível '{}'…", + "update_not_available": "Você está rodando a última versão de OnionShare.", + "gui_tor_connection_ask": "Abrir as configurações para consertar a conexão ao Tor?", + "gui_tor_connection_ask_open_settings": "Sim", + "gui_tor_connection_ask_quit": "Sair", + "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 ao Tor.\n\nTenha certeza que você está conectado à Internet, então abra OnionShare novamente e configure sua conexão ao Tor.", + "gui_tor_connection_lost": "Desconectado do Tor.", + "gui_server_started_after_autostop_timer": "O cronômetro de parada automática acabou antes que o servidor fosse iniciado. Por favor, faça um novo compartilhamento.", + "gui_server_autostop_timer_expired": "O cronômetro já esgotou. Por favor, ajuste-o para começar a compartilhar.", + "share_via_onionshare": "Compartilhar via OnionShare", + "gui_save_private_key_checkbox": "Usar o mesmo endereço", + "gui_share_url_description": "Qualquer pessoa com este endereço e esta chave privada do OnionShare pode baixar seus arquivos usando o Navegador Tor: ", + "gui_receive_url_description": "Qualquer pessoa com este endereço do OnionShare e chave privada pode carregar arquivos no seu computador usando o Navegador Tor: ", + "gui_url_label_persistent": "Este compartilhamento não vai ser encerrado automaticamente.

Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar um endereço novo a cada vez, desative a opção \"Usar o mesmo endereço\" nas configurações.)", + "gui_url_label_stay_open": "Este compartilhamento não será encerrado automaticamente.", + "gui_url_label_onetime": "Este compartilhamento será encerrado após completar uma vez.", + "gui_url_label_onetime_and_persistent": "Este compartilhamento não será encerrado automaticamente.

Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar endereços únicos a cada compartilhamento, desative a opção \"Usar o mesmo endereço\" nas configurações.)", + "gui_status_indicator_share_stopped": "Pronto para compartilhar", + "gui_status_indicator_share_working": "Começando…", + "gui_status_indicator_share_started": "Compartilhando", + "gui_status_indicator_receive_stopped": "Pronto para receber", + "gui_status_indicator_receive_working": "Começando…", + "gui_status_indicator_receive_started": "Recebendo", + "gui_file_info": "{} arquivos, {}", + "gui_file_info_single": "{} arquivo, {}", + "history_in_progress_tooltip": "{} em curso", + "history_completed_tooltip": "{} completado", + "info_in_progress_uploads_tooltip": "{} upload(s) em progresso", + "info_completed_uploads_tooltip": "{} upload(s) completado(s)", + "error_cannot_create_downloads_dir": "Não foi possível a pasta do modo de recepção: {}", + "receive_mode_downloads_dir": "Os arquivos enviados para você aparecem na seguinte pasta: {}", + "receive_mode_warning": "Atenção: O modo de recepção permite que as pessoas enviem arquivos para o seu computador. Alguns arquivos podem tomar o controle do seu computador se você abri-los. Apenas abra arquivos enviados por pessoas que você confia, ou se você souber o que está fazendo.", + "gui_receive_mode_warning": "O modo de recepção permite que pessoas enviem arquivos para o seu computador.

Alguns arquivos podem tomar o controle do seu computador se você abri-los. Apenas abra arquivos enviados por pessoas em quem você confia, ou se souber o que está fazendo.", + "receive_mode_upload_starting": "Um upload de tamanho total {} está sendo iniciado", + "receive_mode_received_file": "Recebido: {}", + "gui_mode_share_button": "Compartilhar Arquivos", + "gui_mode_receive_button": "Receber Arquivos", + "gui_settings_receiving_label": "Configurações de recepção", + "gui_settings_downloads_label": "Armazenar arquivos em", + "gui_settings_downloads_button": "Navegar", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Modo público", + "systray_close_server_title": "Servidor OnionShare encerrado", + "systray_close_server_message": "Um usuário encerrou o servidor", + "systray_page_loaded_title": "A página carregou", + "systray_download_page_loaded_message": "Um usuário carregou a página de download", + "systray_upload_page_loaded_message": "Um usuário carregou a página de upload", + "gui_uploads": "Histórico de Uploads", + "gui_no_uploads": "Nenhum upload realizado", + "gui_clear_history": "Limpar Tudo", + "gui_upload_in_progress": "Upload Iniciado {}", + "gui_upload_finished_range": "Upload de {} feito para {}", + "gui_upload_finished": "Upload realizado de {}", + "gui_download_in_progress": "Download Iniciado {}", + "gui_open_folder_error_nautilus": "Não foi possível abrir a pasta porque o nautilus não está disponível. O arquivo está aqui: {}", + "gui_settings_language_label": "Língua", + "gui_settings_language_changed_notice": "Reinicie OnionShare para que o novo idioma seja aplicado.", + "timeout_upload_still_running": "Esperando o término do upload", + "gui_add_files": "Adicionar Arquivos", + "gui_add_folder": "Adicionar Pasta", + "gui_share_mode_no_files": "Nenhum arquivo ainda enviado", + "gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion", + "error_cannot_create_data_dir": "Pasta de dados OnionShare não foi criada: {}", + "receive_mode_data_dir": "Os arquivos que lhe foram enviados estão nesta pasta: {}", + "gui_settings_data_dir_label": "Salvar arquivos em", + "gui_settings_data_dir_browse_button": "Navegar", + "systray_share_started_title": "O compartilhamento iniciou", + "systray_share_started_message": "Iniciando o envio de arquivos", + "systray_share_completed_title": "O compartilhamento completou-se", + "systray_share_completed_message": "O envio de arquivos terminou", + "systray_share_canceled_title": "O compartilhamento foi anulado", + "systray_share_canceled_message": "Alguém cancelou o recebimento dos seus arquivos", + "systray_receive_started_title": "O recebimento iniciou", + "systray_receive_started_message": "Alguém está lhe enviando arquivos", + "gui_all_modes_history": "Histórico", + "gui_all_modes_clear_history": "Apagar Tudo", + "gui_all_modes_transfer_started": "Iniciou {}", + "gui_all_modes_transfer_finished_range": "Transferido {} - {}", + "gui_all_modes_transfer_finished": "Transferido {}", + "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", + "gui_all_modes_transfer_canceled": "Cancelado {}", + "gui_share_mode_autostop_timer_waiting": "Esperando para completar o envio", + "gui_receive_mode_no_files": "Nenhum arquivo recebido", + "gui_receive_mode_autostop_timer_waiting": "Esperando para completar o recebimento", + "gui_settings_onion_label": "Configurações do Onion", + "systray_page_loaded_message": "O endereço OnionShare carregou", + "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%", + "gui_stop_server_autostop_timer_tooltip": "O relógio de interrupção automática encerra às {}", + "gui_start_server_autostart_timer_tooltip": "O cronômetro de iniciação automática acaba às {}", + "gui_waiting_to_start": "Marcado para começar daqui a {}. Clique para cancelar.", + "gui_settings_autostart_timer_checkbox": "Usar cronômetro para começar automaticamente", + "gui_settings_autostart_timer": "Começar o compartilhamento às:", + "gui_server_autostart_timer_expired": "O horário marcado já passou. Por favor, atualize-o para começar a compartilhar.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O horário para o término automático não pode ser o mesmo ou anterior aquele marcado para começar. Por favor, ajuste-o para começar a compartilhar.", + "gui_status_indicator_share_scheduled": "Marcado…", + "gui_status_indicator_receive_scheduled": "Marcado…", + "days_first_letter": "dia(s)", + "hours_first_letter": "hora(s)", + "minutes_first_letter": "minuto(s)", + "seconds_first_letter": "segundo(s)", + "incorrect_password": "Senha incorreta", + "gui_settings_individual_downloads_label": "Desmarque para permitir download de arquivos individuais", + "gui_settings_csp_header_disabled_option": "Desabilitar cabeçalho Política de Segurança de Conteúdo", + "gui_website_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode visitar seu site usando o Navegador Tor: ", + "gui_mode_website_button": "Publicar Website", + "gui_website_mode_no_files": "Nenhum website compartilhado ainda", + "history_requests_tooltip": "{} solicitações da web", + "gui_settings_website_label": "Configurações do Website", + "mode_settings_website_disable_csp_checkbox": "Não envie o cabeçalho padrão da Política de Segurança de Conteúdo (permite que seu website utilize recursos de terceiros)", + "mode_settings_receive_data_dir_browse_button": "Navegar", + "mode_settings_receive_data_dir_label": "Salvar arquivos em", + "mode_settings_share_autostop_sharing_checkbox": "Interrompa o compartilhamento após o envio dos arquivos (desmarque para permitir o download de arquivos individuais)", + "mode_settings_legacy_checkbox": "Usar um endereço herdado (serviço de onion v2, não recomendado)", + "mode_settings_autostop_timer_checkbox": "Interromper o serviço de onion na hora programada", + "mode_settings_autostart_timer_checkbox": "Iniciar serviço de onion na hora programada", + "mode_settings_public_checkbox": "Este é um serviço público OnionShare (desativa a chave privada)", + "mode_settings_persistent_checkbox": "Salvar essa guia e abra-a automaticamente quando eu abrir o OnionShare", + "mode_settings_advanced_toggle_hide": "Ocultar configurações avançadas", + "mode_settings_advanced_toggle_show": "Mostrar configurações avançadas", + "gui_quit_warning_cancel": "Cancelar", + "gui_quit_warning_description": "O compartilhamento está ativo em algumas de suas guias. Se você sair, todas as suas guias serão fechadas. Você tem certeza que quer sair?", + "gui_quit_warning_title": "Você tem certeza?", + "gui_close_tab_warning_cancel": "Cancelar", + "gui_close_tab_warning_close": "Fechar", + "gui_close_tab_warning_website_description": "Você está hospedando ativamente um site. Tem certeza de que deseja fechar esta guia?", + "gui_close_tab_warning_receive_description": "Você está recebendo arquivos. Tem certeza de que deseja fechar esta guia?", + "gui_close_tab_warning_share_description": "Você está enviando arquivos. Tem certeza de que deseja fechar esta guia?", + "gui_close_tab_warning_persistent_description": "Essa guia é persistente. Se você fechá-lo, perderá o endereço de onion que está usando. Tem certeza de que deseja fechá-lo?", + "gui_close_tab_warning_title": "Você tem certeza?", + "gui_new_tab_website_description": "Hospede um site estático de onion HTML a partir do seu computador.", + "gui_new_tab_website_button": "Publicar site", + "gui_new_tab_receive_description": "Transforme seu computador em uma caixa de depósito online. As pessoas poderão usar o Navegador Tor para enviar arquivos para o seu computador.", + "gui_new_tab_receive_button": "Receber arquivos", + "gui_new_tab_share_description": "Escolha os arquivos no seu computador para enviar para outra pessoa. A pessoa ou pessoas para quem você deseja enviar os arquivos precisarão usar o Navegador Tor para fazer o download deles.", + "gui_new_tab_share_button": "Compartilhar arquivos", + "gui_new_tab_tooltip": "Abrir uma nova aba", + "gui_new_tab": "Nova aba", + "gui_tab_name_website": "Site", + "gui_tab_name_receive": "Receber", + "gui_tab_name_share": "Compartilhar", + "gui_main_page_chat_button": "Iniciar a conversar", + "gui_main_page_website_button": "Iniciar a hospedar", + "gui_main_page_receive_button": "Iniciar a receber", + "gui_main_page_share_button": "Iniciar compartilhamento", + "gui_new_tab_chat_button": "Converse anonimamente", + "gui_open_folder_error": "Falha ao abrir a pasta com xdg-open. O arquivo está aqui: {}", + "gui_qr_code_description": "Leia este código QR com um leitor, como a câmera do seu celular, para compartilhar mais facilmente o endereço OnionShare com alguém.", + "gui_qr_code_dialog_title": "Código QR OnionShare", + "gui_show_qr_code": "Mostrar QR Code", + "gui_receive_flatpak_data_dir": "Como você instalou o OnionShare usando o Flatpak, você deve salvar os arquivos em uma pasta em ~ / OnionShare.", + "gui_chat_stop_server": "Parar o servidor de conversas", + "gui_chat_start_server": "Iniciar um servidor de conversas", + "gui_file_selection_remove_all": "Remover tudo", + "gui_remove": "Remover", + "gui_tab_name_chat": "Bate-papo", + "error_port_not_available": "Porta OnionShare não disponível", + "gui_chat_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode entrar nesta sala de bate-papo usando o Navegador Tor: ", + "gui_rendezvous_cleanup_quit_early": "Fechar facilmente", + "gui_rendezvous_cleanup": "Aguardando o fechamento dos circuitos do Tor para ter certeza de que seus arquivos foram transferidos com sucesso.\n\nIsso pode demorar alguns minutos.", + "gui_color_mode_changed_notice": "Reinicie o OnionShare para que o novo modo de cor seja aplicado.", + "history_receive_read_message_button": "Ler mensagem", + "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificação", + "mode_settings_receive_disable_files_checkbox": "Desativar o carregamento de arquivos", + "mode_settings_receive_disable_text_checkbox": "Desativar envio de texto", + "mode_settings_title_label": "Título personalizado", + "gui_status_indicator_chat_started": "Conversando", + "gui_status_indicator_chat_scheduled": "Programando…", + "gui_status_indicator_chat_working": "Começando…", + "gui_status_indicator_chat_stopped": "Pronto para conversar", + "gui_share_url_public_description": "Qualquer pessoa com este endereço OnionShare pode baixar seus arquivos usando o Navegador Tor: ", + "gui_server_doesnt_support_stealth": "Desculpe, esta versão de Tor não suporta (Autenticação de Cliente) furtiva. Por favor, tente uma versão mais recente de Tor ou utilize o modo 'público' se não houver a necessidade de privacidade.", + "gui_please_wait_no_button": "Iniciando…", + "gui_hide": "Ocultar", + "gui_reveal": "Mostrar", + "gui_qr_label_auth_string_title": "Chave Privada", + "gui_qr_label_url_title": "Endereço OnionShare", + "gui_copied_client_auth": "Chave Privada copiada para a área de transferência", + "gui_copied_client_auth_title": "Chave Privada Copiada", + "gui_copy_client_auth": "Copiar Chave Privada", + "gui_settings_theme_auto": "Automático", + "gui_settings_theme_dark": "Escuro", + "gui_settings_theme_light": "Claro", + "gui_settings_theme_label": "Tema", + "gui_client_auth_instructions": "Em seguida, envie a chave privada para permitir o acesso ao seu serviço OnionShare:", + "gui_url_instructions_public_mode": "Envie o endereço OnionShare abaixo:", + "gui_url_instructions": "Primeiro, envie o endereço OnionShare abaixo:", + "gui_chat_url_public_description": "Qualquer pessoa com este endereço OnionShare pode entrar nesta sala de bate-papo usando o Navegador Tor: ", + "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode carregar arquivos para o seu computador usando o Navegador Tor: ", + "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Navegador Tor: ", + "gui_dragdrop_sandbox_flatpak": "Para tornar a ferramenta Flatpak sandbox mais segura, a função de arrastar e largar não é suportada. Em vez disso, use os botões Adicionar Arquivos e Adicionar Pasta para procurar por arquivos.", + "gui_tor_settings_window_title": "Configurações do Tor", + "gui_settings_controller_extras_label": "Configurações do Tor", + "gui_settings_tor_bridges_label": "Pontes ajudam a acessar a Rede Tor em locais onde o Tor está bloqueado. Dependendo de onde você estiver, uma ponte pode funcionar melhor que outra.", + "gui_settings_bridge_use_checkbox": "Usar uma ponte", + "gui_settings_bridge_radio_builtin": "Selecione uma ponte embutida", + "gui_settings_bridge_none_radio_option": "Não usar uma ponte", + "gui_settings_bridge_moat_radio_option": "Solicite uma ponte no torproject.org", + "gui_settings_bridge_moat_button": "Solicitar uma nova ponte", + "gui_settings_bridge_custom_radio_option": "Fornece uma ponte que você teve acesso de uma fonte confiável", + "gui_settings_bridge_custom_placeholder": "digite adress:port (um por linha)", + "gui_settings_moat_bridges_invalid": "Você ainda não solicitou uma ponte do torproject.org.", + "gui_settings_stop_active_tabs_label": "Há serviços funcionando em algumas de suas abas.\nVocê deve parar todos os serviços para alterar suas configurações Tor.", + "gui_settings_version_label": "Você está usando o OnionShare {}", + "gui_settings_help_label": "Precisa de ajuda? Veja docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Enviar um cabeçalho personalizado da Política de Segurança de Conteúdo", + "moat_contact_label": "Contactando BridgeDB...", + "moat_captcha_label": "Resolva o CAPTCHA para solicitar uma ponte.", + "moat_captcha_placeholder": "Digite os caracteres que aparecem na imagem", + "moat_captcha_submit": "Enviar", + "moat_captcha_reload": "Recarregar", + "moat_bridgedb_error": "Erro ao contactar BridgeDB.", + "moat_captcha_error": "A solução não está correta. Por favor tente novamente.", + "moat_solution_empty_error": "Você deve informar os caracteres que aparecem na imagem", + "mode_tor_not_connected_label": "OnionShare não está conectado com a rede Tor" +} diff --git a/desktop/onionshare/resources/locale/pt_PT.json b/desktop/onionshare/resources/locale/pt_PT.json new file mode 100644 index 00000000..b7e63075 --- /dev/null +++ b/desktop/onionshare/resources/locale/pt_PT.json @@ -0,0 +1,319 @@ +{ + "config_onion_service": "A configurar o serviço onion na porta {0:d}.", + "preparing_files": "A comprimir os ficheiros.", + "give_this_url": "Dar este endereço ao destinatário:", + "give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:", + "give_this_url_receive": "Dar este endereço ao remetente:", + "give_this_url_receive_stealth": "Dar este endereço e HidServAuth ao remetente:", + "ctrlc_to_stop": "Pressionar Ctrl-C para parar o servidor", + "not_a_file": "{0:s} não é um ficheiro válido.", + "not_a_readable_file": "{0:s} não é um ficheiro legível.", + "no_available_port": "Não foi possível encontrar uma porta disponível para iniciar o serviço onion", + "other_page_loaded": "Endereço carregado", + "close_on_autostop_timer": "Parado porque o cronómetro de paragem automática expirou", + "closing_automatically": "Parado porque a transferência está concluída", + "timeout_download_still_running": "", + "large_filesize": "Aviso: o envio de ficheiros grandes pode levar várias horas", + "systray_menu_exit": "Sair", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "Não usar o Tor (apenas para programadores)", + "help_stay_open": "Continuar a partilhar após o envio dos ficheiros", + "help_autostop_timer": "Parar de partilhar após um número determinado de segundos", + "help_stealth": "Usar autorização de cliente (avançado)", + "help_receive": "Receber partilhas em vez de de enviá-las", + "help_debug": "Registar erros do OnionShare no stdout e erros de rede no disco", + "help_filename": "Lista de ficheiros ou pastas a partilhar", + "help_config": "Localização personalizada do ficheiro de configuração JSON (opcional)", + "gui_drag_and_drop": "Arrastar e largar ficheiros e pastas para começar a partilhar", + "gui_add": "Adicionar", + "gui_delete": "Eliminar", + "gui_choose_items": "Escolher", + "gui_share_start_server": "Começar a partilhar", + "gui_share_stop_server": "Parar de partilhar", + "gui_share_stop_server_autostop_timer": "Parar de partilhar ({})", + "gui_share_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}", + "gui_receive_start_server": "Iniciar modo de receber", + "gui_receive_stop_server": "Parar modo de receber", + "gui_receive_stop_server_autostop_timer": "Parar modo de receber ({} restantes)", + "gui_receive_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}", + "gui_copy_url": "Copiar endereço", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Cancelado", + "gui_copied_url_title": "Endereço OnionShare copiado", + "gui_copied_url": "O endereço OnionShare foi copiado para área de transferência", + "gui_please_wait": "A iniciar… Clique para cancelar.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Mais devagar", + "gui_share_quit_warning": "O envio dos seus ficheiros ainda não terminou. Tem a certeza que deseja sair do OnionShare?", + "gui_receive_quit_warning": "Ainda não recebeu todos os seus ficheiros. Tem a certeza que que deseja sair do OnionShare?", + "gui_quit_warning_quit": "Sair", + "gui_quit_warning_dont_quit": "Cancelar", + "zip_progress_bar_format": "A comprimir: %p%", + "error_stealth_not_supported": "Para utilizar uma autorização de cliente, precisa pelo menos do Tor 0.2.9.1-alpha (ou do Tor Browser 6.5) e do python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare requer pelo menos do Tor 0.2.7.1 e do python3-stem 1.4.0.", + "gui_settings_window_title": "Configurações", + "gui_settings_whats_this": "O que é isto?", + "gui_settings_stealth_option": "Utilizar autorização de cliente", + "gui_settings_autoupdate_label": "Procurar por nova versão", + "gui_settings_autoupdate_option": "Notificar-me quando estiver disponível uma nova versão", + "gui_settings_autoupdate_timestamp": "Última verificação: {}", + "gui_settings_autoupdate_timestamp_never": "Nunca", + "gui_settings_autoupdate_check_button": "Procurar por nova versão", + "gui_settings_general_label": "Configurações gerais", + "gui_settings_sharing_label": "Configurações de partilha", + "gui_settings_close_after_first_download_option": "Parar partilha depois de terminar o envio dos ficheiros", + "gui_settings_connection_type_label": "Como é que o OnionShare deve conectar-se à rede Tor?", + "gui_settings_connection_type_bundled_option": "Utilizar a versão do Tor integrada no OnionShare", + "gui_settings_connection_type_automatic_option": "Tentar configurar automaticamente com o Tor Browser", + "gui_settings_connection_type_control_port_option": "Ligar utilizando a porta de controlo", + "gui_settings_connection_type_socket_file_option": "Ligar utilizando um ficheiro socket", + "gui_settings_connection_type_test_button": "Testar a Ligação ao Tor", + "gui_settings_control_port_label": "Porta de controlo", + "gui_settings_socket_file_label": "Ficheiro socket", + "gui_settings_socks_label": "Porta SOCKS", + "gui_settings_authenticate_label": "Definições de autenticação do Tor", + "gui_settings_authenticate_no_auth_option": "Sem autenticação, ou autenticação por cookie", + "gui_settings_authenticate_password_option": "Palavra-passe", + "gui_settings_password_label": "Palavra-passe", + "gui_settings_tor_bridges": "Ligar com Ponte Tor?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Não utilizar pontes", + "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transportes ligáveis obfs4 integrados", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis obfs4 integrados (requer obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizar transportes ligáveis meek_lite (Azure) integrados", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis meek_lite (Azure) integrados (requer obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito dispendiosas para o Projeto Tor.

Utilize-as apenas se não conseguir ligar diretamente ao Tor, via transportes obfs4, ou outras pontes normais.", + "gui_settings_tor_bridges_custom_radio_option": "Utilizar pontes personalizadas", + "gui_settings_tor_bridges_custom_label": "Pode obter pontes em https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nenhuma das pontes que adicionou funciona.\nVerifique se estão corretas ou adicione outras.", + "gui_settings_button_save": "Guardar", + "gui_settings_button_cancel": "Cancelar", + "gui_settings_button_help": "Ajuda", + "gui_settings_autostop_timer_checkbox": "Utilizar cronómetro de paragem automática", + "gui_settings_autostop_timer": "Parar a partilha em:", + "settings_error_unknown": "Não é possível ligar ao controlador Tor porque as suas definições não fazem sentido.", + "settings_error_automatic": "Não foi possível ligar ao controlador Tor. O Tor Browser (disponível em torproject.org) está a ser executado em segundo plano?", + "settings_error_socket_port": "Não é possível ligar ao controlador Tor em {}:{}.", + "settings_error_socket_file": "Não é possível ligar ao controlador Tor utilizando o ficheiro socket {}.", + "settings_error_auth": "Ligado a {}:{}, mas não é possível autenticar. Talvez não seja um controlador Tor?", + "settings_error_missing_password": "Ligado ao controlador Tor, mas este requer uma palavra-passe para autenticar.", + "settings_error_unreadable_cookie_file": "Ligado ao controlador Tor, mas a palavra-passe pode estar incorreta, ou o seu utilizador não tem autorização para ler o ficheiro do cookie.", + "settings_error_bundled_tor_not_supported": "Utilizar a versão do Tor que vem com o OnionShare não funciona no modo de 'programação' no Windows ou macOS.", + "settings_error_bundled_tor_timeout": "A ligação ao Tor está a demorar muito. Talvez não esteja ligado à Internet, ou o relógio do sistema está incorreto?", + "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}", + "settings_test_success": "Ligado ao controlador Tor.\n\nVersão do Tor: {}\nSuporta serviços onion efémeros: {}.\nSuporta autenticação de cliente: {}.\nSuporta próxima geração de endereços .onion: {}.", + "error_tor_protocol_error": "Ocorreu um erro com o Tor: {}", + "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com o Tor", + "error_invalid_private_key": "Este tipo de chave privada não é suportada", + "connecting_to_tor": "A ligar à rede Tor", + "update_available": "Disponível nova versão do OnionShare. Clique aqui para obtê-la.

Está a utilizar a versão {}, e a versão mais recente é a {}.", + "update_error_check_error": "Não foi possível procurar por nova versão: Talvez não esteja ligado ao Tor, ou o ''site'' da Web OnionShare está em baixo?", + "update_error_invalid_latest_version": "Não foi possível procurar por nova versão: o ''site'' da Web OnionShare está a dizer que a última versão não é reconhecida '{}'…", + "update_not_available": "Está a utilizar a versão mais recente do OnionShare.", + "gui_tor_connection_ask": "Abrir as definições para corrigir a ligação ao Tor?", + "gui_tor_connection_ask_open_settings": "Sim", + "gui_tor_connection_ask_quit": "Sair", + "gui_tor_connection_error_settings": "Tente alterar nas definições o modo como o OnionShare liga à rede Tor.", + "gui_tor_connection_canceled": "Não foi possível ligar à rede Tor.\n\nCertifique-se se está ligado à Internet, depois reabra o OnionShare e configure a sua ligação ao Tor.", + "gui_tor_connection_lost": "Desconectado da rede Tor.", + "gui_server_started_after_autostop_timer": "O cronómetro de paragem automática atingiu o tempo limite antes do servidor iniciar. Crie uma nova partilha.", + "gui_server_autostop_timer_expired": "O cronómetro de paragem automática expirou. Por favor, ajuste-o para começar a partilhar.", + "share_via_onionshare": "Partilhar via OnionShare", + "gui_save_private_key_checkbox": "Usar um endereço persistente", + "gui_share_url_description": "Qualquer pessoa com este endereço do OnionShare pode descarregar os seus ficheiros utilizando o Tor Browser: ", + "gui_receive_url_description": "Qualquer pessoa com este endereço do OnionShare pode enviar ficheiros para o seu computador utilizando o Tor Browser: ", + "gui_url_label_persistent": "Esta partilha não vai ser encerrada automaticamente.

Todas as partilhas posteriores utilizarão este endereço. (Para usar endereços de uma só utilização, desative a opção \"Usar endereço persistente\" nas configurações.)", + "gui_url_label_stay_open": "Esta partilha não irá parar automaticamente.", + "gui_url_label_onetime": "Esta partilha irá parar após ser descarregada uma vez com sucesso.", + "gui_url_label_onetime_and_persistent": "Esta partilha não vai ser encerrada automaticamente.

Todas as partilhas posteriores utilizarão este endereço. (Para usar endereços de uma só utilização, desative a opção \"Usar endereço persistente\" nas configurações.)", + "gui_status_indicator_share_stopped": "Pronto para partilhar", + "gui_status_indicator_share_working": "A começar…", + "gui_status_indicator_share_started": "A partilhar", + "gui_status_indicator_receive_stopped": "Pronto para receber", + "gui_status_indicator_receive_working": "A começar…", + "gui_status_indicator_receive_started": "A receber", + "gui_file_info": "{} ficheiros, {}", + "gui_file_info_single": "{} ficheiro, {}", + "history_in_progress_tooltip": "{} a decorrer", + "history_completed_tooltip": "{} completo", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "Atenção: o modo de receção permite que as pessoas enviem ficheiros para o seu computador. Alguns ficheiros podem tomar o controlo do seu computador se os abrir. Apenas abra ficheiros enviados por pessoas que confia ou se souber o que está a fazer.", + "gui_receive_mode_warning": "O modo de receção permite que as pessoas enviem ficheiros para o seu computador.

Alguns ficheiros podem potencialmente tomar o controlo do seu computador se os abrir. Abra apenas ficheiros enviados por pessoas que confia ou se souber o que está a fazer.", + "receive_mode_upload_starting": "A iniciar o envio com um tamanho total de {}", + "receive_mode_received_file": "Recebido: {}", + "gui_mode_share_button": "Partilhar Ficheiros", + "gui_mode_receive_button": "Receber Ficheiros", + "gui_settings_receiving_label": "Definições de \"receber\"", + "gui_settings_downloads_label": "", + "gui_settings_downloads_button": "Navegar", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Modo público", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Página Carregada", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "Não é possível abrir a pasta porque o Nautilus não está disponível. O ficheiro está em: {}", + "gui_settings_language_label": "Idioma preferido", + "gui_settings_language_changed_notice": "Reiniciar o OnionShare para o novo idioma seja aplicado.", + "gui_add_files": "Adicionar ficheiros", + "gui_add_folder": "Adicionar pasta", + "gui_settings_onion_label": "Definições do onion", + "gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion", + "error_cannot_create_data_dir": "Não foi possível criar a pasta de dados do OnionShare: {}", + "receive_mode_data_dir": "Os ficheiros enviados para si aparecem nesta pasta: {}", + "gui_settings_data_dir_label": "Guardar ficheiros em", + "gui_settings_data_dir_browse_button": "Explorar", + "systray_page_loaded_message": "Endereço do OnionShare carregado", + "systray_share_started_title": "Partilha Iniciada", + "systray_share_started_message": "A iniciar o envio dos ficheiros para alguém", + "systray_share_completed_title": "Partilha Concluída", + "systray_share_completed_message": "O envio dos ficheiros terminou", + "systray_share_canceled_title": "Partilha Cancelada", + "systray_share_canceled_message": "Alguém cancelou a receção dos seus ficheiros", + "systray_receive_started_title": "Receção Iniciada", + "systray_receive_started_message": "Alguém está a enviar-lhe ficheiros", + "gui_all_modes_history": "Histórico", + "gui_all_modes_clear_history": "Limpar Tudo", + "gui_all_modes_transfer_started": "Iniciado em {}", + "gui_all_modes_transfer_finished_range": "Transferido {} - {}", + "gui_all_modes_transfer_finished": "Transferido {}", + "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", + "gui_all_modes_transfer_canceled": "Cancelado {}", + "gui_all_modes_progress_complete": "%p%, {0:s} decorrido.", + "gui_all_modes_progress_starting": "{0:s}, %p% (a calcular)", + "gui_all_modes_progress_eta": "{0:s}, tempo restante estimado: {1:s}, %p%", + "gui_share_mode_no_files": "Ainda não foram enviados ficheiros", + "gui_share_mode_timeout_waiting": "A esperar que termine o envio", + "gui_receive_mode_no_files": "Ainda não foram recebidos ficheiros", + "gui_receive_mode_timeout_waiting": "A esperar que termine a receção", + "gui_stop_server_autostop_timer_tooltip": "O cronómetro de paragem automática termina em {}", + "gui_start_server_autostart_timer_tooltip": "O cronómetro de início automático começa em {}", + "gui_waiting_to_start": "Agendado para iniciar em {}. Clique para cancelar.", + "gui_settings_autostart_timer_checkbox": "Usar cronómetro de início automático", + "gui_settings_autostart_timer": "Iniciar a partilha em:", + "gui_server_autostart_timer_expired": "O tempo agendado já passou. Por favor, ajuste-o para começar a partilhar.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O tempo de paragem automática não pode ser o mesmo que o tempo do início automático. Por favor, ajuste-o para começar a partilhar.", + "gui_status_indicator_share_scheduled": "Agendado…", + "gui_status_indicator_receive_scheduled": "Agendado…", + "gui_share_mode_autostop_timer_waiting": "A aguardar que o envio termine", + "gui_receive_mode_autostop_timer_waiting": "A aguardar que o recebimento termine", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "incorrect_password": "Palavra-passe incorreta", + "gui_settings_individual_downloads_label": "Desmarque para permitir a transferência de ficheiros individuais", + "gui_settings_csp_header_disabled_option": "Desativar cabeçalho da Política de Segurança de Conteúdo", + "mode_settings_autostop_timer_checkbox": "Parar serviço Onion na hora agendada", + "mode_settings_autostart_timer_checkbox": "Iniciar serviço Onion na hora agendada", + "mode_settings_public_checkbox": "Não utilizar uma palavra-passe", + "mode_settings_advanced_toggle_hide": "Ocultar definições avançadas", + "mode_settings_advanced_toggle_show": "Mostrar definições avançadas", + "gui_quit_warning_cancel": "Cancelar", + "gui_quit_warning_title": "Tem a certeza?", + "gui_close_tab_warning_cancel": "Cancelar", + "gui_close_tab_warning_close": "Fechar", + "gui_close_tab_warning_title": "Tem a certeza?", + "gui_new_tab_website_button": "Publicar Site da Web", + "gui_new_tab_receive_button": "Receber Ficheiros", + "gui_new_tab_share_button": "Partilhar Ficheiros", + "gui_new_tab_tooltip": "Abrir um novo separador", + "gui_new_tab": "Novo Separador", + "gui_website_mode_no_files": "Ainda Sem Site da Web Partilhado", + "gui_settings_website_label": "Definições do ''site'' da Web", + "gui_mode_website_button": "Publicar Site da Web", + "history_requests_tooltip": "{} pedidos da Web", + "gui_website_url_description": "Qualquer pessoa com um endereço do OnionShare pode visitar o seu site utilizando o Tor Browser: ", + "mode_settings_website_disable_csp_checkbox": "Não envie cabeçalho de Política de Segurança de Conteúdo (permite que o seu sítio electrónico utilize recursos de terceiros)", + "mode_settings_receive_data_dir_browse_button": "Navegar", + "mode_settings_receive_data_dir_label": "Guardar ficheiros para", + "mode_settings_share_autostop_sharing_checkbox": "Parar a partilha de ficheiros após terem sido enviados (desmarque para permitir o descarregamento de ficheiros individuais)", + "mode_settings_legacy_checkbox": "Utilize um endereço de herança (serviço onion v2, não é recomendado)", + "mode_settings_persistent_checkbox": "Guarda esta aba e abre-a automaticamente quando eu inicio o OnionShare", + "gui_quit_warning_description": "A partilha está ativa em algumas das suas abas. Se sair, todas as abas serão fechadas. Tem a certeza que pretende sair?", + "gui_close_tab_warning_website_description": "Está no processo ativo de hospedar um sítio eletrónico. Tem a certeza que pretende fechar esta aba?", + "gui_close_tab_warning_receive_description": "Está no processo de receber ficheiros. Tem a certeza que pretende fechar esta aba?", + "gui_close_tab_warning_share_description": "Está no processo de enviar ficheiros. Tem a certeza que pretende fechar esta aba?", + "gui_close_tab_warning_persistent_description": "Esta aba é persistente. Se a fechar vai perder o endereço onion que está a ser usado. Tem a certeza que pretende fechar?", + "gui_tab_name_chat": "Conversa", + "gui_tab_name_website": "Sítio Electrónico", + "gui_tab_name_receive": "Recebe", + "gui_tab_name_share": "Partilha", + "gui_main_page_chat_button": "Começa a Conversar", + "gui_main_page_website_button": "Começa a Hospedar", + "gui_main_page_receive_button": "Começa a Receber", + "gui_main_page_share_button": "Começa a Partilhar", + "gui_new_tab_chat_button": "Converse Anónimamente", + "gui_open_folder_error": "Falhou a abrir a pasta com xdc-open. O ficheiro está aqui: {}", + "gui_qr_code_dialog_title": "Código QR OnionShare", + "gui_show_qr_code": "Mostrar código QR", + "gui_receive_flatpak_data_dir": "Como instalou o OnionShare utilizando Flatpak, deve guardar os ficheiros na pasta ~/OnionShare.", + "gui_chat_stop_server": "Para servidor de conversa", + "gui_chat_start_server": "Começar servidor de conversa", + "gui_file_selection_remove_all": "Remover todos", + "gui_remove": "Remover", + "gui_please_wait_no_button": "A iniciar…", + "gui_hide": "Ocultar", + "gui_reveal": "Revelar", + "gui_qr_label_auth_string_title": "Chave privada", + "gui_qr_label_url_title": "Endereço OnionShare", + "gui_copied_client_auth": "Chave privada copiada para a área de transferência", + "gui_copied_client_auth_title": "Chave privada copiada", + "gui_copy_client_auth": "Copiar chave privada", + "history_receive_read_message_button": "Ler mensagem", + "error_port_not_available": "Porta OnionShare não disponível", + "gui_rendezvous_cleanup_quit_early": "Sair mais cedo", + "gui_rendezvous_cleanup": "A aguardar o fecho dos circuitos do Tor para ter certeza que os seus ficheiros foram transferidos com sucesso.\n\nIsto pode demorar alguns minutos.", + "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificação", + "mode_settings_receive_disable_files_checkbox": "Desativar o envio de ficheiros", + "mode_settings_receive_disable_text_checkbox": "Desativar envio de texto", + "mode_settings_title_label": "Título personalizado", + "gui_color_mode_changed_notice": "Reinicie o OnionShare para que o novo tema seja aplicado.", + "gui_settings_theme_dark": "Escuro", + "gui_settings_theme_light": "Claro", + "gui_settings_theme_auto": "Automático", + "gui_settings_theme_label": "Tema", + "gui_status_indicator_chat_started": "A conversar", + "gui_status_indicator_chat_scheduled": "Agendado…", + "gui_status_indicator_chat_working": "A iniciar…", + "gui_status_indicator_chat_stopped": "Pronto para conversar", + "gui_client_auth_instructions": "Em seguida, envie a chave privada para permitir o acesso ao seu serviço OnionShare:", + "gui_url_instructions_public_mode": "Envie o seguinte endereço OnionShare:", + "gui_url_instructions": "Primeiro, envie o seguinte endereço OnionShare:", + "gui_chat_url_public_description": "Qualquer pessoa com este endereço OnionShare pode entrar nesta sala de conversa usando o Tor Browser: ", + "gui_chat_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode entrar nesta sala de conversa usando o Tor Browser: ", + "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode enviar ficheiros para o seu computador usando o Tor Browser: ", + "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Tor Browser: ", + "gui_share_url_public_description": "Qualquer pessoa com este endereço OnionShare pode descarregar os seus ficheiros usando o Tor Browser: ", + "gui_server_doesnt_support_stealth": "Desculpe, esta versão do Tor não suporta ocultação (stealth - autenticação do cliente). Por favor, tente uma versão mais recente do Tor ou utilize o modo 'público' se não houver a necessidade de privacidade.", + "gui_dragdrop_sandbox_flatpak": "Para tornar a \"caixa de areia\" mais segura não é possível utilizar a funcionalidade de arrastar e largar, em alternativa procure os ficheiros utilizando os botões de Adicionar Ficheiro e Adicionar Diretório.", + "gui_tor_settings_window_title": "Definições do Tor", + "gui_settings_controller_extras_label": "Definições do Tor", + "gui_settings_bridge_use_checkbox": "Utilizar uma ponte", + "gui_settings_bridge_radio_builtin": "Selecionar uma ponte embutida", + "gui_settings_bridge_none_radio_option": "Não utilizar uma ponte", + "gui_settings_bridge_moat_radio_option": "Pedir uma ponte a torproject.org", + "gui_settings_bridge_moat_button": "Pedir uma Ponte Nova", + "gui_settings_tor_bridges_label": "As pontes ajudam no acesso a rede Tor em localizações onde esta está bloqueada, algumas pontes podem funcionar melhor do que outras dependendo da localização." +} diff --git a/desktop/onionshare/resources/locale/ro.json b/desktop/onionshare/resources/locale/ro.json new file mode 100644 index 00000000..35dcedbf --- /dev/null +++ b/desktop/onionshare/resources/locale/ro.json @@ -0,0 +1,230 @@ +{ + "config_onion_service": "", + "preparing_files": "Comprimare fișiere.", + "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": "Fișierul {0:s} nu poate fi citit.", + "no_available_port": "Nu s-a putut găsi un port liber pentru a porni serviciul onion", + "other_page_loaded": "Adresă încărcată", + "close_on_autostop_timer": "Oprit deoarece s-a oprit cronometrul automat", + "closing_automatically": "Oprit pentru că transferul s-a încheiat cu succes", + "timeout_download_still_running": "", + "large_filesize": "Avertisment: Transferul unui volum mare de date poate dura ore", + "systray_menu_exit": "Închidere", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "Tragere și plasare fișiere și directoare\npentru a începe partajarea", + "gui_add": "Adaugă", + "gui_delete": "Şterge", + "gui_choose_items": "Alegeți", + "gui_share_start_server": "Începe partajarea", + "gui_share_stop_server": "Oprește partajarea", + "gui_share_stop_server_autostop_timer": "Oprire partajare ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "Începeți modul de primire", + "gui_receive_stop_server": "Opriți modul de primire", + "gui_receive_stop_server_autostop_timer": "Opriți modul de primire (au rămas {})", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "Copiere adresă", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Anulat", + "gui_copied_url_title": "Adresă OnionShare copiată", + "gui_copied_url": "Adresa OnionShare a fost copiată în memoria clipboard", + "gui_please_wait": "Începem ... Faceți clic pentru a anula.", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "version_string": "", + "gui_quit_title": "Nu atât de repede", + "gui_share_quit_warning": "Sunteți în proces de trimitere fișiere. Sigur vreți să închideți OnionShare?", + "gui_receive_quit_warning": "Sunteți în proces de primire fișiere. Sigur vreți să închideți OnionShare?", + "gui_quit_warning_quit": "Închidere", + "gui_quit_warning_dont_quit": "Anulare", + "zip_progress_bar_format": "Compresare: %p%", + "error_stealth_not_supported": "Pentru a folosi autorizarea clientului, aveți nevoie de versiunile minim Tor 0.2.9.1-alfa (sau Tor Browser 6.5) cât și de python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare are nevoie de minim versiunea Tor 0.2.7.1 cât și de Python3-stem 1.4.0.", + "gui_settings_window_title": "Setari", + "gui_settings_whats_this": "Ce este asta?", + "gui_settings_stealth_option": "Utilizați autorizarea clientului", + "gui_settings_autoupdate_label": "Verificați dacă există o versiune nouă", + "gui_settings_autoupdate_option": "Anunțați-mă când este disponibilă o nouă versiune", + "gui_settings_autoupdate_timestamp": "Ultima verificare: {}", + "gui_settings_autoupdate_timestamp_never": "Niciodata", + "gui_settings_autoupdate_check_button": "Verificați versiunea nouă", + "gui_settings_general_label": "Setări generale", + "gui_settings_sharing_label": "Setări de partajare", + "gui_settings_close_after_first_download_option": "Opriți partajarea după ce fișierele au fost trimise", + "gui_settings_connection_type_label": "Cum ar trebui să se conecteze OnionShare la Tor?", + "gui_settings_connection_type_bundled_option": "Utilizați versiunea Tor încorporată în OnionShare", + "gui_settings_connection_type_automatic_option": "Încercați configurarea automată cu Tor Browser", + "gui_settings_connection_type_control_port_option": "Conectați-vă cu portul de control", + "gui_settings_connection_type_socket_file_option": "Conectați-vă cu fișierul socket", + "gui_settings_connection_type_test_button": "Testează conexiunea la Tor", + "gui_settings_control_port_label": "Port de control", + "gui_settings_socket_file_label": "Fișier socket", + "gui_settings_socks_label": "Port SOCKS", + "gui_settings_authenticate_label": "Setări de autentificare Tor", + "gui_settings_authenticate_no_auth_option": "Fără autentificare sau autentificare cookie", + "gui_settings_authenticate_password_option": "Parolă", + "gui_settings_password_label": "Parolă", + "gui_settings_tor_bridges": "Suport pentru Tor", + "gui_settings_tor_bridges_no_bridges_radio_option": "Nu folosiți poduri", + "gui_settings_tor_bridges_obfs4_radio_option": "Folosiți transporturi conectabile obfs4 integrate", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Folosiți transporturi conectabile obfs4 conectate (necesită obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizați transporturi conectabile meek_lite (Azure) încorporate", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Folosiți transporturi conectabile meek_lite (Azure) încorporate (necesită obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Avertisment: podurile meek_lite sunt foarte costisitoare pentru rularea Proiectului Tor.

Utilizați-le numai dacă nuvă puteți conecta direct la Tor, prin transporturi obfs4 sau alte poduri normale.", + "gui_settings_tor_bridges_custom_radio_option": "Folosiți poduri personalizate", + "gui_settings_tor_bridges_custom_label": "Puteți obține poduri de la https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Niciunul din podurile adăugate nu funcționează.\nVerificați-le încă o dată sau adăugați altele.", + "gui_settings_button_save": "Salvare", + "gui_settings_button_cancel": "Anulare", + "gui_settings_button_help": "Ajutor", + "gui_settings_autostop_timer_checkbox": "Folosiți cronometrul auto-stop", + "gui_settings_autostop_timer": "Opriți partajarea la:", + "settings_error_unknown": "Nu se poate face conectarea la controlerul Tor, deoarece setările dvs. nu au sens.", + "settings_error_automatic": "Nu s-a putut face conectarea la controlerul Tor. Tor Browser (disponibil de la torproject.org) rulează în fundal?", + "settings_error_socket_port": "Nu se poate face conectarea la controlerul Tor la {}:{}.", + "settings_error_socket_file": "Nu se poate face conectarea la controlerul Tor folosind fișierul socket {}.", + "settings_error_auth": "Conectat la {}:{}, dar nu se poate face autentificarea. Poate că nu este un controler Tor?", + "settings_error_missing_password": "Conectat la controlerul Tor, dar este nevoie de o parolă pentru autentificare.", + "settings_error_unreadable_cookie_file": "Conectat la controlerul Tor, dar parola poate fi greșită sau utilizatorului nu i se permite să citească fișierul cookie.", + "settings_error_bundled_tor_not_supported": "Utilizarea versiunii Tor care vine cu OnionShare nu funcționează în modul dezvoltator pe Windows sau macOS.", + "settings_error_bundled_tor_timeout": "Durează prea mult timp pentru a vă conecta la Tor. Poate nu sunteți conectat la Internet sau aveți un ceas al sistemului setat inexact?", + "settings_error_bundled_tor_broken": "OnionShare nu se poate conecta la Tor în fundal:\n{}", + "settings_test_success": "Conectat la controlerul Tor.\n\nVersiunea Tor: {}\nSuportă servicii efemere onion: {}.\nSuportă autentificarea clientului: {}.\nSuportă adrese next-gen .onion: {}.", + "error_tor_protocol_error": "A apărut o eroare cu Tor: {}", + "error_tor_protocol_error_unknown": "A apărut o eroare necunoscută cu Tor", + "error_invalid_private_key": "", + "connecting_to_tor": "Conectarea la rețeaua Tor", + "update_available": "Noua versiune OnionShare. Clic aici pentru a o obține.

Folosiți versiunea {} și ultima versiune este {}.", + "update_error_check_error": "Nu s-a putut verifica dacă există o versiune nouă: site-ul OnionShare spune că ultima versiune nu poate fi recunoscută '{}'…", + "update_error_invalid_latest_version": "Nu s-a putut verifica dacă există o versiune nouă: Poate nu sunteți conectat la Tor, sau site-ul OnionShare este închis?", + "update_not_available": "Rulează ultima versiune OnionShare.", + "gui_tor_connection_ask": "Deschideți setările pentru a sorta conexiunea la Tor?", + "gui_tor_connection_ask_open_settings": "Da", + "gui_tor_connection_ask_quit": "Închidere", + "gui_tor_connection_error_settings": "Încercați să schimbați în setări modul în care OnionShare se conectează la rețeaua Tor.", + "gui_tor_connection_canceled": "Nu se poate realiza conexiunea la Tor.\n\nVerificați dacă sunteți conectat la Internet, apoi redeschideți OnionShare și setați conexiunea la Tor.", + "gui_tor_connection_lost": "Deconectat de la Tor.", + "gui_server_started_after_autostop_timer": "Cronometrul de oprire automată a expirat înainte de pornirea serverului. Vă rugăm să faceți o nouă partajare.", + "gui_server_autostop_timer_expired": "Timpul pentru cronometrul auto-stop a expirat deja. Vă rugăm să îl modificați pentru a începe distribuirea.", + "share_via_onionshare": "Partajați prin OnionShare", + "gui_save_private_key_checkbox": "Folosiți o adresă persistentă", + "gui_share_url_description": "Oricine are această adresă OnionShare poate descărca fișierele dvs. folosind Tor Browser: ", + "gui_receive_url_description": "Oricine are această adresă OnionShare poate încărca fișiere pe computerul dvs. folosind Tor Browser: ", + "gui_url_label_persistent": "Această partajare nu se va opri automat.

Fiecare acțiune ulterioară reutilizează adresa. (Pentru a utiliza adrese unice, dezactivați „Utilizați adresa persistentă” din setări.)", + "gui_url_label_stay_open": "Această partajare nu se va opri automat.", + "gui_url_label_onetime": "Această partajare se va opri după prima finalizare.", + "gui_url_label_onetime_and_persistent": "Această partajare nu se va opri automat.

Fiecare acțiune ulterioară va reutiliza adresa. (Pentru a utiliza adrese unice, dezactivați „Utilizați adresa persistentă” din setări.)", + "gui_status_indicator_share_stopped": "Pregătit pentru partajare", + "gui_status_indicator_share_working": "Pornire…", + "gui_status_indicator_share_started": "Partajare", + "gui_status_indicator_receive_stopped": "Pregătit pentru primire", + "gui_status_indicator_receive_working": "Pornire…", + "gui_status_indicator_receive_started": "Primire", + "gui_file_info": "{} fișiere, {}", + "gui_file_info_single": "{} fișier, {}", + "history_in_progress_tooltip": "{} în progres", + "history_completed_tooltip": "{} complet", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_dir": "", + "receive_mode_warning": "", + "gui_receive_mode_warning": "Modul de recepție permite utilizatorilor să încarce fișiere pe computerul dvs.


Unele fișiere pot prelua controlul computerului dacă le deschideți. Deschideți doar fișierele de la persoanele de încredere sau dacă știți ce faceți. ", + "receive_mode_upload_starting": "Începe încărcarea din dimensiunea totală {}", + "receive_mode_received_file": "", + "gui_mode_share_button": "Partajare fișiere", + "gui_mode_receive_button": "Primire fișiere", + "gui_settings_receiving_label": "Setări de primire", + "gui_settings_downloads_label": "", + "gui_settings_downloads_button": "Răsfoiește", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "Mod public", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "Pagină încărcată", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "Nu se poate deschide folderul deoarece nautilus nu este disponibil. Fișierul este aici: {}", + "gui_settings_language_label": "Limba preferată", + "gui_settings_language_changed_notice": "Reporniți OnionShare pentru a aplica noul limbaj.", + "gui_add_files": "Adaugă fișiere", + "gui_add_folder": "Adaugă director", + "gui_connect_to_tor_for_onion_settings": "Conectați-vă la Tor pentru a vedea setările serviciului onion", + "error_cannot_create_data_dir": "Nu s-a putut crea folderul de date OnionShare: {}", + "gui_settings_data_dir_label": "Salvare fișiere în", + "gui_settings_data_dir_browse_button": "Navigare", + "systray_page_loaded_message": "Adresa OnionShare a fost încărcată", + "systray_share_started_title": "Partajarea a început", + "systray_share_started_message": "Începeți să trimiteți cuiva fișiere", + "systray_share_completed_title": "Partajare completă", + "systray_share_completed_message": "Am terminat trimiterea fișierelor", + "systray_share_canceled_title": "Partajarea a fost anulată", + "systray_share_canceled_message": "Cineva a anulat primirea fișierelor", + "systray_receive_started_title": "A început primirea", + "systray_receive_started_message": "Cineva vă trimite fișiere", + "gui_all_modes_history": "Istoric", + "gui_all_modes_clear_history": "Ștergere toate", + "gui_all_modes_transfer_started": "Pornit {}", + "gui_all_modes_transfer_finished_range": "Transferat {} - {}", + "gui_all_modes_transfer_finished": "Transferat {}", + "gui_all_modes_progress_complete": "au trecut %p%, {0:s}.", + "gui_all_modes_progress_starting": "{0:s}, %p% (se calculează)", + "gui_all_modes_progress_eta": "{0:s}, Timp estimat: {1:s}, %p%", + "gui_share_mode_no_files": "Niciun fișier trimis încă", + "gui_receive_mode_no_files": "Încă nu au fost primite fișiere", + "gui_all_modes_transfer_canceled_range": "Anulat {} - {}", + "gui_all_modes_transfer_canceled": "Anulat {}", + "gui_settings_onion_label": "Setări Onion", + "gui_stop_server_autostop_timer_tooltip": "Cronometrul de oprire automată se oprește la {}", + "gui_start_server_autostart_timer_tooltip": "Cronometrul de pornire automată se oprește la {}", + "gui_waiting_to_start": "Programat pentru a începe în {}. Click pentru a anula.", + "gui_settings_autostart_timer_checkbox": "Folosiți cronometrul de pornire automată", + "gui_settings_autostart_timer": "Porniți partajarea la:", + "gui_server_autostart_timer_expired": "Ora programată a trecut deja. Vă rugăm să o reajustați pentru a începe distribuirea.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Ora de oprire automată nu poate fi aceeași sau mai devreme decât ora de pornire automată. Vă rugăm să o ajustați pentru a începe distribuirea.", + "gui_status_indicator_share_scheduled": "Programat …", + "gui_status_indicator_receive_scheduled": "Programat …", + "gui_share_mode_autostop_timer_waiting": "Se așteaptă să se termine trimiterea", + "gui_receive_mode_autostop_timer_waiting": "Se așteaptă să se termine primirea", + "days_first_letter": "zi", + "hours_first_letter": "ore", + "minutes_first_letter": "min", + "seconds_first_letter": "s", + "gui_website_url_description": "Oricine are această adresă OnionShare poate vizita website-ul dvs. folosind Tor Browser: ", + "gui_mode_website_button": "Publicare site web", + "gui_website_mode_no_files": "Niciun site nu a fost partajat încă", + "incorrect_password": "Parolă incorectă", + "gui_settings_individual_downloads_label": "Debifează pentru a permite descărcarea fișierelor individuale", + "history_requests_tooltip": "{} solicitări web", + "gui_settings_csp_header_disabled_option": "Dezactivează antetul Politicii de securitate a conținutului", + "gui_settings_website_label": "Setări pentru website" +} diff --git a/desktop/onionshare/resources/locale/ru.json b/desktop/onionshare/resources/locale/ru.json new file mode 100644 index 00000000..2636323f --- /dev/null +++ b/desktop/onionshare/resources/locale/ru.json @@ -0,0 +1,334 @@ +{ + "give_this_url": "Передайте получателю этот адрес:", + "ctrlc_to_stop": "Нажмите Ctrl+C, чтобы остановить сервер", + "not_a_file": "{0:s} недопустимый файл.", + "gui_copied_url": "Ссылка OnionShare скопирована в буфер обмена", + "other_page_loaded": "Адрес загружен", + "gui_copy_url": "Копировать адрес", + "systray_menu_exit": "Выйти", + "gui_add": "Добавить", + "gui_delete": "Удалить", + "gui_choose_items": "Выбрать", + "gui_canceled": "Отменено", + "gui_quit_warning_quit": "Выход", + "gui_quit_warning_dont_quit": "Отмена", + "gui_settings_window_title": "Настройки", + "gui_settings_autoupdate_timestamp_never": "Никогда", + "gui_settings_general_label": "Общие настройки", + "gui_settings_control_port_label": "Контрольный порт", + "gui_settings_authenticate_password_option": "Пароль", + "gui_settings_password_label": "Пароль", + "gui_settings_button_save": "Сохранить", + "gui_settings_button_cancel": "Отмена", + "gui_settings_button_help": "Помощь", + "gui_tor_connection_ask_open_settings": "Да", + "gui_tor_connection_ask_quit": "Выйти", + "gui_status_indicator_share_started": "Идёт отправка", + "gui_status_indicator_receive_started": "Идёт получение", + "gui_settings_downloads_label": "Путь сохранения файлов: ", + "gui_settings_downloads_button": "Выбрать", + "gui_clear_history": "Очистить Все", + "gui_settings_language_label": "Язык интерфейса", + "config_onion_service": "Назначем \"луковому\" сервису порт {:d}.", + "preparing_files": "Сжимаем файлы.", + "give_this_url_stealth": "Передайте этот адрес и строку HidServAuth получателю:", + "give_this_url_receive": "Передайте этот адрес отправителю:", + "give_this_url_receive_stealth": "Передайте этот адрес и строку HidServAuth отправителю:", + "not_a_readable_file": "{0:s} не является читаемым файлом.", + "no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса", + "close_on_autostop_timer": "Время ожидания таймера истекло, сервис остановлен", + "closing_automatically": "Загрузка завершена, сервис остановлен", + "timeout_download_still_running": "Ожидаем завершения скачивания", + "timeout_upload_still_running": "Ожидаем завершения загрузки", + "large_filesize": "Внимание: Отправка данных большого объёма может занять продолжительное время (несколько часов)", + "systray_download_started_title": "OnionShare: скачивание началось", + "systray_download_started_message": "Пользователь начал загружать Ваши файлы", + "systray_download_completed_title": "OnionShare: скачивание завершено", + "systray_download_completed_message": "Пользователь завершил скачивание Ваших файлов", + "systray_download_canceled_title": "OnionShare: скачивание отменено", + "systray_download_canceled_message": "Пользователь отменил скачивание", + "systray_upload_started_title": "OnionShare: загрузка началась", + "systray_upload_started_message": "Пользователь начал загрузку файлов на Ваш компьютер", + "help_local_only": "Не использовать Tor (только для разработки)", + "help_stay_open": "Продолжить отправку после первого скачивания", + "help_autostop_timer": "Остановить отправку после заданного количества секунд", + "help_stealth": "Использовать авторизацию клиента (дополнительно)", + "help_receive": "Получать загрузки вместо их отправки", + "help_verbose": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск", + "help_filename": "Список файлов или папок для отправки", + "help_config": "Расположение пользовательского конфигурационного JSON-файла (необязательно)", + "gui_drag_and_drop": "Перетащите сюда файлы и/или папки, которые хотите отправить", + "gui_share_start_server": "Сделать доступным для скачивания", + "gui_share_stop_server": "Отменить доступ к скачиванию", + "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_autostop_timer": "Выключить Режим Получения (осталось {})", + "gui_receive_stop_server_autostop_timer_tooltip": "Время таймера истекает в {}", + "gui_downloads": "История скачиваний", + "gui_no_downloads": "Скачиваний пока нет ", + "gui_copied_url_title": "Адрес OnionShare скопирован", + "gui_please_wait": "Запуск... Для отмены нажмите здесь.", + "gui_download_upload_progress_complete": "%p%, прошло {0:s}.", + "gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Не так быстро", + "gui_share_quit_warning": "Идёт процесс отправки файлов. Уверены, что хотите завершить работу OnionShare?", + "gui_receive_quit_warning": "Идёт процесс получения файлов. Уверены, что хотите завершить работу 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_whats_this": "Что это?", + "gui_settings_stealth_option": "Использовать авторизацию клиента", + "gui_settings_autoupdate_label": "Проверить наличие новой версии", + "gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия", + "gui_settings_autoupdate_timestamp": "Последняя проверка: {}", + "gui_settings_autoupdate_check_button": "Проверить наличие новой версии", + "gui_settings_sharing_label": "Настройки отправки", + "gui_settings_close_after_first_download_option": "Завершить отправку Ваших файлов\nпосле их первого скачивания", + "gui_settings_connection_type_label": "Как OnionShare следует подключаться к сети Tor?", + "gui_settings_connection_type_bundled_option": "Использовать версию Tor, встроенную в OnionShare", + "gui_settings_connection_type_automatic_option": "Автоматическая настройка при помощи Tor Browser", + "gui_settings_connection_type_control_port_option": "Использовать контрольный порт", + "gui_settings_connection_type_socket_file_option": "Использовать файл сокет", + "gui_settings_connection_type_test_button": "Проверить подключение к сети Tor", + "gui_settings_socket_file_label": "Файл сокет", + "gui_settings_socks_label": "Порт SOCKS", + "gui_settings_authenticate_label": "Настройки аутентификации Tor", + "gui_settings_authenticate_no_auth_option": "Без аутентификации или cookie-аутентификации", + "gui_settings_tor_bridges": "Использовать \"мост\" Tor?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Не использовать \"мосты\"", + "gui_settings_tor_bridges_obfs4_radio_option": "Использовать встроенные подключаемые транспорты obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Использовать встроенные подключаемые транспорты obfs4 (необходим obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Использовать встроенные транспорты meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные транспорты meek_lite (Azure) (необходим obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_azure очень затратно для Tor Project.

Используйте их только если не можете подключиться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".", + "gui_settings_tor_bridges_custom_radio_option": "Использовать пользовательские \"мосты\"", + "gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь: https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работает. Проверьте их снова или добавьте другие.", + "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 в {}:{}.", + "settings_error_socket_file": "Ошибка подключения к контроллеру Tor с использованием файла-сокета {}.", + "settings_error_auth": "Подключено к {}:{}, ошибка проверки подлинности. Возможно, это не контроллер Tor?", + "settings_error_missing_password": "Подключено к контроллеру Tor, но для аутентификации нужен пароль.", + "settings_error_unreadable_cookie_file": "Подключено к контроллеру Tor, но возможна ошибка пароля, или пользователю запрещено чтение файла cookie.", + "settings_error_bundled_tor_not_supported": "Версия Tor, которая поставляется вместе с OnionShare, не подходит для разработчика в Windows и macOS.", + "settings_error_bundled_tor_timeout": "Подключение к Tor занимает слишком много времени. Возможно, отсутствует подключение к сети Интернет, или у вас неточно настроено системное время?", + "settings_error_bundled_tor_broken": "Ошибка подключения OnionShare к Tor в фоновом режиме:\n{}", + "settings_test_success": "Подключено к контроллеру Tor.\n\nВерсия Tor: {}\nПоддержка временных \"луковых\" сервисов: {}.\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": "Ошибка проверки наличия новой версии: сайт OnionShare сообщает что новейшая версия не распознана - '{}'…", + "update_not_available": "Вы используете наиболее свежую версию OnionShare.", + "gui_tor_connection_ask": "Перейти в раздел \"Настройки\" для решения проблем с подключением к Tor?", + "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_autostop_timer": "Время стоп-таймера истекло до того, как сервер был запущен. Пожалуйста, отправьте файлы заново.", + "gui_server_autostop_timer_expired": "Время стоп-таймера истекло. Пожалуйста, отрегулируйте его для начала отправки.", + "share_via_onionshare": "Поделиться через OnionShare", + "gui_save_private_key_checkbox": "Используйте постоянный адрес", + "gui_share_url_description": "Кто угодно c этим адресом OnionShare и секретным ключом может скачать Ваши файлы при помощи Tor Browser: ", + "gui_receive_url_description": "Кто угодно c этим адресом OnionShare и секретным ключом может загрузить файлы на ваш компьютер с помощьюTor Browser: ", + "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_receive_stopped": "Данные готовы к получению", + "gui_status_indicator_receive_working": "Ожидайте…", + "gui_file_info": "{} файлы, {}", + "gui_file_info_single": "{} файл, {}", + "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": "Внимание: режим получения позволяет другим людям загружать файлы на ваш компьютер. Некоторые файлы могут представлять угрозу для вашего компьютера. Открывайте файлы от тех людей, которым вы доверяете, или если вы точно знаете, что делаете.", + "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_public_mode_checkbox": "Публичный режим", + "systray_close_server_title": "Сервер OnionShare отключен", + "systray_close_server_message": "Пользователь отключил сервер", + "systray_page_loaded_title": "Страница загружена", + "systray_download_page_loaded_message": "Пользователь находится на странице скачивания", + "systray_upload_page_loaded_message": "Пользователь посетил странцу загрузки", + "gui_uploads": "История загрузок", + "gui_no_uploads": "Загрузок пока нет", + "gui_upload_in_progress": "Загрузка началась {}", + "gui_upload_finished_range": "Загружено {} в {}", + "gui_upload_finished": "Загружено {}", + "gui_download_in_progress": "Загрузка началась {}", + "gui_open_folder_error_nautilus": "Не удаётся открыть папку без файлового менеджера Nautilus. Файл находится здесь: {}", + "gui_settings_language_changed_notice": "Перезапустите OnionShare, чтобы изменения языковых настроек вступили в силу.", + "gui_add_files": "Добавить файлы", + "gui_add_folder": "Добавить папку", + "error_cannot_create_data_dir": "Не удалось создать папку данных OnionShare: {}", + "gui_settings_onion_label": "Настройки \"лукового\" сервиса", + "gui_connect_to_tor_for_onion_settings": "Подключитесь к Tor, чтобы видеть настройки \"лукового\" сервиса", + "receive_mode_data_dir": "Отправленные Вам файлы можно найти в этой папке: {}", + "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_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": "%p%, {0:s.} прошло.", + "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_autostop_timer_waiting": "Ожидается завершение отправки", + "gui_receive_mode_no_files": "Пока нет полученных файлов", + "gui_receive_mode_autostop_timer_waiting": "Ожидается завершение загрузки", + "gui_stop_server_autostop_timer_tooltip": "Время окончания стоп-таймера: {}", + "gui_start_server_autostart_timer_tooltip": "Время окончания старт-таймера: {}", + "gui_waiting_to_start": "Начиная через {}. Нажмите, чтобы отменить.", + "gui_settings_autostart_timer_checkbox": "Использовать таймер запуска", + "gui_settings_autostart_timer": "Начать отправку:", + "gui_server_autostart_timer_expired": "Запланированное время уже прошло. Пожалуйста, отрегулируйте его для начала отправки.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Время окончания не может быть раньше времени начала. Пожалуйста, отрегулируйте его для начала отправки.", + "gui_status_indicator_share_scheduled": "По расписанию…", + "gui_status_indicator_receive_scheduled": "По расписанию…", + "days_first_letter": "д", + "hours_first_letter": "ч", + "minutes_first_letter": "м", + "seconds_first_letter": "с", + "gui_website_url_description": "Любой у кого есть этот адрес OnionShare и секретный ключ может посетить ваш сайт при помощи Tor Browser: ", + "gui_mode_website_button": "Опубликовать Веб-сайт", + "gui_website_mode_no_files": "Нет опубликованных Веб-сайтов", + "incorrect_password": "Неверный пароль", + "gui_settings_individual_downloads_label": "Снимите флажок чтобы разрешить скачивание отдельных файлов", + "history_requests_tooltip": "{} веб запросы", + "gui_settings_csp_header_disabled_option": "Отключить проверку Политики Безопасности Содержимого", + "gui_settings_website_label": "Настройки Веб-сайта", + "gui_main_page_share_button": "Сделать доступным для скачивания", + "gui_close_tab_warning_title": "Вы уверены?", + "mode_settings_website_disable_csp_checkbox": "Не посылать стандартный заголовок Content Security Policy (разрешить вашему веб-сайту использовать сторонние ресурсы)", + "mode_settings_receive_data_dir_browse_button": "Обзор файлов", + "mode_settings_receive_data_dir_label": "Сохранять файлы в", + "mode_settings_share_autostop_sharing_checkbox": "Закрыть доступ к файлам после их отправки (отмените чтобы разрешить скачивание отдельных файлов)", + "mode_settings_legacy_checkbox": "Использовать устаревшую версию адресов (версия 2 сервиса Тор, не рукомендуем)", + "mode_settings_autostop_timer_checkbox": "Отключить сервис onion в назначенное время", + "mode_settings_autostart_timer_checkbox": "Запустить сервис onion в назначенное время", + "mode_settings_public_checkbox": "Это публичная версия сервиса OnionShare (секретный ключ не используется)", + "mode_settings_persistent_checkbox": "Сохранить эту вкладку, и открывать ее автоматически при открытии OnionShare", + "mode_settings_advanced_toggle_hide": "Спрятать дополнительные настройки", + "mode_settings_advanced_toggle_show": "Показать дополнительные настройки", + "gui_quit_warning_cancel": "Отменить", + "gui_quit_warning_description": "Раздача файлов все еще активна в некоторых вкладках. Если выйдете сейчас, все ваши вкладки закроются. Вы уверены что хотите выйти?", + "gui_quit_warning_title": "Вы уверены?", + "gui_close_tab_warning_cancel": "Отменить", + "gui_close_tab_warning_close": "Закрыть", + "gui_close_tab_warning_website_description": "Запущенный вами веб сайт все еще активен. Вы уверены что хотите закрыть эту вкладку?", + "gui_close_tab_warning_receive_description": "Вы в процессе скачивания файлов. Вы уверены что хотите закрыть эту вкладку?", + "gui_close_tab_warning_share_description": "Вы в процессе посылки файлов. Вы уверены что хотите закрыть эту вкладку?", + "gui_close_tab_warning_persistent_description": "Эта закладка важна. Если Вы закроете ее, то потеряете используемую Тор ссылку. Вы уверены?", + "gui_tab_name_chat": "Чат", + "gui_tab_name_website": "Веб сайт", + "gui_tab_name_receive": "Скачать", + "gui_tab_name_share": "Поделиться", + "gui_main_page_chat_button": "Начать чат", + "gui_main_page_website_button": "Запустить веб сайт", + "gui_main_page_receive_button": "Начать скачивание", + "gui_new_tab_chat_button": "Начать чат анонимно", + "gui_new_tab_website_button": "Поднять веб сайт", + "gui_new_tab_receive_button": "Получить файлы", + "gui_new_tab_share_button": "Поделиться файлами", + "gui_new_tab_tooltip": "Открыть новую вкладку", + "gui_new_tab": "Новая вкладка", + "gui_open_folder_error": "Ошибка при попытке открыть папку с помощью xdg-open. Файл находится здесь: {}", + "gui_qr_code_description": "Сканируйте этот QR-код считывающим устройством, например камерой Вашего телефона, чтобы было удобнее поделиться ссылкой OnionShare с кем либо.", + "gui_qr_code_dialog_title": "Код QR OnionShare", + "gui_show_qr_code": "Показать QR-код", + "gui_receive_flatpak_data_dir": "Так как Вы установили OnionShare с помощью Flatpak, Вы должны сохранять файлы в папке ~/OnionShare.", + "gui_chat_stop_server": "Остановить сервер чата", + "gui_chat_start_server": "Запустить сервер чата", + "gui_file_selection_remove_all": "Очистить все", + "gui_remove": "Очистить", + "error_port_not_available": "Порт OnionShare не доступен", + "gui_rendezvous_cleanup_quit_early": "Выйти Раньше", + "gui_rendezvous_cleanup": "Ожидается завершение соединений с сетью Tor для подтверждения успешной отправки ваших файлов.\n\nЭто может занять несколько минут.", + "gui_color_mode_changed_notice": "Перезапустите OnionShare чтобы изменения цветовой гаммы вступили в силу.", + "gui_chat_url_description": "Каждый у кого есть этот адрес OnionShare и секретный ключ может присоединиться к этому чату при помощи Tor Browser: ", + "history_receive_read_message_button": "Прочитать сообщение", + "mode_settings_receive_webhook_url_checkbox": "Использовать веб-хук для отправки уведомлений", + "mode_settings_receive_disable_files_checkbox": "Запретить передачу файлов", + "mode_settings_receive_disable_text_checkbox": "Запретить отправку текста", + "mode_settings_title_label": "Собственное название", + "gui_status_indicator_chat_started": "Чат активен", + "gui_status_indicator_chat_scheduled": "По расписанию…", + "gui_status_indicator_chat_working": "Запуск…", + "gui_status_indicator_chat_stopped": "Готов начать чат", + "gui_settings_theme_dark": "Тёмная", + "gui_settings_theme_light": "Светлая", + "gui_settings_theme_auto": "Авто", + "gui_settings_theme_label": "Тема", + "gui_client_auth_instructions": "Затем, отправьте секретный ключ, необходимый для доступа к вашему сервису OnionShare:", + "gui_url_instructions_public_mode": "Отправьте адрес OnionShare, показанный ниже:", + "gui_url_instructions": "Сначала, отправьте адрес OnionShare, показанный ниже:", + "gui_chat_url_public_description": "Каждый у кого есть этот адрес OnionShare может присоединиться к этому чату при помощи Tor Browser: ", + "gui_receive_url_public_description": "Кто угодно c этим адресом OnionShare ключом может загрузить файлы на ваш компьютер с помощьюTor Browser: ", + "gui_website_url_public_description": "Любой у кого есть этот адрес OnionShare может посетить ваш сайт при помощи Tor Browser: ", + "gui_share_url_public_description": "Кто угодно c этим адресом OnionShare может скачать Ваши файлы при помощи Tor Browser: ", + "gui_server_doesnt_support_stealth": "Приносим свои извинения, текущая версия Tor не поддерживает режим \"stealth\" (Аутентификация Клиента). Пожалуйста, попробуйте обновить версию Tor, или используйте 'публичный' режим, если в 'секретном' режиме отсутствует необходимость.", + "gui_please_wait_no_button": "Запуск…", + "gui_hide": "Скрыть", + "gui_reveal": "Показать", + "gui_qr_label_auth_string_title": "Секретный Ключ", + "gui_qr_label_url_title": "Адрес OnionShare", + "gui_copied_client_auth": "Секретный Ключ скопирован в буфер обмена", + "gui_copied_client_auth_title": "Секретный Ключ Скопирован", + "gui_copy_client_auth": "Копировать Секретный Ключ", + "gui_dragdrop_sandbox_flatpak": "Для обеспечения дополнительной безопасности, функция \"drag and drop\" не поддерживается песочницей Flatpak. Вместо этого используйте кнопки \"Добавить файлы\" и \"Добавить папку\".", + "gui_tor_settings_window_title": "Настройки Tor", + "gui_settings_controller_extras_label": "Настройки Tor", + "gui_settings_tor_bridges_label": "Мосты позволяют подключаться к сети Tor в местах, где его использование заблокировано. В зависимости от вашего местоположения лучше работать может тот или иной мост.", + "gui_settings_bridge_use_checkbox": "Использовать мост", + "gui_settings_bridge_radio_builtin": "Выбрать встроенный мост", + "gui_settings_bridge_none_radio_option": "Не использовать мост", + "gui_settings_bridge_moat_radio_option": "Запросить мост с сайта torproject.org", + "gui_settings_bridge_moat_button": "Запросить Новый Мост", + "gui_settings_bridge_custom_radio_option": "Подключить мост о котором вы узнали из доверенного источника", + "gui_settings_bridge_custom_placeholder": "ввести адрес:порт (по одному на каждой строке)", + "gui_settings_moat_bridges_invalid": "Вы ещё не запрашивали мост с сайта torproject.org.", + "gui_settings_stop_active_tabs_label": "На некоторых из ваших вкладок запущены сервисы.\nНеобходимо остановить все сервисы чтобы изменить настройки Tor.", + "gui_settings_version_label": "Вы используете OnionShare {}", + "gui_settings_help_label": "Нужна помощь? Вам сюда: docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "Отправить самостоятельно настроенный заголовок Content Security Policy", + "moat_contact_label": "Устанавливается связь с BridgeDB...", + "moat_captcha_label": "Решите CAPTCHA, чтобы запросить мост.", + "moat_captcha_placeholder": "Введите символы на картинке", + "moat_captcha_submit": "Отправить", + "moat_captcha_reload": "Перезагрузить", + "moat_bridgedb_error": "Ошибка соединения с BridgeDB.", + "moat_captcha_error": "Решение не верно. Пожалуйста, попробуйте ещё раз.", + "moat_solution_empty_error": "Вы должны ввести символы с картинки", + "mode_tor_not_connected_label": "OnionShare не подключен к сети Tor" +} diff --git a/desktop/onionshare/resources/locale/si.json b/desktop/onionshare/resources/locale/si.json new file mode 100644 index 00000000..32417022 --- /dev/null +++ b/desktop/onionshare/resources/locale/si.json @@ -0,0 +1,190 @@ +{ + "not_a_readable_file": "", + "other_page_loaded": "", + "incorrect_password": "", + "close_on_autostop_timer": "", + "closing_automatically": "", + "large_filesize": "", + "gui_drag_and_drop": "", + "gui_add": "එකතු කරන්න", + "gui_add_files": "", + "gui_add_folder": "", + "gui_remove": "ඉවත් කරන්න", + "gui_file_selection_remove_all": "", + "gui_choose_items": "", + "gui_share_start_server": "", + "gui_share_stop_server": "", + "gui_share_stop_server_autostop_timer": "", + "gui_chat_start_server": "", + "gui_chat_stop_server": "", + "gui_stop_server_autostop_timer_tooltip": "", + "gui_start_server_autostart_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_flatpak_data_dir": "", + "gui_copy_url": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_show_qr_code": "", + "gui_qr_code_dialog_title": "", + "gui_waiting_to_start": "", + "gui_please_wait": "", + "zip_progress_bar_format": "", + "gui_settings_window_title": "", + "gui_settings_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "", + "gui_settings_autoupdate_check_button": "", + "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": "", + "settings_test_success": "", + "connecting_to_tor": "", + "update_available": "", + "update_error_invalid_latest_version": "", + "update_error_check_error": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "gui_server_autostart_timer_expired": "", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", + "share_via_onionshare": "", + "gui_share_url_description": "", + "gui_website_url_description": "", + "gui_receive_url_description": "", + "gui_chat_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_scheduled": "", + "gui_status_indicator_share_started": "", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_scheduled": "", + "gui_status_indicator_receive_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "history_requests_tooltip": "", + "error_cannot_create_data_dir": "", + "gui_receive_mode_warning": "", + "gui_open_folder_error": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_color_mode_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_progress_complete": "", + "gui_all_modes_progress_starting": "", + "gui_all_modes_progress_eta": "", + "gui_share_mode_no_files": "", + "gui_share_mode_autostop_timer_waiting": "", + "gui_website_mode_no_files": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "", + "days_first_letter": "", + "hours_first_letter": "", + "minutes_first_letter": "", + "seconds_first_letter": "", + "gui_new_tab": "", + "gui_new_tab_tooltip": "", + "gui_new_tab_share_button": "", + "gui_new_tab_receive_button": "", + "gui_new_tab_website_button": "", + "gui_new_tab_chat_button": "", + "gui_main_page_share_button": "", + "gui_main_page_receive_button": "", + "gui_main_page_website_button": "", + "gui_main_page_chat_button": "", + "gui_tab_name_share": "", + "gui_tab_name_receive": "", + "gui_tab_name_website": "", + "gui_tab_name_chat": "", + "gui_close_tab_warning_title": "", + "gui_close_tab_warning_persistent_description": "", + "gui_close_tab_warning_share_description": "", + "gui_close_tab_warning_receive_description": "", + "gui_close_tab_warning_website_description": "", + "gui_close_tab_warning_close": "", + "gui_close_tab_warning_cancel": "", + "gui_quit_warning_title": "", + "gui_quit_warning_description": "", + "gui_quit_warning_quit": "", + "gui_quit_warning_cancel": "", + "mode_settings_advanced_toggle_show": "", + "mode_settings_advanced_toggle_hide": "", + "mode_settings_persistent_checkbox": "", + "mode_settings_public_checkbox": "", + "mode_settings_autostart_timer_checkbox": "", + "mode_settings_autostop_timer_checkbox": "", + "mode_settings_legacy_checkbox": "", + "mode_settings_share_autostop_sharing_checkbox": "", + "mode_settings_receive_data_dir_label": "", + "mode_settings_receive_data_dir_browse_button": "", + "mode_settings_website_disable_csp_checkbox": "", + "gui_all_modes_transfer_finished_range": "", + "gui_all_modes_transfer_finished": "", + "gui_all_modes_transfer_canceled_range": "", + "gui_all_modes_transfer_canceled": "", + "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": "", + "gui_rendezvous_cleanup": "", + "gui_rendezvous_cleanup_quit_early": "", + "error_port_not_available": "" +} diff --git a/desktop/onionshare/resources/locale/sk.json b/desktop/onionshare/resources/locale/sk.json new file mode 100644 index 00000000..841b156e --- /dev/null +++ b/desktop/onionshare/resources/locale/sk.json @@ -0,0 +1,190 @@ +{ + "not_a_readable_file": "{0:s} nie je čitateľný súbor.", + "other_page_loaded": "Načítaná adresa", + "incorrect_password": "Nesprávne heslo", + "close_on_autostop_timer": "Zastavené, pretože časovač automatického zastavenia vypršal", + "closing_automatically": "Zastavené, pretože prenos je dokončený", + "large_filesize": "Upozornenie: Odosielanie veľkých súborov môže trvať hodiny", + "gui_drag_and_drop": "Presuňte a pustite súbory a priečinky, ktoré chcete zdieľať", + "gui_add": "Pridať", + "gui_add_files": "Pridať súbory", + "gui_add_folder": "Pridať priečinok", + "gui_remove": "Odstrániť", + "gui_file_selection_remove_all": "Odstrániť všetko", + "gui_choose_items": "Vybrať", + "gui_share_start_server": "Spustiť zdieľanie", + "gui_share_stop_server": "Zastaviť zdieľanie", + "gui_share_stop_server_autostop_timer": "Zastaviť zdieľanie ({})", + "gui_chat_start_server": "Spustiť četový server", + "gui_chat_stop_server": "Zastaviť četový server", + "gui_stop_server_autostop_timer_tooltip": "Časovač automatického zastavenia končí o {}", + "gui_start_server_autostart_timer_tooltip": "Časovač automatického spustenia končí o {}", + "gui_receive_start_server": "Spustiť režim prijímania", + "gui_receive_stop_server": "Zastaviť režim prijímania", + "gui_receive_stop_server_autostop_timer": "Zastaviť režim prijímania (zostáva {})", + "gui_receive_flatpak_data_dir": "Pretože ste nainštalovali OnionShare pomocou Flatpak, musíte uložiť súbory do priečinka v ~/OnionShare.", + "gui_copy_url": "Kopírovať adresu", + "gui_canceled": "Zrušené", + "gui_copied_url_title": "Skopírovaná OnionShare adresa", + "gui_copied_url": "OnionShare adresa bola skopírovaná do schránky", + "gui_show_qr_code": "Zobraziť QR kód", + "gui_qr_code_dialog_title": "OnionShare QR kód", + "gui_qr_code_description": "Naskenujte tento QR kód pomocou čítačky QR, napríklad fotoaparátom na telefóne, aby ste mohli jednoduchšie zdieľať adresu OnionShare s niekým.", + "gui_waiting_to_start": "Naplánované spustenie o {}. Kliknutím zrušíte.", + "gui_please_wait": "Spúšťa sa... Kliknutím zrušíte.", + "zip_progress_bar_format": "Komprimovanie: %p%", + "gui_settings_window_title": "Nastavenia", + "gui_settings_autoupdate_label": "Skontrolovať novú verziu", + "gui_settings_autoupdate_option": "Upozorniť ma, keď bude k dispozícii nová verzia", + "gui_settings_autoupdate_timestamp": "Naposledy skontrolované: {}", + "gui_settings_autoupdate_timestamp_never": "Nikdy", + "gui_settings_autoupdate_check_button": "Skontrolovať novú verziu", + "gui_settings_connection_type_label": "Ako by sa mal OnionShare pripojiť k Tor?", + "gui_settings_connection_type_bundled_option": "Použite verziu Tor zabudovanú do OnionShare", + "gui_settings_connection_type_automatic_option": "Pokúsiť sa o automatickú konfiguráciu s prehliadačom Tor", + "gui_settings_connection_type_control_port_option": "Pripojiť pomocou riadiaceho port", + "gui_settings_connection_type_socket_file_option": "Pripojiť pomocou socket súboru", + "gui_settings_connection_type_test_button": "Test pripojenia k Tor", + "gui_settings_control_port_label": "Riadiaci port", + "gui_settings_socket_file_label": "Socket súbor", + "gui_settings_socks_label": "SOCKS port", + "gui_settings_authenticate_label": "Nastavenia autentifikácie Tor", + "gui_settings_authenticate_no_auth_option": "Žiadna autentifikácia alebo autentifikácia pomocou cookies", + "gui_settings_authenticate_password_option": "Heslo", + "gui_settings_password_label": "Heslo", + "gui_settings_tor_bridges": "Tor bridge podpora", + "gui_settings_tor_bridges_no_bridges_radio_option": "Nepoužívať Tor bridge", + "gui_settings_tor_bridges_obfs4_radio_option": "Použiť vstavané zásuvné transporty obfs4", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Použiť vstavané zásuvné transporty obfs4 (vyžaduje obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Použiť vstavané zásuvné transporty meek_lite (Azure)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Použiť vstavané zásuvné transporty meek_lite (Azure) (vyžaduje obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Varovanie: Mosty meek_lite sú pre Tor Projekt veľmi nákladné.

Používajte ich iba v prípade, že sa nemôžete pripojiť k Tor priamo, pomocou transportov obfs4 alebo iných bežných mostov.", + "gui_settings_tor_bridges_custom_radio_option": "Použiť vlastné mosty", + "gui_settings_tor_bridges_custom_label": "Mosty môžete získať z https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Žiadny z mostov, ktoré ste pridali, nefunguje.\nDvakrát ich skontrolujte alebo pridajte ďalšie.", + "gui_settings_button_save": "Uložiť", + "gui_settings_button_cancel": "Zrušiť", + "gui_settings_button_help": "Pomoc", + "settings_test_success": "Pripojený k ovládaču Tor.\n\nTor verzia : {}\nPodporuje pominuteľné onion služby: {}.\nPodporuje overenie klienta: {}.\nPodporuje adresy .onion ďalšej generácie: {}.", + "connecting_to_tor": "Pripája sa k sieti Tor", + "update_available": "Nová verzia OnionShare. Kliknite sem aby ste ju stiahli.

Používate {} a najnovšia je {}.", + "update_error_invalid_latest_version": "Nepodarilo sa skontrolovať novú verziu: Web OnionShare hovorí, že najnovšia verzia je na nerozpoznateľná '{}'…", + "update_error_check_error": "Nemôžete skontrolovať novú verziu: Možno nie ste pripojení k Tor, alebo je web OnionShare nefunkčný?", + "update_not_available": "Používate najnovšiu verziu OnionShare.", + "gui_tor_connection_ask": "Otvoriť nastavenia spojenia s Tor?", + "gui_tor_connection_ask_open_settings": "Áno", + "gui_tor_connection_ask_quit": "Ukončiť", + "gui_tor_connection_error_settings": "Skúste zmeniť spôsob pripojenia OnionShare k sieti Tor v nastaveniach.", + "gui_tor_connection_canceled": "Nepodarilo sa pripojiť k Tor.\n\nUistite sa, že ste pripojení na Internet, potom znova otvorte OnionShare a nastavte jeho pripojenie k Tor.", + "gui_tor_connection_lost": "Odpojený od Tor.", + "gui_server_started_after_autostop_timer": "Časovač automatického zastavenia vypršal pred spustením servera. Vytvorte nové zdieľanie.", + "gui_server_autostop_timer_expired": "Časovač automatického zastavenia už vypršal. Upravte ho tak, aby sa začal zdieľať.", + "gui_server_autostart_timer_expired": "Plánovaný čas už uplynul. Upravte ho tak, aby sa začal zdieľať.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Čas automatického zastavenia nemôže byť rovnaký alebo skorší ako čas automatického spustenia. Upravte ho, aby ste mohli začať zdieľať.", + "share_via_onionshare": "Zdieľať cez OnionShare", + "gui_share_url_description": "Ktokoľvek s touto adresou OnionShare si môže stiahnuť vaše súbory pomocou Tor Browser: ", + "gui_website_url_description": "Ktokoľvek s touto adresou OnionShare môže navštíviť váš web pomocou Tor Browser: ", + "gui_receive_url_description": "Ktokoľvek s touto adresou OnionShare môže nahrať súbory do vášho počítača pomocou Tor Browser: ", + "gui_url_label_persistent": "Toto zdieľanie sa automaticky nezastaví.

Každé ďalšie zdieľanie znova použije adresu. (Ak chcete použiť jednorazové adresy, vypnite v nastaveniach možnosť „Používať trvalú adresu“.)", + "gui_url_label_stay_open": "Toto zdieľanie sa automaticky nezastaví.", + "gui_url_label_onetime": "Toto zdieľanie sa zastaví po prvom dokončení.", + "gui_url_label_onetime_and_persistent": "Toto zdieľanie sa automaticky nezastaví.

Každé ďalšie zdieľanie znova použije adresu. (Ak chcete použiť jednorazové adresy, vypnite v nastaveniach možnosť „Používať trvalú adresu“.)", + "gui_status_indicator_share_stopped": "Pripravené na zdieľanie", + "gui_status_indicator_share_working": "Začína…", + "gui_status_indicator_share_scheduled": "Naplánované…", + "gui_status_indicator_share_started": "Zdieľanie", + "gui_status_indicator_receive_stopped": "Pripravené na príjem", + "gui_status_indicator_receive_working": "Začína…", + "gui_status_indicator_receive_scheduled": "Naplánované…", + "gui_status_indicator_receive_started": "Prijímanie", + "gui_file_info": "{} súbory, {}", + "gui_file_info_single": "{} súbor, {}", + "history_in_progress_tooltip": "{} prebieha", + "history_completed_tooltip": "{} dokončené", + "history_requests_tooltip": "{} webové požiadavky", + "error_cannot_create_data_dir": "Nepodarilo sa vytvoriť dátový priečinok OnionShare: {}", + "gui_receive_mode_warning": "Režim prijímania umožňuje ľuďom nahrávať súbory do počítača.

Niektoré súbory môžu potenciálne prevziať kontrolu nad počítačom, ak ich otvoríte. Otvárajte veci len od ľudí, ktorých dôverujete, alebo ak viete, čo robíte.", + "gui_open_folder_error": "Nepodarilo sa otvoriť priečinok s xdg-open. Súbor je tu: {}", + "gui_settings_language_label": "Preferovaný jazyk", + "gui_settings_language_changed_notice": "Reštartujte OnionShare pre nový jazyk, ktorý sa má použiť.", + "systray_menu_exit": "Ukončiť", + "systray_page_loaded_title": "Stránka bola načítaná", + "systray_page_loaded_message": "Adresa OnionShare načítaná", + "systray_share_started_title": "Zdieľanie sa začalo", + "systray_share_started_message": "Začínam niekomu odosielať súbory", + "systray_share_completed_title": "Zdieľanie dokončené", + "systray_share_completed_message": "Odosielanie súborov bolo dokončené", + "systray_share_canceled_title": "Zdieľanie bolo zrušené", + "systray_share_canceled_message": "Niekto zrušil prijímanie vašich súborov", + "systray_receive_started_title": "Prijímanie začalo", + "systray_receive_started_message": "Niekto vám posiela súbory", + "gui_all_modes_history": "História", + "gui_all_modes_clear_history": "Vymazať všetko", + "gui_all_modes_transfer_started": "Spustené {}", + "gui_all_modes_progress_complete": "%p%, {0:s} uplynulo.", + "gui_all_modes_progress_starting": "{0:s}, %p% (výpočet)", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_share_mode_no_files": "Zatiaľ neboli odoslané žiadne súbory", + "gui_share_mode_autostop_timer_waiting": "Čaká sa na dokončenie odosielania", + "gui_website_mode_no_files": "Zatiaľ nie je zdieľaný žiadny web", + "gui_receive_mode_no_files": "Zatiaľ neboli prijaté žiadne súbory", + "gui_receive_mode_autostop_timer_waiting": "Čakanie na dokončenie prijímania", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_new_tab": "Nová karta", + "gui_new_tab_tooltip": "Otvoriť novú kartu", + "gui_new_tab_share_button": "Zdieľať súbory", + "gui_new_tab_receive_button": "Prijímanie súborov", + "gui_new_tab_website_button": "Hosťovanie webu", + "gui_new_tab_chat_button": "Četujte anonymne", + "gui_main_page_share_button": "Spustiť zdieľanie", + "gui_main_page_receive_button": "Spustiť prijímanie", + "gui_main_page_website_button": "Spustiť hosťovanie", + "gui_main_page_chat_button": "Začať četovať", + "gui_tab_name_share": "Zdieľať", + "gui_tab_name_receive": "Príjem", + "gui_tab_name_website": "Web", + "gui_tab_name_chat": "Čet", + "gui_close_tab_warning_title": "Ste si istí?", + "gui_close_tab_warning_persistent_description": "Táto karta je trvalá. Ak ju zatvoríte, prídete o onion adresu, ktorú používa. Naozaj ju chcete zavrieť?", + "gui_close_tab_warning_share_description": "Ste v procese odosielania súborov. Naozaj chcete zavrieť túto kartu?", + "gui_close_tab_warning_receive_description": "Ste v procese prijímania súborov. Naozaj chcete zavrieť túto kartu?", + "gui_close_tab_warning_website_description": "Aktívne hosťujete webovú lokalitu. Naozaj chcete zavrieť túto kartu?", + "gui_close_tab_warning_close": "Zatvoriť", + "gui_close_tab_warning_cancel": "Zrušiť", + "gui_quit_warning_title": "Ste si istí?", + "gui_quit_warning_description": "Zdieľanie je aktívne na niektorých kartách. Ak skončíte, všetky karty sa zavrú. Naozaj chcete skončiť?", + "gui_quit_warning_quit": "Ukončiť", + "gui_quit_warning_cancel": "Zrušiť", + "mode_settings_advanced_toggle_show": "Zobraziť rozšírené nastavenia", + "mode_settings_advanced_toggle_hide": "Skryť rozšírené nastavenia", + "mode_settings_persistent_checkbox": "Uložiť túto kartu a automaticky ju otvoriť, keď otvorím OnionShare", + "mode_settings_public_checkbox": "Nepoužiť heslo", + "mode_settings_autostart_timer_checkbox": "Spustiť onion službu v plánovanom čase", + "mode_settings_autostop_timer_checkbox": "Zastaviť onion službu v plánovanom čase", + "mode_settings_legacy_checkbox": "Použiť staršiu adresu (v2 onion služba, neodporúča sa)", + "mode_settings_share_autostop_sharing_checkbox": "Po odoslaní súborov zastaviť zdieľanie (zrušením začiarknutia povolíte sťahovanie jednotlivých súborov)", + "mode_settings_receive_data_dir_label": "Uložiť súbory do", + "mode_settings_receive_data_dir_browse_button": "Prechádzať", + "mode_settings_website_disable_csp_checkbox": "Neposielať hlavičku politiky zabezpečenia obsahu (umožňuje vašej webovej lokalite používať zdroje tretích strán)", + "gui_all_modes_transfer_finished_range": "Prenesené {} - {}", + "gui_all_modes_transfer_finished": "Prenesené {}", + "gui_all_modes_transfer_canceled_range": "Zrušené {} - {}", + "gui_all_modes_transfer_canceled": "Zrušené {}", + "error_port_not_available": "Port OnionShare nie je k dispozícii", + "gui_rendezvous_cleanup_quit_early": "Ukončiť predčasne", + "gui_rendezvous_cleanup": "Čaká sa na zatvorenie obvodov Tor, aby ste sa uistili, že sa súbory úspešne preniesli.\n\nMôže to trvať niekoľko minút.", + "settings_error_bundled_tor_broken": "OnionShare sa nemohol pripojiť k Tor:\n{}", + "settings_error_bundled_tor_timeout": "Pripojenie k Tor trvá príliš dlho. Možno nie ste pripojení na internet alebo máte nepresné systémové hodiny?", + "settings_error_bundled_tor_not_supported": "Použitie verzie Tor, ktorá je dodávaná s OnionShare nefunguje v režime vývojára v systéme Windows alebo macOS.", + "settings_error_unreadable_cookie_file": "Pripojené k ovládaču Tor, ale heslo môže byť nesprávne, alebo váš používateľ nemá povolenie na čítanie súboru cookie.", + "settings_error_missing_password": "Pripojené k ovládaču Tor, ale je potrebné heslo na autentifikáciu.", + "settings_error_auth": "Pripojené k {}:{}, ale nemôže sa autentifikovať. Možno to nie je ovládač Tor?", + "settings_error_socket_file": "Nedá sa pripojiť k ovládaču Tor pomocou socket súboru {}.", + "settings_error_socket_port": "Nedá sa pripojiť k ovládaču Tor na {}:{}.", + "settings_error_automatic": "Nepodarilo sa pripojiť k ovládaču Tor. Je prehliadač Tor (dostupný na torproject.org) spustený na pozadí?", + "settings_error_unknown": "Nemôžem sa pripojiť k ovládaču Tor, pretože vaše nastavenia nedávajú zmysel.", + "gui_chat_url_description": "Ktokoľvek s touto adresou OnionShare sa môže pripojiť k tejto miestnosti chatu pomocou Tor prehliadača: " +} diff --git a/desktop/onionshare/resources/locale/sl.json b/desktop/onionshare/resources/locale/sl.json new file mode 100644 index 00000000..52f14cce --- /dev/null +++ b/desktop/onionshare/resources/locale/sl.json @@ -0,0 +1,187 @@ +{ + "config_onion_service": "", + "preparing_files": "Stiskanje datotek.", + "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": "{0:s} ni mogoče prebrati.", + "no_available_port": "Ni mogoče najti prostega vhoda, da bi lahko zagnali onion service", + "other_page_loaded": "Naslov naložen", + "close_on_autostop_timer": "Prenehal, ker je auto-stop timer pretekel", + "closing_automatically": "Prenehal, ker se je prenos končal", + "timeout_download_still_running": "", + "large_filesize": "Opozorilo: Pošiljanje prevelikih deležel lahko traja ure", + "systray_menu_exit": "Izhod", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "Povleci in spusti datoteke in mape\nza začetek skupne rabe", + "gui_add": "Dodaj", + "gui_delete": "Zbriši", + "gui_choose_items": "Izberi", + "gui_share_start_server": "Začni deliti", + "gui_share_stop_server": "Zaustavi deljenje", + "gui_share_stop_server_autostop_timer": "Zaustavi deljenje ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "Odpovedan", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "Izhod", + "gui_quit_warning_dont_quit": "", + "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_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "Nikoli", + "gui_settings_autoupdate_check_button": "", + "gui_settings_general_label": "Splošne nastavitve", + "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": "Krmilna vrata", + "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": "Pomoč", + "gui_settings_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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": "Da", + "gui_tor_connection_ask_quit": "Izhod", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "Brskanje", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_add_files": "Dodaj Datoteke", + "gui_add_folder": "Dodaj Mapo", + "gui_stop_server_autostop_timer_tooltip": "Samodejno zaustavi timer, ki se konča ob{}", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "incorrect_password": "Napačno geslo" +} diff --git a/desktop/onionshare/resources/locale/sn.json b/desktop/onionshare/resources/locale/sn.json new file mode 100644 index 00000000..81b46cba --- /dev/null +++ b/desktop/onionshare/resources/locale/sn.json @@ -0,0 +1,182 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/sr_Latn.json b/desktop/onionshare/resources/locale/sr_Latn.json new file mode 100644 index 00000000..f47bade1 --- /dev/null +++ b/desktop/onionshare/resources/locale/sr_Latn.json @@ -0,0 +1,263 @@ +{ + "preparing_files": "Komprimujem fajlove.", + "not_a_readable_file": "(0:s) nije čitljiv fajl.", + "no_available_port": "Ne mogu da pronađem raspoloživi port da bih počeo onion servis", + "other_page_loaded": "Adresa učitana", + "incorrect_password": "Pogrešna lozinka", + "close_on_autostop_timer": "Prekid rada zato što je isteklo vreme na auto-stop tajmeru", + "closing_automatically": "Prekid rada zato što je prenos završen", + "large_filesize": "Upozorenje: Slanje velikih fajlova može trajati satima", + "gui_drag_and_drop": "Prevuci i otpusti datoteke i fascikle da bi započeo deljenje", + "gui_add": "Dodaj", + "gui_add_files": "Dodaj datoteke", + "gui_add_folder": "Dodat fascikle", + "gui_delete": "Obriši", + "gui_choose_items": "Odaberi", + "gui_share_start_server": "Započni deljenje", + "gui_share_stop_server": "Prekini deljenje", + "gui_share_stop_server_autostop_timer": "Prekini deljenje ({})", + "gui_stop_server_autostop_timer_tooltip": "Auto-stop tajmer se zaustavlja na {}", + "gui_start_server_autostart_timer_tooltip": "Auto-start tajmer se zaustavlja na {}", + "gui_receive_start_server": "Započni režim primanja", + "gui_receive_stop_server": "Prekini režim primanja", + "gui_receive_stop_server_autostop_timer": "Prekini režim primanja ({} preostalo)", + "gui_copy_url": "Kopiraj adresu", + "gui_canceled": "Obustavljeno", + "gui_copied_url_title": "Kopirana OnionShare adresa", + "gui_copied_url": "OnionShare adresa kopirana u privremenu memoriju", + "gui_waiting_to_start": "Planirano da počne u {}. Klikni da obustaviš.", + "gui_please_wait": "Počinje… Klikni da obustaviš.", + "gui_quit_title": "Ne tako brzo", + "gui_share_quit_warning": "Proces slanja datoteka u toku. Jeste li sigurni da želite da zaustavite OnionShare?", + "gui_receive_quit_warning": "Proces primanja datoteka u toku. Jeste li sigurni da želite da zaustavite OnionShare?", + "gui_quit_warning_quit": "Izađi", + "gui_quit_warning_dont_quit": "Odustani", + "zip_progress_bar_format": "Komprimujem: %p%", + "error_stealth_not_supported": "Da bi koristion klijen autorizaciju, potrebni su ti barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare zahteva barem Tor 0.2.7.1 i python3-stem 1.4.0.", + "gui_settings_window_title": "Podešavanja", + "gui_settings_whats_this": "Šta je ovo?", + "gui_settings_stealth_option": "Koristi klijent autorizaciju", + "gui_settings_autoupdate_label": "Proveri da li postoji nova verzija", + "gui_settings_autoupdate_option": "Obavesti me kada nova verzija bude na raspolaganju", + "gui_settings_autoupdate_timestamp": "Poslednja provera: {}", + "gui_settings_autoupdate_timestamp_never": "Nikada", + "gui_settings_autoupdate_check_button": "Proveri da li postoji nova verzija", + "gui_settings_general_label": "Generalna podešavanja", + "gui_settings_onion_label": "Onion podešavanja", + "gui_settings_sharing_label": "Podešavanja deljenja", + "gui_settings_close_after_first_download_option": "Prekini deljenje kada datoteke budu poslate", + "gui_settings_csp_header_disabled_option": "Onemogući zaglavlje Pravilnika o sigurnosti sadržaja", + "gui_settings_individual_downloads_label": "Poništi izbor da bi dozvolio preuzimanje pojedinačnih datoteka", + "gui_settings_connection_type_label": "Kako bi OnionShare trebalo povezati sa Torom?", + "gui_settings_connection_type_bundled_option": "Koristi verziju Tora ugrađenu u OnionShare", + "gui_settings_connection_type_automatic_option": "Pokušaj automatsku konfiguraciju pomoću Tor pretraživača", + "gui_settings_connection_type_control_port_option": "Poveži se koristeći kontrolni port", + "gui_settings_connection_type_socket_file_option": "Poveži se koristeći datoteku priključka", + "gui_settings_connection_type_test_button": "Testiranje veze sa Torom", + "gui_settings_control_port_label": "Kontrolni port", + "gui_settings_socket_file_label": "Datoteka priključka", + "gui_settings_socks_label": "SOCKS priključak", + "gui_settings_authenticate_label": "Podešavanje autentifikacije Tora", + "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem", + "gui_settings_authenticate_password_option": "Lozinka", + "gui_settings_password_label": "Lozinka", + "gui_settings_tor_bridges": "Povezivanje pomoću Tor mosta?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove", + "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 dodatne prenose", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 dodatne prenose (potreban obfs4proksi)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) dodatne prenose", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) dodatne prenose (potreban obfs4proksi)", + "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek-azure mostovi su vrlo skupi za Tor projekat da ih koristi.

Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.", + "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", + "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje ste dodali ne funkcioniše. Proverite ih ponovo ili dodajte druge.", + "gui_settings_button_save": "Sačuvaj", + "gui_settings_button_cancel": "Odustani", + "gui_settings_button_help": "Pomoć", + "gui_settings_autostop_timer_checkbox": "Koristi tajmer za automatsko zaustavljanje", + "gui_settings_autostop_timer": "Zaustavi deljenje na:", + "gui_settings_autostart_timer_checkbox": "Koristi tajmer automatskog pokretanja", + "gui_settings_autostart_timer": "Započni deljenje na:", + "settings_error_unknown": "Nije moguće povezati se sa Tor kontrolerom jer tvoje postavke nemaju smisla.", + "settings_error_automatic": "Nije moguće povezati se sa Tor kontrolerom. Da li Tor pregledač (dostupan na torproject.org) radi u pozadini?", + "settings_error_socket_port": "Nije moguće povezati se sa Tor kontrolerom na {}: {}.", + "settings_error_socket_file": "Nije moguće povezati se na Tor kontroler pomoću datoteke priključka {}.", + "settings_error_auth": "Povezan na {}: {}, ali nije moguća autentifikacija. Možda ovo nije Tor kontroler?", + "settings_error_missing_password": "Povezan sa Tor kontrolerom, ali on zahteva lozinku za autentifikaciju.", + "settings_error_unreadable_cookie_file": "Povezan sa Tor kontrolerom, ali je lozinka možda pogrešna ili tvomj korisniku nije dozvoljeno da pročita datoteku kolačića.", + "settings_error_bundled_tor_not_supported": "Korišćenje verzije Tora koja se isporučuje sa OnionShare ne radi u razvojnom režimu u operativnom sistemu Windows ili macOS.", + "settings_error_bundled_tor_timeout": "Predugo traje povezivanje sa Torom. Možda nisi povezan sa Internetom ili imaš netačan sistemski sat?", + "settings_error_bundled_tor_broken": "OnionShare ne može da se poveže sa Torom u pozadini:\n{}", + "settings_test_success": "Povezan sa Tor kontrolerom.\n\nTor verzija: {}\nPodržava povremene onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava next-gen .onion adrese: {}.", + "error_tor_protocol_error": "Došlo je do greške sa Torom: {}", + "error_tor_protocol_error_unknown": "Došlo je do nepoznate greške sa Torom", + "connecting_to_tor": "Povezivanje sa Tor mrežom", + "update_available": "Novi OnionShare objavljen. Klikni ovde da bi ga dobio.

Trenutno koristiš {} a najnoviji je {}.", + "update_error_check_error": "Nije moguće proveriti novu verziju: Mođda nije povezana na Tor, ili sajt OnionShare ne radi?", + "update_error_invalid_latest_version": "Nije moguće proveriti novu verziju: Sajt OnionShare kaže da poslednja verzija nije prepoznata '{}'…", + "update_not_available": "Da li koristite najnoviji OnionShare.", + "gui_tor_connection_ask": "Da li otvoriti podešavanja da biste podesili vezu sa Torom?", + "gui_tor_connection_ask_open_settings": "Da", + "gui_tor_connection_ask_quit": "Odustani", + "gui_tor_connection_error_settings": "Pokušaj da u podešavanjima promeniš način na koji se OnionShare povezuje sa Tor mrežom.", + "gui_tor_connection_canceled": "Nije moguće povezati se sa Torom.\n\nProveri da li si povezan sa Internetom, a zatim ponovo pokreni OnionShare i podesi vezu sa Torom.", + "gui_tor_connection_lost": "Prekinuta veza sa Torom.", + "gui_server_started_after_autostop_timer": "Tajmer automatskog zaustavljanja je odbrojao pre početka rada servera. Unesi novi deo.", + "gui_server_autostop_timer_expired": "Tajmer automatskog zaustavljanja je već odbrojao. Podesi ga da bi započelo deljenje.", + "gui_server_autostart_timer_expired": "Predviđeno vreme je već prošlo. Podesi ga da bi započelo deljenje.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vreme automatskog zaustavljanja ne može biti isto ili ranije od vremena početka automatskog pokretanja. Podesi ga da bi započelo deljenje.", + "share_via_onionshare": "Deljenje pomoću OnionShare", + "gui_connect_to_tor_for_onion_settings": "Poveži se sa Torom da bi video postavke onion servisa", + "gui_save_private_key_checkbox": "Koristi trajnu adresu", + "gui_share_url_description": "Svako sa ovom OnionShare adresom i privatnim ključem može preuzeti tvoje datoteke koristeći Tor Browser: ", + "gui_website_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može posetiti tvoju web-stranicu koristeći Tor Browser: ", + "gui_receive_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može poslati datoteke na tvoj računar koristeći Tor Browser: ", + "gui_url_label_persistent": "Ovo deljenje neće se automatski zaustaviti.

Svako sledeće deljenje ponovo koristi istu adresu. (Da bi koristio jednokratnu adresu, isključi opciju \"koristi trajnu adresu\" u podešavanjima.)", + "gui_url_label_stay_open": "Ovaj deljenje neće se automatski zaustaviti.", + "gui_url_label_onetime": "Ovaj deljenje će se zaustaviti nakon prvog dovršenja.", + "gui_url_label_onetime_and_persistent": "Ovaj deljenje neće se automatski zaustaviti.

Svako naredno deljenje ponovo će koristiti istu adresu. (Da bi koristio jednokratnu adresu, isključi opciju \"Koristi trajnu adresu\" u podešavanjima.)", + "gui_status_indicator_share_stopped": "Spremno za deljenje", + "gui_status_indicator_share_working": "Počinje…", + "gui_status_indicator_share_scheduled": "Planirano…", + "gui_status_indicator_share_started": "Deljenje", + "gui_status_indicator_receive_stopped": "Spremno za prijem", + "gui_status_indicator_receive_working": "Počinje…", + "gui_status_indicator_receive_scheduled": "Planirano…", + "gui_status_indicator_receive_started": "Primanje", + "gui_file_info": "{} datoteke, {}", + "gui_file_info_single": "{} datoteka, {}", + "history_in_progress_tooltip": "{} u toku", + "history_completed_tooltip": "{} završeno", + "history_requests_tooltip": "{} web zahtevi", + "error_cannot_create_data_dir": "Nije moguće kreirati OnionShare fasciklu sa podacima: {}", + "gui_receive_mode_warning": "Režim prijema dozvoljava korisnicima da šalju datoteke na tvoj računar.

Neke datoteke mogu da preuzmu kontrolu nad tvojim računarom ako ih otvoriš. Otvaraj samo stvari od ljudi kojima veruješ ili ako znaš šta radiš. ", + "gui_mode_share_button": "Podeli datoteke", + "gui_mode_receive_button": "Prijem datoteka", + "gui_mode_website_button": "Objavljivanje web stranice", + "gui_settings_receiving_label": "Podešavanja prijema", + "gui_settings_website_label": "Podešavanja web lokacije", + "gui_settings_data_dir_label": "Snimi datoteke u", + "gui_settings_data_dir_browse_button": "Potraži", + "gui_settings_public_mode_checkbox": "Javni režim", + "gui_open_folder_error_nautilus": "Nije moguće otvoriti fasciklu jer Nautilus nije dostupan. Datoteka je ovde: {}", + "gui_settings_language_label": "Željeni jezik", + "gui_settings_language_changed_notice": "Ponovo pokreni OnionShare da bi novi jezik bio primenjen.", + "systray_menu_exit": "Izađi", + "systray_page_loaded_title": "Stranica učitana", + "systray_page_loaded_message": "OnionShare adresa učitana", + "systray_share_started_title": "Deljenje započeto", + "systray_share_started_message": "Početak slanja datoteka nekome", + "systray_share_completed_title": "Deljenje završeno", + "systray_share_completed_message": "Slanje datoteka završeno", + "systray_share_canceled_title": "Deljenje otkazano", + "systray_share_canceled_message": "Neko je otkazao primanje tvojih datoteka", + "systray_receive_started_title": "Prijem započet", + "systray_receive_started_message": "Neko ti šalje datoteke", + "gui_all_modes_history": "Istorija", + "gui_all_modes_clear_history": "Izbriši sve", + "gui_all_modes_transfer_started": "Započeto {}", + "gui_all_modes_transfer_finished_range": "Preneto {}-{}", + "gui_all_modes_transfer_finished": "Preneto {}", + "gui_all_modes_transfer_canceled_range": "Otkazano {}-{}", + "gui_all_modes_transfer_canceled": "Otkazano {}", + "gui_all_modes_progress_complete": "% p%, {0: s} je proteklo.", + "gui_all_modes_progress_starting": "{0: s},% p% (proračunavam)", + "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "gui_share_mode_no_files": "Nijedna datoteka još nije poslata", + "gui_share_mode_autostop_timer_waiting": "Čekam na završetak slanja", + "gui_website_mode_no_files": "Još nijedna web stranica nije podeljena", + "gui_receive_mode_no_files": "Još nijedna datoteka nije primljena", + "gui_receive_mode_autostop_timer_waiting": "Čekam na završetak prijema", + "receive_mode_upload_starting": "Slanje ukupne veličine od {} počinje", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_rendezvous_cleanup_quit_early": "Prestani", + "gui_rendezvous_cleanup": "Čekajući da se Tor čvorovi zatvore da bi bili sigurni da su vaši fajlovi uspešno preneti.\n\nOvo može trajati nekoliko minuta.", + "error_port_not_available": "OnionShare port nije dostupan", + "mode_settings_website_disable_csp_checkbox": "Ne šaljite zaglavlje smernica za bezbednost sadržaja (omogućava vašem veb sajtu da koristi nezavisne resurse)", + "mode_settings_share_autostop_sharing_checkbox": "Zaustavite deljenje nakon slanja fajlova (uklonite oznaku da bi omogućili preuzimanje pojedinačnih fajlova)", + "gui_quit_warning_description": "Deljenje je aktivno u nekim vašim jezičcima. Ako želite napustiti, svi važi jezičci će biti zatvoreni. Da li ste sigurni da želite napustiti?", + "gui_close_tab_warning_website_description": "Aktivno hostujete veb sajt. Da li ste sigurni da želite da zatvorite ovaj jezičak?", + "gui_close_tab_warning_receive_description": "U procesu ste primanja fajlova. Da li ste sigurni da želite da zatvorite ovaj jezičak?", + "gui_close_tab_warning_share_description": "U procesu ste slanja fajlova. Da li ste sigurni da želite zatvoriti ovaj jezičak?", + "gui_close_tab_warning_persistent_description": "Ovaj jezičak je postojan. Ako ga zatvorite, izgubićete onion adresu koju koristite. Da li ste sigurni da želite zatvoriti?", + "mode_settings_receive_data_dir_browse_button": "Pronađi", + "mode_settings_receive_data_dir_label": "Sačuvaj fajlove u", + "mode_settings_legacy_checkbox": "Koristite zastarelu adresu (v2 onion servis, nije preporučeno)", + "mode_settings_autostop_timer_checkbox": "Zaustavi onion servis u planirano vreme", + "mode_settings_autostart_timer_checkbox": "Pokreni onion servis u planirano vreme", + "mode_settings_public_checkbox": "Ne koristi lozinku", + "mode_settings_persistent_checkbox": "Sačuvaj ovaj jezičak i automatski ga otvori kada otvorim OnionShare", + "gui_quit_warning_cancel": "Otkaži", + "gui_close_tab_warning_cancel": "Otkaži", + "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke", + "mode_settings_advanced_toggle_show": "Prikaži napredne postavke", + "gui_quit_warning_title": "Da li ste sigurni?", + "gui_close_tab_warning_close": "Zatvori", + "gui_close_tab_warning_title": "Da li ste sigurni?", + "gui_tab_name_chat": "Ćaskanje", + "gui_tab_name_website": "Veb sajt", + "gui_tab_name_receive": "Prijem", + "gui_tab_name_share": "Deli", + "gui_main_page_chat_button": "Pokreni ćaskanje", + "gui_new_tab_website_button": "Hosting veb sajta", + "gui_main_page_website_button": "Pokreni hosting", + "gui_main_page_receive_button": "Pokreni primanje", + "gui_main_page_share_button": "Pokreni deljenje", + "gui_new_tab_chat_button": "Anonimno ćaskanje", + "gui_new_tab_receive_button": "Primanje fajlova", + "gui_new_tab_share_button": "Deli fajlove", + "gui_new_tab_tooltip": "Otvori novi jezičak", + "gui_new_tab": "Novi jezičak", + "gui_color_mode_changed_notice": "Ponovo pokrenite OnionShare da bi primenili novi režim boja.", + "gui_open_folder_error": "Neuspelo otvaranje fascikle sa xdg-open. Fajl je ovde: {}", + "gui_chat_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može pristupiti ovoj sobi za ćaskanje koristeći Tor Browser: ", + "gui_qr_code_dialog_title": "OnionShare QR kod", + "gui_show_qr_code": "Prikaži QR kod", + "gui_receive_flatpak_data_dir": "Pošto ste instalirali OnionShare koristeći Flatpak, morate čuvati fajlove u falcikli ~/OnionShare.", + "gui_chat_stop_server": "Zaustavi server za ćaskanje", + "gui_chat_start_server": "Pokreni server za ćaskanje", + "gui_file_selection_remove_all": "Ukloni sve", + "gui_remove": "Ukloni", + "gui_copy_client_auth": "Kopiraj privatni ključ", + "gui_copied_client_auth_title": "Privatni ključ je kopiran", + "gui_copied_client_auth": "Privatni ključ je kopiran u clipboard", + "gui_tor_settings_window_title": "Tor Podešenja", + "gui_settings_controller_extras_label": "Tor Podešenja", + "gui_settings_bridge_use_checkbox": "Koristite most", + "gui_settings_bridge_radio_builtin": "Odaberite most", + "gui_settings_bridge_none_radio_option": "Ne koristi most", + "gui_settings_bridge_moat_radio_option": "Zatražite most od torproject.org", + "gui_settings_bridge_moat_button": "Zatražite novi most", + "gui_settings_bridge_custom_radio_option": "Obezbedite most za koji ste saznali iz pouzdanog izvora", + "gui_settings_bridge_custom_placeholder": "upišite adresu:port (jedan po liniji)", + "gui_settings_moat_bridges_invalid": "Još niste zatražili most od torproject.org.", + "gui_settings_version_label": "Koristite OnionShare {}", + "gui_share_url_public_description": "Bilo ko sa ovom OnionShare adresom može preuzeti tvoje datoteke koristeći Tor Browser: ", + "gui_website_url_public_description": "Bilo ko s ovom OnionShare adresom može posetiti tvoju web-stranicu koristeći Tor Browser: ", + "gui_receive_url_public_description": "Bilo ko sa ovom OnionShare adresom može poslati datoteke na tvoj računar koristeći Tor Browser: ", + "gui_chat_url_public_description": "Bilo ko sa ovom OnionShare adresom može se pridružiti ovoj sobi za ćaskanje koristeći Tor Browser: ", + "gui_url_instructions": "Prvo pošalji ovu dole OnionShare adresu:", + "moat_contact_label": "Kontaktiranje BridgeDB-a...", + "moat_captcha_label": "Rešite CAPTCHA da bi zatražili most.", + "moat_captcha_placeholder": "Unesite znakove sa slike", + "moat_captcha_submit": "Pošalji", + "moat_captcha_reload": "Obnovi", + "moat_bridgedb_error": "Greška u kontaktiranju BridgeDB.", + "gui_please_wait_no_button": "Pokretanje …", + "gui_qr_label_url_title": "OnionShare adresa", + "gui_qr_label_auth_string_title": "Privatni ključ", + "gui_reveal": "Otkrij", + "gui_hide": "Sakrij", + "gui_dragdrop_sandbox_flatpak": "Da bi Flatpak sandbox bio sigurniji, prevlačenje i ispuštanje nije podržano. Umesto toga koristite dugmad Dodaj datoteke i Dodaj direktorijume za pretraživanje datoteka.", + "gui_settings_tor_bridges_label": "Mostovi vam pomažu da pristupite Tor mreži u područjima gde je Tor blokiran. U zavisnosti gde se nalazite, jedan most može raditi bolje od drugog.", + "gui_settings_help_label": "Treba vam pomoć? Pogledajte docs.onionshare.org", + "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušajte s novijom verzijom Tor-a ili koristite 'javni' način rada ako ne mora biti privatan.", + "history_receive_read_message_button": "Pročitaj poruku", + "moat_captcha_error": "Rješenje nije ispravno. Molimo pokušajte ponovo.", + "moat_solution_empty_error": "Morate uneti znakove sa slike", + "mode_tor_not_connected_label": "OnionShare nije povezan na Tor mrežu" +} diff --git a/desktop/onionshare/resources/locale/sv.json b/desktop/onionshare/resources/locale/sv.json new file mode 100644 index 00000000..d44b3a9e --- /dev/null +++ b/desktop/onionshare/resources/locale/sv.json @@ -0,0 +1,322 @@ +{ + "config_onion_service": "Förbereder onion-tjänsten på port {0:d}.", + "preparing_files": "Komprimera filer.", + "give_this_url": "Ge den här adressen till mottagaren:", + "give_this_url_stealth": "Ge den här adressen och HidServAuth-raden till mottagaren:", + "give_this_url_receive": "Ge denna adress till avsändaren:", + "give_this_url_receive_stealth": "Ge denna adress och HidServAuth till avsändaren:", + "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 port för att starta onion-tjänsten", + "other_page_loaded": "Adress inläst", + "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", + "large_filesize": "Varning: Att skicka en stor delning kan ta timmar", + "systray_menu_exit": "Avsluta", + "systray_download_started_title": "OnionShare Nedladdning Startad", + "systray_download_started_message": "En användare började ladda ner dina filer", + "systray_download_completed_title": "OnionShare Nedladdning Klar", + "systray_download_completed_message": "Användaren har laddat ner dina filer", + "systray_download_canceled_title": "OnionShare Nedladdning Avbruten", + "systray_download_canceled_message": "Användaren avbröt nedladdningen", + "systray_upload_started_title": "OnionShare Uppladdning Påbörjad", + "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_autostop_timer": "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_verbose": "Logga OnionShare fel till stdout och webbfel till hårddisken", + "help_filename": "Lista filer och mappar att dela", + "help_config": "Egenvald sökväg för JSON konfigurationsfil (valfri)", + "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att starta delning", + "gui_add": "Lägg till", + "gui_delete": "Ta bort", + "gui_choose_items": "Välj", + "gui_share_start_server": "Starta delning", + "gui_share_stop_server": "Stoppa delning", + "gui_share_stop_server_autostop_timer": "Stoppa delning ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", + "gui_receive_start_server": "Starta mottagningsläge", + "gui_receive_stop_server": "Stoppa mottagningsläge", + "gui_receive_stop_server_autostop_timer": "Stoppa mottagningsläge ({} kvarstår)", + "gui_receive_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", + "gui_copy_url": "Kopiera adress", + "gui_downloads": "Nedladdningshistorik", + "gui_no_downloads": "Inga Nedladdningar Än", + "gui_canceled": "Avbruten", + "gui_copied_url_title": "OnionShare-adress kopierad", + "gui_copied_url": "OnionShare-adress kopierad till urklipp", + "gui_please_wait": "Startar... klicka för att avbryta.", + "gui_download_upload_progress_complete": "%p%, {0:s} förflutit.", + "gui_download_upload_progress_starting": "{0:s}, %p% (beräknar)", + "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Inte så fort", + "gui_share_quit_warning": "Du håller på att skicka filer. Är du säker på att du vill avsluta OnionShare?", + "gui_receive_quit_warning": "Du håller på att ta emot filer. Är du säker på att du vill avsluta OnionShare?", + "gui_quit_warning_quit": "Avsluta", + "gui_quit_warning_dont_quit": "Avbryt", + "zip_progress_bar_format": "Komprimerar: %p%", + "error_stealth_not_supported": "För att använda klientauktorisering behöver du minst både Tor 0.2.9.1-alpha (eller Tor Browser 6.5) och python3-stem 1.5.0.", + "error_ephemeral_not_supported": "OnionShare kräver minst både Tor 0.2.7.1 och python3-stem 1.4.0.", + "gui_settings_window_title": "Inställningar", + "gui_settings_whats_this": "Vad är det här?", + "gui_settings_stealth_option": "Använd klientauktorisering", + "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: {}", + "gui_settings_autoupdate_timestamp_never": "Aldrig", + "gui_settings_autoupdate_check_button": "Sök efter ny version", + "gui_settings_general_label": "Allmänna inställningar", + "gui_settings_sharing_label": "Delningsinställningar", + "gui_settings_close_after_first_download_option": "Avbryt delning efter att filer har skickats", + "gui_settings_connection_type_label": "Hur ska OnionShare ansluta till Tor?", + "gui_settings_connection_type_bundled_option": "Använd Tor-versionen som är inbyggd i OnionShare", + "gui_settings_connection_type_automatic_option": "Försök med automatisk konfiguration med Tor Browser", + "gui_settings_connection_type_control_port_option": "Anslut med kontrollport", + "gui_settings_connection_type_socket_file_option": "Anslut med socket-fil", + "gui_settings_connection_type_test_button": "Testa anslutning till Tor", + "gui_settings_control_port_label": "Kontrollport", + "gui_settings_socket_file_label": "Socket-fil", + "gui_settings_socks_label": "SOCKS-port", + "gui_settings_authenticate_label": "Tor-autentiseringsinställningar", + "gui_settings_authenticate_no_auth_option": "Ingen autentisering eller kak-autentisering", + "gui_settings_authenticate_password_option": "Lösenord", + "gui_settings_password_label": "Lösenord", + "gui_settings_tor_bridges": "Stöd för Tor-broar", + "gui_settings_tor_bridges_no_bridges_radio_option": "Använd inte broar", + "gui_settings_tor_bridges_obfs4_radio_option": "Använd inbyggda obfs4 pluggbara transporter", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Använd inbyggda obfs4 pluggbara transporter (kräver obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Använd inbyggda meek_lite (Azure) pluggbara transporter", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Använd inbyggda meek_lite (Azure) pluggbara transporter (kräver obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Varning: meek_lite-broarna är mycket kostsamma för att Tor-projektet ska kunna köras.

Använd dem endast om det inte går att ansluta till Tor direkt, via obfs4 transporter eller andra normala broar.", + "gui_settings_tor_bridges_custom_radio_option": "Använd anpassade broar", + "gui_settings_tor_bridges_custom_label": "Du kan få broar från https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Ingen av broarna du lagt till arbete.\nDubbelkolla dem eller lägga till andra.", + "gui_settings_button_save": "Spara", + "gui_settings_button_cancel": "Avbryt", + "gui_settings_button_help": "Hjälp", + "gui_settings_autostop_timer_checkbox": "Använd automatisk stopp-tidtagare", + "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å {}:{}.", + "settings_error_socket_file": "Det går inte att ansluta till Tor-regulatorn med socket-filen {}.", + "settings_error_auth": "Ansluten till {}:{}, men kan inte autentisera. Kanske är det här inte en Tor-regulator?", + "settings_error_missing_password": "Ansluten till Tor-regulatorn, men den kräver ett lösenord för att autentisera.", + "settings_error_unreadable_cookie_file": "Ansluten till Tor-regulatorn, men lösenordet kan vara fel, eller din användare är inte tillåtet att läsa kakfilen.", + "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:\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: {}.", + "error_tor_protocol_error": "Det uppstod 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", + "connecting_to_tor": "Ansluter till Tor-nätverket", + "update_available": "Ny OnionShare utgiven. Klicka här för att få den.

Du använder {} och den senaste är {}.", + "update_error_check_error": "Det gick inte att söka efter ny version: Kanske är du inte ansluten till Tor eller OnionShare-webbplatsen är nere?", + "update_error_invalid_latest_version": "Det gick inte att söka efter ny version: OnionShare-webbplatsen säger att den senaste versionen är den oigenkännliga \"{}\"…", + "update_not_available": "Du kör den senaste OnionShare.", + "gui_tor_connection_ask": "Öppna inställningarna för att reda ut anslutning till Tor?", + "gui_tor_connection_ask_open_settings": "Ja", + "gui_tor_connection_ask_quit": "Avsluta", + "gui_tor_connection_error_settings": "Försök att ä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 igen och ställ in anslutningen till Tor.", + "gui_tor_connection_lost": "Frånkopplad från Tor.", + "gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-tidtagaren löpte ut innan servern startades.\nVänligen gör en ny delning.", + "gui_server_autostop_timer_expired": "Den automatiska stopp-tidtagaren har redan löpt ut. Vänligen justera den för att starta delning.", + "share_via_onionshare": "Dela med OnionShare", + "gui_save_private_key_checkbox": "Använd en beständig adress", + "gui_share_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan ladda ner dina filer med hjälp av Tor Browser: ", + "gui_receive_url_description": "Alla med denna OnionShare-adress och privata nyckel kan ladda upp filer till din dator med Tor Browser: ", + "gui_url_label_persistent": "Denna delning kommer inte automatiskt att avslutas.
< br>Varje efterföljande delning återanvänder adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)", + "gui_url_label_stay_open": "Denna delning kommer inte automatiskt att avslutas.", + "gui_url_label_onetime": "Denna delning kommer att sluta efter första slutförandet.", + "gui_url_label_onetime_and_persistent": "Denna delning kommer inte automatiskt att avslutas.
< br>Varje efterföljande delning kommer att återanvända adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)", + "gui_status_indicator_share_stopped": "Redo att dela", + "gui_status_indicator_share_working": "Startar…", + "gui_status_indicator_share_started": "Delar", + "gui_status_indicator_receive_stopped": "Redo att ta emot", + "gui_status_indicator_receive_working": "Startar…", + "gui_status_indicator_receive_started": "Tar emot", + "gui_file_info": "{} filer, {}", + "gui_file_info_single": "{} fil, {}", + "history_in_progress_tooltip": "{} pågår", + "history_completed_tooltip": "{} slutförda", + "info_in_progress_uploads_tooltip": "{} pågående sändning(ar)", + "info_completed_uploads_tooltip": "{} sändning(ar) slutförd(a)", + "error_cannot_create_downloads_dir": "Det gick inte att skapa mappen mottagningsläge: {}", + "receive_mode_downloads_dir": "Filer som skickas till dig visas i den här mappen: {}", + "receive_mode_warning": "Varning: Mottagningsläge låter personer skicka filer till din dator. Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Bara öppna saker från personer du litar på, eller om du vet vad du gör.", + "gui_receive_mode_warning": "Mottagningsläget låter personer skicka filer till din dator.

Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Öppna endast saker från personer du litar på eller om du vet vad du gör.", + "receive_mode_upload_starting": "Sändning av total storlek {} börjar", + "receive_mode_received_file": "Mottaget: {}", + "gui_mode_share_button": "Dela filer", + "gui_mode_receive_button": "Ta emot filer", + "gui_settings_receiving_label": "Mottagningsinställningar", + "gui_settings_downloads_label": "Spara filer till", + "gui_settings_downloads_button": "Bläddra", + "gui_settings_public_mode_checkbox": "Offentligt läge", + "systray_close_server_title": "OnionShare-servern stängd", + "systray_close_server_message": "En användare stängde servern", + "systray_page_loaded_title": "Sidan lästes in", + "systray_download_page_loaded_message": "En användare läste in hämtningssidan", + "systray_upload_page_loaded_message": "En användare läste in sändningssidan", + "gui_uploads": "Sändningshistoriken", + "gui_no_uploads": "Inga sändningar ännu", + "gui_clear_history": "Rensa alla", + "gui_upload_in_progress": "Sändning påbörjad {}", + "gui_upload_finished_range": "Skickade {} till {}", + "gui_upload_finished": "Skickade {}", + "gui_download_in_progress": "Hämtning påbörjad {}", + "gui_open_folder_error_nautilus": "Det går inte att öppna mappen eftersom nautilus inte är tillgänglig. Filen är här: {}", + "gui_settings_language_label": "Föredraget språk", + "gui_settings_language_changed_notice": "Starta om OnionShare för att din språkändring ska träda i kraft.", + "gui_add_files": "Lägg till filer", + "gui_add_folder": "Lägg till mapp", + "gui_connect_to_tor_for_onion_settings": "Anslut till Tor för att se onion-tjänst-inställningar", + "error_cannot_create_data_dir": "Det gick inte att skapa OnionShare-datamapp: {}", + "receive_mode_data_dir": "Filer som skickas till dig visas i den här mappen: {}", + "gui_settings_data_dir_label": "Spara filer i", + "gui_settings_data_dir_browse_button": "Bläddra", + "systray_page_loaded_message": "OnionShare-adress lästes in", + "systray_share_started_title": "Delningen startades", + "systray_share_started_message": "Startar sändning av filer till någon", + "systray_share_completed_title": "Delning klar", + "systray_share_completed_message": "Filerna skickades", + "systray_share_canceled_title": "Delning avbruten", + "systray_share_canceled_message": "Någon har avbrutit att ta emot dina filer", + "systray_receive_started_title": "Mottagning startad", + "systray_receive_started_message": "Någon skickar filer till dig", + "gui_all_modes_history": "Historik", + "gui_all_modes_clear_history": "Rensa alla", + "gui_all_modes_transfer_started": "Startades {}", + "gui_all_modes_transfer_finished_range": "Överförd {} - {}", + "gui_all_modes_transfer_finished": "Överförd {}", + "gui_all_modes_progress_complete": "%p%, {0} förflutit.", + "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_autostop_timer_waiting": "Väntar på att avsluta sändningen", + "gui_receive_mode_no_files": "Inga filer har mottagits ännu", + "gui_receive_mode_autostop_timer_waiting": "Väntar på att ta emot mottagningen", + "gui_all_modes_transfer_canceled_range": "Avbröt {} - {}", + "gui_all_modes_transfer_canceled": "Avbröt {}", + "gui_settings_onion_label": "Inställningar för Onion", + "gui_stop_server_autostop_timer_tooltip": "Automatisk stopp-tidtagare slutar vid {}", + "gui_start_server_autostart_timer_tooltip": "Automatisk start-tidtagare slutar vid {}", + "gui_waiting_to_start": "Planeras starta om {}. Klicka för att avbryta.", + "gui_settings_autostart_timer_checkbox": "Använd automatisk start-tidtagare", + "gui_settings_autostart_timer": "Starta delning vid:", + "gui_server_autostart_timer_expired": "Den schemalagda tiden har redan passerat. Vänligen justera den för att starta delning.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än den automatiska starttiden. Vänligen justera den för att starta delning.", + "gui_status_indicator_share_scheduled": "Planerad…", + "gui_status_indicator_receive_scheduled": "Planerad…", + "days_first_letter": "d", + "hours_first_letter": "t", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "gui_website_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan besöka din webbplats med hjälp av Tor Browser: ", + "gui_mode_website_button": "Publicera webbplats", + "systray_site_loaded_title": "Webbplats inläst", + "systray_site_loaded_message": "OnionShare-webbplats inläst", + "systray_website_started_title": "Börjar dela webbplats", + "systray_website_started_message": "Någon besöker din webbplats", + "gui_website_mode_no_files": "Ingen webbplats delas ännu", + "gui_visit_started": "Någon har besökt din webbplats {}", + "incorrect_password": "Felaktigt lösenord", + "gui_settings_individual_downloads_label": "Avmarkera för att tillåta hämtning av enskilda filer", + "history_requests_tooltip": "{} webbförfrågningar", + "systray_individual_file_downloaded_title": "Enskild fil inläst", + "systray_individual_file_downloaded_message": "Individuell fil {} visad", + "gui_settings_website_label": "Webbplatsinställningar", + "gui_settings_csp_header_disabled_option": "Inaktivera rubriken för innehållssäkerhetspolicy", + "gui_close_tab_warning_persistent_description": "Denna flik är beständig. Om du stänger den förlorar du onion-adressen som den använder. Är du säker på att du vill stänga den?", + "mode_settings_website_disable_csp_checkbox": "Inaktivera rubriken för innehållssäkerhetspolicy (tillåter din webbplats att använda resurser från tredje part)", + "mode_settings_receive_data_dir_browse_button": "Bläddra", + "mode_settings_receive_data_dir_label": "Spara filer till", + "mode_settings_share_autostop_sharing_checkbox": "Stoppa delning efter att filer har skickats (avmarkera för att tillåta hämtning av enskilda filer)", + "mode_settings_legacy_checkbox": "Använd en äldre adress (v2-oniontjänst, rekommenderas inte)", + "mode_settings_autostart_timer_checkbox": "Starta oniontjänsten vid schemalagd tid", + "mode_settings_autostop_timer_checkbox": "Stoppa oniontjänsten vid schemalagd tid", + "mode_settings_public_checkbox": "Detta är en offentlig OnionShare-tjänst (inaktiverar den privata nyckeln)", + "mode_settings_persistent_checkbox": "Spara denna flik och öppna den automatiskt när jag öppnar OnionShare", + "mode_settings_advanced_toggle_hide": "Dölj avancerade inställningar", + "mode_settings_advanced_toggle_show": "Visa avancerade inställningar", + "gui_quit_warning_cancel": "Avbryt", + "gui_quit_warning_description": "Delning är aktiv i några av dina flikar. Om du avslutar stängs alla dina flikar. Är du säker på att du vill avsluta?", + "gui_quit_warning_title": "Är du säker?", + "gui_close_tab_warning_cancel": "Avbryt", + "gui_close_tab_warning_close": "Stäng", + "gui_close_tab_warning_website_description": "Du är aktivt värd för en webbplats. Är du säker på att du vill stänga denna flik?", + "gui_close_tab_warning_receive_description": "Du håller på att ta emot filer. Är du säker på att du vill stänga denna flik?", + "gui_close_tab_warning_share_description": "Du håller på att skicka filer. Är du säker på att du vill stänga denna flik?", + "gui_close_tab_warning_title": "Är du säker?", + "gui_new_tab_website_description": "Var värd till en statisk HTML-onionwebbplats från din dator.", + "gui_new_tab_website_button": "Publicera webbplats", + "gui_new_tab_receive_description": "Förvandla din dator till en dropbox på nätet. Personer kommer att kunna använda Tor Browser för att skicka filer till din dator.", + "gui_new_tab_receive_button": "Ta emot filer", + "gui_new_tab_share_description": "Välj filer på din dator för att skicka till någon annan. Den eller de personer som du vill skicka filer till måste använda Tor Browser för att hämta dem från dig.", + "gui_new_tab_share_button": "Dela filer", + "gui_new_tab_tooltip": "Öppna en ny flik", + "gui_new_tab": "Ny flik", + "gui_qr_code_description": "Skanna den här QR-koden med en QR-läsare, till exempel kameran på din telefon, för att lättare kunna dela OnionShare-adressen med någon.", + "gui_qr_code_dialog_title": "OnionShare QR-kod", + "gui_show_qr_code": "Visa QR-kod", + "gui_receive_flatpak_data_dir": "Eftersom du installerade OnionShare med Flatpak måste du spara filer i en mapp i ~/OnionShare.", + "gui_chat_stop_server": "Stoppa chattservern", + "gui_chat_start_server": "Starta chattservern", + "gui_file_selection_remove_all": "Ta bort alla", + "gui_remove": "Ta bort", + "gui_main_page_share_button": "Starta delning", + "error_port_not_available": "OnionShare-porten är inte tillgänglig", + "gui_rendezvous_cleanup_quit_early": "Avsluta tidigt", + "gui_rendezvous_cleanup": "Väntar på att Tor-kretsar stänger för att vara säker på att dina filer har överförts.\n\nDet kan ta några minuter.", + "gui_tab_name_chat": "Chatt", + "gui_tab_name_website": "Webbplats", + "gui_tab_name_receive": "Ta emot", + "gui_tab_name_share": "Dela", + "gui_main_page_chat_button": "Börja chatta", + "gui_main_page_website_button": "Börja publicera", + "gui_main_page_receive_button": "Starta mottagning", + "gui_new_tab_chat_button": "Chatta anonymt", + "gui_open_folder_error": "Det gick inte att öppna mappen med xdg-open. Filen finns här: {}", + "gui_chat_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan gå med i detta chattrum med hjälp av Tor Browser: ", + "gui_status_indicator_chat_stopped": "Redo att chatta", + "gui_status_indicator_chat_scheduled": "Schemalagd…", + "history_receive_read_message_button": "Läs meddelandet", + "mode_settings_receive_webhook_url_checkbox": "Använd aviseringswebhook", + "mode_settings_receive_disable_files_checkbox": "Inaktivera uppladdning av filer", + "mode_settings_receive_disable_text_checkbox": "Inaktivera att skicka text", + "mode_settings_title_label": "Anpassad titel", + "gui_color_mode_changed_notice": "Starta om OnionShare för att det nya färgläget ska tillämpas.", + "gui_status_indicator_chat_started": "Chattar", + "gui_status_indicator_chat_working": "Startar…", + "gui_chat_url_public_description": "Alla med denna OnionShare-adress kan gå med i detta chattrum med Tor Browser: ", + "gui_settings_theme_dark": "Dark", + "gui_settings_theme_light": "Light", + "gui_settings_theme_auto": "Automatiskt", + "gui_settings_theme_label": "Tema", + "gui_client_auth_instructions": "Skicka sedan den privata nyckeln för att ge åtkomst till din OnionShare -tjänst:", + "gui_url_instructions_public_mode": "Skicka OnionShare-adressen nedan:", + "gui_url_instructions": "Skicka först OnionShare-adressen nedan:", + "gui_receive_url_public_description": "Alla med denna OnionShare-adress kan ladda upp filer till din dator med Tor Browser: ", + "gui_website_url_public_description": "Alla med denna OnionShare-adress kan besöka din webbplats med Tor Browser: ", + "gui_share_url_public_description": "Alla med denna OnionShare-adress kan hämta dina filer med Tor Browser: ", + "gui_server_doesnt_support_stealth": "Tyvärr stöder den här versionen av Tor inte stealth (klientautentisering). Försök med en nyare version av Tor, eller använd det offentliga läget om det inte behöver vara privat.", + "gui_please_wait_no_button": "Startar…", + "gui_hide": "Dölja", + "gui_reveal": "Visa", + "gui_qr_label_auth_string_title": "Privat nyckel", + "gui_qr_label_url_title": "OnionShare-adress", + "gui_copied_client_auth": "Privat nyckel kopierad till Urklipp", + "gui_copied_client_auth_title": "Kopierad privat nyckel", + "gui_copy_client_auth": "Kopiera den privata nyckeln", + "gui_tor_settings_window_title": "Torinställningar", + "gui_settings_controller_extras_label": "Torinställningar", + "gui_dragdrop_sandbox_flatpak": "För att göra Flatpak mer säkert, är dra och släpp inte tillåtet. Använd Lägg till filer och Lägg till katalog knapparna för att bläddra efter filer istället." +} diff --git a/desktop/onionshare/resources/locale/sw.json b/desktop/onionshare/resources/locale/sw.json new file mode 100644 index 00000000..31eb72c5 --- /dev/null +++ b/desktop/onionshare/resources/locale/sw.json @@ -0,0 +1,169 @@ +{ + "preparing_files": "", + "not_a_readable_file": "", + "no_available_port": "", + "other_page_loaded": "", + "close_on_autostop_timer": "", + "closing_automatically": "", + "large_filesize": "", + "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_autostop_timer": "", + "gui_stop_server_autostop_timer_tooltip": "", + "gui_start_server_autostart_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_copy_url": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "gui_waiting_to_start": "", + "gui_please_wait": "", + "gui_quit_title": "", + "gui_share_quit_warning": "", + "gui_receive_quit_warning": "", + "gui_quit_warning_quit": "", + "gui_quit_warning_dont_quit": "", + "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_autoupdate_label": "", + "gui_settings_autoupdate_option": "", + "gui_settings_autoupdate_timestamp": "", + "gui_settings_autoupdate_timestamp_never": "", + "gui_settings_autoupdate_check_button": "", + "gui_settings_general_label": "Mipangilio ya kawaida", + "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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "gui_settings_autostart_timer_checkbox": "", + "gui_settings_autostart_timer": "", + "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": "", + "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": "Ndio", + "gui_tor_connection_ask_quit": "", + "gui_tor_connection_error_settings": "", + "gui_tor_connection_canceled": "", + "gui_tor_connection_lost": "", + "gui_server_started_after_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "gui_server_autostart_timer_expired": "", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", + "share_via_onionshare": "", + "gui_connect_to_tor_for_onion_settings": "", + "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_scheduled": "", + "gui_status_indicator_share_started": "", + "gui_status_indicator_receive_stopped": "", + "gui_status_indicator_receive_working": "", + "gui_status_indicator_receive_scheduled": "", + "gui_status_indicator_receive_started": "", + "gui_file_info": "", + "gui_file_info_single": "", + "history_in_progress_tooltip": "", + "history_completed_tooltip": "", + "error_cannot_create_data_dir": "", + "gui_receive_mode_warning": "", + "gui_mode_share_button": "", + "gui_mode_receive_button": "", + "gui_settings_receiving_label": "", + "gui_settings_data_dir_label": "", + "gui_settings_data_dir_browse_button": "Vinjari", + "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_autostop_timer_waiting": "", + "gui_receive_mode_no_files": "", + "gui_receive_mode_autostop_timer_waiting": "", + "receive_mode_upload_starting": "", + "days_first_letter": "", + "hours_first_letter": "", + "minutes_first_letter": "", + "seconds_first_letter": "" +} diff --git a/desktop/onionshare/resources/locale/te.json b/desktop/onionshare/resources/locale/te.json new file mode 100644 index 00000000..d1784090 --- /dev/null +++ b/desktop/onionshare/resources/locale/te.json @@ -0,0 +1,170 @@ +{ + "preparing_files": "దస్త్రాలు కుదించబడుతున్నాయి.", + "not_a_readable_file": "{0:s} చదువగలిగిన దస్త్రం కాదు.", + "no_available_port": "Onion సేవను మొదలుపెట్టుటకై ఒక అనువైన పోర్టు కనబడలేదు", + "other_page_loaded": "జాల చిరునామా లోడు చేయబడినది", + "close_on_autostop_timer": "స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది కనుక ఆపివేయబడినది", + "closing_automatically": "బదిలీ పూర్తి అయినందున ఆపబడినది", + "large_filesize": "హెచ్చరిక: ఒక పెద్ద అంశాన్ని పంపించడానికి కొన్ని గంటలు పట్టవచ్చు", + "gui_drag_and_drop": "దస్త్రాలను, సంచయాలను లాగి వదలండి\nవాటిని పంచుకోవడం మొదలుపెట్టుటకు", + "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_autostop_timer": "పంచుకోవడం ఆపివేయి ({})", + "gui_stop_server_autostop_timer_tooltip": "స్వీయ నియంత్రణ సమయం అయిపోయినది", + "gui_start_server_autostart_timer_tooltip": "స్వీయ నియంత్రణ సమయం అయిపోయినది", + "gui_receive_start_server": "స్వీకరించు రీతిని మొదలుపెట్టు", + "gui_receive_stop_server": "స్వీకరించు రీతిని ఆపివేయి", + "gui_receive_stop_server_autostop_timer": "స్వీకరించు రీతిని ఆపివేయి ({} మిగిలినది)", + "gui_copy_url": "జాల చిరునామాను నకలు తీయి", + "gui_canceled": "రద్దు చేయబడినది", + "gui_copied_url_title": "OnionShare జాల చిరునామా నకలు తీయబడినది", + "gui_copied_url": "OnionShare జాల చిరునామా క్లిప్‌బోర్డునకు నకలు తీయబడినది", + "gui_waiting_to_start": "ఇంకా {}లో మొదలగునట్లు అమర్చబడినది. రద్దుచేయుటకై ఇక్కడ నొక్కు.", + "gui_please_wait": "మొదలుపెట్టబడుతుంది... రద్దు చేయుటకై ఇక్కడ నొక్కు.", + "gui_quit_title": "అంత త్వరగా కాదు", + "gui_share_quit_warning": "మీరు దస్త్రాలను పంపించే క్రమంలో ఉన్నారు. మీరు నిశ్చయంగా ఇప్పుడు OnionShareని విడిచి వెళ్ళాలనుకుంటున్నారా?", + "gui_receive_quit_warning": "మీరు దస్త్రాలను స్వీకరించే క్రమంలో ఉన్నారు. మీరు నిశ్చయంగా ఇప్పుడు OnionShareని విడిచి వెళ్ళాలనుకుంటున్నారా?", + "gui_quit_warning_quit": "నిష్క్రమించు", + "gui_quit_warning_dont_quit": "రద్దుచేయి", + "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 మరియు python-3-stem 1.4.0, ఈ రెండూ ఉండాలి.", + "gui_settings_window_title": "అమరికలు", + "gui_settings_whats_this": "ఇది ఏమిటి?", + "gui_settings_stealth_option": "ఉపయోక్త ధ్రువీకరణను వాడు", + "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": "Onion అమరికలు", + "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 విహారిణిని వాడి స్వయంచాలక ఆకృతీకరణకు ప్రయత్నించు", + "gui_settings_connection_type_control_port_option": "నియంత్రణ పోర్టును వాడి అనుసంధానం చేయి", + "gui_settings_connection_type_socket_file_option": "సాకెట్ దస్త్రాన్ని వాడి అనుసంధానం చేయి", + "gui_settings_connection_type_test_button": "Torకు అనుసంధానతను పరీక్షించు", + "gui_settings_control_port_label": "నియంత్రణ చేయు పోర్టు", + "gui_settings_socket_file_label": "సాకెట్ దస్త్రం", + "gui_settings_socks_label": "SOCKS పోర్టు", + "gui_settings_authenticate_label": "Tor ధ్రువీకరణ అమరికలు", + "gui_settings_authenticate_no_auth_option": "ధృవీకరణ లేకుండా, లేదా కుకీ ధ్రువీకరణ", + "gui_settings_authenticate_password_option": "సంకేతపుమాట", + "gui_settings_password_label": "సంకేతపుమాట", + "gui_settings_tor_bridges": "Tor బ్రిడ్జి మద్దతు", + "gui_settings_tor_bridges_no_bridges_radio_option": "బ్రిడ్జిలు వాడవద్దు", + "gui_settings_tor_bridges_obfs4_radio_option": "అంతర్నిర్మిత obfs4 అనుసంధానయుక్త మాధ్యమాలు వాడు", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "అంతర్నిర్మిత obfs4 అనుసంధానయుక్త మాధ్యమాలు వాడు (obfs4proxy కావాలి)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "అంతర్నిర్మిత meek_lite (Azure) అనుసంధానయుక్త మాధ్యమాలు వాడు", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "అంతర్నిర్మిత meek_lite (Azure) అనుసంధానయుక్త మాధ్యమాలు వాడు (obfs4proxy కావాలి)", + "gui_settings_meek_lite_expensive_warning": "హెచ్చరిక: tor వ్యవస్థను meek_lite బ్రిడ్జిల ద్వారా నడపడం చాలా ఖర్చుతో కూడిన పని.

మీరు obfs4 మాధ్యమాల ద్వారా లేదా వేరే మామూలు బ్రిడ్జిల ద్వారా torకు సూటిగా అనుసంధానించలేని పక్షంలోనే వాటిని వాడండి.", + "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_button_save": "భద్రపరచు", + "gui_settings_button_cancel": "రద్దుచేయి", + "gui_settings_button_help": "సహాయం", + "gui_settings_autostop_timer_checkbox": "స్వయంచాలితంగా ఆగు సమయ సూచీని వాడు", + "gui_settings_autostop_timer": "ఇక్కడ పంచినది ఆపు:", + "gui_settings_autostart_timer_checkbox": "స్వయంచాలితంగా మొదలయ్యే సమయ సూచీని వాడు", + "gui_settings_autostart_timer": "ఇక్కడ పంచినది మొదలుపెట్టు:", + "settings_error_unknown": "మీ అమరికలు సరైనవిగా లేవు కనుక టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", + "settings_error_automatic": "Tor నియంత్రణకర్తకు అనుసంధానం కాలేకపోతుంది. Tor విహారిణి (torproject.org నుండి లభ్యం) వెనుతలంలో పనిచేస్తుందా?", + "settings_error_socket_port": "{}:{} వద్ద టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", + "settings_error_socket_file": "సాకెట్ దస్త్రం {} ద్వారా టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", + "settings_error_auth": "{}:{} వద్ద అనుసంధానించబడినది, కానీ ధ్రువపరచబడలేదు. ఇది టార్ నియంత్రిత కాదేమో?", + "settings_error_missing_password": "Tor నియంత్రితకు అనుసంధానించబడినది, కానీ ధ్రువపరచడానికి ఒక సంకేతపుమాట అవసరం.", + "settings_error_unreadable_cookie_file": "Tor నియంత్రితకు అనుసంధానించబడినది, కానీ సంకేతపుమాట సరైనది కాకపోవచ్చు, లేదా మీ వాడుకరికి కుకీ దస్త్రాన్ని చదవడానికి అనుమతి లేకపోవచ్చు.", + "settings_error_bundled_tor_not_supported": "OnionShareతో పాటు వచ్చిన Tor రూపాంతరం విండోస్ లేదా మాక్ఓఎస్‌లో అభివృద్ధి రీతిలో పనిచేయదు.", + "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 చిరునామాలకు మద్దతు ఉంది: {}.", + "error_tor_protocol_error": "Torతో పనిచేయుటలో ఒక దోషం కనబడింది: {}", + "error_tor_protocol_error_unknown": "Torతో పనిచేయుటలో ఒక తెలియని దోషం కనబడింది", + "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_autostop_timer": "సర్వరు మొదలయ్యేలోపే స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది. ఒక కొత్త అంశాన్ని పంచుకోండి.", + "gui_server_autostop_timer_expired": "స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది. పంచుకోవడం మొదలుపెట్టడానికి దానిని నవీకరించండి.", + "gui_server_autostart_timer_expired": "నిర్ణీత సమయం ఇప్పటికే దాటిపోయింది. పంచుకోవడం ప్రారంభించడం కొరకు దయచేసి దానిని నవీకరించండి.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "స్వయంచాలక ఆగు సమయం అనేది స్వయంచాలక ప్రారంభ సమయంతో సమానంగా లేదా అంతకు ముందు ఉండకూడదు. పంచుకోవడం ప్రారంభించడం కొరకు దయచేసి దానిని నవీకరించండి.", + "share_via_onionshare": "OnionShare చేయి", + "gui_connect_to_tor_for_onion_settings": "Onion సేవా అమరికలను చూచుటకు Torతో అనుసంధానించు", + "gui_save_private_key_checkbox": "ఒక నిరంతర చిరునామాను వాడు", + "gui_share_url_description": "ఈOnionShare చిరునామా గల ఎవరైనా మీ దస్త్రాలను Tor విహారిణితో దింపుకోవచ్చు: ", + "gui_receive_url_description": "ఈOnionShare చిరునామా గల ఎవరైనా మీ దస్త్రాలను Tor విహారిణితో ఎక్కించుకోవచ్చు:", + "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_scheduled": "షెడ్యూల్…", + "gui_status_indicator_share_started": "పంచుకొంటుంది", + "gui_status_indicator_receive_stopped": "స్వీకరణకు సిద్ధం", + "gui_status_indicator_receive_working": "మొదలుపెడుతుంది…", + "gui_status_indicator_receive_scheduled": "షెడ్యూల్…", + "gui_status_indicator_receive_started": "స్వీకరిస్తుంది", + "gui_file_info": "{} దస్త్రాలు, {}", + "gui_file_info_single": "{} దస్త్రము, {}", + "history_in_progress_tooltip": "{} పని జరుగుతూ ఉంది", + "history_completed_tooltip": "{} అయిపోయింది", + "error_cannot_create_data_dir": "OnionShare దత్త సంచయం: {}ని సృష్టించడం జరగలేదు", + "gui_receive_mode_warning": "స్వీకరించు రీతి వ్యక్తులు మీ కంప్యూటరుకు దస్త్రాలను ఎక్కించడానికి అనుమతినిస్తుంది.

కొన్ని దస్త్రాలను మీరు తెరిస్తే అవి అవశ్యం మీ కంప్యూటరును నియంత్రించగలవు. కనుక మీరు విశ్వసించే వ్యక్తులనుండి వచ్చిన వాటినే తెరవండి, లేదా మీరేం చేస్తున్నారో మీకు అవగాహన ఉంటేనే తెరవండి.", + "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": "nautilus అందుబాటులో లేనందున సంచయం తెరువబడలేదు. దస్త్రం ఇక్కడుంది: {}", + "gui_settings_language_label": "ఎంచుకున్న భాష", + "gui_settings_language_changed_notice": "మీరు మార్చిన భాష అమలులోకి రావడానికి OnionShareని పునఃప్రారంభించండి.", + "systray_menu_exit": "నిష్క్రమించు", + "systray_page_loaded_title": "పుట లోడు చేయబడినది", + "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_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": "%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": "ఇంకా ఏ దస్త్రాలు పంపబడలేదు", + "gui_share_mode_autostop_timer_waiting": "పంపుట పూర్తి అగుటకు వేచిచూడడం జరుగుతున్నది", + "gui_receive_mode_no_files": "ఇంకా ఏ దస్త్రాలు స్వీకరించబడలేదు", + "gui_receive_mode_autostop_timer_waiting": "స్వీకరణ పూర్తి అగుటకు వేచిచూడడం జరుగుతున్నది", + "receive_mode_upload_starting": "పూర్తి పరిమాణం {} గల ఎక్కింపు మొదలవుతుంది", + "days_first_letter": "d", + "hours_first_letter": "h", + "minutes_first_letter": "m", + "seconds_first_letter": "s", + "incorrect_password": "తప్పు పాస్వర్డ్" +} diff --git a/desktop/onionshare/resources/locale/tr.json b/desktop/onionshare/resources/locale/tr.json new file mode 100644 index 00000000..dc792c27 --- /dev/null +++ b/desktop/onionshare/resources/locale/tr.json @@ -0,0 +1,308 @@ +{ + "preparing_files": "Dosyalar sıkıştırılıyor.", + "give_this_url": "Bu adresi alıcıya verin:", + "ctrlc_to_stop": "Sunucuyu durdurmak için, Ctrl+C'ye basın", + "not_a_file": "{0:s} dosya değil.", + "other_page_loaded": "Adres yüklendi", + "closing_automatically": "Aktarım tamamlandığından durduruldu", + "large_filesize": "Uyarı: Büyük bir paylaşım saatler sürebilir", + "help_local_only": "Tor kullanmayın (sadece geliştirme için)", + "help_stay_open": "Dosyalar gönderildikten sonra paylaşmaya devam et", + "help_debug": "OnionShare hatalarını stdout'a ve web hatalarını diske yaz", + "help_filename": "Paylaşmak için dosya ve klasörler listesi", + "gui_drag_and_drop": "Paylaşıma başlamak için dosya ve klasörleri sürükleyip bırakın", + "gui_add": "Ekle", + "gui_delete": "Sil", + "gui_choose_items": "Seç", + "gui_share_start_server": "Paylaşımı başlat", + "gui_share_stop_server": "Paylaşımı durdur", + "gui_copy_url": "Adresi kopyala", + "gui_downloads": "İndirilenler:", + "gui_canceled": "İptal edilen", + "gui_copied_url": "OnionShare adresi panoya kopyalandı", + "gui_please_wait": "Başlatılıyor... İptal etmek için tıklayın.", + "zip_progress_bar_format": "Sıkıştırılıyor: %p%", + "config_onion_service": "{0:d} bağlantı noktasında onion servisini ayarla.", + "give_this_url_receive": "Bu adresi gönderene ver:", + "not_a_readable_file": "{0:s} okunabilir bir dosya değil.", + "no_available_port": "Onion hizmetinin başlatılacağı uygun bir kapı numarası bulunamadı", + "close_on_autostop_timer": "Otomatik durdurma sayacı sona erdiğinden durduruldu", + "give_this_url_stealth": "Bu adresi ve HidServAuth hattını alıcıya verin:", + "give_this_url_receive_stealth": "Bu adresi ve HidServAuth'u gönderene verin:", + "help_autostop_timer": "Belirli bir saniye sonra paylaşmayı durdur", + "help_stealth": "İstemci yetkilendirmesini kullan (gelişmiş)", + "help_receive": "Paylaşımı göndermek yerine, almak", + "help_config": "Özel JSON config dosyası konumu (isteğe bağlı)", + "gui_add_files": "Dosya ekle", + "gui_add_folder": "Klasör ekle", + "gui_share_stop_server_autostop_timer": "Paylaşımı durdur ({})", + "gui_share_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter", + "gui_receive_start_server": "Alma kipini başlat", + "gui_receive_stop_server": "Alma kipini durdur", + "gui_receive_stop_server_autostop_timer": "Alma kipini durdur ({} kaldı)", + "gui_receive_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter", + "gui_copied_url_title": "OnionShare adresi kopyalandı", + "version_string": "OnionShare {0:s} | https://onionshare.org/", + "gui_quit_title": "Çok hızlı değil", + "gui_share_quit_warning": "Dosya gönderiyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?", + "gui_receive_quit_warning": "Dosya alıyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?", + "gui_quit_warning_quit": "Çık", + "gui_quit_warning_dont_quit": "İptal", + "error_stealth_not_supported": "İstemci kimlik doğrulamasını kullanmak için, en az Tor 0.2.9.1-alpha (ya da Tor Browser 6.5) ve python3-stem 1.5.0 sürümleri gereklidir.", + "error_ephemeral_not_supported": "OnionShare için en az Tor 0.2.7.1 ve python3-stem 1.4.0 sürümleri gereklidir.", + "gui_settings_window_title": "Ayarlar", + "gui_settings_whats_this": "Bu nedir?", + "gui_settings_stealth_option": "İstemci kimlik doğrulaması kullanılsın", + "gui_settings_autoupdate_label": "Yeni sürümü denetle", + "gui_settings_autoupdate_option": "Yeni bir sürüm yayınlandığında haber ver", + "gui_settings_autoupdate_timestamp": "Son denetleme: {}", + "gui_settings_autoupdate_timestamp_never": "Hiçbir zaman", + "gui_settings_autoupdate_check_button": "Güncelleme denetimi", + "gui_settings_general_label": "Genel ayarlar", + "gui_settings_onion_label": "Onion ayarları", + "gui_settings_sharing_label": "Paylaşım ayarları", + "gui_settings_close_after_first_download_option": "Dosyalar gönderildikten sonra paylaşım durdurulsun", + "gui_settings_connection_type_label": "OnionShare ile Tor bağlantısı nasıl kurulmalı?", + "gui_settings_connection_type_bundled_option": "OnionShare üzerindeki Tor sürümü kullanılsın", + "gui_settings_connection_type_automatic_option": "Tor Browser ile otomatik yapılandırma denensin", + "gui_settings_connection_type_control_port_option": "Denetim kapı numarası kullanılarak bağlanılsın", + "gui_settings_connection_type_socket_file_option": "Soket dosyası kullanılarak bağlantı kurulsun", + "gui_settings_connection_type_test_button": "Tor bağlantısını sına", + "gui_settings_control_port_label": "Denetim kapı numarası", + "gui_settings_socket_file_label": "Soket dosyası", + "gui_settings_socks_label": "SOCKS kapı numarası", + "gui_settings_authenticate_label": "Tor kimlik doğrulama ayarları", + "gui_settings_authenticate_no_auth_option": "Kimlik doğrulama yok, veya çerez doğrulaması", + "gui_settings_authenticate_password_option": "Parola", + "gui_settings_password_label": "Parola", + "gui_settings_tor_bridges": "Tor köprüsü kullanarak bağlanılsın mı?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Köprüler kullanılmasın", + "gui_settings_tor_bridges_obfs4_radio_option": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", + "gui_settings_meek_lite_expensive_warning": "Uyarı: meek-azure köprülerini çalıştırmak Tor Projesine pahalıya patlıyor.

Bu köprüleri yalnızca Tor ile doğrudan veya obfs4 ve diğer normal köprüler üzerinden bağlantı kuramıyorsanız kullanın.", + "gui_settings_tor_bridges_custom_radio_option": "Özel köprüler kullanılsın", + "gui_settings_tor_bridges_custom_label": "Köprüleri https://bridges.torproject.org adresinden alabilirsiniz", + "gui_settings_tor_bridges_invalid": "Eklediğiniz köprülerin hiçbiri çalışmıyor. İki kez denetleyin veya başka köprüler ekleyin.", + "gui_settings_button_save": "Kaydet", + "gui_settings_button_cancel": "İptal", + "gui_settings_button_help": "Yardım", + "gui_settings_autostop_timer_checkbox": "Otomatik durdurma sayacı kullanılsın", + "gui_settings_autostop_timer": "Paylaşımı durdurma zamanı:", + "settings_error_unknown": "Ayarlarınız mantıklı olmadığından Tor denetleyicisine bağlanılamıyor.", + "settings_error_automatic": "Tor denetleyicisi ile bağlantı kurulamadı. Arka planda Tor Browser (torproject.org adresinden alınabilir) çalışıyor olabilir mi?", + "settings_error_socket_port": "{}:{} adresinden Tor denetleyicisi ile bağlantı kurulamadı.", + "settings_error_socket_file": "{} socket dosyası kullanılarak Tor denetleyicisi ile bağlantı kurulamadı.", + "settings_error_auth": "{}:{} bağlantısı kuruldu, ancak kimlik doğrulaması yapılamadı. Bu bir Tor denetleyicisi olmayabilir mi?", + "settings_error_missing_password": "Tor denetleyicisi ile bağlantı kuruldu, ancak kimlik doğrulaması için parola gerekiyor.", + "settings_error_unreadable_cookie_file": "Tor denetleyicisi ile bağlantı kuruldu, ancak parola yanlış ya da kullanıcının çerez dosyasını okumasına izin verilmiyor.", + "settings_error_bundled_tor_not_supported": "OnionShare ile birlikte gelen Tor sürümünü kullanmak, Windows veya macOS üzerinde geliştirici modunda çalışmaz.", + "settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?", + "settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}", + "settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.", + "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}", + "error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı", + "error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor", + "connecting_to_tor": "Tor ağı ile bağlantı kuruluyor", + "update_available": "Yeni bir OnionShare sürümü yayınlanmış. Almak için buraya tıklayın.

Kullandığınız sürüm {}, son sürüm {}.", + "update_error_check_error": "Sürüm denetimi yapılamadı: Tor bağlantınız kesik ya da OnionShare web sitesi kapalı olabilir mi?", + "update_error_invalid_latest_version": "Sürüm denetimi yapılamadı: OnionShare web sitesi en son sürümün anlaşılamayan '{}' olduğunu bildiriyor…", + "update_not_available": "Güncel OnionShare sürümünü kullanıyorsunuz.", + "gui_tor_connection_ask": "Tor bağlantı sorunlarını çözmek için ayarlar açılsın mı?", + "gui_tor_connection_ask_open_settings": "Evet", + "gui_tor_connection_ask_quit": "Çık", + "gui_tor_connection_error_settings": "OnionShare ayarlarından Tor ağı ile bağlantı kurma yöntemini değiştirmeyi deneyin.", + "gui_tor_connection_canceled": "Tor bağlantısı kurulamadı.\n\nİnternete bağlı olduğunuzdan emin olduktan sonra OnionShare uygulamasını yeniden açın ve Tor bağlantısını kurun.", + "gui_tor_connection_lost": "Tor bağlantısı kesildi.", + "gui_server_started_after_autostop_timer": "Otomatik durdurma sayacı, sunucu başlamadan önce sona erdi. Lütfen yeni bir paylaşım yapın.", + "gui_server_autostop_timer_expired": "Otomatik durdurma sayacı zaten sona ermiş. Paylaşımı başlatmak için sayacı ayarlayın.", + "share_via_onionshare": "OnionShare ile paylaş", + "gui_connect_to_tor_for_onion_settings": "Onion hizmet ayarlarını görmek için Tor bağlantısı kurun", + "gui_save_private_key_checkbox": "Kalıcı bir adres kullanılsın", + "gui_share_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak dosyalarınızı indirebilir: ", + "gui_receive_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak dosyaları bilgisayarınıza yükleyebilir: ", + "gui_url_label_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.

Sonraki her paylaşımda adres yeniden kullanılır (bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini kapatın.)", + "gui_url_label_stay_open": "Bu paylaşım otomatik olarak durdurulmayacak.", + "gui_url_label_onetime": "Bu paylaşım bir kez tamamlandıktan sonra durdurulacak.", + "gui_url_label_onetime_and_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.

Sonraki her paylaşım adresi yeniden kullanır (bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini kapatın.)", + "gui_status_indicator_share_stopped": "Paylaşıma hazır", + "gui_status_indicator_share_working": "Başlatılıyor…", + "gui_status_indicator_share_started": "Paylaşılıyor", + "gui_status_indicator_receive_stopped": "Almaya hazır", + "gui_status_indicator_receive_working": "Başlatılıyor…", + "gui_status_indicator_receive_started": "Alınıyor", + "gui_file_info": "{} dosya, {}", + "gui_file_info_single": "{} dosya, {}", + "history_in_progress_tooltip": "{} sürüyor", + "history_completed_tooltip": "{} tamamlandı", + "error_cannot_create_data_dir": "OnionShare veri klasörü oluşturulamadı: {}", + "receive_mode_data_dir": "Size gönderilen dosyalar bu klasörde görünür: {}", + "receive_mode_warning": "Uyarı: Alma kipi, insanların bilgisayarınıza dosya yüklemesini sağlar. Bazı dosyalar, onları açarsanız bilgisayarınızın denetimini ele geçirebilir. Yalnızca güvendiğiniz insanlara veya ne yaptığınızı biliyorsanız bunları açın.", + "gui_receive_mode_warning": "Alma kipi başkalarının bilgisayarınıza dosya yüklemesini sağlar.

Bazı dosyalar, açtığınızda bilgisayarınızın denetimini ele geçirebilir. Bir şeyleri yalnızca güvendiğiniz kişilerden geliyorsa veya ne yaptığınızı biliyorsanız açın.", + "receive_mode_upload_starting": "Toplam boyutu {} olan karşıya yükleme başlatılıyor", + "receive_mode_received_file": "Alınan: {}", + "gui_mode_share_button": "Paylaşılan Dosyalar", + "gui_mode_receive_button": "Alınan Dosyalar", + "gui_settings_receiving_label": "Alma ayarları", + "gui_settings_data_dir_label": "Dosyaları şuraya kaydet", + "gui_settings_data_dir_browse_button": "Göz at", + "gui_settings_public_mode_checkbox": "Herkese açık kip", + "gui_open_folder_error_nautilus": "Nautilus kullanılamadığından klasör açılamıyor. Dosya burada: {}", + "gui_settings_language_label": "Dil", + "gui_settings_language_changed_notice": "Dil değişikliğinin uygulanabilmesi için OnionShare uygulamasını yeniden başlatın.", + "systray_menu_exit": "Çık", + "systray_page_loaded_title": "Sayfa yüklendi", + "systray_page_loaded_message": "OnionShare adresi yüklendi", + "systray_share_started_title": "Paylaşım başlatıldı", + "systray_share_started_message": "Birine dosya gönderilmeye başlanıyor", + "systray_share_completed_title": "Paylaşım tamamlandı", + "systray_share_completed_message": "Dosyalar gönderildi", + "systray_share_canceled_title": "Paylaşım iptal edildi", + "systray_share_canceled_message": "Birisi dosyalarınızı almayı iptal etti", + "systray_receive_started_title": "Alma başlatıldı", + "systray_receive_started_message": "Birisi size dosyalar gönderiyor", + "gui_all_modes_history": "Geçmiş", + "gui_all_modes_clear_history": "Tümünü temizle", + "gui_all_modes_transfer_started": "Başlatıldı {}", + "gui_all_modes_transfer_finished_range": "Aktarıldı {} - {}", + "gui_all_modes_transfer_finished": "Aktarıldı {}", + "gui_all_modes_transfer_canceled_range": "İptal edildi {} - {}", + "gui_all_modes_transfer_canceled": "İptal edildi {}", + "gui_all_modes_progress_complete": "%p%, {0:s} geçti.", + "gui_all_modes_progress_starting": "{0:s}, %p% (hesaplanıyor)", + "gui_all_modes_progress_eta": "{0:s}, öngörülen yükleme zamanı: {1:s}, %p%", + "gui_share_mode_no_files": "Henüz bir dosya gönderilmedi", + "gui_share_mode_timeout_waiting": "Göndermeyi bitirmek için bekleniyor", + "gui_receive_mode_no_files": "Henüz bir dosya alınmadı", + "gui_receive_mode_timeout_waiting": "Almayı bitirmek için bekleniyor", + "gui_stop_server_autostop_timer_tooltip": "Otomatik durdurma sayacı bitişi {}", + "gui_start_server_autostart_timer_tooltip": "Otomatik başlatma sayacı bitişi {}", + "gui_waiting_to_start": "{} içinde başlamaya zamanlandı. İptal etmek için tıklayın.", + "gui_settings_autostart_timer_checkbox": "Otomatik başlatma sayacı kullanılsın", + "gui_settings_autostart_timer": "Paylaşımı başlatma zamanı:", + "gui_server_autostart_timer_expired": "Zamanlanan süre zaten geçmiş. Paylaşımı başlatmak için ayarlayın.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Otomatik durdurma zamanı, otomatik başlatma zamanı ile aynı veya daha önce olamaz. Paylaşımı başlatmak için ayarlayın.", + "gui_status_indicator_share_scheduled": "Zamanlandı…", + "gui_status_indicator_receive_scheduled": "Zamanlandı…", + "gui_share_mode_autostop_timer_waiting": "Gönderme işleminin bitmesi bekleniyor", + "gui_receive_mode_autostop_timer_waiting": "Alma işleminin bitmesi bekleniyor", + "days_first_letter": "g", + "hours_first_letter": "s", + "minutes_first_letter": "d", + "seconds_first_letter": "sn", + "gui_website_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak web sitenizi ziyaret edebilir: ", + "gui_mode_website_button": "Web Sitesini Yayınla", + "gui_website_mode_no_files": "Henüz bir web sitesi paylaşılmadı", + "incorrect_password": "Parola yanlış", + "gui_settings_individual_downloads_label": "Dosyaların tek tek indirilmesine izin vermek için işareti kaldırın", + "history_requests_tooltip": "{} web isteği", + "gui_settings_csp_header_disabled_option": "İçerik Güvenlik Politikası başlığını devre dışı bırak", + "gui_settings_website_label": "Website ayarları", + "mode_settings_website_disable_csp_checkbox": "Öntanımlı İçerik Güvenliği İlkesi başlığı gönderme (web sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)", + "mode_settings_receive_data_dir_browse_button": "Göz at", + "mode_settings_receive_data_dir_label": "Dosyaları şuraya kaydet", + "mode_settings_share_autostop_sharing_checkbox": "Dosyalar gönderildikten sonra paylaşım durdurulsun (dosyaların tek tek indirilmesine izin vermek için işareti kaldırın)", + "mode_settings_legacy_checkbox": "Eski bir adres kullan (v2 onion hizmeti, tavsiye edilmez)", + "mode_settings_autostop_timer_checkbox": "Onion hizmeti şu zamanda durdurulsun", + "mode_settings_autostart_timer_checkbox": "Onion hizmeti şu zamanda başlatılsın", + "mode_settings_public_checkbox": "Bu, herkese açık bir OnionShare hizmetidir (kişisel anahtarı devre dışı bırakır)", + "mode_settings_persistent_checkbox": "Bu sekme kaydedilsin ve OnionShare ile otomatik olarak açılsın", + "mode_settings_advanced_toggle_hide": "Gelişmiş ayarları gizle", + "mode_settings_advanced_toggle_show": "Gelişmiş ayarları görüntüle", + "gui_quit_warning_cancel": "İptal", + "gui_quit_warning_description": "Bazı sekmelerinizde paylaşım etkin. Çıkarsanız tüm sekmeleriniz kaptılacak. Çıkmak istediğinize emin misiniz?", + "gui_quit_warning_title": "Emin misiniz?", + "gui_close_tab_warning_cancel": "İptal", + "gui_close_tab_warning_close": "Kapat", + "gui_close_tab_warning_website_description": "Şu anda bir web sitesi barındırıyorsunuz. Bu sekmeyi kapatmak istediğinize emin misiniz?", + "gui_close_tab_warning_receive_description": "Dosya alma işlemi devam ediyor. Bu sekmeyi kapatmak istediğinizden emin misiniz?", + "gui_close_tab_warning_share_description": "Dosya gönderme işlemi devam ediyor. Bu sekmeyi kapatmak istediğinize emin misiniz?", + "gui_close_tab_warning_persistent_description": "Bu sekme kalıcıdır. Kapatırsanız, kullandığı Onion adresini kaybedeceksiniz. Kapatmak istediğinize emin misiniz?", + "gui_new_tab_website_description": "Bilgisayarınızda statik bir HTML onion web sitesi barındırın.", + "gui_new_tab_website_button": "Web sitesi barındırın", + "gui_new_tab_receive_description": "Bilgisayarınızı çevrim içi bir dropbox'a dönüştürün. İnsanlar bilgisayarınıza dosya göndermek için Tor Browser kullanabilecekler.", + "gui_new_tab_receive_button": "Dosya alın", + "gui_new_tab_share_description": "Başka birine göndermek için bilgisayarınızdaki dosyaları seçin. Dosya göndermek istediğiniz kişi veya kişilerin sizden indirmek için Tor Browser kullanması gerekecektir.", + "gui_new_tab_share_button": "Dosya paylaşın", + "gui_close_tab_warning_title": "Emin misiniz?", + "gui_new_tab_tooltip": "Yeni bir sekme aç", + "gui_new_tab": "Yeni sekme", + "gui_remove": "Kaldır", + "gui_file_selection_remove_all": "Tümünü kaldır", + "gui_chat_start_server": "Sohbet sunucusunu başlat", + "gui_chat_stop_server": "Sohbet sunucusunu durdur", + "gui_receive_flatpak_data_dir": "OnionShare uygulamasını Flatpak kullanarak kurduğunuz için, dosyaları ~/OnionShare içindeki bir klasöre kaydetmelisiniz.", + "gui_show_qr_code": "QR kodunu görüntüle", + "gui_qr_code_dialog_title": "OnionShare QR kodu", + "gui_qr_code_description": "OnionShare adresini bir başkasıyla daha kolay paylaşmak için bu QR kodunu telefonunuzdaki kamera gibi bir QR okuyucuyla tarayın.", + "gui_open_folder_error": "Klasör xdg-open ile açılamadı. Dosya burada: {}", + "gui_new_tab_chat_button": "Anonim olarak sohbet edin", + "gui_main_page_share_button": "Paylaşımı başlat", + "gui_main_page_receive_button": "Almayı başlat", + "gui_main_page_website_button": "Barındırmayı başlat", + "gui_main_page_chat_button": "Sohbeti başlat", + "gui_tab_name_share": "Paylaş", + "gui_tab_name_receive": "Al", + "gui_tab_name_website": "Web sitesi", + "gui_tab_name_chat": "Sohbet", + "gui_chat_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak bu sohbet odasına katılabilir: ", + "error_port_not_available": "OnionShare kapı numarası kullanılamıyor", + "gui_rendezvous_cleanup_quit_early": "Erken çık", + "gui_rendezvous_cleanup": "Dosyalarınızın aktarıldığından emin olmak için Tor devrelerinin kapanması bekleniyor.\n\nBu, birkaç dakika sürebilir.", + "gui_color_mode_changed_notice": "Yeni renk kipinin uygulanması için OnionShare uygulamasını yeniden başlatın.", + "history_receive_read_message_button": "İletiyi oku", + "mode_settings_receive_webhook_url_checkbox": "Bildirim web kancası kullanılsın", + "mode_settings_receive_disable_files_checkbox": "Dosya yüklenemesin", + "mode_settings_receive_disable_text_checkbox": "Metin gönderilemesin", + "mode_settings_title_label": "Özel başlık", + "gui_status_indicator_chat_started": "Sohbet ediliyor", + "gui_status_indicator_chat_scheduled": "Zamanlandı…", + "gui_status_indicator_chat_working": "Başlatılıyor…", + "gui_status_indicator_chat_stopped": "Sohbet etmeye hazır", + "gui_settings_theme_dark": "Koyu", + "gui_settings_theme_light": "Açık", + "gui_settings_theme_auto": "Otomatik", + "gui_settings_theme_label": "Tema", + "gui_please_wait_no_button": "Başlatılıyor…", + "gui_server_doesnt_support_stealth": "Maalesef bu Tor sürümü gizliliği (istemci kimlik doğrulaması) desteklemiyor. Lütfen daha yeni bir Tor sürümünü deneyin veya özel olması gerekmiyorsa 'herkese açık' kipini kullanın.", + "gui_client_auth_instructions": "Ardından, OnionShare hizmetinize erişime izin vermek için kişisel anahtarı gönderin:", + "gui_url_instructions_public_mode": "Aşağıdaki OnionShare adresini gönderin:", + "gui_url_instructions": "İlk olarak, aşağıdaki OnionShare adresini gönderin:", + "gui_chat_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak bu sohbet odasına katılabilir: ", + "gui_receive_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak dosyaları bilgisayarınıza yükleyebilir: ", + "gui_website_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak web sitenizi ziyaret edebilir: ", + "gui_share_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak dosyalarınızı indirebilir: ", + "gui_hide": "Gizle", + "gui_reveal": "Görüntüle", + "gui_qr_label_auth_string_title": "Kişisel anahtar", + "gui_qr_label_url_title": "OnionShare adresi", + "gui_copied_client_auth": "Kişisel anahtar panoya kopyalandı", + "gui_copied_client_auth_title": "Kişisel anahtar kopyalandı", + "gui_copy_client_auth": "Kişisel anahtarı kopyala", + "gui_settings_bridge_moat_radio_option": "torproject.org'dan bir köprü talep et", + "gui_settings_bridge_moat_button": "Yeni Bir Köprü Talep Et", + "gui_settings_bridge_custom_placeholder": "adres:bağlantınoktası yazın (satır başına bir tane)", + "gui_settings_moat_bridges_invalid": "Henüz torproject.org'dan bir köprü talep etmediniz.", + "moat_contact_label": "BridgeDB ile iletişime geçiliyor...", + "moat_captcha_error": "Çözüm doğru değil. Lütfen tekrar deneyin.", + "moat_solution_empty_error": "Resimdeki karakterleri girmelisiniz", + "mode_tor_not_connected_label": "OnionShare Tor ağına bağlı değil", + "gui_settings_tor_bridges_label": "Köprüler, Tor'un engellendiği yerlerde Tor Ağına erişmenize yardımcı olur. Nerede olduğunuza bağlı olarak, bir köprü diğerinden daha iyi çalışabilir.", + "gui_settings_bridge_use_checkbox": "Köprü kullan", + "mode_settings_website_custom_csp_checkbox": "Özel bir İçerik Güvenliği İlkesi başlığı gönder", + "gui_dragdrop_sandbox_flatpak": "Flatpak korumalı alanını daha güvenli hale getirmek için sürükle ve bırak desteklenmemektedir. Bunun yerine dosyalara göz atmak için Dosya Ekle ve Klasör Ekle düğmelerini kullanın.", + "gui_tor_settings_window_title": "Tor Ayarları", + "gui_settings_controller_extras_label": "Tor ayarları", + "gui_settings_bridge_none_radio_option": "Köprü kullanma", + "gui_settings_bridge_radio_builtin": "Yerleşik bir köprü seç", + "gui_settings_version_label": "OnionShare {} kullanıyorsunuz", + "gui_settings_bridge_custom_radio_option": "Güvenilir bir kaynaktan öğrendiğiniz bir köprü belirtin", + "gui_settings_stop_active_tabs_label": "Bazı sekmelerinizde çalışan hizmetler var.\nTor ayarlarınızı değiştirmek için tüm hizmetleri durdurmalısınız.", + "gui_settings_help_label": "Yardıma mı ihtiyacınız var? docs.onionshare.org adresine bakın", + "moat_captcha_submit": "Gönder", + "moat_captcha_reload": "Yeniden yükle", + "moat_captcha_label": "Bir köprü talep etmek için CAPTCHA'yı çözün.", + "moat_captcha_placeholder": "Resimdeki karakterleri girin", + "moat_bridgedb_error": "BridgeDB ile bağlantı kurulurken hata oluştu." +} diff --git a/desktop/onionshare/resources/locale/uk.json b/desktop/onionshare/resources/locale/uk.json new file mode 100644 index 00000000..74a380eb --- /dev/null +++ b/desktop/onionshare/resources/locale/uk.json @@ -0,0 +1,284 @@ +{ + "preparing_files": "Стиснення файлів.", + "not_a_readable_file": "{0:s} - файл що не читається.", + "no_available_port": "Не вдалося знайти доступний порт для запуску onion служби", + "other_page_loaded": "Адресу завантажено", + "close_on_autostop_timer": "Зупинено, оскільки збіг час таймера автоспину", + "closing_automatically": "Зупинено, оскільки передавання виконано", + "large_filesize": "Увага: надсилання великого об'єму може тривати години", + "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_autostop_timer": "Зупинити надсилання ({})", + "gui_stop_server_autostop_timer_tooltip": "Таймер автоспину спливає о {}", + "gui_start_server_autostart_timer_tooltip": "Таймер автостарту спливає о {}", + "gui_receive_start_server": "Запустити режим отримання", + "gui_receive_stop_server": "Зупинити режим отримання", + "gui_receive_stop_server_autostop_timer": "Зупинити режим отримання ({} залишилось)", + "gui_copy_url": "Копіювати Адресу", + "gui_canceled": "Скасовано", + "gui_copied_url_title": "Адресу OnionShare копійовано", + "gui_copied_url": "Адресу OnionShare копійовано до буферу обміну", + "gui_waiting_to_start": "Заплановано почати за {}. Натисніть для скасування.", + "gui_please_wait": "Початок... Натисніть для скасування.", + "gui_quit_title": "Не так швидко", + "gui_share_quit_warning": "Відбувається передача файлів. Ви впевнені, що бажаєте вийти з OnionShare?", + "gui_receive_quit_warning": "Відбувається отримання файлів. Ви впевнені, що бажаєте вийти з OnionShare?", + "gui_quit_warning_quit": "Вийти", + "gui_quit_warning_dont_quit": "Відміна", + "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_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": "Параметри Onion", + "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", + "gui_settings_connection_type_control_port_option": "Під'єднатися через порт керування", + "gui_settings_connection_type_socket_file_option": "Під'єднатися через файл сокета", + "gui_settings_connection_type_test_button": "Перевірити з'єднання з Tor", + "gui_settings_control_port_label": "Порт керування", + "gui_settings_socket_file_label": "Файл сокета", + "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?", + "gui_settings_tor_bridges_no_bridges_radio_option": "Не застосовувати мости", + "gui_settings_tor_bridges_obfs4_radio_option": "Застосовувати вбудовані obfs4 під'єднувані транспорти", + "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Застосовувати вбудовані obfs4 під'єднувані транспорти (вимагає obfs4proxy)", + "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти", + "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти (вимагає obfs4proxy)", + "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek-azure заважкі для роботи Tor Project.

Користуйтеся ними лише якщо не вдається з'єднатися з Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.", + "gui_settings_tor_bridges_custom_radio_option": "Застосовувати власні мости", + "gui_settings_tor_bridges_custom_label": "Ви можете отримати мости з https://bridges.torproject.org", + "gui_settings_tor_bridges_invalid": "Жоден з доданих мостів не працює. Ще раз перевірте їх або додайте інші.", + "gui_settings_button_save": "Зберегти", + "gui_settings_button_cancel": "Скасувати", + "gui_settings_button_help": "Допомога", + "gui_settings_autostop_timer_checkbox": "Використовувати таймер автоспину", + "gui_settings_autostop_timer": "Зупинити надсилання о:", + "gui_settings_autostart_timer_checkbox": "Використовувати таймер автозапуску", + "gui_settings_autostart_timer": "Почати ділитися о:", + "settings_error_unknown": "Не вдалося з'єднатися з контролером Tor, оскільки налаштування беззмістовні.", + "settings_error_automatic": "Не вдалося під'єднатися до контролера Tor. Чи запущено Tor браузер (доступний з torproject.org) у фоні?", + "settings_error_socket_port": "Не вдалося з'єднатися з контролером Tor за {}: {}.", + "settings_error_socket_file": "Не вдалося з'єднатися з контролером Tor за допомогою сокет файлу {}.", + "settings_error_auth": "З'єднано з {}:{}, але не вдається автентифікувати. Можливо це не Tor контролер?", + "settings_error_missing_password": "З'єднано з контролером Tor, але він вимагає пароль автентифікації.", + "settings_error_unreadable_cookie_file": "З'єднано з контролером Tor, але пароль може бути неправильним, або у вас немає прав на читання файлів cookie.", + "settings_error_bundled_tor_not_supported": "Використання Tor версії, яка поставляється з OnionShare не працює в режимі розробника на Windows або macOS.", + "settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, відсутнє з'єднання з Інтернетом або у вас неточний системний час?", + "settings_error_bundled_tor_broken": "OnionShare не вдалося з'єднатися з Tor:\n{}", + "settings_test_success": "З'єднано з контролером Tor.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.", + "error_tor_protocol_error": "Сталася помилка Tor: {}", + "error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor", + "connecting_to_tor": "З'єднання з мережею Tor", + "update_available": "Випущено новий OnionShare. Натисніть тут, щоб його отримати.

Ваша версія {}, а найновіша {}.", + "update_error_check_error": "Не вдалося перевірити наявність нових версій: можливо, ви не під'єднані до Tor або вебсайт OnionShare не працює?", + "update_error_invalid_latest_version": "Не вдалося перевірити наявність нової версії: вебсайт 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_autostop_timer": "Таймер автоспину збіг до початку роботи сервера. Будь ласка, почніть ділитися знову.", + "gui_server_autostop_timer_expired": "Час автоспину збіг. Налаштуйте його, щоб почати надсилання.", + "gui_server_autostart_timer_expired": "Запланований час збіг. Оновіть його, щоб почати надсилання.", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Час автоспину не може бути однаковим або ранішим за час автоматичного запуску. Налаштуйте його, щоб почати надсилання.", + "share_via_onionshare": "Поділитися через OnionShare", + "gui_connect_to_tor_for_onion_settings": "З'єднайтеся з Tor, щоб побачити параметри служби onion", + "gui_save_private_key_checkbox": "Використовувати постійну адресу", + "gui_share_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може завантажити ваші файли, через Tor Browser: ", + "gui_receive_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може вивантажити файли на ваш комп'ютер через Tor Browser: ", + "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_scheduled": "Заплановано…", + "gui_status_indicator_share_started": "Надсилання", + "gui_status_indicator_receive_stopped": "Готово до отримання", + "gui_status_indicator_receive_working": "Початок…", + "gui_status_indicator_receive_scheduled": "Заплановано…", + "gui_status_indicator_receive_started": "Отримання", + "gui_file_info": "{} файлів, {}", + "gui_file_info_single": "{} файл, {}", + "history_in_progress_tooltip": "{} в процесі", + "history_completed_tooltip": "{} завершено", + "error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}", + "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.

Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо ви впевнені у своїх діях.", + "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": "Неможливо відкрити теку бо nautilus недоступний. Файл розташовано: {}", + "gui_settings_language_label": "Мова", + "gui_settings_language_changed_notice": "Перезапустіть OnionShare для зміни мови.", + "systray_menu_exit": "Вийти", + "systray_page_loaded_title": "Сторінку Завантажено", + "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_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": "%p%, {0:s} минуло.", + "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_autostop_timer_waiting": "Очікування завершення надсилання", + "gui_receive_mode_no_files": "Поки що нічого не отримано", + "gui_receive_mode_autostop_timer_waiting": "Очікування завершення отримання", + "receive_mode_upload_starting": "Завантаження об'ємом {} починається", + "days_first_letter": "д", + "hours_first_letter": "г", + "minutes_first_letter": "х", + "seconds_first_letter": "с", + "gui_website_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може відвідати ваш вебсайт через Tor Browser: ", + "gui_mode_website_button": "Опублікувати вебсайт", + "gui_website_mode_no_files": "Немає опублікованих вебсайтів", + "incorrect_password": "Неправильний пароль", + "gui_settings_individual_downloads_label": "Приберіть позначку, щоб дозволити завантаження окремих файлів", + "history_requests_tooltip": "{} вебзапити", + "gui_settings_csp_header_disabled_option": "Відключити заголовок Політики захисту вмісту (CSP)", + "gui_settings_website_label": "Налаштування вебсайту", + "gui_close_tab_warning_persistent_description": "Це усталена вкладка. Якщо ви закриєте її, ви втратите onion-адресу, яку вона використовує. Ви впевнені, що хочете закрити її?", + "gui_close_tab_warning_website_description": "Ви маєте активний розміщений вебсайт. Ви впевнені, що хочете закрити цю вкладку?", + "gui_new_tab_website_description": "Розмістіть статичний onion HTML-вебсайт на вашому комп'ютері.", + "mode_settings_receive_data_dir_browse_button": "Вибрати", + "mode_settings_website_disable_csp_checkbox": "Не надсилати типовий заголовок Content Security Policy (дозволяє вебсайту використовувати сторонні ресурси)", + "mode_settings_receive_data_dir_label": "Зберігати файли до", + "mode_settings_share_autostop_sharing_checkbox": "Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити завантаження окремих файлів)", + "mode_settings_legacy_checkbox": "Користуватися застарілою адресою (служба onion v2, не рекомендовано)", + "mode_settings_autostop_timer_checkbox": "Зупинити службу onion у запланований час", + "mode_settings_autostart_timer_checkbox": "Запускати службу onion у запланований час", + "mode_settings_public_checkbox": "Це загальнодоступна служба OnionShare (вимикає приватний ключ)", + "mode_settings_persistent_checkbox": "Зберегти цю вкладку та автоматично відкривати її, коли я відкриваю OnionShare", + "mode_settings_advanced_toggle_hide": "Сховати розширені налаштування", + "mode_settings_advanced_toggle_show": "Показати розширені налаштування", + "gui_quit_warning_description": "На деяких ваших вкладках триває обмін файлами. Якщо ви вийдете, це призведе до закриття всіх вкладок. Ви справді хочете вийти?", + "gui_close_tab_warning_receive_description": "Триває отримання файлів. Ви впевнені, що хочете закрити цю вкладку?", + "gui_close_tab_warning_share_description": "Триває надсилання ваших файлів. Ви впевнені, що хочете закрити цю вкладку?", + "gui_new_tab_website_button": "Опублікувати вебсайт", + "gui_new_tab_receive_description": "Перетворіть ваш комп’ютер на онлайн-обмінник. Люди зможуть надсилати файли на ваш комп’ютер за допомогою браузера Tor.", + "gui_new_tab_receive_button": "Отримання файлів", + "gui_new_tab_share_button": "Надсилання файлів", + "gui_new_tab_share_description": "Виберіть файли на вашому комп'ютері, щоб надіслати їх іншому користувачу. Особа або люди, яким ви хочете надіслати файли, повинні скористатись переглядачем Tor для їхнього отримання.", + "gui_quit_warning_cancel": "Скасувати", + "gui_quit_warning_title": "Ви впевнені?", + "gui_close_tab_warning_cancel": "Скасувати", + "gui_close_tab_warning_close": "Закрити", + "gui_close_tab_warning_title": "Ви впевнені?", + "gui_new_tab_tooltip": "Відкрити нову вкладку", + "gui_new_tab": "Нова вкладка", + "gui_file_selection_remove_all": "Вилучити всі", + "gui_remove": "Вилучити", + "gui_new_tab_chat_button": "Анонімне спілкування", + "gui_open_folder_error": "Не вдалося відкрити теку за допомогою xdg- open. Файл тут: {}", + "gui_tab_name_chat": "Бесіда", + "gui_tab_name_website": "Вебсайт", + "gui_tab_name_receive": "Отримання", + "gui_tab_name_share": "Поділитися", + "gui_qr_code_description": "Скануйте цей QR-код за допомогою зчитувача QR, наприклад камери на телефоні, щоб простіше надіслати комусь адресу OnionShare.", + "gui_receive_flatpak_data_dir": "Оскільки ви встановили OnionShare за допомогою Flatpak, ви повинні зберігати файли в теці ~/OnionShare.", + "gui_chat_stop_server": "Зупинити сервер бесіди", + "gui_chat_start_server": "Запустити сервер бесіди", + "gui_chat_stop_server_autostop_timer": "Зупинити сервер чату ({})", + "gui_qr_code_dialog_title": "QR-код OnionShare", + "gui_show_qr_code": "Показати QR-код", + "gui_main_page_share_button": "Поділитися", + "gui_main_page_chat_button": "Почати спілкуватися у бесіді", + "gui_main_page_website_button": "Почати хостинг", + "gui_main_page_receive_button": "Почати отримання", + "gui_chat_url_description": "Будь-хто, за цією адресою та з приватним ключем, може приєднатися до цієї бесіди за допомогою Tor Browser: ", + "error_port_not_available": "Порт OnionShare недоступний", + "gui_rendezvous_cleanup_quit_early": "Вийти раніше", + "gui_rendezvous_cleanup": "Очікування закриття схем Tor, щоб переконатися, що файли успішно передано.\n\nЦе може тривати кілька хвилин.", + "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим.", + "mode_settings_receive_webhook_url_checkbox": "Застосовувати мережні обробники сповіщень", + "history_receive_read_message_button": "Читати повідомлення", + "mode_settings_receive_disable_files_checkbox": "Вимкнути передавання файлів", + "mode_settings_receive_disable_text_checkbox": "Вимкнути надсилання тексту", + "mode_settings_title_label": "Власний заголовок", + "gui_status_indicator_chat_scheduled": "Заплановано…", + "gui_status_indicator_chat_started": "Спілкування", + "gui_status_indicator_chat_working": "Запуск…", + "gui_status_indicator_chat_stopped": "Готовий до спілкування", + "gui_settings_theme_dark": "Темна", + "gui_settings_theme_light": "Світла", + "gui_settings_theme_auto": "Автоматична", + "gui_settings_theme_label": "Тема", + "gui_please_wait_no_button": "Запускається…", + "gui_hide": "Сховати", + "gui_reveal": "Показати", + "gui_qr_label_auth_string_title": "Приватний ключ", + "gui_qr_label_url_title": "Адреса OnionShare", + "gui_copied_client_auth": "Приватний ключ скопійовано до буфера обміну", + "gui_copied_client_auth_title": "Приватний ключ скопійовано", + "gui_copy_client_auth": "Скопіювати приватний ключ", + "gui_client_auth_instructions": "Далі надішліть приватний ключ, щоб дозволити доступ до служби OnionShare:", + "gui_url_instructions_public_mode": "Надішліть вказану внизу адресу OnionShare:", + "gui_url_instructions": "Спочатку надішліть вказану внизу адресу OnionShare:", + "gui_chat_url_public_description": "Будь-хто, за цією адресою OnionShare, може приєднатися до цієї бесіди за допомогою Tor Browser: ", + "gui_website_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може відвідати ваш вебсайт через Tor Browser: ", + "gui_receive_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може вивантажити файли на ваш комп'ютер через Tor Browser: ", + "gui_share_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може завантажити ваші файли, через Tor Browser: ", + "gui_server_doesnt_support_stealth": "На жаль, ця версія Tor не підтримує стелс-режим (автентифікацію клієнта). Спробуйте за допомогою новішої версії Tor або скористайтеся загальнодоступним режимом, якщо він не повинен бути приватним.", + "gui_tor_settings_window_title": "Налаштування Tor", + "gui_settings_bridge_radio_builtin": "Вибрати вбудований міст", + "gui_settings_bridge_none_radio_option": "Не використовувати міст", + "gui_settings_stop_active_tabs_label": "На деяких ваших вкладках працюють служби.\nВи повинні зупинити всі служби, щоб змінити налаштування Tor.", + "moat_captcha_label": "Розв'яжіть CAPTCHA для запиту мостів.", + "moat_captcha_error": "Неправильний розв'язок. Повторіть спробу.", + "gui_settings_bridge_use_checkbox": "Використовувати міст", + "gui_settings_bridge_moat_radio_option": "Запит мосту на torproject.org", + "gui_dragdrop_sandbox_flatpak": "Щоб пісочниця Flatpak була безпечнішою, перетягування не підтримується. Натомість скористайтеся кнопками Додати файли та Додати теку, щоб знайти файли.", + "gui_settings_controller_extras_label": "Налаштування Tor", + "gui_settings_tor_bridges_label": "Мости допомагають отримати доступ до мережі Tor у місцях, де Tor заблоковано. Залежно від того, де ви знаходитесь, один міст може працювати краще, ніж інший.", + "gui_settings_bridge_moat_button": "Запит нового мосту", + "gui_settings_bridge_custom_radio_option": "Укажіть міст, про який ви дізналися з надійного джерела", + "gui_settings_bridge_custom_placeholder": "введіть адреса:порт (по одному на рядок)", + "gui_settings_version_label": "Ви використовуєте OnionShare {}", + "gui_settings_help_label": "Потрібна допомога? Перегляньте docs.onionshare.org", + "gui_settings_moat_bridges_invalid": "Ви ще не запитували міст на torproject.org.", + "moat_captcha_placeholder": "Введіть символи із зображення", + "moat_captcha_submit": "Надіслати", + "mode_settings_website_custom_csp_checkbox": "Надсилати власний заголовок Content Security Policy", + "moat_contact_label": "Зв'язок з BridgeDB...", + "moat_captcha_reload": "Перезавантажити", + "mode_tor_not_connected_label": "OnionShare не під'єднано до мережі Tor", + "moat_bridgedb_error": "Помилка з’єднання з BridgeDB.", + "moat_solution_empty_error": "Ви повинні ввести символи з зображення" +} diff --git a/desktop/onionshare/resources/locale/wo.json b/desktop/onionshare/resources/locale/wo.json new file mode 100644 index 00000000..e0f37715 --- /dev/null +++ b/desktop/onionshare/resources/locale/wo.json @@ -0,0 +1,179 @@ +{ + "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_autostop_timer": "", + "closing_automatically": "", + "timeout_download_still_running": "", + "large_filesize": "", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "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_stop_server_autostop_timer": "", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "", + "gui_receive_stop_server": "", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "" +} diff --git a/desktop/onionshare/resources/locale/yo.json b/desktop/onionshare/resources/locale/yo.json new file mode 100644 index 00000000..5da034d1 --- /dev/null +++ b/desktop/onionshare/resources/locale/yo.json @@ -0,0 +1,188 @@ +{ + "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": "{0:s} je oun ti a ko le ka.", + "no_available_port": "", + "other_page_loaded": "Adiresi ti wole", + "close_on_autostop_timer": "O danuduro nitori akoko idaduro aifowoyi ti pe", + "closing_automatically": "Odanuduro nitori o ti fi ranse tan", + "timeout_download_still_running": "", + "timeout_upload_still_running": "", + "large_filesize": "Ikilo: Fi fi nkan repete ranse le gba aimoye wakati", + "systray_menu_exit": "", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "", + "help_stay_open": "", + "help_autostop_timer": "", + "help_stealth": "", + "help_receive": "", + "help_verbose": "", + "help_filename": "", + "help_config": "", + "gui_drag_and_drop": "Wo awon iwe pelebe ati apamowo re sibi lati bere sini fi ranse", + "gui_add": "Fikun", + "gui_delete": "", + "gui_choose_items": "Yan", + "gui_share_start_server": "Bere si ni pin", + "gui_share_stop_server": "Dawo pinpin duro", + "gui_share_stop_server_autostop_timer": "Dawo pinpin duro ({})", + "gui_share_stop_server_autostop_timer_tooltip": "", + "gui_receive_start_server": "Bere ipele gbigba", + "gui_receive_stop_server": "Duro ipele gbigba", + "gui_receive_stop_server_autostop_timer": "", + "gui_receive_stop_server_autostop_timer_tooltip": "", + "gui_copy_url": "", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "", + "gui_copied_url_title": "", + "gui_copied_url": "", + "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": "", + "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_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_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_autostop_timer_checkbox": "", + "gui_settings_autostop_timer": "", + "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_autostop_timer": "", + "gui_server_autostop_timer_expired": "", + "share_via_onionshare": "", + "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": "", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "", + "gui_settings_public_mode_checkbox": "", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "gui_upload_finished_range": "", + "gui_upload_finished": "", + "gui_download_in_progress": "", + "gui_open_folder_error_nautilus": "", + "gui_settings_language_label": "", + "gui_settings_language_changed_notice": "", + "gui_start_server_autostart_timer_tooltip": "Akoko ti nbere laifowoyi duro ni {}", + "gui_stop_server_autostop_timer_tooltip": "Akoko ti nduro laifowoyi dopin ni {}", + "gui_chat_stop_server": "Da olupin iregbe duro", + "gui_chat_start_server": "Bere olupin iregbe", + "gui_file_selection_remove_all": "Yo gbogbo re kuro", + "gui_remove": "Yokuro", + "gui_add_folder": "S'afikun folda", + "gui_add_files": "S'afikun faili", + "incorrect_password": "Ashiko oro igbaniwole" +} diff --git a/desktop/onionshare/resources/locale/zh_Hans.json b/desktop/onionshare/resources/locale/zh_Hans.json new file mode 100644 index 00000000..749bb9a0 --- /dev/null +++ b/desktop/onionshare/resources/locale/zh_Hans.json @@ -0,0 +1,336 @@ +{ + "config_onion_service": "在端口{0:d}上设置洋葱服务。", + "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_autostop_timer": "因为定时器计时结束,已自动停止", + "closing_automatically": "传输已完成,已自动停止", + "timeout_download_still_running": "", + "large_filesize": "警告:发送大的共享文件可能会花费数小时", + "systray_menu_exit": "退出", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "不使用Tor(仅开发测试)", + "help_stay_open": "文件传输完成后继续分享", + "help_autostop_timer": "超过给定时间(秒)后终止分享", + "help_stealth": "使用服务端认证(高级选项)", + "help_receive": "仅接收分享的文件,不发送", + "help_verbose": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", + "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_autostop_timer": "停止共享({})", + "gui_share_stop_server_autostop_timer_tooltip": "在{}自动停止", + "gui_receive_start_server": "开启接收模式", + "gui_receive_stop_server": "停止接收模式", + "gui_receive_stop_server_autostop_timer": "停止接收模式(还剩 {} 秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "在{}自动停止", + "gui_copy_url": "复制地址", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "已取消", + "gui_copied_url_title": "已复制 OnionShare 地址", + "gui_copied_url": "OnionShare 地址已复制到剪贴板", + "gui_please_wait": "正在开启……点击以取消。", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "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": "取消", + "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_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_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 的自动设置", + "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_socket_file_label": "Socket 文件", + "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 网桥连接?", + "gui_settings_tor_bridges_no_bridges_radio_option": "不使用网桥", + "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": "警告:meek-azure 网桥会对 Tor 的运行产生极大负担。

仅在无法直接连接至 Tor,通过 obfs4 transports 连接,或通过其他网桥连接时使用。", + "gui_settings_tor_bridges_custom_radio_option": "使用自定义网桥", + "gui_settings_tor_bridges_custom_label": "您可以从 https://bridges.torproject.org 获得网桥", + "gui_settings_tor_bridges_invalid": "您所添加的网桥均无法工作。请再次检查或添加其它网桥。", + "gui_settings_button_save": "保存", + "gui_settings_button_cancel": "取消", + "gui_settings_button_help": "帮助", + "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 控制器。", + "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_bundled_tor_timeout": "连接至 Tor 的时间过长。也许您未连接至互联网,或是系统时间不准确?", + "settings_error_bundled_tor_broken": "OnionShare 无法连接至 Tor\n{}", + "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": "无法检查更新:可能是您没有连接到Tor,或者OnionShare瘫痪了?", + "update_error_invalid_latest_version": "无法检查更新: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_autostop_timer": "在服务器启动之前,自动停止的定时器的计时已到。请建立一个新的共享。", + "gui_server_autostop_timer_expired": "自动停止的定时器计时已到。请对其调整以开始共享。", + "share_via_onionshare": "通过 OnionShare 共享", + "gui_save_private_key_checkbox": "使用长期地址", + "gui_share_url_description": "任何人只要有这个 OnionShare 地址和私钥,都可以用 Tor Browser 下载您的文件:", + "gui_receive_url_description": "任何人只要有这个 OnionShare 地址和私钥,都可以用 Tor Browser 向您的电脑上传文件:", + "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": "{} 已完成", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "分享轨迹", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "公共模式", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "页面已加载", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "清除所有", + "gui_upload_in_progress": "", + "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_add_files": "添加文件", + "gui_add_folder": "添加文件夹", + "gui_connect_to_tor_for_onion_settings": "连接至 Tor 以查看 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_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_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": "还没有文件已被发出", + "gui_share_mode_autostop_timer_waiting": "正在等待发送结束", + "gui_receive_mode_no_files": "还没有接收到文件", + "gui_receive_mode_autostop_timer_waiting": "正在等待接收结束", + "gui_settings_onion_label": "Onion 设置", + "gui_all_modes_transfer_canceled_range": "取消于 {} - {}", + "gui_all_modes_transfer_canceled": "取消于 {}", + "gui_stop_server_autostop_timer_tooltip": "自动停止的定时器在 {} 停止", + "gui_start_server_autostart_timer_tooltip": "自动开始的定时器在 {} 停止", + "gui_waiting_to_start": "已计划在 {} 秒后开始。点击取消。", + "gui_settings_autostart_timer_checkbox": "使用自动开始计时器", + "gui_settings_autostart_timer": "开始分享时间:", + "gui_server_autostart_timer_expired": "已超过计划的时间。请对其调整以开始共享。", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自动停止的时间无法与自动开始的时间相同,或早于自动开始的时间。请对其调整以开始共享。", + "gui_status_indicator_share_scheduled": "已计划……", + "gui_status_indicator_receive_scheduled": "已计划……", + "days_first_letter": "天", + "hours_first_letter": "小时", + "minutes_first_letter": "分", + "seconds_first_letter": "秒", + "gui_website_url_description": "任何有此 OnionShare 地址和私钥的人都可以使用 Tor 浏览器访问你的网站:", + "gui_mode_website_button": "发布网站", + "gui_website_mode_no_files": "尚未分享网站", + "incorrect_password": "密码错误", + "gui_settings_individual_downloads_label": "取消选择来允许下载单独的文件", + "history_requests_tooltip": "{}个网络请求", + "gui_settings_csp_header_disabled_option": "禁用内容安全策略标题", + "gui_settings_website_label": "网站设置", + "mode_settings_website_disable_csp_checkbox": "不发送默认的内容安全政策(Content Security Policy) 头(允许您的网站使用第三方资源)", + "mode_settings_receive_data_dir_browse_button": "浏览", + "mode_settings_receive_data_dir_label": "保存文件到", + "mode_settings_share_autostop_sharing_checkbox": "文件传送完后停止共享(取消选中可允许下载单个文件)", + "mode_settings_legacy_checkbox": "使用旧地址(v2 onion服务,不推荐)", + "mode_settings_autostop_timer_checkbox": "定时停止onion服务", + "mode_settings_autostart_timer_checkbox": "定时起动onion服务", + "mode_settings_public_checkbox": "这是一个公共 OnionShare 服务(禁用私钥)", + "mode_settings_persistent_checkbox": "保存此页,并在我打开 OnionShare 时自动打开它", + "mode_settings_advanced_toggle_hide": "隐藏高级选项", + "mode_settings_advanced_toggle_show": "显示高级选项", + "gui_quit_warning_cancel": "取消", + "gui_quit_warning_description": "有的页中有激活的共享,如果退出,所有的页将被关闭。您确定要退出吗?", + "gui_quit_warning_title": "您确定吗?", + "gui_close_tab_warning_cancel": "取消", + "gui_close_tab_warning_close": "关闭", + "gui_close_tab_warning_website_description": "您正在托管一个网站,确定要关闭此页吗?", + "gui_close_tab_warning_receive_description": "您正在接收文件,确定要关闭此页吗?", + "gui_close_tab_warning_share_description": "您正在发送文件,确定要关闭此页吗?", + "gui_close_tab_warning_persistent_description": "此页会持续存在, 如果关闭它,将会丢失它正在使用的onion地址。 您确定要关闭它吗?", + "gui_close_tab_warning_title": "您确定吗?", + "gui_new_tab_website_description": "从您的计算机托管一个静态HTML的onion网站。", + "gui_new_tab_website_button": "发布网站", + "gui_new_tab_receive_description": "将您的计算机变成一个在线的dropbox。 人们将能够使用Tor浏览器将文件发送到您的计算机。", + "gui_new_tab_receive_button": "接收文件", + "gui_new_tab_share_description": "选择计算机上的文件发送给别人。 您要将文件发送给的那些人需要使用Tor浏览器来从您这里下载文件。", + "gui_new_tab_share_button": "共享文件", + "gui_new_tab_tooltip": "打开一个新标签", + "gui_new_tab": "新建标签", + "gui_show_qr_code": "显示二维码", + "gui_receive_flatpak_data_dir": "因为你用Flatpack安装的OnionShare,你需要把文件储存到在~/OnionShare里的一个文件夹里。", + "gui_chat_stop_server": "停止言论服务器", + "gui_chat_start_server": "开始言论服务器", + "gui_file_selection_remove_all": "删除所有", + "gui_remove": "删除", + "gui_qr_code_dialog_title": "Onionshare 二维码", + "error_port_not_available": "OnionShare端口不可用", + "gui_tab_name_chat": "聊天", + "gui_tab_name_website": "网站", + "gui_tab_name_receive": "接收", + "gui_tab_name_share": "分享", + "gui_main_page_chat_button": "开始聊天", + "gui_main_page_website_button": "开始托管", + "gui_main_page_receive_button": "开始接收", + "gui_main_page_share_button": "开始分享", + "gui_new_tab_chat_button": "匿名聊天", + "gui_open_folder_error": "用xdg-open打开文件夹失败。文件在这里: {}", + "gui_chat_url_description": "任何有这个OnionShare地址和私钥的人均可 加入这个聊天室,方法是使用Tor浏览器:", + "gui_rendezvous_cleanup_quit_early": "提前退出", + "gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文件传输成功。\n\n这可能需要几分钟。", + "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。", + "history_receive_read_message_button": "读取消息", + "mode_settings_receive_webhook_url_checkbox": "使用通知 webhook", + "mode_settings_receive_disable_files_checkbox": "禁用上传文件", + "mode_settings_receive_disable_text_checkbox": "禁用提交文本", + "mode_settings_title_label": "自定义标题", + "gui_status_indicator_chat_started": "正在聊天", + "gui_status_indicator_chat_scheduled": "已安排…", + "gui_status_indicator_chat_working": "启动中…", + "gui_status_indicator_chat_stopped": "准备好聊天", + "gui_please_wait_no_button": "启动中…", + "gui_settings_theme_dark": "深色", + "gui_settings_theme_light": "浅色", + "gui_settings_theme_auto": "自动", + "gui_settings_theme_label": "主题", + "gui_client_auth_instructions": "接下来,发送私钥以允许访问您的 OnionShare 服务:", + "gui_url_instructions_public_mode": "发送下面的 OnionShare 地址:", + "gui_url_instructions": "首先,发送下面的 OnionShare 地址:", + "gui_chat_url_public_description": "任何有此 OnionShare 地址的人均可加入此聊天室,方法是使用Tor 浏览器", + "gui_receive_url_public_description": "任何有此 OnionShare 地址的人均可上传文件至你的计算机,方法是使用Tor 浏览器", + "gui_website_url_public_description": "任何有此 OnionShare 地址的人均可访问你的网站,方法是使用Tor 浏览器", + "gui_share_url_public_description": "任何有此 OnionShare 地址的人均可下载你的文件,方法是使用Tor浏览器", + "gui_server_doesnt_support_stealth": "抱歉,此版本的 Tor 不支持隐身(客户端身份验证)。 请尝试使用较新版本的 Tor,如果不需要私密分享,请使用“公共”模式。", + "gui_hide": "隐藏", + "gui_reveal": "揭示", + "gui_qr_label_auth_string_title": "私钥", + "gui_qr_label_url_title": "OnionShare 地址", + "gui_copied_client_auth": "已复制私钥到剪贴板", + "gui_copied_client_auth_title": "已复制私钥", + "gui_copy_client_auth": "复制私钥", + "gui_settings_bridge_use_checkbox": "使用网桥", + "gui_settings_bridge_radio_builtin": "选择内置网桥", + "gui_settings_bridge_none_radio_option": "不使用网桥", + "gui_settings_bridge_moat_button": "请求新网桥", + "gui_settings_bridge_custom_placeholder": "输入地址:端口(每行一个)", + "gui_settings_help_label": "需要帮助?参见 docs.onionshare.org", + "mode_settings_website_custom_csp_checkbox": "发送自定义 CSP 标头", + "moat_bridgedb_error": "联系 BridgeDB 时出错。", + "moat_solution_empty_error": "你必须输入图像中的字符", + "mode_tor_not_connected_label": "OnionShare 没有连接到 Tor 网络", + "gui_dragdrop_sandbox_flatpak": "为了使 Flatpak 沙箱更安全,不支持拖放操作。请使用“添加文件”和“添加文件夹”按钮来浏览文件。", + "gui_tor_settings_window_title": "Tor 设置", + "gui_settings_controller_extras_label": "Tor 设置", + "gui_settings_tor_bridges_label": "网桥帮助你在 Tor 被封锁的地方访问 Tor 网络。取决于你所在地方,一个网桥可能比另一个网桥更好用。", + "gui_settings_bridge_custom_radio_option": "提供一座你从可信来源处了解到的网桥", + "gui_settings_bridge_moat_radio_option": "从 torproject.org 请求网桥", + "moat_captcha_error": "解答不正确。请再试一次。", + "gui_settings_moat_bridges_invalid": "你尚未从 torproject.org 请求网桥。", + "gui_settings_stop_active_tabs_label": "一些选项卡中有服务正在运行。\n你必须停止所有服务才能更改 Tor 设置。", + "moat_contact_label": "正联系 BridgeDB...", + "gui_settings_version_label": "你正在使用 OnionShare {}", + "moat_captcha_label": "解决 CAPTCHA 来请求网桥。", + "moat_captcha_reload": "重新加载", + "moat_captcha_placeholder": "输入图片中字符", + "moat_captcha_submit": "提交" +} diff --git a/desktop/onionshare/resources/locale/zh_Hant.json b/desktop/onionshare/resources/locale/zh_Hant.json new file mode 100644 index 00000000..f0a51217 --- /dev/null +++ b/desktop/onionshare/resources/locale/zh_Hant.json @@ -0,0 +1,282 @@ +{ + "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_autostop_timer": "因自動停止計時器的時間已到,已停止", + "closing_automatically": "因傳輸完成,已停止", + "timeout_download_still_running": "", + "large_filesize": "警告:傳輸巨大的檔案將有可能耗時數小時以上", + "systray_menu_exit": "離開", + "systray_download_started_title": "", + "systray_download_started_message": "", + "systray_download_completed_title": "", + "systray_download_completed_message": "", + "systray_download_canceled_title": "", + "systray_download_canceled_message": "", + "systray_upload_started_title": "", + "systray_upload_started_message": "", + "help_local_only": "不要使用Tor(僅限開發使用)", + "help_stay_open": "繼續分享即使檔案已傳送", + "help_autostop_timer": "在所給定的秒數後停止分享", + "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_autostop_timer": "停止分享 (剩餘時間{})", + "gui_share_stop_server_autostop_timer_tooltip": "計數器將在{}停止", + "gui_receive_start_server": "啟動接收模式", + "gui_receive_stop_server": "停止接收模式", + "gui_receive_stop_server_autostop_timer": "停止接收模式 (剩餘{}秒)", + "gui_receive_stop_server_autostop_timer_tooltip": "計數器將在{}停止", + "gui_copy_url": "複製地址", + "gui_downloads": "", + "gui_no_downloads": "", + "gui_canceled": "已取消", + "gui_copied_url_title": "已複製OnionShare地址", + "gui_copied_url": "OnionShare地址已複製到剪貼簿", + "gui_please_wait": "啟動中...點擊以取消。", + "gui_download_upload_progress_complete": "", + "gui_download_upload_progress_starting": "", + "gui_download_upload_progress_eta": "", + "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": "取消", + "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_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_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_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。", + "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": "無法檢查更新:可能是您沒有連接到Tor,或者OnionShare癱瘓了?", + "update_error_invalid_latest_version": "無法檢查更新: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_autostop_timer": "在服務器啓動之前,自動停止的定時器的計時已到。請建立一個新的共享。", + "gui_server_autostop_timer_expired": "自動停止計時器時間已到。請調整它來開始分享。", + "share_via_onionshare": "使用OnionShare分享", + "gui_save_private_key_checkbox": "使用永久地址", + "gui_share_url_description": "任何人只要擁有這個地址就可以下載你的檔案經由Tor Browser: ", + "gui_receive_url_description": "任何人只要擁有這個地址就可以上傳檔案到你的電腦經由Tor Browser: ", + "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": "{}個已完成", + "info_in_progress_uploads_tooltip": "", + "info_completed_uploads_tooltip": "", + "error_cannot_create_downloads_dir": "", + "receive_mode_downloads_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_downloads_label": "", + "gui_settings_downloads_button": "瀏覽", + "gui_settings_receive_allow_receiver_shutdown_checkbox": "", + "gui_settings_public_mode_checkbox": "公開模式", + "systray_close_server_title": "", + "systray_close_server_message": "", + "systray_page_loaded_title": "頁面已載入", + "systray_download_page_loaded_message": "", + "systray_upload_page_loaded_message": "", + "gui_uploads": "", + "gui_no_uploads": "", + "gui_clear_history": "", + "gui_upload_in_progress": "", + "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_add_files": "新增檔案", + "gui_add_folder": "新增資料夾", + "gui_settings_onion_label": "Onion設定", + "gui_connect_to_tor_for_onion_settings": "連結到Tor來查看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_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": "%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": "目前無已傳送的檔案", + "gui_share_mode_timeout_waiting": "等待完成傳送", + "gui_receive_mode_no_files": "目前無已接收的檔案", + "gui_receive_mode_timeout_waiting": "等待完成接收", + "gui_stop_server_autostop_timer_tooltip": "自動停止的定時器在 {} 停止", + "gui_start_server_autostart_timer_tooltip": "自動開始計時器在 {} 停止", + "gui_waiting_to_start": "預定在 {} 開始。點擊以取消。", + "gui_settings_autostart_timer_checkbox": "使用自動開始計時器", + "gui_settings_autostart_timer": "開始分享於:", + "gui_server_autostart_timer_expired": "排定的時間已經過了。請調整它以開始分享。", + "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自動停止時間不能相同或早於自動開始時間。請調整它以開始分享。", + "gui_status_indicator_share_scheduled": "預定…", + "gui_status_indicator_receive_scheduled": "預定…", + "gui_share_mode_autostop_timer_waiting": "等待完成傳送", + "gui_receive_mode_autostop_timer_waiting": "等待完成接收", + "days_first_letter": "天", + "hours_first_letter": "時", + "minutes_first_letter": "分", + "seconds_first_letter": "秒", + "incorrect_password": "密碼錯誤", + "gui_settings_csp_header_disabled_option": "停用Content Security Policy標頭", + "gui_website_url_description": "有OnionShare位址的任何人都可以使用Tor瀏覽器造訪你的網站: : ", + "gui_mode_website_button": "發佈網站", + "gui_website_mode_no_files": "尚未分享網站", + "gui_settings_individual_downloads_label": "取消選取以允許下載個別的檔案", + "history_requests_tooltip": "{}個網頁請求", + "gui_settings_website_label": "網站設定", + "mode_settings_receive_data_dir_browse_button": "瀏覽", + "mode_settings_receive_data_dir_label": "儲存檔案至", + "mode_settings_public_checkbox": "不要使用密碼", + "mode_settings_advanced_toggle_hide": "隱藏進階設定", + "gui_close_tab_warning_title": "您確定?", + "gui_quit_warning_cancel": "取消", + "gui_quit_warning_title": "您確定?", + "gui_close_tab_warning_cancel": "取消", + "gui_close_tab_warning_close": "關閉", + "gui_new_tab_share_description": "選擇要寄送給他人的檔案。接收您傳送檔案的人需要使用Tor 瀏覽器才能下載檔案。", + "gui_new_tab_receive_button": "接收檔案", + "gui_new_tab": "新分頁", + "gui_new_tab_tooltip": "開啟新分頁", + "gui_new_tab_share_button": "分享檔案", + "mode_settings_advanced_toggle_show": "顯示進階設定", + "gui_tab_name_chat": "聊天", + "gui_tab_name_website": "網站", + "gui_tab_name_receive": "接收", + "gui_tab_name_share": "分享", + "gui_main_page_chat_button": "開始聊天", + "gui_main_page_receive_button": "開始接收", + "gui_main_page_share_button": "開始分享", + "gui_new_tab_website_button": "架設一個網站", + "gui_qr_code_dialog_title": "OnionShare QR Code", + "gui_show_qr_code": "顯示QR Code", + "gui_chat_stop_server": "停止聊天伺服器", + "gui_chat_start_server": "開啟聊天伺服器", + "gui_file_selection_remove_all": "全部移除", + "gui_remove": "移除", + "error_port_not_available": "OnionShare通訊埠不可用", + "gui_rendezvous_cleanup_quit_early": "提前退出", + "gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文檔传输成功。\n\n這可能需要幾分鐘。", + "mode_settings_website_disable_csp_checkbox": "取消內容安全政策(Content Security Policy)信頭(允許您的網站使用三方資源)", + "mode_settings_share_autostop_sharing_checkbox": "檔案傳送完後停止共享(取消選中可允許下載單個檔案)", + "mode_settings_legacy_checkbox": "使用舊地址(v2 onion服務,不推薦)", + "mode_settings_autostop_timer_checkbox": "定時停止onion服務", + "mode_settings_autostart_timer_checkbox": "定時起動onion服務", + "mode_settings_persistent_checkbox": "保存此頁,並在我打開OnionShare時自動打開它", + "gui_quit_warning_description": "有的頁中有激活的共享,如果退出,所有的頁將被關閉。您確定要退出嗎?", + "gui_close_tab_warning_website_description": "您正在代管一個網站,確定要關閉此頁嗎?", + "gui_close_tab_warning_receive_description": "您正在接收文件,確定要關閉此頁嗎?", + "gui_close_tab_warning_share_description": "您正在發送文件,確定要關閉此页嗎?", + "gui_close_tab_warning_persistent_description": "此頁會持續存在,如果關閉它,將會丟失它正在使用的onion地址。您確定要關閉它嗎?", + "gui_main_page_website_button": "開始代管網頁", + "gui_new_tab_chat_button": "匿名聊天", + "gui_color_mode_changed_notice": "要使即將應用的新色彩模式生效,請重啓 OnionShare。", + "gui_open_folder_error": "用xdg-open打開文件夾失敗。文件在這裏: {}", + "gui_chat_url_description": "任何有這個OnionShare地址的人均可 加入這個聊天室,方法是使用Tor瀏覽器:", + "gui_receive_flatpak_data_dir": "因爲你用Flatpack安裝的OnionShare,你需要把文件儲存到在~/OnionShare裏的一個文件夾裏。" +} diff --git a/desktop/onionshare/resources/onionshare-128.png b/desktop/onionshare/resources/onionshare-128.png new file mode 100644 index 00000000..856ab4e7 Binary files /dev/null and b/desktop/onionshare/resources/onionshare-128.png differ diff --git a/desktop/onionshare/resources/onionshare-16.png b/desktop/onionshare/resources/onionshare-16.png new file mode 100644 index 00000000..dea20940 Binary files /dev/null and b/desktop/onionshare/resources/onionshare-16.png differ diff --git a/desktop/onionshare/resources/onionshare-256.png b/desktop/onionshare/resources/onionshare-256.png new file mode 100644 index 00000000..b47cd94a Binary files /dev/null and b/desktop/onionshare/resources/onionshare-256.png differ diff --git a/desktop/onionshare/resources/onionshare-32.png b/desktop/onionshare/resources/onionshare-32.png new file mode 100644 index 00000000..14c849c9 Binary files /dev/null and b/desktop/onionshare/resources/onionshare-32.png differ diff --git a/desktop/onionshare/resources/onionshare-512.png b/desktop/onionshare/resources/onionshare-512.png new file mode 100644 index 00000000..a4810d04 Binary files /dev/null and b/desktop/onionshare/resources/onionshare-512.png differ diff --git a/desktop/onionshare/resources/onionshare-64.png b/desktop/onionshare/resources/onionshare-64.png new file mode 100644 index 00000000..8468dc52 Binary files /dev/null and b/desktop/onionshare/resources/onionshare-64.png differ diff --git a/desktop/onionshare/resources/onionshare.icns b/desktop/onionshare/resources/onionshare.icns new file mode 100644 index 00000000..f65ad12d Binary files /dev/null and b/desktop/onionshare/resources/onionshare.icns differ diff --git a/desktop/onionshare/resources/onionshare.ico b/desktop/onionshare/resources/onionshare.ico new file mode 100644 index 00000000..dcde4f1f Binary files /dev/null and b/desktop/onionshare/resources/onionshare.ico differ diff --git a/desktop/onionshare/resources/onionshare.png b/desktop/onionshare/resources/onionshare.png new file mode 100644 index 00000000..a4810d04 Binary files /dev/null and b/desktop/onionshare/resources/onionshare.png differ diff --git a/desktop/onionshare/settings_tab.py b/desktop/onionshare/settings_tab.py new file mode 100644 index 00000000..cfa3261e --- /dev/null +++ b/desktop/onionshare/settings_tab.py @@ -0,0 +1,354 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui +import platform +import datetime +from onionshare_cli.settings import Settings + +from . import strings +from .widgets import Alert +from .update_checker import UpdateThread + + +class SettingsTab(QtWidgets.QWidget): + """ + Settings dialog. + """ + + close_this_tab = QtCore.Signal() + + def __init__(self, common, tab_id): + super(SettingsTab, self).__init__() + + self.common = common + self.common.log("SettingsTab", "__init__") + + self.system = platform.system() + self.tab_id = tab_id + + # Automatic updates options + + # Autoupdate + self.autoupdate_checkbox = QtWidgets.QCheckBox() + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.autoupdate_checkbox.setText(strings._("gui_settings_autoupdate_option")) + + # Last update time + self.autoupdate_timestamp = QtWidgets.QLabel() + + # Check for updates button + self.check_for_updates_button = QtWidgets.QPushButton( + strings._("gui_settings_autoupdate_check_button") + ) + self.check_for_updates_button.clicked.connect(self.check_for_updates) + # We can't check for updates if not connected to Tor + if not self.common.gui.onion.connected_to_tor: + self.check_for_updates_button.setEnabled(False) + + # Autoupdate options layout + autoupdate_group_layout = QtWidgets.QVBoxLayout() + autoupdate_group_layout.addWidget(self.autoupdate_checkbox) + autoupdate_group_layout.addWidget(self.autoupdate_timestamp) + autoupdate_group_layout.addWidget(self.check_for_updates_button) + autoupdate_group = QtWidgets.QGroupBox( + strings._("gui_settings_autoupdate_label") + ) + autoupdate_group.setLayout(autoupdate_group_layout) + + autoupdate_layout = QtWidgets.QHBoxLayout() + autoupdate_layout.addStretch() + autoupdate_layout.addWidget(autoupdate_group) + autoupdate_layout.addStretch() + autoupdate_widget = QtWidgets.QWidget() + autoupdate_widget.setLayout(autoupdate_layout) + + # Autoupdate is only available for Windows and Mac (Linux updates using package manager) + if self.system != "Windows" and self.system != "Darwin": + autoupdate_widget.hide() + + # Language settings + language_label = QtWidgets.QLabel(strings._("gui_settings_language_label")) + self.language_combobox = QtWidgets.QComboBox() + # Populate the dropdown with all of OnionShare's available languages + language_names_to_locales = { + v: k for k, v in self.common.settings.available_locales.items() + } + language_names = list(language_names_to_locales) + language_names.sort() + for language_name in language_names: + locale = language_names_to_locales[language_name] + self.language_combobox.addItem(language_name, locale) + language_layout = QtWidgets.QHBoxLayout() + language_layout.addStretch() + language_layout.addWidget(language_label) + language_layout.addWidget(self.language_combobox) + language_layout.addStretch() + + # Theme Settings + theme_label = QtWidgets.QLabel(strings._("gui_settings_theme_label")) + self.theme_combobox = QtWidgets.QComboBox() + theme_choices = [ + strings._("gui_settings_theme_auto"), + strings._("gui_settings_theme_light"), + strings._("gui_settings_theme_dark"), + ] + self.theme_combobox.addItems(theme_choices) + theme_layout = QtWidgets.QHBoxLayout() + theme_layout.addStretch() + theme_layout.addWidget(theme_label) + theme_layout.addWidget(self.theme_combobox) + theme_layout.addStretch() + + # Version and help + version_label = QtWidgets.QLabel( + strings._("gui_settings_version_label").format(self.common.version) + ) + version_label.setAlignment(QtCore.Qt.AlignHCenter) + help_label = QtWidgets.QLabel(strings._("gui_settings_help_label")) + help_label.setAlignment(QtCore.Qt.AlignHCenter) + help_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) + help_label.setOpenExternalLinks(True) + + # Buttons + self.save_button = QtWidgets.QPushButton(strings._("gui_settings_button_save")) + self.save_button.clicked.connect(self.save_clicked) + buttons_layout = QtWidgets.QHBoxLayout() + buttons_layout.addStretch() + buttons_layout.addWidget(self.save_button) + buttons_layout.addStretch() + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addStretch() + layout.addWidget(autoupdate_widget) + if autoupdate_widget.isVisible(): + layout.addSpacing(20) + layout.addLayout(language_layout) + layout.addLayout(theme_layout) + layout.addSpacing(20) + layout.addWidget(version_label) + layout.addWidget(help_label) + layout.addSpacing(20) + layout.addLayout(buttons_layout) + layout.addStretch() + + self.setLayout(layout) + + self.reload_settings() + + if self.common.gui.onion.connected_to_tor: + self.tor_is_connected() + else: + self.tor_is_disconnected() + + def reload_settings(self): + # Load settings, and fill them in + self.old_settings = Settings(self.common) + self.old_settings.load() + + use_autoupdate = self.old_settings.get("use_autoupdate") + if use_autoupdate: + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) + + autoupdate_timestamp = self.old_settings.get("autoupdate_timestamp") + self._update_autoupdate_timestamp(autoupdate_timestamp) + + locale = self.old_settings.get("locale") + locale_index = self.language_combobox.findData(locale) + self.language_combobox.setCurrentIndex(locale_index) + + theme_choice = self.old_settings.get("theme") + self.theme_combobox.setCurrentIndex(theme_choice) + + def check_for_updates(self): + """ + Check for Updates button clicked. Manually force an update check. + """ + self.common.log("SettingsTab", "check_for_updates") + # Disable buttons + self._disable_buttons() + self.common.gui.qtapp.processEvents() + + def update_timestamp(): + # Update the last checked label + settings = Settings(self.common) + settings.load() + autoupdate_timestamp = settings.get("autoupdate_timestamp") + self._update_autoupdate_timestamp(autoupdate_timestamp) + + def close_forced_update_thread(): + forced_update_thread.quit() + # Enable buttons + self._enable_buttons() + # Update timestamp + update_timestamp() + + # Check for updates + def update_available(update_url, installed_version, latest_version): + Alert( + self.common, + strings._("update_available").format( + update_url, installed_version, latest_version + ), + ) + close_forced_update_thread() + + def update_not_available(): + Alert(self.common, strings._("update_not_available")) + close_forced_update_thread() + + def update_error(): + Alert( + self.common, + strings._("update_error_check_error"), + QtWidgets.QMessageBox.Warning, + ) + close_forced_update_thread() + + def update_invalid_version(latest_version): + Alert( + self.common, + strings._("update_error_invalid_latest_version").format(latest_version), + QtWidgets.QMessageBox.Warning, + ) + close_forced_update_thread() + + forced_update_thread = UpdateThread( + self.common, self.common.gui.onion, force=True + ) + forced_update_thread.update_available.connect(update_available) + forced_update_thread.update_not_available.connect(update_not_available) + forced_update_thread.update_error.connect(update_error) + forced_update_thread.update_invalid_version.connect(update_invalid_version) + forced_update_thread.start() + + def save_clicked(self): + """ + Save button clicked. Save current settings to disk. + """ + self.common.log("SettingsTab", "save_clicked") + + def changed(s1, s2, keys): + """ + Compare the Settings objects s1 and s2 and return true if any values + have changed for the given keys. + """ + for key in keys: + if s1.get(key) != s2.get(key): + return True + return False + + settings = self.settings_from_fields() + if settings: + # If language changed, inform user they need to restart OnionShare + if changed(settings, self.old_settings, ["locale"]): + # Look up error message in different locale + new_locale = settings.get("locale") + if ( + new_locale in strings.translations + and "gui_settings_language_changed_notice" + in strings.translations[new_locale] + ): + notice = strings.translations[new_locale][ + "gui_settings_language_changed_notice" + ] + else: + notice = strings._("gui_settings_language_changed_notice") + Alert(self.common, notice, QtWidgets.QMessageBox.Information) + + # If color mode changed, inform user they need to restart OnionShare + if changed(settings, self.old_settings, ["theme"]): + notice = strings._("gui_color_mode_changed_notice") + Alert(self.common, notice, QtWidgets.QMessageBox.Information) + + # Save the new settings + settings.save() + self.close_this_tab.emit() + + def help_clicked(self): + """ + Help button clicked. + """ + self.common.log("SettingsTab", "help_clicked") + SettingsTab.open_help() + + @staticmethod + def open_help(): + help_url = "https://docs.onionshare.org/" + QtGui.QDesktopServices.openUrl(QtCore.QUrl(help_url)) + + def settings_from_fields(self): + """ + Return a Settings object that's full of values from the settings dialog. + """ + self.common.log("SettingsTab", "settings_from_fields") + settings = Settings(self.common) + settings.load() # To get the last update timestamp + + # Theme + theme_index = self.theme_combobox.currentIndex() + settings.set("theme", theme_index) + + # Language + locale_index = self.language_combobox.currentIndex() + locale = self.language_combobox.itemData(locale_index) + settings.set("locale", locale) + + return settings + + def settings_have_changed(self): + # Global settings have changed + self.common.log("SettingsTab", "settings_have_changed") + + def _update_autoupdate_timestamp(self, autoupdate_timestamp): + self.common.log("SettingsTab", "_update_autoupdate_timestamp") + + if autoupdate_timestamp: + dt = datetime.datetime.fromtimestamp(autoupdate_timestamp) + last_checked = dt.strftime("%B %d, %Y %H:%M") + else: + last_checked = strings._("gui_settings_autoupdate_timestamp_never") + self.autoupdate_timestamp.setText( + strings._("gui_settings_autoupdate_timestamp").format(last_checked) + ) + + def _disable_buttons(self): + self.common.log("SettingsTab", "_disable_buttons") + + self.check_for_updates_button.setEnabled(False) + self.save_button.setEnabled(False) + + def _enable_buttons(self): + self.common.log("SettingsTab", "_enable_buttons") + # We can't check for updates if we're still not connected to Tor + if not self.common.gui.onion.connected_to_tor: + self.check_for_updates_button.setEnabled(False) + else: + self.check_for_updates_button.setEnabled(True) + self.save_button.setEnabled(True) + + def tor_is_connected(self): + self.check_for_updates_button.show() + + def tor_is_disconnected(self): + self.check_for_updates_button.hide() diff --git a/desktop/onionshare/strings.py b/desktop/onionshare/strings.py new file mode 100644 index 00000000..55f56788 --- /dev/null +++ b/desktop/onionshare/strings.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" +import json +import os + +strings = {} +translations = {} + + +def load_strings(common, locale_dir): + """ + Loads translated strings and fallback to English + if the translation does not exist. + """ + global strings, translations + + # Load all translations + translations = {} + for locale in common.settings.available_locales: + filename = os.path.join(locale_dir, f"{locale}.json") + with open(filename, encoding="utf-8") as f: + translations[locale] = json.load(f) + + # Build strings + default_locale = "en" + current_locale = common.settings.get("locale") + strings = {} + for s in translations[default_locale]: + if ( + current_locale in translations + and s in translations[current_locale] + and translations[current_locale][s] != "" + ): + strings[s] = translations[current_locale][s] + else: + strings[s] = translations[default_locale][s] + + +def translated(k): + """ + Returns a translated string. + """ + return strings[k] + + +_ = translated diff --git a/desktop/onionshare/tab/__init__.py b/desktop/onionshare/tab/__init__.py new file mode 100644 index 00000000..62ec4a74 --- /dev/null +++ b/desktop/onionshare/tab/__init__.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from .tab import Tab diff --git a/desktop/onionshare/tab/mode/__init__.py b/desktop/onionshare/tab/mode/__init__.py new file mode 100644 index 00000000..c9b5cad1 --- /dev/null +++ b/desktop/onionshare/tab/mode/__init__.py @@ -0,0 +1,576 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets + +from onionshare_cli.common import AutoStopTimer + +from .history import IndividualFileHistoryItem +from .mode_settings_widget import ModeSettingsWidget + +from ..server_status import ServerStatus +from ... import strings +from ...threads import OnionThread, AutoStartTimer +from ...widgets import Alert, MinimumSizeWidget + + +class Mode(QtWidgets.QWidget): + """ + The class that all modes inherit from + """ + + start_server_finished = QtCore.Signal() + stop_server_finished = QtCore.Signal() + starting_server_step2 = QtCore.Signal() + starting_server_step3 = QtCore.Signal() + starting_server_error = QtCore.Signal(str) + starting_server_early = QtCore.Signal() + set_server_active = QtCore.Signal(bool) + change_persistent = QtCore.Signal(int, bool) + + def __init__(self, tab): + super(Mode, self).__init__() + self.tab = tab + self.settings = tab.settings + + self.common = tab.common + self.qtapp = self.common.gui.qtapp + self.app = tab.app + + self.status_bar = tab.status_bar + self.server_status_label = tab.status_bar.server_status_label + self.system_tray = tab.system_tray + + self.filenames = tab.filenames + + # The web object gets created in init() + self.web = None + + # Threads start out as None + self.onion_thread = None + self.web_thread = None + self.startup_thread = None + + # Mode settings widget + self.mode_settings_widget = ModeSettingsWidget( + self.common, self.tab, self.settings + ) + self.mode_settings_widget.change_persistent.connect(self.change_persistent) + + # Server status + self.server_status = ServerStatus( + self.common, + self.qtapp, + self.app, + self.settings, + self.mode_settings_widget, + None, + self.common.gui.local_only, + ) + self.server_status.server_started.connect(self.start_server) + self.server_status.server_stopped.connect(self.stop_server) + self.server_status.server_canceled.connect(self.cancel_server) + self.start_server_finished.connect(self.server_status.start_server_finished) + 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 + # Note: It's up to the downstream Mode to add this to its layout + self.primary_action_layout = QtWidgets.QVBoxLayout() + self.primary_action_layout.addWidget(self.mode_settings_widget) + self.primary_action = QtWidgets.QWidget() + self.primary_action.setLayout(self.primary_action_layout) + + # It's up to the downstream Mode to add stuff to self.content_layout + # self.content_layout shows the actual content of the mode + # self.tor_not_connected_layout is displayed when Tor isn't connected + self.content_layout = QtWidgets.QVBoxLayout() + self.content_widget = QtWidgets.QWidget() + self.content_widget.setLayout(self.content_layout) + + tor_not_connected_label = QtWidgets.QLabel( + strings._("mode_tor_not_connected_label") + ) + tor_not_connected_label.setAlignment(QtCore.Qt.AlignHCenter) + tor_not_connected_label.setStyleSheet( + self.common.gui.css["tor_not_connected_label"] + ) + self.tor_not_connected_layout = QtWidgets.QVBoxLayout() + self.tor_not_connected_layout.addStretch() + self.tor_not_connected_layout.addWidget(tor_not_connected_label) + self.tor_not_connected_layout.addWidget(MinimumSizeWidget(700, 0)) + self.tor_not_connected_layout.addStretch() + self.tor_not_connected_widget = QtWidgets.QWidget() + self.tor_not_connected_widget.setLayout(self.tor_not_connected_layout) + + self.wrapper_layout = QtWidgets.QVBoxLayout() + self.wrapper_layout.addWidget(self.content_widget) + self.wrapper_layout.addWidget(self.tor_not_connected_widget) + self.setLayout(self.wrapper_layout) + + if self.common.gui.onion.connected_to_tor: + self.tor_connection_started() + else: + self.tor_connection_stopped() + + def init(self): + """ + Add custom initialization here. + """ + pass + + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + 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 = ( + (f"{days}{strings._('days_first_letter')}, " if days else "") + + (f"{hours}{strings._('hours_first_letter')}, " if hours else "") + + (f"{minutes}{strings._('minutes_first_letter')}, " if minutes else "") + + f"{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.settings.get("general", "autostart_timer"): + now = QtCore.QDateTime.currentDateTime() + if self.server_status.local_only: + seconds_remaining = now.secsTo( + self.mode_settings_widget.autostart_timer_widget.dateTime() + ) + else: + 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) + ) + ) + else: + if self.common.platform == "Windows" or self.settings.get( + "general", "autostart_timer" + ): + self.server_status.server_button.setText( + strings._("gui_please_wait") + ) + else: + self.server_status.server_button.setText( + strings._("gui_please_wait_no_button") + ) + + # If the auto-stop timer has stopped, stop the server + if self.server_status.status == ServerStatus.STATUS_STARTED: + if self.app.autostop_timer_thread and self.settings.get( + "general", "autostop_timer" + ): + if self.autostop_timer_datetime_delta > 0: + now = QtCore.QDateTime.currentDateTime() + seconds_remaining = now.secsTo( + self.server_status.autostop_timer_datetime + ) + + # Update the server button + 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.autostop_timer_thread.is_alive(): + self.autostop_timer_finished_should_stop_server() + + def timer_callback_custom(self): + """ + Add custom timer code. + """ + pass + + def get_stop_server_autostop_timer_text(self): + """ + Return the string to put on the stop server button, if there's an auto-stop timer + """ + pass + + def autostop_timer_finished_should_stop_server(self): + """ + The auto-stop timer expired, should we stop the server? Returns a bool + """ + pass + + def start_server(self): + """ + Start the onionshare server. This uses multiple threads to start the Tor onion + server and the web app. + """ + self.common.log("Mode", "start_server") + + self.start_server_custom() + self.set_server_active.emit(True) + + # Clear the status bar + self.status_bar.clearMessage() + self.server_status_label.setText("") + + # Hide the mode settings + self.mode_settings_widget.hide() + + # 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, password + # and onion address, but it will not start the WebThread yet. + if self.settings.get("general", "autostart_timer"): + self.start_onion_thread(obtain_onion_early=True) + 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) + self.startup_thread.canceled = False + self.startup_thread.start() + else: + self.start_onion_thread() + + def start_onion_thread(self, obtain_onion_early=False): + # If we tried to start with Client Auth and our Tor is too old to support it, + # bail out early + if ( + not self.server_status.local_only + and not self.app.onion.supports_stealth + and not self.settings.get("general", "public") + ): + self.stop_server() + self.start_server_error(strings._("gui_server_doesnt_support_stealth")) + else: + 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) + self.onion_thread.start() + + def start_server_custom(self): + """ + Add custom initialization here. + """ + 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. + """ + self.common.log("Mode", "start_server_step2") + + self.start_server_step2_custom() + + # Nothing to do here. + + # start_server_step2_custom has call these to move on: + # self.starting_server_step3.emit() + # self.start_server_finished.emit() + + def start_server_step2_custom(self): + """ + Add custom initialization here. + """ + pass + + def start_server_step3(self): + """ + Step 3 in starting the onionshare server. + """ + self.common.log("Mode", "start_server_step3") + + self.start_server_step3_custom() + + if self.settings.get("general", "autostop_timer"): + # Convert the date value to seconds between now and then + now = QtCore.QDateTime.currentDateTime() + 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_autostop_timer") + ) + + def start_server_step3_custom(self): + """ + Add custom initialization here. + """ + pass + + def start_server_error(self, error): + """ + If there's an error when trying to start the onion service + """ + self.common.log("Mode", "start_server_error") + + Alert(self.common, error, QtWidgets.QMessageBox.Warning) + self.set_server_active.emit(False) + self.server_status.stop_server() + self.status_bar.clearMessage() + + self.start_server_error_custom() + + def start_server_error_custom(self): + """ + Add custom initialization here. + """ + pass + + def cancel_server(self): + """ + 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.app.onion.scheduled_auth_cookie = None + self.startup_thread.quit() + + # Canceling only works in Windows + # https://github.com/onionshare/onionshare/issues/1371 + if self.common.platform == "Windows": + if self.onion_thread: + self.common.log("Mode", "cancel_server: quitting onion thread") + self.onion_thread.terminate() + self.onion_thread.wait() + if self.web_thread: + self.common.log("Mode", "cancel_server: quitting web thread") + self.web_thread.terminate() + self.web_thread.wait() + + self.stop_server() + + def cancel_server_custom(self): + """ + Add custom initialization here. + """ + pass + + def stop_server(self): + """ + Stop the onionshare server. + """ + self.common.log("Mode", "stop_server") + + if self.server_status.status != ServerStatus.STATUS_STOPPED: + try: + self.web.stop(self.app.port) + except Exception: + # Probably we had no port to begin with (Onion service didn't start) + pass + self.web.cleanup() + + self.stop_server_custom() + + self.set_server_active.emit(False) + self.stop_server_finished.emit() + + # Show the mode settings + self.mode_settings_widget.show() + + def stop_server_custom(self): + """ + Add custom initialization here. + """ + pass + + def handle_tor_broke(self): + """ + Handle connection from Tor breaking. + """ + if self.server_status.status != ServerStatus.STATUS_STOPPED: + self.server_status.stop_server() + self.handle_tor_broke_custom() + + def handle_tor_broke_custom(self): + """ + Add custom initialization here. + """ + pass + + # Handle web server events + + def handle_request_load(self, event): + """ + Handle REQUEST_LOAD event. + """ + pass + + def handle_request_started(self, event): + """ + Handle REQUEST_STARTED event. + """ + pass + + def handle_request_progress(self, event): + """ + Handle REQUEST_PROGRESS event. + """ + pass + + def handle_request_canceled(self, event): + """ + Handle REQUEST_CANCELED event. + """ + pass + + def handle_request_upload_includes_message(self, event): + """ + Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event. + """ + pass + + def handle_request_upload_file_renamed(self, event): + """ + Handle REQUEST_UPLOAD_FILE_RENAMED event. + """ + pass + + def handle_request_upload_message(self, event): + """ + Handle REQUEST_UPLOAD_MESSAGE event. + """ + pass + + def handle_request_upload_set_dir(self, event): + """ + Handle REQUEST_UPLOAD_SET_DIR event. + """ + pass + + def handle_request_upload_finished(self, event): + """ + Handle REQUEST_UPLOAD_FINISHED event. + """ + pass + + def handle_request_upload_canceled(self, event): + """ + Handle REQUEST_UPLOAD_CANCELED event. + """ + pass + + def handle_request_individual_file_started(self, event): + """ + Handle REQUEST_INDVIDIDUAL_FILES_STARTED event. + Used in both Share and Website modes, so implemented here. + """ + self.toggle_history.update_indicator(True) + self.history.requests_count += 1 + self.history.update_requests() + + item = IndividualFileHistoryItem(self.common, event["data"], event["path"]) + self.history.add(event["data"]["id"], item) + + def handle_request_individual_file_progress(self, event): + """ + Handle REQUEST_INDVIDIDUAL_FILES_PROGRESS event. + Used in both Share and Website modes, so implemented here. + """ + self.history.update(event["data"]["id"], event["data"]["bytes"]) + + if self.server_status.status == self.server_status.STATUS_STOPPED: + self.history.cancel(event["data"]["id"]) + + def handle_request_individual_file_canceled(self, event): + """ + Handle REQUEST_INDVIDIDUAL_FILES_CANCELED event. + Used in both Share and Website modes, so implemented here. + """ + self.history.cancel(event["data"]["id"]) + + def tor_connection_started(self): + """ + This is called on every Mode when Tor is connected + """ + self.content_widget.show() + self.tor_not_connected_widget.hide() + + def tor_connection_stopped(self): + """ + This is called on every Mode when Tor is disconnected + """ + if self.common.gui.local_only: + self.tor_connection_started() + return + + self.content_widget.hide() + self.tor_not_connected_widget.show() diff --git a/desktop/onionshare/tab/mode/chat_mode/__init__.py b/desktop/onionshare/tab/mode/chat_mode/__init__.py new file mode 100644 index 00000000..1081fe9d --- /dev/null +++ b/desktop/onionshare/tab/mode/chat_mode/__init__.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.web import Web + +from .. import Mode +from .... import strings +from ....widgets import MinimumSizeWidget +from ....gui_common import GuiCommon + + +class ChatMode(Mode): + """ + Parts of the main window UI for sharing files. + """ + + success = QtCore.Signal() + error = QtCore.Signal(str) + + def init(self): + """ + Custom initialization for ChatMode. + """ + # Create the Web object + self.web = Web(self.common, True, self.settings, "chat") + + # Chat image + self.image_label = QtWidgets.QLabel() + self.image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path( + "images/{}_mode_chat.png".format(self.common.gui.color_mode) + ) + ) + ) + ) + self.image_label.setFixedSize(300, 300) + image_layout = QtWidgets.QVBoxLayout() + image_layout.addStretch() + image_layout.addWidget(self.image_label) + image_layout.addStretch() + self.image = QtWidgets.QWidget() + self.image.setLayout(image_layout) + + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_chat") + ) + + # Server status + self.server_status.set_mode("chat") + self.server_status.server_started_finished.connect(self.update_primary_action) + self.server_status.server_stopped.connect(self.update_primary_action) + self.server_status.server_canceled.connect(self.update_primary_action) + # Tell server_status about web, then update + self.server_status.web = self.web + self.server_status.update() + + # Header + header_label = QtWidgets.QLabel(strings._("gui_new_tab_chat_button")) + header_label.setStyleSheet(self.common.gui.css["mode_header_label"]) + + # Top bar + top_bar_layout = QtWidgets.QHBoxLayout() + # Add space at the top, same height as the toggle history bar in other modes + top_bar_layout.addWidget(MinimumSizeWidget(0, 30)) + + # Main layout + self.main_layout = QtWidgets.QVBoxLayout() + self.main_layout.addLayout(top_bar_layout) + self.main_layout.addWidget(header_label) + self.main_layout.addWidget(self.primary_action, stretch=1) + self.main_layout.addWidget(self.server_status) + self.main_layout.addWidget(MinimumSizeWidget(700, 0)) + + # Column layout + self.column_layout = QtWidgets.QHBoxLayout() + self.column_layout.addWidget(self.image) + self.column_layout.addLayout(self.main_layout) + + # Content layout + self.content_layout.addLayout(self.column_layout) + + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "chat" + + def get_stop_server_autostop_timer_text(self): + """ + Return the string to put on the stop server button, if there's an auto-stop timer + """ + return strings._("gui_share_stop_server_autostop_timer") + + def autostop_timer_finished_should_stop_server(self): + """ + The auto-stop timer expired, should we stop the server? Returns a bool + """ + + self.server_status.stop_server() + self.server_status_label.setText(strings._("close_on_autostop_timer")) + return True + + def start_server_custom(self): + """ + Starting the server. + """ + # Reset web counters + self.web.chat_mode.cur_history_id = 0 + + def start_server_step2_custom(self): + """ + Step 2 in starting the server. Zipping up files. + """ + # Continue + self.starting_server_step3.emit() + self.start_server_finished.emit() + + def cancel_server_custom(self): + """ + Log that the server has been cancelled + """ + self.common.log("ChatMode", "cancel_server") + + def handle_tor_broke_custom(self): + """ + Connection to Tor broke. + """ + self.primary_action.hide() + + def on_reload_settings(self): + """ + We should be ok to re-enable the 'Start Receive Mode' button now. + """ + self.primary_action.show() + + def update_primary_action(self): + self.common.log("ChatMode", "update_primary_action") diff --git a/desktop/onionshare/tab/mode/file_selection.py b/desktop/onionshare/tab/mode/file_selection.py new file mode 100644 index 00000000..1addba22 --- /dev/null +++ b/desktop/onionshare/tab/mode/file_selection.py @@ -0,0 +1,534 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +from PySide2 import QtCore, QtWidgets, QtGui + +from ... import strings +from ...widgets import Alert, AddFileDialog +from ...gui_common import GuiCommon + + +class DropHereWidget(QtWidgets.QWidget): + """ + When there are no files or folders in the FileList yet, display the + 'drop files here' message and graphic. + """ + + def __init__(self, common, image_filename, header_text, w, h, parent): + super(DropHereWidget, self).__init__(parent) + self.common = common + self.setAcceptDrops(True) + + self.image_label = QtWidgets.QLabel(parent=self) + self.image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage(GuiCommon.get_resource_path(image_filename)) + ) + ) + self.image_label.setAlignment(QtCore.Qt.AlignCenter) + self.image_label.show() + + self.header_label = QtWidgets.QLabel(parent=self) + self.header_label.setText(header_text) + self.header_label.setStyleSheet( + self.common.gui.css["share_file_selection_drop_here_header_label"] + ) + self.header_label.setAlignment(QtCore.Qt.AlignCenter) + self.header_label.show() + + self.text_label = QtWidgets.QLabel(parent=self) + self.text_label.setText(strings._("gui_drag_and_drop")) + self.text_label.setStyleSheet( + self.common.gui.css["share_file_selection_drop_here_label"] + ) + self.text_label.setAlignment(QtCore.Qt.AlignCenter) + self.text_label.show() + + self.resize(w, h) + self.hide() + + def dragEnterEvent(self, event): + self.hide() + event.accept() + + def resize(self, w, h): + self.setGeometry(0, 0, w, h) + self.image_label.setGeometry(0, 0, w, h - 100) + self.header_label.setGeometry(0, 290, w, h - 360) + self.text_label.setGeometry(0, 340, w, h - 380) + + +class DropCountLabel(QtWidgets.QLabel): + """ + While dragging files over the FileList, this counter displays the + number of files you're dragging. + """ + + def __init__(self, common, parent): + self.parent = parent + super(DropCountLabel, self).__init__(parent=parent) + + self.common = common + + self.setAcceptDrops(True) + self.setAlignment(QtCore.Qt.AlignCenter) + self.setText(strings._("gui_drag_and_drop")) + self.setStyleSheet(self.common.gui.css["share_file_selection_drop_count_label"]) + self.hide() + + def dragEnterEvent(self, event): + self.hide() + event.accept() + + +class FileList(QtWidgets.QListWidget): + """ + The list of files and folders in the GUI. + """ + + files_dropped = QtCore.Signal() + files_updated = QtCore.Signal() + + def __init__(self, common, background_image_filename, header_text, parent=None): + super(FileList, self).__init__(parent) + self.common = common + self.setAcceptDrops(True) + + self.setIconSize(QtCore.QSize(32, 32)) + self.setSortingEnabled(True) + self.setMinimumHeight(160) + self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + self.drop_here = DropHereWidget( + self.common, + background_image_filename, + header_text, + self.width(), + self.height(), + self, + ) + self.drop_count = DropCountLabel(self.common, self) + self.resizeEvent(None) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) + + def update(self): + """ + Update the GUI elements based on the current state. + """ + # file list should have a background image if empty + if self.count() == 0: + self.drop_here.show() + else: + self.drop_here.hide() + + def server_started(self): + """ + Update the GUI when the server starts, by hiding delete buttons. + """ + self.setAcceptDrops(False) + self.setCurrentItem(None) + self.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection) + for index in range(self.count()): + self.item(index).item_button.hide() + + def server_stopped(self): + """ + Update the GUI when the server stops, by showing delete buttons. + """ + self.setAcceptDrops(True) + self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + for index in range(self.count()): + self.item(index).item_button.show() + + def resizeEvent(self, event): + """ + When the widget is resized, resize the drop files image and text. + """ + self.drop_here.resize(self.width(), self.height()) + + if self.count() > 0: + # Add and delete an empty item, to force all items to get redrawn + # This is ugly, but the only way I could figure out how to proceed + item = QtWidgets.QListWidgetItem("fake item") + self.addItem(item) + self.takeItem(self.row(item)) + self.update() + + # Extend any filenames that were truncated to fit the window + # We use 200 as a rough guess at how wide the 'file size + delete button' widget is + # and extend based on the overall width minus that amount. + for index in range(self.count()): + metrics = QtGui.QFontMetrics(self.item(index).font()) + elided = metrics.elidedText( + self.item(index).basename, QtCore.Qt.ElideRight, self.width() - 200 + ) + self.item(index).setText(elided) + + def dragEnterEvent(self, event): + """ + dragEnterEvent for dragging files and directories into the widget. + """ + # Drag and drop doesn't work in Flatpak, because of the sandbox + if self.common.is_flatpak(): + Alert(self.common, strings._("gui_dragdrop_sandbox_flatpak").format()) + event.ignore() + return + + if event.mimeData().hasUrls: + self.setStyleSheet(self.common.gui.css["share_file_list_drag_enter"]) + count = len(event.mimeData().urls()) + self.drop_count.setText(f"+{count}") + + size_hint = self.drop_count.sizeHint() + self.drop_count.setGeometry( + self.width() - size_hint.width() - 30, + self.height() - size_hint.height() - 10, + size_hint.width(), + size_hint.height(), + ) + self.drop_count.show() + event.accept() + else: + event.ignore() + + def dragLeaveEvent(self, event): + """ + dragLeaveEvent for dragging files and directories into the widget. + """ + # Drag and drop doesn't work in Flatpak, because of the sandbox + if self.common.is_flatpak(): + event.ignore() + return + + self.setStyleSheet(self.common.gui.css["share_file_list_drag_leave"]) + self.drop_count.hide() + event.accept() + self.update() + + def dragMoveEvent(self, event): + """ + dragMoveEvent for dragging files and directories into the widget. + """ + # Drag and drop doesn't work in Flatpak, because of the sandbox + if self.common.is_flatpak(): + event.ignore() + return + + if event.mimeData().hasUrls: + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + else: + event.ignore() + + def dropEvent(self, event): + """ + dropEvent for dragging files and directories into the widget. + """ + # Drag and drop doesn't work in Flatpak, because of the sandbox + if self.common.is_flatpak(): + event.ignore() + return + + if event.mimeData().hasUrls: + event.setDropAction(QtCore.Qt.CopyAction) + event.accept() + for url in event.mimeData().urls(): + filename = str(url.toLocalFile()) + self.add_file(filename) + else: + event.ignore() + + self.setStyleSheet(self.common.gui.css["share_file_list_drag_leave"]) + self.drop_count.hide() + + self.files_dropped.emit() + + def add_file(self, filename): + """ + Add a file or directory to this widget. + """ + filenames = [] + for index in range(self.count()): + filenames.append(self.item(index).filename) + + if filename not in filenames: + if not os.access(filename, os.R_OK): + Alert(self.common, strings._("not_a_readable_file").format(filename)) + return + + fileinfo = QtCore.QFileInfo(filename) + ip = QtWidgets.QFileIconProvider() + icon = ip.icon(fileinfo) + + if os.path.isfile(filename): + size_bytes = fileinfo.size() + size_readable = self.common.human_readable_filesize(size_bytes) + else: + size_bytes = self.common.dir_size(filename) + size_readable = self.common.human_readable_filesize(size_bytes) + + # Create a new item + item = QtWidgets.QListWidgetItem() + item.setIcon(icon) + item.size_bytes = size_bytes + + # Item's filename attribute and size labels + item.filename = filename + item_size = QtWidgets.QLabel(size_readable) + item_size.setStyleSheet(self.common.gui.css["share_file_list_item_size"]) + + item.basename = os.path.basename(filename.rstrip("/")) + # Use the basename as the method with which to sort the list + metrics = QtGui.QFontMetrics(item.font()) + elided = metrics.elidedText( + item.basename, QtCore.Qt.ElideRight, self.sizeHint().width() + ) + item.setData(QtCore.Qt.DisplayRole, elided) + + # Item's delete button + def delete_item(): + itemrow = self.row(item) + self.takeItem(itemrow) + self.files_updated.emit() + + item.item_button = QtWidgets.QPushButton() + item.item_button.setDefault(False) + item.item_button.setFlat(True) + item.item_button.setIcon( + QtGui.QIcon(GuiCommon.get_resource_path("images/file_delete.png")) + ) + item.item_button.clicked.connect(delete_item) + item.item_button.setSizePolicy( + QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed + ) + + # Item info widget, with a white background + item_info_layout = QtWidgets.QHBoxLayout() + item_info_layout.setContentsMargins(0, 0, 0, 0) + item_info_layout.addWidget(item_size) + item_info_layout.addWidget(item.item_button) + item_info = QtWidgets.QWidget() + item_info.setObjectName("item-info") + item_info.setLayout(item_info_layout) + + # Create the item's widget and layouts + item_hlayout = QtWidgets.QHBoxLayout() + item_hlayout.addStretch() + item_hlayout.addWidget(item_info) + widget = QtWidgets.QWidget() + widget.setLayout(item_hlayout) + + item.setSizeHint(widget.sizeHint()) + + self.addItem(item) + self.setItemWidget(item, widget) + + self.files_updated.emit() + + +class FileSelection(QtWidgets.QVBoxLayout): + """ + The list of files and folders in the GUI, as well as buttons to add and + delete the files and folders. + """ + + def __init__(self, common, background_image_filename, header_text, parent): + super(FileSelection, self).__init__() + + self.common = common + self.parent = parent + + self.server_on = False + + # File list + self.file_list = FileList(self.common, background_image_filename, header_text) + self.file_list.itemSelectionChanged.connect(self.update) + self.file_list.files_dropped.connect(self.update) + self.file_list.files_updated.connect(self.update) + + # Sandboxes (for masOS, Flatpak, etc.) need separate add files and folders buttons, in + # order to use native file selection dialogs + if self.common.platform == "Darwin" or self.common.is_flatpak(): + self.sandbox = True + else: + self.sandbox = False + + # Buttons + if self.sandbox: + # The macOS sandbox makes it so the Mac version needs separate add files + # and folders buttons, in order to use native file selection dialogs + self.add_files_button = QtWidgets.QPushButton(strings._("gui_add_files")) + self.add_files_button.clicked.connect(self.add_files) + self.add_folder_button = QtWidgets.QPushButton(strings._("gui_add_folder")) + self.add_folder_button.clicked.connect(self.add_folder) + else: + self.add_button = QtWidgets.QPushButton(strings._("gui_add")) + self.add_button.clicked.connect(self.add) + self.remove_button = QtWidgets.QPushButton(strings._("gui_remove")) + self.remove_button.clicked.connect(self.delete) + button_layout = QtWidgets.QHBoxLayout() + button_layout.addStretch() + if self.sandbox: + button_layout.addWidget(self.add_files_button) + button_layout.addWidget(self.add_folder_button) + else: + button_layout.addWidget(self.add_button) + button_layout.addWidget(self.remove_button) + + # Add the widgets + self.addWidget(self.file_list) + self.addLayout(button_layout) + + self.update() + + def update(self): + """ + Update the GUI elements based on the current state. + """ + # All buttons should be hidden if the server is on + if self.server_on: + if self.sandbox: + self.add_files_button.hide() + self.add_folder_button.hide() + else: + self.add_button.hide() + self.remove_button.hide() + else: + if self.sandbox: + self.add_files_button.show() + self.add_folder_button.show() + else: + self.add_button.show() + + # Delete button should be hidden if item isn't selected + if len(self.file_list.selectedItems()) == 0: + self.remove_button.hide() + else: + self.remove_button.show() + + # Update the file list + self.file_list.update() + + # Save the latest file list to mode settings + self.save_filenames() + + def add(self): + """ + Add button clicked. + """ + file_dialog = AddFileDialog(self.common, caption=strings._("gui_choose_items")) + if file_dialog.exec_() == QtWidgets.QDialog.Accepted: + self.common.log("FileSelection", "add", file_dialog.selectedFiles()) + for filename in file_dialog.selectedFiles(): + self.file_list.add_file(filename) + + self.file_list.setCurrentItem(None) + self.update() + + def add_files(self): + """ + Add Files button clicked. + """ + files = QtWidgets.QFileDialog.getOpenFileNames( + self.parent, caption=strings._("gui_choose_items") + ) + self.common.log("FileSelection", "add_files", files) + + filenames = files[0] + for filename in filenames: + self.file_list.add_file(filename) + + self.file_list.setCurrentItem(None) + self.update() + + def add_folder(self): + """ + Add Folder button clicked. + """ + filename = QtWidgets.QFileDialog.getExistingDirectory( + self.parent, + caption=strings._("gui_choose_items"), + options=QtWidgets.QFileDialog.ShowDirsOnly, + ) + self.common.log("FileSelection", "add_folder", filename) + if filename: + self.file_list.add_file(filename) + self.file_list.setCurrentItem(None) + self.update() + + def delete(self): + """ + Delete button clicked + """ + selected = self.file_list.selectedItems() + for item in selected: + itemrow = self.file_list.row(item) + self.file_list.takeItem(itemrow) + self.file_list.files_updated.emit() + + self.file_list.setCurrentItem(None) + self.update() + + def server_started(self): + """ + Gets called when the server starts. + """ + self.server_on = True + self.file_list.server_started() + self.update() + + def server_stopped(self): + """ + Gets called when the server stops. + """ + self.server_on = False + self.file_list.server_stopped() + self.update() + + def get_num_files(self): + """ + Returns the total number of files and folders in the list. + """ + return len(range(self.file_list.count())) + + def get_filenames(self): + """ + Return the list of file and folder names + """ + filenames = [] + for index in range(self.file_list.count()): + filenames.append(self.file_list.item(index).filename) + return filenames + + def save_filenames(self): + """ + Save the filenames to mode settings + """ + filenames = self.get_filenames() + if self.parent.tab.mode == self.common.gui.MODE_SHARE: + self.parent.settings.set("share", "filenames", filenames) + elif self.parent.tab.mode == self.common.gui.MODE_WEBSITE: + self.parent.settings.set("website", "filenames", filenames) + + def setFocus(self): + """ + Set the Qt app focus on the file selection box. + """ + self.file_list.setFocus() diff --git a/desktop/onionshare/tab/mode/history.py b/desktop/onionshare/tab/mode/history.py new file mode 100644 index 00000000..091905f7 --- /dev/null +++ b/desktop/onionshare/tab/mode/history.py @@ -0,0 +1,892 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import time +import subprocess +import os +from datetime import datetime +from PySide2 import QtCore, QtWidgets, QtGui + +from ... import strings +from ...widgets import Alert +from ...gui_common import GuiCommon + + +class HistoryItem(QtWidgets.QWidget): + """ + The base history item + """ + + STATUS_STARTED = 0 + STATUS_FINISHED = 1 + STATUS_CANCELED = 2 + + def __init__(self): + super(HistoryItem, self).__init__() + + def update(self): + pass + + def cancel(self): + pass + + def get_finished_label_text(self, started): + """ + When an item finishes, returns a string displaying the start/end datetime range. + started is a datetime object. + """ + return self._get_label_text( + "gui_all_modes_transfer_finished", + "gui_all_modes_transfer_finished_range", + started, + ) + + def get_canceled_label_text(self, started): + """ + When an item is canceled, returns a string displaying the start/end datetime range. + started is a datetime object. + """ + return self._get_label_text( + "gui_all_modes_transfer_canceled", + "gui_all_modes_transfer_canceled_range", + started, + ) + + def _get_label_text(self, string_name, string_range_name, started): + """ + Return a string that contains a date, or date range. + """ + ended = datetime.now() + if ( + started.year == ended.year + and started.month == ended.month + and started.day == ended.day + ): + if started.hour == ended.hour and started.minute == ended.minute: + text = strings._(string_name).format(started.strftime("%b %d, %I:%M%p")) + else: + text = strings._(string_range_name).format( + started.strftime("%b %d, %I:%M%p"), ended.strftime("%I:%M%p") + ) + else: + text = strings._(string_range_name).format( + started.strftime("%b %d, %I:%M%p"), ended.strftime("%b %d, %I:%M%p") + ) + return text + + +class ShareHistoryItem(HistoryItem): + """ + Download history item, for share mode + """ + + def __init__(self, common, id, total_bytes): + super(ShareHistoryItem, self).__init__() + self.common = common + + self.id = id + self.total_bytes = total_bytes + self.downloaded_bytes = 0 + self.started = time.time() + self.started_dt = datetime.fromtimestamp(self.started) + self.status = HistoryItem.STATUS_STARTED + + # Label + self.label = QtWidgets.QLabel( + strings._("gui_all_modes_transfer_started").format( + self.started_dt.strftime("%b %d, %I:%M%p") + ) + ) + + # Progress bar + self.progress_bar = QtWidgets.QProgressBar() + self.progress_bar.setTextVisible(True) + self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) + self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) + self.progress_bar.setMinimum(0) + self.progress_bar.setMaximum(total_bytes / 1024) + self.progress_bar.setValue(0) + self.progress_bar.setStyleSheet( + self.common.gui.css["downloads_uploads_progress_bar"] + ) + self.progress_bar.total_bytes = total_bytes + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label) + layout.addWidget(self.progress_bar) + self.setLayout(layout) + + # Start at 0 + self.update(0) + + def update(self, downloaded_bytes): + self.downloaded_bytes = downloaded_bytes + + self.progress_bar.setValue(downloaded_bytes / 1024) + if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024): + pb_fmt = strings._("gui_all_modes_progress_complete").format( + self.common.format_seconds(time.time() - self.started) + ) + + # Change the label + self.label.setText(self.get_finished_label_text(self.started_dt)) + self.label.setStyleSheet(self.common.gui.css["history_default_label"]) + self.status = HistoryItem.STATUS_FINISHED + + else: + elapsed = time.time() - self.started + if elapsed < 10: + # Wait a couple of seconds for the download rate to stabilize. + # This prevents a "Windows copy dialog"-esque experience at + # the beginning of the download. + pb_fmt = strings._("gui_all_modes_progress_starting").format( + self.common.human_readable_filesize(downloaded_bytes) + ) + else: + pb_fmt = strings._("gui_all_modes_progress_eta").format( + self.common.human_readable_filesize(downloaded_bytes), + self.estimated_time_remaining, + ) + + self.progress_bar.setFormat(pb_fmt) + + def cancel(self): + self.progress_bar.setFormat(strings._("gui_canceled")) + self.status = HistoryItem.STATUS_CANCELED + + @property + def estimated_time_remaining(self): + return self.common.estimated_time_remaining( + self.downloaded_bytes, self.total_bytes, self.started + ) + + +class ReceiveHistoryItemFile(QtWidgets.QWidget): + def __init__(self, common, filename): + super(ReceiveHistoryItemFile, self).__init__() + self.common = common + + self.common.log("ReceiveHistoryItemFile", "__init__", f"filename: {filename}") + + self.filename = filename + self.dir = None + self.started = datetime.now() + + # Filename label + self.filename_label = QtWidgets.QLabel(self.filename) + self.filename_label_width = self.filename_label.width() + + # File size label + self.filesize_label = QtWidgets.QLabel() + self.filesize_label.setStyleSheet(self.common.gui.css["receive_file_size"]) + self.filesize_label.hide() + + # Folder button + folder_pixmap = QtGui.QPixmap.fromImage( + QtGui.QImage(GuiCommon.get_resource_path("images/open_folder.png")) + ) + folder_icon = QtGui.QIcon(folder_pixmap) + self.folder_button = QtWidgets.QPushButton() + self.folder_button.clicked.connect(self.open_folder) + self.folder_button.setIcon(folder_icon) + self.folder_button.setIconSize(folder_pixmap.rect().size()) + self.folder_button.setFlat(True) + self.folder_button.hide() + + # Layouts + layout = QtWidgets.QHBoxLayout() + layout.addWidget(self.filename_label) + layout.addWidget(self.filesize_label) + layout.addStretch() + layout.addWidget(self.folder_button) + self.setLayout(layout) + + def update(self, uploaded_bytes, complete): + self.filesize_label.setText(self.common.human_readable_filesize(uploaded_bytes)) + self.filesize_label.show() + + if complete: + self.folder_button.show() + + def rename(self, new_filename): + self.filename = new_filename + self.filename_label.setText(self.filename) + + def set_dir(self, dir): + self.dir = dir + + def open_folder(self): + """ + Open the downloads folder, with the file selected, in a cross-platform manner + """ + self.common.log("ReceiveHistoryItemFile", "open_folder") + + if not self.dir: + self.common.log( + "ReceiveHistoryItemFile", + "open_folder", + "dir has not been set yet, can't open folder", + ) + return + + abs_filename = os.path.join(self.dir, self.filename) + + # Linux + if self.common.platform == "Linux" or self.common.platform == "BSD": + try: + # If nautilus is available, open it + subprocess.Popen(["xdg-open", self.dir]) + except Exception: + Alert( + self.common, + strings._("gui_open_folder_error").format(abs_filename), + ) + + # macOS + elif self.common.platform == "Darwin": + subprocess.call(["open", "-R", abs_filename]) + + # Windows + elif self.common.platform == "Windows": + subprocess.Popen(["explorer", f"/select,{abs_filename}"]) + + +class ReceiveHistoryItemMessage(QtWidgets.QWidget): + def __init__( + self, + common, + ): + super(ReceiveHistoryItemMessage, self).__init__() + self.common = common + self.filename = None + + # Read message button + message_pixmap = QtGui.QPixmap.fromImage( + QtGui.QImage(GuiCommon.get_resource_path("images/open_message.png")) + ) + message_icon = QtGui.QIcon(message_pixmap) + self.message_button = QtWidgets.QPushButton( + strings._("history_receive_read_message_button") + ) + self.message_button.setStyleSheet(self.common.gui.css["receive_message_button"]) + self.message_button.clicked.connect(self.open_message) + self.message_button.setIcon(message_icon) + self.message_button.setIconSize(message_pixmap.rect().size()) + + # Layouts + layout = QtWidgets.QHBoxLayout() + layout.addWidget(self.message_button) + layout.addStretch() + self.setLayout(layout) + + self.hide() + + def set_filename(self, new_filename): + self.filename = new_filename + self.show() + + def open_message(self): + """ + Open the message in the operating system's default text editor + """ + self.common.log("ReceiveHistoryItemMessage", "open_message", self.filename) + + # Linux + if self.common.platform == "Linux" or self.common.platform == "BSD": + # If nautilus is available, open it + subprocess.Popen(["xdg-open", self.filename]) + + # macOS + elif self.common.platform == "Darwin": + subprocess.call(["open", self.filename]) + + # Windows + elif self.common.platform == "Windows": + subprocess.Popen(["notepad", self.filename]) + + +class ReceiveHistoryItem(HistoryItem): + def __init__(self, common, id, content_length): + super(ReceiveHistoryItem, self).__init__() + self.common = common + self.id = id + self.content_length = content_length + self.started = datetime.now() + self.status = HistoryItem.STATUS_STARTED + + self.common.log( + "ReceiveHistoryItem", + "__init__", + f"id={self.id} content_length={self.content_length}", + ) + + # Label + self.label = QtWidgets.QLabel( + strings._("gui_all_modes_transfer_started").format( + self.started.strftime("%b %d, %I:%M%p") + ) + ) + + # Progress bar + self.progress_bar = QtWidgets.QProgressBar() + self.progress_bar.setTextVisible(True) + self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) + self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) + self.progress_bar.setMinimum(0) + self.progress_bar.setValue(0) + self.progress_bar.setStyleSheet( + self.common.gui.css["downloads_uploads_progress_bar"] + ) + + # The message widget, if a message was included + self.message = ReceiveHistoryItemMessage(self.common) + + # This layout contains file widgets + self.files_layout = QtWidgets.QVBoxLayout() + self.files_layout.setContentsMargins(0, 0, 0, 0) + files_widget = QtWidgets.QWidget() + files_widget.setStyleSheet(self.common.gui.css["receive_file"]) + files_widget.setLayout(self.files_layout) + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.label) + layout.addWidget(self.message) + layout.addWidget(self.progress_bar) + layout.addWidget(files_widget) + layout.addStretch() + self.setLayout(layout) + + # We're also making a dictionary of file widgets, to make them easier to access + self.files = {} + + def includes_message(self, message_filename): + self.message.set_filename(message_filename) + + def update(self, data): + """ + Using the progress from Web, update the progress bar and file size labels + for each file + """ + if data["action"] == "progress": + total_uploaded_bytes = 0 + for filename in data["progress"]: + total_uploaded_bytes += data["progress"][filename]["uploaded_bytes"] + + # Update the progress bar + self.progress_bar.setMaximum(self.content_length / 1024) + self.progress_bar.setValue(total_uploaded_bytes / 1024) + + elapsed = datetime.now() - self.started + if elapsed.seconds < 10: + pb_fmt = strings._("gui_all_modes_progress_starting").format( + self.common.human_readable_filesize(total_uploaded_bytes) + ) + else: + estimated_time_remaining = self.common.estimated_time_remaining( + total_uploaded_bytes, self.content_length, self.started.timestamp() + ) + pb_fmt = strings._("gui_all_modes_progress_eta").format( + self.common.human_readable_filesize(total_uploaded_bytes), + estimated_time_remaining, + ) + + self.progress_bar.setFormat(pb_fmt) + + # Using list(progress) to avoid "RuntimeError: dictionary changed size during iteration" + for filename in list(data["progress"]): + # Add a new file if needed + if filename not in self.files: + self.files[filename] = ReceiveHistoryItemFile(self.common, filename) + self.files_layout.addWidget(self.files[filename]) + + # Update the file + self.files[filename].update( + data["progress"][filename]["uploaded_bytes"], + data["progress"][filename]["complete"], + ) + + elif data["action"] == "rename": + self.files[data["old_filename"]].rename(data["new_filename"]) + self.files[data["new_filename"]] = self.files.pop(data["old_filename"]) + + elif data["action"] == "set_dir": + self.files[data["filename"]].set_dir(data["dir"]) + + elif data["action"] == "finished": + # Change the status + self.status = HistoryItem.STATUS_FINISHED + + # Hide the progress bar + self.progress_bar.hide() + + # Change the label + self.label.setText(self.get_finished_label_text(self.started)) + self.label.setStyleSheet(self.common.gui.css["history_default_label"]) + + elif data["action"] == "canceled": + # Change the status + self.status = HistoryItem.STATUS_CANCELED + + # Hide the progress bar + self.progress_bar.hide() + + # Change the label + self.label.setText(self.get_canceled_label_text(self.started)) + + +class IndividualFileHistoryItem(HistoryItem): + """ + Individual file history item, for share mode viewing of individual files + """ + + def __init__(self, common, data, path): + super(IndividualFileHistoryItem, self).__init__() + self.status = HistoryItem.STATUS_STARTED + self.common = common + + self.id = id + self.path = path + self.total_bytes = 0 + self.downloaded_bytes = 0 + self.started = time.time() + self.started_dt = datetime.fromtimestamp(self.started) + self.status = HistoryItem.STATUS_STARTED + + self.directory_listing = "directory_listing" in data + + # Labels + self.timestamp_label = QtWidgets.QLabel( + self.started_dt.strftime("%b %d, %I:%M%p") + ) + self.timestamp_label.setStyleSheet( + self.common.gui.css["history_individual_file_timestamp_label"] + ) + self.path_label = QtWidgets.QLabel(self.path) + self.path_label.setStyleSheet(self.common.gui.css["history_default_label"]) + self.status_code_label = QtWidgets.QLabel() + + # Progress bar + self.progress_bar = QtWidgets.QProgressBar() + self.progress_bar.setTextVisible(True) + self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) + self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) + self.progress_bar.setValue(0) + self.progress_bar.setStyleSheet( + self.common.gui.css["downloads_uploads_progress_bar"] + ) + + # Text layout + labels_layout = QtWidgets.QHBoxLayout() + labels_layout.addWidget(self.timestamp_label) + labels_layout.addWidget(self.path_label) + labels_layout.addWidget(self.status_code_label) + labels_layout.addStretch() + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.addLayout(labels_layout) + layout.addWidget(self.progress_bar) + self.setLayout(layout) + + # Is a status code already sent? + if "status_code" in data: + self.status_code_label.setText(str(data["status_code"])) + if data["status_code"] >= 200 and data["status_code"] < 300: + self.status_code_label.setStyleSheet( + self.common.gui.css["history_individual_file_status_code_label_2xx"] + ) + if data["status_code"] >= 400 and data["status_code"] < 500: + self.status_code_label.setStyleSheet( + self.common.gui.css["history_individual_file_status_code_label_4xx"] + ) + self.status = HistoryItem.STATUS_FINISHED + self.progress_bar.hide() + return + + else: + self.total_bytes = data["filesize"] + self.progress_bar.setMinimum(0) + self.progress_bar.setMaximum(data["filesize"] / 1024) + self.progress_bar.total_bytes = data["filesize"] + + # Start at 0 + self.update(0) + + def update(self, downloaded_bytes): + self.downloaded_bytes = downloaded_bytes + + self.progress_bar.setValue(downloaded_bytes / 1024) + if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024): + self.status_code_label.setText("200") + self.status_code_label.setStyleSheet( + self.common.gui.css["history_individual_file_status_code_label_2xx"] + ) + self.progress_bar.hide() + self.status = HistoryItem.STATUS_FINISHED + + else: + elapsed = time.time() - self.started + if elapsed < 10: + # Wait a couple of seconds for the download rate to stabilize. + # This prevents a "Windows copy dialog"-esque experience at + # the beginning of the download. + pb_fmt = strings._("gui_all_modes_progress_starting").format( + self.common.human_readable_filesize(downloaded_bytes) + ) + else: + pb_fmt = strings._("gui_all_modes_progress_eta").format( + self.common.human_readable_filesize(downloaded_bytes), + self.estimated_time_remaining, + ) + + self.progress_bar.setFormat(pb_fmt) + + def cancel(self): + self.progress_bar.setFormat(strings._("gui_canceled")) + self.status = HistoryItem.STATUS_CANCELED + + @property + def estimated_time_remaining(self): + return self.common.estimated_time_remaining( + self.downloaded_bytes, self.total_bytes, self.started + ) + + +class HistoryItemList(QtWidgets.QScrollArea): + """ + List of items + """ + + def __init__(self, common): + super(HistoryItemList, self).__init__() + self.common = common + + self.items = {} + + # The layout that holds all of the items + self.items_layout = QtWidgets.QVBoxLayout() + self.items_layout.setContentsMargins(0, 0, 0, 0) + self.items_layout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) + + # Wrapper layout that also contains a stretch + wrapper_layout = QtWidgets.QVBoxLayout() + wrapper_layout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) + wrapper_layout.addLayout(self.items_layout) + wrapper_layout.addStretch() + + # The internal widget of the scroll area + widget = QtWidgets.QWidget() + widget.setLayout(wrapper_layout) + self.setWidget(widget) + self.setWidgetResizable(True) + + # Other scroll area settings + self.setBackgroundRole(QtGui.QPalette.Light) + self.verticalScrollBar().rangeChanged.connect(self.resizeScroll) + + def resizeScroll(self, minimum, maximum): + """ + Scroll to the bottom of the window when the range changes. + """ + self.verticalScrollBar().setValue(maximum) + + def add(self, id, item): + """ + Add a new item. Override this method. + """ + self.items[id] = item + self.items_layout.addWidget(item) + + def update(self, id, data): + """ + Update an item. Override this method. + """ + if id in self.items: + self.items[id].update(data) + + def cancel(self, id): + """ + Cancel an item. Override this method. + """ + if id in self.items: + self.items[id].cancel() + + def includes_message(self, id, message_filename): + """ + Show message button for receive mode + """ + if id in self.items: + self.items[id].includes_message(message_filename) + + def reset(self): + """ + Reset all items, emptying the list. Override this method. + """ + for key, item in self.items.copy().items(): + self.items_layout.removeWidget(item) + item.close() + del self.items[key] + + +class History(QtWidgets.QWidget): + """ + A history of what's happened so far in this mode. This contains an internal + object full of a scrollable list of items. + """ + + def __init__(self, common, empty_image, empty_text, header_text, mode=""): + super(History, self).__init__() + self.common = common + self.mode = mode + + self.setMinimumWidth(350) + + # In progress and completed counters + self.in_progress_count = 0 + self.completed_count = 0 + self.requests_count = 0 + + # In progress, completed, and requests labels + self.in_progress_label = QtWidgets.QLabel() + self.in_progress_label.setStyleSheet(self.common.gui.css["mode_info_label"]) + self.completed_label = QtWidgets.QLabel() + self.completed_label.setStyleSheet(self.common.gui.css["mode_info_label"]) + self.requests_label = QtWidgets.QLabel() + self.requests_label.setStyleSheet(self.common.gui.css["mode_info_label"]) + + # Header + self.header_label = QtWidgets.QLabel(header_text) + self.header_label.setStyleSheet(self.common.gui.css["downloads_uploads_label"]) + self.clear_button = QtWidgets.QPushButton( + strings._("gui_all_modes_clear_history") + ) + self.clear_button.setStyleSheet(self.common.gui.css["downloads_uploads_clear"]) + self.clear_button.setFlat(True) + self.clear_button.clicked.connect(self.reset) + header_layout = QtWidgets.QHBoxLayout() + header_layout.addWidget(self.header_label) + header_layout.addStretch() + header_layout.addWidget(self.in_progress_label) + header_layout.addWidget(self.completed_label) + header_layout.addWidget(self.requests_label) + header_layout.addWidget(self.clear_button) + + # When there are no items + self.empty_image = QtWidgets.QLabel() + self.empty_image.setAlignment(QtCore.Qt.AlignCenter) + self.empty_image.setPixmap(empty_image) + self.empty_text = QtWidgets.QLabel(empty_text) + self.empty_text.setAlignment(QtCore.Qt.AlignCenter) + self.empty_text.setStyleSheet( + self.common.gui.css["downloads_uploads_empty_text"] + ) + empty_layout = QtWidgets.QVBoxLayout() + empty_layout.addStretch() + empty_layout.addWidget(self.empty_image) + empty_layout.addWidget(self.empty_text) + empty_layout.addStretch() + self.empty = QtWidgets.QWidget() + self.empty.setStyleSheet(self.common.gui.css["downloads_uploads_empty"]) + self.empty.setLayout(empty_layout) + + # When there are items + self.item_list = HistoryItemList(self.common) + self.not_empty_layout = QtWidgets.QVBoxLayout() + self.not_empty_layout.addLayout(header_layout) + self.not_empty_layout.addWidget(self.item_list) + self.not_empty = QtWidgets.QWidget() + self.not_empty.setStyleSheet(self.common.gui.css["downloads_uploads_not_empty"]) + self.not_empty.setLayout(self.not_empty_layout) + + # Layout + layout = QtWidgets.QVBoxLayout() + layout.setContentsMargins(0, 0, 0, 0) + layout.addWidget(self.empty) + layout.addWidget(self.not_empty) + self.setLayout(layout) + + # Reset once at the beginning + self.reset() + + def add(self, id, item): + """ + Add a new item. + """ + self.common.log("History", "add", f"id: {id}") + + # Hide empty, show not empty + self.empty.hide() + self.not_empty.show() + + # Add it to the list + self.item_list.add(id, item) + + def update(self, id, data): + """ + Update an item. + """ + self.item_list.update(id, data) + + def cancel(self, id): + """ + Cancel an item. + """ + self.item_list.cancel(id) + + def includes_message(self, id, message_filename): + """ + Show the message button + """ + self.item_list.includes_message(id, message_filename) + + def reset(self): + """ + Reset all items. + """ + self.item_list.reset() + if len(self.item_list.items) == 0: + # Hide not empty, show empty + self.not_empty.hide() + self.empty.show() + # Reset in-progress counter + self.in_progress_count = 0 + self.update_in_progress() + + # Reset completed counter + self.completed_count = 0 + self.update_completed() + + # Reset web requests counter + self.requests_count = 0 + self.update_requests() + + def update_completed(self): + """ + Update the 'completed' widget. + """ + if self.completed_count == 0: + image = GuiCommon.get_resource_path("images/history_completed_none.png") + else: + image = GuiCommon.get_resource_path("images/history_completed.png") + self.completed_label.setText(f' {self.completed_count}') + self.completed_label.setToolTip( + strings._("history_completed_tooltip").format(self.completed_count) + ) + + def update_in_progress(self): + """ + Update the 'in progress' widget. + """ + if self.in_progress_count == 0: + image = GuiCommon.get_resource_path("images/history_in_progress_none.png") + else: + image = GuiCommon.get_resource_path("images/history_in_progress.png") + + self.in_progress_label.setText( + f' {self.in_progress_count}' + ) + self.in_progress_label.setToolTip( + strings._("history_in_progress_tooltip").format(self.in_progress_count) + ) + + def update_requests(self): + """ + Update the 'web requests' widget. + """ + if self.requests_count == 0: + image = GuiCommon.get_resource_path("images/history_requests_none.png") + else: + image = GuiCommon.get_resource_path("images/history_requests.png") + + self.requests_label.setText(f' {self.requests_count}') + self.requests_label.setToolTip( + strings._("history_requests_tooltip").format(self.requests_count) + ) + + +class ToggleHistory(QtWidgets.QPushButton): + """ + Widget for toggling showing or hiding the history, as well as keeping track + of the indicator counter if it's hidden + """ + + def __init__(self, common, current_mode, history_widget, icon, selected_icon): + super(ToggleHistory, self).__init__() + self.common = common + self.current_mode = current_mode + self.history_widget = history_widget + self.icon = icon + self.selected_icon = selected_icon + + # Toggle button + self.setDefault(False) + self.setFixedWidth(35) + self.setFixedHeight(30) + self.setFlat(True) + self.setIcon(icon) + self.clicked.connect(self.toggle_clicked) + + # Keep track of indicator + self.indicator_count = 0 + self.indicator_label = QtWidgets.QLabel(parent=self) + self.indicator_label.setStyleSheet( + self.common.gui.css["download_uploads_indicator"] + ) + self.update_indicator() + + def update_indicator(self, increment=False): + """ + Update the display of the indicator count. If increment is True, then + only increment the counter if History is hidden. + """ + if increment and not self.history_widget.isVisible(): + self.indicator_count += 1 + + self.indicator_label.setText(str(self.indicator_count)) + + if self.indicator_count == 0: + self.indicator_label.hide() + else: + size = self.indicator_label.sizeHint() + self.indicator_label.setGeometry( + 35 - size.width(), 0, size.width(), size.height() + ) + self.indicator_label.show() + + def toggle_clicked(self): + """ + Toggle showing and hiding the history widget + """ + self.common.log("ToggleHistory", "toggle_clicked") + + if self.history_widget.isVisible(): + self.history_widget.hide() + self.setIcon(self.icon) + self.setFlat(True) + else: + self.history_widget.show() + self.setIcon(self.selected_icon) + self.setFlat(False) + + # Reset the indicator count + self.indicator_count = 0 + self.update_indicator() diff --git a/desktop/onionshare/tab/mode/mode_settings_widget.py b/desktop/onionshare/tab/mode/mode_settings_widget.py new file mode 100644 index 00000000..0e80023e --- /dev/null +++ b/desktop/onionshare/tab/mode/mode_settings_widget.py @@ -0,0 +1,288 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets + +from ... import strings + + +class ModeSettingsWidget(QtWidgets.QScrollArea): + """ + All of the common settings for each mode are in this widget + """ + + change_persistent = QtCore.Signal(int, bool) + + def __init__(self, common, tab, mode_settings): + super(ModeSettingsWidget, self).__init__() + self.common = common + self.tab = tab + self.settings = mode_settings + + # Downstream Mode need to fill in this layout with its settings + self.mode_specific_layout = QtWidgets.QVBoxLayout() + + # Persistent + self.persistent_checkbox = QtWidgets.QCheckBox() + self.persistent_checkbox.clicked.connect(self.persistent_checkbox_clicked) + self.persistent_checkbox.setText(strings._("mode_settings_persistent_checkbox")) + if self.settings.get("persistent", "enabled"): + self.persistent_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.persistent_checkbox.setCheckState(QtCore.Qt.Unchecked) + + # Public + self.public_checkbox = QtWidgets.QCheckBox() + self.public_checkbox.clicked.connect(self.public_checkbox_clicked) + self.public_checkbox.setText(strings._("mode_settings_public_checkbox")) + if self.settings.get("general", "public"): + self.public_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.public_checkbox.setCheckState(QtCore.Qt.Unchecked) + + # Title + title_label = QtWidgets.QLabel(strings._("mode_settings_title_label")) + self.title_lineedit = QtWidgets.QLineEdit() + self.title_lineedit.editingFinished.connect(self.title_editing_finished) + if self.settings.get("general", "title"): + self.title_lineedit.setText(self.settings.get("general", "title")) + title_layout = QtWidgets.QHBoxLayout() + title_layout.addWidget(title_label) + title_layout.addWidget(self.title_lineedit) + + # Whether or not to use an auto-start timer + self.autostart_timer_checkbox = QtWidgets.QCheckBox() + self.autostart_timer_checkbox.clicked.connect( + self.autostart_timer_checkbox_clicked + ) + self.autostart_timer_checkbox.setText( + strings._("mode_settings_autostart_timer_checkbox") + ) + if self.settings.get("general", "autostart_timer"): + self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) + + # The autostart timer widget + self.autostart_timer_widget = QtWidgets.QDateTimeEdit() + self.autostart_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") + self.autostart_timer_reset() + self.autostart_timer_widget.setCurrentSection( + QtWidgets.QDateTimeEdit.MinuteSection + ) + if self.settings.get("general", "autostart_timer"): + self.autostart_timer_widget.show() + else: + self.autostart_timer_widget.hide() + + # Autostart timer layout + autostart_timer_layout = QtWidgets.QHBoxLayout() + autostart_timer_layout.setContentsMargins(0, 0, 0, 0) + autostart_timer_layout.addWidget(self.autostart_timer_checkbox) + autostart_timer_layout.addWidget(self.autostart_timer_widget) + + # Whether or not to use an auto-stop timer + self.autostop_timer_checkbox = QtWidgets.QCheckBox() + self.autostop_timer_checkbox.clicked.connect( + self.autostop_timer_checkbox_clicked + ) + self.autostop_timer_checkbox.setText( + strings._("mode_settings_autostop_timer_checkbox") + ) + if self.settings.get("general", "autostop_timer"): + self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) + + # The autostop timer widget + self.autostop_timer_widget = QtWidgets.QDateTimeEdit() + self.autostop_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") + self.autostop_timer_reset() + self.autostop_timer_widget.setCurrentSection( + QtWidgets.QDateTimeEdit.MinuteSection + ) + if self.settings.get("general", "autostop_timer"): + self.autostop_timer_widget.show() + else: + self.autostop_timer_widget.hide() + + # Autostop timer layout + autostop_timer_layout = QtWidgets.QHBoxLayout() + autostop_timer_layout.setContentsMargins(0, 0, 0, 0) + autostop_timer_layout.addWidget(self.autostop_timer_checkbox) + autostop_timer_layout.addWidget(self.autostop_timer_widget) + + # Toggle advanced settings + self.toggle_advanced_button = QtWidgets.QPushButton() + self.toggle_advanced_button.clicked.connect(self.toggle_advanced_clicked) + self.toggle_advanced_button.setFlat(True) + self.toggle_advanced_button.setStyleSheet( + self.common.gui.css["mode_settings_toggle_advanced"] + ) + + # Advanced group itself + advanced_layout = QtWidgets.QVBoxLayout() + advanced_layout.setContentsMargins(0, 0, 0, 0) + advanced_layout.addLayout(title_layout) + advanced_layout.addLayout(autostart_timer_layout) + advanced_layout.addLayout(autostop_timer_layout) + self.advanced_widget = QtWidgets.QWidget() + self.advanced_widget.setLayout(advanced_layout) + self.advanced_widget.hide() + + layout = QtWidgets.QVBoxLayout() + layout.addLayout(self.mode_specific_layout) + layout.addWidget(self.persistent_checkbox) + layout.addWidget(self.public_checkbox) + layout.addWidget(self.advanced_widget) + layout.addWidget(self.toggle_advanced_button) + layout.addStretch() + main_widget = QtWidgets.QWidget() + main_widget.setLayout(layout) + + self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) + self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) + self.setWidgetResizable(True) + self.setFrameShape(QtWidgets.QFrame.NoFrame) + self.setWidget(main_widget) + + self.update_ui() + + def update_ui(self): + # Update text on advanced group toggle button + if self.advanced_widget.isVisible(): + self.toggle_advanced_button.setText( + strings._("mode_settings_advanced_toggle_hide") + ) + else: + self.toggle_advanced_button.setText( + strings._("mode_settings_advanced_toggle_show") + ) + + def title_editing_finished(self): + if self.title_lineedit.text().strip() == "": + self.title_lineedit.setText("") + self.settings.set("general", "title", None) + if self.tab.mode == self.common.gui.MODE_SHARE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_share") + ) + elif self.tab.mode == self.common.gui.MODE_RECEIVE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_receive") + ) + elif self.tab.mode == self.common.gui.MODE_WEBSITE: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_website") + ) + elif self.tab.mode == self.common.gui.MODE_CHAT: + self.tab.change_title.emit( + self.tab.tab_id, strings._("gui_tab_name_chat") + ) + elif self.tab_mode is None: + pass + else: + title = self.title_lineedit.text() + self.settings.set("general", "title", title) + self.tab.change_title.emit(self.tab.tab_id, title) + + def persistent_checkbox_clicked(self): + self.settings.set("persistent", "enabled", self.persistent_checkbox.isChecked()) + self.settings.set("persistent", "mode", self.tab.mode) + self.change_persistent.emit( + self.tab.tab_id, self.persistent_checkbox.isChecked() + ) + + # If disabling persistence, delete the file from disk + if not self.persistent_checkbox.isChecked(): + self.settings.delete() + + def public_checkbox_clicked(self): + self.settings.set("general", "public", self.public_checkbox.isChecked()) + + def autostart_timer_checkbox_clicked(self): + self.settings.set( + "general", "autostart_timer", self.autostart_timer_checkbox.isChecked() + ) + + if self.autostart_timer_checkbox.isChecked(): + self.autostart_timer_widget.show() + else: + self.autostart_timer_widget.hide() + + def autostop_timer_checkbox_clicked(self): + self.settings.set( + "general", "autostop_timer", self.autostop_timer_checkbox.isChecked() + ) + + if self.autostop_timer_checkbox.isChecked(): + self.autostop_timer_widget.show() + else: + self.autostop_timer_widget.hide() + + def toggle_advanced_clicked(self): + if self.advanced_widget.isVisible(): + self.advanced_widget.hide() + else: + self.advanced_widget.show() + + self.update_ui() + + def autostart_timer_reset(self): + """ + Reset the auto-start timer in the UI after stopping a share + """ + if self.common.gui.local_only: + # For testing + self.autostart_timer_widget.setDateTime( + QtCore.QDateTime.currentDateTime().addSecs(15) + ) + self.autostart_timer_widget.setMinimumDateTime( + QtCore.QDateTime.currentDateTime() + ) + else: + self.autostart_timer_widget.setDateTime( + QtCore.QDateTime.currentDateTime().addSecs( + 300 + ) # 5 minutes in the future + ) + self.autostart_timer_widget.setMinimumDateTime( + QtCore.QDateTime.currentDateTime().addSecs(60) + ) + + def autostop_timer_reset(self): + """ + Reset the auto-stop timer in the UI after stopping a share + """ + if self.common.gui.local_only: + # For testing + self.autostop_timer_widget.setDateTime( + QtCore.QDateTime.currentDateTime().addSecs(15) + ) + self.autostop_timer_widget.setMinimumDateTime( + QtCore.QDateTime.currentDateTime() + ) + else: + self.autostop_timer_widget.setDateTime( + QtCore.QDateTime.currentDateTime().addSecs(300) + ) + self.autostop_timer_widget.setMinimumDateTime( + QtCore.QDateTime.currentDateTime().addSecs(60) + ) diff --git a/desktop/onionshare/tab/mode/receive_mode/__init__.py b/desktop/onionshare/tab/mode/receive_mode/__init__.py new file mode 100644 index 00000000..b2b2fc5a --- /dev/null +++ b/desktop/onionshare/tab/mode/receive_mode/__init__.py @@ -0,0 +1,427 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.web import Web + +from ..history import History, ToggleHistory, ReceiveHistoryItem +from .. import Mode +from .... import strings +from ....widgets import MinimumSizeWidget, Alert +from ....gui_common import GuiCommon + + +class ReceiveMode(Mode): + """ + Parts of the main window UI for receiving files. + """ + + def init(self): + """ + Custom initialization for ReceiveMode. + """ + # Create the Web object + self.web = Web(self.common, True, self.settings, "receive") + + # Receive image + self.image_label = QtWidgets.QLabel() + self.image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path( + "images/{}_mode_receive.png".format(self.common.gui.color_mode) + ) + ) + ) + ) + self.image_label.setFixedSize(250, 250) + image_layout = QtWidgets.QVBoxLayout() + image_layout.addWidget(self.image_label) + self.image = QtWidgets.QWidget() + self.image.setLayout(image_layout) + + # Settings + + # Data dir + data_dir_label = QtWidgets.QLabel( + strings._("mode_settings_receive_data_dir_label") + ) + self.data_dir_lineedit = QtWidgets.QLineEdit() + self.data_dir_lineedit.setReadOnly(True) + self.data_dir_lineedit.setText(self.settings.get("receive", "data_dir")) + data_dir_button = QtWidgets.QPushButton( + strings._("mode_settings_receive_data_dir_browse_button") + ) + data_dir_button.clicked.connect(self.data_dir_button_clicked) + data_dir_layout = QtWidgets.QHBoxLayout() + data_dir_layout.addWidget(data_dir_label) + data_dir_layout.addWidget(self.data_dir_lineedit) + data_dir_layout.addWidget(data_dir_button) + self.mode_settings_widget.mode_specific_layout.addLayout(data_dir_layout) + + # Disable text or files + self.disable_text_checkbox = self.settings.get("receive", "disable_files") + self.disable_text_checkbox = QtWidgets.QCheckBox() + self.disable_text_checkbox.clicked.connect(self.disable_text_checkbox_clicked) + self.disable_text_checkbox.setText( + strings._("mode_settings_receive_disable_text_checkbox") + ) + self.disable_files_checkbox = self.settings.get("receive", "disable_files") + self.disable_files_checkbox = QtWidgets.QCheckBox() + self.disable_files_checkbox.clicked.connect(self.disable_files_checkbox_clicked) + self.disable_files_checkbox.setText( + strings._("mode_settings_receive_disable_files_checkbox") + ) + disable_layout = QtWidgets.QHBoxLayout() + disable_layout.addWidget(self.disable_text_checkbox) + disable_layout.addWidget(self.disable_files_checkbox) + disable_layout.addStretch() + self.mode_settings_widget.mode_specific_layout.addLayout(disable_layout) + + # Webhook URL + webhook_url = self.settings.get("receive", "webhook_url") + self.webhook_url_checkbox = QtWidgets.QCheckBox() + self.webhook_url_checkbox.clicked.connect(self.webhook_url_checkbox_clicked) + self.webhook_url_checkbox.setText( + strings._("mode_settings_receive_webhook_url_checkbox") + ) + self.webhook_url_lineedit = QtWidgets.QLineEdit() + self.webhook_url_lineedit.editingFinished.connect( + self.webhook_url_editing_finished + ) + self.webhook_url_lineedit.setPlaceholderText( + "https://example.com/post-when-file-uploaded" + ) + webhook_url_layout = QtWidgets.QHBoxLayout() + webhook_url_layout.addWidget(self.webhook_url_checkbox) + webhook_url_layout.addWidget(self.webhook_url_lineedit) + if webhook_url is not None and webhook_url != "": + self.webhook_url_checkbox.setCheckState(QtCore.Qt.Checked) + self.webhook_url_lineedit.setText( + self.settings.get("receive", "webhook_url") + ) + self.show_webhook_url() + else: + self.webhook_url_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.hide_webhook_url() + self.mode_settings_widget.mode_specific_layout.addLayout(webhook_url_layout) + + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_receive") + ) + + # Server status + self.server_status.set_mode("receive") + self.server_status.server_started_finished.connect(self.update_primary_action) + self.server_status.server_stopped.connect(self.update_primary_action) + self.server_status.server_canceled.connect(self.update_primary_action) + + # Tell server_status about web, then update + self.server_status.web = self.web + self.server_status.update() + + # Upload history + self.history = History( + self.common, + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path("images/receive_icon_transparent.png") + ) + ), + strings._("gui_receive_mode_no_files"), + strings._("gui_all_modes_history"), + ) + self.history.hide() + + # Toggle history + self.toggle_history = ToggleHistory( + self.common, + self, + self.history, + QtGui.QIcon(GuiCommon.get_resource_path("images/receive_icon_toggle.png")), + QtGui.QIcon( + GuiCommon.get_resource_path("images/receive_icon_toggle_selected.png") + ), + ) + + # Header + header_label = QtWidgets.QLabel(strings._("gui_new_tab_receive_button")) + header_label.setStyleSheet(self.common.gui.css["mode_header_label"]) + + # Receive mode warning + receive_warning = QtWidgets.QLabel(strings._("gui_receive_mode_warning")) + receive_warning.setMinimumHeight(80) + receive_warning.setWordWrap(True) + + # Top bar + top_bar_layout = QtWidgets.QHBoxLayout() + top_bar_layout.addStretch() + top_bar_layout.addWidget(self.toggle_history) + + # Main layout + self.main_layout = QtWidgets.QVBoxLayout() + self.main_layout.addWidget(header_label) + self.main_layout.addWidget(receive_warning) + self.main_layout.addWidget(self.primary_action, stretch=1) + self.main_layout.addWidget(self.server_status) + + # Row layout + content_row = QtWidgets.QHBoxLayout() + content_row.addLayout(self.main_layout, stretch=1) + content_row.addWidget(self.image) + row_layout = QtWidgets.QVBoxLayout() + row_layout.addLayout(top_bar_layout) + row_layout.addLayout(content_row, stretch=1) + + # Column layout + self.column_layout = QtWidgets.QHBoxLayout() + self.column_layout.addLayout(row_layout) + self.column_layout.addWidget(self.history, stretch=1) + + # Content layout + self.content_layout.addLayout(self.column_layout) + + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "receive" + + def data_dir_button_clicked(self): + """ + Browse for a new OnionShare data directory, and save to tab settings + """ + data_dir = self.data_dir_lineedit.text() + selected_dir = QtWidgets.QFileDialog.getExistingDirectory( + self, strings._("mode_settings_receive_data_dir_label"), data_dir + ) + + if selected_dir: + # If we're running inside a flatpak package, the data dir must be inside ~/OnionShare + if self.common.gui.is_flatpak: + if not selected_dir.startswith(os.path.expanduser("~/OnionShare")): + Alert(self.common, strings._("gui_receive_flatpak_data_dir")) + return + + self.common.log( + "ReceiveMode", + "data_dir_button_clicked", + f"selected dir: {selected_dir}", + ) + self.data_dir_lineedit.setText(selected_dir) + self.settings.set("receive", "data_dir", selected_dir) + + def disable_text_checkbox_clicked(self): + self.settings.set( + "receive", "disable_text", self.disable_text_checkbox.isChecked() + ) + + def disable_files_checkbox_clicked(self): + self.settings.set( + "receive", "disable_files", self.disable_files_checkbox.isChecked() + ) + + def webhook_url_checkbox_clicked(self): + if self.webhook_url_checkbox.isChecked(): + if self.settings.get("receive", "webhook_url"): + self.webhook_url_lineedit.setText( + self.settings.get("receive", "webhook_url") + ) + self.show_webhook_url() + else: + self.settings.set("receive", "webhook_url", None) + self.hide_webhook_url() + + def webhook_url_editing_finished(self): + self.settings.set("receive", "webhook_url", self.webhook_url_lineedit.text()) + + def hide_webhook_url(self): + self.webhook_url_lineedit.hide() + + def show_webhook_url(self): + self.webhook_url_lineedit.show() + + def get_stop_server_autostop_timer_text(self): + """ + Return the string to put on the stop server button, if there's an auto-stop timer + """ + return strings._("gui_receive_stop_server_autostop_timer") + + def autostop_timer_finished_should_stop_server(self): + """ + 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.cur_history_id == 0 + or not self.web.receive_mode.uploads_in_progress + ): + self.server_status.stop_server() + 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_autostop_timer_waiting") + ) + self.web.receive_mode.can_upload = False + return False + + def start_server_custom(self): + """ + Starting the server. + """ + # Reset web counters + self.web.receive_mode.cur_history_id = 0 + + # Hide and reset the uploads if we have previously shared + self.reset_info_counters() + + # Set proxies for webhook URL + if self.common.gui.local_only: + self.web.proxies = None + else: + (socks_address, socks_port) = self.common.gui.onion.get_tor_socks_port() + self.web.proxies = { + "http": f"socks5h://{socks_address}:{socks_port}", + "https": f"socks5h://{socks_address}:{socks_port}", + } + + def start_server_step2_custom(self): + """ + Step 2 in starting the server. + """ + # Continue + self.starting_server_step3.emit() + self.start_server_finished.emit() + + def handle_tor_broke_custom(self): + """ + Connection to Tor broke. + """ + self.primary_action.hide() + + def handle_request_load(self, event): + """ + Handle REQUEST_LOAD event. + """ + self.system_tray.showMessage( + strings._("systray_page_loaded_title"), + strings._("systray_page_loaded_message"), + ) + + def handle_request_started(self, event): + """ + Handle REQUEST_STARTED event. + """ + item = ReceiveHistoryItem( + self.common, + event["data"]["id"], + event["data"]["content_length"], + ) + + self.history.add(event["data"]["id"], item) + self.toggle_history.update_indicator(True) + self.history.in_progress_count += 1 + self.history.update_in_progress() + + self.system_tray.showMessage( + strings._("systray_receive_started_title"), + strings._("systray_receive_started_message"), + ) + + def handle_request_progress(self, event): + """ + Handle REQUEST_PROGRESS event. + """ + self.history.update( + event["data"]["id"], + {"action": "progress", "progress": event["data"]["progress"]}, + ) + + def handle_request_upload_includes_message(self, event): + """ + Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event. + """ + self.history.includes_message(event["data"]["id"], event["data"]["filename"]) + + def handle_request_upload_file_renamed(self, event): + """ + Handle REQUEST_UPLOAD_FILE_RENAMED event. + """ + self.history.update( + event["data"]["id"], + { + "action": "rename", + "old_filename": event["data"]["old_filename"], + "new_filename": event["data"]["new_filename"], + }, + ) + + def handle_request_upload_set_dir(self, event): + """ + Handle REQUEST_UPLOAD_SET_DIR event. + """ + self.history.update( + event["data"]["id"], + { + "action": "set_dir", + "filename": event["data"]["filename"], + "dir": event["data"]["dir"], + }, + ) + + def handle_request_upload_finished(self, event): + """ + Handle REQUEST_UPLOAD_FINISHED event. + """ + self.history.update(event["data"]["id"], {"action": "finished"}) + self.history.completed_count += 1 + self.history.in_progress_count -= 1 + self.history.update_completed() + self.history.update_in_progress() + + def handle_request_upload_canceled(self, event): + """ + Handle REQUEST_UPLOAD_CANCELED event. + """ + self.history.update(event["data"]["id"], {"action": "canceled"}) + self.history.in_progress_count -= 1 + self.history.update_in_progress() + + def on_reload_settings(self): + """ + We should be ok to re-enable the 'Start Receive Mode' button now. + """ + self.primary_action.show() + + def reset_info_counters(self): + """ + Set the info counters back to zero. + """ + self.history.reset() + self.toggle_history.indicator_count = 0 + self.toggle_history.update_indicator() + + def update_primary_action(self): + self.common.log("ReceiveMode", "update_primary_action") diff --git a/desktop/onionshare/tab/mode/share_mode/__init__.py b/desktop/onionshare/tab/mode/share_mode/__init__.py new file mode 100644 index 00000000..ed7f6912 --- /dev/null +++ b/desktop/onionshare/tab/mode/share_mode/__init__.py @@ -0,0 +1,478 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.common import Common +from onionshare_cli.web import Web + +from .threads import CompressThread +from .. import Mode +from ..file_selection import FileSelection +from ..history import History, ToggleHistory, ShareHistoryItem +from .... import strings +from ....widgets import MinimumSizeWidget +from ....gui_common import GuiCommon + + +class ShareMode(Mode): + """ + Parts of the main window UI for sharing files. + """ + + def init(self): + """ + Custom initialization for ReceiveMode. + """ + # Threads start out as None + self.compress_thread = None + + # Create the Web object + self.web = Web(self.common, True, self.settings, "share") + + # Settings + self.autostop_sharing_checkbox = QtWidgets.QCheckBox() + self.autostop_sharing_checkbox.clicked.connect( + self.autostop_sharing_checkbox_clicked + ) + self.autostop_sharing_checkbox.setText( + strings._("mode_settings_share_autostop_sharing_checkbox") + ) + if self.settings.get("share", "autostop_sharing"): + self.autostop_sharing_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.autostop_sharing_checkbox.setCheckState(QtCore.Qt.Unchecked) + + self.mode_settings_widget.mode_specific_layout.addWidget( + self.autostop_sharing_checkbox + ) + + # File selection + self.file_selection = FileSelection( + self.common, + "images/{}_mode_share.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_share_button"), + self, + ) + if self.filenames: + for filename in self.filenames: + self.file_selection.file_list.add_file(filename) + + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_share") + ) + + # Server status + self.server_status.set_mode("share", self.file_selection) + self.server_status.server_started.connect(self.file_selection.server_started) + self.server_status.server_stopped.connect(self.file_selection.server_stopped) + self.server_status.server_stopped.connect(self.update_primary_action) + self.server_status.server_canceled.connect(self.file_selection.server_stopped) + self.server_status.server_canceled.connect(self.update_primary_action) + self.file_selection.file_list.files_updated.connect(self.server_status.update) + self.file_selection.file_list.files_updated.connect(self.update_primary_action) + # Tell server_status about web, then update + self.server_status.web = self.web + self.server_status.update() + + # Filesize warning + self.filesize_warning = QtWidgets.QLabel() + self.filesize_warning.setWordWrap(True) + self.filesize_warning.setStyleSheet( + self.common.gui.css["share_filesize_warning"] + ) + self.filesize_warning.hide() + + # Download history + self.history = History( + self.common, + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path("images/share_icon_transparent.png") + ) + ), + strings._("gui_share_mode_no_files"), + strings._("gui_all_modes_history"), + ) + self.history.hide() + + # Info label + self.info_label = QtWidgets.QLabel() + self.info_label.hide() + + # Delete all files button + self.remove_all_button = QtWidgets.QPushButton( + strings._("gui_file_selection_remove_all") + ) + self.remove_all_button.setFlat(True) + self.remove_all_button.setStyleSheet( + self.common.gui.css["share_delete_all_files_button"] + ) + self.remove_all_button.clicked.connect(self.delete_all) + self.remove_all_button.hide() + + # Toggle history + self.toggle_history = ToggleHistory( + self.common, + self, + self.history, + QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")), + QtGui.QIcon( + GuiCommon.get_resource_path("images/share_icon_toggle_selected.png") + ), + ) + + # Top bar + top_bar_layout = QtWidgets.QHBoxLayout() + top_bar_layout.addWidget(self.info_label) + top_bar_layout.addStretch() + top_bar_layout.addWidget(self.remove_all_button) + top_bar_layout.addWidget(self.toggle_history) + + # Primary action layout + self.primary_action_layout.addWidget(self.filesize_warning) + self.primary_action.hide() + self.update_primary_action() + + # Status bar, zip progress bar + self._zip_progress_bar = None + + # Main layout + self.main_layout = QtWidgets.QVBoxLayout() + self.main_layout.addLayout(top_bar_layout) + self.main_layout.addLayout(self.file_selection) + self.main_layout.addWidget(self.primary_action, stretch=1) + self.main_layout.addWidget(self.server_status) + self.main_layout.addWidget(MinimumSizeWidget(700, 0)) + + # Column layout + self.column_layout = QtWidgets.QHBoxLayout() + self.column_layout.addLayout(self.main_layout) + self.column_layout.addWidget(self.history, stretch=1) + + # Content layout + self.content_layout.addLayout(self.column_layout) + + # Always start with focus on file selection + self.file_selection.setFocus() + + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "share" + + def autostop_sharing_checkbox_clicked(self): + """ + Save autostop sharing setting to the tab settings + """ + self.settings.set( + "share", "autostop_sharing", self.autostop_sharing_checkbox.isChecked() + ) + + def get_stop_server_autostop_timer_text(self): + """ + Return the string to put on the stop server button, if there's an auto-stop timer + """ + return strings._("gui_share_stop_server_autostop_timer") + + def autostop_timer_finished_should_stop_server(self): + """ + 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.history.in_progress_count == 0 or self.web.done: + self.server_status.stop_server() + 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_autostop_timer_waiting") + ) + return False + + def start_server_custom(self): + """ + Starting the server. + """ + # Reset web counters + self.web.share_mode.cur_history_id = 0 + + # Hide and reset the downloads if we have previously shared + self.reset_info_counters() + + self.remove_all_button.hide() + + def start_server_step2_custom(self): + """ + Step 2 in starting the server. Zipping up files. + """ + # Add progress bar to the status bar, indicating the compressing of files. + self._zip_progress_bar = ZipProgressBar(self.common, 0) + self.filenames = self.file_selection.get_filenames() + + self._zip_progress_bar.total_files_size = ShareMode._compute_total_size( + self.filenames + ) + self.status_bar.insertWidget(0, self._zip_progress_bar) + + # prepare the files for sending in a new thread + self.compress_thread = CompressThread(self) + self.compress_thread.success.connect(self.starting_server_step3.emit) + self.compress_thread.success.connect(self.start_server_finished.emit) + self.compress_thread.error.connect(self.starting_server_error.emit) + self.server_status.server_canceled.connect(self.compress_thread.cancel) + self.compress_thread.start() + + def start_server_step3_custom(self): + """ + Step 3 in starting the server. Remove zip progress bar, and display large filesize + warning, if applicable. + """ + # Remove zip progress bar + if self._zip_progress_bar is not None: + self.status_bar.removeWidget(self._zip_progress_bar) + self._zip_progress_bar = None + + # Warn about sending large files over Tor + if self.web.share_mode.download_filesize >= 157286400: # 150mb + self.filesize_warning.setText(strings._("large_filesize")) + self.filesize_warning.show() + + def start_server_error_custom(self): + """ + Start server error. + """ + if self._zip_progress_bar is not None: + self.status_bar.removeWidget(self._zip_progress_bar) + self._zip_progress_bar = None + + def stop_server_custom(self): + """ + Stop server. + """ + # Remove the progress bar + if self._zip_progress_bar is not None: + self.status_bar.removeWidget(self._zip_progress_bar) + self._zip_progress_bar = None + + self.filesize_warning.hide() + self.history.in_progress_count = 0 + self.history.completed_count = 0 + self.history.update_in_progress() + self.file_selection.file_list.adjustSize() + + self.remove_all_button.show() + + def cancel_server_custom(self): + """ + Stop the compression thread on cancel + """ + if self.compress_thread: + self.common.log("ShareMode", "cancel_server: quitting compress thread") + self.compress_thread.quit() + + def handle_tor_broke_custom(self): + """ + Connection to Tor broke. + """ + self.primary_action.hide() + + def handle_request_started(self, event): + """ + Handle REQUEST_STARTED event. + """ + if event["data"]["use_gzip"]: + filesize = self.web.share_mode.gzip_filesize + else: + filesize = self.web.share_mode.download_filesize + + item = ShareHistoryItem(self.common, event["data"]["id"], filesize) + self.history.add(event["data"]["id"], item) + self.toggle_history.update_indicator(True) + self.history.in_progress_count += 1 + self.history.update_in_progress() + + self.system_tray.showMessage( + strings._("systray_share_started_title"), + strings._("systray_share_started_message"), + ) + + def handle_request_progress(self, event): + """ + Handle REQUEST_PROGRESS event. + """ + self.history.update(event["data"]["id"], event["data"]["bytes"]) + + # Is the download complete? + if event["data"]["bytes"] == self.web.share_mode.filesize: + self.system_tray.showMessage( + strings._("systray_share_completed_title"), + strings._("systray_share_completed_message"), + ) + + # Update completed and in progress labels + self.history.completed_count += 1 + self.history.in_progress_count -= 1 + self.history.update_completed() + self.history.update_in_progress() + + # Close on finish? + if self.settings.get("share", "autostop_sharing"): + self.server_status.stop_server() + self.status_bar.clearMessage() + self.server_status_label.setText(strings._("closing_automatically")) + else: + if self.server_status.status == self.server_status.STATUS_STOPPED: + self.history.cancel(event["data"]["id"]) + self.history.in_progress_count = 0 + self.history.update_in_progress() + + def handle_request_canceled(self, event): + """ + Handle REQUEST_CANCELED event. + """ + self.history.cancel(event["data"]["id"]) + + # Update in progress count + self.history.in_progress_count -= 1 + self.history.update_in_progress() + self.system_tray.showMessage( + strings._("systray_share_canceled_title"), + strings._("systray_share_canceled_message"), + ) + + def on_reload_settings(self): + """ + If there were some files listed for sharing, we should be ok to re-enable + the 'Start Sharing' button now. + """ + if self.server_status.file_selection.get_num_files() > 0: + self.primary_action.show() + self.info_label.show() + self.remove_all_button.show() + + def update_primary_action(self): + self.common.log("ShareMode", "update_primary_action") + + # Show or hide primary action layout + file_count = self.file_selection.file_list.count() + if file_count > 0: + self.primary_action.show() + self.info_label.show() + self.remove_all_button.show() + + # Update the file count in the info label + total_size_bytes = 0 + for index in range(self.file_selection.file_list.count()): + item = self.file_selection.file_list.item(index) + total_size_bytes += item.size_bytes + total_size_readable = self.common.human_readable_filesize(total_size_bytes) + + if file_count > 1: + self.info_label.setText( + strings._("gui_file_info").format(file_count, total_size_readable) + ) + else: + self.info_label.setText( + strings._("gui_file_info_single").format( + file_count, total_size_readable + ) + ) + + else: + self.primary_action.hide() + self.info_label.hide() + self.remove_all_button.hide() + + def reset_info_counters(self): + """ + Set the info counters back to zero. + """ + self.history.reset() + self.toggle_history.indicator_count = 0 + self.toggle_history.update_indicator() + + def delete_all(self): + """ + Delete All button clicked + """ + self.file_selection.file_list.clear() + self.file_selection.file_list.files_updated.emit() + + self.file_selection.file_list.setCurrentItem(None) + + @staticmethod + def _compute_total_size(filenames): + total_size = 0 + for filename in filenames: + if os.path.isfile(filename): + total_size += os.path.getsize(filename) + if os.path.isdir(filename): + total_size += Common.dir_size(filename) + return total_size + + +class ZipProgressBar(QtWidgets.QProgressBar): + update_processed_size_signal = QtCore.Signal(int) + + def __init__(self, common, total_files_size): + super(ZipProgressBar, self).__init__() + self.common = common + + self.setMaximumHeight(20) + self.setMinimumWidth(200) + self.setValue(0) + self.setFormat(strings._("zip_progress_bar_format")) + self.setStyleSheet(self.common.gui.css["share_zip_progess_bar"]) + + self._total_files_size = total_files_size + self._processed_size = 0 + + self.update_processed_size_signal.connect(self.update_processed_size) + + @property + def total_files_size(self): + return self._total_files_size + + @total_files_size.setter + def total_files_size(self, val): + self._total_files_size = val + + @property + def processed_size(self): + return self._processed_size + + @processed_size.setter + def processed_size(self, val): + self.update_processed_size(val) + + def update_processed_size(self, val): + self._processed_size = val + + if self.processed_size < self.total_files_size: + self.setValue(int((self.processed_size * 100) / self.total_files_size)) + elif self.total_files_size != 0: + self.setValue(100) + else: + self.setValue(0) diff --git a/desktop/onionshare/tab/mode/share_mode/threads.py b/desktop/onionshare/tab/mode/share_mode/threads.py new file mode 100644 index 00000000..839d30ea --- /dev/null +++ b/desktop/onionshare/tab/mode/share_mode/threads.py @@ -0,0 +1,62 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore + + +class CompressThread(QtCore.QThread): + """ + Compresses files to be shared + """ + + success = QtCore.Signal() + error = QtCore.Signal(str) + + def __init__(self, mode): + super(CompressThread, self).__init__() + self.mode = mode + self.mode.common.log("CompressThread", "__init__") + + # prepare files to share + def set_processed_size(self, x): + if self.mode._zip_progress_bar is not None: + self.mode._zip_progress_bar.update_processed_size_signal.emit(x) + + def run(self): + self.mode.common.log("CompressThread", "run") + + try: + self.mode.web.share_mode.set_file_info( + self.mode.filenames, processed_size_callback=self.set_processed_size + ) + self.success.emit() + except OSError as e: + self.error.emit(e.strerror) + + def cancel(self): + self.mode.common.log("CompressThread", "cancel") + + # Let the Web and ZipWriter objects know that we're canceling compression early + self.mode.web.cancel_compression = True + try: + self.mode.web.zip_writer.cancel_compression = True + except AttributeError: + # we never made it as far as creating a ZipWriter object + pass diff --git a/desktop/onionshare/tab/mode/website_mode/__init__.py b/desktop/onionshare/tab/mode/website_mode/__init__.py new file mode 100644 index 00000000..0acbc1a2 --- /dev/null +++ b/desktop/onionshare/tab/mode/website_mode/__init__.py @@ -0,0 +1,388 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import os + +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.common import Common +from onionshare_cli.web import Web + +from .. import Mode +from ..file_selection import FileSelection +from ..history import History, ToggleHistory +from .... import strings +from ....widgets import MinimumSizeWidget +from ....gui_common import GuiCommon + + +class WebsiteMode(Mode): + """ + Parts of the main window UI for sharing files. + """ + + success = QtCore.Signal() + error = QtCore.Signal(str) + + def init(self): + """ + Custom initialization for ReceiveMode. + """ + # Create the Web object + self.web = Web(self.common, True, self.settings, "website") + + # Settings + # Disable CSP option + self.disable_csp_checkbox = QtWidgets.QCheckBox() + self.disable_csp_checkbox.clicked.connect(self.disable_csp_checkbox_clicked) + self.disable_csp_checkbox.setText( + strings._("mode_settings_website_disable_csp_checkbox") + ) + if self.settings.get("website", "disable_csp"): + self.disable_csp_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.disable_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) + + self.mode_settings_widget.mode_specific_layout.addWidget( + self.disable_csp_checkbox + ) + + # Custom CSP option + self.custom_csp_checkbox = QtWidgets.QCheckBox() + self.custom_csp_checkbox.clicked.connect(self.custom_csp_checkbox_clicked) + self.custom_csp_checkbox.setText(strings._("mode_settings_website_custom_csp_checkbox")) + if self.settings.get("website", "custom_csp") and not self.settings.get("website", "disable_csp"): + self.custom_csp_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.custom_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.custom_csp = QtWidgets.QLineEdit() + self.custom_csp.setPlaceholderText( + "default-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; img-src 'self' data:;" + ) + self.custom_csp.editingFinished.connect(self.custom_csp_editing_finished) + + custom_csp_layout = QtWidgets.QHBoxLayout() + custom_csp_layout.setContentsMargins(0, 0, 0, 0) + custom_csp_layout.addWidget(self.custom_csp_checkbox) + custom_csp_layout.addWidget(self.custom_csp) + self.mode_settings_widget.mode_specific_layout.addLayout(custom_csp_layout) + + # File selection + self.file_selection = FileSelection( + self.common, + "images/{}_mode_website.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_website_button"), + self, + ) + if self.filenames: + for filename in self.filenames: + self.file_selection.file_list.add_file(filename) + + # Set title placeholder + self.mode_settings_widget.title_lineedit.setPlaceholderText( + strings._("gui_tab_name_website") + ) + + # Server status + self.server_status.set_mode("website", self.file_selection) + self.server_status.server_started.connect(self.file_selection.server_started) + self.server_status.server_stopped.connect(self.file_selection.server_stopped) + self.server_status.server_stopped.connect(self.update_primary_action) + self.server_status.server_canceled.connect(self.file_selection.server_stopped) + self.server_status.server_canceled.connect(self.update_primary_action) + self.file_selection.file_list.files_updated.connect(self.server_status.update) + self.file_selection.file_list.files_updated.connect(self.update_primary_action) + # Tell server_status about web, then update + self.server_status.web = self.web + self.server_status.update() + + # Filesize warning + self.filesize_warning = QtWidgets.QLabel() + self.filesize_warning.setWordWrap(True) + self.filesize_warning.setStyleSheet( + self.common.gui.css["share_filesize_warning"] + ) + self.filesize_warning.hide() + + # Download history + self.history = History( + self.common, + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path("images/share_icon_transparent.png") + ) + ), + strings._("gui_website_mode_no_files"), + strings._("gui_all_modes_history"), + "website", + ) + self.history.in_progress_label.hide() + self.history.completed_label.hide() + self.history.hide() + + # Info label + self.info_label = QtWidgets.QLabel() + self.info_label.hide() + + # Delete all files button + self.remove_all_button = QtWidgets.QPushButton( + strings._("gui_file_selection_remove_all") + ) + self.remove_all_button.setFlat(True) + self.remove_all_button.setStyleSheet( + self.common.gui.css["share_delete_all_files_button"] + ) + self.remove_all_button.clicked.connect(self.delete_all) + self.remove_all_button.hide() + + # Toggle history + self.toggle_history = ToggleHistory( + self.common, + self, + self.history, + QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")), + QtGui.QIcon( + GuiCommon.get_resource_path("images/share_icon_toggle_selected.png") + ), + ) + + # Top bar + top_bar_layout = QtWidgets.QHBoxLayout() + top_bar_layout.addWidget(self.info_label) + top_bar_layout.addStretch() + top_bar_layout.addWidget(self.remove_all_button) + top_bar_layout.addWidget(self.toggle_history) + + # Primary action layout + self.primary_action_layout.addWidget(self.filesize_warning) + self.primary_action.hide() + self.update_primary_action() + + # Main layout + self.main_layout = QtWidgets.QVBoxLayout() + self.main_layout.addLayout(top_bar_layout) + self.main_layout.addLayout(self.file_selection) + self.main_layout.addWidget(self.primary_action, stretch=1) + self.main_layout.addWidget(self.server_status) + self.main_layout.addWidget(MinimumSizeWidget(700, 0)) + + # Column layout + self.column_layout = QtWidgets.QHBoxLayout() + self.column_layout.addLayout(self.main_layout) + self.column_layout.addWidget(self.history, stretch=1) + + # Content layout + self.content_layout.addLayout(self.column_layout) + + # Always start with focus on file selection + self.file_selection.setFocus() + + def get_type(self): + """ + Returns the type of mode as a string (e.g. "share", "receive", etc.) + """ + return "website" + + def disable_csp_checkbox_clicked(self): + """ + Save disable CSP setting to the tab settings. Uncheck 'custom CSP' + setting if disabling CSP altogether. + """ + self.settings.set( + "website", "disable_csp", self.disable_csp_checkbox.isChecked() + ) + if self.disable_csp_checkbox.isChecked(): + self.custom_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.custom_csp_checkbox.setEnabled(False) + else: + self.custom_csp_checkbox.setEnabled(True) + + def custom_csp_checkbox_clicked(self): + """ + Uncheck 'disable CSP' setting if custom CSP is used. + """ + if self.custom_csp_checkbox.isChecked(): + self.disable_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.disable_csp_checkbox.setEnabled(False) + self.settings.set( + "website", "custom_csp", self.custom_csp + ) + else: + self.disable_csp_checkbox.setEnabled(True) + self.custom_csp.setText("") + self.settings.set( + "website", "custom_csp", None + ) + + def custom_csp_editing_finished(self): + if self.custom_csp.text().strip() == "": + self.custom_csp.setText("") + self.settings.set("website", "custom_csp", None) + else: + custom_csp = self.custom_csp.text() + self.settings.set("website", "custom_csp", custom_csp) + + def get_stop_server_autostop_timer_text(self): + """ + Return the string to put on the stop server button, if there's an auto-stop timer + """ + return strings._("gui_share_stop_server_autostop_timer") + + def autostop_timer_finished_should_stop_server(self): + """ + The auto-stop timer expired, should we stop the server? Returns a bool + """ + + self.server_status.stop_server() + self.server_status_label.setText(strings._("close_on_autostop_timer")) + return True + + def start_server_custom(self): + """ + Starting the server. + """ + # Reset web counters + self.web.website_mode.visit_count = 0 + + # Hide and reset the downloads if we have previously shared + self.reset_info_counters() + + self.remove_all_button.hide() + + def start_server_step2_custom(self): + """ + Step 2 in starting the server. Zipping up files. + """ + self.filenames = [] + for index in range(self.file_selection.file_list.count()): + self.filenames.append(self.file_selection.file_list.item(index).filename) + + # Continue + self.starting_server_step3.emit() + self.start_server_finished.emit() + + def start_server_step3_custom(self): + """ + Step 3 in starting the server. Display large filesize + warning, if applicable. + """ + self.web.website_mode.set_file_info(self.filenames) + self.success.emit() + + def start_server_error_custom(self): + """ + Start server error. + """ + if self._zip_progress_bar is not None: + self.status_bar.removeWidget(self._zip_progress_bar) + self._zip_progress_bar = None + + def stop_server_custom(self): + """ + Stop server. + """ + + self.filesize_warning.hide() + self.history.completed_count = 0 + self.file_selection.file_list.adjustSize() + + self.remove_all_button.show() + + def cancel_server_custom(self): + """ + Log that the server has been cancelled + """ + self.common.log("WebsiteMode", "cancel_server") + + def handle_tor_broke_custom(self): + """ + Connection to Tor broke. + """ + self.primary_action.hide() + + def on_reload_settings(self): + """ + If there were some files listed for sharing, we should be ok to re-enable + the 'Start Sharing' button now. + """ + if self.server_status.file_selection.get_num_files() > 0: + self.primary_action.show() + self.info_label.show() + self.remove_all_button.show() + + def update_primary_action(self): + self.common.log("WebsiteMode", "update_primary_action") + + # Show or hide primary action layout + file_count = self.file_selection.file_list.count() + if file_count > 0: + self.primary_action.show() + self.info_label.show() + self.remove_all_button.show() + + # Update the file count in the info label + total_size_bytes = 0 + for index in range(self.file_selection.file_list.count()): + item = self.file_selection.file_list.item(index) + total_size_bytes += item.size_bytes + total_size_readable = self.common.human_readable_filesize(total_size_bytes) + + if file_count > 1: + self.info_label.setText( + strings._("gui_file_info").format(file_count, total_size_readable) + ) + else: + self.info_label.setText( + strings._("gui_file_info_single").format( + file_count, total_size_readable + ) + ) + + else: + self.primary_action.hide() + self.info_label.hide() + self.remove_all_button.hide() + + def reset_info_counters(self): + """ + Set the info counters back to zero. + """ + self.history.reset() + self.toggle_history.indicator_count = 0 + self.toggle_history.update_indicator() + + def delete_all(self): + """ + Delete All button clicked + """ + self.file_selection.file_list.clear() + self.file_selection.file_list.files_updated.emit() + + self.file_selection.file_list.setCurrentItem(None) + + @staticmethod + def _compute_total_size(filenames): + total_size = 0 + for filename in filenames: + if os.path.isfile(filename): + total_size += os.path.getsize(filename) + if os.path.isdir(filename): + total_size += Common.dir_size(filename) + return total_size diff --git a/desktop/onionshare/tab/server_status.py b/desktop/onionshare/tab/server_status.py new file mode 100644 index 00000000..115acfd5 --- /dev/null +++ b/desktop/onionshare/tab/server_status.py @@ -0,0 +1,598 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" +import textwrap +from PySide2 import QtCore, QtWidgets, QtGui +from PySide2.QtCore import Qt + +from .. import strings +from ..widgets import Alert +from ..widgets import QRCodeDialog +from ..gui_common import GuiCommon + + +class ServerStatus(QtWidgets.QWidget): + """ + The server status chunk of the GUI. + """ + + server_started = QtCore.Signal() + server_started_finished = QtCore.Signal() + server_stopped = QtCore.Signal() + server_canceled = QtCore.Signal() + button_clicked = QtCore.Signal() + url_copied = QtCore.Signal() + client_auth_copied = QtCore.Signal() + + STATUS_STOPPED = 0 + STATUS_WORKING = 1 + STATUS_STARTED = 2 + + def __init__( + self, + common, + qtapp, + app, + mode_settings, + mode_settings_widget, + file_selection=None, + local_only=False, + ): + super(ServerStatus, self).__init__() + + self.common = common + + self.status = self.STATUS_STOPPED + self.mode = None # Gets set in self.set_mode + + self.qtapp = qtapp + self.app = app + self.settings = mode_settings + self.mode_settings_widget = mode_settings_widget + + self.web = None + self.autostart_timer_datetime = None + self.local_only = local_only + + self.resizeEvent(None) + + # Server layout + self.server_button = QtWidgets.QPushButton() + self.server_button.clicked.connect(self.server_button_clicked) + + # URL layout + url_font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont) + self.url_description = QtWidgets.QLabel() + self.url_description.setWordWrap(True) + self.url_description.setMinimumHeight(50) + + # URL sharing instructions, above the URL and Copy Address/QR Code buttons + self.url_instructions = QtWidgets.QLabel() + self.url_instructions.setWordWrap(True) + + # The URL label itself + self.url = QtWidgets.QLabel() + self.url.setFont(url_font) + self.url.setWordWrap(True) + self.url.setMinimumSize(self.url.sizeHint()) + self.url.setStyleSheet(self.common.gui.css["server_status_url"]) + self.url.setTextInteractionFlags( + Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard + ) + + # Copy Onion Address button + self.copy_url_button = QtWidgets.QPushButton(strings._("gui_copy_url")) + self.copy_url_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + self.copy_url_button.clicked.connect(self.copy_url) + + # Onion Address QR code button + self.show_url_qr_code_button = QtWidgets.QPushButton( + strings._("gui_show_qr_code") + ) + self.show_url_qr_code_button.hide() + self.show_url_qr_code_button.clicked.connect( + self.show_url_qr_code_button_clicked + ) + self.show_url_qr_code_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + + # Client Auth sharing instructions, above the + # Copy Private Key/QR Code buttons + self.client_auth_instructions = QtWidgets.QLabel() + self.client_auth_instructions.setWordWrap(True) + self.client_auth_instructions.setText(strings._("gui_client_auth_instructions")) + + # The private key itself + self.private_key = QtWidgets.QLabel() + self.private_key.setFont(url_font) + self.private_key.setWordWrap(True) + self.private_key.setMinimumSize(self.private_key.sizeHint()) + self.private_key.setStyleSheet(self.common.gui.css["server_status_url"]) + self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) + self.private_key_hidden = True + + # Copy ClientAuth button + self.copy_client_auth_button = QtWidgets.QPushButton( + strings._("gui_copy_client_auth") + ) + self.copy_client_auth_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + self.copy_client_auth_button.clicked.connect(self.copy_client_auth) + + # ClientAuth QR code button + self.show_client_auth_qr_code_button = QtWidgets.QPushButton( + strings._("gui_show_qr_code") + ) + self.show_client_auth_qr_code_button.hide() + self.show_client_auth_qr_code_button.clicked.connect( + self.show_client_auth_qr_code_button_clicked + ) + self.show_client_auth_qr_code_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + + # ClientAuth reveal/hide toggle button + self.client_auth_toggle_button = QtWidgets.QPushButton(strings._("gui_reveal")) + self.client_auth_toggle_button.hide() + self.client_auth_toggle_button.clicked.connect( + self.client_auth_toggle_button_clicked + ) + self.client_auth_toggle_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + + # URL instructions layout + url_buttons_layout = QtWidgets.QHBoxLayout() + url_buttons_layout.addWidget(self.copy_url_button) + url_buttons_layout.addWidget(self.show_url_qr_code_button) + url_buttons_layout.addStretch() + + url_layout = QtWidgets.QVBoxLayout() + url_layout.addWidget(self.url_description) + url_layout.addWidget(self.url_instructions) + url_layout.addWidget(self.url) + url_layout.addLayout(url_buttons_layout) + + # Private key instructions layout + client_auth_buttons_layout = QtWidgets.QHBoxLayout() + client_auth_buttons_layout.addWidget(self.copy_client_auth_button) + client_auth_buttons_layout.addWidget(self.show_client_auth_qr_code_button) + client_auth_buttons_layout.addWidget(self.client_auth_toggle_button) + client_auth_buttons_layout.addStretch() + + client_auth_layout = QtWidgets.QVBoxLayout() + client_auth_layout.addWidget(self.client_auth_instructions) + client_auth_layout.addWidget(self.private_key) + client_auth_layout.addLayout(client_auth_buttons_layout) + + # Add the widgets and URL/ClientAuth layouts + # to the main ServerStatus layout + button_layout = QtWidgets.QHBoxLayout() + button_layout.addWidget(self.server_button) + button_layout.addStretch() + + layout = QtWidgets.QVBoxLayout() + layout.addLayout(button_layout) + layout.addLayout(url_layout) + layout.addLayout(client_auth_layout) + self.setLayout(layout) + + def set_mode(self, share_mode, file_selection=None): + """ + The server status is in share mode. + """ + self.mode = share_mode + + if (self.mode == self.common.gui.MODE_SHARE) or ( + self.mode == self.common.gui.MODE_WEBSITE + ): + self.file_selection = file_selection + + self.update() + + def resizeEvent(self, event): + """ + When the widget is resized, try and adjust the display of a v3 onion URL. + """ + try: + # Wrap the URL label + url_length = len(self.get_url()) + if url_length > 60: + width = self.frameGeometry().width() + if width < 530: + wrapped_onion_url = textwrap.fill(self.get_url(), 46) + self.url.setText(wrapped_onion_url) + else: + self.url.setText(self.get_url()) + except Exception: + pass + + def show_url(self): + """ + Show the URL in the UI. + """ + self.url_description.show() + + info_image = GuiCommon.get_resource_path("images/info.png") + + if self.mode == self.common.gui.MODE_SHARE: + if self.settings.get("general", "public"): + self.url_description.setText( + strings._("gui_share_url_public_description").format(info_image) + ) + else: + self.url_description.setText( + strings._("gui_share_url_description").format(info_image) + ) + elif self.mode == self.common.gui.MODE_WEBSITE: + if self.settings.get("general", "public"): + self.url_description.setText( + strings._("gui_website_url_public_description").format(info_image) + ) + else: + self.url_description.setText( + strings._("gui_website_url_description").format(info_image) + ) + elif self.mode == self.common.gui.MODE_RECEIVE: + if self.settings.get("general", "public"): + self.url_description.setText( + strings._("gui_receive_url_public_description").format(info_image) + ) + else: + self.url_description.setText( + strings._("gui_receive_url_description").format(info_image) + ) + elif self.mode == self.common.gui.MODE_CHAT: + if self.settings.get("general", "public"): + self.url_description.setText( + strings._("gui_chat_url_public_description").format(info_image) + ) + else: + self.url_description.setText( + strings._("gui_chat_url_description").format(info_image) + ) + + # Show a Tool Tip explaining the lifecycle of this URL + if self.settings.get("persistent", "enabled"): + if self.mode == self.common.gui.MODE_SHARE and self.settings.get( + "share", "autostop_sharing" + ): + 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 == self.common.gui.MODE_SHARE and self.settings.get( + "share", "autostop_sharing" + ): + self.url_description.setToolTip(strings._("gui_url_label_onetime")) + else: + self.url_description.setToolTip(strings._("gui_url_label_stay_open")) + + if self.settings.get("general", "public"): + self.url_instructions.setText(strings._("gui_url_instructions_public_mode")) + else: + self.url_instructions.setText(strings._("gui_url_instructions")) + self.url_instructions.show() + self.url.setText(self.get_url()) + self.url.show() + self.copy_url_button.show() + self.show_url_qr_code_button.show() + + if self.settings.get("general", "public"): + self.client_auth_instructions.hide() + self.private_key.hide() + self.copy_client_auth_button.hide() + self.show_client_auth_qr_code_button.hide() + else: + self.client_auth_instructions.show() + if self.private_key_hidden: + self.private_key.setText("*" * len(self.app.auth_string)) + self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) + else: + self.private_key.setText(self.app.auth_string) + self.private_key.setTextInteractionFlags( + Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard + ) + self.private_key.show() + self.copy_client_auth_button.show() + self.show_client_auth_qr_code_button.show() + self.client_auth_toggle_button.show() + + def update(self): + """ + Update the GUI elements based on the current state. + """ + self.common.log("ServerStatus", "update") + # Set the URL fields + if self.status == self.STATUS_STARTED: + # The backend Onion may have saved new settings, such as the private key. + # Reload the settings before saving new ones. + self.common.settings.load() + self.show_url() + + if self.settings.get("general", "autostop_timer"): + self.server_button.setToolTip( + strings._("gui_stop_server_autostop_timer_tooltip").format( + self.mode_settings_widget.autostop_timer_widget.dateTime().toString( + "h:mm AP, MMMM dd, yyyy" + ) + ) + ) + else: + self.url_description.hide() + self.url_instructions.hide() + self.url.hide() + self.copy_url_button.hide() + self.show_url_qr_code_button.hide() + self.private_key.hide() + self.client_auth_instructions.hide() + self.copy_client_auth_button.hide() + self.show_client_auth_qr_code_button.hide() + self.client_auth_toggle_button.hide() + + self.mode_settings_widget.update_ui() + + # Button + if ( + self.mode == self.common.gui.MODE_SHARE + and self.file_selection.get_num_files() == 0 + ): + self.server_button.hide() + elif ( + self.mode == self.common.gui.MODE_WEBSITE + and self.file_selection.get_num_files() == 0 + ): + self.server_button.hide() + else: + self.server_button.show() + + if self.status == self.STATUS_STOPPED: + self.server_button.setStyleSheet( + self.common.gui.css["server_status_button_stopped"] + ) + self.server_button.setEnabled(True) + if self.mode == self.common.gui.MODE_SHARE: + self.server_button.setText(strings._("gui_share_start_server")) + elif self.mode == self.common.gui.MODE_WEBSITE: + self.server_button.setText(strings._("gui_share_start_server")) + elif self.mode == self.common.gui.MODE_CHAT: + self.server_button.setText(strings._("gui_chat_start_server")) + else: + self.server_button.setText(strings._("gui_receive_start_server")) + self.server_button.setToolTip("") + elif self.status == self.STATUS_STARTED: + self.server_button.setStyleSheet( + self.common.gui.css["server_status_button_started"] + ) + self.server_button.setEnabled(True) + if self.mode == self.common.gui.MODE_SHARE: + self.server_button.setText(strings._("gui_share_stop_server")) + elif self.mode == self.common.gui.MODE_WEBSITE: + self.server_button.setText(strings._("gui_share_stop_server")) + elif self.mode == self.common.gui.MODE_CHAT: + self.server_button.setText(strings._("gui_chat_stop_server")) + else: + self.server_button.setText(strings._("gui_receive_stop_server")) + elif self.status == self.STATUS_WORKING: + self.server_button.setStyleSheet( + self.common.gui.css["server_status_button_working"] + ) + self.server_button.setEnabled(True) + if self.settings.get("general", "autostart_timer"): + self.server_button.setToolTip( + strings._("gui_start_server_autostart_timer_tooltip").format( + self.mode_settings_widget.autostart_timer_widget.dateTime().toString( + "h:mm AP, MMMM dd, yyyy" + ) + ) + ) + else: + if self.common.platform == "Windows": + self.server_button.setText(strings._("gui_please_wait")) + else: + self.server_button.setText( + strings._("gui_please_wait_no_button") + ) + else: + self.server_button.setStyleSheet( + self.common.gui.css["server_status_button_working"] + ) + self.server_button.setEnabled(False) + self.server_button.setText(strings._("gui_please_wait_no_button")) + + def server_button_clicked(self): + """ + Toggle starting or stopping the server. + """ + if self.status == self.STATUS_STOPPED: + can_start = True + if self.settings.get("general", "autostart_timer"): + if self.local_only: + self.autostart_timer_datetime = ( + self.mode_settings_widget.autostart_timer_widget.dateTime().toPython() + ) + else: + self.autostart_timer_datetime = ( + self.mode_settings_widget.autostart_timer_widget.dateTime() + .toPython() + .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().toPython() + > self.autostart_timer_datetime + ): + can_start = False + Alert( + self.common, + strings._("gui_server_autostart_timer_expired"), + QtWidgets.QMessageBox.Warning, + ) + if self.settings.get("general", "autostop_timer"): + if self.local_only: + self.autostop_timer_datetime = ( + self.mode_settings_widget.autostop_timer_widget.dateTime().toPython() + ) + else: + # 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.mode_settings_widget.autostop_timer_widget.dateTime() + .toPython() + .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().toPython() + > self.autostop_timer_datetime + ): + can_start = False + Alert( + self.common, + strings._("gui_server_autostop_timer_expired"), + QtWidgets.QMessageBox.Warning, + ) + if self.settings.get("general", "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() + elif self.status == self.STATUS_STARTED: + self.stop_server() + elif self.status == self.STATUS_WORKING and ( + self.common.platform == "Windows" + or self.settings.get("general", "autostart_timer") + ): + self.cancel_server() + self.button_clicked.emit() + + def show_url_qr_code_button_clicked(self): + """ + Show a QR code of the onion URL. + """ + self.qr_code_dialog = QRCodeDialog( + self.common, strings._("gui_qr_label_url_title"), self.get_url() + ) + + def show_client_auth_qr_code_button_clicked(self): + """ + Show a QR code of the private key + """ + self.qr_code_dialog = QRCodeDialog( + self.common, + strings._("gui_qr_label_auth_string_title"), + self.app.auth_string, + ) + + def client_auth_toggle_button_clicked(self): + """ + ClientAuth reveal/hide toggle button clicked + """ + if self.private_key_hidden: + self.private_key_hidden = False + self.client_auth_toggle_button.setText(strings._("gui_hide")) + else: + self.private_key_hidden = True + self.client_auth_toggle_button.setText(strings._("gui_reveal")) + + self.show_url() + + def start_server(self): + """ + Start the server. + """ + self.status = self.STATUS_WORKING + self.update() + self.server_started.emit() + + def start_server_finished(self): + """ + The server has finished starting. + """ + self.status = self.STATUS_STARTED + # self.copy_url() + self.update() + self.server_started_finished.emit() + + def stop_server(self): + """ + Stop the server. + """ + self.status = self.STATUS_WORKING + self.mode_settings_widget.autostart_timer_reset() + self.mode_settings_widget.autostop_timer_reset() + self.update() + self.server_stopped.emit() + + def cancel_server(self): + """ + Cancel the server. + """ + self.common.log( + "ServerStatus", "cancel_server", "Canceling the server mid-startup" + ) + self.status = self.STATUS_WORKING + self.mode_settings_widget.autostart_timer_reset() + self.mode_settings_widget.autostop_timer_reset() + self.update() + self.server_canceled.emit() + + def stop_server_finished(self): + """ + The server has finished stopping. + """ + self.status = self.STATUS_STOPPED + self.update() + + def copy_url(self): + """ + Copy the onionshare URL to the clipboard. + """ + clipboard = self.qtapp.clipboard() + clipboard.setText(self.get_url()) + + self.url_copied.emit() + + def copy_client_auth(self): + """ + Copy the ClientAuth private key line to the clipboard. + """ + clipboard = self.qtapp.clipboard() + clipboard.setText(self.app.auth_string) + + self.client_auth_copied.emit() + + def get_url(self): + """ + Returns the OnionShare URL. + """ + url = f"http://{self.app.onion_host}" + return url diff --git a/desktop/onionshare/tab/tab.py b/desktop/onionshare/tab/tab.py new file mode 100644 index 00000000..b0aa25df --- /dev/null +++ b/desktop/onionshare/tab/tab.py @@ -0,0 +1,677 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import queue +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.onionshare import OnionShare +from onionshare_cli.web import Web +from onionshare_cli.mode_settings import ModeSettings + +from .mode.share_mode import ShareMode +from .mode.receive_mode import ReceiveMode +from .mode.website_mode import WebsiteMode +from .mode.chat_mode import ChatMode + +from .server_status import ServerStatus + +from .. import strings +from ..gui_common import GuiCommon +from ..widgets import Alert + + +class NewTabButton(QtWidgets.QPushButton): + def __init__(self, common, image_filename, title, text): + super(NewTabButton, self).__init__() + self.common = common + + self.setFixedSize(280, 280) + + # Image + self.image_label = QtWidgets.QLabel(parent=self) + self.image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage(GuiCommon.get_resource_path(image_filename)) + ) + ) + self.image_label.setAlignment(QtCore.Qt.AlignCenter) + self.image_label.setStyleSheet(self.common.gui.css["new_tab_button_image"]) + self.image_label.setGeometry(0, 0, self.width(), 190) + self.image_label.show() + + # Title + self.title_label = QtWidgets.QLabel(title, parent=self) + self.title_label.setWordWrap(True) + self.title_label.setAlignment(QtCore.Qt.AlignCenter) + self.title_label.setStyleSheet(self.common.gui.css["new_tab_title_text"]) + if self.title_label.sizeHint().width() >= 250: + self.title_label.setGeometry( + (self.width() - 250) / 2, self.height() - 120, 250, 60 + ) + else: + self.title_label.setGeometry( + (self.width() - 250) / 2, self.height() - 100, 250, 30 + ) + self.title_label.show() + + # Text + self.text_label = QtWidgets.QLabel(text, parent=self) + self.text_label.setAlignment(QtCore.Qt.AlignCenter) + self.text_label.setStyleSheet(self.common.gui.css["new_tab_button_text"]) + self.text_label.setGeometry( + (self.width() - 200) / 2, self.height() - 50, 200, 30 + ) + self.text_label.show() + + +class Tab(QtWidgets.QWidget): + """ + A GUI tab, you know, sort of like in a web browser + """ + + change_title = QtCore.Signal(int, str) + change_icon = QtCore.Signal(int, str) + change_persistent = QtCore.Signal(int, bool) + + def __init__( + self, + common, + tab_id, + system_tray, + status_bar, + filenames=None, + ): + super(Tab, self).__init__() + self.common = common + self.common.log("Tab", "__init__") + + self.tab_id = tab_id + self.system_tray = system_tray + self.status_bar = status_bar + self.filenames = filenames + + self.mode = None + + # Start the OnionShare app + self.app = OnionShare(common, self.common.gui.onion, self.common.gui.local_only) + + # An invisible widget, used for hiding the persistent tab icon + self.invisible_widget = QtWidgets.QWidget() + self.invisible_widget.setFixedSize(0, 0) + + # Onionshare logo + self.image_label = QtWidgets.QLabel() + self.image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path( + "images/{}_logo_text.png".format(self.common.gui.color_mode) + ) + ) + ) + ) + self.image_label.setFixedSize(180, 40) + image_layout = QtWidgets.QVBoxLayout() + image_layout.addWidget(self.image_label) + image_layout.addStretch() + self.image = QtWidgets.QWidget() + self.image.setLayout(image_layout) + + # New tab buttons + self.share_button = NewTabButton( + self.common, + "images/{}_mode_new_tab_share.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_share_button"), + strings._("gui_main_page_share_button"), + ) + self.share_button.clicked.connect(self.share_mode_clicked) + + self.receive_button = NewTabButton( + self.common, + "images/{}_mode_new_tab_receive.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_receive_button"), + strings._("gui_main_page_receive_button"), + ) + self.receive_button.clicked.connect(self.receive_mode_clicked) + + self.website_button = NewTabButton( + self.common, + "images/{}_mode_new_tab_website.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_website_button"), + strings._("gui_main_page_website_button"), + ) + self.website_button.clicked.connect(self.website_mode_clicked) + + self.chat_button = NewTabButton( + self.common, + "images/{}_mode_new_tab_chat.png".format(self.common.gui.color_mode), + strings._("gui_new_tab_chat_button"), + strings._("gui_main_page_chat_button"), + ) + self.chat_button.clicked.connect(self.chat_mode_clicked) + + new_tab_top_layout = QtWidgets.QHBoxLayout() + new_tab_top_layout.addStretch() + new_tab_top_layout.addWidget(self.share_button) + new_tab_top_layout.addWidget(self.receive_button) + new_tab_top_layout.addStretch() + + new_tab_bottom_layout = QtWidgets.QHBoxLayout() + new_tab_bottom_layout.addStretch() + new_tab_bottom_layout.addWidget(self.website_button) + new_tab_bottom_layout.addWidget(self.chat_button) + new_tab_bottom_layout.addStretch() + + new_tab_layout = QtWidgets.QVBoxLayout() + new_tab_layout.addStretch() + new_tab_layout.addLayout(new_tab_top_layout) + new_tab_layout.addLayout(new_tab_bottom_layout) + new_tab_layout.addStretch() + + new_tab_img_layout = QtWidgets.QHBoxLayout() + new_tab_img_layout.addWidget(self.image) + new_tab_img_layout.addStretch(1) + new_tab_img_layout.addLayout(new_tab_layout) + new_tab_img_layout.addStretch(2) + + self.new_tab = QtWidgets.QWidget() + self.new_tab.setLayout(new_tab_img_layout) + self.new_tab.show() + + # Layout + self.layout = QtWidgets.QVBoxLayout() + self.layout.setContentsMargins(0, 0, 0, 0) + self.layout.addWidget(self.new_tab) + self.setLayout(self.layout) + + # Create the timer + self.timer = QtCore.QTimer() + self.timer.timeout.connect(self.timer_callback) + + # Persistent image + self.persistent_image_label = QtWidgets.QLabel() + self.persistent_image_label.setPixmap( + QtGui.QPixmap.fromImage( + QtGui.QImage( + GuiCommon.get_resource_path("images/persistent_enabled.png") + ) + ) + ) + self.persistent_image_label.setFixedSize(20, 20) + + # Create the close warning dialog -- the dialog widget needs to be in the constructor + # in order to test it + self.close_dialog = QtWidgets.QMessageBox() + self.close_dialog.setWindowTitle(strings._("gui_close_tab_warning_title")) + self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) + self.close_dialog.accept_button = self.close_dialog.addButton( + strings._("gui_close_tab_warning_close"), QtWidgets.QMessageBox.AcceptRole + ) + self.close_dialog.reject_button = self.close_dialog.addButton( + strings._("gui_close_tab_warning_cancel"), QtWidgets.QMessageBox.RejectRole + ) + self.close_dialog.setDefaultButton(self.close_dialog.reject_button) + + def init(self, mode_settings=None): + if mode_settings: + # Load this tab + self.settings = mode_settings + mode = self.settings.get("persistent", "mode") + if mode == "share": + self.filenames = self.settings.get("share", "filenames") + self.share_mode_clicked() + elif mode == "receive": + self.receive_mode_clicked() + elif mode == "website": + self.filenames = self.settings.get("website", "filenames") + self.website_mode_clicked() + elif mode == "chat": + self.chat_mode_clicked() + else: + # This is a new tab + self.settings = ModeSettings(self.common) + + def share_mode_clicked(self): + self.common.log("Tab", "share_mode_clicked") + self.mode = self.common.gui.MODE_SHARE + self.new_tab.hide() + + self.share_mode = ShareMode(self) + self.share_mode.change_persistent.connect(self.change_persistent) + + self.layout.addWidget(self.share_mode) + self.share_mode.show() + + self.share_mode.init() + self.share_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.share_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.share_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.share_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) + self.share_mode.stop_server_finished.connect(self.stop_server_finished) + self.share_mode.start_server_finished.connect(self.clear_message) + self.share_mode.server_status.button_clicked.connect(self.clear_message) + self.share_mode.server_status.url_copied.connect(self.copy_url) + self.share_mode.server_status.client_auth_copied.connect(self.copy_client_auth) + + self.change_title.emit(self.tab_id, strings._("gui_tab_name_share")) + + self.update_server_status_indicator() + self.timer.start(500) + + def receive_mode_clicked(self): + self.common.log("Tab", "receive_mode_clicked") + self.mode = self.common.gui.MODE_RECEIVE + self.new_tab.hide() + + self.receive_mode = ReceiveMode(self) + self.receive_mode.change_persistent.connect(self.change_persistent) + + self.layout.addWidget(self.receive_mode) + self.receive_mode.show() + + self.receive_mode.init() + self.receive_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.receive_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.receive_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.receive_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) + self.receive_mode.stop_server_finished.connect(self.stop_server_finished) + self.receive_mode.start_server_finished.connect(self.clear_message) + self.receive_mode.server_status.button_clicked.connect(self.clear_message) + self.receive_mode.server_status.url_copied.connect(self.copy_url) + self.receive_mode.server_status.client_auth_copied.connect( + self.copy_client_auth + ) + + self.change_title.emit(self.tab_id, strings._("gui_tab_name_receive")) + + self.update_server_status_indicator() + self.timer.start(500) + + def website_mode_clicked(self): + self.common.log("Tab", "website_mode_clicked") + self.mode = self.common.gui.MODE_WEBSITE + self.new_tab.hide() + + self.website_mode = WebsiteMode(self) + self.website_mode.change_persistent.connect(self.change_persistent) + + self.layout.addWidget(self.website_mode) + self.website_mode.show() + + self.website_mode.init() + self.website_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.website_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.website_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.website_mode.stop_server_finished.connect( + self.update_server_status_indicator + ) + self.website_mode.stop_server_finished.connect(self.stop_server_finished) + self.website_mode.start_server_finished.connect(self.clear_message) + self.website_mode.server_status.button_clicked.connect(self.clear_message) + self.website_mode.server_status.url_copied.connect(self.copy_url) + self.website_mode.server_status.client_auth_copied.connect( + self.copy_client_auth + ) + + self.change_title.emit(self.tab_id, strings._("gui_tab_name_website")) + + self.update_server_status_indicator() + self.timer.start(500) + + def chat_mode_clicked(self): + self.common.log("Tab", "chat_mode_clicked") + self.mode = self.common.gui.MODE_CHAT + self.new_tab.hide() + + self.chat_mode = ChatMode(self) + self.chat_mode.change_persistent.connect(self.change_persistent) + + self.layout.addWidget(self.chat_mode) + self.chat_mode.show() + + self.chat_mode.init() + self.chat_mode.server_status.server_started.connect( + self.update_server_status_indicator + ) + self.chat_mode.server_status.server_stopped.connect( + self.update_server_status_indicator + ) + self.chat_mode.start_server_finished.connect( + self.update_server_status_indicator + ) + self.chat_mode.stop_server_finished.connect(self.update_server_status_indicator) + self.chat_mode.stop_server_finished.connect(self.stop_server_finished) + self.chat_mode.start_server_finished.connect(self.clear_message) + self.chat_mode.server_status.button_clicked.connect(self.clear_message) + self.chat_mode.server_status.url_copied.connect(self.copy_url) + self.chat_mode.server_status.client_auth_copied.connect(self.copy_client_auth) + + self.change_title.emit(self.tab_id, strings._("gui_tab_name_chat")) + + self.update_server_status_indicator() + self.timer.start(500) + + def update_server_status_indicator(self): + # Set the status image + if self.mode == self.common.gui.MODE_SHARE: + # Share mode + if self.share_mode.server_status.status == ServerStatus.STATUS_STOPPED: + self.set_server_status_indicator_stopped( + strings._("gui_status_indicator_share_stopped") + ) + elif self.share_mode.server_status.status == ServerStatus.STATUS_WORKING: + if self.settings.get("general", "autostart_timer"): + self.set_server_status_indicator_working( + strings._("gui_status_indicator_share_scheduled") + ) + else: + self.set_server_status_indicator_working( + strings._("gui_status_indicator_share_working") + ) + elif self.share_mode.server_status.status == ServerStatus.STATUS_STARTED: + self.set_server_status_indicator_started( + strings._("gui_status_indicator_share_started") + ) + elif self.mode == self.common.gui.MODE_WEBSITE: + # Website mode + if self.website_mode.server_status.status == ServerStatus.STATUS_STOPPED: + self.set_server_status_indicator_stopped( + strings._("gui_status_indicator_share_stopped") + ) + elif self.website_mode.server_status.status == ServerStatus.STATUS_WORKING: + if self.website_mode.server_status.autostart_timer_datetime: + self.set_server_status_indicator_working( + strings._("gui_status_indicator_share_scheduled") + ) + else: + self.set_server_status_indicator_working( + strings._("gui_status_indicator_share_working") + ) + elif self.website_mode.server_status.status == ServerStatus.STATUS_STARTED: + self.set_server_status_indicator_started( + strings._("gui_status_indicator_share_started") + ) + elif self.mode == self.common.gui.MODE_RECEIVE: + # Receive mode + if self.receive_mode.server_status.status == ServerStatus.STATUS_STOPPED: + self.set_server_status_indicator_stopped( + strings._("gui_status_indicator_receive_stopped") + ) + elif self.receive_mode.server_status.status == ServerStatus.STATUS_WORKING: + if self.settings.get("general", "autostart_timer"): + self.set_server_status_indicator_working( + strings._("gui_status_indicator_receive_scheduled") + ) + else: + self.set_server_status_indicator_working( + strings._("gui_status_indicator_receive_working") + ) + elif self.receive_mode.server_status.status == ServerStatus.STATUS_STARTED: + self.set_server_status_indicator_started( + strings._("gui_status_indicator_receive_started") + ) + elif self.mode == self.common.gui.MODE_CHAT: + # Chat mode + if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED: + self.set_server_status_indicator_stopped( + strings._("gui_status_indicator_chat_stopped") + ) + elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING: + if self.settings.get("general", "autostart_timer"): + self.set_server_status_indicator_working( + strings._("gui_status_indicator_chat_scheduled") + ) + else: + self.set_server_status_indicator_working( + strings._("gui_status_indicator_chat_working") + ) + elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED: + self.set_server_status_indicator_started( + strings._("gui_status_indicator_chat_started") + ) + + def set_server_status_indicator_stopped(self, label_text): + self.change_icon.emit(self.tab_id, "images/server_stopped.png") + self.status_bar.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.status_bar.server_status_image_stopped) + ) + self.status_bar.server_status_label.setText(label_text) + + def set_server_status_indicator_working(self, label_text): + self.change_icon.emit(self.tab_id, "images/server_working.png") + self.status_bar.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.status_bar.server_status_image_working) + ) + self.status_bar.server_status_label.setText(label_text) + + def set_server_status_indicator_started(self, label_text): + self.change_icon.emit(self.tab_id, "images/server_started.png") + self.status_bar.server_status_image_label.setPixmap( + QtGui.QPixmap.fromImage(self.status_bar.server_status_image_started) + ) + self.status_bar.server_status_label.setText(label_text) + + def stop_server_finished(self): + # When the server stopped, cleanup the ephemeral onion service + self.get_mode().app.stop_onion_service(self.settings) + + def timer_callback(self): + """ + Check for messages communicated from the web app, and update the GUI accordingly. Also, + call ShareMode and ReceiveMode's timer_callbacks. + """ + self.update() + + if not self.common.gui.local_only: + # Have we lost connection to Tor somehow? + if not self.common.gui.onion.is_authenticated(): + self.timer.stop() + self.status_bar.showMessage(strings._("gui_tor_connection_lost")) + self.system_tray.showMessage( + strings._("gui_tor_connection_lost"), + strings._("gui_tor_connection_error_settings"), + ) + self.get_mode().handle_tor_broke() + + # Process events from the web object + mode = self.get_mode() + + events = [] + + done = False + while not done: + try: + r = mode.web.q.get(False) + events.append(r) + except queue.Empty: + done = True + + for event in events: + if event["type"] == Web.REQUEST_LOAD: + mode.handle_request_load(event) + + elif event["type"] == Web.REQUEST_STARTED: + mode.handle_request_started(event) + + elif event["type"] == Web.REQUEST_PROGRESS: + mode.handle_request_progress(event) + + elif event["type"] == Web.REQUEST_CANCELED: + mode.handle_request_canceled(event) + + elif event["type"] == Web.REQUEST_UPLOAD_INCLUDES_MESSAGE: + mode.handle_request_upload_includes_message(event) + + elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED: + mode.handle_request_upload_file_renamed(event) + + elif event["type"] == Web.REQUEST_UPLOAD_SET_DIR: + mode.handle_request_upload_set_dir(event) + + elif event["type"] == Web.REQUEST_UPLOAD_FINISHED: + mode.handle_request_upload_finished(event) + + elif event["type"] == Web.REQUEST_UPLOAD_CANCELED: + mode.handle_request_upload_canceled(event) + + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_STARTED: + mode.handle_request_individual_file_started(event) + + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_PROGRESS: + mode.handle_request_individual_file_progress(event) + + elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_CANCELED: + mode.handle_request_individual_file_canceled(event) + + if event["type"] == Web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE: + Alert( + self.common, + strings._("error_cannot_create_data_dir").format( + event["data"]["receive_mode_dir"] + ), + ) + + if event["type"] == Web.REQUEST_OTHER: + if ( + event["path"] != "/favicon.ico" + and event["path"] != f"/{mode.web.shutdown_password}/shutdown" + ): + self.status_bar.showMessage( + f"{strings._('other_page_loaded')}: {event['path']}" + ) + + mode.timer_callback() + + def copy_url(self): + """ + When the URL gets copied to the clipboard, display this in the status bar. + """ + self.common.log("Tab", "copy_url") + self.system_tray.showMessage( + strings._("gui_copied_url_title"), strings._("gui_copied_url") + ) + + def copy_client_auth(self): + """ + When the onion service's ClientAuth private key gets copied to + the clipboard, display this in the status bar. + """ + self.common.log("Tab", "copy_client_auth") + self.system_tray.showMessage( + strings._("gui_copied_client_auth_title"), + strings._("gui_copied_client_auth"), + ) + + def clear_message(self): + """ + Clear messages from the status bar. + """ + self.status_bar.clearMessage() + + def get_mode(self): + if self.mode: + if self.mode == self.common.gui.MODE_SHARE: + return self.share_mode + elif self.mode == self.common.gui.MODE_RECEIVE: + return self.receive_mode + elif self.mode == self.common.gui.MODE_CHAT: + return self.chat_mode + else: + return self.website_mode + else: + return None + + def settings_have_changed(self): + # Global settings have changed + self.common.log("Tab", "settings_have_changed") + + # We might've stopped the main requests timer if a Tor connection failed. If we've reloaded + # settings, we probably succeeded in obtaining a new connection. If so, restart the timer. + if not self.common.gui.local_only: + if self.common.gui.onion.is_authenticated(): + mode = self.get_mode() + if mode: + if not self.timer.isActive(): + self.timer.start(500) + mode.on_reload_settings() + + def close_tab(self): + self.common.log("Tab", "close_tab") + if self.mode is None: + return True + + if self.settings.get("persistent", "enabled"): + dialog_text = strings._("gui_close_tab_warning_persistent_description") + else: + server_status = self.get_mode().server_status + if server_status.status == server_status.STATUS_STOPPED: + return True + else: + if self.mode == self.common.gui.MODE_SHARE: + dialog_text = strings._("gui_close_tab_warning_share_description") + elif self.mode == self.common.gui.MODE_RECEIVE: + dialog_text = strings._("gui_close_tab_warning_receive_description") + else: + dialog_text = strings._("gui_close_tab_warning_website_description") + + # Open the warning dialog + self.common.log("Tab", "close_tab, opening warning dialog") + self.close_dialog.setText(dialog_text) + self.close_dialog.exec_() + + # Close + if self.close_dialog.clickedButton() == self.close_dialog.accept_button: + return True + # Cancel + else: + self.common.log("Tab", "close_tab", "cancel, keeping tab open") + return False + + def cleanup(self): + self.common.log("Tab", "cleanup", f"tab_id={self.tab_id}") + if self.get_mode(): + if self.get_mode().web_thread: + self.get_mode().web.stop(self.get_mode().app.port) + self.get_mode().web_thread.quit() + self.get_mode().web_thread.wait() + + self.get_mode().web.cleanup() diff --git a/desktop/onionshare/tab_widget.py b/desktop/onionshare/tab_widget.py new file mode 100644 index 00000000..c43a9b9a --- /dev/null +++ b/desktop/onionshare/tab_widget.py @@ -0,0 +1,412 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.mode_settings import ModeSettings + +from . import strings +from .tab import Tab +from .threads import EventHandlerThread +from .gui_common import GuiCommon +from .tor_settings_tab import TorSettingsTab +from .settings_tab import SettingsTab + + +class TabWidget(QtWidgets.QTabWidget): + """ + A custom tab widget, that has a "+" button for adding new tabs + """ + + bring_to_front = QtCore.Signal() + + def __init__(self, common, system_tray, status_bar): + super(TabWidget, self).__init__() + self.common = common + self.common.log("TabWidget", "__init__") + + self.system_tray = system_tray + self.status_bar = status_bar + + # Keep track of tabs in a dictionary that maps tab_id to tab. + # Each tab has a unique, auto-incremented id (tab_id). This is different than the + # tab's index, which changes as tabs are re-arranged. + self.tabs = {} + self.current_tab_id = 0 # Each tab has a unique id + self.tor_settings_tab = None + + # Define the new tab button + self.new_tab_button = QtWidgets.QPushButton("+", parent=self) + self.new_tab_button.setFlat(True) + self.new_tab_button.setFixedSize(40, 30) + self.new_tab_button.clicked.connect(self.new_tab_clicked) + self.new_tab_button.setStyleSheet( + self.common.gui.css["tab_widget_new_tab_button"] + ) + self.new_tab_button.setToolTip(strings._("gui_new_tab_tooltip")) + + # Use a custom tab bar + tab_bar = TabBar() + tab_bar.move_new_tab_button.connect(self.move_new_tab_button) + tab_bar.currentChanged.connect(self.tab_changed) + self.setTabBar(tab_bar) + + # Set up the tab widget + self.setMovable(True) + self.setTabsClosable(True) + self.setUsesScrollButtons(True) + self.setDocumentMode(True) + self.setStyleSheet(self.common.gui.css["tab_widget"]) + + self.tabCloseRequested.connect(self.close_tab) + + self.move_new_tab_button() + + # Watch the events file for changes + self.event_handler_t = EventHandlerThread(common) + self.event_handler_t.new_tab.connect(self.add_tab) + self.event_handler_t.new_share_tab.connect(self.new_share_tab) + self.event_handler_t.start() + + def cleanup(self): + self.common.log("TabWidget", "cleanup") + + # Stop the event thread + self.event_handler_t.should_quit = True + self.event_handler_t.quit() + self.event_handler_t.wait(50) + + # Clean up each tab + for tab_id in self.tabs: + if not ( + type(self.tabs[tab_id]) is SettingsTab + or type(self.tabs[tab_id]) is TorSettingsTab + ): + self.tabs[tab_id].cleanup() + + def move_new_tab_button(self): + # Find the width of all tabs + tabs_width = sum( + [self.tabBar().tabRect(i).width() for i in range(self.count())] + ) + + # The current position of the new tab button + pos = self.new_tab_button.pos() + + # If there are so many tabs it scrolls, move the button to the left of the scroll buttons + if tabs_width > self.width(): + pos.setX(self.width() - 65) + else: + # Otherwise move the button to the right of the tabs + pos.setX(self.tabBar().sizeHint().width()) + + self.new_tab_button.move(pos) + self.new_tab_button.raise_() + + def tab_changed(self): + # Active tab was changed + tab = self.widget(self.currentIndex()) + if not tab: + self.common.log( + "TabWidget", + "tab_changed", + f"tab at index {self.currentIndex()} does not exist", + ) + return + + tab_id = tab.tab_id + self.common.log("TabWidget", "tab_changed", f"Tab was changed to {tab_id}") + + # If it's Settings or Tor Settings, ignore + if ( + type(self.tabs[tab_id]) is SettingsTab + or type(self.tabs[tab_id]) is TorSettingsTab + ): + # Blank the server status indicator + self.status_bar.server_status_image_label.clear() + self.status_bar.server_status_label.clear() + return + + try: + mode = self.tabs[tab_id].get_mode() + if mode: + # Update the server status indicator to reflect that of the current tab + self.tabs[tab_id].update_server_status_indicator() + else: + # If this tab doesn't have a mode set yet, blank the server status indicator + self.status_bar.server_status_image_label.clear() + self.status_bar.server_status_label.clear() + except KeyError: + # When all current tabs are closed, index briefly drops to -1 before resetting to 0 + # which will otherwise trigger a KeyError on tab.get_mode() above. + pass + + def new_tab_clicked(self): + # Create a new tab + self.add_tab() + + def load_tab(self, mode_settings_id): + # Load the tab's mode settings + mode_settings = ModeSettings(self.common, id=mode_settings_id) + self.add_tab(mode_settings) + + def new_share_tab(self, filenames): + mode_settings = ModeSettings(self.common) + mode_settings.set("persistent", "mode", "share") + mode_settings.set("share", "filenames", filenames) + self.add_tab(mode_settings) + + def add_tab(self, mode_settings=None): + self.common.log("TabWidget", "add_tab", f"mode_settings: {mode_settings}") + tab = Tab(self.common, self.current_tab_id, self.system_tray, self.status_bar) + tab.change_title.connect(self.change_title) + tab.change_icon.connect(self.change_icon) + tab.change_persistent.connect(self.change_persistent) + + self.tabs[self.current_tab_id] = tab + self.current_tab_id += 1 + + index = self.addTab(tab, strings._("gui_new_tab")) + self.setCurrentIndex(index) + + tab.init(mode_settings) + + # Make sure the title is set + if tab.get_mode(): + tab.get_mode().mode_settings_widget.title_editing_finished() + + # If it's persistent, set the persistent image in the tab + self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled")) + + # Bring the window to front, in case this is being added by an event + self.bring_to_front.emit() + + def open_settings_tab(self): + self.common.log("TabWidget", "open_settings_tab") + + # See if a settings tab is already open, and if so switch to it + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is SettingsTab: + self.setCurrentIndex(self.indexOf(self.tabs[tab_id])) + return + + settings_tab = SettingsTab(self.common, self.current_tab_id) + settings_tab.close_this_tab.connect(self.close_settings_tab) + self.tabs[self.current_tab_id] = settings_tab + self.current_tab_id += 1 + index = self.addTab(settings_tab, strings._("gui_settings_window_title")) + self.setCurrentIndex(index) + + def open_tor_settings_tab(self): + self.common.log("TabWidget", "open_tor_settings_tab") + + # See if a settings tab is already open, and if so switch to it + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is TorSettingsTab: + self.setCurrentIndex(self.indexOf(self.tabs[tab_id])) + return + + self.tor_settings_tab = TorSettingsTab( + self.common, self.current_tab_id, self.are_tabs_active(), self.status_bar + ) + self.tor_settings_tab.close_this_tab.connect(self.close_tor_settings_tab) + self.tor_settings_tab.tor_is_connected.connect(self.tor_is_connected) + self.tor_settings_tab.tor_is_disconnected.connect(self.tor_is_disconnected) + self.tabs[self.current_tab_id] = self.tor_settings_tab + self.current_tab_id += 1 + index = self.addTab( + self.tor_settings_tab, strings._("gui_tor_settings_window_title") + ) + self.setCurrentIndex(index) + + def change_title(self, tab_id, title): + shortened_title = title + if len(shortened_title) > 11: + shortened_title = shortened_title[:10] + "..." + + index = self.indexOf(self.tabs[tab_id]) + self.setTabText(index, shortened_title) + self.setTabToolTip(index, title) + + def change_icon(self, tab_id, icon_path): + index = self.indexOf(self.tabs[tab_id]) + self.setTabIcon(index, QtGui.QIcon(GuiCommon.get_resource_path(icon_path))) + + # The icon changes when the server status changes, so if we have an open + # Tor Settings tab, tell it to update + if self.tor_settings_tab: + self.tor_settings_tab.active_tabs_changed(self.are_tabs_active()) + + def change_persistent(self, tab_id, is_persistent): + self.common.log( + "TabWidget", + "change_persistent", + f"tab_id: {tab_id}, is_persistent: {is_persistent}", + ) + index = self.indexOf(self.tabs[tab_id]) + if is_persistent: + self.tabBar().setTabButton( + index, + QtWidgets.QTabBar.LeftSide, + self.tabs[tab_id].persistent_image_label, + ) + else: + self.tabBar().setTabButton( + index, QtWidgets.QTabBar.LeftSide, self.tabs[tab_id].invisible_widget + ) + + self.save_persistent_tabs() + + def save_persistent_tabs(self): + # Figure out the order of persistent tabs to save in settings + persistent_tabs = [] + for tab_id in self.tabs: + if not ( + type(self.tabs[tab_id]) is SettingsTab + or type(self.tabs[tab_id]) is TorSettingsTab + ): + tab = self.widget(self.indexOf(self.tabs[tab_id])) + if tab.settings.get("persistent", "enabled"): + persistent_tabs.append(tab.settings.id) + # Only save if tabs have actually moved + if persistent_tabs != self.common.settings.get("persistent_tabs"): + self.common.settings.set("persistent_tabs", persistent_tabs) + self.common.settings.save() + + def close_tab(self, index): + self.common.log("TabWidget", "close_tab", f"{index}") + tab = self.widget(index) + tab_id = tab.tab_id + + if ( + type(self.tabs[tab_id]) is SettingsTab + or type(self.tabs[tab_id]) is TorSettingsTab + ): + self.common.log("TabWidget", "closing a settings tab") + + if type(self.tabs[tab_id]) is TorSettingsTab: + self.tor_settings_tab = None + + # Remove the tab + self.removeTab(index) + del self.tabs[tab.tab_id] + + # If the last tab is closed, open a new one + if self.count() == 0: + self.new_tab_clicked() + + else: + self.common.log("TabWidget", "closing a service tab") + if tab.close_tab(): + self.common.log("TabWidget", "user is okay with closing the tab") + tab.cleanup() + + # If the tab is persistent, delete the settings file from disk + if tab.settings.get("persistent", "enabled"): + tab.settings.delete() + + self.save_persistent_tabs() + + # Remove the tab + self.removeTab(index) + del self.tabs[tab.tab_id] + + # If the last tab is closed, open a new one + if self.count() == 0: + self.new_tab_clicked() + else: + self.common.log("TabWidget", "user does not want to close the tab") + + def close_settings_tab(self): + self.common.log("TabWidget", "close_settings_tab") + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is SettingsTab: + index = self.indexOf(self.tabs[tab_id]) + self.close_tab(index) + return + + def close_tor_settings_tab(self): + self.common.log("TabWidget", "close_tor_settings_tab") + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is TorSettingsTab: + index = self.indexOf(self.tabs[tab_id]) + self.close_tab(index) + return + + def are_tabs_active(self): + """ + See if there are active servers in any open tabs + """ + for tab_id in self.tabs: + if not ( + type(self.tabs[tab_id]) is SettingsTab + or type(self.tabs[tab_id]) is TorSettingsTab + ): + mode = self.tabs[tab_id].get_mode() + if mode: + if mode.server_status.status != mode.server_status.STATUS_STOPPED: + return True + return False + + def paintEvent(self, event): + super(TabWidget, self).paintEvent(event) + # Save the order of persistent tabs whenever a new tab is switched to -- ideally we would + # do this whenever tabs gets moved, but paintEvent is the only event that seems to get triggered + # when this happens + self.save_persistent_tabs() + + def resizeEvent(self, event): + # Make sure to move new tab button on each resize + super(TabWidget, self).resizeEvent(event) + self.move_new_tab_button() + + def tor_is_connected(self): + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is SettingsTab: + self.tabs[tab_id].tor_is_connected() + else: + if not type(self.tabs[tab_id]) is TorSettingsTab: + mode = self.tabs[tab_id].get_mode() + if mode: + mode.tor_connection_started() + + def tor_is_disconnected(self): + for tab_id in self.tabs: + if type(self.tabs[tab_id]) is SettingsTab: + self.tabs[tab_id].tor_is_disconnected() + else: + if not type(self.tabs[tab_id]) is TorSettingsTab: + mode = self.tabs[tab_id].get_mode() + if mode: + mode.tor_connection_stopped() + + +class TabBar(QtWidgets.QTabBar): + """ + A custom tab bar + """ + + move_new_tab_button = QtCore.Signal() + + def __init__(self): + super(TabBar, self).__init__() + + def tabLayoutChange(self): + self.move_new_tab_button.emit() diff --git a/desktop/onionshare/threads.py b/desktop/onionshare/threads.py new file mode 100644 index 00000000..b02c6f21 --- /dev/null +++ b/desktop/onionshare/threads.py @@ -0,0 +1,270 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import time +import json +import os +from PySide2 import QtCore + +from onionshare_cli.onion import ( + TorErrorInvalidSetting, + TorErrorAutomatic, + TorErrorSocketPort, + TorErrorSocketFile, + TorErrorMissingPassword, + TorErrorUnreadableCookieFile, + TorErrorAuthError, + TorErrorProtocolError, + BundledTorTimeout, + BundledTorBroken, + TorTooOldEphemeral, + TorTooOldStealth, + PortNotAvailable, +) + +from . import strings + + +class OnionThread(QtCore.QThread): + """ + Starts the onion service, and waits for it to finish + """ + + success = QtCore.Signal() + success_early = QtCore.Signal() + error = QtCore.Signal(str) + + def __init__(self, mode): + super(OnionThread, self).__init__() + self.mode = mode + self.mode.common.log("OnionThread", "__init__") + + # allow this thread to be terminated + self.setTerminationEnabled() + + def run(self): + self.mode.common.log("OnionThread", "run") + + # Make a new static URL path for each new share + self.mode.web.generate_static_url_path() + + # Choose port early, because we need them to exist in advance for scheduled shares + if not self.mode.app.port: + self.mode.app.choose_port() + + try: + if self.mode.obtain_onion_early: + self.mode.app.start_onion_service( + self.mode.get_type(), self.mode.settings, await_publication=False + ) + # 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.stop_onion_service(self.mode.settings) + else: + self.mode.app.start_onion_service( + self.mode.get_type(), self.mode.settings, 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 ( + TorErrorInvalidSetting, + TorErrorAutomatic, + TorErrorSocketPort, + TorErrorSocketFile, + TorErrorMissingPassword, + TorErrorUnreadableCookieFile, + TorErrorAuthError, + TorErrorProtocolError, + BundledTorTimeout, + BundledTorBroken, + TorTooOldEphemeral, + TorTooOldStealth, + PortNotAvailable, + ) as e: + message = self.mode.common.gui.get_translated_tor_error(e) + self.error.emit(message) + return + + +class WebThread(QtCore.QThread): + """ + Starts the web service + """ + + success = QtCore.Signal() + error = QtCore.Signal(str) + + def __init__(self, mode): + super(WebThread, self).__init__() + self.mode = mode + self.mode.common.log("WebThread", "__init__") + + def run(self): + self.mode.common.log("WebThread", "run") + self.mode.web.start(self.mode.app.port) + self.success.emit() + + +class AutoStartTimer(QtCore.QThread): + """ + Waits for a prescribed time before allowing a share to start + """ + + success = QtCore.Signal() + error = QtCore.Signal(str) + + def __init__(self, mode, canceled=False): + super(AutoStartTimer, self).__init__() + self.mode = mode + self.canceled = canceled + self.mode.common.log("AutoStartTimer", "__init__") + + # allow this thread to be terminated + self.setTerminationEnabled() + + def run(self): + now = QtCore.QDateTime.currentDateTime() + autostart_timer_datetime_delta = now.secsTo( + self.mode.server_status.autostart_timer_datetime + ) + try: + # Sleep until scheduled time + while autostart_timer_datetime_delta > 0 and self.canceled is False: + time.sleep(0.1) + now = QtCore.QDateTime.currentDateTime() + autostart_timer_datetime_delta = now.secsTo( + self.mode.server_status.autostart_timer_datetime + ) + # Timer has now finished + if self.canceled is 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]) + return + + +class EventHandlerThread(QtCore.QThread): + """ + To trigger an event, write a JSON line to the events file. When that file changes, + each line will be handled as an event. Valid events are: + {"type": "new_tab"} + {"type": "new_share_tab", "filenames": ["file1", "file2"]} + """ + + new_tab = QtCore.Signal() + new_share_tab = QtCore.Signal(list) + + def __init__(self, common): + super(EventHandlerThread, self).__init__() + self.common = common + self.common.log("EventHandlerThread", "__init__") + self.should_quit = False + + def run(self): + self.common.log("EventHandlerThread", "run") + + mtime = 0 + while True: + if os.path.exists(self.common.gui.events_filename): + # Events file exists + if os.stat(self.common.gui.events_filename).st_mtime != mtime: + # Events file has been modified, load events + try: + with open(self.common.gui.events_filename, "r") as f: + lines = f.readlines() + os.remove(self.common.gui.events_filename) + + self.common.log( + "EventHandler", "run", f"processing {len(lines)} lines" + ) + for line in lines: + try: + obj = json.loads(line) + if "type" not in obj: + self.common.log( + "EventHandler", + "run", + f"event does not have a type: {obj}", + ) + continue + except json.decoder.JSONDecodeError: + self.common.log( + "EventHandler", + "run", + f"ignoring invalid line: {line}", + ) + continue + + if obj["type"] == "new_tab": + self.common.log("EventHandler", "run", "new_tab event") + self.new_tab.emit() + + elif obj["type"] == "new_share_tab": + if ( + "filenames" in obj + and type(obj["filenames"]) is list + ): + self.new_share_tab.emit(obj["filenames"]) + else: + self.common.log( + "EventHandler", + "run", + f"invalid new_share_tab event: {obj}", + ) + + else: + self.common.log( + "EventHandler", "run", f"invalid event type: {obj}" + ) + + except Exception: + pass + + if self.should_quit: + break + time.sleep(0.2) + + +class OnionCleanupThread(QtCore.QThread): + """ + Wait for Tor rendezvous circuits to close in a separate thread + """ + + def __init__(self, common): + super(OnionCleanupThread, self).__init__() + self.common = common + self.common.log("OnionCleanupThread", "__init__") + + def run(self): + self.common.log("OnionCleanupThread", "run") + self.common.gui.onion.cleanup() diff --git a/desktop/onionshare/tor_connection.py b/desktop/onionshare/tor_connection.py new file mode 100644 index 00000000..2cc599c4 --- /dev/null +++ b/desktop/onionshare/tor_connection.py @@ -0,0 +1,324 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import time +from PySide2 import QtCore, QtWidgets, QtGui + +from onionshare_cli.onion import ( + BundledTorCanceled, + TorErrorInvalidSetting, + TorErrorAutomatic, + TorErrorSocketPort, + TorErrorSocketFile, + TorErrorMissingPassword, + TorErrorUnreadableCookieFile, + TorErrorAuthError, + TorErrorProtocolError, + BundledTorTimeout, + BundledTorBroken, + TorTooOldEphemeral, + TorTooOldStealth, + PortNotAvailable, +) + +from . import strings +from .gui_common import GuiCommon +from .widgets import Alert + + +class TorConnectionDialog(QtWidgets.QProgressDialog): + """ + Connecting to Tor dialog. + """ + + open_tor_settings = QtCore.Signal() + success = QtCore.Signal() + + def __init__( + self, common, custom_settings=False, testing_settings=False, onion=None + ): + super(TorConnectionDialog, self).__init__(None) + + self.common = common + self.testing_settings = testing_settings + + if custom_settings: + self.settings = custom_settings + else: + self.settings = self.common.settings + + self.common.log("TorConnectionDialog", "__init__") + + if self.testing_settings: + self.title = strings._("gui_settings_connection_type_test_button") + self.onion = onion + else: + self.title = "OnionShare" + self.onion = self.common.gui.onion + + self.setWindowTitle(self.title) + + self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) + self.setModal(True) + self.setFixedSize(400, 150) + + # Label + self.setLabelText(strings._("connecting_to_tor")) + + # Progress bar ticks from 0 to 100 + self.setRange(0, 100) + # Don't show if connection takes less than 100ms (for non-bundled tor) + self.setMinimumDuration(100) + + # Start displaying the status at 0 + self._tor_status_update(0, "") + + def start(self): + self.common.log("TorConnectionDialog", "start") + + t = TorConnectionThread(self.common, self.settings, self) + t.tor_status_update.connect(self._tor_status_update) + t.connected_to_tor.connect(self._connected_to_tor) + t.canceled_connecting_to_tor.connect(self._canceled_connecting_to_tor) + t.error_connecting_to_tor.connect(self._error_connecting_to_tor) + t.start() + + # The main thread needs to remain active, and checking for Qt events, + # until the thread is finished. Otherwise it won't be able to handle + # accepting signals. + self.active = True + while self.active: + time.sleep(0.1) + self.common.gui.qtapp.processEvents() + + def _tor_status_update(self, progress, summary): + self.setValue(int(progress)) + self.setLabelText( + f"{strings._('connecting_to_tor')}
{summary}" + ) + + def _connected_to_tor(self): + self.common.log("TorConnectionDialog", "_connected_to_tor") + self.active = False + # Close the dialog after connecting + self.setValue(self.maximum()) + + def _canceled_connecting_to_tor(self): + self.common.log("TorConnectionDialog", "_canceled_connecting_to_tor") + self.active = False + self.onion.cleanup() + + # Cancel connecting to Tor + QtCore.QTimer.singleShot(1, self.cancel) + + def _error_connecting_to_tor(self, msg): + self.common.log("TorConnectionDialog", "_error_connecting_to_tor") + self.active = False + + if self.testing_settings: + # If testing, just display the error but don't open settings + def alert(): + Alert(self.common, msg, QtWidgets.QMessageBox.Warning, title=self.title) + + else: + # If not testing, open settings after displaying the error + def alert(): + Alert( + self.common, + f"{msg}\n\n{strings._('gui_tor_connection_error_settings')}", + QtWidgets.QMessageBox.Warning, + title=self.title, + ) + + # Open settings + self.open_tor_settings.emit() + + QtCore.QTimer.singleShot(1, alert) + + # Cancel connecting to Tor + QtCore.QTimer.singleShot(1, self.cancel) + + +class TorConnectionWidget(QtWidgets.QWidget): + """ + Connecting to Tor widget, with a progress bar + """ + + open_tor_settings = QtCore.Signal() + success = QtCore.Signal() + fail = QtCore.Signal(str) + + def __init__(self, common, status_bar): + super(TorConnectionWidget, self).__init__(None) + self.common = common + self.common.log("TorConnectionWidget", "__init__") + + self.status_bar = status_bar + self.label = QtWidgets.QLabel(strings._("connecting_to_tor")) + self.label.setAlignment(QtCore.Qt.AlignHCenter) + + self.progress = QtWidgets.QProgressBar() + self.progress.setRange(0, 100) + self.cancel_button = QtWidgets.QPushButton( + strings._("gui_settings_button_cancel") + ) + self.cancel_button.clicked.connect(self.cancel_clicked) + + progress_layout = QtWidgets.QHBoxLayout() + progress_layout.addWidget(self.progress) + progress_layout.addWidget(self.cancel_button) + + inner_layout = QtWidgets.QVBoxLayout() + inner_layout.addWidget(self.label) + inner_layout.addLayout(progress_layout) + + layout = QtWidgets.QHBoxLayout() + layout.addStretch() + layout.addLayout(inner_layout) + layout.addStretch() + self.setLayout(layout) + + # Start displaying the status at 0 + self._tor_status_update(0, "") + + def start(self, custom_settings=False, testing_settings=False, onion=None): + self.common.log("TorConnectionWidget", "start") + self.was_canceled = False + + self.testing_settings = testing_settings + + if custom_settings: + self.settings = custom_settings + else: + self.settings = self.common.settings + + if self.testing_settings: + self.onion = onion + else: + self.onion = self.common.gui.onion + + t = TorConnectionThread(self.common, self.settings, self) + t.tor_status_update.connect(self._tor_status_update) + t.connected_to_tor.connect(self._connected_to_tor) + t.canceled_connecting_to_tor.connect(self._canceled_connecting_to_tor) + t.error_connecting_to_tor.connect(self._error_connecting_to_tor) + t.start() + + # The main thread needs to remain active, and checking for Qt events, + # until the thread is finished. Otherwise it won't be able to handle + # accepting signals. + self.active = True + while self.active: + time.sleep(0.1) + self.common.gui.qtapp.processEvents() + + def cancel_clicked(self): + self.was_canceled = True + self.fail.emit("") + + def wasCanceled(self): + return self.was_canceled + + def _tor_status_update(self, progress, summary): + self.progress.setValue(int(progress)) + self.label.setText( + f"{strings._('connecting_to_tor')}
{summary}" + ) + + def _connected_to_tor(self): + self.common.log("TorConnectionWidget", "_connected_to_tor") + self.active = False + self.status_bar.clearMessage() + + # Close the dialog after connecting + self.progress.setValue(self.progress.maximum()) + + self.success.emit() + + def _canceled_connecting_to_tor(self): + self.common.log("TorConnectionWidget", "_canceled_connecting_to_tor") + self.active = False + self.onion.cleanup() + + # Cancel connecting to Tor + QtCore.QTimer.singleShot(1, self.cancel_clicked) + + def _error_connecting_to_tor(self, msg): + self.common.log("TorConnectionWidget", "_error_connecting_to_tor") + self.active = False + self.fail.emit(msg) + + +class TorConnectionThread(QtCore.QThread): + tor_status_update = QtCore.Signal(str, str) + connected_to_tor = QtCore.Signal() + canceled_connecting_to_tor = QtCore.Signal() + error_connecting_to_tor = QtCore.Signal(str) + + def __init__(self, common, settings, parent): + super(TorConnectionThread, self).__init__() + self.common = common + self.common.log("TorConnectionThread", "__init__") + self.settings = settings + self.parent = parent + + def run(self): + self.common.log("TorConnectionThread", "run") + + # Connect to the Onion + try: + self.parent.onion.connect(self.settings, False, self._tor_status_update) + if self.parent.onion.connected_to_tor: + self.connected_to_tor.emit() + else: + self.canceled_connecting_to_tor.emit() + + except BundledTorCanceled: + self.common.log( + "TorConnectionThread", "run", "caught exception: BundledTorCanceled" + ) + self.canceled_connecting_to_tor.emit() + + except ( + TorErrorInvalidSetting, + TorErrorAutomatic, + TorErrorSocketPort, + TorErrorSocketFile, + TorErrorMissingPassword, + TorErrorUnreadableCookieFile, + TorErrorAuthError, + TorErrorProtocolError, + BundledTorTimeout, + BundledTorBroken, + TorTooOldEphemeral, + TorTooOldStealth, + PortNotAvailable, + ) as e: + message = self.common.gui.get_translated_tor_error(e) + self.common.log( + "TorConnectionThread", "run", f"caught exception: {message}" + ) + self.error_connecting_to_tor.emit(message) + + def _tor_status_update(self, progress, summary): + self.tor_status_update.emit(progress, summary) + + # Return False if the dialog was canceled + return not self.parent.wasCanceled() diff --git a/desktop/onionshare/tor_settings_tab.py b/desktop/onionshare/tor_settings_tab.py new file mode 100644 index 00000000..e28e5260 --- /dev/null +++ b/desktop/onionshare/tor_settings_tab.py @@ -0,0 +1,895 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui +import sys +import platform +import re +import os + +from onionshare_cli.meek import Meek +from onionshare_cli.settings import Settings +from onionshare_cli.onion import Onion + +from . import strings +from .widgets import Alert +from .tor_connection import TorConnectionWidget +from .moat_dialog import MoatDialog + + +class TorSettingsTab(QtWidgets.QWidget): + """ + Settings dialog. + """ + + close_this_tab = QtCore.Signal() + tor_is_connected = QtCore.Signal() + tor_is_disconnected = QtCore.Signal() + + def __init__(self, common, tab_id, are_tabs_active, status_bar): + super(TorSettingsTab, self).__init__() + + self.common = common + self.common.log("TorSettingsTab", "__init__") + + self.status_bar = status_bar + self.meek = Meek(common, get_tor_paths=self.common.gui.get_tor_paths) + + self.system = platform.system() + self.tab_id = tab_id + + # Connection type: either automatic, control port, or socket file + + # Bundled Tor + self.connection_type_bundled_radio = QtWidgets.QRadioButton( + strings._("gui_settings_connection_type_bundled_option") + ) + self.connection_type_bundled_radio.toggled.connect( + self.connection_type_bundled_toggled + ) + + # Bundled Tor doesn't work on dev mode in Windows or Mac + if (self.system == "Windows" or self.system == "Darwin") and getattr( + sys, "onionshare_dev_mode", False + ): + self.connection_type_bundled_radio.setEnabled(False) + + # Bridge options for bundled tor + + ( + self.tor_path, + self.tor_geo_ip_file_path, + self.tor_geo_ipv6_file_path, + self.obfs4proxy_file_path, + self.snowflake_file_path, + self.meek_client_file_path, + ) = self.common.gui.get_tor_paths() + + bridges_label = QtWidgets.QLabel(strings._("gui_settings_tor_bridges_label")) + bridges_label.setWordWrap(True) + + self.bridge_use_checkbox = QtWidgets.QCheckBox( + strings._("gui_settings_bridge_use_checkbox") + ) + self.bridge_use_checkbox.stateChanged.connect( + self.bridge_use_checkbox_state_changed + ) + + # Built-in bridge + self.bridge_builtin_radio = QtWidgets.QRadioButton( + strings._("gui_settings_bridge_radio_builtin") + ) + self.bridge_builtin_radio.toggled.connect(self.bridge_builtin_radio_toggled) + self.bridge_builtin_dropdown = QtWidgets.QComboBox() + self.bridge_builtin_dropdown.currentTextChanged.connect( + self.bridge_builtin_dropdown_changed + ) + if self.obfs4proxy_file_path and os.path.isfile(self.obfs4proxy_file_path): + self.bridge_builtin_dropdown.addItem("obfs4") + self.bridge_builtin_dropdown.addItem("meek-azure") + if self.snowflake_file_path and os.path.isfile(self.snowflake_file_path): + self.bridge_builtin_dropdown.addItem("snowflake") + + # Request a bridge from torproject.org (moat) + self.bridge_moat_radio = QtWidgets.QRadioButton( + strings._("gui_settings_bridge_moat_radio_option") + ) + self.bridge_moat_radio.toggled.connect(self.bridge_moat_radio_toggled) + self.bridge_moat_button = QtWidgets.QPushButton( + strings._("gui_settings_bridge_moat_button") + ) + self.bridge_moat_button.clicked.connect(self.bridge_moat_button_clicked) + self.bridge_moat_textbox = QtWidgets.QPlainTextEdit() + self.bridge_moat_textbox.setMinimumHeight(100) + self.bridge_moat_textbox.setMaximumHeight(100) + self.bridge_moat_textbox.setReadOnly(True) + self.bridge_moat_textbox.setWordWrapMode(QtGui.QTextOption.NoWrap) + bridge_moat_textbox_options_layout = QtWidgets.QVBoxLayout() + bridge_moat_textbox_options_layout.addWidget(self.bridge_moat_button) + bridge_moat_textbox_options_layout.addWidget(self.bridge_moat_textbox) + self.bridge_moat_textbox_options = QtWidgets.QWidget() + self.bridge_moat_textbox_options.setLayout(bridge_moat_textbox_options_layout) + self.bridge_moat_textbox_options.hide() + + # Custom bridges radio and textbox + self.bridge_custom_radio = QtWidgets.QRadioButton( + strings._("gui_settings_bridge_custom_radio_option") + ) + self.bridge_custom_radio.toggled.connect(self.bridge_custom_radio_toggled) + self.bridge_custom_textbox = QtWidgets.QPlainTextEdit() + self.bridge_custom_textbox.setMinimumHeight(100) + self.bridge_custom_textbox.setMaximumHeight(100) + self.bridge_custom_textbox.setPlaceholderText( + strings._("gui_settings_bridge_custom_placeholder") + ) + + bridge_custom_textbox_options_layout = QtWidgets.QVBoxLayout() + bridge_custom_textbox_options_layout.addWidget(self.bridge_custom_textbox) + + self.bridge_custom_textbox_options = QtWidgets.QWidget() + self.bridge_custom_textbox_options.setLayout( + bridge_custom_textbox_options_layout + ) + self.bridge_custom_textbox_options.hide() + + # Bridge settings layout + bridge_settings_layout = QtWidgets.QVBoxLayout() + bridge_settings_layout.addWidget(self.bridge_builtin_radio) + bridge_settings_layout.addWidget(self.bridge_builtin_dropdown) + bridge_settings_layout.addWidget(self.bridge_moat_radio) + bridge_settings_layout.addWidget(self.bridge_moat_textbox_options) + bridge_settings_layout.addWidget(self.bridge_custom_radio) + bridge_settings_layout.addWidget(self.bridge_custom_textbox_options) + self.bridge_settings = QtWidgets.QWidget() + self.bridge_settings.setLayout(bridge_settings_layout) + + # Bridges layout/widget + bridges_layout = QtWidgets.QVBoxLayout() + bridges_layout.addWidget(bridges_label) + bridges_layout.addWidget(self.bridge_use_checkbox) + bridges_layout.addWidget(self.bridge_settings) + + self.bridges = QtWidgets.QWidget() + self.bridges.setLayout(bridges_layout) + + # Automatic + self.connection_type_automatic_radio = QtWidgets.QRadioButton( + strings._("gui_settings_connection_type_automatic_option") + ) + self.connection_type_automatic_radio.toggled.connect( + self.connection_type_automatic_toggled + ) + + # Control port + self.connection_type_control_port_radio = QtWidgets.QRadioButton( + strings._("gui_settings_connection_type_control_port_option") + ) + self.connection_type_control_port_radio.toggled.connect( + self.connection_type_control_port_toggled + ) + + connection_type_control_port_extras_label = QtWidgets.QLabel( + strings._("gui_settings_control_port_label") + ) + self.connection_type_control_port_extras_address = QtWidgets.QLineEdit() + self.connection_type_control_port_extras_port = QtWidgets.QLineEdit() + connection_type_control_port_extras_layout = QtWidgets.QHBoxLayout() + connection_type_control_port_extras_layout.addWidget( + connection_type_control_port_extras_label + ) + connection_type_control_port_extras_layout.addWidget( + self.connection_type_control_port_extras_address + ) + connection_type_control_port_extras_layout.addWidget( + self.connection_type_control_port_extras_port + ) + + self.connection_type_control_port_extras = QtWidgets.QWidget() + self.connection_type_control_port_extras.setLayout( + connection_type_control_port_extras_layout + ) + self.connection_type_control_port_extras.hide() + + # Socket file + self.connection_type_socket_file_radio = QtWidgets.QRadioButton( + strings._("gui_settings_connection_type_socket_file_option") + ) + self.connection_type_socket_file_radio.toggled.connect( + self.connection_type_socket_file_toggled + ) + + connection_type_socket_file_extras_label = QtWidgets.QLabel( + strings._("gui_settings_socket_file_label") + ) + self.connection_type_socket_file_extras_path = QtWidgets.QLineEdit() + connection_type_socket_file_extras_layout = QtWidgets.QHBoxLayout() + connection_type_socket_file_extras_layout.addWidget( + connection_type_socket_file_extras_label + ) + connection_type_socket_file_extras_layout.addWidget( + self.connection_type_socket_file_extras_path + ) + + self.connection_type_socket_file_extras = QtWidgets.QWidget() + self.connection_type_socket_file_extras.setLayout( + connection_type_socket_file_extras_layout + ) + self.connection_type_socket_file_extras.hide() + + # Tor SOCKS address and port + gui_settings_socks_label = QtWidgets.QLabel( + strings._("gui_settings_socks_label") + ) + self.connection_type_socks_address = QtWidgets.QLineEdit() + self.connection_type_socks_port = QtWidgets.QLineEdit() + connection_type_socks_layout = QtWidgets.QHBoxLayout() + connection_type_socks_layout.addWidget(gui_settings_socks_label) + connection_type_socks_layout.addWidget(self.connection_type_socks_address) + connection_type_socks_layout.addWidget(self.connection_type_socks_port) + + self.connection_type_socks = QtWidgets.QWidget() + self.connection_type_socks.setLayout(connection_type_socks_layout) + self.connection_type_socks.hide() + + # Authentication options + self.authenticate_no_auth_checkbox = QtWidgets.QCheckBox( + strings._("gui_settings_authenticate_no_auth_option") + ) + self.authenticate_no_auth_checkbox.toggled.connect( + self.authenticate_no_auth_toggled + ) + + authenticate_password_extras_label = QtWidgets.QLabel( + strings._("gui_settings_password_label") + ) + self.authenticate_password_extras_password = QtWidgets.QLineEdit("") + authenticate_password_extras_layout = QtWidgets.QHBoxLayout() + authenticate_password_extras_layout.addWidget( + authenticate_password_extras_label + ) + authenticate_password_extras_layout.addWidget( + self.authenticate_password_extras_password + ) + + self.authenticate_password_extras = QtWidgets.QWidget() + self.authenticate_password_extras.setLayout(authenticate_password_extras_layout) + self.authenticate_password_extras.hide() + + # Group for Tor settings + tor_settings_layout = QtWidgets.QVBoxLayout() + tor_settings_layout.addWidget(self.connection_type_control_port_extras) + tor_settings_layout.addWidget(self.connection_type_socket_file_extras) + tor_settings_layout.addWidget(self.connection_type_socks) + tor_settings_layout.addWidget(self.authenticate_no_auth_checkbox) + tor_settings_layout.addWidget(self.authenticate_password_extras) + self.tor_settings_group = QtWidgets.QGroupBox( + strings._("gui_settings_controller_extras_label") + ) + self.tor_settings_group.setLayout(tor_settings_layout) + self.tor_settings_group.hide() + + # Put the radios into their own group so they are exclusive + connection_type_radio_group_layout = QtWidgets.QVBoxLayout() + connection_type_radio_group_layout.addWidget(self.connection_type_bundled_radio) + connection_type_radio_group_layout.addWidget( + self.connection_type_automatic_radio + ) + connection_type_radio_group_layout.addWidget( + self.connection_type_control_port_radio + ) + connection_type_radio_group_layout.addWidget( + self.connection_type_socket_file_radio + ) + connection_type_radio_group_layout.addStretch() + connection_type_radio_group = QtWidgets.QGroupBox( + strings._("gui_settings_connection_type_label") + ) + connection_type_radio_group.setLayout(connection_type_radio_group_layout) + + # The Bridges options are not exclusive (enabling Bridges offers obfs4 or custom bridges) + connection_type_bridges_radio_group_layout = QtWidgets.QVBoxLayout() + connection_type_bridges_radio_group_layout.addWidget(self.bridges) + self.connection_type_bridges_radio_group = QtWidgets.QGroupBox( + strings._("gui_settings_tor_bridges") + ) + self.connection_type_bridges_radio_group.setLayout( + connection_type_bridges_radio_group_layout + ) + self.connection_type_bridges_radio_group.hide() + + # Connection type layout + connection_type_layout = QtWidgets.QVBoxLayout() + connection_type_layout.addWidget(self.tor_settings_group) + connection_type_layout.addWidget(self.connection_type_bridges_radio_group) + connection_type_layout.addStretch() + + # Settings are in columns + columns_layout = QtWidgets.QHBoxLayout() + columns_layout.addWidget(connection_type_radio_group) + columns_layout.addSpacing(20) + columns_layout.addLayout(connection_type_layout, stretch=1) + columns_wrapper = QtWidgets.QWidget() + columns_wrapper.setFixedHeight(400) + columns_wrapper.setLayout(columns_layout) + + # Tor connection widget + self.tor_con = TorConnectionWidget(self.common, self.status_bar) + self.tor_con.success.connect(self.tor_con_success) + self.tor_con.fail.connect(self.tor_con_fail) + self.tor_con.hide() + self.tor_con_type = None + + # Error label + self.error_label = QtWidgets.QLabel() + self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) + self.error_label.setWordWrap(True) + + # Buttons + self.test_tor_button = QtWidgets.QPushButton( + strings._("gui_settings_connection_type_test_button") + ) + self.test_tor_button.clicked.connect(self.test_tor_clicked) + self.save_button = QtWidgets.QPushButton(strings._("gui_settings_button_save")) + self.save_button.clicked.connect(self.save_clicked) + buttons_layout = QtWidgets.QHBoxLayout() + buttons_layout.addWidget(self.error_label, stretch=1) + buttons_layout.addSpacing(20) + buttons_layout.addWidget(self.test_tor_button) + buttons_layout.addWidget(self.save_button) + + # Main layout + main_layout = QtWidgets.QVBoxLayout() + main_layout.addWidget(columns_wrapper) + main_layout.addStretch() + main_layout.addWidget(self.tor_con) + main_layout.addStretch() + main_layout.addLayout(buttons_layout) + self.main_widget = QtWidgets.QWidget() + self.main_widget.setLayout(main_layout) + + # Tabs are active label + active_tabs_label = QtWidgets.QLabel( + strings._("gui_settings_stop_active_tabs_label") + ) + active_tabs_label.setAlignment(QtCore.Qt.AlignHCenter) + + # Active tabs layout + active_tabs_layout = QtWidgets.QVBoxLayout() + active_tabs_layout.addStretch() + active_tabs_layout.addWidget(active_tabs_label) + active_tabs_layout.addStretch() + self.active_tabs_widget = QtWidgets.QWidget() + self.active_tabs_widget.setLayout(active_tabs_layout) + + layout = QtWidgets.QVBoxLayout() + layout.addWidget(self.main_widget) + layout.addWidget(self.active_tabs_widget) + self.setLayout(layout) + + self.active_tabs_changed(are_tabs_active) + self.reload_settings() + + def reload_settings(self): + # Load settings, and fill them in + self.old_settings = Settings(self.common) + self.old_settings.load() + + connection_type = self.old_settings.get("connection_type") + if connection_type == "bundled": + if self.connection_type_bundled_radio.isEnabled(): + self.connection_type_bundled_radio.setChecked(True) + else: + # If bundled tor is disabled, fallback to automatic + self.connection_type_automatic_radio.setChecked(True) + elif connection_type == "automatic": + self.connection_type_automatic_radio.setChecked(True) + elif connection_type == "control_port": + self.connection_type_control_port_radio.setChecked(True) + elif connection_type == "socket_file": + self.connection_type_socket_file_radio.setChecked(True) + self.connection_type_control_port_extras_address.setText( + self.old_settings.get("control_port_address") + ) + self.connection_type_control_port_extras_port.setText( + str(self.old_settings.get("control_port_port")) + ) + self.connection_type_socket_file_extras_path.setText( + self.old_settings.get("socket_file_path") + ) + self.connection_type_socks_address.setText( + self.old_settings.get("socks_address") + ) + self.connection_type_socks_port.setText( + str(self.old_settings.get("socks_port")) + ) + auth_type = self.old_settings.get("auth_type") + if auth_type == "no_auth": + self.authenticate_no_auth_checkbox.setCheckState(QtCore.Qt.Checked) + else: + self.authenticate_no_auth_checkbox.setChecked(QtCore.Qt.Unchecked) + self.authenticate_password_extras_password.setText( + self.old_settings.get("auth_password") + ) + + if self.old_settings.get("bridges_enabled"): + self.bridge_use_checkbox.setCheckState(QtCore.Qt.Checked) + self.bridge_settings.show() + + bridges_type = self.old_settings.get("bridges_type") + if bridges_type == "built-in": + self.bridge_builtin_radio.setChecked(True) + self.bridge_builtin_dropdown.show() + self.bridge_moat_radio.setChecked(False) + self.bridge_moat_textbox_options.hide() + self.bridge_custom_radio.setChecked(False) + self.bridge_custom_textbox_options.hide() + + bridges_builtin_pt = self.old_settings.get("bridges_builtin_pt") + if bridges_builtin_pt == "obfs4": + self.bridge_builtin_dropdown.setCurrentText("obfs4") + elif bridges_builtin_pt == "meek-azure": + self.bridge_builtin_dropdown.setCurrentText("meek-azure") + else: + self.bridge_builtin_dropdown.setCurrentText("snowflake") + + self.bridge_moat_textbox_options.hide() + self.bridge_custom_textbox_options.hide() + + elif bridges_type == "moat": + self.bridge_builtin_radio.setChecked(False) + self.bridge_builtin_dropdown.hide() + self.bridge_moat_radio.setChecked(True) + self.bridge_moat_textbox_options.show() + self.bridge_custom_radio.setChecked(False) + self.bridge_custom_textbox_options.hide() + + else: + self.bridge_builtin_radio.setChecked(False) + self.bridge_builtin_dropdown.hide() + self.bridge_moat_radio.setChecked(False) + self.bridge_moat_textbox_options.hide() + self.bridge_custom_radio.setChecked(True) + self.bridge_custom_textbox_options.show() + + bridges_moat = self.old_settings.get("bridges_moat") + self.bridge_moat_textbox.document().setPlainText(bridges_moat) + bridges_custom = self.old_settings.get("bridges_custom") + self.bridge_custom_textbox.document().setPlainText(bridges_custom) + + else: + self.bridge_use_checkbox.setCheckState(QtCore.Qt.Unchecked) + self.bridge_settings.hide() + + def active_tabs_changed(self, are_tabs_active): + if are_tabs_active: + self.main_widget.hide() + self.active_tabs_widget.show() + else: + self.main_widget.show() + self.active_tabs_widget.hide() + + def connection_type_bundled_toggled(self, checked): + """ + Connection type bundled was toggled + """ + self.common.log("TorSettingsTab", "connection_type_bundled_toggled") + if checked: + self.tor_settings_group.hide() + self.connection_type_socks.hide() + self.connection_type_bridges_radio_group.show() + + def bridge_use_checkbox_state_changed(self, state): + """ + 'Use a bridge' checkbox changed + """ + if state == QtCore.Qt.Checked: + self.bridge_settings.show() + self.bridge_builtin_radio.click() + self.bridge_builtin_dropdown.setCurrentText("obfs4") + else: + self.bridge_settings.hide() + + def bridge_builtin_radio_toggled(self, checked): + """ + 'Select a built-in bridge' radio button toggled + """ + if checked: + self.bridge_builtin_dropdown.show() + self.bridge_custom_textbox_options.hide() + self.bridge_moat_textbox_options.hide() + + def bridge_builtin_dropdown_changed(self, selection): + """ + Build-in bridge selection changed + """ + if selection == "meek-azure": + # Alert the user about meek's costliness if it looks like they're turning it on + if not self.old_settings.get("bridges_builtin_pt") == "meek-azure": + Alert( + self.common, + strings._("gui_settings_meek_lite_expensive_warning"), + QtWidgets.QMessageBox.Warning, + ) + + def bridge_moat_radio_toggled(self, checked): + """ + Moat (request bridge) bridges option was toggled. If checked, show moat bridge options. + """ + if checked: + self.bridge_builtin_dropdown.hide() + self.bridge_custom_textbox_options.hide() + self.bridge_moat_textbox_options.show() + + def bridge_moat_button_clicked(self): + """ + Request new bridge button clicked + """ + self.common.log("TorSettingsTab", "bridge_moat_button_clicked") + + moat_dialog = MoatDialog(self.common, self.meek) + moat_dialog.got_bridges.connect(self.bridge_moat_got_bridges) + moat_dialog.exec_() + + def bridge_moat_got_bridges(self, bridges): + """ + Got new bridges from moat + """ + self.common.log("TorSettingsTab", "bridge_moat_got_bridges") + self.bridge_moat_textbox.document().setPlainText(bridges) + self.bridge_moat_textbox.show() + + def bridge_custom_radio_toggled(self, checked): + """ + Custom bridges option was toggled. If checked, show custom bridge options. + """ + if checked: + self.bridge_builtin_dropdown.hide() + self.bridge_moat_textbox_options.hide() + self.bridge_custom_textbox_options.show() + + def connection_type_automatic_toggled(self, checked): + """ + Connection type automatic was toggled. If checked, hide authentication fields. + """ + self.common.log("TorSettingsTab", "connection_type_automatic_toggled") + if checked: + self.tor_settings_group.hide() + self.connection_type_socks.hide() + self.connection_type_bridges_radio_group.hide() + + def connection_type_control_port_toggled(self, checked): + """ + Connection type control port was toggled. If checked, show extra fields + for Tor control address and port. If unchecked, hide those extra fields. + """ + self.common.log("TorSettingsTab", "connection_type_control_port_toggled") + if checked: + self.tor_settings_group.show() + self.connection_type_control_port_extras.show() + self.connection_type_socks.show() + self.connection_type_bridges_radio_group.hide() + else: + self.connection_type_control_port_extras.hide() + + def connection_type_socket_file_toggled(self, checked): + """ + Connection type socket file was toggled. If checked, show extra fields + for socket file. If unchecked, hide those extra fields. + """ + self.common.log("TorSettingsTab", "connection_type_socket_file_toggled") + if checked: + self.tor_settings_group.show() + self.connection_type_socket_file_extras.show() + self.connection_type_socks.show() + self.connection_type_bridges_radio_group.hide() + else: + self.connection_type_socket_file_extras.hide() + + def authenticate_no_auth_toggled(self, checked): + """ + Authentication option no authentication was toggled. + """ + self.common.log("TorSettingsTab", "authenticate_no_auth_toggled") + if checked: + self.authenticate_password_extras.hide() + else: + self.authenticate_password_extras.show() + + def test_tor_clicked(self): + """ + Test Tor Settings button clicked. With the given settings, see if we can + successfully connect and authenticate to Tor. + """ + self.common.log("TorSettingsTab", "test_tor_clicked") + + self.error_label.setText("") + + settings = self.settings_from_fields() + if not settings: + return + + self.test_tor_button.hide() + self.save_button.hide() + + self.test_onion = Onion( + self.common, + use_tmp_dir=True, + get_tor_paths=self.common.gui.get_tor_paths, + ) + + self.tor_con_type = "test" + self.tor_con.show() + self.tor_con.start(settings, True, self.test_onion) + + def save_clicked(self): + """ + Save button clicked. Save current settings to disk. + """ + self.common.log("TorSettingsTab", "save_clicked") + + self.error_label.setText("") + + def changed(s1, s2, keys): + """ + Compare the Settings objects s1 and s2 and return true if any values + have changed for the given keys. + """ + for key in keys: + if s1.get(key) != s2.get(key): + return True + return False + + settings = self.settings_from_fields() + if settings: + # Save the new settings + settings.save() + + # If Tor isn't connected, or if Tor settings have changed, Reinitialize + # the Onion object + reboot_onion = False + if not self.common.gui.local_only: + if self.common.gui.onion.is_authenticated(): + self.common.log( + "TorSettingsTab", "save_clicked", "Connected to Tor" + ) + + if changed( + settings, + self.old_settings, + [ + "connection_type", + "control_port_address", + "control_port_port", + "socks_address", + "socks_port", + "socket_file_path", + "auth_type", + "auth_password", + "bridges_enabled", + "bridges_type", + "bridges_builtin_pt", + "bridges_moat", + "bridges_custom", + ], + ): + + reboot_onion = True + + else: + self.common.log( + "TorSettingsTab", "save_clicked", "Not connected to Tor" + ) + # Tor isn't connected, so try connecting + reboot_onion = True + + # Do we need to reinitialize Tor? + if reboot_onion: + # Tell the tabs that Tor is disconnected + self.tor_is_disconnected.emit() + + # Reinitialize the Onion object + self.common.log( + "TorSettingsTab", "save_clicked", "rebooting the Onion" + ) + self.common.gui.onion.cleanup() + + self.test_tor_button.hide() + self.save_button.hide() + + self.tor_con_type = "save" + self.tor_con.show() + self.tor_con.start(settings) + else: + self.close_this_tab.emit() + else: + self.close_this_tab.emit() + + def tor_con_success(self): + """ + Finished testing tor connection. + """ + self.tor_con.hide() + self.test_tor_button.show() + self.save_button.show() + + if self.tor_con_type == "test": + Alert( + self.common, + strings._("settings_test_success").format( + self.test_onion.tor_version, + self.test_onion.supports_ephemeral, + self.test_onion.supports_stealth, + self.test_onion.supports_v3_onions, + ), + title=strings._("gui_settings_connection_type_test_button"), + ) + self.test_onion.cleanup() + + elif self.tor_con_type == "save": + if ( + self.common.gui.onion.is_authenticated() + and not self.tor_con.wasCanceled() + ): + # Tell the tabs that Tor is connected + self.tor_is_connected.emit() + # Close the tab + self.close_this_tab.emit() + + self.tor_con_type = None + + def tor_con_fail(self, msg): + """ + Finished testing tor connection. + """ + self.tor_con.hide() + self.test_tor_button.show() + self.save_button.show() + + self.error_label.setText(msg) + + if self.tor_con_type == "test": + self.test_onion.cleanup() + + self.tor_con_type = None + + def settings_from_fields(self): + """ + Return a Settings object that's full of values from the settings dialog. + """ + self.common.log("TorSettingsTab", "settings_from_fields") + settings = Settings(self.common) + settings.load() # To get the last update timestamp + + # Tor connection + if self.connection_type_bundled_radio.isChecked(): + settings.set("connection_type", "bundled") + if self.connection_type_automatic_radio.isChecked(): + settings.set("connection_type", "automatic") + if self.connection_type_control_port_radio.isChecked(): + settings.set("connection_type", "control_port") + if self.connection_type_socket_file_radio.isChecked(): + settings.set("connection_type", "socket_file") + + settings.set( + "control_port_address", + self.connection_type_control_port_extras_address.text(), + ) + settings.set( + "control_port_port", self.connection_type_control_port_extras_port.text() + ) + settings.set( + "socket_file_path", self.connection_type_socket_file_extras_path.text() + ) + + settings.set("socks_address", self.connection_type_socks_address.text()) + settings.set("socks_port", self.connection_type_socks_port.text()) + + if self.authenticate_no_auth_checkbox.checkState() == QtCore.Qt.Checked: + settings.set("auth_type", "no_auth") + else: + settings.set("auth_type", "password") + + settings.set("auth_password", self.authenticate_password_extras_password.text()) + + # Whether we use bridges + if self.bridge_use_checkbox.checkState() == QtCore.Qt.Checked: + settings.set("bridges_enabled", True) + + if self.bridge_builtin_radio.isChecked(): + settings.set("bridges_type", "built-in") + + selection = self.bridge_builtin_dropdown.currentText() + settings.set("bridges_builtin_pt", selection) + + if self.bridge_moat_radio.isChecked(): + settings.set("bridges_type", "moat") + moat_bridges = self.bridge_moat_textbox.toPlainText() + if ( + self.connection_type_bundled_radio.isChecked() + and moat_bridges.strip() == "" + ): + self.error_label.setText( + strings._("gui_settings_moat_bridges_invalid") + ) + return False + + settings.set("bridges_moat", moat_bridges) + + if self.bridge_custom_radio.isChecked(): + settings.set("bridges_type", "custom") + + new_bridges = [] + bridges = self.bridge_custom_textbox.toPlainText().split("\n") + bridges_valid = False + for bridge in bridges: + if bridge != "": + # Check the syntax of the custom bridge to make sure it looks legitimate + ipv4_pattern = re.compile( + "(obfs4\s+)?(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):([0-9]+)(\s+)([A-Z0-9]+)(.+)$" + ) + ipv6_pattern = re.compile( + "(obfs4\s+)?\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\]:[0-9]+\s+[A-Z0-9]+(.+)$" + ) + meek_lite_pattern = re.compile( + "(meek_lite)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)(\s)+url=(.+)(\s)+front=(.+)" + ) + snowflake_pattern = re.compile( + "(snowflake)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)" + ) + if ( + ipv4_pattern.match(bridge) + or ipv6_pattern.match(bridge) + or meek_lite_pattern.match(bridge) + or snowflake_pattern.match(bridge) + ): + new_bridges.append(bridge) + bridges_valid = True + + if bridges_valid: + new_bridges = "\n".join(new_bridges) + "\n" + settings.set("bridges_custom", new_bridges) + else: + self.error_label.setText( + strings._("gui_settings_tor_bridges_invalid") + ) + return False + else: + settings.set("bridges_enabled", False) + + return settings + + def closeEvent(self, e): + self.common.log("TorSettingsTab", "closeEvent") + + # On close, if Tor isn't connected, then quit OnionShare altogether + if not self.common.gui.local_only: + if not self.common.gui.onion.is_authenticated(): + self.common.log( + "TorSettingsTab", + "closeEvent", + "Closing while not connected to Tor", + ) + + # Wait 1ms for the event loop to finish, then quit + QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) + + def settings_have_changed(self): + # Global settings have changed + self.common.log("TorSettingsTab", "settings_have_changed") diff --git a/desktop/onionshare/update_checker.py b/desktop/onionshare/update_checker.py new file mode 100644 index 00000000..e9dbc060 --- /dev/null +++ b/desktop/onionshare/update_checker.py @@ -0,0 +1,232 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore +import datetime +import re +import socks +from distutils.version import LooseVersion as Version + +from onionshare_cli.settings import Settings + + +class UpdateCheckerCheckError(Exception): + """ + Error checking for updates because of some Tor connection issue, or because + the OnionShare website is down. + """ + + pass + + +class UpdateCheckerInvalidLatestVersion(Exception): + """ + Successfully downloaded the latest version, but it doesn't appear to be a + valid version string. + """ + + def __init__(self, latest_version): + self.latest_version = latest_version + + +class UpdateChecker(QtCore.QObject): + """ + Load http://elx57ue5uyfplgva.onion/latest-version.txt to see what the latest + version of OnionShare is. If the latest version is newer than the + installed version, alert the user. + + Only check at most once per day, unless force is True. + """ + + update_available = QtCore.Signal(str, str, str) + update_not_available = QtCore.Signal() + update_error = QtCore.Signal() + update_invalid_version = QtCore.Signal(str) + + def __init__(self, common, onion): + super(UpdateChecker, self).__init__() + + self.common = common + + self.common.log("UpdateChecker", "__init__") + self.onion = onion + + def check(self, force=False): + self.common.log("UpdateChecker", "check", f"force={force}") + # Load the settings + settings = Settings(self.common) + settings.load() + + # If force=True, then definitely check + if force: + check_for_updates = True + else: + check_for_updates = False + + # See if it's been 1 day since the last check + autoupdate_timestamp = settings.get("autoupdate_timestamp") + if autoupdate_timestamp: + last_checked = datetime.datetime.fromtimestamp(autoupdate_timestamp) + now = datetime.datetime.now() + + one_day = datetime.timedelta(days=1) + if now - last_checked > one_day: + check_for_updates = True + else: + check_for_updates = True + + # Check for updates + if check_for_updates: + self.common.log("UpdateChecker", "check", "checking for updates") + # Download the latest-version file over Tor + try: + # User agent string includes OnionShare version and platform + user_agent = f"OnionShare {self.common.version}, {self.common.platform}" + + # If the update is forced, add '?force=1' to the URL, to more + # accurately measure daily users + path = "/latest-version.txt" + if force: + path += "?force=1" + + if Version(self.onion.tor_version) >= Version("0.3.2.9"): + onion_domain = ( + "lldan5gahapx5k7iafb3s4ikijc4ni7gx5iywdflkba5y2ezyg6sjgyd.onion" + ) + else: + onion_domain = "elx57ue5uyfplgva.onion" + + self.common.log( + "UpdateChecker", "check", f"loading http://{onion_domain}{path}" + ) + + (socks_address, socks_port) = self.onion.get_tor_socks_port() + socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port) + + s = socks.socksocket() + s.settimeout(15) # 15 second timeout + s.connect((onion_domain, 80)) + + http_request = f"GET {path} HTTP/1.0\r\n" + http_request += f"Host: {onion_domain}\r\n" + http_request += f"User-Agent: {user_agent}\r\n" + http_request += "\r\n" + s.sendall(http_request.encode("utf-8")) + + http_response = s.recv(1024) + latest_version = ( + http_response[http_response.find(b"\r\n\r\n") :] + .strip() + .decode("utf-8") + ) + + self.common.log( + "UpdateChecker", + "check", + f"latest OnionShare version: {latest_version}", + ) + + except Exception as e: + self.common.log("UpdateChecker", "check", str(e)) + self.update_error.emit() + raise UpdateCheckerCheckError + + # Validate that latest_version looks like a version string + # This regex is: 1-3 dot-separated numeric components + version_re = r"^(\d+\.)?(\d+\.)?(\d+)$" + if not re.match(version_re, latest_version): + self.update_invalid_version.emit(latest_version) + raise UpdateCheckerInvalidLatestVersion(latest_version) + + # Update the last checked timestamp (dropping the seconds and milliseconds) + timestamp = ( + datetime.datetime.now() + .replace(microsecond=0) + .replace(second=0) + .timestamp() + ) + # Re-load the settings first before saving, just in case they've changed since we started our thread + settings.load() + settings.set("autoupdate_timestamp", timestamp) + settings.save() + + # Do we need to update? + update_url = "https://onionshare.org" + installed_version = self.common.version + if installed_version < latest_version: + self.update_available.emit( + update_url, installed_version, latest_version + ) + return + + # No updates are available + self.update_not_available.emit() + + +class UpdateThread(QtCore.QThread): + update_available = QtCore.Signal(str, str, str) + update_not_available = QtCore.Signal() + update_error = QtCore.Signal() + update_invalid_version = QtCore.Signal(str) + + def __init__(self, common, onion, force=False): + super(UpdateThread, self).__init__() + + self.common = common + + self.common.log("UpdateThread", "__init__") + self.onion = onion + self.force = force + + def run(self): + self.common.log("UpdateThread", "run") + + u = UpdateChecker(self.common, self.onion) + u.update_available.connect(self._update_available) + u.update_not_available.connect(self._update_not_available) + u.update_error.connect(self._update_error) + u.update_invalid_version.connect(self._update_invalid_version) + + try: + u.check(force=self.force) + except Exception as e: + # If update check fails, silently ignore + self.common.log("UpdateThread", "run", str(e)) + pass + + def _update_available(self, update_url, installed_version, latest_version): + self.common.log("UpdateThread", "_update_available") + self.active = False + self.update_available.emit(update_url, installed_version, latest_version) + + def _update_not_available(self): + self.common.log("UpdateThread", "_update_not_available") + self.active = False + self.update_not_available.emit() + + def _update_error(self): + self.common.log("UpdateThread", "_update_error") + self.active = False + self.update_error.emit() + + def _update_invalid_version(self, latest_version): + self.common.log("UpdateThread", "_update_invalid_version") + self.active = False + self.update_invalid_version.emit(latest_version) diff --git a/desktop/onionshare/widgets.py b/desktop/onionshare/widgets.py new file mode 100644 index 00000000..761df212 --- /dev/null +++ b/desktop/onionshare/widgets.py @@ -0,0 +1,156 @@ +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +from PySide2 import QtCore, QtWidgets, QtGui +import qrcode + +from . import strings +from .gui_common import GuiCommon + + +class Alert(QtWidgets.QMessageBox): + """ + An alert box dialog. + """ + + def __init__( + self, + common, + message, + icon=QtWidgets.QMessageBox.NoIcon, + buttons=QtWidgets.QMessageBox.Ok, + autostart=True, + title="OnionShare", + ): + super(Alert, self).__init__(None) + + self.common = common + + self.common.log("Alert", "__init__") + + self.setWindowTitle(title) + self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) + self.setText(message) + self.setIcon(icon) + self.setStandardButtons(buttons) + + if autostart: + self.exec_() + + +class AddFileDialog(QtWidgets.QFileDialog): + """ + Overridden version of QFileDialog which allows us to select folders as well + as, or instead of, files. For adding files/folders to share. + + Note that this dialog can't be used in macOS, only in Windows, Linux, and BSD. + This is because the macOS sandbox requires native dialogs, and this is a Qt5 + dialog. + """ + + def __init__(self, common, *args, **kwargs): + QtWidgets.QFileDialog.__init__(self, *args, **kwargs) + + self.common = common + self.common.log("AddFileDialog", "__init__") + + self.setOption(self.DontUseNativeDialog, True) + self.setOption(self.ReadOnly, True) + self.setOption(self.ShowDirsOnly, False) + self.setFileMode(self.ExistingFiles) + tree_view = self.findChild(QtWidgets.QTreeView) + tree_view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + list_view = self.findChild(QtWidgets.QListView, "listView") + list_view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) + + def accept(self): + self.common.log("AddFileDialog", "accept") + QtWidgets.QDialog.accept(self) + + +class MinimumSizeWidget(QtWidgets.QWidget): + """ + An empty widget with a minimum width and height, just to force layouts to behave + """ + + def __init__(self, width, height): + super(MinimumSizeWidget, self).__init__() + self.setMinimumWidth(width) + self.setMinimumHeight(height) + + +class Image(qrcode.image.base.BaseImage): + """ + A custom Image class, for use with the QR Code pixmap. + """ + + def __init__(self, border, width, box_size): + self.border = border + self.width = width + self.box_size = box_size + size = (width + border * 2) * box_size + self._image = QtGui.QImage(size, size, QtGui.QImage.Format_RGB16) + self._image.fill(QtCore.Qt.white) + + def pixmap(self): + return QtGui.QPixmap.fromImage(self._image) + + def drawrect(self, row, col): + painter = QtGui.QPainter(self._image) + painter.fillRect( + (col + self.border) * self.box_size, + (row + self.border) * self.box_size, + self.box_size, + self.box_size, + QtCore.Qt.black, + ) + + def save(self, stream, kind=None): + pass + + +class QRCodeDialog(QtWidgets.QDialog): + """ + A dialog showing a QR code. + """ + + def __init__(self, common, title, text): + super(QRCodeDialog, self).__init__() + + self.common = common + + self.common.log("QrCode", "__init__") + + self.qr_label_title = QtWidgets.QLabel(self) + self.qr_label_title.setText(title) + self.qr_label_title.setAlignment(QtCore.Qt.AlignCenter) + + self.qr_label = QtWidgets.QLabel(self) + self.qr_label.setPixmap(qrcode.make(text, image_factory=Image).pixmap()) + self.qr_label.setScaledContents(True) + self.qr_label.setFixedSize(350, 350) + + self.setWindowTitle(strings._("gui_qr_code_dialog_title")) + self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) + layout = QtWidgets.QVBoxLayout(self) + layout.addWidget(self.qr_label_title) + layout.addWidget(self.qr_label) + + self.exec_() diff --git a/desktop/src/onionshare/__init__.py b/desktop/src/onionshare/__init__.py deleted file mode 100644 index 40a91913..00000000 --- a/desktop/src/onionshare/__init__.py +++ /dev/null @@ -1,261 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from __future__ import division -import os -import sys -import argparse -import signal -import json -import psutil -import getpass -from PySide2 import QtCore, QtWidgets, QtGui - -from PySide2.QtCore import Slot,Qt -from PySide2.QtGui import QPalette, QColor - -from onionshare_cli.common import Common -from onionshare_cli.settings import Settings - -from .gui_common import GuiCommon -from .widgets import Alert -from .main_window import MainWindow - - -class Application(QtWidgets.QApplication): - """ - This is Qt's QApplication class. It has been overridden to support threads - and the quick keyboard shortcut. - """ - - def __init__(self, common): - if common.platform == "Linux" or common.platform == "BSD": - self.setAttribute(QtCore.Qt.AA_X11InitThreads, True) - QtWidgets.QApplication.__init__(self, sys.argv) - self.setStyle("Fusion") - - # Check color mode on starting the app - self.color_mode = self.get_color_mode(common) - - # Enable Dark Theme - if self.color_mode == "dark": - self.setDarkMode() - else: - self.setLightMode() - - self.installEventFilter(self) - - def eventFilter(self, obj, event): - if ( - event.type() == QtCore.QEvent.KeyPress - and event.key() == QtCore.Qt.Key_Q - and event.modifiers() == QtCore.Qt.ControlModifier - ): - self.quit() - return False - - def is_dark_mode(self): - baseColor = QtGui.QPalette().color(QtGui.QPalette.Base) - if baseColor.name().lower() == "#ffffff": - return False - return True - - def setLightMode(self): - light_palette = QPalette() - light_palette.setColor(QPalette.Window, QColor(236, 236, 236)) - light_palette.setColor(QPalette.WindowText, Qt.black) - light_palette.setColor(QPalette.Base, Qt.white) - light_palette.setColor(QPalette.AlternateBase, QColor(245, 245, 245)) - light_palette.setColor(QPalette.ToolTipBase, Qt.white) - light_palette.setColor(QPalette.ToolTipText, Qt.black) - light_palette.setColor(QPalette.Text, Qt.black) - light_palette.setColor(QPalette.Button, QColor(236, 236, 236)) - light_palette.setColor(QPalette.ButtonText, Qt.black) - light_palette.setColor(QPalette.BrightText, Qt.white) - light_palette.setColor(QPalette.Link, QColor(0, 104, 218)) - light_palette.setColor(QPalette.Highlight, QColor(179, 215, 255)) - light_palette.setColor(QPalette.HighlightedText, Qt.black) - light_palette.setColor(QPalette.Light, Qt.white) - light_palette.setColor(QPalette.Midlight, QColor(245, 245, 245)) - light_palette.setColor(QPalette.Dark, QColor(191, 191, 191)) - light_palette.setColor(QPalette.Mid, QColor(169, 169, 169)) - light_palette.setColor(QPalette.Shadow, Qt.black) - self.setPalette(light_palette) - - def setDarkMode(self): - dark_palette = QPalette() - dark_palette.setColor(QPalette.Window, QColor(53, 53, 53)) - dark_palette.setColor(QPalette.WindowText, Qt.white) - dark_palette.setColor(QPalette.Base, QColor(25, 25, 25)) - dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53)) - dark_palette.setColor(QPalette.ToolTipBase, Qt.white) - dark_palette.setColor(QPalette.ToolTipText, Qt.white) - dark_palette.setColor(QPalette.Text, Qt.white) - dark_palette.setColor(QPalette.Button, QColor(53, 53, 53)) - dark_palette.setColor(QPalette.ButtonText, Qt.white) - dark_palette.setColor(QPalette.BrightText, Qt.red) - dark_palette.setColor(QPalette.Link, QColor(42, 130, 218)) - dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218)) - dark_palette.setColor(QPalette.HighlightedText, Qt.black) - self.setPalette(dark_palette) - self.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }") - - def get_color_mode(self, common): - curr_settings = Settings(common) - curr_settings.load() - current_theme = curr_settings.get("theme") - - if current_theme == 1: - return "light" - elif current_theme == 2: - return "dark" - else: - return "dark" if self.is_dark_mode() else "light" - -def main(): - """ - The main() function implements all of the logic that the GUI version of onionshare uses. - """ - common = Common() - common.display_banner() - - # Required for macOS Big Sur: https://stackoverflow.com/a/64878899 - if common.platform == "Darwin": - os.environ["QT_MAC_WANTS_LAYER"] = "1" - - # Start the Qt app - global qtapp - qtapp = Application(common) - - # Parse arguments - parser = argparse.ArgumentParser( - formatter_class=lambda prog: argparse.HelpFormatter(prog, max_help_position=48) - ) - parser.add_argument( - "--local-only", - action="store_true", - dest="local_only", - help="Don't use Tor (only for development)", - ) - parser.add_argument( - "-v", - "--verbose", - action="store_true", - dest="verbose", - help="Log OnionShare errors to stdout, and web errors to disk", - ) - parser.add_argument( - "--filenames", - metavar="filenames", - nargs="+", - help="List of files or folders to share", - ) - args = parser.parse_args() - - filenames = args.filenames - if filenames: - for i in range(len(filenames)): - filenames[i] = os.path.abspath(filenames[i]) - - local_only = bool(args.local_only) - verbose = bool(args.verbose) - - # Verbose mode? - common.verbose = verbose - - # Attach the GUI common parts to the common object - common.gui = GuiCommon(common, qtapp, local_only) - - # Validation - if filenames: - valid = True - for filename in filenames: - if not os.path.isfile(filename) and not os.path.isdir(filename): - Alert(common, f"{filename} is not a valid file.") - valid = False - if not os.access(filename, os.R_OK): - Alert(common, f"{filename} is not a readable file.") - valid = False - if not valid: - sys.exit() - - # Is there another onionshare-gui running? - if os.path.exists(common.gui.lock_filename): - with open(common.gui.lock_filename, "r") as f: - existing_pid = int(f.read()) - - # Is this process actually still running? - still_running = True - if not psutil.pid_exists(existing_pid): - still_running = False - else: - for proc in psutil.process_iter(["pid", "name", "username"]): - if proc.pid == existing_pid: - if ( - proc.username() != getpass.getuser() - or "onionshare" not in " ".join(proc.cmdline()).lower() - ): - still_running = False - - if still_running: - print(f"Opening tab in existing OnionShare window (pid {existing_pid})") - - # Make an event for the existing OnionShare window - if filenames: - obj = {"type": "new_share_tab", "filenames": filenames} - else: - obj = {"type": "new_tab"} - - # Write that event to disk - with open(common.gui.events_filename, "a") as f: - f.write(json.dumps(obj) + "\n") - return - else: - os.remove(common.gui.lock_filename) - - # Write the lock file - with open(common.gui.lock_filename, "w") as f: - f.write(f"{os.getpid()}\n") - - # Allow Ctrl-C to smoothly quit the program instead of throwing an exception - def signal_handler(s, frame): - print("\nCtrl-C pressed, quitting") - if os.path.exists(common.gui.lock_filename): - os.remove(common.gui.lock_filename) - sys.exit(0) - - signal.signal(signal.SIGINT, signal_handler) - - # Launch the gui - main_window = MainWindow(common, filenames) - - # If filenames were passed in, open them in a tab - if filenames: - main_window.tabs.new_share_tab(filenames) - - # Clean up when app quits - def shutdown(): - main_window.cleanup() - os.remove(common.gui.lock_filename) - - qtapp.aboutToQuit.connect(shutdown) - - # All done - sys.exit(qtapp.exec_()) diff --git a/desktop/src/onionshare/__main__.py b/desktop/src/onionshare/__main__.py deleted file mode 100644 index 3a7f3554..00000000 --- a/desktop/src/onionshare/__main__.py +++ /dev/null @@ -1,24 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from . import main - -if __name__ == "__main__": - main() diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py deleted file mode 100644 index 2a0bae4d..00000000 --- a/desktop/src/onionshare/gui_common.py +++ /dev/null @@ -1,510 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os -import shutil -from pkg_resources import resource_filename - -from . import strings -from onionshare_cli.onion import ( - Onion, - TorErrorInvalidSetting, - TorErrorAutomatic, - TorErrorSocketPort, - TorErrorSocketFile, - TorErrorMissingPassword, - TorErrorUnreadableCookieFile, - TorErrorAuthError, - TorErrorProtocolError, - BundledTorTimeout, - BundledTorBroken, - TorTooOldEphemeral, - TorTooOldStealth, - PortNotAvailable, -) - - -class GuiCommon: - """ - The shared code for all of the OnionShare GUI. - """ - - MODE_SHARE = "share" - MODE_RECEIVE = "receive" - MODE_WEBSITE = "website" - MODE_CHAT = "chat" - - def __init__(self, common, qtapp, local_only): - self.common = common - self.qtapp = qtapp - self.local_only = local_only - - # Are we running in a flatpak package? - self.is_flatpak = os.path.exists("/.flatpak-info") - - # Load settings - self.common.load_settings() - - # Load strings - strings.load_strings(self.common, self.get_resource_path("locale")) - - # Start the Onion - self.onion = Onion(common, get_tor_paths=self.get_tor_paths) - - # Lock filename - self.lock_filename = os.path.join(self.common.build_data_dir(), "lock") - - # Events filenames - self.events_dir = os.path.join(self.common.build_data_dir(), "events") - if not os.path.exists(self.events_dir): - os.makedirs(self.events_dir, 0o700, True) - self.events_filename = os.path.join(self.events_dir, "events") - - self.css = self.get_css(qtapp.color_mode) - self.color_mode = qtapp.color_mode - - def get_css(self, color_mode): - header_color = "#4E064F" # purple in light - title_color = "#333333" # dark gray color in main window - stop_button_color = "#d0011b" # red button color for stopping server - new_tab_button_background = "#ffffff" - new_tab_button_border = "#efeff0" - new_tab_button_text_color = "#4e0d4e" - downloads_uploads_progress_bar_border_color = "#4E064F" - downloads_uploads_progress_bar_chunk_color = "#4E064F" - share_zip_progess_bar_border_color = "#4E064F" - share_zip_progess_bar_chunk_color = "#4E064F" - history_background_color = "#ffffff" - history_label_color = "#000000" - settings_error_color = "#FF0000" - if color_mode == "dark": - header_color = "#F2F2F2" - title_color = "#F2F2F2" - stop_button_color = "#C32F2F" - new_tab_button_background = "#5F5F5F" - new_tab_button_border = "#878787" - new_tab_button_text_color = "#FFFFFF" - share_zip_progess_bar_border_color = "#F2F2F2" - history_background_color = "#191919" - history_label_color = "#ffffff" - settings_error_color = "#FF9999" - - return { - # OnionShareGui styles - "tab_widget": """ - QTabBar::tab { width: 170px; height: 30px; } - """, - "tab_widget_new_tab_button": """ - QPushButton { - font-weight: bold; - font-size: 20px; - }""", - "mode_new_tab_button": """ - QPushButton { - font-weight: bold; - font-size: 30px; - color: #601f61; - }""", - "mode_header_label": """ - QLabel { - color: """ - + header_color - + """; - font-size: 48px; - margin-bottom: 16px; - }""", - "settings_button": """ - QPushButton { - border: 0; - border-radius: 0; - }""", - "server_status_indicator_label": """ - QLabel { - font-style: italic; - color: #666666; - padding: 2px; - }""", - "status_bar": """ - QStatusBar { - font-style: italic; - color: #666666; - } - QStatusBar::item { - border: 0px; - }""", - # Common styles between modes and their child widgets - "mode_settings_toggle_advanced": """ - QPushButton { - color: #3f7fcf; - text-align: left; - } - """, - "mode_info_label": """ - QLabel { - font-size: 12px; - color: #666666; - } - """, - "server_status_url": """ - QLabel { - background-color: #ffffff; - color: #000000; - padding: 10px; - border: 1px solid #666666; - font-size: 12px; - } - """, - "server_status_url_buttons": """ - QPushButton { - padding: 4px 8px; - text-align: center; - } - """, - "server_status_button_stopped": """ - QPushButton { - background-color: #5fa416; - color: #ffffff; - padding: 10px 30px 10px 30px; - border: 0; - border-radius: 5px; - }""", - "server_status_button_working": """ - QPushButton { - background-color: #4c8211; - color: #ffffff; - padding: 10px 30px 10px 30px; - border: 0; - border-radius: 5px; - font-style: italic; - }""", - "server_status_button_started": """ - QPushButton { - background-color: """ - + stop_button_color - + """; - color: #ffffff; - padding: 10px 30px 10px 30px; - border: 0; - border-radius: 5px; - }""", - "downloads_uploads_not_empty": """ - QWidget{ - background-color: """ - + history_background_color - + """; - }""", - "downloads_uploads_empty": """ - QWidget { - background-color: """ - + history_background_color - + """; - border: 1px solid #999999; - } - QWidget QLabel { - background-color: none; - border: 0px; - } - """, - "downloads_uploads_empty_text": """ - QLabel { - color: #999999; - }""", - "downloads_uploads_label": """ - QLabel { - font-weight: bold; - font-size 14px; - text-align: center; - background-color: none; - border: none; - }""", - "downloads_uploads_clear": """ - QPushButton { - color: #3f7fcf; - } - """, - "download_uploads_indicator": """ - QLabel { - color: #ffffff; - background-color: #f44449; - font-weight: bold; - font-size: 10px; - padding: 2px; - border-radius: 7px; - text-align: center; - }""", - "downloads_uploads_progress_bar": """ - QProgressBar { - border: 1px solid """ - + downloads_uploads_progress_bar_border_color - + """; - background-color: #ffffff !important; - text-align: center; - color: #9b9b9b; - font-size: 14px; - } - QProgressBar::chunk { - background-color: """ - + downloads_uploads_progress_bar_chunk_color - + """; - width: 10px; - }""", - "history_default_label": """ - QLabel { - color: """ - + history_label_color - + """; - }""", - "history_individual_file_timestamp_label": """ - QLabel { - color: #666666; - }""", - "history_individual_file_status_code_label_2xx": """ - QLabel { - color: #008800; - }""", - "history_individual_file_status_code_label_4xx": """ - QLabel { - color: #cc0000; - }""", - "tor_not_connected_label": """ - QLabel { - font-size: 16px; - font-style: italic; - }""", - # New tab - "new_tab_button_image": """ - QLabel { - padding: 30px; - text-align: center; - } - """, - "new_tab_button_text": """ - QLabel { - border: 1px solid """ - + new_tab_button_border - + """; - border-radius: 4px; - background-color: """ - + new_tab_button_background - + """; - text-align: center; - color: """ - + new_tab_button_text_color - + """; - } - """, - "new_tab_title_text": """ - QLabel { - text-align: center; - color: """ - + title_color - + """; - font-size: 25px; - } - """, - # Share mode and child widget styles - "share_delete_all_files_button": """ - QPushButton { - color: #3f7fcf; - } - """, - "share_zip_progess_bar": """ - QProgressBar { - border: 1px solid """ - + share_zip_progess_bar_border_color - + """; - background-color: #ffffff !important; - text-align: center; - color: #9b9b9b; - } - QProgressBar::chunk { - border: 0px; - background-color: """ - + share_zip_progess_bar_chunk_color - + """; - width: 10px; - }""", - "share_filesize_warning": """ - QLabel { - padding: 10px 0; - font-weight: bold; - color: """ - + title_color - + """; - } - """, - "share_file_selection_drop_here_header_label": """ - QLabel { - color: """ - + header_color - + """; - font-size: 48px; - }""", - "share_file_selection_drop_here_label": """ - QLabel { - color: #666666; - }""", - "share_file_selection_drop_count_label": """ - QLabel { - color: #ffffff; - background-color: #f44449; - font-weight: bold; - padding: 5px 10px; - border-radius: 10px; - }""", - "share_file_list_drag_enter": """ - FileList { - border: 3px solid #538ad0; - } - """, - "share_file_list_drag_leave": """ - FileList { - border: none; - } - """, - "share_file_list_item_size": """ - QLabel { - color: #666666; - font-size: 11px; - }""", - # Receive mode and child widget styles - "receive_file": """ - QWidget { - background-color: #ffffff; - } - """, - "receive_file_size": """ - QLabel { - color: #666666; - font-size: 11px; - }""", - "receive_message_button": """ - QPushButton { - padding: 5px 10px; - }""", - # Tor Settings dialogs - "tor_settings_error": """ - QLabel { - color: """ - + settings_error_color - + """; - } - """, - } - - def get_tor_paths(self): - if self.common.platform == "Linux": - base_path = self.get_resource_path("tor") - if base_path and os.path.isdir(base_path): - self.common.log( - "GuiCommon", "get_tor_paths", "using paths in resources" - ) - tor_path = os.path.join(base_path, "tor") - tor_geo_ip_file_path = os.path.join(base_path, "geoip") - tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") - obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") - snowflake_file_path = os.path.join(base_path, "snowflake-client") - meek_client_file_path = os.path.join(base_path, "meek-client") - else: - # Fallback to looking in the path - self.common.log("GuiCommon", "get_tor_paths", "using paths from PATH") - tor_path = shutil.which("tor") - obfs4proxy_file_path = shutil.which("obfs4proxy") - snowflake_file_path = shutil.which("snowflake-client") - meek_client_file_path = shutil.which("meek-client") - prefix = os.path.dirname(os.path.dirname(tor_path)) - tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") - tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") - - if self.common.platform == "Windows": - base_path = self.get_resource_path("tor") - tor_path = os.path.join(base_path, "Tor", "tor.exe") - obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe") - snowflake_file_path = os.path.join(base_path, "Tor", "snowflake-client.exe") - meek_client_file_path = os.path.join(base_path, "Tor", "meek-client.exe") - tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip") - tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6") - elif self.common.platform == "Darwin": - base_path = self.get_resource_path("tor") - tor_path = os.path.join(base_path, "tor") - obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") - snowflake_file_path = os.path.join(base_path, "snowflake-client") - meek_client_file_path = os.path.join(base_path, "meek-client") - tor_geo_ip_file_path = os.path.join(base_path, "geoip") - tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") - elif self.common.platform == "BSD": - tor_path = "/usr/local/bin/tor" - tor_geo_ip_file_path = "/usr/local/share/tor/geoip" - tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6" - obfs4proxy_file_path = "/usr/local/bin/obfs4proxy" - meek_client_file_path = "/usr/local/bin/meek-client" - snowflake_file_path = "/usr/local/bin/snowflake-client" - - return ( - tor_path, - tor_geo_ip_file_path, - tor_geo_ipv6_file_path, - obfs4proxy_file_path, - snowflake_file_path, - meek_client_file_path, - ) - - @staticmethod - def get_resource_path(filename): - """ - Returns the absolute path of a resource - """ - try: - return resource_filename("onionshare", os.path.join("resources", filename)) - except KeyError: - return None - - @staticmethod - def get_translated_tor_error(e): - """ - Takes an exception defined in onion.py and returns a translated error message - """ - if type(e) is TorErrorInvalidSetting: - return strings._("settings_error_unknown") - elif type(e) is TorErrorAutomatic: - return strings._("settings_error_automatic") - elif type(e) is TorErrorSocketPort: - return strings._("settings_error_socket_port").format(e.args[0], e.args[1]) - elif type(e) is TorErrorSocketFile: - return strings._("settings_error_socket_file").format(e.args[0]) - elif type(e) is TorErrorMissingPassword: - return strings._("settings_error_missing_password") - elif type(e) is TorErrorUnreadableCookieFile: - return strings._("settings_error_unreadable_cookie_file") - elif type(e) is TorErrorAuthError: - return strings._("settings_error_auth").format(e.args[0], e.args[1]) - elif type(e) is TorErrorProtocolError: - return strings._("error_tor_protocol_error").format(e.args[0]) - elif type(e) is BundledTorTimeout: - return strings._("settings_error_bundled_tor_timeout") - elif type(e) is BundledTorBroken: - return strings._("settings_error_bundled_tor_broken").format(e.args[0]) - elif type(e) is TorTooOldEphemeral: - return strings._("error_ephemeral_not_supported") - elif type(e) is TorTooOldStealth: - return strings._("error_stealth_not_supported") - elif type(e) is PortNotAvailable: - return strings._("error_port_not_available") - return None diff --git a/desktop/src/onionshare/main_window.py b/desktop/src/onionshare/main_window.py deleted file mode 100644 index 546592a1..00000000 --- a/desktop/src/onionshare/main_window.py +++ /dev/null @@ -1,356 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os -import time -from PySide2 import QtCore, QtWidgets, QtGui - -from . import strings -from .tor_connection import TorConnectionDialog -from .widgets import Alert -from .update_checker import UpdateThread -from .tab_widget import TabWidget -from .gui_common import GuiCommon -from .threads import OnionCleanupThread - - -class MainWindow(QtWidgets.QMainWindow): - """ - MainWindow is the OnionShare main window, which contains the GUI elements, including all open tabs - """ - - def __init__(self, common, filenames): - super(MainWindow, self).__init__() - - self.common = common - self.common.log("MainWindow", "__init__") - - # Initialize the window - self.setMinimumWidth(1040) - self.setMinimumHeight(700) - self.setWindowTitle("OnionShare") - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - - # System tray - menu = QtWidgets.QMenu() - self.settings_action = menu.addAction(strings._("gui_settings_window_title")) - self.settings_action.triggered.connect(self.open_settings) - self.help_action = menu.addAction(strings._("gui_settings_button_help")) - self.help_action.triggered.connect(lambda: SettingsDialog.help_clicked(self)) - exit_action = menu.addAction(strings._("systray_menu_exit")) - exit_action.triggered.connect(self.close) - - self.system_tray = QtWidgets.QSystemTrayIcon(self) - - # The convention is Mac systray icons are always grayscale - if self.common.platform == "Darwin": - self.system_tray.setIcon( - QtGui.QIcon(GuiCommon.get_resource_path("images/logo_grayscale.png")) - ) - else: - self.system_tray.setIcon( - QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")) - ) - self.system_tray.setContextMenu(menu) - self.system_tray.show() - - # Status bar - self.status_bar = QtWidgets.QStatusBar() - self.status_bar.setSizeGripEnabled(False) - self.status_bar.setStyleSheet(self.common.gui.css["status_bar"]) - self.setStatusBar(self.status_bar) - - # Server status indicator icons - self.status_bar.server_status_image_stopped = QtGui.QImage( - GuiCommon.get_resource_path("images/server_stopped.png") - ) - self.status_bar.server_status_image_working = QtGui.QImage( - GuiCommon.get_resource_path("images/server_working.png") - ) - self.status_bar.server_status_image_started = QtGui.QImage( - GuiCommon.get_resource_path("images/server_started.png") - ) - - # Server status indicator on the status bar - self.status_bar.server_status_image_label = QtWidgets.QLabel() - self.status_bar.server_status_image_label.setFixedWidth(20) - self.status_bar.server_status_label = QtWidgets.QLabel("") - self.status_bar.server_status_label.setStyleSheet( - self.common.gui.css["server_status_indicator_label"] - ) - server_status_indicator_layout = QtWidgets.QHBoxLayout() - server_status_indicator_layout.addWidget( - self.status_bar.server_status_image_label - ) - server_status_indicator_layout.addWidget(self.status_bar.server_status_label) - self.status_bar.server_status_indicator = QtWidgets.QWidget() - self.status_bar.server_status_indicator.setLayout( - server_status_indicator_layout - ) - self.status_bar.addPermanentWidget(self.status_bar.server_status_indicator) - - # Tor settings button - self.tor_settings_button = QtWidgets.QPushButton() - self.tor_settings_button.setDefault(False) - self.tor_settings_button.setFixedSize(40, 50) - self.tor_settings_button.setIcon( - QtGui.QIcon( - GuiCommon.get_resource_path( - "images/{}_tor_settings.png".format(self.common.gui.color_mode) - ) - ) - ) - self.tor_settings_button.clicked.connect(self.open_tor_settings) - self.tor_settings_button.setStyleSheet(self.common.gui.css["settings_button"]) - self.status_bar.addPermanentWidget(self.tor_settings_button) - - if os.environ.get("ONIONSHARE_HIDE_TOR_SETTINGS") == "1": - self.tor_settings_button.hide() - - # Settings button - self.settings_button = QtWidgets.QPushButton() - self.settings_button.setDefault(False) - self.settings_button.setFixedSize(40, 50) - self.settings_button.setIcon( - QtGui.QIcon( - GuiCommon.get_resource_path( - "images/{}_settings.png".format(self.common.gui.color_mode) - ) - ) - ) - self.settings_button.clicked.connect(self.open_settings) - self.settings_button.setStyleSheet(self.common.gui.css["settings_button"]) - self.status_bar.addPermanentWidget(self.settings_button) - - # Tabs - self.tabs = TabWidget(self.common, self.system_tray, self.status_bar) - self.tabs.bring_to_front.connect(self.bring_to_front) - - # If we have saved persistent tabs, try opening those - if len(self.common.settings.get("persistent_tabs")) > 0: - for mode_settings_id in self.common.settings.get("persistent_tabs"): - self.tabs.load_tab(mode_settings_id) - else: - # Start with opening the first tab - self.tabs.new_tab_clicked() - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.tabs) - - central_widget = QtWidgets.QWidget() - central_widget.setLayout(layout) - self.setCentralWidget(central_widget) - self.show() - - # Start the "Connecting to Tor" dialog, which calls onion.connect() - tor_con = TorConnectionDialog(self.common) - tor_con.canceled.connect(self.tor_connection_canceled) - tor_con.open_tor_settings.connect(self.tor_connection_open_tor_settings) - if not self.common.gui.local_only: - tor_con.start() - self.settings_have_changed() - - # After connecting to Tor, check for updates - self.check_for_updates() - - # Create the close warning dialog -- the dialog widget needs to be in the constructor - # in order to test it - self.close_dialog = QtWidgets.QMessageBox() - self.close_dialog.setWindowTitle(strings._("gui_quit_warning_title")) - self.close_dialog.setText(strings._("gui_quit_warning_description")) - self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) - self.close_dialog.accept_button = self.close_dialog.addButton( - strings._("gui_quit_warning_quit"), QtWidgets.QMessageBox.AcceptRole - ) - self.close_dialog.reject_button = self.close_dialog.addButton( - strings._("gui_quit_warning_cancel"), QtWidgets.QMessageBox.NoRole - ) - self.close_dialog.setDefaultButton(self.close_dialog.reject_button) - - def tor_connection_canceled(self): - """ - If the user cancels before Tor finishes connecting, ask if they want to - quit, or open settings. - """ - self.common.log("MainWindow", "tor_connection_canceled") - - def ask(): - a = Alert( - self.common, - strings._("gui_tor_connection_ask"), - QtWidgets.QMessageBox.Question, - buttons=QtWidgets.QMessageBox.NoButton, - autostart=False, - ) - settings_button = QtWidgets.QPushButton( - strings._("gui_tor_connection_ask_open_settings") - ) - quit_button = QtWidgets.QPushButton( - strings._("gui_tor_connection_ask_quit") - ) - a.addButton(settings_button, QtWidgets.QMessageBox.AcceptRole) - a.addButton(quit_button, QtWidgets.QMessageBox.RejectRole) - a.setDefaultButton(settings_button) - a.exec_() - - if a.clickedButton() == settings_button: - # Open settings - self.common.log( - "OnionShareGui", - "_tor_connection_canceled", - "Settings button clicked", - ) - self.open_tor_settings() - - if a.clickedButton() == quit_button: - # Quit - self.common.log( - "OnionShareGui", "_tor_connection_canceled", "Quit button clicked" - ) - - # Wait 1ms for the event loop to finish, then quit - QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) - - # Wait 100ms before asking - QtCore.QTimer.singleShot(100, ask) - - def tor_connection_open_tor_settings(self): - """ - The TorConnectionDialog wants to open the Tor Settings dialog - """ - self.common.log("MainWindow", "tor_connection_open_tor_settings") - - # Wait 1ms for the event loop to finish closing the TorConnectionDialog - QtCore.QTimer.singleShot(1, self.open_tor_settings) - - def open_tor_settings(self): - """ - Open the TorSettingsTab - """ - self.common.log("MainWindow", "open_tor_settings") - self.tabs.open_tor_settings_tab() - - def open_settings(self): - """ - Open the SettingsTab - """ - self.common.log("MainWindow", "open_settings") - self.tabs.open_settings_tab() - - def settings_have_changed(self): - self.common.log("OnionShareGui", "settings_have_changed") - - if self.common.gui.onion.is_authenticated(): - self.status_bar.clearMessage() - - # Tell each tab that settings have changed - for index in range(self.tabs.count()): - tab = self.tabs.widget(index) - tab.settings_have_changed() - - def check_for_updates(self): - """ - Check for updates in a new thread, if enabled. - """ - if self.common.platform == "Windows" or self.common.platform == "Darwin": - if self.common.settings.get("use_autoupdate"): - - def update_available(update_url, installed_version, latest_version): - Alert( - self.common, - strings._("update_available").format( - update_url, installed_version, latest_version - ), - ) - - self.update_thread = UpdateThread(self.common, self.common.gui.onion) - self.update_thread.update_available.connect(update_available) - self.update_thread.start() - - def bring_to_front(self): - self.common.log("MainWindow", "bring_to_front") - self.raise_() - self.activateWindow() - - def closeEvent(self, e): - self.common.log("MainWindow", "closeEvent") - - if self.tabs.are_tabs_active(): - # Open the warning dialog - self.common.log("MainWindow", "closeEvent, opening warning dialog") - self.close_dialog.exec_() - - # Close - if self.close_dialog.clickedButton() == self.close_dialog.accept_button: - self.system_tray.hide() - e.accept() - # Cancel - else: - e.ignore() - return - - self.system_tray.hide() - e.accept() - - def event(self, event): - # Check if color mode switched while onionshare was open, if so, ask user to restart - if event.type() == QtCore.QEvent.Type.ApplicationPaletteChange: - QtCore.QTimer.singleShot(1, self.color_mode_warning) - return True - return QtWidgets.QMainWindow.event(self, event) - - def color_mode_warning(self): - """ - Open the color mode warning alert. - """ - notice = strings._("gui_color_mode_changed_notice") - Alert(self.common, notice, QtWidgets.QMessageBox.Information) - - def cleanup(self): - self.common.log("MainWindow", "cleanup") - self.tabs.cleanup() - - alert = Alert( - self.common, - strings._("gui_rendezvous_cleanup"), - QtWidgets.QMessageBox.Information, - buttons=QtWidgets.QMessageBox.NoButton, - autostart=False, - ) - quit_early_button = QtWidgets.QPushButton( - strings._("gui_rendezvous_cleanup_quit_early") - ) - alert.addButton(quit_early_button, QtWidgets.QMessageBox.RejectRole) - - self.onion_cleanup_thread = OnionCleanupThread(self.common) - self.onion_cleanup_thread.finished.connect(alert.accept) - self.onion_cleanup_thread.start() - - alert.exec_() - if alert.clickedButton() == quit_early_button: - self.common.log("MainWindow", "cleanup", "quitting early") - if self.onion_cleanup_thread.isRunning(): - self.onion_cleanup_thread.terminate() - self.onion_cleanup_thread.wait() - self.common.gui.onion.cleanup(wait=False) - - # Wait 1 second for threads to close gracefully, so tests finally pass - time.sleep(1) diff --git a/desktop/src/onionshare/moat_dialog.py b/desktop/src/onionshare/moat_dialog.py deleted file mode 100644 index 84a52390..00000000 --- a/desktop/src/onionshare/moat_dialog.py +++ /dev/null @@ -1,372 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui -import requests -import os -import base64 -import json - -from . import strings -from .gui_common import GuiCommon -from onionshare_cli.meek import MeekNotFound, MeekNotRunning - - -class MoatDialog(QtWidgets.QDialog): - """ - Moat dialog: Request a bridge from torproject.org - """ - - got_bridges = QtCore.Signal(str) - - def __init__(self, common, meek): - super(MoatDialog, self).__init__() - - self.common = common - - self.common.log("MoatDialog", "__init__") - - self.meek = meek - - self.setModal(True) - self.setWindowTitle(strings._("gui_settings_bridge_moat_button")) - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - - # Label - self.label = QtWidgets.QLabel() - - # CAPTCHA image - self.captcha = QtWidgets.QLabel() - self.captcha.setFixedSize(400, 125) # this is the size of the CAPTCHA image - - # Solution input - self.solution_lineedit = QtWidgets.QLineEdit() - self.solution_lineedit.setPlaceholderText(strings._("moat_captcha_placeholder")) - self.solution_lineedit.editingFinished.connect( - self.solution_lineedit_editing_finished - ) - self.submit_button = QtWidgets.QPushButton(strings._("moat_captcha_submit")) - self.submit_button.clicked.connect(self.submit_clicked) - solution_layout = QtWidgets.QHBoxLayout() - solution_layout.addWidget(self.solution_lineedit) - solution_layout.addWidget(self.submit_button) - - # Error label - self.error_label = QtWidgets.QLabel() - self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) - self.error_label.hide() - - # Buttons - self.reload_button = QtWidgets.QPushButton(strings._("moat_captcha_reload")) - self.reload_button.clicked.connect(self.reload_clicked) - self.cancel_button = QtWidgets.QPushButton( - strings._("gui_settings_button_cancel") - ) - self.cancel_button.clicked.connect(self.cancel_clicked) - buttons_layout = QtWidgets.QHBoxLayout() - buttons_layout.addStretch() - buttons_layout.addWidget(self.reload_button) - buttons_layout.addWidget(self.cancel_button) - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.label) - layout.addWidget(self.captcha) - layout.addLayout(solution_layout) - layout.addStretch() - layout.addWidget(self.error_label) - layout.addLayout(buttons_layout) - - self.setLayout(layout) - self.cancel_button.setFocus() - - self.reload_clicked() - - def reload_clicked(self): - """ - Reload button clicked. - """ - self.common.log("MoatDialog", "reload_clicked") - - self.label.setText(strings._("moat_contact_label")) - self.error_label.hide() - - self.captcha.hide() - self.solution_lineedit.hide() - self.reload_button.hide() - self.submit_button.hide() - - # BridgeDB fetch - self.t_fetch = MoatThread(self.common, self.meek, "fetch") - self.t_fetch.bridgedb_error.connect(self.bridgedb_error) - self.t_fetch.captcha_ready.connect(self.captcha_ready) - self.t_fetch.start() - - def submit_clicked(self): - """ - Submit button clicked. - """ - self.error_label.hide() - self.solution_lineedit.setEnabled(False) - - solution = self.solution_lineedit.text().strip() - if len(solution) == 0: - self.common.log("MoatDialog", "submit_clicked", "solution is blank") - self.error_label.setText(strings._("moat_solution_empty_error")) - self.error_label.show() - return - - # BridgeDB check - self.t_check = MoatThread( - self.common, - self.meek, - "check", - { - "transport": self.transport, - "challenge": self.challenge, - "solution": self.solution_lineedit.text(), - }, - ) - self.t_check.bridgedb_error.connect(self.bridgedb_error) - self.t_check.captcha_error.connect(self.captcha_error) - self.t_check.bridges_ready.connect(self.bridges_ready) - self.t_check.start() - - def cancel_clicked(self): - """ - Cancel button clicked. - """ - self.common.log("MoatDialog", "cancel_clicked") - self.close() - - def bridgedb_error(self): - self.common.log("MoatDialog", "bridgedb_error") - self.error_label.setText(strings._("moat_bridgedb_error")) - self.error_label.show() - - self.solution_lineedit.setEnabled(True) - - def captcha_error(self, msg): - self.common.log("MoatDialog", "captcha_error") - if msg == "": - self.error_label.setText(strings._("moat_captcha_error")) - else: - self.error_label.setText(msg) - self.error_label.show() - - self.solution_lineedit.setEnabled(True) - - def captcha_ready(self, transport, image, challenge): - self.common.log("MoatDialog", "captcha_ready") - - self.transport = transport - self.challenge = challenge - - # Save captcha image to disk, so we can load it - captcha_data = base64.b64decode(image) - captcha_filename = os.path.join(self.common.build_tmp_dir(), "captcha.jpg") - with open(captcha_filename, "wb") as f: - f.write(captcha_data) - - self.captcha.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(captcha_filename))) - os.remove(captcha_filename) - - self.label.setText(strings._("moat_captcha_label")) - self.captcha.show() - self.solution_lineedit.setEnabled(True) - self.solution_lineedit.setText("") - self.solution_lineedit.show() - self.solution_lineedit.setFocus() - self.reload_button.show() - self.submit_button.show() - - def solution_lineedit_editing_finished(self): - self.common.log("MoatDialog", "solution_lineedit_editing_finished") - - def bridges_ready(self, bridges): - self.common.log("MoatDialog", "bridges_ready", bridges) - self.got_bridges.emit(bridges) - self.close() - - -class MoatThread(QtCore.QThread): - """ - This does all of the communicating with BridgeDB in a separate thread. - - Valid actions are: - - "fetch": requests a new CAPTCHA - - "check": sends a CAPTCHA solution - - """ - - bridgedb_error = QtCore.Signal() - captcha_error = QtCore.Signal(str) - captcha_ready = QtCore.Signal(str, str, str) - bridges_ready = QtCore.Signal(str) - - def __init__(self, common, meek, action, data={}): - super(MoatThread, self).__init__() - self.common = common - self.common.log("MoatThread", "__init__", f"action={action}") - - self.meek = meek - self.transport = "obfs4" - self.action = action - self.data = data - - def run(self): - - # Start Meek so that we can do domain fronting - try: - self.meek.start() - except MeekNotFound: - self.common.log("MoatThread", "run", f"Could not find meek-client") - self.bridgedb_error.emit() - return - except MeekNotRunning: - self.common.log( - "MoatThread", "run", f"Ran meek-client, but there was an error" - ) - self.bridgedb_error.emit() - return - - # We should only fetch bridges if we can domain front, - # but we can override this in local-only mode. - if not self.meek.meek_proxies and not self.common.gui.local_only: - self.common.log( - "MoatThread", "run", f"Could not identify meek proxies to make request" - ) - self.bridgedb_error.emit() - return - - if self.action == "fetch": - self.common.log("MoatThread", "run", f"starting fetch") - - # Request a bridge - r = requests.post( - "https://bridges.torproject.org/moat/fetch", - headers={"Content-Type": "application/vnd.api+json"}, - proxies=self.meek.meek_proxies, - json={ - "data": [ - { - "version": "0.1.0", - "type": "client-transports", - "supported": ["obfs4", "snowflake"], - } - ] - }, - ) - - self.meek.cleanup() - - if r.status_code != 200: - self.common.log("MoatThread", "run", f"status_code={r.status_code}") - self.bridgedb_error.emit() - return - - try: - moat_res = r.json() - if "errors" in moat_res: - self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") - self.bridgedb_error.emit() - return - if "data" not in moat_res: - self.common.log("MoatThread", "run", f"no data") - self.bridgedb_error.emit() - return - if moat_res["data"][0]["type"] != "moat-challenge": - self.common.log("MoatThread", "run", f"type != moat-challange") - self.bridgedb_error.emit() - return - - transport = moat_res["data"][0]["transport"] - image = moat_res["data"][0]["image"] - challenge = moat_res["data"][0]["challenge"] - - self.captcha_ready.emit(transport, image, challenge) - except Exception as e: - self.common.log("MoatThread", "run", f"hit exception: {e}") - self.bridgedb_error.emit() - return - - elif self.action == "check": - self.common.log("MoatThread", "run", f"starting check") - - # Check the CAPTCHA - r = requests.post( - "https://bridges.torproject.org/moat/check", - headers={"Content-Type": "application/vnd.api+json"}, - proxies=self.meek.meek_proxies, - json={ - "data": [ - { - "id": "2", - "type": "moat-solution", - "version": "0.1.0", - "transport": self.data["transport"], - "challenge": self.data["challenge"], - "solution": self.data["solution"], - "qrcode": "false", - } - ] - }, - ) - - self.meek.cleanup() - - if r.status_code != 200: - self.common.log("MoatThread", "run", f"status_code={r.status_code}") - self.bridgedb_error.emit() - return - - try: - moat_res = r.json() - self.common.log( - "MoatThread", - "run", - f"got bridges:\n{json.dumps(moat_res,indent=2)}", - ) - - if "errors" in moat_res: - self.common.log("MoatThread", "run", f"errors={moat_res['errors']}") - if moat_res["errors"][0]["code"] == 419: - self.captcha_error.emit("") - return - else: - errors = " ".join([e["detail"] for e in moat_res["errors"]]) - self.captcha_error.emit(errors) - return - - if moat_res["data"][0]["type"] != "moat-bridges": - self.common.log("MoatThread", "run", f"type != moat-bridges") - self.bridgedb_error.emit() - return - - bridges = moat_res["data"][0]["bridges"] - self.bridges_ready.emit("\n".join(bridges)) - - except Exception as e: - self.common.log("MoatThread", "run", f"hit exception: {e}") - self.bridgedb_error.emit() - return - - else: - self.common.log("MoatThread", "run", f"invalid action: {self.action}") diff --git a/desktop/src/onionshare/resources/__init__.py b/desktop/src/onionshare/resources/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/desktop/src/onionshare/resources/images/close_tab.png b/desktop/src/onionshare/resources/images/close_tab.png deleted file mode 100644 index a7984a6d..00000000 Binary files a/desktop/src/onionshare/resources/images/close_tab.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_icon-add.png b/desktop/src/onionshare/resources/images/dark_icon-add.png deleted file mode 100644 index 5b8600c9..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_icon-add.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_icon-close.png b/desktop/src/onionshare/resources/images/dark_icon-close.png deleted file mode 100644 index b9efb45d..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_icon-close.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_logo_text.png b/desktop/src/onionshare/resources/images/dark_logo_text.png deleted file mode 100644 index 6568ee0d..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_logo_text.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_chat.png b/desktop/src/onionshare/resources/images/dark_mode_chat.png deleted file mode 100644 index fe58d384..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_chat.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_new_tab_chat.png b/desktop/src/onionshare/resources/images/dark_mode_new_tab_chat.png deleted file mode 100644 index e496a63a..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_new_tab_chat.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_new_tab_receive.png b/desktop/src/onionshare/resources/images/dark_mode_new_tab_receive.png deleted file mode 100644 index 6912ff24..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_new_tab_receive.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_new_tab_share.png b/desktop/src/onionshare/resources/images/dark_mode_new_tab_share.png deleted file mode 100644 index 3d8ae81f..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_new_tab_share.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_new_tab_website.png b/desktop/src/onionshare/resources/images/dark_mode_new_tab_website.png deleted file mode 100644 index 5eef2a2e..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_new_tab_website.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_receive.png b/desktop/src/onionshare/resources/images/dark_mode_receive.png deleted file mode 100644 index 60795631..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_receive.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_share.png b/desktop/src/onionshare/resources/images/dark_mode_share.png deleted file mode 100644 index b6ea7202..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_share.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_mode_website.png b/desktop/src/onionshare/resources/images/dark_mode_website.png deleted file mode 100644 index 52bae58c..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_mode_website.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_settings.png b/desktop/src/onionshare/resources/images/dark_settings.png deleted file mode 100644 index 8bb96f8a..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_settings.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/dark_tor_settings.png b/desktop/src/onionshare/resources/images/dark_tor_settings.png deleted file mode 100644 index 0b44bd95..00000000 Binary files a/desktop/src/onionshare/resources/images/dark_tor_settings.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/file_delete.png b/desktop/src/onionshare/resources/images/file_delete.png deleted file mode 100644 index b9057df5..00000000 Binary files a/desktop/src/onionshare/resources/images/file_delete.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_completed.png b/desktop/src/onionshare/resources/images/history_completed.png deleted file mode 100644 index e68fe5a2..00000000 Binary files a/desktop/src/onionshare/resources/images/history_completed.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_completed_none.png b/desktop/src/onionshare/resources/images/history_completed_none.png deleted file mode 100644 index 8dbd6939..00000000 Binary files a/desktop/src/onionshare/resources/images/history_completed_none.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_in_progress.png b/desktop/src/onionshare/resources/images/history_in_progress.png deleted file mode 100644 index 19694659..00000000 Binary files a/desktop/src/onionshare/resources/images/history_in_progress.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_in_progress_none.png b/desktop/src/onionshare/resources/images/history_in_progress_none.png deleted file mode 100644 index 2d61dba4..00000000 Binary files a/desktop/src/onionshare/resources/images/history_in_progress_none.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_requests.png b/desktop/src/onionshare/resources/images/history_requests.png deleted file mode 100644 index 4965744d..00000000 Binary files a/desktop/src/onionshare/resources/images/history_requests.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/history_requests_none.png b/desktop/src/onionshare/resources/images/history_requests_none.png deleted file mode 100644 index 93a71ef3..00000000 Binary files a/desktop/src/onionshare/resources/images/history_requests_none.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/info.png b/desktop/src/onionshare/resources/images/info.png deleted file mode 100644 index 4be4e65e..00000000 Binary files a/desktop/src/onionshare/resources/images/info.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_logo_text.png b/desktop/src/onionshare/resources/images/light_logo_text.png deleted file mode 100644 index 4b05d0b2..00000000 Binary files a/desktop/src/onionshare/resources/images/light_logo_text.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_chat.png b/desktop/src/onionshare/resources/images/light_mode_chat.png deleted file mode 100644 index cd3a4432..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_chat.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_new_tab_chat.png b/desktop/src/onionshare/resources/images/light_mode_new_tab_chat.png deleted file mode 100644 index ec1e29cb..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_new_tab_chat.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_new_tab_receive.png b/desktop/src/onionshare/resources/images/light_mode_new_tab_receive.png deleted file mode 100644 index 722fe3df..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_new_tab_receive.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_new_tab_share.png b/desktop/src/onionshare/resources/images/light_mode_new_tab_share.png deleted file mode 100644 index 17569fc2..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_new_tab_share.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_new_tab_website.png b/desktop/src/onionshare/resources/images/light_mode_new_tab_website.png deleted file mode 100644 index e88f344e..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_new_tab_website.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_receive.png b/desktop/src/onionshare/resources/images/light_mode_receive.png deleted file mode 100644 index 277ec487..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_receive.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_share.png b/desktop/src/onionshare/resources/images/light_mode_share.png deleted file mode 100644 index 2339f69f..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_share.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_mode_website.png b/desktop/src/onionshare/resources/images/light_mode_website.png deleted file mode 100644 index 56e492a3..00000000 Binary files a/desktop/src/onionshare/resources/images/light_mode_website.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_settings.png b/desktop/src/onionshare/resources/images/light_settings.png deleted file mode 100644 index b6f8fa55..00000000 Binary files a/desktop/src/onionshare/resources/images/light_settings.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/light_tor_settings.png b/desktop/src/onionshare/resources/images/light_tor_settings.png deleted file mode 100644 index e8db08eb..00000000 Binary files a/desktop/src/onionshare/resources/images/light_tor_settings.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/logo.png b/desktop/src/onionshare/resources/images/logo.png deleted file mode 100644 index 43884c1f..00000000 Binary files a/desktop/src/onionshare/resources/images/logo.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/logo_grayscale.png b/desktop/src/onionshare/resources/images/logo_grayscale.png deleted file mode 100644 index 950d9ff6..00000000 Binary files a/desktop/src/onionshare/resources/images/logo_grayscale.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/logo_transparent.png b/desktop/src/onionshare/resources/images/logo_transparent.png deleted file mode 100644 index 1e8ed196..00000000 Binary files a/desktop/src/onionshare/resources/images/logo_transparent.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/mode_chat.svg b/desktop/src/onionshare/resources/images/mode_chat.svg deleted file mode 100644 index 335e9cf4..00000000 --- a/desktop/src/onionshare/resources/images/mode_chat.svg +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/desktop/src/onionshare/resources/images/mode_receive.svg b/desktop/src/onionshare/resources/images/mode_receive.svg deleted file mode 100644 index 5a0a29fd..00000000 --- a/desktop/src/onionshare/resources/images/mode_receive.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/desktop/src/onionshare/resources/images/mode_share.svg b/desktop/src/onionshare/resources/images/mode_share.svg deleted file mode 100644 index 9fb97c65..00000000 --- a/desktop/src/onionshare/resources/images/mode_share.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/desktop/src/onionshare/resources/images/mode_website.svg b/desktop/src/onionshare/resources/images/mode_website.svg deleted file mode 100644 index 1a80846f..00000000 --- a/desktop/src/onionshare/resources/images/mode_website.svg +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/desktop/src/onionshare/resources/images/open_folder.png b/desktop/src/onionshare/resources/images/open_folder.png deleted file mode 100644 index 0a734c41..00000000 Binary files a/desktop/src/onionshare/resources/images/open_folder.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/open_message.png b/desktop/src/onionshare/resources/images/open_message.png deleted file mode 100644 index 6712ecf9..00000000 Binary files a/desktop/src/onionshare/resources/images/open_message.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/persistent_enabled.png b/desktop/src/onionshare/resources/images/persistent_enabled.png deleted file mode 100644 index 6c295db5..00000000 Binary files a/desktop/src/onionshare/resources/images/persistent_enabled.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/receive_icon_toggle.png b/desktop/src/onionshare/resources/images/receive_icon_toggle.png deleted file mode 100644 index 846ececb..00000000 Binary files a/desktop/src/onionshare/resources/images/receive_icon_toggle.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png b/desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png deleted file mode 100644 index 127ce208..00000000 Binary files a/desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/receive_icon_transparent.png b/desktop/src/onionshare/resources/images/receive_icon_transparent.png deleted file mode 100644 index 99207097..00000000 Binary files a/desktop/src/onionshare/resources/images/receive_icon_transparent.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/server_started.png b/desktop/src/onionshare/resources/images/server_started.png deleted file mode 100644 index 9c0c3176..00000000 Binary files a/desktop/src/onionshare/resources/images/server_started.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/server_stopped.png b/desktop/src/onionshare/resources/images/server_stopped.png deleted file mode 100644 index 5c5b2ec0..00000000 Binary files a/desktop/src/onionshare/resources/images/server_stopped.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/server_working.png b/desktop/src/onionshare/resources/images/server_working.png deleted file mode 100644 index e5c8b318..00000000 Binary files a/desktop/src/onionshare/resources/images/server_working.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/share_icon_toggle.png b/desktop/src/onionshare/resources/images/share_icon_toggle.png deleted file mode 100644 index 87303c9f..00000000 Binary files a/desktop/src/onionshare/resources/images/share_icon_toggle.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/share_icon_toggle_selected.png b/desktop/src/onionshare/resources/images/share_icon_toggle_selected.png deleted file mode 100644 index 0ba52cff..00000000 Binary files a/desktop/src/onionshare/resources/images/share_icon_toggle_selected.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/images/share_icon_transparent.png b/desktop/src/onionshare/resources/images/share_icon_transparent.png deleted file mode 100644 index 3648c3fb..00000000 Binary files a/desktop/src/onionshare/resources/images/share_icon_transparent.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/locale/af.json b/desktop/src/onionshare/resources/locale/af.json deleted file mode 100644 index 6a7219bd..00000000 --- a/desktop/src/onionshare/resources/locale/af.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "preparing_files": "Pers lêers saam.", - "not_a_readable_file": "{0:s} is nie ’n leesbare lêer nie.", - "no_available_port": "Kon geen beskikbare poort vind om die uidiens te begin nie", - "other_page_loaded": "Adres gelaai", - "incorrect_password": "Verkeerde wagwoord", - "close_on_autostop_timer": "Gestop omdat outo-stoptydhouer afgeloop het", - "closing_automatically": "Gestop omdat die oordrag klaar is", - "large_filesize": "Waarskuwing: die stuur van ’n groot lêer kan ure duur", - "gui_drag_and_drop": "Sleep-en-los lêers en vouers\nom te begin deel", - "gui_add": "Voeg Toe", - "gui_add_files": "Voeg Lêers Toe", - "gui_add_folder": "Voeg Vouer Toe", - "gui_delete": "Skrap", - "gui_choose_items": "Kies", - "gui_share_start_server": "Begin deel", - "gui_share_stop_server": "Staak deel", - "gui_share_stop_server_autostop_timer": "Staak Deel ({})", - "gui_stop_server_autostop_timer_tooltip": "Outo-stoptydhouer eindig om {}", - "gui_start_server_autostart_timer_tooltip": "Outo-begintydhouer eindig om {}", - "gui_receive_start_server": "Begin Ontvangmodus", - "gui_receive_stop_server": "Staak Ontvangmodus", - "gui_receive_stop_server_autostop_timer": "Staak Ontvangmodus ({} oorblywend)", - "gui_copy_url": "Kopieer Adres", - "gui_canceled": "Gekanselleer", - "gui_copied_url_title": "OnionShare-adres Gekopieer", - "gui_copied_url": "OnionShare-adres na knipbord gekopieer", - "gui_waiting_to_start": "Geskeduleer om oor {} te begin. Klik om te kanselleer.", - "gui_please_wait": "Begin… Klik om te kanselleer.", - "gui_quit_title": "Nie so haastig nie", - "gui_share_quit_warning": "U is besig om lêers te verstuur. Is u seker u wil OnionShare afsluit?", - "gui_receive_quit_warning": "U is besig om lêers te ontvang. Is u seker u wil OnionShare afsluit?", - "gui_quit_warning_quit": "Sluit Af", - "gui_quit_warning_dont_quit": "Kanselleer", - "zip_progress_bar_format": "Samepersing: %p%", - "error_stealth_not_supported": "U benodig ten minste Tor 0.2.6.1-alfa (of TorBrowser 6.5) en python3-stem 1.5.0 om kliënt-magtiging te gebruik.", - "error_ephemeral_not_supported": "OnionShare vereis ten minste Tor 0.2.7.1 en python3-stem 1.4.0.", - "gui_settings_window_title": "Instellings", - "gui_settings_whats_this": "Wat is dit?", - "gui_settings_stealth_option": "Gebruik kliëntmagtiging", - "gui_settings_autoupdate_label": "Soek na nuwe weergawe", - "gui_settings_autoupdate_option": "Laat my weet wanneer ’n nuwe weergawe beskikbaar is", - "gui_settings_autoupdate_timestamp": "Laas gesoek: {}", - "gui_settings_autoupdate_timestamp_never": "Nooit", - "gui_settings_autoupdate_check_button": "Soek na Nuwe Weergawe", - "gui_settings_general_label": "Algemene instellings", - "gui_settings_onion_label": "Ui-instellings", - "gui_settings_sharing_label": "Deelinstellings", - "gui_settings_close_after_first_download_option": "Staak deel nadat lêers verstuur is", - "gui_settings_csp_header_disabled_option": "Deaktiveer Inhoudsekuriteitsbeleidkop", - "gui_settings_individual_downloads_label": "Merk af om aflaai van individuele lêers toe te staan", - "gui_settings_connection_type_label": "Hoe moet OnionShare aan Tor koppel?", - "gui_settings_connection_type_bundled_option": "Gebruik die Tor-weergawe wat by OnionShare ingebou is", - "gui_settings_connection_type_automatic_option": "Probeer outo-opstelling met Tor Browser", - "gui_settings_connection_type_control_port_option": "Koppel d.m.v. kontrolepoort", - "gui_settings_connection_type_socket_file_option": "Koppel d.m.v. soklêer", - "gui_settings_connection_type_test_button": "Toets Tor-koppeling", - "gui_settings_control_port_label": "Kontrolepoort", - "gui_settings_socket_file_label": "Soklêer", - "gui_settings_socks_label": "SOCKS-poort", - "gui_settings_authenticate_label": "Tormagtiginginstellings", - "gui_settings_authenticate_no_auth_option": "Geen magtiging of koekiemagtiging", - "gui_settings_authenticate_password_option": "Wagwoord", - "gui_settings_password_label": "Wagwoord", - "gui_settings_tor_bridges": "Tor-brugondersteuning", - "gui_settings_tor_bridges_no_bridges_radio_option": "Moenie brûe gebruik nie", - "gui_settings_tor_bridges_obfs4_radio_option": "Gebruik ingeboude obfs4-inpropbare vervoere", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gebruik ingeboude obfs4-inpropbare vervoere (vereis obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere (vereis obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Waarskuwing: Die meek_lite-brûe is baie duur vir die Tor-projek om uit te voer.

Gebruik dit slegs indien u nie direk aan Tor, d.m.v. obfs4-vervoere, of ander normale brûe kan koppel nie.", - "gui_settings_tor_bridges_custom_radio_option": "Gebruik pasgemaakte brûe", - "gui_settings_tor_bridges_custom_label": "U kan brûe vanaf https://bridges.torproject.org verkry", - "gui_settings_tor_bridges_invalid": "Geen van u toegevoegde brûe werk nie.\nGaan dit na of voeg ander toe.", - "gui_settings_button_save": "Bewaar", - "gui_settings_button_cancel": "Kanselleer", - "gui_settings_button_help": "Help", - "gui_settings_autostop_timer_checkbox": "Gebruik outo-stoptydhouer", - "gui_settings_autostop_timer": "Staak die deel om:", - "gui_settings_autostart_timer_checkbox": "Gebruik outo-begintydhouer", - "gui_settings_autostart_timer": "Begin die deel om:", - "settings_error_unknown": "Kan nie aan Tor-kontroleur koppel nie omdat u instellings onsinnig is.", - "settings_error_automatic": "Kon nie aan die Tor-kontroleur koppel nie. Loop Tor Browser (beskikbaar by torproject.org) in die agtergrond?", - "settings_error_socket_port": "Kan nie aan die Tor-kontroleur by {}:{} koppel nie .", - "settings_error_socket_file": "Kan nie aan die Tor-kontroleur d.m.v. soklêer {} koppel nie.", - "settings_error_auth": "Gekoppel aan {}:{} maar kan nie magtig nie. Miskien is die nie ’n Tor-kontroleur nie?", - "settings_error_missing_password": "Gekoppel aan Tor-kontroleur, maar dit vereis ’n wagwoord om te magtig.", - "settings_error_unreadable_cookie_file": "Gekoppel aan die Tor-kontroleur, maar wagwoord is dalk verkeerd of u gebruiker mag nie die koekielêer lees nie.", - "settings_error_bundled_tor_not_supported": "Die Tor-weergawe wat met OnionShare verskeep word werk nie in ontwikkelaarsmodus op Windows of macOS nie.", - "settings_error_bundled_tor_timeout": "Vat te lank om aan Tor te koppel. Miskien is u nie aan die Internet gekoppel nie of u stelselhorlosie is onakkuraat?", - "settings_error_bundled_tor_broken": "OnionShare kon nie in die agtergrond aan Tor koppel nie:\n{}", - "settings_test_success": "Gekoppel aan die Tor-kontroleur:\n\nTor-weergawe: {}\nSteun efemere uidienste: {}.\nSteun kliëntmagtiging: {}.\nSteun nuwegenerasie-.onionadresse: {}.", - "error_tor_protocol_error": "Daar was ’n fout met Tor: {}", - "error_tor_protocol_error_unknown": "Daar was ’n onbekende fout met Tor", - "connecting_to_tor": "Koppel tans aan die Tor-netwerk", - "update_available": "Nuwe OnionShare is beskikbaar. Klik hier om dit te kry.

U gebruik {} en die nuutste is {}.", - "update_error_check_error": "Kon nie na nuwe weergawe soek nie: die OnionShare-webwerf sê dat die nuutste weergawe die onherkenbare ‘{}’ is…", - "update_error_invalid_latest_version": "Kon nie na die nuwe weergawe soek nie. U is dalk nie aan Tor gekoppel nie of die OnionShare-webwerf is vanlyn.", - "update_not_available": "U gebruik die nuutste OnionShare.", - "gui_tor_connection_ask": "Open die instellings om Tor-koppeling op te los?", - "gui_tor_connection_ask_open_settings": "Ja", - "gui_tor_connection_ask_quit": "Sluit Af", - "gui_tor_connection_error_settings": "Probeer in die instellings verander hoe OnionShare aan die Tor-netwerk koppel.", - "gui_tor_connection_canceled": "Kon nie aan Tor koppel nie.\n\nMaak seker u is aan die Internet gekoppel, open OnionShare dan weer en stel die Tor-koppeling weer op.", - "gui_tor_connection_lost": "Ontkoppel van Tor.", - "gui_server_started_after_autostop_timer": "Die outo-stoptydhouer het afgeloop voor die bediener kon begin. Skep ’n nuwe deel.", - "gui_server_autostop_timer_expired": "Die outo-stoptydhouer het reeds afgeloop. Pas dit aan om te begin deel.", - "gui_server_autostart_timer_expired": "Die geskeduleerde tyd is verstreke. Verstel dit om met deel te begin met.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die outo-stoptyd kan nie dieselfde of vroeër as die outo-begintyd wees nie. Pas dit aan om te begin deel.", - "share_via_onionshare": "Deel d.m.v. OnionShare", - "gui_connect_to_tor_for_onion_settings": "Koppel aan Tor om uidiensinstellings te sien", - "gui_save_private_key_checkbox": "Gebruik ’n blywende adres", - "gui_share_url_description": "Enigeen met hierdie OnionShare-adres kan u lêers d.m.v. die Tor Browser aflaai: ", - "gui_website_url_description": "Enigeen met hierdie OnionShare-adres kan u webwerf d.m.v. die Tor Browser besoek: ", - "gui_receive_url_description": "Enigeen met hierdie OnionShare-adres kan lêers d.m.v. die Tor Browser na u rekenaar oplaai: ", - "gui_url_label_persistent": "Hierdie deel sal nie self stop nie.

Elke opvolgende deel hergebruik die adres. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)", - "gui_url_label_stay_open": "Hierdie deel sal nie self stop nie.", - "gui_url_label_onetime": "Hierdie deel sal stop na eerste voltooiing.", - "gui_url_label_onetime_and_persistent": "Hierdie deel sal nie self stop nie.

Elke opvolgende deel sal die adres hergebruik. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)", - "gui_status_indicator_share_stopped": "Gereed om te deel", - "gui_status_indicator_share_working": "Begin…", - "gui_status_indicator_share_scheduled": "Geskeduleer…", - "gui_status_indicator_share_started": "Deel tans", - "gui_status_indicator_receive_stopped": "Gereed om te ontvang", - "gui_status_indicator_receive_working": "Begin…", - "gui_status_indicator_receive_scheduled": "Geskeduleer…", - "gui_status_indicator_receive_started": "Ontvang tans", - "gui_file_info": "{} lêers, {}", - "gui_file_info_single": "{} lêer, {}", - "history_in_progress_tooltip": "{} besig", - "history_completed_tooltip": "{} afgehandel", - "history_requests_tooltip": "{} webversoeke", - "error_cannot_create_data_dir": "Kon nie OnionShare-datavouer skep nie: {}", - "gui_receive_mode_warning": "Ontvangsmodus laat ander mense lêers op u rekenaar plaas.

Sommige van die lêers kan moontlik u rekenaar oorneem indien u dit open. Open slegs lêers van mense wat u vertrou of indien u weet wat u doen.", - "gui_mode_share_button": "Deel Lêers", - "gui_mode_receive_button": "Ontvang Lêers", - "gui_mode_website_button": "Publiseer Webwerf", - "gui_settings_receiving_label": "Ontvangsinstellings", - "gui_settings_website_label": "Webwerfinstellings", - "gui_settings_data_dir_label": "Bewaar lêers na", - "gui_settings_data_dir_browse_button": "Blaai", - "gui_settings_public_mode_checkbox": "Openbaarmodus", - "gui_open_folder_error_nautilus": "Kan nie vouer oopmaak nie want nautilus is onbeskikbaar. Die lêer is hier: {}", - "gui_settings_language_label": "Voorkeurtaal", - "gui_settings_language_changed_notice": "Herbegin OnionShare om die nuwe taal te gebruik.", - "systray_menu_exit": "Sluit Af", - "systray_page_loaded_title": "Bladsy Gelaai", - "systray_page_loaded_message": "OnionShare-adres gelaai", - "systray_share_started_title": "Deel het Begin", - "systray_share_started_message": "Begin lêers aan iemand stuur", - "systray_share_completed_title": "Deel is Afgehandel", - "systray_share_completed_message": "Lêers klaar gestuur", - "systray_share_canceled_title": "Deel is Gekanselleer", - "systray_share_canceled_message": "Iemand het ontvangs van u lêers gekanselleer", - "systray_receive_started_title": "Ontvang het Begin", - "systray_receive_started_message": "Iemand stuur lêers aan u", - "gui_all_modes_history": "Geskiedenis", - "gui_all_modes_clear_history": "Wis Alles", - "gui_all_modes_transfer_started": "Begin {}", - "gui_all_modes_transfer_finished_range": "Oorgedra {} - {}", - "gui_all_modes_transfer_finished": "Oorgedra {}", - "gui_all_modes_transfer_canceled_range": "Gekanselleer {} - {}", - "gui_all_modes_transfer_canceled": "Gekanselleer {}", - "gui_all_modes_progress_complete": "%p%, {0:s} verstreke.", - "gui_all_modes_progress_starting": "{0:s}, %p% (bereken tans)", - "gui_all_modes_progress_eta": "{0:s}, Verwagte Aankomstyd: {1:s}, %p%", - "gui_share_mode_no_files": "Nog Geen Lêers Gestuur Nie", - "gui_share_mode_autostop_timer_waiting": "Wag om klaar te stuur", - "gui_website_mode_no_files": "Nog Geen Webwerf Gedeel Nie", - "gui_receive_mode_no_files": "Nog Geen Lêers Ontvang Nie", - "gui_receive_mode_autostop_timer_waiting": "Wag om klaar te ontvang", - "receive_mode_upload_starting": "Oplaai van totale grootte {} begin", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_file_selection_remove_all": "Verwyder Als", - "gui_remove": "Verwyder" -} diff --git a/desktop/src/onionshare/resources/locale/am.json b/desktop/src/onionshare/resources/locale/am.json deleted file mode 100644 index 9a93c31f..00000000 --- a/desktop/src/onionshare/resources/locale/am.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "ተወው", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/ar.json b/desktop/src/onionshare/resources/locale/ar.json deleted file mode 100644 index eaf26a4c..00000000 --- a/desktop/src/onionshare/resources/locale/ar.json +++ /dev/null @@ -1,301 +0,0 @@ -{ - "config_onion_service": "تثبيت خدمة onion على المنفذ {0:d}.", - "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 service", - "other_page_loaded": "تم تحميل العنوان", - "close_on_autostop_timer": "تمّ الإيقاف بسبب بلوغ مؤقت الإيقاف أجله", - "closing_automatically": "تم الإيقاف بسبب تمام النقل", - "timeout_download_still_running": "انتظار اكتمال التحميل", - "large_filesize": "تحذير: رفع مشاركة كبيرة قد يستغرق ساعات", - "systray_menu_exit": "أنهِ", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "اكمل المستخدم تحميل الملفات", - "systray_download_canceled_title": "تم الغاء التحميل", - "systray_download_canceled_message": "الغى المستخدم التحميل", - "systray_upload_started_title": "بدأ الرفع", - "systray_upload_started_message": "بدأ مستخدم رفع ملفات الى حاسوبك", - "help_local_only": "لا تستخدم تور (فقط لغرض التطوير)", - "help_stay_open": "استمر في المشاركة بعد اول تحميل", - "help_autostop_timer": "أوقف المشاركة بعد ثواني محددة", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "أوقف المشاركة ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "فعّل طور التلقّي", - "gui_receive_stop_server": "أوقف طور التلقّي", - "gui_receive_stop_server_autostop_timer": "أوقف طور التلقّي (باقي {})", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "نسخ العنوان", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "تم الإلغاء", - "gui_copied_url_title": "OnionShare تمّ نسخ عنوان", - "gui_copied_url": "تمّ نسخ عوان اونينشير إلى الحافظة", - "gui_please_wait": "جاري البدء… اضغط هنا للإلغاء.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "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": "ألغِ", - "zip_progress_bar_format": "جاري الضغط: %p%", - "error_stealth_not_supported": "لاستعمال استيثاق العميل تلزمك إصدارة تور ‪0.2.9.1-alpha‬ أو (متصفّح تور 6.5) و python3-stem الإصدارة 1.5.0، أو ما بعدها.", - "error_ephemeral_not_supported": "يتطلّب OnionShare كلّا من إصدارة تور 0.2.7.1 و الإصدارة 1.4.0 من python3-stem.", - "gui_settings_window_title": "الإعدادات", - "gui_settings_whats_this": "ما هذا؟", - "gui_settings_stealth_option": "فعّل استيثاق العميل", - "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_sharing_label": "إعدادات المشاركة", - "gui_settings_close_after_first_download_option": "أوقف المشاركة بعد تمام تنزيل المتلقّي الملفات", - "gui_settings_connection_type_label": "كيف ينبغي أن يتصل اونينشير بشبكة تور؟", - "gui_settings_connection_type_bundled_option": "OnionShareباستخدام إصدار تور المضمّن في", - "gui_settings_connection_type_automatic_option": "Torجرب التهيئة التلقائية باستخدام متصفح", - "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": "SOCKSمنفذ", - "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": "باستخدام وسائل نقل obfs4 المضمّنة", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استخدام وسائل نقل obfs4 المضمّنة يتطلّب obfs4proxy", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "باستخدام وسائل نقل meek_lite ‮(‪Azure في‬)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استخدام وسائل نقل meek_lite ‮(‪Azure‬)‬ يتطلّب obfs4proxy", - "gui_settings_meek_lite_expensive_warning": "تنبيه: استخدام جسور meek_lite يكلّف مشروع تور للغاية..

استخدمها عند الضرورة فقط لتعذّر الاتّصال بتور مباشرة، أو عبر وسائل نقل obfs4 أو الجسور الاعتيادية.", - "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_button_save": "احفظ", - "gui_settings_button_cancel": "ألغِ", - "gui_settings_button_help": "مساعدة", - "gui_settings_autostop_timer_checkbox": "استخدم مؤقِّت الإيقاف", - "gui_settings_autostop_timer": "أوقف المشاركة في:", - "settings_error_unknown": "تعذّر الاتصال بمتحكّم تور لأنّ تضبيطاتك غير صحيحة.", - "settings_error_automatic": "تعذّر الاتّصال بمتحكم تور. هل متصفح Tor (و هو متاح في torproject.org) يعمل في الخلفية؟", - "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": "استعمال إصدارة تور المضمّنة في OnionShare لا يعمل في طور التطوير في وِندوز و لا ماك أوإس.", - "settings_error_bundled_tor_timeout": "استغرق الاتّصال بتور وقتا أطول من اللازم. ربما أنت غير متصّل بالإنترنت، أو أنّ ساعة النظام غير مضبوطة بدقة؟", - "settings_error_bundled_tor_broken": "تعذّر على OnionShare الاتصّال بتور في الخلفية:\n{}", - "settings_test_success": "تمّ الاتصال بمتحكّم تور.\n\nإصدار تور: {}\nيدعم خدمات البصلة الزائلة: {}.\nيدعم استيثاق العميل: {}.\nيدعم الجيل الأحدث من عناوين ‪.onion‬: {}.", - "error_tor_protocol_error": "ثمّة عطل في تور: {}", - "error_tor_protocol_error_unknown": "طرأ عطل مجهول في تور", - "error_invalid_private_key": "نوع المفتاح الخاص هذا غير معتمد", - "connecting_to_tor": "يجري الاتصال بشبكة تور", - "update_available": "توجد إصدارة أحدث من OnionShare. يمكنك تنزيلها الآن.

إصدارتك {} و الأحدث {}.", - "update_error_check_error": "تعذر التحقق من وجود إصدار أحدث: ربما أنت لست متصلًا بTor، أو أن موقع 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_autostop_timer": "بلغ مؤقِّت الإيقاف أجله قبل اشتغال الخادوم. أنشئ مشاركة جديدة.", - "gui_server_autostop_timer_expired": "انتهى وقت الايقاف التلقائي للمشاركة. من فضلك عدّله للبدء بالمشاركة.", - "share_via_onionshare": "شارك باستعمال OnionShare", - "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_started": "يجري التلقّي", - "gui_file_info": "{} ملفات، {}", - "gui_file_info_single": "{} ملف، {}", - "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": "", - "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_downloads_label": "", - "gui_settings_downloads_button": "استعراض", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "الطور العلني", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "تم تحميل الصفحة", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "تعذّر فتح الدليل لأنَّ نوتِلَس ليس متاحًا. الملف موجود في: {}", - "gui_settings_language_label": "اللغة المفضلة", - "gui_settings_language_changed_notice": "أعد تشغيل OnionShare لتطبيق خيار اللغة الجديد.", - "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_autostop_timer_waiting": "في انتظار إتمام الإرسال", - "gui_receive_mode_no_files": "لَمْ تُتَلقَّ أيّة ملفات بعد", - "gui_receive_mode_autostop_timer_waiting": "في انتظار إتمام التلقّي", - "gui_stop_server_autostop_timer_tooltip": "مؤقت الإيقاف التلقائي ينتهي في {}", - "gui_start_server_autostart_timer_tooltip": "مؤقت البدأ التلقائي ينتهي في {}", - "gui_waiting_to_start": "مُجدولة للبدأ في {}. اضغط هنا للإلغاء.", - "gui_settings_autostart_timer_checkbox": "استخدم مؤقِّت البدء", - "gui_settings_autostart_timer": "ابدأ المشاركة في:", - "gui_server_autostart_timer_expired": "انتهى الوقت المُجدول للمشاركة. عدلّه للبدء بالمشاركة.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "وقت الإيقاف التلقائى لا يمكن أن يكون قبل او نفس وقت البدء. من فضلك عدّله للبدء بالمشاركة.", - "gui_status_indicator_share_scheduled": "تمّت الجدولة…", - "gui_status_indicator_receive_scheduled": "تمّت الجدولة…", - "error_cannot_create_data_dir": "تعذَّر إنشاء دليل بيانات OnionShare: {}", - "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": "%p%، الوقت المنقضي {0:s}.", - "gui_all_modes_progress_starting": "(يجري الحساب) {0:s}، %p%", - "gui_all_modes_progress_eta": "{0:s}، الزمن الباقي المقدّر: {1:s}، %p%", - "days_first_letter": "يوم", - "hours_first_letter": "ساعة", - "minutes_first_letter": "دقيقة", - "seconds_first_letter": "ثانية", - "gui_website_url_description": "أى شخص معه مسار OnionsShare هذا سيكون بامكانه زيارة موقعك باستخدام متصفح تور: ", - "gui_mode_website_button": "قم بإصدار الموقع", - "gui_website_mode_no_files": "لا يوجد موقع تمت مشاركته حتى الآن", - "incorrect_password": "كلمة السر غير صحيحة", - "gui_settings_individual_downloads_label": "ازل لتسمح بتحميل الملفات فرادى", - "history_requests_tooltip": "{} طلب من الويب", - "gui_settings_csp_header_disabled_option": "أوقف حماية Content Security Policy", - "gui_settings_website_label": "اعدادات الموقع", - "gui_receive_flatpak_data_dir": "بسبب أنت قد ثبّت OnionShare باستخدام Flatpak، يجب عليك حفظ الملفات داخل مُجلد في المسار ~/OnionShare.", - "gui_qr_code_dialog_title": "OnionShare رمز الاستجابة السريعة", - "gui_show_qr_code": "اظهر رمز الاستجابة السريعة", - "gui_chat_stop_server": "إيقاف خادم الدردشة", - "gui_chat_start_server": "ابدأ خادم الدردشة", - "gui_file_selection_remove_all": "إزالة الكُل", - "gui_remove": "إزالة", - "error_port_not_available": "منفذ OnionShare غير متاح", - "gui_rendezvous_cleanup_quit_early": "قم بالإنهاء مبكرًا", - "gui_rendezvous_cleanup": "في انتظار إغلاق دوائر Tor للتأكد من أن ملفاتك تم نقلها بنجاح.\t\n\t\nهذا قد يستغرق بعض الدقائق.", - "mode_settings_website_disable_csp_checkbox": "لا ترسل عنوان سياسة أمان المحتوى (يسمح لموقعك على الويب باستخدام موارد الجهات الخارجية)", - "mode_settings_receive_data_dir_browse_button": "تصفح", - "mode_settings_receive_data_dir_label": "حفظ الملفات إلى", - "mode_settings_share_autostop_sharing_checkbox": "إيقاف المشاركة بعد إرسال الملفات ( قم بإلغاء التحديد للسماح بتنزيل الملفات الفردية)", - "mode_settings_legacy_checkbox": "استخدم عنوانًا قديمًا (النسخة الثانية من خدمة onion، لا ينصح بها)", - "mode_settings_autostop_timer_checkbox": "إيقاف خدمة Onion في ميعاد مجدول", - "mode_settings_autostart_timer_checkbox": "بدء خدمة Onion في ميعاد مجدول", - "mode_settings_public_checkbox": "هذه هي خدمة OnionShare خاصة بالعامة (تعطّل المفتاح الخاص)", - "mode_settings_persistent_checkbox": "حفظ هذا التبويب، وقم بفتحه تلقائيا عند تشغيل OnionShare", - "mode_settings_advanced_toggle_hide": "إخفاء الإعدادات المتقدمة", - "mode_settings_advanced_toggle_show": "عرض إعدادات متقدمة", - "gui_quit_warning_cancel": "إلغاء", - "gui_quit_warning_description": "المشاركة نشطة على بعض تبويباتك. إذا قمت بالخروج، جميع تبويباتك سيتم إغلاقها. هل أنت متأكد من رغبتك في الخروج؟", - "gui_quit_warning_title": "هل أنت متأكد؟", - "gui_close_tab_warning_cancel": "إلغاء", - "gui_close_tab_warning_close": "إغلاق", - "gui_close_tab_warning_website_description": "أنت تقوم باستضافة موقعًا نشطًا. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", - "gui_close_tab_warning_receive_description": "أنت الآن تقوم باستقبال ملفات. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", - "gui_close_tab_warning_share_description": "أنت الآن تقوم بإرسال ملفات. هل أنت متأكد من رغبتك في إغلاق هذا التبويب؟", - "gui_close_tab_warning_persistent_description": "هذا التبويب قيد العمل. إذا قمت بإغلاقه سوق تفقد العنوان الذي تستخدمه. هل أنت متأكد من رغبتك في إغلاقه؟", - "gui_close_tab_warning_title": "هل أنت متأكد؟", - "gui_tab_name_chat": "دردشة", - "gui_tab_name_website": "موقع", - "gui_tab_name_receive": "استقبال", - "gui_tab_name_share": "مشاركة", - "gui_main_page_chat_button": "بدء الدردشة", - "gui_main_page_website_button": "بدء الاستضافة", - "gui_main_page_receive_button": "بدء الاستقبال", - "gui_main_page_share_button": "ابدء المشاركة", - "gui_new_tab_chat_button": "الدردشة بشكل مجهول", - "gui_new_tab_website_button": "استضافة موقع", - "gui_new_tab_receive_button": "استلام ملفات", - "gui_new_tab_share_button": "مشاركة ملفات", - "gui_new_tab_tooltip": "افتح تبويب جديد", - "gui_new_tab": "تبويب جديد", - "gui_color_mode_changed_notice": "يُرجى إعادة تشغيل OnionShare من أجل تطبيق المظهر باللون الجديد.", - "gui_open_folder_error": "فشل فتح ملف باستخدام xdg-open. الملف هنا: {}", - "gui_chat_url_description": "أي شخص يوجد معه عنوان OnionShare يمكنه الانضمام إلى غرفة المحادثة هذه باستخدام متصفح تور Tor Browser", - "history_receive_read_message_button": "اقرأ الرسالة", - "mode_settings_receive_webhook_url_checkbox": "استخدم خطاف الويب التلقائي للإخطارات", - "mode_settings_receive_disable_files_checkbox": "تعطيل تحميل الملفات", - "mode_settings_receive_disable_text_checkbox": "تعطيل إرسال النص", - "mode_settings_title_label": "عنوان مخصص", - "gui_settings_theme_dark": "داكن", - "gui_settings_theme_light": "فاتح", - "gui_settings_theme_auto": "تلقائي", - "gui_settings_theme_label": "المظهر", - "gui_status_indicator_chat_started": "في محادثة", - "gui_status_indicator_chat_scheduled": "مُبَرمَج…", - "gui_status_indicator_chat_working": "يبدأ…", - "gui_status_indicator_chat_stopped": "جاهز للدردشة", - "gui_client_auth_instructions": "بعد ذلك ، أرسل المفتاح الخاص للسماح بالوصول إلى خدمة OnionShare الخاصة بك:", - "gui_url_instructions_public_mode": "أرسل عنوان OnionShare أدناه:", - "gui_url_instructions": "أولاً، أرسل عنوان OnionShare أدناه:", - "gui_please_wait_no_button": "يبدأ…", - "gui_hide": "إخف", - "gui_qr_label_auth_string_title": "المفتاح الخاص", - "gui_qr_label_url_title": "عنوان OnionShare", - "gui_copied_client_auth": "تم نسخ المفتاح الخاص إلى الحافظة", - "gui_copy_client_auth": "نسخ المفتاح الخاص" -} diff --git a/desktop/src/onionshare/resources/locale/bg.json b/desktop/src/onionshare/resources/locale/bg.json deleted file mode 100644 index 76feab06..00000000 --- a/desktop/src/onionshare/resources/locale/bg.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "config_onion_service": "Създаване на onion услуга на порт {0:d}.", - "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_autostop_timer": "Спряно, защото автоматично спиращият таймер приключи", - "closing_automatically": "Спряно, защото свалянето приключи", - "timeout_download_still_running": "Изчакване на свалянето да приключи", - "timeout_upload_still_running": "Изчакване ъплоудът да приключи", - "large_filesize": "Предупреждение: изпращане на голям дял може да отнеме часове", - "systray_menu_exit": "Изход", - "systray_download_started_title": "OnionShare сваляне започна", - "systray_download_started_message": "Потребител започна да сваля файловете Ви", - "systray_download_completed_title": "OnionShare свалянето приключи", - "systray_download_completed_message": "Потребителят приключи с изтегляне на Вашите файлове", - "systray_download_canceled_title": "OnionShare сваляне е отменено", - "systray_download_canceled_message": "Потребителят отмени свалянето", - "systray_upload_started_title": "OnionShare ъплоуд започна", - "systray_upload_started_message": "Ползвател започна да ъплоудва файлове на компютъра Ви", - "help_local_only": "Не използвайте Тор (само за разработване)", - "help_stay_open": "Продължи споделянето след първото изтегляне", - "help_autostop_timer": "Спри споделянето след дадено количество секунди", - "help_stealth": "Използвай клиент авторизация (напреднал)", - "help_receive": "Получаване на дялове вместо изпращане", - "help_verbose": "Протоколирай OnionShare грешки на stdout и уеб грешки на диск", - "help_filename": "Списък на документи или папки за споделяне", - "help_config": "Персонализирано местоположение на JSON конфигурационен файл (незадължително)", - "gui_drag_and_drop": "Плъзнете и пуснете файлове и папки, \nза да започнете споделяне", - "gui_add": "Добавете", - "gui_delete": "Изтриване", - "gui_choose_items": "Изберете", - "gui_share_start_server": "Започнете споделянето", - "gui_share_stop_server": "Спрете споделянето", - "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_autostop_timer": "Спрете получаващия режим ({} остават)", - "gui_receive_stop_server_autostop_timer_tooltip": "Автоматично спиращият таймер спира в {}", - "gui_copy_url": "Копирайте адрес", - "gui_downloads": "Свалете история", - "gui_no_downloads": "Още няма изтегляния", - "gui_canceled": "Отменен", - "gui_copied_url_title": "OnionShare адресът е копиран", - "gui_copied_url": "OnionShare адресът е копиран към клипборда", - "gui_please_wait": "Започва... кликни за отменяне.", - "gui_download_upload_progress_complete": "%p%, {0:s} изтече.", - "gui_download_upload_progress_starting": "{0:s}, %p% (изчисляване)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "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": "Отказ", - "zip_progress_bar_format": "Компресира: %p%", - "error_stealth_not_supported": "За да използвате ауторизация на клиента Ви трябва поне Tor 0.2.9.1-alpha (или на браузъра 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_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_sharing_label": "Настройки на споделяне", - "gui_settings_close_after_first_download_option": "Спри споделянето след първото изтегляне", - "gui_settings_connection_type_label": "Как OnionShare да се свържe с Тор?", - "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_socket_file_label": "Сокет файл", - "gui_settings_socks_label": "SOCKS порт", - "gui_settings_authenticate_label": "Настройки на Тор за удостоверяване на автентичността", - "gui_settings_authenticate_no_auth_option": "Без автентикация или cookie автентикация", - "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": "Използвайте вградените obfs4 pluggable транспорти", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Използвайте вградените obfs4 pluggable транспорти (изисква obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Използвайте вградените meek_lite (Azure) pluggable транспорти", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Използвайте вградените meek_lite (Azure) pluggable транспорти (изискват obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Предупреждение: meek_lite мостовета са много скъпи за проекта Тор.

Използвайте ги само, ако не можете да се свържете пряко чрез obfs4 транспорти или други нормални мостове с Тор.", - "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_button_save": "Запазване", - "gui_settings_button_cancel": "Отказ", - "gui_settings_button_help": "Помощ", - "gui_settings_autostop_timer_checkbox": "Използвайте автоматично спиращия таймер", - "gui_settings_autostop_timer": "Спри дела на:", - "settings_error_unknown": "Не мога да се свържа с Тор контролера, защото Вашите настройки не правят смисъл.", - "settings_error_automatic": "Не мога да се свържа с Тор контролера. Стартиран ли е Тор браузерът във фонов режим (достъпен от torproject. org)?", - "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": "Използване на Тор версия, идваща с OnionShare не работи в режим на разработчик под Windows или macOS.", - "settings_error_bundled_tor_timeout": "Oтнема прекалено дълго време да се свържа с Тор. Може би не сте свързани с интернет или системният часовник е неточен?", - "settings_error_bundled_tor_broken": "OnionShare не можа да се свърже с Тор във фонов режим:\n{}", - "settings_test_success": "Свързан с Тор контролер.\n\nТор версия: {}\nПоддържа ephemeral onion services: {}\nПоддържа клиент автентикация: {}\nПоддържа следваща генерация .onion адреси: {}", - "error_tor_protocol_error": "Станала е грешка с Тор: {}", - "error_tor_protocol_error_unknown": "Имаше неизвестена грешка с Тор", - "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_autostop_timer": "Автоматично спиращият таймер спря преди сървърът да стартира.\nМоля направете нов дял.", - "gui_server_autostop_timer_expired": "Автоматично спиращият таймер спря.\nМоля актуализирайте за да започнете споделяне.", - "share_via_onionshare": "Споделете го чрез OnionShare", - "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_started": "Получаване", - "gui_file_info": "{} файлове, {}", - "gui_file_info_single": "{} файл, {}", - "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": "Предупреждение: Режим на приемане позволява на хора да качват файлове на Вашия компютър. Някои файлове могат потенциално да поемат контрол над компютъра Ви, ако ги отворите. Отваряйте единствено неща от хора, на които вярвате или ако знаете какво правите.", - "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_downloads_label": "Запазете файлове в", - "gui_settings_downloads_button": "Разглеждане", - "gui_settings_public_mode_checkbox": "Публичен режим", - "systray_close_server_title": "OnionShare сървърът приключи", - "systray_close_server_message": "Един ползвател затвори сървъра", - "systray_page_loaded_title": "OnionShare страницата е заредена", - "systray_download_page_loaded_message": "Един ползвател зареди свалената страница", - "systray_upload_page_loaded_message": "Един ползвател зареди ъплоуд страницата", - "gui_uploads": "Ъплоуд история", - "gui_no_uploads": "Все още няма качвания", - "gui_clear_history": "Изтрий всичко", - "gui_upload_in_progress": "Качването започна", - "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." -} diff --git a/desktop/src/onionshare/resources/locale/bn.json b/desktop/src/onionshare/resources/locale/bn.json deleted file mode 100644 index a156afb3..00000000 --- a/desktop/src/onionshare/resources/locale/bn.json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "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": "অনিয়ন সার্ভিস চালু করার জন্য কোন পোর্ট পাওয়া যাচ্ছে না", - "other_page_loaded": "ঠিকানা লোড হয়েছে", - "close_on_autostop_timer": "বন্ধ হয়ে গিয়েছে, কারণ অটো-স্টপ টাইমার এর সময় শেষ", - "closing_automatically": "ট্রান্সফার শেষ, তাই থেমে যাওয়া হলো", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "সতর্কতা: বড় ফাইল পাঠাতে গেলে অনেক সময় লাগতে পারে", - "systray_menu_exit": "করুন", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "Tor ব্যবহার করবে না (শুধুমাত্র ডেভেলপারদের জন্য)", - "help_stay_open": "ফাইলগুলো পাঠানো হয়ে গেলেও শেয়ার করা থামিও না", - "help_autostop_timer": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও", - "help_stealth": "ক্লায়েন্ট অনুমোদন ব্যবহার করুন (উন্নততর)", - "help_receive": "কোনকিছু শেয়ার না করে শুধু গ্রহণ করবে", - "help_verbose": "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_autostop_timer": "শেয়ার বন্ধ করো ({})", - "gui_share_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", - "gui_receive_start_server": "রিসিভ মোড আরম্ভ করো", - "gui_receive_stop_server": "রিসিভ মোড বন্ধ করো", - "gui_receive_stop_server_autostop_timer": "রিসিভ মোড বন্ধ করো({} বাকি)", - "gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে", - "gui_copy_url": "এড্রেস কপি করো", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "বাতিল করা হয়েছে", - "gui_copied_url_title": "OnionShare ঠিকানা কপি করা হয়েছে", - "gui_copied_url": "OnionShare ঠিকানাটি ক্লিপবোর্ডে কপি করা হয়েছে", - "gui_please_wait": "চালু করছি… বাতিল করতে এখানে ক্লিক করো।", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "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": "বাতিল", - "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.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।", - "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_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_socket_file_label": "সকেট ফাইল", - "gui_settings_socks_label": "SOCKS পোর্ট", - "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": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)", - "gui_settings_meek_lite_expensive_warning": "সতর্কতা: meek_lite ব্রিজ পরিচালনা করা Tor Project-এর জন্য অনেক ব্যয়বহুল।

এগুলো তখনই ব্যবহার করো যখন Tor-এ সরাসরি কানেক্ট করতে পারছো না, obfs4 ট্রান্সপোর্ট দিয়ে, অথবা অন্যান্য সাধারণ ব্রিজ দিয়ে।", - "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_button_save": "সেভ", - "gui_settings_button_cancel": "বাতিল", - "gui_settings_button_help": "সাহায্য", - "gui_settings_autostop_timer_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো", - "gui_settings_autostop_timer": "শেয়ার বন্ধ করো:", - "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করা যায় না কারণ তোমার বিন্যাসসমূহ বোধগম্য নয়।", - "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন্ডে কি চলমান?", - "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": "OnionShare এর সাথে আসা টর সংস্করণটি উইন্ডোজ বা ম্যাক এ ডেভেলপার মোডে কাজ করে না।", - "settings_error_bundled_tor_timeout": "টর সাথে সংযোগ করার জন্য খুব বেশি সময় লাগছে। হয়তো তুমি ইন্টারনেটের সাথে সংযুক্ত নন, অথবা তোমার কম্পিউটারের সময় ঠিক নেই?", - "settings_error_bundled_tor_broken": "OnionShare টর এর সাথে কানেক্ট করতে পারছে না:\n{}", - "settings_test_success": "টর নিয়ন্ত্রকের সঙ্গে যুক্ত হয়েছে।\n\nটর সংস্করণ: {}\nঅস্থায়ী অনিয়ন ঠিকানা সমর্থন করে: {}.\nক্লায়েন্ট অথেনটিকেশন সমর্থন করে: {}.\n৩য় প্রজন্মের অনিয়ন ঠিকানাগুলো(৫৬ অক্ষর) সমর্থন করে: {} .", - "error_tor_protocol_error": "টরে একটি ত্রুটি ছিল: {}", - "error_tor_protocol_error_unknown": "টরে একটি অজানা ত্রুটি আছে", - "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত", - "connecting_to_tor": "টর নেটওয়ার্কে যুক্ত হচ্ছে", - "update_available": "নতুন OnionShare সংস্করণ বের হয়েছে। এটি পেতে এখানে ক্লিক করো

তুমি ব্যবহার করছো {} এবং সাম্প্রতিক সংস্করণ হলো {}।", - "update_error_check_error": "নতুন সংস্করণের জন্য দেখা যায়নি: হয়তো তুমি টর-এর সাথে সংযুক্ত না, অথবা অনিওনশেয়ার ওয়েবসাইট বন্ধ?", - "update_error_invalid_latest_version": "নতুন সংস্করণের জন্য জানা যায়নি: অনিওনশেয়ার ওয়েবসাইট বলছে সর্বশেষ সংস্করণ চেনা যাচ্ছে না '{}'…", - "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 পুনরায় খুলো এবং টর এর সাথে OnionShare কে সেট আপ করো।", - "gui_tor_connection_lost": "টর এর সাথে যোগাযোগ বিচ্ছিন্ন হয়ে গেছে।", - "gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই স্বয়ংক্রিয়-বন্ধ ঘড়ির সময় শেষ হয়ে গেছে। অনুগ্রহ করে আবার নতুনভাবে শেয়ার করো।", - "gui_server_autostop_timer_expired": "অটো-স্টপ টাইমারের সময় ইতিমধ্যেই শেষ হয়ে গিয়েছে। দয়া করে, শেয়ারিং শুরু করতে নতুনভাবে সময় সেট করো।", - "share_via_onionshare": "OnionShare এর মাধমে শেয়ার করো", - "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_started": "গ্রহণ", - "gui_file_info": "{} ফাইল, {}", - "gui_file_info_single": "{} ফাইল, {}", - "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": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।", - "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_downloads_label": "", - "gui_settings_downloads_button": "দেখা", - "gui_settings_public_mode_checkbox": "সর্বজনীন মোড", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "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_add_files": "ফাইল যোগ করো", - "gui_add_folder": "ফোল্ডার যোগ করো", - "gui_settings_onion_label": "অনিয়ন সেটিংস", - "gui_connect_to_tor_for_onion_settings": "অনিওন সার্ভিস সেটিংস দেখতে টর এর সাথে কানেক্ট করো", - "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_share_started_title": "শেয়ারিং শুরু করা হয়েছে", - "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": "{} শুরু হয়েছে", - "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_autostop_timer_waiting": "পাঠানো শেষ হওয়ার জন্য অপেক্ষা করছি", - "gui_receive_mode_no_files": "কোন ফাইল এখনও পাওয়া যায়নি", - "gui_receive_mode_autostop_timer_waiting": "রিসিভ শেষ হওয়ার জন্য অপেক্ষা করছি", - "gui_stop_server_autostop_timer_tooltip": "অটো-স্টপ টাইমার বন্ধ হবে {} পরে", - "gui_start_server_autostart_timer_tooltip": "অটো স্টার্ট টাইমার বন্ধ হবে {} পরে", - "gui_waiting_to_start": "{} এর মধ্যে শেয়ারিং শুরু হবে। বাতিল করতে এখানে ক্লিক করো।", - "gui_settings_autostart_timer_checkbox": "অটো-স্টার্ট টাইমার ব্যবহার করো", - "gui_settings_autostart_timer": "শেয়ার শুরু করো:", - "gui_server_autostart_timer_expired": "পূর্বনির্ধারিত সময় শেষ হয়ে গিয়েছে। শেয়ার শুরু করার জন্য আবার টাইম সেট করো।", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "অটো স্টপ টাইম, অটো স্টার্ট টাইমের আগে বা একই সময় হতে পারবে না। শেয়ারিং চালু করতে দয়া করে এটি ঠিক করুন।", - "gui_status_indicator_share_scheduled": "শিডিউল করা হয়েছে…", - "gui_status_indicator_receive_scheduled": "শিডিউল করা হয়েছে…", - "days_first_letter": "দি", - "hours_first_letter": "ঘ", - "minutes_first_letter": "মি", - "seconds_first_letter": "সে", - "gui_website_url_description": "যার কাছেই নিচের OnionShare ঠিকানাটি এবং ব্যক্তিগত কী থাকবে সেই টর ব্রাউজারের মাধ্যমে উক্ত ঠিকানায় গিয়ে আপনার ফাইল(গুলো) ডাউনলোড করতে পারবে: ", - "gui_mode_website_button": "ওয়েবসাইট পাবলিশ করুন", - "gui_website_mode_no_files": "এখনো কোন ওয়েবসাইট শেয়ার করা হয়নি", - "incorrect_password": "ভুল পাসওয়ার্ড", - "gui_settings_individual_downloads_label": "একাধিক ফাইলের ক্ষেত্রে আলাদাভাবে প্রত্যেক ফাইলকে ডাউনলোড করার জন্য চেক উঠিয়ে দিন", - "history_requests_tooltip": "{} ওয়েব রিকুয়েস্ট", - "gui_settings_csp_header_disabled_option": "\"কন্টেন্ট নিরাপত্তা পলিসি\" হেডারকে বন্ধ করো", - "gui_settings_website_label": "ওয়েবসাইট সেটিংস", - "gui_new_tab_receive_button": "ফাইল গ্রহণ করো", - "gui_new_tab_share_button": "ফাইল শেয়ার করো", - "gui_new_tab_tooltip": "একটি নতুন ট্যাব খুলো", - "gui_new_tab": "নতুন ট্যাব", - "mode_settings_website_disable_csp_checkbox": "বিষয়বস্তু নিরাপত্তা নীতি শীর্ষাংশ নিষ্ক্রিয় করো (তোমার ওয়েবসাইটকে তৃতীয় পক্ষের সম্পদ ব্যবহার করতে সম্মতি দাও)", - "mode_settings_legacy_checkbox": "একটি লেগাসি ঠিকানা ব্যবহার করো (অনিওন সেবা স.২, এর ব্যবহার উৎসাহযোগ্য না)", - "gui_new_tab_receive_description": "তোমার কম্পিউটারকে একটি অনলাইন ড্রপবক্স বানাও। অন্যরা টর ব্রাউজার ব্যবহার করে তোমার কম্পিউটারে ফাইল পাঠাতে পারবে।", - "gui_new_tab_share_description": "অন্য কাউকে পাঠাতে তোমার কম্পিউটারের ফাইল নির্বাচন করো. তুমি যাকে বা যাদের কাছে ফাইল পাঠাতে চাও তাকে বা তাদেরকে তোমার কাছ থেকে ফাইল ডাউনলোড করতে টর ব্রাউজার ব্যবহার করতে হবে।", - "mode_settings_share_autostop_sharing_checkbox": "ফাইল পাঠানোর পর শেয়ার করা বন্ধ করো (স্বতন্ত্র ফাইল ডাউনলোড এর মঞ্জুরি দিতে টিক চিহ্ন তুলে দাও)", - "mode_settings_autostop_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা বন্ধ করো", - "mode_settings_autostart_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা শুরু করো", - "mode_settings_persistent_checkbox": "এই ট্যাব সংরক্ষণ করো, এবং যখন আমি অনিওনশেয়ার খুলব তখন এটি স্বয়ংক্রিয়ভাবে খুলো", - "gui_quit_warning_description": "তোমার কিছু ট্যাবে শেয়ারিং সক্রিয়। তুমি যদি প্রস্থান করো, তোমার সমস্ত ট্যাব বন্ধ হয়ে যাবে। তুমি কি নিশ্চিত যে তুমি প্রস্থান করতে চাও?", - "gui_close_tab_warning_website_description": "তুমি সক্রিয়ভাবে একটি ওয়েবসাইট হোস্ট করছো। আপনি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", - "gui_close_tab_warning_receive_description": "তুমি ফাইল পাওয়ার প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", - "gui_close_tab_warning_share_description": "তুমি ফাইল পাঠানোর প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?", - "gui_close_tab_warning_persistent_description": "এই ট্যাবটি স্থায়ী। তুমি যদি এটা বন্ধ করো তাহলে তুমি যে অনিওন ঠিকানা ব্যবহার করছো তা হারিয়ে ফেলবে। তুমি কি নিশ্চিত যে তুমি এটা বন্ধ করতে চাও?", - "gui_quit_warning_title": "তুমি নিশ্চিত?", - "gui_new_tab_website_description": "তোমার কম্পিউটার থেকে একটি স্ট্যাটিক এইচটিএমএল অনিওন ওয়েবসাইট হোস্ট করো।", - "gui_new_tab_website_button": "ওয়েবসাইট প্রকাশ করো", - "gui_close_tab_warning_title": "তুমি নিশ্চিত?", - "gui_close_tab_warning_close": "বন্ধ", - "gui_close_tab_warning_cancel": "বাতিল", - "gui_quit_warning_cancel": "বাতিল", - "mode_settings_advanced_toggle_show": "উন্নততর সেটিংস দেখাও", - "mode_settings_advanced_toggle_hide": "উন্নততর সেটিংস লুকাও", - "mode_settings_public_checkbox": "এটি পব্লিক অনিওনশেয়ার ঠিকানা (ব্যক্তিগত কী ডিসেবল করে)", - "mode_settings_receive_data_dir_browse_button": "অনুসন্ধান করো", - "mode_settings_receive_data_dir_label": "ফাইল সংরক্ষণ করো", - "gui_chat_stop_server": "চ্যাট সার্ভার বন্ধ করো", - "gui_chat_start_server": "চ্যাট সার্ভার শুরু করো", - "gui_file_selection_remove_all": "সব সরাও", - "gui_remove": "সরাও", - "gui_main_page_share_button": "শেয়ার করা শুরু করো", - "gui_new_tab_chat_button": "বেনামে আলাো করো", - "gui_tab_name_chat": "আলাপ", - "gui_tab_name_website": "ওয়েবসাইট", - "gui_tab_name_receive": "গ্রহণ", - "gui_tab_name_share": "শেয়ার", - "gui_qr_code_dialog_title": "অনিওনশেয়ার কিউআর কোড", - "gui_show_qr_code": "কিউআর কোড দেখাও", - "gui_receive_flatpak_data_dir": "যেহেতু অনিওনশেয়ার ফ্ল্যাটপ্যাক দিয়ে ইন্সটল করেছো, তাই তোমাকে ~/OnionShare এ ফাইল সংরক্ষণ করতে হবে।", - "gui_rendezvous_cleanup": "তোমার ফাইলগুলি সফলভাবে স্থানান্তরিত হয়েছে তা নিশ্চিত হয়ে টর সার্কিট বন্ধের অপেক্ষা করা হচ্ছে।\n\nএটি কয়েক মিনিট সময় নিতে পারে।", - "gui_open_folder_error": "xdg-open দিয়ে ফোল্ডার খুলতে ব্যর্থ হয়েছে। ফাইলটি এখানে: {}", - "gui_chat_url_description": "এই অনিওনশেয়ার ঠিকানা এবং ব্যক্তিগত কী দিয়ে যে কেউ টর ব্রাউজার: ব্যবহার করে এই চ্যাট রুমটিতে যোগ দিতে পারে", - "error_port_not_available": "অনিয়নশায়ার পোর্ট নেই", - "gui_rendezvous_cleanup_quit_early": "তাড়াতাড়ি বন্ধ করো", - "gui_main_page_chat_button": "চ্যাটিং শুরু করো", - "gui_main_page_website_button": "হোস্টিং শুরু করো", - "gui_main_page_receive_button": "গ্রহণ শুরু করো", - "gui_color_mode_changed_notice": "নতুন রঙের মোড প্রয়োগ করার জন্য OnionShare পুনরারম্ভ করুন।", - "history_receive_read_message_button": "বার্তা পড়ুন", - "mode_settings_receive_webhook_url_checkbox": "বিজ্ঞপ্তি ওয়েবহুক ব্যবহার করুন", - "mode_settings_receive_disable_files_checkbox": "ফাইল আপলোড করা অক্ষম করুন", - "mode_settings_receive_disable_text_checkbox": "পাঠ্য জমা দেওয়া অক্ষম করুন", - "mode_settings_title_label": "কাস্টম শিরোনাম", - "gui_status_indicator_chat_started": "চ্যাট করছে", - "gui_status_indicator_chat_scheduled": "শিডিউল করা হয়েছে…", - "gui_status_indicator_chat_working": "শুরু…", - "gui_status_indicator_chat_stopped": "চ্যাট করতে প্রস্তুত", - "gui_server_doesnt_support_stealth": "দুখিত, টোরের এই সংস্করণটি স্টেল্থ (ক্লায়েন্ট প্রমাণীকরণ) সমর্থন করে না। দয়া করে টোরের একটি নতুন সংস্করণ দিয়ে চেষ্টা করুন, অথবা ব্যক্তিগত হওয়ার প্রয়োজন না হলে 'পাবলিক' মোড ব্যবহার করুন।", - "gui_settings_theme_dark": "কাল", - "gui_settings_theme_light": "হালকা", - "gui_settings_theme_auto": "স্বয়ংক্রিয়", - "gui_settings_theme_label": "থিম", - "gui_client_auth_instructions": "পরবর্তী, অনিওনশেয়ার অ্যাক্সেসের অনুমতি দেওয়ার জন্য ব্যক্তিগত কী পাঠান:", - "gui_url_instructions_public_mode": "নিচের অনিওনশেয়ার ঠিকানা পাঠান:", - "gui_url_instructions": "প্রথমে, নিচের অনিওনশেয়ার ঠিকানা পাঠান:", - "gui_chat_url_public_description": "এই অনিওনশেয়ার ঠিকানা দিয়ে যে কেউ টর ব্রাউজার: ব্যবহার করে এই চ্যাট রুমটিতে যোগ দিতে পারে", - "gui_receive_url_public_description": "যার কাছেই এই ঠিকানা থাকবে সে ই টর ব্রাউজার ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে যে কেউ আপনার কম্পিউটারে ফাইল আপলোড করতে পারবে:", - "gui_website_url_public_description": "যার কাছেই নিচের OnionShare ঠিকানাটি থাকবে সেই টর ব্রাউজারের মাধ্যমে উক্ত ঠিকানায় গিয়ে আপনার ফাইল(গুলো) ডাউনলোড করতে পারবে: ", - "gui_share_url_public_description": "যার কাছেই এই ঠিকানা থাকবে সে ই টর ব্রাউজার ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে যে কেউ আপনার ফাইল(গুলি) ডাউনলোড করতে পারবে:", - "gui_please_wait_no_button": "চালু করছি…", - "gui_hide": "লুকান", - "gui_reveal": "দেখাও", - "gui_qr_label_auth_string_title": "ব্যক্তিগত কী", - "gui_qr_label_url_title": "OnionShare ঠিকানা", - "gui_copied_client_auth": "ব্যক্তিগত কী ক্লিপবোর্ডে কপি করা হয়েছে", - "gui_copied_client_auth_title": "ব্যক্তিগত কী কপি করা হয়েছে", - "gui_copy_client_auth": "ব্যক্তিগত কী কপি করো" -} diff --git a/desktop/src/onionshare/resources/locale/ca.json b/desktop/src/onionshare/resources/locale/ca.json deleted file mode 100644 index 132c764a..00000000 --- a/desktop/src/onionshare/resources/locale/ca.json +++ /dev/null @@ -1,288 +0,0 @@ -{ - "config_onion_service": "S'està establint el servei onion al port {0:d}.", - "preparing_files": "S'estan comprimint els fitxers.", - "give_this_url": "Dóna aquesta adreça a la persona destinatària:", - "give_this_url_stealth": "Fes arribar aquestes dues línies a la/es persona/es destinatària/es:", - "give_this_url_receive": "Dóna aquesta adreça a la persona remitent:", - "give_this_url_receive_stealth": "Dóna aquesta adreça i la línia HidServAuth a la persona remitent:", - "ctrlc_to_stop": "Prem Control+C per aturar el servidor", - "not_a_file": "{0:s} no és un arxiu vàlid.", - "not_a_readable_file": "{0:s} no és un fitxer 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_autostop_timer": "S'ha aturat perquè s'ha acabat el temporitzador d'aturada automàtica", - "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 de fitxers molt grans podria trigar hores", - "systray_menu_exit": "Surt", - "systray_download_started_title": "S'ha iniciat la descàrrega amb OnionShare", - "systray_download_started_message": "Algú ha començat a descarregar els teus arxius", - "systray_download_completed_title": "S'ha completat la descàrrega amb OnionShare", - "systray_download_completed_message": "Algú ha acabat de descarregar els teus arxius", - "systray_download_canceled_title": "S'ha canceŀlat la descàrrega", - "systray_download_canceled_message": "L'usuari va cancel·lar la descàrrega", - "systray_upload_started_title": "S'ha iniciat la pujada", - "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_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_verbose": "Envia els errors d'OnionShare a stdout i els errors web al disc", - "help_filename": "Llista d'arxius o carpetes a compartir", - "help_config": "Ubicació de la configuració JSON personalitzada", - "gui_drag_and_drop": "Arrossegueu fitxers i carpetes per a començar a compartir", - "gui_add": "Afegeix", - "gui_delete": "Esborra", - "gui_choose_items": "Trieu", - "gui_share_start_server": "Comparteix", - "gui_share_stop_server": "Deixa de compartir", - "gui_share_stop_server_autostop_timer": "Deixa de compartir (queden {})", - "gui_share_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", - "gui_receive_start_server": "Inicia el mode de recepció", - "gui_receive_stop_server": "Atura el mode de recepció", - "gui_receive_stop_server_autostop_timer": "Atura el mode de recepció (queden {})", - "gui_receive_stop_server_autostop_timer_tooltip": "El temporitzador acaba a {}", - "gui_copy_url": "Copia l'adreça", - "gui_downloads": "Historial de descàrregues", - "gui_no_downloads": "No n'hi ha cap", - "gui_canceled": "S'ha cancel·lat", - "gui_copied_url_title": "S'ha copiat l'adreça OnionShare", - "gui_copied_url": "S'ha copiat l'adreça OnionShare al porta-retalls", - "gui_please_wait": "S'està iniciant… Feu clic per a cancel·lar.", - "gui_download_upload_progress_complete": "Han passat %p%, {0:s}.", - "gui_download_upload_progress_starting": "{0:s}, %p% (s'està calculant)", - "gui_download_upload_progress_eta": "{0:s}, temps restant: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Espereu un moment", - "gui_share_quit_warning": "Encara s'estan enviant fitxers. Segur que voleu sortir de l'OnionShare?", - "gui_receive_quit_warning": "Encara s'estan rebent fitxers. Segur que voleu sortir de l'OnionShare?", - "gui_quit_warning_quit": "Surt", - "gui_quit_warning_dont_quit": "Cancel·la", - "zip_progress_bar_format": "S'està comprimint: %p%", - "error_stealth_not_supported": "Per a fer servir l'autorització de client, necessiteu versions iguals o superiors a Tor 0.2.9.1-alpha (o Tor Browser 6.5) i python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare necessita almenys les versions Tor 0.2.7.1 i python3-stem 1.4.0.", - "gui_settings_window_title": "Paràmetres", - "gui_settings_whats_this": "Què és això?", - "gui_settings_stealth_option": "Fes servir autorització de client", - "gui_settings_autoupdate_label": "Comprova si hi ha versions noves", - "gui_settings_autoupdate_option": "Notifica'm si hi ha una actualització disponible", - "gui_settings_autoupdate_timestamp": "Última comprovació: {}", - "gui_settings_autoupdate_timestamp_never": "Mai", - "gui_settings_autoupdate_check_button": "Comprova si hi ha una versió més nova", - "gui_settings_general_label": "Configuració general", - "gui_settings_sharing_label": "Configuració de compartició", - "gui_settings_close_after_first_download_option": "Deixa de compartir després d'enviar fitxers", - "gui_settings_connection_type_label": "Com hauria de connectar-se l'OnionShare al Tor?", - "gui_settings_connection_type_bundled_option": "Fes servir la versió de Tor inclosa dins d'OnionShare", - "gui_settings_connection_type_automatic_option": "Intenta la configuració automàtica amb el navegador Tor", - "gui_settings_connection_type_control_port_option": "Connecta fent servir el port de control", - "gui_settings_connection_type_socket_file_option": "Connecta fent servir un fitxer de socket", - "gui_settings_connection_type_test_button": "Comprova la connexió a Tor", - "gui_settings_control_port_label": "Port de control", - "gui_settings_socket_file_label": "Fitxer de sòcol", - "gui_settings_socks_label": "Port SOCKS", - "gui_settings_authenticate_label": "Paràmetres d'autenticació a Tor", - "gui_settings_authenticate_no_auth_option": "Sense autenticació, o autenticació amb galetes", - "gui_settings_authenticate_password_option": "Contrasenya", - "gui_settings_password_label": "Contrasenya", - "gui_settings_tor_bridges": "Ponts de Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "No facis servir ponts", - "gui_settings_tor_bridges_obfs4_radio_option": "Fes servir el transport integrat obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Fes servir el transport integrat obfs4 (necessita obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Fes servir el transport integrat meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Fes servir el transport integrat meek_lite (Azure, necessita obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Compte: fer funcionar els ponts meek_lite suposa un cost molt gran per al Tor Project .

Feu-los servir només si no podeu connectar-vos a Tor directament, a través d'obfs4, o a través de ponts normals.", - "gui_settings_tor_bridges_custom_radio_option": "Fes servir ponts personalitzats", - "gui_settings_tor_bridges_custom_label": "Podeu trobar-ne a https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Cap dels ponts que heu afegit funciona.\nComproveu-los o proveu d'afegir-ne de nous.", - "gui_settings_button_save": "Desa", - "gui_settings_button_cancel": "Cancel·la", - "gui_settings_button_help": "Ajuda", - "gui_settings_autostop_timer_checkbox": "Utilitza 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. Heu iniciat el navegador Tor? (disponible a torproject.org)", - "settings_error_socket_port": "No s'ha pogut establir la connexió al controlador de Tor a {}:{}.", - "settings_error_socket_file": "No s'ha pogut connectar al controlador de Tor fent servir el fitxer de socket {}.", - "settings_error_auth": "S'ha establert la connexió a {}:{} però ha fallat l'autenticació. Pot ser que no sigui un controlador de Tor?", - "settings_error_missing_password": "S'ha establer la connexió al controlador de Tor, però necessita una contrasenya d'autenticació.", - "settings_error_unreadable_cookie_file": "S'ha establert la connexió al controlador de Tor, però pot ser que la contrasenya sigui errònia o que faltin permisos de lectura en el fitxer de galetes.", - "settings_error_bundled_tor_not_supported": "La versió de Tor inclosa a OnionShare no funciona en mode de desenvolupador a Windows ni MacOS.", - "settings_error_bundled_tor_timeout": "La connexió està trigant molt. Podeu revisar que tingueu connexió a Internet i que el rellotge del sistema estigui en hora?", - "settings_error_bundled_tor_broken": "OnionShare no s'ha pogut connectar a Tor:\n{}", - "settings_test_success": "S'ha connectat al controlador de Tor.\n\nVersió de Tor: {}\nCompatible amb serveis onion efímers: {}.\nCompatible amb autenticació del client: {}.\nCompatible amb adreces .onion de nova generació: {}.", - "error_tor_protocol_error": "Hi ha hagut un error amb Tor: {}", - "error_tor_protocol_error_unknown": "Hi ha hagut un error desconegut amb Tor", - "error_invalid_private_key": "Aquest tipus de clau privada no està suportat", - "connecting_to_tor": "S'està connectant a la xarxa Tor", - "update_available": "Hi ha una nova versió d'OnionShare.Feu clic aquí per a obtenir-la.

Esteu usant {} i la més recent és {}.", - "update_error_check_error": "No s'ha pogut comprovar si hi ha una versió més nova. Pot ser que no estigueu connectat a Tor o que el web d'OnionShare estigui caigut?", - "update_error_invalid_latest_version": "No s'ha pogut comprovar si hi ha una versió més nova. La web d'OnionShare diu que l'última versió és '{}' però no s'ha pogut reconèixer…", - "update_not_available": "Aquesta és l'última versió d'OnionShare.", - "gui_tor_connection_ask": "Voleu anar a la configuració per a provar d'arreglar la connexió a Tor?", - "gui_tor_connection_ask_open_settings": "Sí", - "gui_tor_connection_ask_quit": "Surt", - "gui_tor_connection_error_settings": "Proveu 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\nAssegureu-vos que teniu connexió a internet, torneu a obrir l'OnionShare i prepareu la connexió a Tor.", - "gui_tor_connection_lost": "S'ha perdut la connexió amb Tor.", - "gui_server_started_after_autostop_timer": "El temporitzador de finalització automàtica ha acabat abans que s'iniciés el servidor. Torneu a compartir-ho.", - "gui_server_autostop_timer_expired": "El temporitzador de finalització automàtica ja s'ha acabat. Ajusteu-lo per a poder compartir.", - "share_via_onionshare": "Comparteix-ho amb l'OnionShare", - "gui_save_private_key_checkbox": "Fes servir una adreça persistent", - "gui_share_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot baixar els vostres fitxers fent servir el Navegador Tor: ", - "gui_receive_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot pujar fitxers al vostre ordinador fent servir el Navegador Tor: ", - "gui_url_label_persistent": "Aquest recurs no es tancarà ell sol.

Cada recurs compartit reutilitzarà aquesta mateixa adreça. Si voleu crear una adreça diferent per a cada recurs, desactiveu l'opció «Feu servir una adreça persistent».", - "gui_url_label_stay_open": "Aquest recurs no es tancarà ell sol.", - "gui_url_label_onetime": "Aquest recurs deixarà de compartir-se després de la primera baixada.", - "gui_url_label_onetime_and_persistent": "Aquest recurs no es tancarà ell sol.

Cada recurs compartit reutilitzarà aquesta mateixa adreça. Si voleu crear una adreça diferent per a cada recurs, desactiveu l'opció «Feu servir una adreça persistent».", - "gui_status_indicator_share_stopped": "A punt per a compartir", - "gui_status_indicator_share_working": "S'està iniciant…", - "gui_status_indicator_share_started": "S'està compartint", - "gui_status_indicator_receive_stopped": "A punt per a rebre", - "gui_status_indicator_receive_working": "S'està iniciant…", - "gui_status_indicator_receive_started": "S'està rebent", - "gui_file_info": "{} fitxers, {}", - "gui_file_info_single": "{} fitxer, {}", - "history_in_progress_tooltip": "{} en procés", - "history_completed_tooltip": "{} completats", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "Alerta: El mode de rebuda permet a qualsevol de pujar arxius al teu ordinador. Algú amb males intencions podria pendre el control de la teva màquina si obrissis arxius maliciosos que haguessin pujat. Obre només arxius de persones que confiïs si no saps com evitar aquests riscos.", - "gui_receive_mode_warning": "El mode de rebuda permet a qualsevol pujar fitxers al vostre ordinador.

Alguns fitxers podrien guanyar el control de la vostra màquina si els obriu. Obriu només fitxers de persones de confiança, o si realment sabeu el que esteu fent.", - "receive_mode_upload_starting": "S'està començant la pujada. Total: {}", - "receive_mode_received_file": "S'han rebut: {}", - "gui_mode_share_button": "Comparteix fitxers", - "gui_mode_receive_button": "Rep fitxers", - "gui_settings_receiving_label": "Configuració de rebuda", - "gui_settings_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Mode públic", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "S'ha carregat la pàgina", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "No s'ha pogut obrir la carpeta perquè el Nautilus no és disponible. El fitxer és a: {}", - "gui_settings_language_label": "Llengua preferida", - "gui_settings_language_changed_notice": "Torneu a obrir l'OnionShare perquè s'apliqui la llengua nova.", - "timeout_upload_still_running": "S'està esperant que acabi la pujada", - "gui_add_files": "Afegeix fitxers", - "gui_add_folder": "Afegeix una carpeta", - "gui_settings_onion_label": "Configuració Onion", - "gui_connect_to_tor_for_onion_settings": "Connecteu-vos a Tor per a configurar els serveis onion", - "error_cannot_create_data_dir": "No s'ha pogut crear la carpeta de dades d'OnionShare: {}", - "receive_mode_data_dir": "Els arxius que rebis apareixeran aquí: {}", - "gui_settings_data_dir_label": "Desa els fitxers a", - "gui_settings_data_dir_browse_button": "Explora", - "systray_page_loaded_message": "S'ha carregat l'adreça d'OnionShare", - "systray_share_started_title": "S'ha començat a compartir", - "systray_share_started_message": "S'està començant a enviar els fitxers a algú", - "systray_share_completed_title": "S'ha acabat de compartir", - "systray_share_completed_message": "S'ha acabat d'enviar els fitxers", - "systray_share_canceled_title": "S'ha deixat de compartir", - "systray_share_canceled_message": "Algú ha cancel·lat la recepció dels vostres fitxers", - "systray_receive_started_title": "S'ha començat a rebre", - "systray_receive_started_message": "Algú us està enviant fitxers", - "gui_all_modes_history": "Historial", - "gui_all_modes_clear_history": "Esborra-ho tot", - "gui_all_modes_transfer_started": "Ha començat el {}", - "gui_all_modes_transfer_finished_range": "S'ha transferit entre: {} - {}", - "gui_all_modes_transfer_finished": "Transferit el {}", - "gui_all_modes_transfer_canceled_range": "S'ha cancel·lat entre: {} - {}", - "gui_all_modes_transfer_canceled": "S'ha cancel·lat el {}", - "gui_all_modes_progress_complete": "%p%, {0:s} transferits.", - "gui_all_modes_progress_starting": "{0:s}, %p% (s'està calculant)", - "gui_all_modes_progress_eta": "{0:s}, Temps estimat: {1:s}, %p%", - "gui_share_mode_no_files": "Encara no s'han enviat fitxers", - "gui_share_mode_autostop_timer_waiting": "S'està esperant que finalitzi l'enviament", - "gui_receive_mode_no_files": "Encara no s'ha rebut cap fitxer", - "gui_receive_mode_autostop_timer_waiting": "S'està esperant que finalitzi la recepció", - "gui_stop_server_autostop_timer_tooltip": "El temporitzador d'aturada automàtica finalitza a les {}", - "gui_start_server_autostart_timer_tooltip": "El temporitzador d'inici automàtic finalitza a les {}", - "gui_waiting_to_start": "S'ha programat per a iniciar en {}. Feu clic per a cancel·lar.", - "gui_settings_autostart_timer_checkbox": "Usa un temporitzador d'inici automàtic", - "gui_settings_autostart_timer": "Inicia la compartició:", - "gui_server_autostart_timer_expired": "L'hora programada ja ha passat. Ajusteu-la per a començar la compartició.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "L'hora d'aturada automàtica no pot ser igual ni anterior que l'hora d'inici automàtic. Ajusteu-la per a començar la compartició.", - "gui_status_indicator_share_scheduled": "Programat…", - "gui_status_indicator_receive_scheduled": "Programat…", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "min", - "seconds_first_letter": "s", - "gui_website_url_description": "Qualsevol persona amb aquesta adreça d'OnionShare pot visitar el vostre lloc web fent servir el Navegador Tor: ", - "gui_mode_website_button": "Publica el lloc web", - "systray_site_loaded_title": "S'ha carregat el lloc web", - "systray_site_loaded_message": "S'ha carregat el lloc web de l'OnionShare", - "systray_website_started_title": "S'ha començat a compartir el lloc web", - "systray_website_started_message": "Algú està visitant el vostre lloc web", - "gui_website_mode_no_files": "Encara no s'han compartit llocs web", - "gui_visit_started": "Algú ha visitat el vostre lloc web {}", - "incorrect_password": "La contrasenya no és correcta", - "history_requests_tooltip": "{} peticions web", - "systray_individual_file_downloaded_title": "S'ha carregat el fitxer individual", - "gui_settings_individual_downloads_label": "Desmarqueu per a permetre la baixada de fitxers individuals", - "systray_individual_file_downloaded_message": "S'ha visualitzat el fitxer individual {}", - "gui_settings_csp_header_disabled_option": "Desactiva la capçalera de la Política de Seguretat de Contingut", - "gui_settings_website_label": "Configuració del lloc web", - "gui_new_tab_share_button": "Comparteix arxius", - "gui_new_tab_tooltip": "Obre una pestanya nova", - "gui_new_tab": "Nova pestanya", - "mode_settings_website_disable_csp_checkbox": "Desactiva la capçalera de la política de seguretat de contingut (permet que el vostre lloc web usi recursos de tercers)", - "mode_settings_receive_data_dir_browse_button": "Navega", - "mode_settings_receive_data_dir_label": "Desa els fitxers a", - "mode_settings_share_autostop_sharing_checkbox": "Atura la compartició després que s'hagin enviat els fitxers (desmarqueu-ho per a permetre baixar fitxers individuals)", - "mode_settings_legacy_checkbox": "Usa una adreça antiga (servei ceba v2, no recomanat)", - "mode_settings_autostop_timer_checkbox": "Atura el servei ceba a una hora programada", - "mode_settings_autostart_timer_checkbox": "Inicia el servei ceba a una hora programada", - "mode_settings_public_checkbox": "No usis cap contrasenya", - "mode_settings_persistent_checkbox": "Desa aquesta pestanya i obre-la automàticament quan obri l'OnionShare", - "mode_settings_advanced_toggle_hide": "Amaga la configuració avançada", - "mode_settings_advanced_toggle_show": "Mostra la configuració avançada", - "gui_quit_warning_cancel": "Cancel·la", - "gui_quit_warning_description": "La compartició és activa en alguna de les pestanyes. Si sortiu, es tancaran totes les pestanyes. Esteu segur de voler sortir?", - "gui_quit_warning_title": "N'esteu segur?", - "gui_close_tab_warning_cancel": "Cancel·la", - "gui_close_tab_warning_close": "Tanca", - "gui_close_tab_warning_website_description": "Esteu hostatjant un lloc web. Esteu segur de voler tancar aquesta pestanya?", - "gui_close_tab_warning_receive_description": "Esteu en procés de rebre fitxers. Esteu segur de voler tancar aquesta pestanya?", - "gui_close_tab_warning_share_description": "Esteu en el procés d'enviar fitxers. Esteu segur de voler tancar aquesta pestanya?", - "gui_close_tab_warning_persistent_description": "Aquesta pestanya és persistent. Si la tanqueu, perdreu l'adreça ceba que està usant. Esteu segur de voler tancar-la?", - "gui_close_tab_warning_title": "N'esteu segur?", - "gui_new_tab_website_description": "Hostatgeu un lloc web ceba HTML estàtic en el vostre ordinador.", - "gui_new_tab_website_button": "Publicar un lloc web", - "gui_new_tab_receive_description": "Convertiu el vostre ordinador en un servei de fiters en línia. Les persones podran usar el navegador Tor per a enviar-vos fitxers al vostre ordinador.", - "gui_new_tab_receive_button": "Rebre fitxers", - "gui_new_tab_share_description": "Trieu els fitxers del vostre ordinador que voleu enviar a algú altre. La persona a qui voleu enviar els fitxers haurà d'usar el navegador Tor per a baixar-los del vostre equip.", - "gui_qr_code_description": "Escanegeu aquest codi amb un lector de QR, com ara la càmera del telèfon, per a facilitar la compartició de l'adreça de l'OnionShare amb altres.", - "gui_qr_code_dialog_title": "Codi QR de l'OnionShare", - "gui_show_qr_code": "Mostra el codi QR", - "gui_receive_flatpak_data_dir": "Com que heu instal·lat l'OnionShare amb el Flatpak, heu de desar els fitxers en una carpeta dins ~/OnionShare.", - "gui_chat_stop_server": "Atura el servidor de xat", - "gui_chat_start_server": "Inicia el servidor de xat", - "gui_file_selection_remove_all": "Treu-ho tot", - "gui_remove": "Treu", - "error_port_not_available": "El port OnionShare no és disponible", - "gui_tab_name_chat": "Xat", - "gui_tab_name_website": "Lloc web", - "gui_tab_name_receive": "Rep", - "gui_tab_name_share": "Comparteix", - "gui_main_page_chat_button": "Comença el xat", - "gui_main_page_website_button": "Comença l'allotjatment", - "gui_main_page_receive_button": "Comença la recepció", - "gui_main_page_share_button": "Comença la compartició", - "gui_new_tab_chat_button": "Xat anònim", - "gui_open_folder_error": "No s'ha pogut obrir la carpeta amb xdg-open. El fitxer és aquí: {}", - "gui_chat_url_description": "Qualsevol persona amb aquesta adreça OnionShare pot unir-se a aquesta sala de xat fent servir el navegador Tor: " -} diff --git a/desktop/src/onionshare/resources/locale/ckb.json b/desktop/src/onionshare/resources/locale/ckb.json deleted file mode 100644 index 68122adb..00000000 --- a/desktop/src/onionshare/resources/locale/ckb.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "not_a_readable_file": "‌{0:s} nikare were xwendin.", - "other_page_loaded": "Malper bar bû", - "incorrect_password": "Şîfre nerast ye", - "close_on_autostop_timer": "Sekinî ji ber demê otomatîk-sekinandin qediya", - "closing_automatically": "Sekinî ji ber wergirtin bi giştî qediya", - "large_filesize": "Hîşyarî: Şandina parvekirinên mezin dikare bi demjimêran bidome", - "gui_drag_and_drop": "Ji bo parvekirin destpê bike belge û dosyayan bitikîne û bikşînê", - "gui_add": "Zêde bike", - "gui_add_files": "Belgeyan zêde bike", - "gui_add_folder": "Dosya zêde bike", - "gui_remove": "Jê bibe", - "gui_file_selection_remove_all": "Hemû jê bibe", - "gui_choose_items": "Hilbijêre", - "gui_share_start_server": "Weşanê destpê bike", - "gui_share_stop_server": "Weşan biseknîne", - "gui_share_stop_server_autostop_timer": "Weşan biseknîne ({})", - "gui_chat_start_server": "Server yê pêwendî destpê bike", - "gui_chat_stop_server": "Server yê pêwendî biseknîne", - "gui_stop_server_autostop_timer_tooltip": "Demê otomatîk-seknandin di {} disekine", - "gui_start_server_autostart_timer_tooltip": "Demê otomatîk-destpêkirin di {} destpê dike", - "gui_receive_start_server": "Mod ya wergirtinê destpê bike", - "gui_receive_stop_server": "Mod yâ wergirtinê betal bike", - "gui_receive_stop_server_autostop_timer": "Mod ya wergirtinê betal bike ({} maye)", - "gui_receive_flatpak_data_dir": "Ji ber tu Onionshare bi rêya Flatpak bar kir, pêwîste tu belge di dosyayek di nav ~/OnionShare qeyd bikî.", - "gui_copy_url": "Malper kopî bike", - "gui_canceled": "Betal bû", - "gui_copied_url_title": "Malpera OnionShare kopî bû", - "gui_copied_url": "Malpera OnionShare lis ser taxtê kopî bû", - "gui_show_qr_code": "QR kod nîşan bide", - "gui_qr_code_dialog_title": "OnionShare QR kod", - "gui_waiting_to_start": "Pilankirî ye di {} destpê bike. Bitkîne ji bo betal bike.", - "gui_please_wait": "Destpê dike...Bitikîne ji bo betal bike.", - "zip_progress_bar_format": "Dewisandin %p%", - "gui_settings_window_title": "Ayar", - "gui_settings_autoupdate_label": "Ji bo versyonekî nû kontrol bike", - "gui_settings_autoupdate_option": "Dema versyonekî nû derket min agahdar bike", - "gui_settings_autoupdate_timestamp": "Kontrolê dawî: {}", - "gui_settings_autoupdate_timestamp_never": "Tu carî nebû", - "gui_settings_autoupdate_check_button": "Ji bo versyonekî nû kontrol bike", - "gui_settings_connection_type_label": "OnionShare xwe çawa bi Tor ve girêbide?", - "gui_settings_connection_type_bundled_option": "Versyona Tor a di nav OnionShare de hatiye ava kirin bikar bîne", - "gui_settings_connection_type_automatic_option": "Hewl bide ayarê-otomatîk bi Tor-Browser bikar bîne", - "gui_settings_connection_type_control_port_option": "Bi kontrol port girê bide", - "gui_settings_connection_type_socket_file_option": "Bi nameya socket girê bide", - "gui_settings_connection_type_test_button": "Girêdanê ji bo Tor biceribîne", - "gui_settings_control_port_label": "Kontrol port", - "gui_settings_socket_file_label": "Socket name", - "gui_settings_socks_label": "SOCKS port", - "gui_settings_authenticate_label": "Ayarê kontrola rastbûyîna Tor", - "gui_settings_authenticate_no_auth_option": "Rastbûyin kontrol neke, an kontrola rastbûyîne bi cookie", - "gui_settings_authenticate_password_option": "Şîfre", - "gui_settings_password_label": "Şîfre", - "gui_settings_tor_bridges": "Alîkari ji pirên Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "Piran bi kar neyne", - "gui_settings_tor_bridges_obfs4_radio_option": "Transportê obfs4 yên îlankirî bikar bîne", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Transportên obfs4 yên îlankirî bikar bîne (obfs4proxy pêwîste)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Transportên meek_lite (Azure) yên îlankirî bikar bîne", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Transportên îlankirî yên meek_lite (Azure) bikar bîne (obfs4proxy pêwîste)", - "gui_settings_meek_lite_expensive_warning": "Hîşyarî: Pirên meek_lite ji bo Tor Project gelek buha ne.

Tenê bikar bîne dema tu rasterast ne bi Tor, obfs4 servîs û bi pirên ji rêzê nikarî werî girêdan.", - "gui_settings_tor_bridges_custom_radio_option": "Pirên bi xwe avakirî bikar bîne", - "gui_settings_tor_bridges_custom_label": "Tu dikarî piran li ser https://bridges.torproject.org bibînî", - "gui_settings_tor_bridges_invalid": "Tu pirên hilbijartî kar nakin.\nCarekî din kontrol bike an jî yên cûda zêde bike.", - "gui_settings_button_save": "Qeyd bike", - "gui_settings_button_cancel": "Betal bike", - "gui_settings_button_help": "Alîkarî", - "settings_test_success": "Bi rêvebirina Tor girêdayî ye.\n\nVersyona Tor: {}\nPiştgirî dide ephemeral onion servîs: {}.\nPiştgirî dide rastbûyîna muşterî: {}.\nPiştgirî dide malperên .onion yê pengava nû: {}.", - "connecting_to_tor": "Bi tora Tor tê girêdan", - "update_available": "OnionShare a nû derket. Li vir bitikîne ji bo daxistin.

Yê kû tu niha bikar tînî {} û yê herî nû {}.", - "update_error_invalid_latest_version": "Nedikarîbû ji bo versyonên nû kontrol bike: Malpera OnionShare dibêje versyona nû ya nayê bîra wî '{}'…", - "update_error_check_error": "Nedikarîbû ji bo versyonên nû kontrol bike: Gelo tu bi Tor ve girêdayî nîne, an jî malpera OnionShare girtî ye?", - "update_not_available": "Tu OnionShare ya herî dawî bikar tînî.", - "gui_tor_connection_ask": "Ji bo hilbijartinên girêdanên Tor ayarê veke?", - "gui_tor_connection_ask_open_settings": "Erê", - "gui_tor_connection_ask_quit": "Betal", - "gui_tor_connection_error_settings": "Hewl bide di nava ayarê de biguherîne çawa OnionShare xwe bi Tor ve girê bide.", - "gui_tor_connection_canceled": "Nikarîbû bi Tor re girêbide.\n\nEkîd bike tu bi înternetê re girêdayî ye, piştre OnionShare ji nûve veke û girêdanbûne wî bi Tor ve ayar bike.", - "gui_tor_connection_lost": "Girêdanbûn bi Tor ve qut bû.", - "gui_server_started_after_autostop_timer": "Demê otomatîk-sekinandin qediya berê server weşand. Ji kerema xwe weşanekê nû bide detpê kirin.", - "gui_server_autostop_timer_expired": "Demê otomotîk-sekinandin ji berê de qediya. Ji kerema xwe dem dirêj bike ji bo weşan destpê bike.", - "gui_server_autostart_timer_expired": "Demê pilankirî derbas bû. Ji kerema xwe dîsa dirêj bike ji bo weşan destpê bike.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Demê otomatîk-qedandin nikare ji demê otomatîk-despêkirin kêmtir and wek heve bibe. Ji kerema xwe demê wê dirêjtir bike ji bo weşan despê bike.", - "share_via_onionshare": "Bi rêya OnionShare parve bike", - "gui_share_url_description": "Her kesî bi vê malpera OnionShare bikare belgeryên te bi TorBrowser berjêr bike: ", - "gui_website_url_description": "Her kesî bi vê malpera OnionShare dikare were li ser malpera te dema TorBrowser bikar tîne: ", - "gui_receive_url_description": "Her kesekî bi vê malpera OnionShare dikare belgeran li ser komputera te bi kar anîna Tor Broweser bar bike: ", - "gui_url_label_persistent": "Ev weşan otomatîk nasekine.

Her weşanê bin vê de heman malper bikar tîne.(Ji bo maleperê yekcar bikar bînî \"Malpera bêdawî bikar bîne\" li ayarê de vemirîne.)", - "gui_url_label_stay_open": "Ev weşan bi xwe ve naqede.", - "gui_url_label_onetime": "Ev weşan piştî temambûna yekemîn biqede.", - "gui_url_label_onetime_and_persistent": "Ev weşan otomatîk nasekine.

Her weşanê bi vê ve girêdayî wê heman malper bikar bîne.(Ji bo malperekî yekcar bikar bînî \"Malperê bêdawî bikar bîne\" di ayarê de vemirîne.)", - "gui_status_indicator_share_stopped": "Ji bo weşanê amade", - "gui_status_indicator_share_working": "Destpê dike…", - "gui_status_indicator_share_scheduled": "Pilankirî…", - "gui_status_indicator_share_started": "Diweşîne", - "gui_status_indicator_receive_stopped": "Amade ji bo wergirtin", - "gui_status_indicator_receive_working": "Destpê dike…", - "gui_status_indicator_receive_scheduled": "Pilankirî…", - "gui_status_indicator_receive_started": "Werdigire", - "gui_file_info": "{} name. {}", - "gui_file_info_single": "{} name, {}", - "history_in_progress_tooltip": "{} di nava pêşketinê de", - "history_completed_tooltip": "{} bi dawî bû", - "history_requests_tooltip": "{} daxwazên torê", - "error_cannot_create_data_dir": "Ava kirina data dosya yê OnionShare ne gengaz bû: {}", - "gui_receive_mode_warning": "Moda wergirtinê dihêle mirovan belgeyan li ser komputerê te bar bike.

Hinek belge belkî dikarîn kontrol li ser komputerê te bike dema to wan vekî. Tenê belgeyan ji mirovên kû tu nas dikî veke, an jî dema tu baş dizanî tu çi dikî.
", - "gui_open_folder_error": "Vekirina doysa bi xdg-open pêk nehat. Belge li vir e: {}", - "gui_settings_language_label": "Zimanê xwestî", - "gui_settings_language_changed_notice": "OnionShare ji nûve veke ji bo ayarê ziman werin guhertin.", - "systray_menu_exit": "Derkeve", - "systray_page_loaded_title": "Malper bar bû", - "systray_page_loaded_message": "Malpera OnionShare bar bû", - "systray_share_started_title": "Weşandin destpêkir", - "systray_share_started_message": "Destpê bike nameyan ji bo kesekî re bişîne", - "systray_share_completed_title": "Weşandin qediya", - "systray_share_completed_message": "Şandina nameyan qediya", - "systray_share_canceled_title": "Weşandin betal bû", - "systray_share_canceled_message": "Kesekî wergirtina nameyên te betal kir", - "systray_receive_started_title": "Wergirtin destpê kir", - "systray_receive_started_message": "Kesekî nameyan ji te re dişîne", - "gui_all_modes_history": "Dîrok", - "gui_all_modes_clear_history": "Hemûyan jê bibe", - "gui_all_modes_transfer_started": "Destpê kirin {}", - "gui_all_modes_progress_complete": "%p%, {0:s} qediya.", - "gui_all_modes_progress_starting": "{0:s}, %p% (jimartin)", - "gui_all_modes_progress_eta": "{0:s}, ETA:{1:s}, %p%", - "gui_share_mode_no_files": "Name nehatin şandin haya niha", - "gui_share_mode_autostop_timer_waiting": "Benda qedandina şandinê ye", - "gui_website_mode_no_files": "Malper parve nekir haya niha", - "gui_receive_mode_no_files": "Name haya niha wernegirtî", - "gui_receive_mode_autostop_timer_waiting": "Bendê ye wergirtin biqede", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_new_tab": "Şibakê nû", - "gui_new_tab_tooltip": "Şibakê nû veke", - "gui_new_tab_share_button": "Nameyan biweşîne", - "gui_new_tab_receive_button": "Nameyan werbigire", - "gui_new_tab_website_button": "Malper host bike", - "gui_new_tab_chat_button": "Bê nasname bikeve pêwendî", - "gui_main_page_share_button": "Weşan destpê bike", - "gui_main_page_receive_button": "Wergirtin despê bike", - "gui_main_page_website_button": "Hosting destpê bike", - "gui_main_page_chat_button": "Pêwendî dayîn despê bike", - "gui_tab_name_share": "Parve bike", - "gui_tab_name_receive": "Werbigire", - "gui_tab_name_website": "Malper", - "gui_tab_name_chat": "Pêwendî", - "gui_close_tab_warning_title": "Tu bi rastî dibêjî?", - "gui_close_tab_warning_persistent_description": "Ev beş herdem e. Dema tu vemirînî wê malpera onion kû bi kar tê wenda bibe. Tu bi rastî dixwazî vemirînî?", - "gui_close_tab_warning_share_description": "Tu di nava şandina nameyan de ye. Tu di rastî dixwazî vê beşê vemirînî?", - "gui_close_tab_warning_receive_description": "Tu niha de wergirtina nameyan de yî. Tu bi rastî dixwazî vê beşê vemirînî?", - "gui_close_tab_warning_website_description": "Tu niha aktîv malperekî diweşînî. Tu bi rastî dixwazî vê beşê vermirînî?", - "gui_close_tab_warning_close": "Vemirîne", - "gui_close_tab_warning_cancel": "Betal bike", - "gui_quit_warning_title": "Bi rastî?", - "gui_quit_warning_description": "Weşandin hîn di hinek beşan de aktîf e. Dema tu vemirînî hemû beş werin girtin. Tu bi rastî dixwazî vemirînî?", - "gui_quit_warning_quit": "Vemirîne", - "gui_quit_warning_cancel": "Betal", - "mode_settings_advanced_toggle_show": "Ayarên pêsketîtir nîsan bide", - "mode_settings_advanced_toggle_hide": "Ayarên pêşketîtir veşêre", - "mode_settings_persistent_checkbox": "Vê beşê qeyd bike û veke dema ez OnionShare dîsa vekim", - "mode_settings_public_checkbox": "Şîfre bikar neyêne", - "mode_settings_autostart_timer_checkbox": "Servîsa onion di wextekî ayarkirî despê bike", - "mode_settings_autostop_timer_checkbox": "Servîsa onion di wextekî ayarkirî biseknîne", - "mode_settings_legacy_checkbox": "Malperekî kêrhatî bişxulîne(servîsa onion v2 nayê pêsniyar kirin)", - "mode_settings_share_autostop_sharing_checkbox": "Parvekirin piştî name haitn şandin biseknîne (Ji bo destûra berjêrkirina nameyên yekane tikandin derbixe)", - "mode_settings_receive_data_dir_label": "Nameyan li qeyd bike", - "mode_settings_receive_data_dir_browse_button": "Bigere", - "mode_settings_website_disable_csp_checkbox": "Sernivîsa kanûnên naveroka ewlekarî rê neke (destûr dide malpera te bi kaniyên sêyemîn kar bike)", - "gui_all_modes_transfer_finished_range": "Şandî {} - {}", - "gui_all_modes_transfer_finished": "Şandî {}", - "gui_all_modes_transfer_canceled_range": "Betal bû {} - {}", - "gui_all_modes_transfer_canceled": "Betal bû {}", - "settings_error_unknown": "Nikarbû bi Tor girê bide ji ber ayarê te li hev nayên.", - "settings_error_automatic": "Girêdanbûn bi navenda rêveberina Tor pêk nehat. Gelo Tor Browser (amade li torproject.org) li piştê de dixebite?", - "settings_error_socket_port": "Girêdan bi rêveberina Tor pêk nehat {}:{}.", - "settings_error_socket_file": "Girêdan bi rêvebirina Tor dema bikaranîa nameya socket pêk nehat{}.", - "settings_error_auth": "Bi {}:{} girêdayî ye, lê nikare jê bawer bike. Gelo ev ne rêvebirina Tor ye?", - "settings_error_missing_password": "Bi rêvebirina Tor girêdayî ye, lê ji bo bawer kirinê şîfre dixwaze.", - "settings_error_unreadable_cookie_file": "Bi rêvebirina Tor girêdayî te, lê şîfre rast nîne an jî destûra hesabê te ji xwendina nameya cookie nîne.", - "settings_error_bundled_tor_not_supported": "Bikaranîna nifşa Tor yê kû bi OnionShare bi hevre tê di moda avasazî de li ser Windows û macOS wê kar neke.", - "settings_error_bundled_tor_timeout": "Ji bo bi Tor re girê bide gelekî dirêj dike. Gelo tu ne bi înternetê re girêdayî ye an jî demê şîstema te neraste ?", - "settings_error_bundled_tor_broken": "OnionShare nedikarî xwe bi Tor girêbide:\n{}", - "error_port_not_available": "Port yê OnionShare tune", - "gui_rendezvous_cleanup_quit_early": "Zû bigire", - "gui_rendezvous_cleanup": "Li bendê ne haya kû Tor rêya hatî bikaranîn dîsa bigire ji bo ekîd bike nameyên te serkeftî hatine şandin.\n\nEw dikare hinek xulekan bidome.", - "gui_chat_url_description": " Herkesî bi vê navnîşanê OnionShare dikaretevlî vê rûniştinê bibebi bikaranîna Tor Browser:" -} diff --git a/desktop/src/onionshare/resources/locale/cs.json b/desktop/src/onionshare/resources/locale/cs.json deleted file mode 100644 index 901f6439..00000000 --- a/desktop/src/onionshare/resources/locale/cs.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "config_onion_service": "Nastavuji onion požadavky na portu {0:d}.", - "preparing_files": "Probíhá komprese souborů.", - "give_this_url": "Dejte tuto URL osobě, které dané soubory posíláte:", - "give_this_url_stealth": "Sděl příjemci tuto URL a HidServAuth:", - "ctrlc_to_stop": "Stiskněte Ctrl+C pro zastavení serveru", - "not_a_file": "{0:s} není platný soubor.", - "other_page_loaded": "URL loaded", - "closing_automatically": "Zastavuji automaticky, protože stahování skončilo", - "large_filesize": "Varování: Posílání velkých souborů může trvat hodiny", - "help_local_only": "Nepoužívat Tor: jen pro vývoj", - "help_stay_open": "Nechat běžet onion service po skončení stahování", - "help_stealth": "Create stealth onion service (advanced)", - "help_verbose": "Zaznamenat chyby na disk", - "help_filename": "Seznam souborů a složek ke sdílení", - "gui_drag_and_drop": "Táhni a pusť\nsoubory sem", - "gui_add": "Přidat", - "gui_delete": "Smazat", - "gui_choose_items": "Vybrat", - "gui_share_start_server": "Spustit sdílení", - "gui_share_stop_server": "Zastavit sdílení", - "gui_copy_url": "Kopírovat URL", - "gui_downloads": "Historie stahování", - "gui_canceled": "Zrušeno", - "gui_copied_url": "URL zkopírováno do schránky", - "gui_please_wait": "Spouštění... Klikněte pro zrušení.", - "gui_download_upload_progress_complete": "%p%, Uplynulý čas: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "Onionshare {0:s} | https://onionshare.org/", - "gui_share_quit_warning": "Jste si jistí, že chcete odejít? URL, kterou sdílíte poté nebude existovat.", - "gui_quit_warning_quit": "Zavřít", - "gui_quit_warning_dont_quit": "Zůstat", - "zip_progress_bar_format": "Zpracovávám soubory: %p%", - "error_stealth_not_supported": "K autorizaci klienta potřebujete alespoň Tor 0.2.9.1-alpha (or Tor Browser 6.5) a python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare vyžaduje nejméně Tor 0.2.7.1 a nejméně python3-stem 1.4.0.", - "gui_settings_window_title": "Nastavení", - "gui_settings_connection_type_label": "Jak by se měl OnionShare připojit k Toru?", - "gui_settings_connection_type_automatic_option": "Zkusit automatické nastavení s Tor Browserem", - "gui_settings_connection_type_control_port_option": "Připojit použitím control port", - "gui_settings_connection_type_socket_file_option": "Připojit použitím socket file", - "gui_settings_control_port_label": "Control port", - "gui_settings_socket_file_label": "Socket file", - "gui_settings_authenticate_label": "Autentizační nastavení Toru", - "gui_settings_authenticate_no_auth_option": "Žádná autentizace ani cookie autentizace", - "gui_settings_authenticate_password_option": "Heslo", - "gui_settings_password_label": "Heslo", - "gui_settings_button_save": "Uložit", - "gui_settings_button_cancel": "Zrušit", - "settings_saved": "Nastavení uloženo do {}", - "settings_error_unknown": "Nejde se připojit k ovladači Toru, protože nastavení nedává smysl.", - "settings_error_automatic": "Nejde se připojit k ovladači Toru. Běží Tor Browser na pozadí? Pokud ho ještě nemáte, můžete ho získat na:\nhttps://www.torproject.org/.", - "settings_error_socket_port": "Nejde se připojit k ovladači Toru na {}:{}.", - "settings_error_socket_file": "Can't connect to Tor controller using socket file {}.", - "settings_error_auth": "Připojen k {}:{}, ale nejde se autentizovat. Možná to není ovladač Toru?", - "settings_error_missing_password": "Připojen k ovladači Toru, ale vyžaduje heslo pro autentizaci.", - "settings_error_unreadable_cookie_file": "Připojen k ovladači Toru, ale nejde se autentizovat, protože heslo je možná špatné a váš uživatel nemá povolení číst soubor cookie.", - "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", - "error_tor_protocol_error": "Error talking to the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work.", - "give_this_url_receive": "Sděl tuto adresu odesilateli:", - "give_this_url_receive_stealth": "Sdělte tuto adresu a HidServAuth odesilateli:", - "no_available_port": "Port potřebný ke spuštění služeb onion nelze nalézt", - "not_a_readable_file": "{0:s} soubor není čitelný.", - "timeout_download_still_running": "Čeká se na konec stahování", - "systray_menu_exit": "Ukončit", - "systray_download_started_title": "Stahování pomocí OnionShare začalo", - "systray_download_started_message": "Někdo stahuje vaše soubory", - "systray_download_completed_title": "Stahování pomocí OnionShare skončilo", - "systray_download_completed_message": "Uživatel dokončil stahování vašich souborů", - "systray_download_canceled_title": "Stahování pomocí OnionShare bylo zrušeno", - "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_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_autostop_timer": "Zastavit mód přijímání ({} zbývá)", - "gui_copied_url_title": "OnionShare adresa zkopírována", - "gui_quit_title": "Ne tak rychle", - "gui_settings_stealth_option": "Autorizace klienta", - "gui_settings_autoupdate_label": "Kontrola nové verze", - "gui_settings_autoupdate_option": "Upozornit na dostupnost nové verze", - "gui_settings_autoupdate_timestamp": "Poslední kontrola {}", - "gui_settings_autoupdate_timestamp_never": "Nikdy", - "gui_settings_autoupdate_check_button": "Kontrola nové verze", - "gui_settings_sharing_label": "Nastavení sdílení", - "gui_settings_close_after_first_download_option": "Zastavit sdílení po odeslání dat", - "gui_settings_connection_type_bundled_option": "Použít Tor verzi vestavěnou v OnionShare", - "gui_settings_connection_type_test_button": "Test připojení do Tor sítě", - "gui_settings_socks_label": "SOCKS port", - "gui_settings_tor_bridges": "Tor bridge podpora", - "gui_settings_tor_bridges_no_bridges_radio_option": "Nepoužívať Tor bridge", - "gui_settings_tor_bridges_obfs4_radio_option": "Použít vestavěný obfs4 přenos", - "gui_receive_quit_warning": "Jste v procesu příjímání dat. Jste si opravdu jistí, že chcete OnionShare ukončit?", - "gui_settings_whats_this": "Co je to?", - "gui_settings_general_label": "Obecná nastavení", - "gui_add_files": "Přidat soubory", - "gui_add_folder": "Přidat adresář", - "gui_settings_onion_label": "Onion nastavení", - "close_on_autostop_timer": "Zastaveno protože vypršel čas auto-stop časovače", - "gui_stop_server_autostop_timer_tooltip": "Auto-stop skončí v {}", - "gui_start_server_autostart_timer_tooltip": "Auto-start skončí v {}", - "gui_waiting_to_start": "Naplánovaný start v {}. Klikněte pro zrušení.", - "incorrect_password": "Nesprávné heslo", - "gui_settings_individual_downloads_label": "Odškrtnout k povolení stahování libovolných souborů", - "gui_settings_csp_header_disabled_option": "Zakázat Conent Security Policy hlavičku", - "gui_hide": "Schovat", - "gui_reveal": "Odhalit", - "gui_qr_label_auth_string_title": "Soukromý klíč", - "gui_qr_label_url_title": "OnionShare adresa", - "gui_qr_code_dialog_title": "OnionShare QR kód", - "gui_show_qr_code": "Zobrazit QR kód", - "gui_copied_client_auth": "Soukromý klíč zkopírován do schránky", - "gui_copied_client_auth_title": "Soukromý klíč zkopírován", - "gui_please_wait_no_button": "Spouštění…", - "gui_copy_client_auth": "Kopírovat soukromý klíč", - "gui_receive_flatpak_data_dir": "Protože jste nainstalovali OnionShare pomocí Flatpaku, musíte soubory uložit do složky v ~/OnionShare.", - "gui_chat_stop_server": "Zastavit chatovací server", - "gui_chat_start_server": "Spustit chatovací server", - "gui_file_selection_remove_all": "Odstranit Vše", - "gui_remove": "Odstranit" -} diff --git a/desktop/src/onionshare/resources/locale/da.json b/desktop/src/onionshare/resources/locale/da.json deleted file mode 100644 index 57ff605a..00000000 --- a/desktop/src/onionshare/resources/locale/da.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "config_onion_service": "Opsætter onion-tjeneste på port {0:d}.", - "preparing_files": "Komprimerer filer.", - "give_this_url": "Giv adressen til modtageren:", - "give_this_url_stealth": "Giv adressen og HidServAuth-linjen til modtageren:", - "ctrlc_to_stop": "Tryk på Ctrl+C for at stoppe serveren", - "not_a_file": "{0:s} er ikke en gyldig fil.", - "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_autostop_timer": "Stoppede fordi timer med automatisk stop 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", - "systray_menu_exit": "Afslut", - "systray_download_started_title": "OnionShare-download begyndte", - "systray_download_started_message": "En bruger begyndte download af dine filer", - "systray_download_completed_title": "OnionShare-download færdig", - "systray_download_completed_message": "Brugeren er færdig med at downloade dine filer", - "systray_download_canceled_title": "OnionShare-download annulleret", - "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_autostop_timer": "Stop deling efter et vist antal sekunder", - "help_stealth": "Brug klientautentifikation (avanceret)", - "help_verbose": "Log OnionShare-fejl til stdout, og webfejl til disk", - "help_filename": "Liste over filer eller mapper som skal deles", - "help_config": "Tilpasset placering af JSON-konfigurationsfil (valgfri)", - "gui_drag_and_drop": "Træk og slip filer og mapper her\nfor at begynde at dele", - "gui_add": "Tilføj", - "gui_delete": "Slet", - "gui_choose_items": "Vælg", - "gui_share_start_server": "Begynd at dele", - "gui_share_stop_server": "Stop deling", - "gui_copy_url": "Kopiér adresse", - "gui_downloads": "Downloadhistorik", - "gui_canceled": "Annulleret", - "gui_copied_url": "OnionShare-adressen blev kopieret til udklipsholderen", - "gui_please_wait": "Starter ... klik for at annullere.", - "gui_download_upload_progress_complete": ".", - "gui_download_upload_progress_starting": "{0:s}, %p% (udregner anslået ankomsttid)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_share_quit_warning": "Du er ved at afsende filer. Er du sikker på, at du vil afslutte OnionShare?", - "gui_quit_warning_quit": "Afslut", - "gui_quit_warning_dont_quit": "Annuller", - "zip_progress_bar_format": "Komprimerer: %p%", - "error_stealth_not_supported": "For at bruge klientautentifikation skal du have mindst Tor 0.2.9.1-alpha (eller Tor Browser 6.5) og python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare kræver mindst både Tor 0.2.7.1 og python3-stem 1.4.0.", - "gui_settings_window_title": "Indstillinger", - "gui_settings_stealth_option": "Brug klientautentifikation", - "gui_settings_autoupdate_label": "Søg efter ny version", - "gui_settings_autoupdate_option": "Giv mig besked når der findes en ny version", - "gui_settings_autoupdate_timestamp": "Sidste søgning: {}", - "gui_settings_autoupdate_timestamp_never": "Aldrig", - "gui_settings_autoupdate_check_button": "Søg efter ny version", - "gui_settings_sharing_label": "Delingsindstillinger", - "gui_settings_close_after_first_download_option": "Stop deling efter filerne er blevet sendt", - "gui_settings_connection_type_label": "Hvordan skal OnionShare oprette forbindelse til Tor?", - "gui_settings_connection_type_bundled_option": "Brug den Tor-version som er indbygget i OnionShare", - "gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser", - "gui_settings_connection_type_control_port_option": "Opret forbindelse med kontrolport", - "gui_settings_connection_type_socket_file_option": "Opret forbindelse med sokkelfil", - "gui_settings_connection_type_test_button": "Test forbindelsen til Tor", - "gui_settings_control_port_label": "Kontrolport", - "gui_settings_socket_file_label": "Sokkelfil", - "gui_settings_socks_label": "SOCKS-port", - "gui_settings_authenticate_label": "Indstillinger for Tor-autentifikation", - "gui_settings_authenticate_no_auth_option": "Ingen autentifikation, eller cookieautentifikation", - "gui_settings_authenticate_password_option": "Adgangskode", - "gui_settings_password_label": "Adgangskode", - "gui_settings_tor_bridges": "Understøttelse af Tor-bro", - "gui_settings_tor_bridges_no_bridges_radio_option": "Brug ikke broer", - "gui_settings_tor_bridges_obfs4_radio_option": "Brug indbyggede obfs4 udskiftelige transporter", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Brug indbyggede obfs4 udskiftelige transporter (kræver obfs4proxy)", - "gui_settings_tor_bridges_custom_radio_option": "Brug tilpassede broer", - "gui_settings_tor_bridges_custom_label": "Du kan få broer fra https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Ingen at de broer du tilføjede virker.\nDobbelttjek dem eller tilføj andre.", - "gui_settings_button_save": "Gem", - "gui_settings_button_cancel": "Annuller", - "gui_settings_button_help": "Hjælp", - "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?", - "settings_error_socket_port": "Kan ikke oprette forbindelse til Tor-kontrolleren på {}:{}.", - "settings_error_socket_file": "Kan ikke oprette forbindelse til Tor-kontrolleren med sokkelfilen {}.", - "settings_error_auth": "Forbundet til {}:{}, men kan ikke autentificere. Er det fordi det ikke er en Tor-kontroller?", - "settings_error_missing_password": "Forbundet til Tor-kontroller, men den kræver en adgangskode for at autentificere.", - "settings_error_unreadable_cookie_file": "Forbundet til Tor-kontrolleren, men adgangskoden kan være forkert, eller din bruger har ikke tilladelse til at læse cookiefilen.", - "settings_error_bundled_tor_not_supported": "Brug af den Tor-version som kom med OnionShare virker ikke i udviklertilstand på Windows eller macOS.", - "settings_error_bundled_tor_timeout": "For længe om at oprette forbindelse til Tor. Måske har du ikke forbindelse til internettet, eller går dit systems ur forkert?", - "settings_error_bundled_tor_broken": "OnionShare kunne ikke oprette forbindelse til Tor:\n{}", - "settings_test_success": "Forbundet til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige oniontjenester: {}.\nUnderstøtter klientautentifikation: {}.\nUnderstøtter næstegenerations .onion-adresser: {}.", - "error_tor_protocol_error": "Der opstod en fejl med Tor: {}", - "connecting_to_tor": "Opretter forbindelse til Tor-netværket", - "update_available": "Der findes en ny OnionShare. Klik her for at hente den.

Du bruger {} og den seneste er {}.", - "update_error_check_error": "Kunne ikke søge efter nye version: Måske har du ikke oprettet forbindelse til Tor eller også er OnionShare-webstedet nede?", - "update_error_invalid_latest_version": "Kunne ikke søge efter ny version: OnionShare-webstedet siger at den seneste version er den ugenkendelige '{}' …", - "update_not_available": "Du kører den seneste OnionShare.", - "gui_tor_connection_ask": "Åbn indstillingerne for at rette forbindelsen til Tor?", - "gui_tor_connection_ask_open_settings": "Ja", - "gui_tor_connection_ask_quit": "Afslut", - "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_autostop_timer": "Timeren med automatisk stop løb ud inden serveren startede. Opret venligst en ny deling.", - "gui_server_autostop_timer_expired": "Timeren med automatisk stop er allerede løbet ud. Juster den venligst for at begynde at dele.", - "share_via_onionshare": "Del via OnionShare", - "gui_save_private_key_checkbox": "Brug en vedvarende adresse", - "gui_copied_url_title": "Kopierede OnionShare-adresse", - "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_autostop_timer_checkbox": "Brug timer med autostop", - "gui_url_label_persistent": "Delingen stopper ikke automatisk.

Enhver 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 er færdig for første gang.", - "gui_url_label_onetime_and_persistent": "Delingen stopper ikke automatisk.

Enhver efterfølgende deling bruger den samme adresse igen (hvis du vil bruge engangsadresser, så deaktivér \"Brug vedvarende adresse\", i indstillingerne).", - "gui_file_info": "{} filer, {}", - "gui_file_info_single": "{} fil, {}", - "info_in_progress_downloads_tooltip": "{} igangværende downloads", - "info_completed_downloads_tooltip": "{} færdige downloads", - "give_this_url_receive": "Giv adressen til afsenderen:", - "give_this_url_receive_stealth": "Giv adressen og HidServAuth til afsenderen:", - "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_autostop_timer": "Stop deling ({})", - "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_autostop_timer_tooltip": "Timer med autostop slutter ved {}", - "gui_receive_start_server": "Start modtagetilstand", - "gui_receive_stop_server": "Stop modtagetilstand", - "gui_receive_stop_server_autostop_timer": "Stop modtagetilstand ({} 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", - "gui_status_indicator_share_stopped": "Klar til at dele", - "gui_status_indicator_share_working": "Starter …", - "gui_status_indicator_share_started": "Deler", - "gui_status_indicator_receive_stopped": "Klar til at modtage", - "gui_status_indicator_receive_working": "Starter …", - "gui_status_indicator_receive_started": "Modtager", - "receive_mode_received_file": "Modtaget: {}", - "gui_mode_share_button": "Del filer", - "gui_mode_receive_button": "Modtag filer", - "gui_settings_receiving_label": "Modtagelsesindstillinger", - "gui_settings_downloads_label": "Gem filer til", - "gui_settings_downloads_button": "Gennemse", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "Modtagetilstand kan ikke stoppes af afsenderen", - "gui_settings_public_mode_checkbox": "Offentlig tilstand", - "systray_close_server_title": "OnionShare-server lukket", - "systray_close_server_message": "En bruger lukkede serveren", - "systray_page_loaded_title": "Side indlæst", - "systray_download_page_loaded_message": "En bruger indlæste downloadsiden", - "systray_upload_page_loaded_message": "En bruger indlæste uploadsiden", - "gui_uploads": "Uploadhistorik", - "gui_no_uploads": "Ingen uploads endnu", - "gui_clear_history": "Ryd alle", - "gui_upload_finished_range": "Uploadede {} til {}", - "gui_upload_finished": "Uploadet {}", - "gui_settings_language_label": "Foretrukne sprog", - "gui_settings_language_changed_notice": "Genstart OnionShare for at få det nye sprog til at træde i kraft.", - "gui_settings_meek_lite_expensive_warning": "Advarsel: meek_lite-broerne er meget dyre at køre for Tor-projektet.

Brug dem kun hvis du ikke er i stand til at oprette forbindelse til Tor direkte, via obfs4-transporter eller andre normale broer.", - "gui_share_url_description": "Alle med OnionShare-adressen kan downloade dine filer, med Tor Browser: ", - "gui_receive_url_description": "Alle med OnionShare-adressen kan uploade filer til din computer, med Tor Browser: ", - "history_in_progress_tooltip": "{} igangværende", - "history_completed_tooltip": "{} færdige", - "info_in_progress_uploads_tooltip": "{} igangværende upload(s)", - "info_completed_uploads_tooltip": "{} upload(s) færdige", - "error_cannot_create_downloads_dir": "Kunne ikke oprette modtagetilstand-mappe: {}", - "receive_mode_downloads_dir": "Filer som sendes til dig vises i denne mappe: {}", - "receive_mode_warning": "Advarsel: Modtagetilstand lader folk uploade filer til din computer. Nogle filer kan potentielt tage kontrol over din computer hvis du åbner dem. Åbn kun ting fra folk du har tillid til, eller hvis du ved hvad du har gang i.", - "gui_receive_mode_warning": "Modtagetilstand lader folk uploade filer til din computer.

Nogle filer kan potentielt tage kontrol over din computer hvis du åbner dem. Åbn kun ting fra folk du har tillid til, eller hvis du ved hvad du gør.", - "receive_mode_upload_starting": "Upload med samlet størrelse på {} starter", - "gui_open_folder_error_nautilus": "Kan ikke åbne mappe fordi nautilus ikke er tilgængelig. Filen er her: {}", - "timeout_upload_still_running": "Venter på at upload skal blive færdig", - "gui_add_files": "Tilføj filer", - "gui_add_folder": "Tilføj mappe", - "gui_connect_to_tor_for_onion_settings": "Opret forbindelse til Tor for at se indstillinger for onion-tjeneste", - "error_cannot_create_data_dir": "Kunne ikke oprette OnionShare-datamappe: {}", - "receive_mode_data_dir": "Filer som sendes til dig vises i denne mappe: {}", - "gui_settings_data_dir_label": "Gem filer i", - "gui_settings_data_dir_browse_button": "Gennemse", - "systray_page_loaded_message": "OnionShare-adresse indlæst", - "systray_share_started_title": "Deling startet", - "systray_share_started_message": "Starter på at sende filer til nogen", - "systray_share_completed_title": "Deling færdig", - "systray_share_completed_message": "Færdig med at sende filer", - "systray_share_canceled_title": "Deling annulleret", - "systray_share_canceled_message": "Nogen annullerede modtagelsen af dine filer", - "systray_receive_started_title": "Modtagelse startet", - "systray_receive_started_message": "Nogen sender filer til dig", - "gui_all_modes_history": "Historik", - "gui_all_modes_clear_history": "Ryd alle", - "gui_all_modes_transfer_started": "Startede {}", - "gui_all_modes_transfer_finished_range": "Overførte {} - {}", - "gui_all_modes_transfer_finished": "Overførte {}", - "gui_all_modes_progress_complete": "%p%, {0:s} forløbet.", - "gui_all_modes_progress_starting": "{0:s}, %p% (udregner)", - "gui_all_modes_progress_eta": "{0:s}, anslået ankomsttid: {1:s}, %p%", - "gui_share_mode_no_files": "Der er endnu ikke sendt nogle filer", - "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 nogle filer", - "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", - "gui_stop_server_autostop_timer_tooltip": "Timer med automatisk stop slutter {}", - "gui_start_server_autostart_timer_tooltip": "Timer med automatisk start slutter {}", - "gui_waiting_to_start": "Planlagt til start om {}. Klik for at annullere.", - "gui_settings_autostart_timer_checkbox": "Brug timer med autostart", - "gui_settings_autostart_timer": "Start deling ved:", - "gui_server_autostart_timer_expired": "Det planlagte tidspunkt er allerede passeret. Juster det venligst for at begynde at dele.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Timeren med automatisk stop må ikke være det samme som eller tidligere end timeren med automatisk start. Juster den venligst for at begynde at dele.", - "gui_status_indicator_share_scheduled": "Planlagt …", - "gui_status_indicator_receive_scheduled": "Planlagt …", - "days_first_letter": "d", - "hours_first_letter": "t", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_website_url_description": "Alle med OnionShare-adressen kan besøge dit websted med Tor Browser: ", - "gui_mode_website_button": "Udgiv websted", - "gui_website_mode_no_files": "Der er endnu ikke delt noget websted", - "incorrect_password": "Forkert adgangskode", - "gui_settings_individual_downloads_label": "Fravælg for at tillade download af individuelle filer", - "history_requests_tooltip": "{}-webforespørgsler", - "gui_settings_csp_header_disabled_option": "Deaktivér indholdets header om sikkerhedspolitik", - "gui_settings_website_label": "Webstedsindstillinger", - "gui_new_tab_share_description": "Vælg filer på din computer som skal sendes til andre. Personen eller dem du vil sende filer til skal bruge Tor Browser til at downloade dem fra dig.", - "mode_settings_website_disable_csp_checkbox": "Deaktivér Content Security Policy-header (giver dit websted mulighed for at bruge tredjepartsressourcer)", - "gui_new_tab_receive_description": "Brug din computer som en online-dropbox. Andre vil kunne bruge Tor Browser til at sende filer til din computer.", - "mode_settings_share_autostop_sharing_checkbox": "Stop deling efter filerne er blevet sendt (fravælg for at gøre det muligt at downloade individuelle filer)", - "mode_settings_legacy_checkbox": "Brug en udgået adresse (v2 oniontjeneste, anbefales ikke)", - "mode_settings_autostop_timer_checkbox": "Stop oniontjeneste på det planlagte tidspunkt", - "mode_settings_autostart_timer_checkbox": "Start oniontjeneste på det planlagte tidspunkt", - "mode_settings_persistent_checkbox": "Gem fanebladet og åbn det automatisk når jeg åbner OnionShare", - "gui_quit_warning_description": "Deling er aktiv i nogle af dine faneblade. Hvis du afslutter, så lukkes alle dine faneblade. Er du sikker på, at du vil afslutte?", - "gui_close_tab_warning_website_description": "Du er vært for et websted. Er du sikker på, at du vil lukke fanebladet?", - "gui_close_tab_warning_receive_description": "Du er ved at modtage filer. Er du sikker på, at du vil lukke fanebladet?", - "gui_close_tab_warning_share_description": "Du er ved at sende filer. Er du sikker på, at du vil lukke fanebladet?", - "gui_close_tab_warning_persistent_description": "Fanebladet er vedvarende. Hvis du lukker det, så mister du den onionadresse som det bruger. Er du sikker på, at du vil lukke det?", - "gui_new_tab_website_description": "Vær vært for et statisk HTML-onionwebsted fra din computer.", - "gui_new_tab_website_button": "Vær vært for et websted", - "gui_new_tab_receive_button": "Modtag filer", - "gui_new_tab_share_button": "Del filer", - "gui_new_tab_tooltip": "Åbn et nyt faneblad", - "mode_settings_receive_data_dir_browse_button": "Gennemse", - "mode_settings_receive_data_dir_label": "Gem filer i", - "mode_settings_public_checkbox": "Brug ikke en adgangskode", - "mode_settings_advanced_toggle_hide": "Skjul avancerede indstillinger", - "mode_settings_advanced_toggle_show": "Vis avancerede indstillinger", - "gui_quit_warning_cancel": "Annuller", - "gui_quit_warning_title": "Er du sikker?", - "gui_close_tab_warning_cancel": "Annuller", - "gui_close_tab_warning_close": "Luk", - "gui_close_tab_warning_title": "Er du sikker?", - "gui_new_tab": "Nyt faneblad", - "gui_tab_name_chat": "Chat", - "gui_tab_name_website": "Websted", - "gui_tab_name_receive": "Modtag", - "gui_tab_name_share": "Del", - "gui_new_tab_chat_button": "Chat anonymt", - "gui_open_folder_error": "Kunne ikke åbne mappen med xdg-open. Filen er her: {}", - "gui_qr_code_description": "Skan QR-koden med en QR-læser såsom kameraet i din telefon for at gøre det lettere at dele OnionShare-adressen med andre.", - "gui_qr_code_dialog_title": "QR-kode til OnionShare", - "gui_show_qr_code": "Vis QR-kode", - "gui_receive_flatpak_data_dir": "Da du installerede OnionShare med Flatpak, så skal du gemme filer til en mappe i ~/OnionShare.", - "gui_chat_stop_server": "Stop chatserver", - "gui_chat_start_server": "Start chatserver", - "gui_chat_stop_server_autostop_timer": "Stop chatserver ({})", - "gui_file_selection_remove_all": "Fjern alle", - "gui_remove": "Fjern", - "gui_main_page_share_button": "Begynd at dele", - "gui_main_page_receive_button": "Begynd at modtage", - "gui_main_page_website_button": "Begynd at være vært", - "gui_main_page_chat_button": "Begynd at chatte", - "gui_chat_url_description": "Alle med denne OnionShare-adresse kan deltage i chatrummet med Tor Browser: ", - "error_port_not_available": "OnionShare-port ikke tilgængelig", - "gui_rendezvous_cleanup": "Venter på at Tor-kredsløb lukker for at være sikker på, at det lykkedes at overføre dine filer.\n\nDet kan tage noget tid.", - "gui_rendezvous_cleanup_quit_early": "Afslut tidligt", - "history_receive_read_message_button": "Læs meddelelse", - "mode_settings_receive_webhook_url_checkbox": "Brug underretningswebhook", - "mode_settings_receive_disable_files_checkbox": "Deaktivér upload af filer", - "mode_settings_receive_disable_text_checkbox": "Deaktivér indsendelse af tekst", - "mode_settings_title_label": "Tilpasset titel", - "gui_color_mode_changed_notice": "Genstart OnionShare for at anvende den nye farvetilstand.", - "gui_status_indicator_chat_started": "Chatter", - "gui_status_indicator_chat_scheduled": "Planlagt …", - "gui_status_indicator_chat_working": "Starter …", - "gui_status_indicator_chat_stopped": "Klar til at chatte" -} diff --git a/desktop/src/onionshare/resources/locale/de.json b/desktop/src/onionshare/resources/locale/de.json deleted file mode 100644 index 04cce9e3..00000000 --- a/desktop/src/onionshare/resources/locale/de.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "preparing_files": "Dateien werden komprimiert.", - "give_this_url": "Gib diese URL an den Empfänger:", - "ctrlc_to_stop": "Drücke Strg+C um den Server anzuhalten", - "not_a_file": "{0:s} ist keine gültige Datei.", - "other_page_loaded": "Daten geladen", - "closing_automatically": "Gestoppt, da die Übertragung erfolgreich beendet wurde", - "large_filesize": "Achtung: Das Senden von großen Dateien kann Stunden dauern", - "help_local_only": "Tor nicht verwenden (nur für Entwicklung)", - "help_stay_open": "Den Server weiterlaufen lassen, nachdem die Dateien verschickt wurden", - "help_verbose": "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, um sie zu teilen", - "gui_add": "Hinzufügen", - "gui_delete": "Löschen", - "gui_choose_items": "Auswählen", - "gui_share_start_server": "Teilen beginnen", - "gui_share_stop_server": "Freigabe beenden", - "gui_copy_url": "Adresse kopieren", - "gui_downloads": "Bisherige Downloads", - "gui_copied_url": "OnionShare-Adresse wurde in die Zwischenablage kopiert", - "gui_please_wait": "Startet… Klicken zum Abbrechen.", - "timeout_download_still_running": "Warte auf Beendigung des Downloads", - "systray_menu_exit": "Beenden", - "gui_settings_authenticate_password_option": "Passwort", - "gui_settings_password_label": "Passwort", - "gui_settings_button_save": "Speichern", - "gui_settings_button_cancel": "Abbrechen", - "gui_settings_button_help": "Hilfe", - "gui_settings_autostop_timer": "Teilen stoppen 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", - "systray_download_completed_message": "Der Benutzer hat deine Dateien heruntergeladen", - "systray_download_canceled_title": "OnionShare Download abgebrochen", - "systray_download_canceled_message": "Der Benutzer hat den Download abgebrochen", - "gui_canceled": "Abgebrochen", - "gui_quit_warning_quit": "Beenden", - "gui_quit_warning_dont_quit": "Abbrechen", - "gui_settings_window_title": "Einstellungen", - "gui_settings_autoupdate_timestamp": "Letzte Überprüfung: {}", - "gui_settings_autoupdate_timestamp_never": "Niemals", - "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:", - "give_this_url_receive": "Gib diese URL dem Sender:", - "give_this_url_receive_stealth": "Gib diese URL und die HidServAuth-Zeile an den Sender:", - "not_a_readable_file": "{0:s} ist keine lesbare Datei.", - "no_available_port": "Es konnte kein freier verfügbarer Port gefunden werden, um OnionShare zu starten", - "close_on_autostop_timer": "Angehalten, da der automatische 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_autostop_timer": "Freigabe beenden ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Zeit läuft in {} Sekunden ab", - "gui_settings_connection_type_control_port_option": "Verbinde über den Steuerungs-Port", - "gui_settings_connection_type_socket_file_option": "Verbinde über eine Socket-Datei", - "gui_settings_control_port_label": "Steuerungs-Port", - "gui_settings_socket_file_label": "Socket-Datei", - "gui_settings_socks_label": "SOCKS-Port", - "gui_settings_authenticate_no_auth_option": "Keine Authentifizierung oder Authentifizierung per Cookie", - "gui_settings_tor_bridges_no_bridges_radio_option": "Keine Bridges benutzen", - "gui_settings_tor_bridges_obfs4_radio_option": "Benutze integrierte „obfs4 pluggable transports“", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Benutze integrierte „obfs4 pluggable transports“ (benötigt obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Benutze integrierte „meek_lite (Amazon) pluggable transports“", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Benutze integrierte „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_autostop_timer_checkbox": "Automatische Stoppuhr verwenden", - "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 Tor-Netzwerk", - "gui_tor_connection_ask_quit": "Beenden", - "gui_tor_connection_lost": "Verbindung zu Tor getrennt.", - "help_stealth": "Nutze Klientauthorisierung (fortgeschritten)", - "gui_receive_start_server": "Empfangsmodus starten", - "gui_receive_stop_server": "Empfangsmodus stoppen", - "gui_receive_stop_server_autostop_timer": "Empfangsmodus stoppen ({} verbleibend)", - "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_download_upload_progress_complete": "%p%, {0:s} vergangen.", - "gui_download_upload_progress_starting": "{0:s}, %p% (berechne)", - "gui_download_upload_progress_eta": "{0:s}, Voraussichtliche Dauer: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Nicht so schnell", - "gui_share_quit_warning": "Du versendest gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?", - "gui_receive_quit_warning": "Du empfängst gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?", - "zip_progress_bar_format": "Komprimiere: %p%", - "error_stealth_not_supported": "Um die Client-Authorisierung zu nutzen, benötigst du mindestens Tor 0.2.9.1-alpha (oder Tor Browser 6.5) und python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare benötigt mindestens sowohl Tor 0.2.7.1 als auch python3-stem 1.4.0.", - "gui_settings_whats_this": "Was ist das?", - "gui_settings_stealth_option": "Client-Authorisierung benutzen", - "gui_settings_autoupdate_label": "Suche nach neuer Version", - "gui_settings_autoupdate_option": "Benachrichtige mich, wenn eine neue Version verfügbar ist", - "gui_settings_autoupdate_check_button": "Suche nach neuer Version", - "gui_settings_general_label": "Allgemeine Einstellungen", - "gui_settings_sharing_label": "Freigabe-Einstellungen", - "gui_settings_connection_type_automatic_option": "Versuche automatische Konfiguration mittels Tor Browser", - "gui_settings_connection_type_test_button": "Verbindung zu Tor testen", - "gui_settings_authenticate_label": "Authentifizierungseinstellungen für Tor", - "gui_settings_tor_bridges": "Mittels einer Tor-Bridge verbinden?", - "gui_settings_meek_lite_expensive_warning": "Achtung: Die „meek-azure“-Bridges sind für das Tor-Projekt sehr kostspielig.

Nutze sie nur, wenn du dich nicht direkt, per obfs4-Transport oder über andere, normale Bridges zum Tor-Netzwerk verbinden kannst.", - "gui_settings_tor_bridges_invalid": "Keine der ausgewählten Bridges funktioniert. Überprüfe sie oder gib andere an.", - "settings_error_unknown": "Kann nicht zum Tor-Controller verbinden, weil deine Einstellungen keinen Sinn ergeben.", - "settings_error_automatic": "Kann nicht zum Tor-Controller verbinden. Läuft der Tor Browser (kann von https://www.torproject.org/ heruntergeladen werden) im Hintergrund?", - "settings_error_socket_port": "Kann unter {}:{} nicht zum Tor-Controller verbinden.", - "settings_error_unreadable_cookie_file": "Verbindung zum Tor-Controller hergestellt, aber dein Passwort ist falsch oder dein Nutzer darf die Cookie-Datei nicht lesen.", - "settings_error_bundled_tor_not_supported": "Im Entwicklermodus auf Windows oder macOS kannst du nicht die Tor-Version nutzen, die mit OnionShare geliefert wird.", - "settings_error_bundled_tor_timeout": "Die Verbindung zum Tor-Netzwerk braucht zu lang. Bist du vielleicht nicht mit dem Internet verbunden oder geht die Uhr auf deinem System falsch?", - "settings_error_bundled_tor_broken": "OnionShare konnte sich nicht mit Tor verbinden:\n{}", - "settings_test_success": "Verbunden mit dem Tor-Controller.\n\nTor-Version: {}\nUnterstützt vergängliche Onion-Dienste: {}.\nUnterstützt Client-Authorisierung: {}.\nUnterstützt .onion-Adressen der nächsten Generation: {}.", - "error_tor_protocol_error": "Es gab einen Fehler mit Tor: {}", - "error_tor_protocol_error_unknown": "Es gab einen unbekannten Fehler mit Tor", - "error_invalid_private_key": "Diese Art von privatem Schlüssel wird nicht unterstützt", - "update_available": "Es gibt eine neue Version von OnionShare. Klicke hier, um sie herunterzuladen.

Du benutzt {}, und die neueste Version ist {}.", - "update_error_check_error": "Konnte nicht nach neueren Versionen suchen: Bist du vielleicht nicht mit dem Tor-Netzwerk verbunden oder ist die OnionShare-Webseite offline?", - "update_error_invalid_latest_version": "Konnte nicht nach neueren Versionen suchen: Laut OnionShare-Webseite ist die neueste Version die nicht bestimmbare Version '{}'…", - "update_not_available": "Du benutzt die neueste Version von OnionShare.", - "gui_tor_connection_ask": "Einstellungen öffnen, um die Verbindung zum Tor-Netzwerk zu reparieren?", - "gui_tor_connection_ask_open_settings": "Ja", - "gui_tor_connection_error_settings": "Versuche in den Einstellungen zu ändern, wie sich OnionShare mit dem Tor-Netzwerk verbindet.", - "gui_tor_connection_canceled": "Konnte keine Verbindung zu Tor herstellen.\n\nStelle sicher, dass du mit dem Internet verbunden bist, öffne OnionShare erneut und richte die Verbindung zu Tor ein.", - "share_via_onionshare": "Teilen über OnionShare", - "gui_save_private_key_checkbox": "Nutze eine gleichbleibende Adresse", - "gui_share_url_description": "Jeder mit dieser OnionShare-Adresse dem privaten Schlüssel kann deine Dateien mit dem Tor Browser herunterladen: ", - "gui_receive_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann mit dem Tor Browser Dateien auf deinen Computer hochladen: ", - "gui_url_label_persistent": "Diese Freigabe wird nicht automatisch stoppen.

Jede folgende Freigabe wird die Adresse erneut nutzen. (Um Adressen nur einmal zu nutzen, schalte „Nutze beständige Adressen“ in den Einstellungen aus.)", - "gui_url_label_stay_open": "Diese Freigabe wird nicht automatisch stoppen.", - "gui_url_label_onetime": "Diese Freigabe wird nach dem ersten vollständigen Download stoppen.", - "gui_status_indicator_share_working": "Starte…", - "gui_status_indicator_share_started": "Teilen", - "gui_status_indicator_receive_stopped": "Bereit zum Empfangen", - "gui_status_indicator_receive_working": "Starte…", - "gui_status_indicator_receive_started": "Empfange", - "gui_file_info": "{} Dateien, {}", - "gui_file_info_single": "{} Datei, {}", - "history_completed_tooltip": "{} abgeschlossen", - "info_in_progress_uploads_tooltip": "{} Upload(s) laufen", - "info_completed_uploads_tooltip": "{} Upload(s) vollständig", - "error_cannot_create_downloads_dir": "Konnte den Ordner für den Empfängermodus nicht erstellen: {}", - "receive_mode_downloads_dir": "Dateien, die dir geschickt werden, findest du in diesem Ordner: {}", - "receive_mode_warning": "Achtung: Im Empfängermodus können Leute Dateien auf deinen Computer laden. Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust oder wenn du genau weißt, was du tust.", - "gui_receive_mode_warning": "Im Empfangsmodus können Personen Dateien auf deinen Computer laden.

Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust, oder wenn du genau weißt, was du tust.", - "receive_mode_received_file": "Empfangen: {}", - "gui_mode_share_button": "Versende Dateien", - "gui_mode_receive_button": "Empfange Dateien", - "gui_settings_receiving_label": "Empfangs-Einstellungen", - "gui_settings_downloads_label": "Speichere Dateien in", - "gui_settings_downloads_button": "Durchsuchen", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "Der Empfängermodus kann vom Versender gestoppt werden", - "gui_settings_public_mode_checkbox": "Öffentlicher Modus", - "systray_close_server_title": "OnionShareServer gestoppt", - "systray_close_server_message": "Ein Nutzer hat den Server gestoppt", - "systray_download_page_loaded_message": "Ein Nutzer hat die Downloadseite geöffnet", - "systray_upload_page_loaded_message": "Ein Nutzer hat die Uploadseite geöffnet", - "gui_uploads": "Uploadhistorie", - "gui_no_uploads": "Bisher keine Uploads", - "gui_clear_history": "Alle löschen", - "gui_upload_in_progress": "Upload gestartet {}", - "gui_download_in_progress": "Download gestartet {}", - "gui_open_folder_error_nautilus": "Kann den Ordner nicht öffnen, weil Nautilus nicht verfügbar ist. Die Datei ist hier: {}", - "gui_settings_language_label": "Sprache", - "gui_settings_language_changed_notice": "Starte OnionShare neu, damit die neue Sprache übernommen wird.", - "help_config": "Ort deiner eigenen JSON Konfigurationsdatei (optional)", - "timeout_upload_still_running": "Warte bis Upload vollständig ist", - "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_autostop_timer": "Die Zeit ist abgelaufen, bevor der Server gestartet werden konnte. Bitte starte einen erneuten Teilvorgang.", - "gui_server_autostop_timer_expired": "Der automatische Stopp-Timer ist bereits abgelaufen. Bitte pass diesen an, 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", - "systray_page_loaded_title": "Seite geladen", - "gui_upload_finished_range": "{} hochgeladen zu {}", - "gui_upload_finished": "{} hochgeladen", - "gui_add_files": "Dateien hinzufügen", - "gui_add_folder": "Ordner hinzufügen", - "gui_connect_to_tor_for_onion_settings": "Verbinde dich mit Tor, um die Einstellungen für die Onion-Dienste zu sehen", - "gui_url_label_onetime_and_persistent": "Diese Freigabe wird nicht automatisch stoppen. >br>
Jede nachfolgende Freigabe wird die gleiche Adresse nutzen. (Um jedes Mal eine andere Adresse zu nutzen, schalte „Nutze eine gleichbleibende Adresse“ in den Einstellungen aus.)", - "gui_settings_onion_label": "Adresseinstellungen", - "error_cannot_create_data_dir": "Der Ordner für die OnionShare-Dateien konnte nicht erstellt werden: {}", - "receive_mode_data_dir": "Die Dateien, die dir geschickt wurden, findest du in folgendem Ordner: {}", - "gui_settings_data_dir_label": "Speichere Dateien in", - "gui_settings_data_dir_browse_button": "Durchsuchen", - "systray_page_loaded_message": "OnionShare-Adresse geladen", - "systray_share_started_title": "Freigabe gestartet", - "systray_share_started_message": "Upload von Dateien begonnen", - "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_receive_started_title": "Empfange", - "systray_receive_started_message": "Jemand sendet dir Dateien", - "gui_all_modes_history": "Verlauf", - "gui_all_modes_clear_history": "Liste leeren", - "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": "Noch keine Dateien versendet", - "gui_share_mode_autostop_timer_waiting": "Warte auf Abschluss des Sendens", - "gui_receive_mode_no_files": "Noch keine Dateien empfangen", - "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.", - "gui_settings_autostart_timer_checkbox": "Automatische Startuhr verwenden", - "gui_settings_autostart_timer": "Teilen starten um:", - "gui_waiting_to_start": "Geplant in {} zu starten. Klicken zum Abbrechen.", - "gui_stop_server_autostop_timer_tooltip": "Automatischer Stopptimer endet um {}", - "gui_start_server_autostart_timer_tooltip": "Automatischer Stopptimer endet um {}", - "gui_server_autostart_timer_expired": "Die geplante Zeit ist bereits abgelaufen. Bitte passe diese an, um das Teilen zu starten.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die automatische Stoppzeit kann nicht gleich oder früher als die Startzeit sein. Bitte passe die Zeiten an, um das Teilen zu starten.", - "gui_status_indicator_share_scheduled": "Geplant…", - "gui_status_indicator_receive_scheduled": "Geplant…", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_website_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann deine Webseite mit dem Tor Browser ansehen: ", - "gui_mode_website_button": "Webseite veröffentlichen", - "systray_site_loaded_title": "Webseite geladen", - "systray_site_loaded_message": "OnionShare Website geladen", - "systray_website_started_title": "Freigabe der Webseite starten", - "systray_website_started_message": "Jemand besucht deine Webseite", - "gui_website_mode_no_files": "Noch keine Webseite freigegeben", - "gui_visit_started": "Jemand hat deine Webseite besucht {}", - "incorrect_password": "Falsches Passwort", - "systray_individual_file_downloaded_title": "Individuelle Datei geladen", - "gui_settings_individual_downloads_label": "Abwählen, um den Download einzelner Dateien zu erlauben", - "history_requests_tooltip": "{} Web-Anfragen", - "systray_individual_file_downloaded_message": "Individuelle Datei {} betrachtet", - "mode_settings_share_autostop_sharing_checkbox": "Dateifreigabe beenden, sobald alle Dateien versendet wurden (abwählen, um das Herunterladen einzelner Dateien zu erlauben)", - "mode_settings_website_disable_csp_checkbox": "Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen von Drittanbietern auf deiner Onion-Webseite einzubinden)", - "mode_settings_receive_data_dir_browse_button": "Durchsuchen", - "mode_settings_receive_data_dir_label": "Dateien speichern unter", - "mode_settings_legacy_checkbox": "Benutze ein veraltetes Adressformat (Onion-Dienste-Adressformat v2, nicht empfohlen)", - "mode_settings_autostop_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt stoppen", - "mode_settings_autostart_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt starten", - "mode_settings_public_checkbox": "Dies ist ein öffentlicher OnionShare-Dienst (deaktiviert den privaten Schlüssel)", - "mode_settings_persistent_checkbox": "Speichere diesen Reiter und öffne ihn automatisch, wenn ich OnionShare starte", - "mode_settings_advanced_toggle_hide": "Erweiterte Einstellungen ausblenden", - "mode_settings_advanced_toggle_show": "Erweiterte Einstellungen anzeigen", - "gui_quit_warning_cancel": "Abbrechen", - "gui_quit_warning_description": "In einigen Reitern sind noch Dateifreigaben aktiv. Wenn du beendest, werden alle Reiter geschlossen. Möchtest du wirklich beenden?", - "gui_quit_warning_title": "Bist du sicher?", - "gui_close_tab_warning_cancel": "Abbrechen", - "gui_close_tab_warning_close": "Schließen", - "gui_close_tab_warning_website_description": "Du hostest gerade eine Webseite. Möchtest du diesen Reiter wirklich schließen?", - "gui_close_tab_warning_receive_description": "Du empfängst gerade Dateien. Möchtest du diesen Reiter wirklich schließen?", - "gui_close_tab_warning_share_description": "Du versendest gerade Dateien. Möchtest du diesen Reiter wirklich schließen?", - "gui_close_tab_warning_persistent_description": "Dies ist ein dauerhafter Reiter. Wenn du ihn schließt, verlierst du die dazugehörige Onion-Adresse. Möchtest du den Reiter wirklich schließen?", - "gui_close_tab_warning_title": "Bist du sicher?", - "gui_new_tab_website_description": "Hoste eine statische HTML-Onion-Webseite auf deinem Computer.", - "gui_new_tab_website_button": "Webseite veröffentlichen", - "gui_new_tab_receive_description": "Verwandle deinen Computer in eine Online-Packstation. Nutzer des Tor Browsers können dir Dateien auf deinen Computer schicken.", - "gui_new_tab_receive_button": "Dateien empfangen", - "gui_new_tab_share_description": "Wähle Dateien auf deinem Computer, um sie jemand anderem zu schicken. Die Empfänger benötigen den Tor Browser, um die Dateien empfangen zu können.", - "gui_new_tab_share_button": "Dateien teilen", - "gui_new_tab_tooltip": "Einen neuen Reiter öffnen", - "gui_new_tab": "Neuer Reiter", - "gui_settings_website_label": "Webseiten-Einstellung", - "gui_settings_csp_header_disabled_option": "Content-Security-Policy-Header deaktivieren", - "gui_tab_name_website": "Webseite", - "gui_tab_name_chat": "Chat", - "gui_tab_name_receive": "Empfangen", - "gui_tab_name_share": "Teilen", - "gui_file_selection_remove_all": "Alle entfernen", - "gui_remove": "Entfernen", - "gui_new_tab_chat_button": "Anonym chatten", - "gui_qr_code_dialog_title": "OnionShare QR-Code", - "gui_show_qr_code": "QR-Code anzeigen", - "gui_chat_stop_server": "Chatserver stoppen", - "gui_chat_start_server": "Chatserver starten", - "gui_main_page_chat_button": "Chat starten", - "gui_main_page_website_button": "Webseiten-Freigabe starten", - "gui_main_page_receive_button": "Empfangsmodus starten", - "gui_main_page_share_button": "Freigabe starten", - "gui_open_folder_error": "Fehler beim Öffnen des Ordners mit xdg-open. Die Datei befindet sich hier: {}", - "gui_qr_code_description": "Scanne diesen QR-Code mit einem QR-Scanner, wie zB. mit der Kamera deines Smartphones, um die OnionShare-Adresse einfacher mit anderen zu teilen.", - "gui_receive_flatpak_data_dir": "Da OnionShare durch Flatpak installiert wurde, müssen Dateien im Verzeichnis ~/OnionShare gespeichert werden.", - "gui_chat_url_description": "Jeder mit dieser OnionShare-Adresse und dem privaten Schlüssel kann diesem Chatroom beitreten, indem er den Tor Browser benutzt: ", - "error_port_not_available": "OnionShare-Port nicht verfügbar", - "gui_rendezvous_cleanup": "Warte darauf, dass alle Tor-Verbindungen beendet wurden, um den vollständigen Dateitransfer sicherzustellen.\n\nDies kann einige Minuten dauern.", - "gui_rendezvous_cleanup_quit_early": "Vorzeitig beenden", - "gui_color_mode_changed_notice": "OnionShare neustarten um den neuen Farbmodus zu aktivieren.", - "history_receive_read_message_button": "Nachricht gelesen", - "mode_settings_receive_webhook_url_checkbox": "Benutze Benachrichtigungs-WebHook", - "mode_settings_receive_disable_files_checkbox": "Datei-Übermittlung deaktivieren", - "mode_settings_receive_disable_text_checkbox": "Text-Übermittlung deaktivieren", - "mode_settings_title_label": "Benutzerdefinierter Titel", - "gui_status_indicator_chat_started": "Chatted", - "gui_status_indicator_chat_scheduled": "Geplant…", - "gui_status_indicator_chat_working": "Startet…", - "gui_status_indicator_chat_stopped": "Bereit zum Chatten", - "gui_settings_theme_dark": "Dunkel", - "gui_settings_theme_light": "Hell", - "gui_settings_theme_auto": "Automatisch", - "gui_settings_theme_label": "Design", - "gui_client_auth_instructions": "Sende anschließend den privaten Schlüssel, um den Zugriff auf deinen OnionShare-Dienst zu ermöglichen:", - "gui_url_instructions_public_mode": "Sende die OnionShare-Adresse unten:", - "gui_url_instructions": "Sende zunächst die folgende OnionShare-Adresse:", - "gui_chat_url_public_description": "Jeder mit dieser OnionShare-Adresse kann diesem Chatroom beitreten, indem er den Tor Browser benutzt: ", - "gui_receive_url_public_description": "Jeder mit dieser OnionShare-Adresse kann mit dem Tor-Browser Dateien auf deinen Computer hochladen: ", - "gui_website_url_public_description": "Jeder mit dieser OnionShare-Adresse kann deine Webseite mit dem Tor Browser ansehen: ", - "gui_share_url_public_description": "Jeder mit dieser OnionShare-Adresse kann deine Dateien mit dem Tor Browser herunterladen: ", - "gui_server_doesnt_support_stealth": "Sorry, diese Version von Tor unterstützt keine Stealth (Client Authentication). Bitte versuche es mit einer neueren Version von Tor oder benutze den \"öffentlichen\" Modus, wenn es nicht privat sein muss.", - "gui_please_wait_no_button": "Starte…", - "gui_hide": "Ausblenden", - "gui_reveal": "Zeigen", - "gui_qr_label_auth_string_title": "Privater Schlüssel", - "gui_qr_label_url_title": "OnionShare-Adresse", - "gui_copied_client_auth": "Privater Schlüssel in die Zwischenablage kopiert", - "gui_copied_client_auth_title": "Privater Schlüssel kopiert", - "gui_copy_client_auth": "Privaten Schlüssel kopieren", - "gui_dragdrop_sandbox_flatpak": "Um die Flatpak Sandbox sicherer zu machen, wird Drag und Drop nicht unterstützt. Bitte nutze stattdessen die Buttons \"Dateien hinzufügen\" und \"Ordner hinzufügen\".", - "gui_tor_settings_window_title": "Tor Einstellungen", - "gui_settings_controller_extras_label": "Tor Einstellungen", - "gui_settings_bridge_use_checkbox": "Benutze eine Brigde", - "gui_settings_bridge_radio_builtin": "Wähle eine eingebaute Bridge", - "gui_settings_bridge_none_radio_option": "Keine Bridge verwenden", - "gui_settings_bridge_moat_button": "Neue Bridge verwenden", - "gui_settings_bridge_custom_placeholder": "Schreibe im Format adresse:port (eine pro Zeile)", - "gui_settings_moat_bridges_invalid": "Du hast noch keine Bridge von torproject.org angefragt.", - "gui_settings_stop_active_tabs_label": "Es laufen noch Services in deinen Tabs.\nDu musst alle Services beenden, bevor du die Tor Einstellungen ändern kannst.", - "gui_settings_version_label": "Du verwendest OnionShare {}", - "gui_settings_help_label": "Du benötigst Hilfe? Gehe zu docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Sende einen benutzerdefinierten Content Security Policy header", - "moat_contact_label": "Kontaktiere BridgeDB...", - "moat_captcha_label": "Löse das CAPTCHA um eine Bridge zu laden.", - "moat_captcha_placeholder": "Gib die Zeichen auf dem Bild ein", - "moat_captcha_submit": "Absenden", - "moat_captcha_reload": "Neu laden", - "moat_bridgedb_error": "Fehler beim kontaktieren der BridgeDB.", - "moat_captcha_error": "Die Lösung ist nicht korrekt. Bitte nochmal versuchen.", - "mode_tor_not_connected_label": "OnionShare ist nicht mit dem Tor Netzwerk verbunden", - "gui_settings_bridge_moat_radio_option": "Verwende eine Bridge von torproject.org", - "moat_solution_empty_error": "Du musst die Zeichen auf dem Bild eingeben", - "gui_settings_bridge_custom_radio_option": "Stelle eine Bridge aus einer dir bekannten vertraulichen Quelle bereit", - "gui_settings_tor_bridges_label": "Brigdes helfen dir das Tor Netzwerk an Orten zu verwenden, wo es blockiert wird. Je nachdem wo du bist, funktioniert eine Bridge besser als eine andere." -} diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json deleted file mode 100644 index d47d92d2..00000000 --- a/desktop/src/onionshare/resources/locale/el.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "config_onion_service": "Δημιουργία onion service στην πύλη {0:d}.", - "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_autostop_timer": "Τερματίστηκε λόγω αυτόματης διακοπής", - "closing_automatically": "Τερματίστηκε λόγω ολοκλήρωσης της λήψης", - "timeout_download_still_running": "Αναμονή ολοκλήρωσης της λήψης", - "large_filesize": "Προειδοποίηση: Η αποστολή μεγάλου όγκου δεδομένων μπορεί να διαρκέσει ώρες", - "systray_menu_exit": "Έξοδος", - "systray_download_started_title": "Η λήψη του OnionShare ξεκίνησε", - "systray_download_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να κατεβάζει τα αρχεία σου", - "systray_download_completed_title": "Η λήψη του OnionShare ολοκληρώθηκε", - "systray_download_completed_message": "Ο/η χρήστης/τρια ολοκλήρωσε την λήψη των αρχείων σου", - "systray_download_canceled_title": "Η λήψη του OnionShare ακυρώθηκε", - "systray_download_canceled_message": "Ο/η χρήστης/τρια ακύρωσε τη λήψη", - "systray_upload_started_title": "Η λήψη του OnionShare ξεκίνησε", - "systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου", - "help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)", - "help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά την αποστολή των αρχείων", - "help_autostop_timer": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων", - "help_stealth": "Κάντε χρήση εξουσιοδότησης πελάτη (Για προχωρημένους)", - "help_receive": "Λάβετε διαμοιρασμένα αρχεία αντι να τα στέλνετε", - "help_verbose": "Κατέγραψε τα σφάλματα του OnionShare στο stdout (συνήθως οθόνη) και τα σφάλματα web στον δίσκο", - "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_autostop_timer": "Διακοπή διαμοιρασμού ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", - "gui_receive_start_server": "Εκκίνηση λειτουργίας λήψης", - "gui_receive_stop_server": "Τερματισμός λειτουργίας λήψης", - "gui_receive_stop_server_autostop_timer": "Διακοπή λειτουργίας λήψης (απομένουν {})", - "gui_receive_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}", - "gui_copy_url": "Αντιγραφή διεύθυνσης", - "gui_copy_hidservauth": "Αντιγραφή HidServAuth", - "gui_downloads": "Ιστορικό Λήψεων", - "gui_no_downloads": "Καμία λήψη ως τώρα", - "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": "%p%, {0:s} πέρασαν.", - "gui_download_upload_progress_starting": "{0:s}, %p% (υπολογισμός)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "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": "Ακύρωση", - "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": "Έχοντας αποθηκεύσει το ιδιωτικό σας κλειδί για επαναχρησιμοποίηση, μπορείτε πλέον να επιλέξετε την αντιγραφή του HidServAuth σας.", - "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_sharing_label": "Ρυθμίσεις κοινοποίησης", - "gui_settings_close_after_first_download_option": "Τερματισμός κοινοποίησης αρχείων μετά την αποστολή τους", - "gui_settings_connection_type_label": "Πώς να συνδέεται το OnionShare με το Tor;", - "gui_settings_connection_type_bundled_option": "Χρησιμοποιήστε την έκδοση του Tor που είναι ενσωματωμένη στο OnionShare", - "gui_settings_connection_type_automatic_option": "Προσπάθεια αυτόματης παραμετροποίησης με τον Tor Browser", - "gui_settings_connection_type_control_port_option": "Σύνδεση μέσω θύρας ελέγχου", - "gui_settings_connection_type_socket_file_option": "Σύνδεση μέσω αρχείου μετάβασης", - "gui_settings_connection_type_test_button": "Έλεγχος σύνδεσης με το Tor", - "gui_settings_control_port_label": "Πύλη ελέγχου", - "gui_settings_socket_file_label": "Αρχείο μετάβασης", - "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;", - "gui_settings_tor_bridges_no_bridges_radio_option": "Να μη χρησιμοποιηθούν γέφυρες", - "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": "Προσοχή: Οι γέφυρες meek_azure επιβαρύνουν τη λειτουργία του Tor Project.

Χρησιμοποιήστε τες μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών γεφυρών.", - "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων γεφυρών", - "gui_settings_tor_bridges_custom_label": "Αποκτήστε γέφυρες στο https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Καμία γέφυρα που προσθέσατε δεν λειτουργεί. Ελέγξτε ξανά ή προσθέστε άλλες.", - "gui_settings_button_save": "Αποθήκευση", - "gui_settings_button_cancel": "Άκυρο", - "gui_settings_button_help": "Βοήθεια", - "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 στις {}:{}.", - "settings_error_socket_file": "Δεν ήταν δυνατή η σύνδεση στον ελεγκτή Tor χρησιμοποιώντας το αρχείο socket {}.", - "settings_error_auth": "Εγινε σύνδεση με {}:{}, αλλα δεν μπορεί να γίνει πιστοποίηση. Ίσως δεν είναι ελεγκτής Tor;", - "settings_error_missing_password": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.", - "settings_error_unreadable_cookie_file": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλα ο κωδικός ενδέχεται να είναι λανθασμένος, ή δεν σας επιτρέπεται να διαβάζετε αρχεία cookie.", - "settings_error_bundled_tor_not_supported": "Η χρήση της έκδοσης Tor που περιέχεται στο OnionShare δεν είναι συμβατή με το περιβάλλον προγραμματιστή σε Windows ή macOS.", - "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor καθυστερεί αρκετά. Ίσως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι του συστήματος δεν είναι ρυθμισμένο σωστά;", - "settings_error_bundled_tor_broken": "Το OnionShare δεν μπορεί να συνδεθεί με το Tor στο παρασκήνιο:\n{}", - "settings_test_success": "Εγινε σύνδεση με τον ελεγκτή Tor.\n\nΕκδοση Tor: {}\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": "Υπάρχει διαθέσιμη ενημέρωση. Κάντε κλικ εδώ για να την αποκτήσετε.

Χρησιμοποιείτε την έκδοση {}, ενώ η πιο πρόσφατη είναι η {}.", - "update_error_check_error": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: ίσως δεν είστε συνδεδεμένος στο Tor ή ο ιστότοπος OnionShare είναι εκτός λειτουργίας;", - "update_error_invalid_latest_version": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: η ιστοσελίδα 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_autostop_timer": "Το χρονόμετρο αυτόματης διακοπής τελείωσε πριν την εκκίνηση του server. Παρακαλώ κάντε ένα νέο διαμοιρασμό.", - "gui_server_autostop_timer_expired": "Το χρονόμετρο αυτόματης διακοπής έχει ήδη τελειώσει. Παρακαλώ ρυθμίστε το για να ξεκινήσετε το διαμοιρασμό.", - "share_via_onionshare": "Μοιραστείτε μέσω OnionShare", - "gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης", - "gui_share_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", - "gui_receive_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να ανεβάσει αρχεία στον υπολογιστή σας χρησιμοποιώντας το Tor Browser: ", - "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": "{} ολοκληρώθηκε", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Δημόσια λειτουργία", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Η σελίδα φορτώθηκε", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "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 για να εφαρμοστεί η αλλαγή γλώσσας.", - "timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος", - "gui_add_files": "Προσθήκη αρχείων", - "gui_add_folder": "Προσθήκη φακέλου", - "gui_connect_to_tor_for_onion_settings": "Συνδεθείτε στο Tor για να δείτε τις ρυθμίσεις της υπηρεσίας 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_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_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": "Δεν έχουν αποσταλεί ακόμα αρχεία", - "gui_share_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της αποστολής", - "gui_receive_mode_no_files": "Δεν έχει γίνει λήψη αρχείων ακόμα", - "gui_receive_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της λήψης", - "gui_settings_onion_label": "Ρυθμίσεις Onion", - "gui_all_modes_transfer_canceled_range": "Ακυρώθηκε {} - {}", - "gui_all_modes_transfer_canceled": "Ακυρώθηκε {}", - "gui_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματης διακοπής λήγει σε {}", - "gui_start_server_autostart_timer_tooltip": "Το χρονόμετρο αυτόματης εκκίνησης λήγει σε {}", - "gui_waiting_to_start": "Προγραμματισμένο να ξεκινήσει σε {}. Κάντε κλικ για ακύρωση.", - "gui_settings_autostart_timer_checkbox": "Χρήση χρονομέτρου αυτόματης έναρξης", - "gui_settings_autostart_timer": "Εκκίνηση διαμοιρασμού σε:", - "gui_server_autostart_timer_expired": "Η προγραμματισμένη ώρα έχει ήδη παρέλθει. Παρακαλώ ρυθμίστε τη για να ξεκινήσετε το διαμοιρασμό.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Η ώρα αυτόματης διακοπής δεν μπορεί να είναι ίδια ή νωρίτερα από την ώρα έναρξης. Παρακαλούμε ρυθμίστε τη για έναρξη του διαμοιρασμού.", - "gui_status_indicator_share_scheduled": "Δρομολόγηση…", - "gui_status_indicator_receive_scheduled": "Προγραμματισμένο…", - "days_first_letter": "ημ", - "hours_first_letter": "ώ", - "minutes_first_letter": "λ", - "seconds_first_letter": "δ", - "gui_website_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να επισκεφτεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", - "gui_mode_website_button": "Δημοσίευση ιστοσελίδας", - "gui_website_mode_no_files": "Δεν έχει γίνει διαμοιρασμός ιστοσελίδας ακόμα", - "incorrect_password": "Λάθος κωδικός", - "gui_settings_individual_downloads_label": "Απεπιλέξτε για να επιτρέψετε τη λήψη μεμονωμένων αρχείων", - "history_requests_tooltip": "{} αιτήματα δικτύου", - "gui_settings_csp_header_disabled_option": "Απενεργοποίηση της κεφαλίδας Content Security Policy", - "gui_settings_website_label": "Ρυθμίσεις ιστοσελίδας", - "gui_open_folder_error": "Το άνοιγμα του φακέλου με xdg-open απέτυχε. Το αρχείο βρίσκετε : {}", - "gui_receive_flatpak_data_dir": "Επειδή έχετε εγκαταστήσει το OnionShare μέσω Flatpak, θα πρέπει να αποθηκεύσετε τα αρχεία μέσα σε έναν φάκελο στο ~/OnionShare.", - "gui_chat_stop_server": "Τερματισμός διακομιστή συνομιλίας", - "gui_chat_start_server": "Έναρξη διακομιστή συνομιλίας", - "mode_settings_website_disable_csp_checkbox": "Μην στέλνετε την προεπιλεγμένη κεφαλίδα Πολιτικής Ασφάλειας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)", - "mode_settings_receive_data_dir_browse_button": "Επιλογή", - "mode_settings_receive_data_dir_label": "Αποθήκευση αρχείων σε", - "mode_settings_share_autostop_sharing_checkbox": "Τερματισμός κοινής χρήσης με την ολοκλήρωση αρχείων (αποεπιλέξτε για λήψη μεμονωμένων αρχείων)", - "mode_settings_legacy_checkbox": "Χρήση παλαιάς διεύθυνσης (δεν προτείνεται η χρήση υπηρεσία v2 onion)", - "mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός", - "mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση", - "mode_settings_public_checkbox": "Δημόσια υπηρεσία OnionShare (απενεργοποιεί το ιδιωτικό κλειδί)", - "mode_settings_persistent_checkbox": "Αποθήκευση της καρτέλας και αυτόματο άνοιγμά της με την έναρξη του OnionShare", - "mode_settings_advanced_toggle_hide": "Απόκρυψη προχωρημένων ρυθμίσεων", - "mode_settings_advanced_toggle_show": "Εμφάνιση προχωρημένων ρυθμίσεων", - "gui_quit_warning_cancel": "Άκυρο", - "gui_quit_warning_description": "Είναι ενεργή η κοινή χρήση σε ορισμένες καρτέλες. Εάν κάνετε έξοδο, όλες οι καρτέλες σας θα κλείσουν. Είστε σίγουρος/η;", - "gui_quit_warning_title": "Είστε σίγουρος/η;", - "gui_close_tab_warning_cancel": "Άκυρο", - "gui_close_tab_warning_close": "Κλείσιμο", - "gui_close_tab_warning_website_description": "Φιλοξενείτε έναν ιστότοπο. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", - "gui_close_tab_warning_receive_description": "Η λήψη αρχείων δεν έχει ολοκληρωθεί. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", - "gui_close_tab_warning_share_description": "Η αποστολή αρχείων δεν έχει ολοκληρωθεί ακόμα. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;", - "gui_close_tab_warning_persistent_description": "Η καρτέλα δεν είναι μόνιμη. Εάν την κλείσετε, θα χαθεί η διεύθυνση onion που χρησιμοποιείτε. Είστε βέβαιοι ότι θέλετε να την κλείσετε;", - "gui_close_tab_warning_title": "Είστε σίγουρος/η;", - "gui_tab_name_chat": "Συνομιλία", - "gui_tab_name_website": "Ιστότοπος", - "gui_tab_name_receive": "Λήψη", - "gui_tab_name_share": "Κοινοποίηση", - "gui_main_page_chat_button": "Έναρξη συνομιλίας", - "gui_main_page_website_button": "Έναρξη φιλοξενίας", - "gui_main_page_receive_button": "Έναρξη λήψης", - "gui_main_page_share_button": "Έναρξη διαμοιρασμού", - "gui_new_tab_chat_button": "Συνομιλήστε ανώνυμα", - "gui_new_tab_website_button": "Φιλοξενία ιστότοπου", - "gui_new_tab_receive_button": "Λήψη αρχείων", - "gui_new_tab_share_button": "Διαμοιρασμός αρχείων", - "gui_new_tab_tooltip": "Άνοιγμα νέας καρτέλας", - "gui_new_tab": "Νέα καρτέλα", - "gui_qr_code_dialog_title": "Κώδικας QR OnionShare", - "gui_show_qr_code": "Προβολή κώδικα QR", - "gui_file_selection_remove_all": "Αφαίρεση όλων", - "gui_remove": "Αφαίρεση", - "error_port_not_available": "Η θύρα OnionShare δεν είναι διαθέσιμη", - "gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος", - "gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.", - "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare και το ιδιωτικό κλειδί μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", - "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα.", - "history_receive_read_message_button": "Ανάγνωση μηνύματος", - "mode_settings_receive_webhook_url_checkbox": "Χρήση ειδοποίησης webhook", - "mode_settings_receive_disable_files_checkbox": "Απενεργοποίηση της μεταφόρτωσης αρχείων", - "mode_settings_receive_disable_text_checkbox": "Απενεργοποίηση υποβολής κειμένου", - "mode_settings_title_label": "Προσαρμοσμένος τίτλος", - "gui_status_indicator_chat_started": "Σε συνομιλία", - "gui_status_indicator_chat_scheduled": "Δρομολόγηση…", - "gui_status_indicator_chat_working": "Εκκίνηση…", - "gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία", - "gui_copied_client_auth_title": "Το ιδιωτικό κλειδί αντιγράφηκε", - "gui_qr_label_url_title": "Διεύθυνση OnionShare", - "gui_reveal": "Εμφάνιση", - "gui_hide": "Απόκρυψη", - "gui_share_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να κατεβάσει τα αρχεία σας χρησιμοποιώντας το Tor Browser: ", - "gui_website_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να επισκεφθεί την ιστοσελίδα σας χρησιμοποιώντας το Tor Browser: ", - "gui_chat_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να συμμετέχει στο δωμάτιο συνομιλίας χρησιμοποιώντας το Tor Browser: ", - "gui_url_instructions_public_mode": "Στείλτε την παρακάτω διεύθυνση OnionShare:", - "gui_settings_theme_label": "Θέμα", - "gui_copy_client_auth": "Αντιγραφή ιδιωτικού κλειδιού", - "gui_copied_client_auth": "Το ιδιωτικό κλειδί αντιγράφηκε στο πρόχειρο", - "gui_qr_label_auth_string_title": "Ιδιωτικό κλειδί", - "gui_please_wait_no_button": "Εκκίνηση…", - "gui_server_doesnt_support_stealth": "Αυτή η έκδοση Tor, δεν υποστηρίζει το stealth (πιστοποίηση πελάτη). Παρακαλούμε δοκιμάστε με μια νεότερη έκδοση του Tor ή χρησιμοποιήστε τη λειτουργία 'δημόσιο' αν δεν χρειάζεται να είναι ιδιωτική.", - "gui_receive_url_public_description": "Οποιοσδήποτε με αυτή τη διεύθυνση OnionShare μπορεί να ανεβάσει αρχεία στον υπολογιστή σας, χρησιμοποιώντας το Tor Browser: ", - "gui_settings_theme_auto": "Αυτόματο", - "gui_settings_theme_dark": "Σκοτεινό", - "gui_url_instructions": "Αρχικά, στείλτε την παρακάτω διεύθυνση OnionShare:", - "gui_settings_theme_light": "Φωτεινό", - "gui_client_auth_instructions": "Στη συνέχεια, στείλτε το ιδιωτικό κλειδί για πρόσβαση στην υπηρεσία OnionShare:", - "gui_dragdrop_sandbox_flatpak": "Για να γίνει πιο ασφαλές το sandbox του Flatpak, δεν υποστηρίζεται η μεταφορά και απόθεση. Χρησιμοποιήστε τα κουμπιά Προσθήκη αρχείων και Προσθήκη φακέλου για να αναζητήσετε αρχεία.", - "moat_captcha_label": "Λύστε το CAPTCHA για να αιτηθείτε μια γέφυρα.", - "gui_settings_tor_bridges_label": "Οι γέφυρες σας βοηθούν να αποκτήσετε πρόσβαση στο δίκτυο Tor σε τοποθεσίες όπου είναι αποκλεισμένο. Ανάλογα με το πού βρίσκεστε, μια γέφυρα μπορεί να λειτουργεί καλύτερα από μια άλλη.", - "moat_captcha_submit": "Υποβολή", - "moat_solution_empty_error": "Πρέπει να εισαγάγετε τους χαρακτήρες από την εικόνα", - "moat_contact_label": "Επικοινωνία με BridgeDB...", - "gui_tor_settings_window_title": "Ρυθμίσεις Tor", - "gui_settings_controller_extras_label": "Ρυθμίσεις Tor", - "gui_settings_bridge_use_checkbox": "Χρήση γέφυρας", - "gui_settings_bridge_radio_builtin": "Επιλέξτε μια ενσωματωμένη γέφυρα", - "gui_settings_bridge_none_radio_option": "Χωρίς χρήση γέφυρας", - "gui_settings_bridge_moat_radio_option": "Αιτηθείτε μια γέφυρα από torproject.org", - "gui_settings_bridge_moat_button": "Αίτημα για νέα γέφυρα", - "gui_settings_bridge_custom_radio_option": "Προτείνετε μια γέφυρα για την οποία ενημερωθήκατε από αξιόπιστη πηγή", - "gui_settings_bridge_custom_placeholder": "πληκτρολογήστε διεύθυνση: πόρτα (μια ανά γραμμή)", - "gui_settings_moat_bridges_invalid": "Δεν έχετε αιτηθεί ακόμα γέφυρα από το torproject.org.", - "gui_settings_stop_active_tabs_label": "Υπάρχουν υπηρεσίες που εκτελούνται σε ορισμένες από τις καρτέλες σας.\nΠρέπει να σταματήσετε όλες τις υπηρεσίες για να αλλάξετε τις ρυθμίσεις του Tor.", - "gui_settings_version_label": "Χρησιμοποιείτε το OnionShare {}", - "gui_settings_help_label": "Χρειάζεστε βοήθεια; Δείτε το docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Αποστολή προσαρμοσμένης κεφαλίδας Πολιτικής Ασφαλείας Περιεχομένου", - "moat_captcha_placeholder": "Εισαγάγετε τους χαρακτήρες από την εικόνα", - "moat_captcha_reload": "Επαναφόρτωση", - "moat_bridgedb_error": "Σφάλμα επικοινωνίας με BridgeDB.", - "moat_captcha_error": "Η λύση δεν είναι σωστή. Παρακαλούμε δοκιμάστε ξανά.", - "mode_tor_not_connected_label": "Το OnionShare δεν είναι συνδεδεμένο με το δίκτυο Tor" -} diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json deleted file mode 100644 index f8c4cd2b..00000000 --- a/desktop/src/onionshare/resources/locale/en.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "not_a_readable_file": "{0:s} is not a readable file.", - "other_page_loaded": "Address loaded", - "incorrect_password": "Incorrect password", - "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", - "gui_drag_and_drop": "Drag and drop files and folders to start sharing", - "gui_add": "Add", - "gui_add_files": "Add Files", - "gui_add_folder": "Add Folder", - "gui_remove": "Remove", - "gui_dragdrop_sandbox_flatpak": "To make the Flatpak sandbox more secure, drag and drop is not supported. Use the Add Files and Add Folder buttons to browse for files instead.", - "gui_file_selection_remove_all": "Remove All", - "gui_choose_items": "Choose", - "gui_share_start_server": "Start sharing", - "gui_share_stop_server": "Stop sharing", - "gui_share_stop_server_autostop_timer": "Stop Sharing ({})", - "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 {}", - "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 ({} remaining)", - "gui_receive_flatpak_data_dir": "Because you installed OnionShare using Flatpak, you must save files to a folder in ~/OnionShare.", - "gui_copy_url": "Copy Address", - "gui_copy_client_auth": "Copy Private Key", - "gui_canceled": "Canceled", - "gui_copied_url_title": "Copied OnionShare Address", - "gui_copied_url": "OnionShare address copied to clipboard", - "gui_copied_client_auth_title": "Copied Private Key", - "gui_copied_client_auth": "Private Key copied to clipboard", - "gui_show_qr_code": "Show QR Code", - "gui_qr_code_dialog_title": "OnionShare QR Code", - "gui_qr_label_url_title": "OnionShare Address", - "gui_qr_label_auth_string_title": "Private Key", - "gui_reveal": "Reveal", - "gui_hide": "Hide", - "gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.", - "gui_please_wait_no_button": "Starting…", - "gui_please_wait": "Starting… Click to cancel.", - "zip_progress_bar_format": "Compressing: %p%", - "gui_tor_settings_window_title": "Tor Settings", - "gui_settings_window_title": "Settings", - "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_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", - "gui_settings_controller_extras_label": "Tor settings", - "gui_settings_connection_type_control_port_option": "Connect using control port", - "gui_settings_connection_type_socket_file_option": "Connect using socket file", - "gui_settings_connection_type_test_button": "Test Connection to Tor", - "gui_settings_control_port_label": "Control port", - "gui_settings_socket_file_label": "Socket file", - "gui_settings_socks_label": "SOCKS port", - "gui_settings_authenticate_no_auth_option": "No authentication, or cookie authentication", - "gui_settings_authenticate_password_option": "Password", - "gui_settings_password_label": "Password", - "gui_settings_tor_bridges": "Connect using a Tor bridge?", - "gui_settings_tor_bridges_label": "Bridges help you access the Tor Network in places where Tor is blocked. Depending on where you are, one bridge may work better than another.", - "gui_settings_bridge_use_checkbox": "Use a bridge", - "gui_settings_bridge_radio_builtin": "Select a built-in bridge", - "gui_settings_bridge_none_radio_option": "Don't use a bridge", - "gui_settings_meek_lite_expensive_warning": "Warning: The meek-azure 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_bridge_moat_radio_option": "Request a bridge from torproject.org", - "gui_settings_bridge_moat_button": "Request a New Bridge", - "gui_settings_bridge_custom_radio_option": "Provide a bridge you learned about from a trusted source", - "gui_settings_bridge_custom_placeholder": "type address:port (one per line)", - "gui_settings_moat_bridges_invalid": "You have not requested a bridge from torproject.org yet.", - "gui_settings_tor_bridges_invalid": "None of the bridges you added work. Double-check them or add others.", - "gui_settings_stop_active_tabs_label": "There are services running in some of your tabs.\nYou must stop all services to change your Tor settings.", - "gui_settings_button_save": "Save", - "gui_settings_button_cancel": "Cancel", - "gui_settings_button_help": "Help", - "gui_settings_version_label": "You are using OnionShare {}", - "gui_settings_help_label": "Need help? See docs.onionshare.org", - "settings_test_success": "Connected to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}.\nSupports client authentication: {}.\nSupports next-gen .onion addresses: {}.", - "connecting_to_tor": "Connecting to the Tor network", - "update_available": "New OnionShare out. Click here to get it.

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 '{}'…", - "update_error_check_error": "Could not check for new version: Maybe you're not connected to Tor, or the OnionShare website is down?", - "update_not_available": "You are running the latest OnionShare.", - "gui_tor_connection_ask": "Open the settings to sort out connection to Tor?", - "gui_tor_connection_ask_open_settings": "Yes", - "gui_tor_connection_ask_quit": "Quit", - "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\nMake sure 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_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 adjust it to start sharing.", - "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.", - "gui_server_doesnt_support_stealth": "Sorry, this version of Tor doesn't support stealth (Client Authentication). Please try with a newer version of Tor, or use 'public' mode if it doesn't need to be private.", - "share_via_onionshare": "Share via OnionShare", - "gui_share_url_description": "Anyone with this OnionShare address and private key can download your files using the Tor Browser: ", - "gui_share_url_public_description": "Anyone with this OnionShare address can download your files using the Tor Browser: ", - "gui_website_url_description": "Anyone with this OnionShare address and private key can visit your website using the Tor Browser: ", - "gui_website_url_public_description": "Anyone with this OnionShare address can visit your website using the Tor Browser: ", - "gui_receive_url_description": "Anyone with this OnionShare address and private key can upload files to your computer using the Tor Browser: ", - "gui_receive_url_public_description": "Anyone with this OnionShare address can upload files to your computer using the Tor Browser: ", - "gui_chat_url_description": "Anyone with this OnionShare address and private key can join this chat room using the Tor Browser: ", - "gui_chat_url_public_description": "Anyone with this OnionShare address can join this chat room using the Tor Browser: ", - "gui_url_label_persistent": "This share will not auto-stop.

Every subsequent share reuses the address. (To use one-time addresses, turn off \"Use persistent address\" in the settings.)", - "gui_url_label_stay_open": "This share will not auto-stop.", - "gui_url_label_onetime": "This share will stop after first completion.", - "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_url_instructions": "First, send the OnionShare address below:", - "gui_url_instructions_public_mode": "Send the OnionShare address below:", - "gui_client_auth_instructions": "Next, send the private key to allow access to your OnionShare service:", - "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_status_indicator_chat_stopped": "Ready to chat", - "gui_status_indicator_chat_working": "Starting…", - "gui_status_indicator_chat_scheduled": "Scheduled…", - "gui_status_indicator_chat_started": "Chatting", - "gui_file_info": "{} files, {}", - "gui_file_info_single": "{} file, {}", - "history_in_progress_tooltip": "{} in progress", - "history_completed_tooltip": "{} completed", - "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.

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.", - "gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}", - "gui_settings_language_label": "Language", - "gui_settings_theme_label": "Theme", - "gui_settings_theme_auto": "Auto", - "gui_settings_theme_light": "Light", - "gui_settings_theme_dark": "Dark", - "gui_settings_language_changed_notice": "Restart OnionShare for the new language to be applied.", - "gui_color_mode_changed_notice": "Restart OnionShare for the new color mode to be applied.", - "systray_menu_exit": "Quit", - "systray_page_loaded_title": "Page Loaded", - "systray_page_loaded_message": "OnionShare address loaded", - "systray_share_started_title": "Sharing Started", - "systray_share_started_message": "Starting to send files to someone", - "systray_share_completed_title": "Sharing Complete", - "systray_share_completed_message": "Finished sending files", - "systray_share_canceled_title": "Sharing Canceled", - "systray_share_canceled_message": "Someone canceled receiving your files", - "systray_receive_started_title": "Receiving Started", - "systray_receive_started_message": "Someone is sending files to you", - "gui_all_modes_history": "History", - "gui_all_modes_clear_history": "Clear All", - "gui_all_modes_transfer_started": "Started {}", - "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%", - "gui_share_mode_no_files": "No Files Sent Yet", - "gui_share_mode_autostop_timer_waiting": "Waiting to finish sending", - "gui_website_mode_no_files": "No Website Shared Yet", - "gui_receive_mode_no_files": "No Files Received Yet", - "gui_receive_mode_autostop_timer_waiting": "Waiting to finish receiving", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_new_tab": "New Tab", - "gui_new_tab_tooltip": "Open a new tab", - "gui_new_tab_share_button": "Share Files", - "gui_new_tab_receive_button": "Receive Files", - "gui_new_tab_website_button": "Host a Website", - "gui_new_tab_chat_button": "Chat Anonymously", - "gui_main_page_share_button": "Start Sharing", - "gui_main_page_receive_button": "Start Receiving", - "gui_main_page_website_button": "Start Hosting", - "gui_main_page_chat_button": "Start Chatting", - "gui_tab_name_share": "Share", - "gui_tab_name_receive": "Receive", - "gui_tab_name_website": "Website", - "gui_tab_name_chat": "Chat", - "gui_close_tab_warning_title": "Are you sure?", - "gui_close_tab_warning_persistent_description": "This tab is persistent. If you close it you'll lose the onion address that it's using. Are you sure you want to close it?", - "gui_close_tab_warning_share_description": "You're in the process of sending files. Are you sure you want to close this tab?", - "gui_close_tab_warning_receive_description": "You're in the process of receiving files. Are you sure you want to close this tab?", - "gui_close_tab_warning_website_description": "You're actively hosting a website. Are you sure you want to close this tab?", - "gui_close_tab_warning_close": "Close", - "gui_close_tab_warning_cancel": "Cancel", - "gui_quit_warning_title": "Are you sure?", - "gui_quit_warning_description": "Sharing is active in some of your tabs. If you quit, all of your tabs will close. Are you sure you want to quit?", - "gui_quit_warning_quit": "Quit", - "gui_quit_warning_cancel": "Cancel", - "mode_settings_advanced_toggle_show": "Show advanced settings", - "mode_settings_advanced_toggle_hide": "Hide advanced settings", - "mode_settings_title_label": "Custom title", - "mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare", - "mode_settings_public_checkbox": "This is a public OnionShare service (disables private key)", - "mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time", - "mode_settings_autostop_timer_checkbox": "Stop onion service at scheduled time", - "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_receive_disable_text_checkbox": "Disable submitting text", - "mode_settings_receive_disable_files_checkbox": "Disable uploading files", - "mode_settings_receive_webhook_url_checkbox": "Use notification webhook", - "mode_settings_website_disable_csp_checkbox": "Don't send default Content Security Policy header (allows your website to use third-party resources)", - "mode_settings_website_custom_csp_checkbox": "Send a custom Content Security Policy header", - "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 {}", - "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{}", - "gui_rendezvous_cleanup": "Waiting for Tor circuits to close to be sure your files have successfully transferred.\n\nThis might take a few minutes.", - "gui_rendezvous_cleanup_quit_early": "Quit Early", - "error_port_not_available": "OnionShare port not available", - "history_receive_read_message_button": "Read Message", - "error_tor_protocol_error": "There was an error with Tor: {}", - "moat_contact_label": "Contacting BridgeDB...", - "moat_captcha_label": "Solve the CAPTCHA to request a bridge.", - "moat_captcha_placeholder": "Enter the characters from the image", - "moat_captcha_submit": "Submit", - "moat_captcha_reload": "Reload", - "moat_bridgedb_error": "Error contacting BridgeDB.", - "moat_captcha_error": "The solution is not correct. Please try again.", - "moat_solution_empty_error": "You must enter the characters from the image", - "mode_tor_not_connected_label": "OnionShare is not connected to the Tor network" -} diff --git a/desktop/src/onionshare/resources/locale/enm.json b/desktop/src/onionshare/resources/locale/enm.json deleted file mode 100644 index 7db75f7d..00000000 --- a/desktop/src/onionshare/resources/locale/enm.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "not_a_readable_file": "", - "other_page_loaded": "", - "incorrect_password": "", - "close_on_autostop_timer": "", - "closing_automatically": "", - "large_filesize": "", - "gui_drag_and_drop": "", - "gui_add": "", - "gui_add_files": "", - "gui_add_folder": "", - "gui_remove": "", - "gui_file_selection_remove_all": "", - "gui_choose_items": "", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "gui_share_stop_server_autostop_timer": "", - "gui_chat_start_server": "", - "gui_chat_stop_server": "", - "gui_stop_server_autostop_timer_tooltip": "", - "gui_start_server_autostart_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_flatpak_data_dir": "", - "gui_copy_url": "", - "gui_copy_client_auth": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_copied_client_auth_title": "", - "gui_copied_client_auth": "", - "gui_show_qr_code": "", - "gui_qr_code_dialog_title": "", - "gui_qr_label_url_title": "", - "gui_qr_label_auth_string_title": "", - "gui_reveal": "", - "gui_hide": "", - "gui_waiting_to_start": "", - "gui_please_wait_no_button": "", - "gui_please_wait": "", - "zip_progress_bar_format": "", - "gui_settings_window_title": "", - "gui_settings_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "", - "gui_settings_autoupdate_check_button": "", - "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": "", - "settings_test_success": "", - "connecting_to_tor": "", - "update_available": "", - "update_error_invalid_latest_version": "", - "update_error_check_error": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "gui_server_autostart_timer_expired": "", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", - "gui_server_doesnt_support_stealth": "", - "share_via_onionshare": "", - "gui_share_url_description": "", - "gui_share_url_public_description": "", - "gui_website_url_description": "", - "gui_website_url_public_description": "", - "gui_receive_url_description": "", - "gui_receive_url_public_description": "", - "gui_chat_url_description": "", - "gui_chat_url_public_description": "", - "gui_url_label_persistent": "", - "gui_url_label_stay_open": "", - "gui_url_label_onetime": "", - "gui_url_label_onetime_and_persistent": "", - "gui_url_instructions": "", - "gui_url_instructions_public_mode": "", - "gui_client_auth_instructions": "", - "gui_status_indicator_share_stopped": "", - "gui_status_indicator_share_working": "", - "gui_status_indicator_share_scheduled": "", - "gui_status_indicator_share_started": "", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", - "gui_status_indicator_receive_scheduled": "", - "gui_status_indicator_receive_started": "", - "gui_status_indicator_chat_stopped": "", - "gui_status_indicator_chat_working": "", - "gui_status_indicator_chat_scheduled": "", - "gui_status_indicator_chat_started": "", - "gui_file_info": "", - "gui_file_info_single": "", - "history_in_progress_tooltip": "", - "history_completed_tooltip": "", - "history_requests_tooltip": "", - "error_cannot_create_data_dir": "", - "gui_receive_mode_warning": "", - "gui_open_folder_error": "", - "gui_settings_language_label": "", - "gui_settings_theme_label": "", - "gui_settings_theme_auto": "", - "gui_settings_theme_light": "", - "gui_settings_theme_dark": "", - "gui_settings_language_changed_notice": "", - "gui_color_mode_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_progress_complete": "", - "gui_all_modes_progress_starting": "", - "gui_all_modes_progress_eta": "", - "gui_share_mode_no_files": "", - "gui_share_mode_autostop_timer_waiting": "", - "gui_website_mode_no_files": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "", - "days_first_letter": "", - "hours_first_letter": "", - "minutes_first_letter": "", - "seconds_first_letter": "", - "gui_new_tab": "", - "gui_new_tab_tooltip": "", - "gui_new_tab_share_button": "", - "gui_new_tab_receive_button": "", - "gui_new_tab_website_button": "", - "gui_new_tab_chat_button": "", - "gui_main_page_share_button": "", - "gui_main_page_receive_button": "", - "gui_main_page_website_button": "", - "gui_main_page_chat_button": "", - "gui_tab_name_share": "", - "gui_tab_name_receive": "", - "gui_tab_name_website": "", - "gui_tab_name_chat": "", - "gui_close_tab_warning_title": "", - "gui_close_tab_warning_persistent_description": "", - "gui_close_tab_warning_share_description": "", - "gui_close_tab_warning_receive_description": "", - "gui_close_tab_warning_website_description": "", - "gui_close_tab_warning_close": "", - "gui_close_tab_warning_cancel": "", - "gui_quit_warning_title": "", - "gui_quit_warning_description": "", - "gui_quit_warning_quit": "", - "gui_quit_warning_cancel": "", - "mode_settings_advanced_toggle_show": "", - "mode_settings_advanced_toggle_hide": "", - "mode_settings_title_label": "", - "mode_settings_persistent_checkbox": "", - "mode_settings_public_checkbox": "", - "mode_settings_autostart_timer_checkbox": "", - "mode_settings_autostop_timer_checkbox": "", - "mode_settings_share_autostop_sharing_checkbox": "", - "mode_settings_receive_data_dir_label": "", - "mode_settings_receive_data_dir_browse_button": "", - "mode_settings_receive_disable_text_checkbox": "", - "mode_settings_receive_disable_files_checkbox": "", - "mode_settings_receive_webhook_url_checkbox": "", - "mode_settings_website_disable_csp_checkbox": "", - "gui_all_modes_transfer_finished_range": "", - "gui_all_modes_transfer_finished": "", - "gui_all_modes_transfer_canceled_range": "", - "gui_all_modes_transfer_canceled": "", - "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": "", - "gui_rendezvous_cleanup": "", - "gui_rendezvous_cleanup_quit_early": "", - "error_port_not_available": "", - "history_receive_read_message_button": "", - "error_tor_protocol_error": "" -} diff --git a/desktop/src/onionshare/resources/locale/eo.json b/desktop/src/onionshare/resources/locale/eo.json deleted file mode 100644 index 9f450275..00000000 --- a/desktop/src/onionshare/resources/locale/eo.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "config_onion_service": "Agordas onion service je pordo {0:d}.", - "preparing_files": "Preparas dosierojn por kundivido.", - "give_this_url": "Donu ĉi tiun URL al la persono al kiu vi sendas la dosieron:", - "give_this_url_stealth": "Give this URL and HidServAuth line to the person you're sending the file to:", - "ctrlc_to_stop": "Presu Ctrl-C por halti la servilon", - "not_a_file": "{0:s} ne estas dosiero.", - "other_page_loaded": "", - "closing_automatically": "Haltas aŭtomate ĉar la elŝuto finiĝis", - "large_filesize": "Atentigo: Sendado de grandaj dosieroj povas daŭri horojn", - "help_local_only": "Ne strebu uzi tor: nur por evoluado", - "help_stay_open": "Lasu onion service funkcii post fino de elŝuto", - "help_stealth": "Create stealth onion service (advanced)", - "help_verbose": "Protokoli erarojn sur disko", - "help_filename": "Listo de dosieroj aŭ dosierujoj por kundividi", - "gui_drag_and_drop": "Ŝovu kaj metu\nla dosierojn ĉi tien", - "gui_add": "Aldoni", - "gui_delete": "Forviŝi", - "gui_choose_items": "Elekti", - "gui_share_start_server": "Komenci kundividon", - "gui_share_stop_server": "Ĉesigi kundividon", - "gui_copy_url": "Kopii URL", - "gui_downloads": "Elŝutoj:", - "gui_canceled": "Nuligita", - "gui_copied_url": "URL kopiita en tondujon", - "gui_please_wait": "Bonvolu atendi...", - "gui_download_upload_progress_complete": "%p%, Tempo pasinta: {0:s}", - "gui_download_upload_progress_starting": "{0:s}, %p% (Computing ETA)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "Onionshare {0:s} | https://onionshare.org/", - "gui_share_quit_warning": "Ĉu vi certas ke vi volas foriri?\nLa URL, kiun vi kundividas ne plu ekzistos.", - "gui_quit_warning_quit": "Foriri", - "gui_quit_warning_dont_quit": "Ne foriri", - "zip_progress_bar_format": "Compressing files: %p%", - "error_stealth_not_supported": "To create stealth onion services, you need at least Tor 0.2.9.1-alpha (or Tor Browser 6.5) and at least python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare postulas almenaŭ Tor 0.2.7.1 kaj almenaŭ python3-stem 1.4.0.", - "gui_settings_window_title": "", - "gui_settings_connection_type_label": "Kiel OnionShare devus konektiĝi al Tor?", - "gui_settings_connection_type_automatic_option": "Provi aŭtomate agordi kun Tor Browser", - "gui_settings_connection_type_control_port_option": "Konekti per kontrolpordo", - "gui_settings_connection_type_socket_file_option": "Konekti per socket-dosiero", - "gui_settings_control_port_label": "Kontrolpordo", - "gui_settings_socket_file_label": "Socket-dosiero", - "gui_settings_authenticate_label": "Tor authentication options", - "gui_settings_authenticate_no_auth_option": "", - "gui_settings_authenticate_password_option": "Pasvorto", - "gui_settings_password_label": "Pasvorto", - "gui_settings_button_save": "Konservi", - "gui_settings_button_cancel": "Nuligi", - "settings_saved": "Agordoj konservitaj en {}", - "settings_error_unknown": "Ne eblas konektiĝi al Tor-kontrolilo, ĉar la agordoj ne havas sencon.", - "settings_error_automatic": "Ne eblas konektiĝi al Tor-kontrolilo. Ĉu Tor Browser funkcias en la fono? Se vi ne havas ĝin, vi povas ekhavi ĝin je:\nhttps://www.torproject.org/.", - "settings_error_socket_port": "Ne eblas konektiĝi al Tor-kontrolilo je {}:{}.", - "settings_error_socket_file": "Ne eblas konektiĝi al Tor-kontrolilo per socket-dosiero {}.", - "settings_error_auth": "", - "settings_error_missing_password": "", - "settings_error_unreadable_cookie_file": "Connected to Tor controller, but can't authenticate because your password may be wrong, and your user doesn't have permission to read the cookie file.", - "settings_test_success": "Congratulations, OnionShare can connect to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}\nSupports stealth onion services: {}", - "error_tor_protocol_error": "Error talking to the Tor controller.\nIf you're using Whonix, check out https://www.whonix.org/wiki/onionshare to make OnionShare work." -} diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json deleted file mode 100644 index ed4cab2b..00000000 --- a/desktop/src/onionshare/resources/locale/es.json +++ /dev/null @@ -1,350 +0,0 @@ -{ - "preparing_files": "Comprimiendo los archivos.", - "give_this_url": "Entrega esta URL al receptor:", - "ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor", - "not_a_file": "{0:s} no es un archivo válido.", - "other_page_loaded": "Dirección cargada", - "closing_automatically": "Detenido porque ya se completó la transferencia", - "help_local_only": "No usar Tor (sólo para desarrollo)", - "help_stay_open": "Continuar compartiendo luego que los archivos hayan sido enviados", - "help_verbose": "Enviar los errores de OnionShare a stdout, y los errores web al disco", - "help_filename": "Lista de archivos o carpetas para compartir", - "gui_drag_and_drop": "Arrastra y suelta archivos y carpetas para comenzar a compartir", - "gui_add": "Añadir", - "gui_delete": "Eliminar", - "gui_choose_items": "Elegir", - "gui_share_start_server": "Comienza a compartir", - "gui_share_stop_server": "Deja de compartir", - "gui_copy_url": "Copiar Dirección", - "gui_downloads": "Historial de descargas", - "gui_copied_url": "Dirección OnionShare copiada al portapapeles", - "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 encontrar un puerto disponible para iniciar el servicio cebolla", - "close_on_autostop_timer": "Detenido porque el temporizador de parada automática expiró", - "timeout_download_still_running": "Esperando a que se complete la descarga", - "large_filesize": "Advertencia: Enviar un recurso compartido grande podría llevar horas", - "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 OnionShare Copiada", - "gui_please_wait": "Comenzando… Clic para cancelar.", - "gui_quit_title": "No tan rápido", - "zip_progress_bar_format": "Comprimiendo: %p%", - "error_stealth_not_supported": "Para utilizar autorización de cliente, necesitas al menos Tor 0.2.9.1-alpha (o Navegador Tor 6.5) y python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare necesita por lo menos Tor 0.2.7.1 y python3-stem 1.4.0.", - "gui_settings_window_title": "Configuración", - "gui_settings_stealth_option": "Utilizar autorización de cliente", - "gui_settings_autoupdate_label": "Comprobar nuevas versiones", - "gui_settings_autoupdate_option": "Notifícame cuando haya una versión nueva disponible", - "gui_settings_autoupdate_check_button": "Comprobar Nueva Versión", - "gui_settings_connection_type_bundled_option": "Usa la versión de Tor incorporada en OnionShare", - "gui_settings_connection_type_automatic_option": "Intentar la configuración automática con el Navegador Tor", - "gui_settings_connection_type_test_button": "Probar la conexión a Tor", - "gui_settings_tor_bridges": "¿Conectar usando un puente Tor?", - "gui_settings_tor_bridges_invalid": "No funciona ninguno de los puentes que agregaste. Vuelve a comprobarlos o añade otros.", - "settings_saved": "Ajustes guardados en {}", - "give_this_url_receive": "Dele esta dirección al remitente:", - "give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:", - "not_a_readable_file": "{0:s} no es un archivo legible.", - "systray_menu_exit": "Salir", - "systray_download_started_title": "Iniciada la descarga de OnionShare", - "systray_download_started_message": "Alguien comenzó a descargar tus archivos", - "systray_download_completed_title": "Descarga de OnionShare finalizada", - "systray_download_completed_message": "Alguien ha terminado de descargar tus archivos", - "systray_download_canceled_title": "Descarga de OnionShare Cancelada", - "systray_download_canceled_message": "El usuario canceló la descarga", - "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_autostop_timer": "Deja de compartir ({})", - "gui_share_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", - "gui_receive_start_server": "Iniciar Modo de Recepción", - "gui_receive_stop_server": "Detener Modo de Recepción", - "gui_receive_stop_server_autostop_timer": "Detener Modo de Recepción (quedan {})", - "gui_receive_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}", - "gui_no_downloads": "Ninguna Descarga Todavía", - "gui_canceled": "Cancelado", - "settings_error_unknown": "No se puede conectar al controlador Tor porque tu configuración no tiene sentido.", - "settings_error_automatic": "No se puede conectar al controlador Tor. ¿Se está ejecutando el Navegador Tor (disponible en torproject.org) en segundo plano?", - "settings_error_socket_port": "No se puede conectar al controlador Tor en {}:{}.", - "settings_error_socket_file": "No se puede conectar al controlador Tor usando el archivo de socket {}.", - "settings_error_auth": "Conectado con {}:{}, pero no se puede autenticar. ¿Quizás este no sea un controlador Tor?", - "settings_error_missing_password": "Conectado al controlador Tor, pero se requiere una contraseña para autenticar.", - "settings_error_unreadable_cookie_file": "Conectado al controlador Tor, pero la contraseña puede ser errónea, o a tu usuario no le es permitido leer el archivo cookie.", - "settings_error_bundled_tor_not_supported": "La versión de Tor que viene con OnionShare no funciona en el modo de desarrollador en Windows o macOS.", - "settings_error_bundled_tor_timeout": "La conexión con Tor está demorando demasiado. ¿Quizás el equipo está desconectado de Internet o el reloj no está en hora?", - "settings_error_bundled_tor_broken": "OnionShare no pudo conectarse a Tor:\n{}", - "settings_test_success": "Se conectó con el controlador Tor.\n\nVersión de Tor: {}.\nAdmite servicios cebolla efímeros: {}.\nAdmite autenticación de cliente: {}.\nAdmite direcciones .onion de nueva generación: {}.", - "error_tor_protocol_error": "Hubo un error con Tor: {}", - "error_tor_protocol_error_unknown": "Hubo un error desconocido con Tor", - "error_invalid_private_key": "Este tipo de clave privada no está soportado", - "connecting_to_tor": "Conectar a la red Tor", - "update_available": "Salió un OnionShare nuevo. Haz clic aquí para obtenerlo.

Estás usando {} y el más reciente es {}.", - "update_error_check_error": "No se pudo comprobar si hay versiones nuevas: ¿Tal vez no estás conectado a Tor, o el sitio web de OnionShare está caído?", - "update_error_invalid_latest_version": "No se pudo comprobar si hay versiones nuevas: El sitio web de OnionShare dice que la última versión es la '{}', pero eso es irreconocible…", - "update_not_available": "Estás usando la versión más reciente de OnionShare.", - "gui_tor_connection_ask": "¿Abrir la configuración para arreglar la conexión a Tor?", - "gui_tor_connection_ask_open_settings": "Sí", - "gui_tor_connection_ask_quit": "Salir", - "gui_tor_connection_error_settings": "Prueba cambiar la forma en que OnionShare se conecta a la red Tor en la configuración.", - "gui_tor_connection_canceled": "No se pudo conectar a Tor.\n\nAsegúrate de haber conectado a Internet, vuelve a abrir OnionShare y configura su conexión a Tor.", - "gui_tor_connection_lost": "Se desconectó de Tor.", - "gui_server_started_after_autostop_timer": "El temporizador de parada automática expiró antes de que se iniciara el servidor. Por favor crea un recurso compartido nuevo.", - "gui_server_autostop_timer_expired": "El temporizador de parada automática ya expiró. Por favor ajústalo para comenzar a compartir.", - "share_via_onionshare": "Compartir con OnionShare", - "gui_save_private_key_checkbox": "Usar una dirección persistente", - "gui_share_url_description": "Cualquiera con esta dirección OnionShare y la clave privada puede descargar tus archivos usando el Navegador Tor: ", - "gui_receive_url_description": "Cualquiera con esta dirección de OnionShare y clave privada puede subir archivos a tu ordenador usando el Navegador Tor: ", - "gui_url_label_persistent": "Este recurso compartido no se detendrá automáticamente.

Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)", - "gui_url_label_stay_open": "Este recurso compartido no se detendrá automáticamente.", - "gui_url_label_onetime": "Este recurso compartido se detendrá después de la primera operación completada.", - "gui_url_label_onetime_and_persistent": "Este recurso compartido no se detendrá automáticamente.

Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)", - "gui_status_indicator_share_stopped": "Listo para compartir", - "gui_status_indicator_share_working": "Comenzando.…", - "gui_status_indicator_share_started": "Compartiendo", - "gui_status_indicator_receive_stopped": "Listo para recibir", - "gui_status_indicator_receive_working": "Comenzando.…", - "gui_status_indicator_receive_started": "Recibiendo", - "gui_file_info": "{} archivos, {}", - "gui_file_info_single": "{} archivo, {}", - "info_in_progress_downloads_tooltip": "{} descarga(s) en curso", - "info_completed_downloads_tooltip": "{} descarga(s) completada(s)", - "info_in_progress_uploads_tooltip": "{} subida(s) en curso", - "info_completed_uploads_tooltip": "{} subida(s) completada(s)", - "receive_mode_downloads_dir": "Los archivos que te envíen aparecerán en esta carpeta: {}", - "receive_mode_warning": "Advertencia: El modo de recepción permite a la gente subir archivos a tu ordenador. Algunos archivos, si los abres, podrían tomar el control de tu ordenador. Abre sólo cosas de personas en las que confíe, o si sabes lo que estás haciendo.", - "gui_download_upload_progress_complete": "%p%, {0:s} transcurrido.", - "gui_download_upload_progress_starting": "{0:s}, %p% (calculando)", - "gui_download_upload_progress_eta": "{0:s}, tiempo restante estimado: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_share_quit_warning": "Aún está enviando archivos. ¿Confirma que quiere salir de OnionShare?", - "gui_quit_warning_quit": "Salir", - "gui_quit_warning_dont_quit": "Cancelar", - "gui_settings_whats_this": "¿Qué es esto?", - "gui_settings_autoupdate_timestamp": "Última comprobación: {}", - "gui_settings_autoupdate_timestamp_never": "Nunca", - "gui_settings_general_label": "Configuración general", - "gui_settings_sharing_label": "Configuración de compartición", - "gui_settings_close_after_first_download_option": "Dejar de compartir luego que los archivos hayan sido enviados", - "gui_settings_connection_type_label": "¿Cómo debería conectarse OnionShare a Tor?", - "gui_settings_connection_type_control_port_option": "Conectar usando el puerto de control", - "gui_settings_connection_type_socket_file_option": "Conectar usando un archivo de socket", - "gui_settings_control_port_label": "Puerto de control", - "gui_settings_socket_file_label": "Archivo socket", - "gui_settings_socks_label": "Puerto SOCKS", - "gui_settings_authenticate_label": "Configuración de autenticación de Tor", - "gui_settings_authenticate_no_auth_option": "Sin autenticación, o autenticación por cookies", - "gui_settings_authenticate_password_option": "Contraseña", - "gui_settings_password_label": "Contraseña", - "gui_settings_tor_bridges_no_bridges_radio_option": "No usar puentes", - "gui_receive_quit_warning": "Aún está recibiendo archivos. ¿Confirma que quiere salir de OnionShare?", - "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportes conectables obfs4 incorporados", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportes conectables obfs4 incorporados (requiere obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportes conectables incorporados meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportes conectables meek_lite (Azure) incorporados (requiere obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Advertencia: Los puentes meek-azure son muy costosos de mantener para el Proyecto Tor.

Utilízalos solo si no puedes conectarte a Tor directamente, a través de transportes obfs4 u otros puentes normales.", - "gui_settings_tor_bridges_custom_radio_option": "Usar puentes personalizados", - "gui_settings_tor_bridges_custom_label": "Puedes obtener puentes en https://bridges.torproject.org", - "gui_settings_button_save": "Guardar", - "gui_settings_button_cancel": "Cancelar", - "gui_settings_button_help": "Ayuda", - "gui_settings_autostop_timer_checkbox": "Utilizar temporizador de parada automática", - "gui_settings_autostop_timer": "Detener compartición a las:", - "history_in_progress_tooltip": "{} en curso", - "history_completed_tooltip": "{} completado", - "error_cannot_create_downloads_dir": "No se ha podido crear la carpeta en modo de recepción: {}", - "error_downloads_dir_not_writable": "La carpeta del modo de recepción está protegida contra escritura: {}", - "gui_receive_mode_warning": "El modo de recepción permite que otras personas suban archivos a tu computadora.

Algunos archivos, potencialmente, podrían tomar control de tu computadora si los abres. Abre solo cosas de personas en las que confías, o si sabes lo que estás haciendo.", - "receive_mode_upload_starting": "Ha comenzado la carga. Total: {}", - "receive_mode_received_file": "Recibido: {}", - "gui_mode_share_button": "Compartir archivos", - "gui_mode_receive_button": "Recibir archivos", - "gui_settings_receiving_label": "Ajustes de recepción", - "gui_settings_downloads_label": "Guardar archivos en", - "gui_settings_downloads_button": "Examinar", - "gui_settings_public_mode_checkbox": "Modo público", - "systray_close_server_title": "Servidor OnionShare cerrado", - "systray_close_server_message": "Un usuario cerró el servidor", - "systray_page_loaded_title": "Página Cargada", - "systray_download_page_loaded_message": "Un usuario cargó la página de descarga", - "systray_upload_page_loaded_message": "Un usuario cargó la página de carga", - "gui_uploads": "Historial de carga", - "gui_no_uploads": "No hay subidas todavía", - "gui_clear_history": "Limpiar todo", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "El modo de recepción puede ser detenido por el remitente", - "gui_upload_in_progress": "Subida Iniciada {}", - "gui_upload_finished": "Subido {}", - "gui_download_in_progress": "Descarga iniciada {}", - "gui_open_folder_error_nautilus": "No se puede abrir la carpeta porque nautilus no está disponible. El archivo está aquí: {}", - "gui_settings_language_label": "Idioma", - "gui_settings_language_changed_notice": "Reinicia OnionShare para que se aplique el idioma nuevo.", - "gui_upload_finished_range": "Cargado {} a {}", - "timeout_upload_still_running": "Esperando a que se complete la subida", - "gui_add_files": "Añadir Archivos", - "gui_add_folder": "Añadir Carpeta", - "gui_connect_to_tor_for_onion_settings": "Conectarse a Tor para ver configuraciones de servicio cebolla", - "error_cannot_create_data_dir": "No se pudo crear carpeta de datos OnionShare: {}", - "receive_mode_data_dir": "Archivos enviados a usted aparecen en esta carpeta: {}", - "gui_settings_data_dir_label": "Guardar archivos en", - "gui_settings_data_dir_browse_button": "Navegar", - "systray_page_loaded_message": "Dirección OnionShare cargada", - "systray_share_started_title": "Compartición iniciada", - "systray_share_started_message": "Se empezó a enviar archivos a alguien", - "systray_share_completed_title": "Compartición completada", - "systray_share_completed_message": "Finalizó envío de archivos", - "systray_share_canceled_title": "Compartición cancelada", - "systray_share_canceled_message": "Alguien canceló la recepción de tus archivos", - "systray_receive_started_title": "Recepción iniciada", - "systray_receive_started_message": "Alguien te está enviando archivos", - "gui_all_modes_history": "Historial", - "gui_all_modes_clear_history": "Limpiar todo", - "gui_all_modes_transfer_started": "Iniciado {}", - "gui_all_modes_transfer_finished_range": "Transferido {} - {}", - "gui_all_modes_transfer_finished": "Transferido {}", - "gui_all_modes_progress_complete": "%p%, {0:s} transcurridos.", - "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_autostop_timer_waiting": "Esperando a que termine el envío", - "gui_receive_mode_no_files": "Todavía no se ha recibido ningún archivo", - "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 Onion", - "gui_stop_server_autostop_timer_tooltip": "El temporizador de parada automática finaliza a las {}", - "gui_start_server_autostart_timer_tooltip": "El temporizador de inicio automático finaliza a las {}", - "gui_waiting_to_start": "Inicio programado en {}. Clic para cancelar.", - "gui_settings_autostart_timer_checkbox": "Utilizar temporizador de inicio automático", - "gui_settings_autostart_timer": "Iniciar compartición a las:", - "gui_server_autostart_timer_expired": "La hora programada ya ha pasado. Modifícala para comenzar a compartir.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La hora de inicio automático no puede ser igual ni anterior a la de parada automática. Ajústala para comenzar a compartir.", - "gui_status_indicator_share_scheduled": "Programado…", - "gui_status_indicator_receive_scheduled": "Programado…", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_website_url_description": "Cualquiera con esta dirección de OnionShare y clave privada puede visitar tu sitio web usando el Navegador Tor: ", - "gui_mode_website_button": "Publicar sitio web", - "systray_site_loaded_title": "Sitio web cargado", - "systray_site_loaded_message": "Sitio web de OnionShare cargado", - "systray_website_started_title": "Se comenzó a compartir el sitio web", - "systray_website_started_message": "Alguien está visitando su sitio web", - "gui_website_mode_no_files": "Aún no se han compartido sitios web", - "gui_visit_started": "Alguien ha visitado su sitio web {}", - "incorrect_password": "Contraseña incorrecta", - "gui_settings_individual_downloads_label": "Desmarca para permitir descargar archivos individuales", - "history_requests_tooltip": "{} solicitudes web", - "systray_individual_file_downloaded_title": "Archivo individual cargado", - "systray_individual_file_downloaded_message": "Archivo individual {} visto", - "gui_settings_csp_header_disabled_option": "Deshabilitar encabezado de Política de Seguridad de Contenido", - "gui_settings_website_label": "Configuración de sitio web", - "mode_settings_legacy_checkbox": "Usar una dirección obsoleta (servicio cebolla v2, no recomendado)", - "mode_settings_autostop_timer_checkbox": "Detener el servicio cebolla a una hora determinada", - "mode_settings_autostart_timer_checkbox": "Iniciar el servicio cebolla a una hora determinada", - "mode_settings_public_checkbox": "Este es un servicio público OnionShare (Deshabilita clave privada)", - "mode_settings_persistent_checkbox": "Guardar esta pestaña, y abrirla automáticamente cuando abra OnionShare", - "mode_settings_advanced_toggle_hide": "Ocultar la configuración avanzada", - "mode_settings_advanced_toggle_show": "Mostrar configuración avanzada", - "gui_quit_warning_cancel": "Cancelar", - "gui_quit_warning_description": "Compartir está activo en algunas de tus pestañas. Si sales, todas tus pestañas se cerrarán. ¿Estás seguro/a de que quieres salir?", - "gui_quit_warning_title": "¿Estás seguro/a?", - "gui_close_tab_warning_cancel": "Cancelar", - "gui_close_tab_warning_close": "Cerrar", - "gui_close_tab_warning_website_description": "Estás alojando un sitio web. ¿Estás seguro/a de que quieres cerrar esta pestaña?", - "gui_close_tab_warning_receive_description": "Estás en el proceso de recibir archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?", - "gui_close_tab_warning_share_description": "Estás en el proceso de enviar archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?", - "gui_close_tab_warning_persistent_description": "Esta pestaña es persistente. Si la cierras, perderás la dirección cebolla que usa. ¿Estás seguro/a de que quieres cerrarla?", - "gui_close_tab_warning_title": "¿Seguro?", - "gui_new_tab_website_description": "Hospedar un sitio cebolla HTML estático desde tu computadora.", - "gui_new_tab_website_button": "Alojar un sitio web", - "gui_new_tab_receive_description": "Convierte tu computadora en un buzón en línea. La gente podrá usar el Tor Browser para enviar archivos a tu ordenador.", - "gui_new_tab_receive_button": "Recibir archivos", - "gui_new_tab_share_button": "Compartir archivos", - "gui_new_tab_tooltip": "Abrir una pestaña nueva", - "gui_new_tab": "Nueva pestaña", - "gui_new_tab_share_description": "Elige los archivos de tu ordenador para enviarlos a otra persona. La persona o personas a las que quieras enviar los archivos tendrán que usar el Tor Browser para descargarlos de ti.", - "mode_settings_website_disable_csp_checkbox": "No enviar encabezado predeterminado de Política de Seguridad de Contenido (permite que tu sitio web utilice recursos de terceros)", - "mode_settings_receive_data_dir_browse_button": "Navegar", - "mode_settings_receive_data_dir_label": "Guardar archivos en", - "mode_settings_share_autostop_sharing_checkbox": "Dejar de compartir después de haber enviado archivos (desmarcar para permitir la descarga de archivos individuales)", - "gui_tab_name_chat": "Chat", - "gui_tab_name_website": "Sitio web", - "gui_tab_name_receive": "Recibir", - "gui_tab_name_share": "Compartir", - "gui_new_tab_chat_button": "Chatear Anónimamente", - "gui_open_folder_error": "Fallo al abrir carpeta con xdg-open. El archivo está aquí: {}", - "gui_qr_code_description": "Escanea este código QR con un lector QR, como la cámara de tu teléfono para compartir la dirección OnionShare.", - "gui_qr_code_dialog_title": "Código QR de OnionShare", - "gui_show_qr_code": "Mostrar Código QR", - "gui_receive_flatpak_data_dir": "Al instalar OnionShare usando Flatpak, debes guardar los archivos en una carpeta en ~/OnionShare.", - "gui_chat_stop_server": "Detener servidor de chat", - "gui_chat_start_server": "Iniciar servidor de chat", - "gui_chat_stop_server_autostop_timer": "Detener Servidor de Chat ({})", - "gui_file_selection_remove_all": "Remover Todo", - "gui_remove": "Remover", - "gui_main_page_chat_button": "Empezar a charlar", - "gui_main_page_website_button": "Empezar a alojar", - "gui_main_page_receive_button": "Empezar a recibir", - "gui_main_page_share_button": "Empezar a compartir", - "gui_chat_url_description": "Cualquiera con esta dirección de OnionShare y la clave privada puede unirse a esta sala de chat usando el Navegador Tor: ", - "error_port_not_available": "Puerto OnionShare no disponible", - "gui_rendezvous_cleanup_quit_early": "Salir Antes", - "gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.", - "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color.", - "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificaciones", - "history_receive_read_message_button": "Leer mensaje", - "mode_settings_receive_disable_files_checkbox": "Deshabilitar la subida de archivos", - "mode_settings_receive_disable_text_checkbox": "Deshabilitar el envío de texto", - "mode_settings_title_label": "Título personalizado", - "gui_status_indicator_chat_started": "Chateando", - "gui_status_indicator_chat_scheduled": "Programado…", - "gui_status_indicator_chat_working": "Iniciando…", - "gui_status_indicator_chat_stopped": "Listo para chatear", - "gui_reveal": "Revelar", - "gui_settings_theme_label": "Tema", - "gui_url_instructions": "Primero, envíe la dirección de OnionShare a continuación:", - "gui_qr_label_url_title": "Dirección de OnionShare", - "gui_server_doesnt_support_stealth": "Lo sentimos, esta versión de Tor no soporta stealth (Autenticación de Cliente). Por favor pruebe con una nueva versión de Tor o use el modo 'público' si no necesita ser privado.", - "gui_website_url_public_description": "Cualquiera con esta dirección de OnionShare puede visitar tu sitio web utilizando el Navegador Tor: ", - "gui_share_url_public_description": "Cualquiera con esta dirección de OnionShare puede descargar tus archivos usando el Navegador Tor: ", - "gui_please_wait_no_button": "Iniciando…", - "gui_hide": "Ocultar", - "gui_copy_client_auth": "Copiar Llave Privada", - "gui_qr_label_auth_string_title": "Llave Privada", - "gui_copied_client_auth": "Llave Privada copiada al portapapeles", - "gui_copied_client_auth_title": "Llave Privada Copiada", - "gui_client_auth_instructions": "A continuación, envíe la llave privada para permitir el acceso a su servicio OnionShare:", - "gui_chat_url_public_description": "Cualquiera con esta dirección de OnionShare puede unirse a esta sala de chat usando el Navegador Tor: ", - "gui_receive_url_public_description": "Cualquiera con esta dirección OnionShare puede Cargar archivos a tu computadora usando el Navegador Tor: ", - "gui_settings_theme_dark": "Oscuro", - "gui_settings_theme_light": "Claro", - "gui_settings_theme_auto": "Automático", - "gui_url_instructions_public_mode": "Envíe la siguiente dirección de OnionShare:", - "gui_dragdrop_sandbox_flatpak": "Para hacer que la zona de prueba de Flatpak sea más segura, arrastrar y colocar no es soportado. En vez, usa los botones Agregar Archivos y Agregar Carpeta para navegar entre archivos.", - "gui_tor_settings_window_title": "Configuraciones de Tor", - "gui_settings_controller_extras_label": "Configuraciones de Tor", - "gui_settings_tor_bridges_label": "Los puentes te ayudan a acceder a la red Tor en lugares donde Tor está bloqueado. Dependiendo de dónde estés, un puente podría funcionar mejor que otro.", - "gui_settings_bridge_use_checkbox": "Usar un puente", - "gui_settings_bridge_radio_builtin": "Seleccionar un puente incorporado", - "gui_settings_bridge_none_radio_option": "No usar un puente", - "gui_settings_bridge_moat_radio_option": "Solicita un puente desde torproject.org", - "gui_settings_bridge_moat_button": "Solicitar un Nuevo Puente", - "gui_settings_bridge_custom_radio_option": "Provee un puente del que te enteraste a través de una fuente confiable", - "gui_settings_bridge_custom_placeholder": "tipea dirección:puerto (una por línea)", - "gui_settings_moat_bridges_invalid": "Aún no has solicitado un puente desde torproject.org.", - "gui_settings_stop_active_tabs_label": "Estos son servicios ejecutándose en algunas de tus pestañas.\nDebes detenerlos a todos para cambiar tus configuraciones de Tor.", - "gui_settings_version_label": "Estás usando OnionShare {}", - "gui_settings_help_label": "¿Necesitas ayuda? Mira docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Enviar un encabezado personaizado de Política de Seguridad de Contenido", - "moat_contact_label": "Contactando BridgeDB...", - "moat_captcha_label": "Resuelve el CAPTCHA para solicitar un puente.", - "moat_captcha_placeholder": "Ingresa los caracteres en la imagen", - "moat_captcha_submit": "Enviar", - "moat_captcha_reload": "Recargar", - "moat_bridgedb_error": "Error contactando BridgeDB.", - "moat_captcha_error": "La solución no es correcta. Por favor, inténtalo de nuevo.", - "moat_solution_empty_error": "Debes ingresar los caracteres en la imagen", - "mode_tor_not_connected_label": "OnionShare no está conectado a la red Tor" -} diff --git a/desktop/src/onionshare/resources/locale/fa.json b/desktop/src/onionshare/resources/locale/fa.json deleted file mode 100644 index 2c27c998..00000000 --- a/desktop/src/onionshare/resources/locale/fa.json +++ /dev/null @@ -1,233 +0,0 @@ -{ - "config_onion_service": "آماده سازی سرویس onion روی پورت {0:d}.", - "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_autostop_timer": "متوقف شد چون تایمر توقف خودکار به پایان رسید", - "closing_automatically": "متوقف شد چون انتقال انجام شد", - "timeout_download_still_running": "انتظار برای تکمیل دانلود", - "large_filesize": "هشدار: یک هم‌رسانی بزرگ ممکن است ساعت‌ها طول بکشد", - "systray_menu_exit": "خروج", - "systray_download_started_title": "دانلود OnionShare آغاز شد", - "systray_download_started_message": "یک کاربر شروع به دانلود فایل های شما کرد", - "systray_download_completed_title": "دانلود OnionShare به پایان رسید", - "systray_download_completed_message": "دانلود فایل های شما توسط کاربر به پایان رسید", - "systray_download_canceled_title": "دانلود OnionShare لغو شد", - "systray_download_canceled_message": "کاربر دانلود را لغو کرد", - "systray_upload_started_title": "آپلود OnionShare آغاز شد", - "systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است", - "help_local_only": "عدم استفاده از Tor (فقط برای توسعه)", - "help_stay_open": "ادامه اشتراک گذاری پس از ارسال دانلود ها", - "help_autostop_timer": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص", - "help_stealth": "استفاده از احراز هویت کلاینت (پیشرفته)", - "help_receive": "دریافت اشتراک به جای ارسال آن", - "help_verbose": "لاگ کردن خطاهای OnionShare روی stdout، و خطاهای وب بر روی دیسک", - "help_filename": "لیست فایل ها یا فولدر ها برای به اشتراک گذاری", - "help_config": "مکان فایل کانفیگ JSON کاستوم (اختیاری)", - "gui_drag_and_drop": "پرونده‌ها و پوشه‌ها را بکشید و رها کنید\nتا هم‌رسانی آغاز شود", - "gui_add": "افزودن", - "gui_delete": "حذف", - "gui_choose_items": "انتخاب", - "gui_share_start_server": "شروع هم‌رسانی", - "gui_share_stop_server": "توقف هم‌رسانی", - "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_autostop_timer": "توقف حالت دریافت ({} باقیمانده)", - "gui_receive_stop_server_autostop_timer_tooltip": "تایمر توقف خودکار در {} به پایان می رسد", - "gui_copy_url": "کپی آدرس", - "gui_downloads": "دانلود تاریخچه", - "gui_no_downloads": "", - "gui_canceled": "لغو شده", - "gui_copied_url_title": "آدرس OnionShare کپی شد", - "gui_copied_url": "آدرس OnionShare بر کلیپ بورد کپی شد", - "gui_please_wait": "در حال آغاز... برای لغو کلیک کنید.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "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": "لغو", - "zip_progress_bar_format": "فشرده سازی: %p%", - "error_stealth_not_supported": "برای استفاده از احراز هویت کلاینت، شما نیاز به داشتن Tor 0.2.9.1-alpha (یا مرورگر Tor 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_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_sharing_label": "تنظیمات هم‌رسانی", - "gui_settings_close_after_first_download_option": "توقف هم‌رسانی پس از اولین ارسال", - "gui_settings_connection_type_label": "OnionShare چگونه به Tor باید متصل شود؟", - "gui_settings_connection_type_bundled_option": "استفاده از نسخه Tor قرار گرفته در OnionShare", - "gui_settings_connection_type_automatic_option": "اعمال پیکربندی خودکار با مرورگر Tor", - "gui_settings_connection_type_control_port_option": "اتصال از طریق پورت کنترل", - "gui_settings_connection_type_socket_file_option": "اتصال از طریق پرونده سوکت", - "gui_settings_connection_type_test_button": "تست اتصال به Tor", - "gui_settings_control_port_label": "پورت کنترل", - "gui_settings_socket_file_label": "پرونده سوکت‌", - "gui_settings_socks_label": "پورت SOCKS", - "gui_settings_authenticate_label": "تنظیمات احراز هویت Tor", - "gui_settings_authenticate_no_auth_option": "هیچ احراز هویت، یا احراز هویت کوکی", - "gui_settings_authenticate_password_option": "رمز عبور", - "gui_settings_password_label": "رمز عبور", - "gui_settings_tor_bridges": "پشتیبانی پل Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "عدم استفاده از پل", - "gui_settings_tor_bridges_obfs4_radio_option": "استفاده از پلاگبل ترنسپورت obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت obfs4 (نیازمند obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "استفاده از پلاگبل ترنسپورت meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت meek_lite (Azure) (نیازمند obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "هشدار: پل‌های meek_lite برای پروژه Tor بسیار هزینه بر هستند.

فقط در صورت ناتوانی در اتصال به Tor به صورت مستقیم، از طریق obfs4، یا دیگر پل‌ها از آن استفاده کنید.", - "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_button_save": "ذخیره", - "gui_settings_button_cancel": "لغو", - "gui_settings_button_help": "راهنما", - "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 در {}:{}.", - "settings_error_socket_file": "ناتوانی در اتصال به کنترل کننده Tor از طریق پرونده سوکت {}.", - "settings_error_auth": "متصل به {}:{}، اما ناتوانی در احراز هویت. شاید این یک کنترل کننده Tor نیست؟", - "settings_error_missing_password": "متصل به کنترل کننده Tor، اما نیاز به یک رمز عبور برای احراز هویت است.", - "settings_error_unreadable_cookie_file": "اتصال به کنترل کننده Tor برقرار است، اما رمز عبور ممکن است اشتباه باشد، یا کاربری شما اجازه خواندن پرونده کوکی را ندارد.", - "settings_error_bundled_tor_not_supported": "استفاده از نسخه Tor که با OnionShare می‌آید در حالت توسعه روی ویندوز یا مک کار نمی‌کند.", - "settings_error_bundled_tor_timeout": "اتصال به Tor زمان زیادی می‌برد. شاید شما به اینترنت متصل نیستید، یا ساعت سیستم شما دقیق نیست؟", - "settings_error_bundled_tor_broken": "OnionShare نمی‌تواند در پس زمینه به Tor متصل شود:\n{}", - "settings_test_success": "اتصال به کنترل کننده Tor برقرار است.\n\nنسخه Tor: {}\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_autostop_timer": "زمان‌سنج توقف خودکار، قبل از آغاز کارساز به پایان رسید. لطفا یک هم‌رسانی جدید درست کنید.", - "gui_server_autostop_timer_expired": "زمان‌سنج توقف خودکار به پایان رسید. لطفا برای آغاز هم‌رسانی آن را تنظیم کنید.", - "share_via_onionshare": "هم‌رسانی با OnionShare", - "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_started": "درحال دریافت", - "gui_file_info": "{} پرونده‌ها، {}", - "gui_file_info_single": "{} پرونده، {}", - "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": "هشدار: حالت دریافت به سایر افراد اجازه می دهد تا به روی کامپیوتر شما فایل آپلود کنند. برخی فایل ها را اگر باز کنید پتانسیل آن را دارند تا کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی که از کسانی دریافت کردید که به آن ها اعتماد دارید را باز کنید، یا اگر میدانید دارید چه کار میکنید.", - "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_downloads_label": "ذخیره فایل ها در", - "gui_settings_downloads_button": "فهرست", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "حالت عمومی", - "systray_close_server_title": "سرور OnionShare بسته شد", - "systray_close_server_message": "یک کاربر سرور را بست", - "systray_page_loaded_title": "صفحه بارگذاری شد", - "systray_download_page_loaded_message": "یک کاربر صفحه دانلود را بارگذاری کرد", - "systray_upload_page_loaded_message": "یک کاربر صفحه آپلود را بارگذاری کرد", - "gui_uploads": "تاریخچه آپلود", - "gui_no_uploads": "هیچ آپلودی هنوز وجود ندارد", - "gui_clear_history": "پاکسازی همه", - "gui_upload_in_progress": "آپلود آغاز شد {}", - "gui_upload_finished_range": "{} به {} آپلود شد", - "gui_upload_finished": "{} آپلود شد", - "gui_download_in_progress": "دانلود آغاز شد {}", - "gui_open_folder_error_nautilus": "ناتوانی در باز کردن پوشه به دلیل موجود نبودن ناتیلوس. پرونده در اینجا قرار دارد: {}", - "gui_settings_language_label": "زبان ترجیحی", - "gui_settings_language_changed_notice": "برای اعمال شدن زبان جدید، OnionShare را از نو راه‌اندازی کنید.", - "timeout_upload_still_running": "انتظار برای تکمیل آپلود", - "gui_add_files": "افزودن پرونده‌ها", - "gui_add_folder": "افزودن پوشه", - "gui_connect_to_tor_for_onion_settings": "اتصال به Tor برای دیدن تنظیمات سرویس 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_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_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": "هیچ پرونده‌ای هنوز فرستاده نشده است", - "gui_share_mode_autostop_timer_waiting": "در انتظار پایان یافتن ارسال", - "gui_receive_mode_no_files": "هیچ پرونده‌ای هنوز دریافت نشده است", - "gui_receive_mode_autostop_timer_waiting": "در انتظار برای پایان یافتن دریافت", - "gui_all_modes_transfer_canceled_range": "{} - {} لغو شد", - "gui_all_modes_transfer_canceled": "{} لغو شد", - "gui_settings_onion_label": "تنظیمات Onion", - "gui_stop_server_autostop_timer_tooltip": "زمان‌سنج توقف خودکار در {} به پایان می‌رسد", - "gui_start_server_autostart_timer_tooltip": "زمان‌سنج شروع خودکار در {} به پایان می‌رسد", - "gui_waiting_to_start": "زمان‌بندی شده برای شروع در {}. برای لغو، کلیک کنید.", - "gui_settings_autostart_timer_checkbox": "استفاده از زمان‌سنج شروع خودکار", - "gui_settings_autostart_timer": "شروع هم‌رسانی در:", - "gui_server_autostart_timer_expired": "زمان برنامه‌ریزی شده سپری شده است. لطفا برای شروع هم‌رسانی، آن را تنظیم کنید.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "زمان توقف خودکار نمی‌توان مشابه با و یا زودتر از زمان شروع خودکار باشد. لطفا برای شروع هم‌رسانی، آن را تنظیم کنید.", - "gui_status_indicator_share_scheduled": "زمان‌بندی‌شده…", - "gui_status_indicator_receive_scheduled": "زمان‌بندی‌شده…", - "days_first_letter": "ر", - "hours_first_letter": "س", - "minutes_first_letter": "د", - "seconds_first_letter": "ث", - "gui_website_url_description": "هرکسی با این نشانی OnionShare می‌تواند با استفاده از مرورگر تور سایت شما را بازدید کند: ", - "gui_mode_website_button": "انتشار سایت", - "gui_website_mode_no_files": "هنوز سایتی هم‌رسانی نشده است", - "incorrect_password": "گذرواژه نادرست", - "gui_settings_individual_downloads_label": "برای دادن اجازه بارگیری پرونده‌ها مجزا، از انتخاب خارج کنید", - "history_requests_tooltip": "{} درخواست وب", - "gui_settings_csp_header_disabled_option": "غیرفعال‌سازی سرایند سیاست امنیت محتوا", - "gui_settings_website_label": "تنظیمات سایت", - "gui_new_tab_share_button": "اشتراک‌‌گذاری فایل‌ها" -} diff --git a/desktop/src/onionshare/resources/locale/fi.json b/desktop/src/onionshare/resources/locale/fi.json deleted file mode 100644 index 37c28dac..00000000 --- a/desktop/src/onionshare/resources/locale/fi.json +++ /dev/null @@ -1,265 +0,0 @@ -{ - "preparing_files": "Pakataan tiedostoja.", - "give_this_url": "Anna tämä URL-osoite vastaanottajalle:", - "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": "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_verbose": "Kirjaa OnionShare virheet stdout:tiin, ja verkko virheet levylle", - "help_filename": "Luettele jaettavat tiedostot tai kansiot", - "gui_drag_and_drop": "Vedä ja pudota tiedostot tänne aloittaaksesi jakamisen", - "gui_add": "Lisää", - "gui_delete": "Poista", - "gui_choose_items": "Valitse", - "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": "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_autostop_timer": "Automaattinen lopetusajastin pysäytti toiminnon", - "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_autostop_timer": "Lopeta jakaminen ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu {} jälkeen", - "gui_receive_start_server": "Aloita vastaanottotila", - "gui_receive_stop_server": "Lopeta vastaanottotila", - "gui_receive_stop_server_autostop_timer": "Lopeta vastaanottotila ({} jäljellä)", - "gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu kello {}", - "gui_copied_url_title": "Kopioi OnionShare-osoite", - "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_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_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": "Jakoasetukset", - "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-todennusasetukset", - "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-siltojen 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-solmuja osoitteesta https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Mikään lisäämistäsi silta-solmuista ei toiminut\nTarkista ne uudelleen tai lisää muita.", - "gui_settings_button_save": "Tallenna", - "gui_settings_button_cancel": "Peruuta", - "gui_settings_button_help": "Ohje", - "gui_settings_autostop_timer_checkbox": "Käytä automaattista lopetusajastinta", - "gui_settings_autostop_timer": "Lopeta jako aikaan:", - "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\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 versio on julkaistu. Paina tästä ladataksesi sen.

Käytät versiota {} ja uusin versio on {}.", - "update_error_check_error": "Ei pystytty tarkistamaan päivityksiä: Ehkä et ole yhteydessä Tor-verkkoon, tai OnionShare-nettisivu on kaatunut?", - "update_error_invalid_latest_version": "Päivityksien tarkistaminen epäonnistui: OnionShare-sivuston mukaan uusin versio on tuntematon '{}'…", - "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 avaa OnionShare uudelleen ja ota käyttöön sen Tor-yhteys.", - "gui_tor_connection_lost": "Tor-yhteys katkaistu.", - "gui_server_started_after_autostop_timer": "Automaattinen loputusajastin pysäytti toiminnon ennen palvelimen käynnistymistä. Luo uusi jako.", - "gui_server_autostop_timer_expired": "Automaattinen pysäytysajastin päättyi jo. Säädä se jaon aloittamiseksi.", - "share_via_onionshare": "Jaa OnionSharella", - "gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset", - "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 ottaaksesi uuden kielen käyttöön.", - "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ä kaikki", - "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_autostop_timer_waiting": "Odotetaan lähetyksen valmistumista", - "gui_receive_mode_no_files": "Yhtäkään tiedostoa ei ole vastaanotettu vielä", - "gui_receive_mode_autostop_timer_waiting": "Odotetaan vastaanottamisen valmistumista", - "gui_stop_server_autostop_timer_tooltip": "Automaattinen pysäytysajastin loppuu {} kuluttua", - "gui_start_server_autostart_timer_tooltip": "Automaattinen aloitusajastin loppuu {} kuluttua", - "gui_waiting_to_start": "Ajastettu aloitus {} kuluttua. Peruuta napsauttamalla.", - "gui_settings_autostart_timer_checkbox": "Käytä automaattista aloitusajastinta", - "gui_settings_autostart_timer": "Aloita jakaminen:", - "gui_server_autostart_timer_expired": "Ajastettu aika on jo mennyt. Säädä se aloittaaksesi jakamisen.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automaattinen pysätysaika ei voi olla sama tai aikaisempi kuin automaattinen aloitusaika. Säädä se aloittaaksesi jakamisen.", - "gui_status_indicator_share_scheduled": "Ajastettu…", - "gui_status_indicator_receive_scheduled": "Ajastettu…", - "days_first_letter": "pv", - "hours_first_letter": "t", - "minutes_first_letter": "min", - "seconds_first_letter": "s", - "gui_website_url_description": "Kaikki voivat käyttää tätä OnionShare-osoitetta vieraillakseen verkkosivullasi käyttäen Tor Browser-verkkoselainta: ", - "gui_mode_website_button": "Julkaise verkkosivu", - "gui_website_mode_no_files": "Yhtäkään verkkosivustoa ei ole vielä jaettu", - "incorrect_password": "väärä salasana", - "gui_settings_individual_downloads_label": "Poista rasti ruudusta salliaksesi yksittäisten tiedostojen lataamisen", - "history_requests_tooltip": "{} verkkopyyntöä", - "gui_settings_csp_header_disabled_option": "Poista Content Security Policy -otsake käytöstä", - "gui_settings_website_label": "Verkkosivun asetukset", - "mode_settings_receive_data_dir_browse_button": "Selaa", - "mode_settings_receive_data_dir_label": "Tallenna tiedostot", - "mode_settings_share_autostop_sharing_checkbox": "Lopeta jakaminen kun tiedostot on lähetetty (poista valinta malhdollistaaksesi yksittäisten tiedostojen jakamisen)", - "mode_settings_public_checkbox": "Älä käytä salasanaa", - "mode_settings_persistent_checkbox": "Tallenna tämä välilehti ja avaa se automaattisesti kun käynnistän OnionSharen", - "mode_settings_advanced_toggle_hide": "Piilota edistyneet asetukset", - "mode_settings_advanced_toggle_show": "Näytä edistyneet asetukset", - "gui_quit_warning_cancel": "Peruuta", - "gui_quit_warning_title": "Oletko varma?", - "gui_close_tab_warning_cancel": "Peruuta", - "gui_close_tab_warning_close": "Sulje", - "gui_close_tab_warning_title": "Oletko varma?", - "gui_new_tab_website_button": "Julkaise nettisivu", - "gui_new_tab_receive_button": "Vastaanota tiedostoja", - "gui_new_tab_share_description": "Valitse tietokoneeltasi tiedostot jotka haluat lähettää jollekin. Vastaanottajan pitää käyttää Tor-selainta ladatakseen tiedostot sinulta.", - "gui_new_tab_share_button": "Jaa tiedostoja", - "gui_new_tab_tooltip": "Avaa uusi välilehti", - "gui_new_tab": "Uusi välilehti", - "mode_settings_website_disable_csp_checkbox": "Poista 'Sisällön suojauskäytännön' otsikko käytöstä (mahdollistaa kolmansien osapuolien resurssien käytön nettisivussasi)", - "mode_settings_legacy_checkbox": "Käytä vanhaa osoitetta (v2 onion-palvelu, ei suositella)", - "mode_settings_autostop_timer_checkbox": "Lopeta onion-palvelu tiettyyn kellon aikaan", - "mode_settings_autostart_timer_checkbox": "Aloita onion-palvelu tiettyyn kellon aikaan", - "gui_quit_warning_description": "Jakaminen on päällä jollain välilehdillä. Jos lopetat, kaikki välilehtesi suljetaan. Oletko varma, että haluat lopettaa jakamisen?", - "gui_close_tab_warning_website_description": "Isännöit tällä hetkellä nettisivua. Oletko varma, että haluat sulkea tämän välilehden?", - "gui_close_tab_warning_receive_description": "Olet saamassa tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?", - "gui_close_tab_warning_share_description": "Olet lähettämässä tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?", - "gui_close_tab_warning_persistent_description": "Tämä välilehti on pysyvä. Jos suljet sen, menetät sen käyttämän onion-osoitteen. Oletko varma, että haluat sulkea tämän välilehden?", - "gui_new_tab_website_description": "Isännöi staattinen HTML-onion-nettisivu tietokoneestasi.", - "gui_new_tab_receive_description": "Tee tietokoneestasi online-pudotuslaatikko. Tor-selainta voidaan käyttää tiedostojen lähettämiseen koneellesi.", - "gui_main_page_receive_button": "Aloita vastaanottaminen", - "gui_main_page_share_button": "Aloita jakaminen", - "gui_tab_name_chat": "Keskustelu", - "gui_tab_name_website": "Verkkosivu", - "gui_tab_name_receive": "Vastaanota", - "gui_tab_name_share": "Jaa", - "gui_file_selection_remove_all": "Poista kaikki", - "gui_remove": "Poista", - "mode_settings_receive_webhook_url_checkbox": "Käytä ilmoitusten verkkotoimintokutsua", - "history_receive_read_message_button": "Lue viesti", - "error_port_not_available": "OnionSharen portti ei saatavilla", - "gui_rendezvous_cleanup_quit_early": "Poistu aikaisin", - "gui_rendezvous_cleanup": "Odotetaan Tor-kierrosten sulkeutumista, jotta voidaan varmistaa onnistunut tiedonsiirto.\n\nTässä voi kestää joitain minuutteja.", - "mode_settings_receive_disable_files_checkbox": "Poista käytöstä tiedostojen lataaminen", - "mode_settings_receive_disable_text_checkbox": "Poista käytöstä tekstin syöttö", - "mode_settings_title_label": "Muokattu otsikko", - "gui_main_page_chat_button": "Aloita keskustelu", - "gui_main_page_website_button": "Aloita isännöinti", - "gui_new_tab_chat_button": "Keskustele anonyymisti", - "gui_color_mode_changed_notice": "Käynnistä uudelleen Onionshare, jotta uusi väritila tulee voimaan.", - "gui_settings_theme_dark": "Tumma", - "gui_settings_theme_light": "Vaalea", - "gui_settings_theme_auto": "Automaattinen", - "gui_settings_theme_label": "Teema", - "gui_open_folder_error": "Ei voitu avata kansiota xdg-open:lla. Tiedosto on tässä: {}", - "gui_status_indicator_chat_started": "Keskustellaan", - "gui_status_indicator_chat_scheduled": "Ajastettu…", - "gui_status_indicator_chat_working": "Aloitetaan…", - "gui_status_indicator_chat_stopped": "Valmiina keskustelemaan", - "gui_chat_url_description": "Kuka tahansa tällä Onionshare-osoitteella voi liittyä tähän keskusteluryhmään käyttämällä Tor-selainta: ", - "gui_please_wait_no_button": "Aloitetaan…", - "gui_qr_code_dialog_title": "OnionSharen QR-koodi", - "gui_show_qr_code": "Näytä QR-koodi", - "gui_receive_flatpak_data_dir": "Koska asensin OnionSharen käyttämällä Flatpakia, sinun täytyy tallentaa tiedostot kansioon sijainnissa ~/OnionShare.", - "gui_chat_stop_server": "Pysäytä chat-palvelin", - "gui_chat_start_server": "Perusta chat-palvelin" -} diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json deleted file mode 100644 index 2441c821..00000000 --- a/desktop/src/onionshare/resources/locale/fr.json +++ /dev/null @@ -1,345 +0,0 @@ -{ - "preparing_files": "Compression des fichiers.", - "give_this_url": "Donnez cette adresse au destinataire :", - "ctrlc_to_stop": "Appuyez sur Ctrl+c pour arrêter le serveur", - "not_a_file": "{0:s} n’est pas un fichier valide.", - "other_page_loaded": "L’adresse a été chargée", - "closing_automatically": "Arrêté, car le transfert est achevé", - "systray_menu_exit": "Fermer", - "systray_download_started_title": "Téléchargement OnionShare démarré", - "systray_download_started_message": "Une personne télécharge vos fichiers", - "systray_download_completed_title": "Téléchargement OnionShare terminé", - "systray_download_canceled_title": "Téléchargement OnionShare annulé", - "systray_download_canceled_message": "La personne a annulé le téléchargement", - "help_local_only": "Ne pas utiliser Tor (uniquement pour le développement)", - "help_stay_open": "Continuer le partage après l’envoi des fichiers", - "help_verbose": "Journaliser les erreurs d’OnionShare sur la sortie standard et les erreurs Web sur le disque", - "help_filename": "Liste des fichiers ou dossiers à partager", - "gui_drag_and_drop": "Glisser-déposer des fichiers et dossiers pour commencer le partage", - "gui_add": "Ajouter", - "gui_delete": "Supprimer", - "gui_choose_items": "Sélectionner", - "gui_share_start_server": "Commencer le partage", - "gui_share_stop_server": "Arrêter le partage", - "gui_copy_url": "Copier l’adresse", - "gui_downloads": "Historique de téléchargement", - "gui_canceled": "Annulé", - "gui_copied_url": "L’adresse OnionShare a été copiée dans le presse-papiers", - "gui_please_wait": "Démarrage… Cliquez pour annuler.", - "gui_quit_warning_quit": "Fermer", - "gui_quit_warning_dont_quit": "Annuler", - "gui_settings_autoupdate_timestamp_never": "Jamais", - "gui_settings_language_changed_notice": "Redémarrez OnionShare afin que la nouvelle langue soit appliquée.", - "config_onion_service": "Mise en place du service oignon sur le port {0:d}.", - "give_this_url_stealth": "Donnez cette adresse et cette ligne HidServAuth au destinataire :", - "give_this_url_receive": "Donnez cette adresse à l’expéditeur :", - "give_this_url_receive_stealth": "Donnez cette adresse et cette ligne HidServAuth à l'expéditeur :", - "not_a_readable_file": "{0:s} n’est pas un fichier lisible.", - "timeout_download_still_running": "En attente de la fin du téléchargement", - "systray_download_completed_message": "La personne a terminé de télécharger vos fichiers", - "gui_settings_window_title": "Paramètres", - "gui_settings_autoupdate_timestamp": "Dernière vérification : {}", - "gui_settings_close_after_first_download_option": "Arrêter le partage après l’envoi des fichiers", - "gui_settings_connection_type_label": "Comment OnionShare devrait-il se connecter à Tor ?", - "gui_settings_connection_type_control_port_option": "Se connecter en utilisant le port de contrôle", - "gui_settings_connection_type_socket_file_option": "Se connecter en utilisant un fichier d’interface de connexion", - "gui_settings_socket_file_label": "Fichier d’interface de connexion", - "gui_settings_socks_label": "Port SOCKS", - "gui_settings_authenticate_no_auth_option": "Pas d’authentification, ou authentification par témoin", - "gui_settings_authenticate_password_option": "Mot de passe", - "gui_settings_password_label": "Mot de passe", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ne pas utiliser de pont", - "gui_settings_button_save": "Enregistrer", - "gui_settings_button_cancel": "Annuler", - "gui_settings_button_help": "Aide", - "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 : L’envoi d’un partage volumineux peut prendre des heures", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "zip_progress_bar_format": "Compression : %p %", - "error_ephemeral_not_supported": "OnionShare exige au moins et Tor 0.2.7.1 et python3-stem 1.4.0.", - "help_autostop_timer": "Arrêter le partage après un certain nombre de secondes", - "gui_tor_connection_error_settings": "Dans les paramètres, essayez de changer 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 onion", - "gui_share_stop_server_autostop_timer": "Arrêter le partage ({})", - "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", - "gui_copied_url_title": "L’adresse OnionShare a été copiée", - "gui_quit_title": "Pas si vite", - "gui_share_quit_warning": "Des fichiers sont en cours d’envoi. Voulez-vous vraiment quitter OnionShare ?", - "gui_receive_quit_warning": "Des fichiers sont en cours de réception. Voulez-vous vraiment quitter OnionShare ?", - "gui_settings_whats_this": "Qu’est-ce que ceci ?", - "gui_settings_autoupdate_label": "Vérifier la présence d’une nouvelle version", - "gui_settings_autoupdate_option": "Me signaler toute nouvelle version", - "gui_settings_general_label": "Paramètres généraux", - "gui_settings_sharing_label": "Paramètres de partage", - "gui_settings_connection_type_bundled_option": "Utiliser la version de Tor intégrée dans OnionShare", - "gui_settings_connection_type_automatic_option": "Essayer la configuration automatique avec le Navigateur Tor", - "gui_settings_connection_type_test_button": "Tester la connexion à Tor", - "gui_settings_control_port_label": "Port de contrôle", - "gui_settings_authenticate_label": "Paramètres d’authentification de Tor", - "gui_settings_tor_bridges": "Se connecter en utilisant un pont Tor ?", - "gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés", - "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne. Vérifiez-les de nouveau ou ajoutez-en d’autres.", - "settings_error_unknown": "Impossible de se connecter au contrôleur Tor, car vos paramètres sont incohérents.", - "settings_error_automatic": "Impossible de se connecter au contrôleur Tor. Le Navigateur Tor (téléchargeable sur torproject.org/fr) fonctionne-t-il en arrière-plan ?", - "settings_error_socket_port": "Impossible de se connecter au contrôleur Tor à {}:{}.", - "settings_error_socket_file": "Impossible de se connecter au contrôleur Tor en utilisant le fichier d’interface de connexion {}.", - "settings_error_auth": "Connecté à {}:{}, mais il est impossible de s’authentifier. Est-ce bien un contrôleur Tor ?", - "settings_error_missing_password": "Vous êtes connecté au contrôleur Tor, mais il exige un mot de passe d’authentification.", - "settings_error_unreadable_cookie_file": "Vous êtes connecté au contrôleur Tor, mais le mot de passe est peut-être erroné ou votre utilisateur n’est pas autorisé à lire le fichier témoin.", - "settings_error_bundled_tor_not_supported": "Utiliser la version de Tor intégrée à OnionShare ne fonctionne pas en mode développeur sous Windows ou macOS.", - "settings_error_bundled_tor_timeout": "La connexion à Tor prend trop de temps. Vous n’êtes peut-être pas connecté à Internet ou votre horloge système est-elle mal réglée ?", - "settings_error_bundled_tor_broken": "OnionShare n’a pas réussi à se connecter à Tor :\n{}", - "error_tor_protocol_error": "Une erreur est survenue avec Tor : {}", - "error_tor_protocol_error_unknown": "Une erreur inconnue est survenue avec Tor", - "error_invalid_private_key": "Ce type de clé privée n’est pas pris en charge", - "update_available": "Une nouvelle version d’OnionShare est proposée. Cliquez ici pour l’obtenir.

Vous utilisez la version {} et {} est la dernière version.", - "update_not_available": "Vous utilisez la dernière version d’OnionShare.", - "gui_tor_connection_ask_open_settings": "Oui", - "gui_tor_connection_ask_quit": "Fermer", - "gui_tor_connection_lost": "Vous êtes déconnecté de Tor.", - "share_via_onionshare": "Partager avec OnionShare", - "gui_save_private_key_checkbox": "Utiliser une adresse persistante", - "gui_share_url_description": "Quiconque disposant de cette adresse OnionShare et cette clé privée peut télécharger vos fichiers en utilisant le Navigateur Tor : ", - "gui_receive_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", - "gui_url_label_persistent": "Ce partage ne s’arrêtera pas automatiquement.

Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)", - "gui_url_label_stay_open": "Ce partage ne s’arrêtera pas automatiquement.", - "gui_url_label_onetime": "Ce partage s’arrêtera une fois que le premier téléchargement sera terminé.", - "gui_url_label_onetime_and_persistent": "Ce partage ne s’arrêtera pas automatiquement.

Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)", - "gui_status_indicator_share_stopped": "Prêt à partager", - "gui_status_indicator_share_working": "Démarrage…", - "gui_status_indicator_share_started": "Partage en cours", - "gui_status_indicator_receive_stopped": "Prêt à recevoir", - "gui_status_indicator_receive_working": "Démarrage…", - "gui_status_indicator_receive_started": "Réception", - "gui_file_info": "{} fichiers, {}", - "gui_file_info_single": "{} fichier, {}", - "history_in_progress_tooltip": "{} en cours", - "history_completed_tooltip": "Terminés :{}", - "receive_mode_downloads_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}", - "receive_mode_warning": "Avertissement : Le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur. Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.", - "gui_receive_mode_warning": "Le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur.

Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.", - "receive_mode_received_file": "Reçu : {}", - "gui_mode_share_button": "Partager des fichiers", - "gui_mode_receive_button": "Recevoir des fichiers", - "gui_settings_receiving_label": "Paramètres de réception", - "gui_settings_downloads_label": "Enregistrer les fichiers sous", - "gui_settings_downloads_button": "Parcourir", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "Le mode réception peut-être arrêté par l'expéditeur", - "gui_settings_public_mode_checkbox": "Mode public", - "systray_close_server_title": "Serveur OnionShare arrêté", - "gui_uploads": "Historique d'envoi", - "gui_no_uploads": "Pas encore d'envoi", - "gui_clear_history": "Tout effacer", - "gui_upload_in_progress": "Envoi démarré {}", - "gui_upload_finished_range": "Envoyé {} de {}", - "gui_upload_finished": "{} envoyé", - "gui_download_in_progress": "Téléchargement démarré {}", - "gui_open_folder_error_nautilus": "Impossible d’ouvrir le dossier, car nautilus n’est pas disponible. Le fichier est ici : {}", - "gui_settings_language_label": "Langue", - "help_stealth": "Utilisation de l’autorisation client (avancé)", - "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_autostop_timer": "Arrêter le mode réception ({} 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%", - "error_stealth_not_supported": "Pour utiliser l’autorisation client, Tor 0.2.9.1-alpha (ou le Navigateur Tor 6.5) et python3-stem 1.5.0 ou versions ultérieures sont exigés.", - "gui_settings_stealth_option": "Utiliser l’autorisation du client", - "timeout_upload_still_running": "En attente de la fin de l'envoi", - "gui_settings_autoupdate_check_button": "Vérifier la présence d’une nouvelle version", - "settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services onion éphémères : {}.\nPrend en charge l’authentification client : {}.\nPrend en charge la nouvelle génération d’adresses .onion : {}.", - "update_error_check_error": "Impossible de vérifier l’existence d’une mise à jour : peut-être n’êtes-vous pas connecté à Tor ou le site Web d’OnionShare est-il hors service ?", - "update_error_invalid_latest_version": "Impossible de vérifier la présence d’une mise à jour : le site Web d’OnionShare indique que la version la plus récente est la « {} » qui n’est pas reconnue…", - "gui_tor_connection_ask": "Ouvrir les paramètres pour résoudre le problème de connexion à Tor ?", - "gui_tor_connection_canceled": "Impossible de se connecter à Tor.\n\nAssurez-vous d’être connecté à Internet, puis rouvrez OnionShare et configurez sa connexion à Tor.", - "info_in_progress_uploads_tooltip": "{} envoi(s) en cours", - "info_completed_uploads_tooltip": "{} envoi(s) terminé(s)", - "error_cannot_create_downloads_dir": "Impossible de créer le dossier du mode réception : {}", - "receive_mode_upload_starting": "Un téléversement d’une taille totale de {} commence", - "systray_close_server_message": "Une personne a arrêté le serveur", - "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_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-azure 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_autostop_timer_checkbox": "Utiliser une 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. Veuillez 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. Veuillez la modifier 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 : {}", - "receive_mode_data_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}", - "gui_settings_data_dir_label": "Enregistrer les fichiers dans", - "gui_settings_data_dir_browse_button": "Parcourir", - "systray_page_loaded_message": "L’adresse OnionShare a été chargée", - "systray_share_started_title": "Le partage est commencé", - "systray_share_started_message": "L’envoi de fichiers à quelqu’un est commencé", - "systray_share_completed_title": "Le partage est achevé", - "systray_share_canceled_title": "Le partage a été annulé", - "systray_share_canceled_message": "Quelqu’un a annulé la réception de vos fichiers", - "systray_receive_started_title": "La réception est commencée", - "systray_receive_started_message": "Quelqu’un vous envoie des fichiers", - "gui_all_modes_history": "Historique", - "gui_all_modes_clear_history": "Tout effacer", - "gui_all_modes_transfer_started": "Démarré le {}", - "gui_all_modes_transfer_finished_range": "Transféré le {} à {}", - "gui_all_modes_transfer_finished": "Transféré le {}", - "gui_all_modes_progress_complete": "%p %, {0:s} écoulé.", - "gui_all_modes_progress_starting": "{0:s}, %p % (calcul en cours)", - "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_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_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 {}", - "gui_settings_onion_label": "Paramètres onion", - "gui_all_modes_transfer_canceled_range": "Annulé {} à {}", - "gui_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}", - "gui_start_server_autostart_timer_tooltip": "La minuterie de démarrage automatique se termine à {}", - "gui_waiting_to_start": "Programmé pour démarrer dans {}. Cliquez pour annuler.", - "gui_settings_autostart_timer_checkbox": "Utiliser une minuterie de démarrage automatique", - "gui_settings_autostart_timer": "Démarrer le partage à :", - "gui_server_autostart_timer_expired": "L’heure programmée est déjà passée. Veuillez la modifier pour démarrer le partage.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La minuterie d’arrêt automatique ne peut pas être identique ou antérieure à l’heure de démarrage automatique. Veuillez la modifier pour démarrer le partage.", - "gui_status_indicator_share_scheduled": "Programmé…", - "gui_status_indicator_receive_scheduled": "Programmé…", - "days_first_letter": "j", - "hours_first_letter": "h", - "minutes_first_letter": "min", - "seconds_first_letter": "s", - "gui_website_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut visiter votre site Web en utilisant le Navigateur Tor : ", - "systray_site_loaded_title": "Le site Web a été chargé", - "systray_site_loaded_message": "Le site Web OnionShare a été chargé", - "systray_website_started_title": "Début du partage du site Web", - "systray_website_started_message": "Quelqu’un visite votre site Web", - "gui_website_mode_no_files": "Aucun site Web n’a encore été partagé", - "gui_mode_website_button": "Publier un site Web", - "incorrect_password": "Le mot de passe est erroné", - "gui_settings_individual_downloads_label": "Décocher pour permettre le téléchargement de fichiers individuels", - "history_requests_tooltip": "{} requêtes Web", - "systray_individual_file_downloaded_title": "Le fichier individuel a été chargé", - "systray_individual_file_downloaded_message": "Le fichier individuel {} a été visualisé", - "gui_settings_csp_header_disabled_option": "Désactiver l’en-tête Politique de sécurité de contenu", - "gui_settings_website_label": "Paramètres des sites Web", - "gui_close_tab_warning_title": "Confirmez-vous ?", - "gui_new_tab_website_description": "Hébergez un site Web onion statique HTML à partir de votre ordinateur.", - "gui_new_tab_website_button": "Héberger un site Web", - "gui_new_tab_receive_description": "Transformez votre ordinateur en service de stockage fichiers. Les gens pourront utiliser le Navigateur Tor pour envoyer des fichiers vers votre ordinateur.", - "gui_new_tab_receive_button": "Recevoir des fichiers", - "gui_new_tab_share_description": "Choisissez sur votre ordinateur des fichiers à envoyer à quelqu’un d’autre. La ou les personnes à qui vous souhaitez envoyer des fichiers devront utiliser le Navigateur Tor pour les télécharger de vous.", - "gui_new_tab_share_button": "Partager des fichiers", - "gui_new_tab_tooltip": "Ouvrir un nouvel onglet", - "gui_new_tab": "Nouvel onglet", - "gui_close_tab_warning_persistent_description": "Cet onglet est persistant. Si vous le fermez, vous perdrez l’adresse onion qu’il utilise. Voulez-vous vraiment le fermer ?", - "mode_settings_autostop_timer_checkbox": "Arrêter un service onion à une heure prédéterminée", - "mode_settings_autostart_timer_checkbox": "Démarrer un service onion à une heure prédéterminée", - "mode_settings_website_disable_csp_checkbox": "Ne pas envoyer l’en-tête par défaut de Politique de sécurité de contenu (permet à votre site Web d’utiliser des ressources tierces)", - "mode_settings_receive_data_dir_browse_button": "Parcourir", - "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans", - "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)", - "mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)", - "mode_settings_public_checkbox": "Ceci est un service OnionShare public (sans clé privée)", - "mode_settings_persistent_checkbox": "Enregistrer cet onglet et l’ouvrir automatiquement quand j’ouvre OnionShare", - "mode_settings_advanced_toggle_hide": "Cacher les paramètres avancés", - "mode_settings_advanced_toggle_show": "Afficher les paramètres avancés", - "gui_quit_warning_cancel": "Annuler", - "gui_quit_warning_description": "Le partage est actif dans certains de vos onglets. Si vous fermez l’appli, tous vos onglets seront fermés. Voulez-vous vraiment la fermer ?", - "gui_quit_warning_title": "Confirmez-vous ?", - "gui_close_tab_warning_cancel": "Annuler", - "gui_close_tab_warning_close": "Fermer", - "gui_close_tab_warning_website_description": "Vous hébergez activement un site Web. Voulez-vous vraiment fermer cet onglet ?", - "gui_close_tab_warning_receive_description": "Vous êtes en train de recevoir des fichiers. Voulez-vous vraiment fermer cet onglet ?", - "gui_close_tab_warning_share_description": "Vous êtes en train d’envoyer des fichiers. Voulez-vous vraiment fermer cet onglet ?", - "gui_tab_name_chat": "Dialogue en ligne", - "gui_tab_name_website": "Site Web", - "gui_tab_name_receive": "Recevoir", - "gui_tab_name_share": "Partager", - "gui_new_tab_chat_button": "Dialoguer anonymement", - "gui_open_folder_error": "Échec d’ouverture du dossier avec xdg-open. Le fichier est ici : {}", - "gui_qr_code_description": "Balayez ce code QR avec un lecteur de code QR, tel que l’appareil photo votre appareil, afin de partager plus facilement l’adresse OnionShare avec quelqu’un.", - "gui_qr_code_dialog_title": "Code QR d’OnionShare", - "gui_show_qr_code": "Afficher le code QR", - "gui_receive_flatpak_data_dir": "Comme vous avez installé OnionShare grâce à Flatpak, vous devez enregistrer vos fichiers dans un sous-dossier de ~/OnionShare.", - "gui_chat_stop_server": "Arrêter le serveur de dialogue en ligne", - "gui_chat_start_server": "Démarrer le serveur de dialogue en ligne", - "gui_chat_stop_server_autostop_timer": "Arrêter le serveur de dialogue en ligne ({})", - "gui_file_selection_remove_all": "Tout supprimer", - "gui_remove": "Supprimer", - "gui_main_page_chat_button": "Lancer le dialogue en ligne", - "gui_main_page_website_button": "Lancer l’hébergement", - "gui_main_page_receive_button": "Lancer la réception", - "gui_main_page_share_button": "Lancer le partage", - "gui_chat_url_description": "Quiconque disposant de cette adresse OnionShare et de cette clé privée peut se joindre à ce salon de discussion avec le Navigateur Tor : ", - "error_port_not_available": "Le port OnionShare n’est pas accessible", - "gui_rendezvous_cleanup_quit_early": "Fermer avant", - "gui_rendezvous_cleanup": "En attente de la fermeture des circuits Tor pour être certain que vos fichiers ont été transférés avec succès.\n\nCela pourrait prendre quelques minutes.", - "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué.", - "history_receive_read_message_button": "Lire le message", - "mode_settings_receive_webhook_url_checkbox": "Utiliser un point d’ancrage Web de notification", - "mode_settings_receive_disable_files_checkbox": "Désactiver le téléversement de fichiers", - "mode_settings_receive_disable_text_checkbox": "Désactiver l’envoi de texte", - "mode_settings_title_label": "Titre personnalisé", - "gui_status_indicator_chat_started": "En conversation", - "gui_status_indicator_chat_scheduled": "Planifié…", - "gui_status_indicator_chat_working": "Démarrage…", - "gui_status_indicator_chat_stopped": "Prêt à dialoguer", - "gui_copied_client_auth_title": "Clé privée copiée", - "gui_please_wait_no_button": "Démarrage…", - "gui_copied_client_auth": "Clé privée copiée dans le presse-papiers", - "gui_qr_label_url_title": "Adresse OnionShare", - "gui_hide": "Cacher", - "gui_qr_label_auth_string_title": "Clé privée", - "gui_copy_client_auth": "Copier la clé privée", - "gui_share_url_public_description": "Quiconque disposant de cette adresse OnionShare peut télécharger vos fichiers en utilisant le Navigateur Tor : ", - "gui_url_instructions": "Tout d'abord, envoyez l'adresse OnionShare ci-dessous :", - "gui_settings_theme_light": "Clair", - "gui_reveal": "Montrer", - "gui_chat_url_public_description": "Quiconque disposant de cette adresse OnionShare peut se joindre à ce salon de discussion en utilisant le Navigateur Tor : ", - "gui_url_instructions_public_mode": "Envoyez l'adresse OnionShare ci-dessous :", - "gui_settings_theme_label": "Thème", - "gui_settings_theme_auto": "Automatique", - "gui_settings_theme_dark": "Sombre", - "gui_website_url_public_description": "Quiconque disposant de cette adresse OnionShare peut visiter votre site Web en utilisant le Navigateur Tor : ", - "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge la fonctionnalité \"stealth\" (le client d'authentification). Veuillez essayer avec une version plus récente de Tor, ou utilisez le mode 'public' s'il n'a pas besoin d'être privé.", - "gui_receive_url_public_description": "Quiconque disposant de cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", - "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :", - "gui_dragdrop_sandbox_flatpak": "Afin de rendre la sandbox Flatpak plus sécurisée, le glisser-coller n'est pas pris en charge. Utilisez les boutons Ajouter des fichiers et Ajouter des dossiers pour chercher vos fichiers à la place.", - "moat_solution_empty_error": "Vous devez saisir les caractères apparaissant sur l'image", - "gui_settings_stop_active_tabs_label": "Il y a des services en cours d'éxécution dans certains de vos onglets.\nVous devez arrêter tout les services pour changer vos paramètres Tor.", - "moat_captcha_label": "Résolvez le CAPTCHA pour demander un pont.", - "gui_tor_settings_window_title": "Paramètres Tor", - "gui_settings_controller_extras_label": "Paramètres Tor", - "gui_settings_tor_bridges_label": "Les ponts vous aident à accéder au réseau Tor dans les lieux où Tor est bloqué. Selon l'endroit où vous êtes, un pont peut marcher mieux qu'un autre.", - "gui_settings_bridge_use_checkbox": "Utiliser un pont", - "gui_settings_bridge_radio_builtin": "Choisir un pont pré-configuré", - "gui_settings_bridge_none_radio_option": "Ne pas utiliser de pont", - "gui_settings_bridge_moat_radio_option": "Demander un pont depuis torproject.org", - "gui_settings_bridge_moat_button": "Demander un nouveau pont", - "gui_settings_bridge_custom_radio_option": "Fournir un pont que vous avez appris par une source sure", - "gui_settings_bridge_custom_placeholder": "écrire address:port (une par ligne)", - "gui_settings_moat_bridges_invalid": "Vous n'avez pas encore demandé un pont depuis torprohect.com.", - "gui_settings_version_label": "Vous utilisez OnionShare {}", - "gui_settings_help_label": "Besoin d'aide ? Allez voir docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Envoyer en-tête de Politique de sécurité de contenu personnalisé", - "moat_contact_label": "Entrain de contacter BridgeDB...", - "moat_captcha_placeholder": "Saisissez les caractères apparaissant sur l'image", - "moat_captcha_submit": "Envoyer", - "moat_captcha_reload": "Recharger", - "moat_bridgedb_error": "Erreur en tentant de contacter BridgeDB.", - "moat_captcha_error": "La solution est erronée. Veuillez réessayer.", - "mode_tor_not_connected_label": "OnionShare n'est pas connecté au réseau Tor" -} diff --git a/desktop/src/onionshare/resources/locale/ga.json b/desktop/src/onionshare/resources/locale/ga.json deleted file mode 100644 index 7d8563a9..00000000 --- a/desktop/src/onionshare/resources/locale/ga.json +++ /dev/null @@ -1,236 +0,0 @@ -{ - "config_onion_service": "Seirbhís onion á shocrú ar phort {0:d}.", - "preparing_files": "Comhaid á gcomhbhrú.", - "give_this_url": "Tabhair an seoladh seo don fhaighteoir:", - "give_this_url_stealth": "Tabhair an seoladh seo agus an líne HidServAuth seo don fhaighteoir:", - "give_this_url_receive": "Tabhair an seoladh seo don seoltóir:", - "give_this_url_receive_stealth": "Tabhair an seoladh seo agus an líne HidServAuth seo don seoltóir:", - "ctrlc_to_stop": "Brúigh Ctrl+C chun stop a chur leis an bhfreastalaí", - "not_a_file": "Ní comhad bailí é {0:s}.", - "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_autostop_timer": "Cuireadh stop leis toisc go bhfuil an t-amadóir uathstoptha caite", - "closing_automatically": "Cuireadh stop leis toisc go bhfuil an t-aistriú 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", - "systray_menu_exit": "Scoir", - "systray_download_started_title": "Tosaíodh Íoslódáil OnionShare", - "systray_download_started_message": "Thosaigh úsáideoir ag íoslódáil do chuid comhad", - "systray_download_completed_title": "Críochnaíodh Íoslódáil OnionShare", - "systray_download_completed_message": "Tá do chuid comhad íoslódáilte ag an úsáideoir", - "systray_download_canceled_title": "Cuireadh Íoslódáil OnionShare ar ceal", - "systray_download_canceled_message": "Chuir an t-úsáideoir an íoslódáil ar ceal", - "systray_upload_started_title": "Tosaíodh Uaslódáil OnionShare", - "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_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_verbose": "Déan tuairisc ar earráidí OnionShare ar stdout, agus earráidí Gréasáin ar an diosca", - "help_filename": "Liosta comhad nó fillteán le comhroinnt", - "help_config": "Suíomh saincheaptha don chomhad cumraíochta JSON (roghnach)", - "gui_drag_and_drop": "Tarraing agus scaoil comhaid agus fillteáin chun iad a chomhroinnt", - "gui_add": "Cuir Leis", - "gui_delete": "Scrios", - "gui_choose_items": "Roghnaigh", - "gui_share_start_server": "Comhroinn", - "gui_share_stop_server": "Stop ag comhroinnt", - "gui_share_stop_server_autostop_timer": "Stop ag Comhroinnt ({})", - "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_autostop_timer": "Stop an Mód Glactha ({} fágtha)", - "gui_receive_stop_server_autostop_timer_tooltip": "Amadóir uathstoptha caite {}", - "gui_copy_url": "Cóipeáil an Seoladh", - "gui_downloads": "Stair Íoslódála", - "gui_no_downloads": "Níl aon rud íoslódáilte agat fós", - "gui_canceled": "Curtha ar ceal", - "gui_copied_url_title": "Cóipeáladh an Seoladh OnionShare", - "gui_copied_url": "Cóipeáladh an seoladh OnionShare go dtí an ghearrthaisce", - "gui_please_wait": "Ag tosú... Cliceáil lena chur ar ceal.", - "gui_download_upload_progress_complete": "%[%, {0:s} caite.", - "gui_download_upload_progress_starting": "{0:s}, %p% (á áireamh)", - "gui_download_upload_progress_eta": "{0:s}, am teachta measta: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Fan soic", - "gui_share_quit_warning": "Tá tú le linn roinnt comhad a sheoladh. An bhfuil tú cinnte gur mhaith leat OnionShare a scor?", - "gui_receive_quit_warning": "Tá tú le linn roinnt comhad a íoslódáil. An bhfuil tú cinnte gur mhaith leat OnionShare a scor?", - "gui_quit_warning_quit": "Scoir", - "gui_quit_warning_dont_quit": "Cealaigh", - "zip_progress_bar_format": "Á chomhbhrú: %p%", - "error_stealth_not_supported": "Chun údarú cliaint a úsáid, teastaíonn uait Tor 0.2.9.1-alpha (nó Brabhsálaí 6.5) agus python3-stem 1.5.0.", - "error_ephemeral_not_supported": "Teastaíonn uait ar a laghad Tor 0.2.7.1 agus python3-stem 1.4.0 chun OnionShare a úsáid.", - "gui_settings_window_title": "Socruithe", - "gui_settings_whats_this": "Cad é seo", - "gui_settings_stealth_option": "Úsáid údarú cliaint", - "gui_settings_autoupdate_label": "Lorg nuashonruithe", - "gui_settings_autoupdate_option": "Cuir in iúl dom nuair a bheidh leagan nua ar fáil", - "gui_settings_autoupdate_timestamp": "Seiceáilte: {}", - "gui_settings_autoupdate_timestamp_never": "Níor seiceáladh riamh", - "gui_settings_autoupdate_check_button": "Lorg Nuashonrú", - "gui_settings_general_label": "Socruithe ginearálta", - "gui_settings_sharing_label": "Socruithe comhroinnte", - "gui_settings_close_after_first_download_option": "Stop ag comhroinnt tar éis na comhaid a sheoladh", - "gui_settings_connection_type_label": "Cén chaoi ar chóir do OnionShare ceangal le Tor?", - "gui_settings_connection_type_bundled_option": "Úsáid an leagan de Tor ionsuite in OnionShare", - "gui_settings_connection_type_automatic_option": "Déan cumraíocht uathoibríoch le Brabhsálaí Tor", - "gui_settings_connection_type_control_port_option": "Ceangal trí phort rialaithe", - "gui_settings_connection_type_socket_file_option": "Ceangal trí chomhad soicéid", - "gui_settings_connection_type_test_button": "Tástáil an Ceangal le Tor", - "gui_settings_control_port_label": "Port rialaithe", - "gui_settings_socket_file_label": "Comhad soicéid", - "gui_settings_socks_label": "Port SOCKS", - "gui_settings_authenticate_label": "Socruithe fíordheimhnithe Tor", - "gui_settings_authenticate_no_auth_option": "Gan fíordheimhniú, nó fíordheimhniú le fianán", - "gui_settings_authenticate_password_option": "Focal faire", - "gui_settings_password_label": "Focal faire", - "gui_settings_tor_bridges": "Tacaíocht do dhroichid Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ná húsáid droichid", - "gui_settings_tor_bridges_obfs4_radio_option": "Bain úsáid as córais iompair ionphlugáilte ionsuite obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Bain úsáid as córais iompair ionphlugáilte ionsuite obfs4 (obfs4proxy de dhíth)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Bain úsáid as córais iompair ionphlugáilte ionsuite meek_lite(Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bain úsáid as córais iompair ionphlugáilte ionsuite meek_lite (Azure) (obfs4proxy de dhíth)", - "gui_settings_meek_lite_expensive_warning": "Rabhadh: Tá sé an-chostasach ar Thionscadal Tor na droichid meek_lite a chur ar fáil.

Iarraimid ort gan iad a úsáid má tá tú in ann ceangal díreach a bhunú le Tor, nó trí chóras iompair obfs4, nó trí dhroichead eile.", - "gui_settings_tor_bridges_custom_radio_option": "Úsáid droichid shaincheaptha", - "gui_settings_tor_bridges_custom_label": "Is féidir leat droichid a fháil ó https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Níl aon cheann de na droichid ag obair.\nSeiceáil arís iad, nó bain triail as droichid eile.", - "gui_settings_button_save": "Sábháil", - "gui_settings_button_cancel": "Cealaigh", - "gui_settings_button_help": "Cabhair", - "gui_settings_autostop_timer_checkbox": "Úsáid an t-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 {}:{}.", - "settings_error_socket_file": "Ní féidir ceangal a bhunú leis an rialaitheoir Tor trí chomhad soicéid {}.", - "settings_error_auth": "Ceangailte le {}:{}, ach ní féidir an ceangal a fhíordheimhniú. B'fhéidir nach rialaitheoir Tor é seo?", - "settings_error_missing_password": "Ceangailte le rialaitheoir Tor, ach teastaíonn focal faire uaidh.", - "settings_error_unreadable_cookie_file": "Ceangailte le rialaitheoir Tor, ach seans go bhfuil an focal faire mícheart, nó níl cead ag an úsáideoir an comhad ina bhfuil na fianáin a léamh.", - "settings_error_bundled_tor_not_supported": "Ní féidir an leagan de Tor a thagann le OnionShare a úsáid sa mód forbartha ar Windows nó ar macOS.", - "settings_error_bundled_tor_timeout": "An iomarca ama ag ceangal le Tor. B'fhéidir nach bhfuil ceangailte leis an Idirlíon, nó nach bhfuil clog do chórais socraithe mar is ceart?", - "settings_error_bundled_tor_broken": "Níorbh fhéidir le OnionShare ceangal le Tor sa gcúlra:\n{}", - "settings_test_success": "Ceangailte leis an rialaitheoir Tor.\n\nLeagan de Tor: {}\nTacaíonn sé le seirbhísí onion gearrshaolacha: {}.\nTacaíonn sé le fíordheimhniú cliaint: {}.\nTacaíonn sé le seoltaí .onion den chéad ghlúin eile: {}.", - "error_tor_protocol_error": "Tharla earráid le Tor: {}", - "error_tor_protocol_error_unknown": "Tharla earráid anaithnid le Tor", - "error_invalid_private_key": "Ní thacaítear le heochair phríobháideach den sórt seo", - "connecting_to_tor": "Ag ceangal le líonra Tor", - "update_available": "Leagan nua de OnionShare ar fáil. Cliceáil anseo lena íoslódáil.

Tá {} agat agus is é {} an leagan is déanaí.", - "update_error_check_error": "Theip orainn nuashonrú a lorg: B'fhéidir nach bhfuil tú ceangailte le Tor, nó nach bhfuil suíomh OnionShare ag obair faoi láthair?", - "update_error_invalid_latest_version": "Theip orainn nuashonruithe a lorg: Deir suíomh OnionShare gurb é '{}' an leagan is déanaí ach ní aithnítear é seo…", - "update_not_available": "Tá an leagan is déanaí de OnionShare agat cheana.", - "gui_tor_connection_ask": "An bhfuil fonn ort na socruithe líonra a oscailt chun an fhadhb a réiteach?", - "gui_tor_connection_ask_open_settings": "Tá", - "gui_tor_connection_ask_quit": "Scoir", - "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_autostop_timer": "Bhí an t-amadóir uathstoptha caite sular thosaigh an freastalaí. Caithfidh tú comhroinnt nua a chruthú.", - "gui_server_autostop_timer_expired": "Tá an t-amadóir uathstoptha caite cheana. Caithfidh tú é a athshocrú sular féidir leat comhaid a chomhroinnt.", - "share_via_onionshare": "Comhroinn trí OnionShare", - "gui_save_private_key_checkbox": "Úsáid seoladh seasmhach", - "gui_share_url_description": "Tá aon duine a bhfuil an seoladh agus eochair phríobháideach seo OnionShare aige/aici in ann do chuid comhad a íoslódáil le Brabhsálaí Tor: ", - "gui_receive_url_description": "Tá aon duine a bhfuil an seoladh agus eochair phríobháideach seo OnionShare aige/aici in ann comhaid a uaslódáil go dtí do ríomhaire le Brabhsálaí Tor: ", - "gui_url_label_persistent": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.

Úsáidfear an seoladh seo arís gach uair a dhéanfaidh tú comhroinnt. (Chun seoladh aon uaire a úsáid, múch \"Úsáid seoladh seasmhach\" sna socruithe.)", - "gui_url_label_stay_open": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.", - "gui_url_label_onetime": "Stopfaidh an chomhroinnt seo nuair a chríochnóidh sé den chéad uair.", - "gui_url_label_onetime_and_persistent": "Ní stopfaidh an chomhroinnt seo go huathoibríoch.

Úsáidfear an seoladh seo arís gach uair a dhéanfaidh tú comhroinnt. (Chun seoladh aon uaire a úsáid, múch \"Úsáid seoladh seasmhach\" sna socruithe.)", - "gui_status_indicator_share_stopped": "Réidh le comhroinnt", - "gui_status_indicator_share_working": "Á thosú…", - "gui_status_indicator_share_started": "Comhroinnt", - "gui_status_indicator_receive_stopped": "Réidh le glacadh le comhaid", - "gui_status_indicator_receive_working": "Á thosú…", - "gui_status_indicator_receive_started": "Glacadh", - "gui_file_info": "{} comhad, {}", - "gui_file_info_single": "{} chomhad, {}", - "history_in_progress_tooltip": "{} ar siúl", - "history_completed_tooltip": "{} críochnaithe", - "info_in_progress_uploads_tooltip": "{} uaslódáil ar siúl faoi láthair", - "info_completed_uploads_tooltip": "{} uaslódáil críochnaithe", - "error_cannot_create_downloads_dir": "Níorbh fhéidir fillteán a chruthú do chomhaid a nglacann tú leo: {}", - "receive_mode_downloads_dir": "Cuirfear comhaid a sheoltar chugat san fhillteán seo: {}", - "receive_mode_warning": "Rabhadh: Sa mód glactha, beidh daoine in ann comhaid a uaslódáil ar do ríomhaire, fiú comhaid chontúirteacha a dhéanfadh dochar do do ríomhaire dá n-osclófá iad. Ná hoscail ach comhaid ó dhaoine iontaofa mura bhfuil tú i do shaineolaí cruthanta slándála.", - "gui_receive_mode_warning": "Sa mód glactha, beidh daoine in ann comhaid a uaslódáil ar do ríomhaire.

Tá comhaid áirithe an-chontúirteach agus dhéanfaidís dochar do do ríomhaire dá n-osclófá iad. Ná hoscail ach comhaid ó dhaoine iontaofa mura bhfuil tú i do shaineolaí cruthanta slándála.", - "receive_mode_upload_starting": "Uaslódáil, méid iomlán {}, á tosú", - "receive_mode_received_file": "Faighte: {}", - "gui_mode_share_button": "Comhroinn Comhaid", - "gui_mode_receive_button": "Glac le Comhaid", - "gui_settings_receiving_label": "Socruithe glactha", - "gui_settings_downloads_label": "Sábháil comhaid i", - "gui_settings_downloads_button": "Brabhsáil", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "Tá cead ag an seoltóir stop a chur leis an mód glactha", - "gui_settings_public_mode_checkbox": "Mód poiblí", - "systray_close_server_title": "Tá an freastalaí OnionShare dúnta", - "systray_close_server_message": "Dhún úsáideoir an freastalaí", - "systray_page_loaded_title": "Lódáladh an leathanach", - "systray_download_page_loaded_message": "Lódáil úsáideoir an leathanach íoslódála", - "systray_upload_page_loaded_message": "Lódáil úsáideoir an leathanach uaslódála", - "gui_uploads": "Stair Uaslódála", - "gui_no_uploads": "Níl aon rud uaslódáilte agat fós", - "gui_clear_history": "Glan Uile", - "gui_upload_in_progress": "Tosaíodh an Uaslódáil {}", - "gui_upload_finished_range": "Uaslódáladh {} go {}", - "gui_upload_finished": "Uaslódáladh {}", - "gui_download_in_progress": "Tosaíodh an Íoslódáil {}", - "gui_open_folder_error_nautilus": "Ní féidir an fillteán a oscailt toisc nach bhfuil nautilus ar fáil. Tá an comhad anseo: {}", - "gui_settings_language_label": "Do rogha teanga", - "gui_settings_language_changed_notice": "Atosaigh OnionShare chun an teanga nua a chur i bhfeidhm.", - "gui_add_files": "Cuir Comhaid Leis", - "gui_add_folder": "Cuir Fillteán Leis", - "gui_stop_server_autostop_timer_tooltip": "Críochnóidh an t-amadóir uathstoptha ag {}", - "gui_start_server_autostart_timer_tooltip": "Críochnóidh an t-amadóir uath-thosaithe ag {}", - "gui_waiting_to_start": "Tosóidh sé i gceann {}. Cliceáil lena chur ar ceal.", - "gui_settings_onion_label": "Socruithe Onion", - "gui_settings_autostart_timer_checkbox": "Úsáid an t-amadóir uath-thosaithe", - "gui_settings_autostart_timer": "Tosaigh ag comhroinnt ag:", - "gui_server_autostart_timer_expired": "Tá an t-am sceidealta caite cheana. Caithfidh tú é a nuashonrú chun comhaid a chomhroinnt.", - "gui_connect_to_tor_for_onion_settings": "Ceangail le Tor chun socruithe na seirbhíse onion a fheiceáil", - "gui_status_indicator_share_scheduled": "Sceidealaithe…", - "gui_status_indicator_receive_scheduled": "Sceidealaithe…", - "error_cannot_create_data_dir": "Níorbh fhéidir fillteán sonraí OnionShare a chruthú: {}", - "gui_settings_data_dir_label": "Sábháil comhaid i", - "gui_settings_data_dir_browse_button": "Brabhsáil", - "systray_page_loaded_message": "Lódáladh an seoladh OnionShare", - "systray_share_started_title": "Tosaíodh an Chomhroinnt", - "systray_share_started_message": "Seoladh na gcomhad á thosú", - "systray_share_completed_title": "Comhroinnt curtha i gcrích", - "systray_receive_started_message": "Tá duine éigin ag seoladh comhad chugat", - "gui_all_modes_history": "Stair", - "gui_all_modes_clear_history": "Glan Uile", - "gui_all_modes_transfer_started": "Tosaithe {}", - "gui_all_modes_transfer_finished_range": "Aistrithe {} - {}", - "gui_all_modes_transfer_finished": "Aistrithe {}", - "gui_all_modes_transfer_canceled_range": "Cealaithe {} - {}", - "gui_all_modes_transfer_canceled": "Cealaithe {}", - "systray_share_completed_message": "Seoladh na comhaid", - "systray_share_canceled_title": "Cealaíodh an Chomhroinnt", - "systray_share_canceled_message": "Chealaigh duine éigin an chomhroinnt", - "gui_all_modes_progress_starting": "{0:s}, %p% (á áireamh)", - "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "gui_share_mode_no_files": "Níl aon chomhaid seolta fós", - "days_first_letter": "l", - "hours_first_letter": "u", - "minutes_first_letter": "n", - "seconds_first_letter": "s", - "gui_mode_website_button": "Foilsigh an Suíomh", - "incorrect_password": "Focal faire mícheart", - "history_requests_tooltip": "{} iarratas gréasáin", - "gui_settings_csp_header_disabled_option": "Díchumasaigh an ceanntásc Content Security Policy", - "gui_settings_website_label": "Socruithe an tsuímh", - "gui_please_wait_no_button": "Á thosú…", - "gui_hide": "Folaigh", - "gui_reveal": "Nocht", - "gui_qr_label_auth_string_title": "Eochair Phríobháideach", - "gui_qr_label_url_title": "Seoladh OnionShare", - "gui_qr_code_dialog_title": "Cód QR OnionShare", - "gui_show_qr_code": "Taispeáin an Cód QR", - "gui_copied_client_auth": "Cóipeáladh an Eochair Phríobháideach go dtí an ghearrthaisce", - "gui_copied_client_auth_title": "Cóipeáladh an Eochair Phríobháideach", - "gui_copy_client_auth": "Cóipeáil an Eochair Phríobháideach", - "gui_receive_flatpak_data_dir": "Toisc gur bhain tú úsáid as Flatpak chun OnionShare a shuiteáil, caithfidh tú comhaid a shábháil in ~/OnionShare.", - "gui_chat_stop_server": "Stop an freastalaí comhrá", - "gui_chat_start_server": "Tosaigh an freastalaí comhrá", - "gui_file_selection_remove_all": "Bain Uile", - "gui_remove": "Bain" -} diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json deleted file mode 100644 index 6600dd9b..00000000 --- a/desktop/src/onionshare/resources/locale/gl.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "not_a_readable_file": "{0:s} non é un ficheiro lexible.", - "other_page_loaded": "O enderezo cargou", - "incorrect_password": "Contrasinal incorrecto", - "close_on_autostop_timer": "Detido porque o temporizador de parada automática rematou", - "closing_automatically": "Detido porque se completou a transferencia", - "large_filesize": "Aviso: unha compartición moi grande podería tomar horas", - "gui_drag_and_drop": "Arrastra e solta ficheiros e cartafoles para compartir", - "gui_add": "Engadir", - "gui_add_files": "Engadir ficheiros", - "gui_add_folder": "Engadir cartafol", - "gui_remove": "Eliminar", - "gui_file_selection_remove_all": "Eliminar todo", - "gui_choose_items": "Escolle", - "gui_share_start_server": "Comeza a compartir", - "gui_share_stop_server": "Deixar de compartir", - "gui_share_stop_server_autostop_timer": "Deixar de compartir ({})", - "gui_chat_start_server": "Inicia o servidor de chat", - "gui_chat_stop_server": "Deter o servidor de chat", - "gui_stop_server_autostop_timer_tooltip": "O temporizador de detención automática rematará o {}", - "gui_start_server_autostart_timer_tooltip": "O temporizador de inicio automático comeza o {}", - "gui_receive_start_server": "Iniciar o modo de recepción", - "gui_receive_stop_server": "Deter o modo de Recepción", - "gui_receive_stop_server_autostop_timer": "Deter o modo Recepción ({} restante)", - "gui_receive_flatpak_data_dir": "Debido a que instalaches OnionShare usando Flatpk, tes que gardar os ficheiros nun cartafol dentro de ~/OnionShare.", - "gui_copy_url": "Copiar enderezo", - "gui_canceled": "Cancelado", - "gui_copied_url_title": "Enderezo de OnionShare copiado", - "gui_copied_url": "Enderezo OnionShare copiado ó portapapeis", - "gui_show_qr_code": "Mostrar código QR", - "gui_qr_code_dialog_title": "Código QR OnionShare", - "gui_waiting_to_start": "Programado para comezar en {}. Fai clic para cancelar.", - "gui_please_wait": "Iniciando... Fai click para cancelar.", - "zip_progress_bar_format": "Comprimindo: %p%", - "gui_settings_window_title": "Axustes", - "gui_settings_autoupdate_label": "Comproba se hai nova versión", - "gui_settings_autoupdate_option": "Avisarme cando esté dispoñible unha nova versión", - "gui_settings_autoupdate_timestamp": "Última comprobación: {}", - "gui_settings_autoupdate_timestamp_never": "Nunca", - "gui_settings_autoupdate_check_button": "Comprobar se hai nova versión", - "gui_settings_connection_type_label": "Como debe conectarse OnionShare a Tor?", - "gui_settings_connection_type_bundled_option": "Usa a versión de Tor incluída en OnionShare", - "gui_settings_connection_type_automatic_option": "Intenta a configuración automática con Tor Browser", - "gui_settings_connection_type_control_port_option": "Conecta usando porto de control", - "gui_settings_connection_type_socket_file_option": "Conecta usando ficheiro socket", - "gui_settings_connection_type_test_button": "Probar conexión con Tor", - "gui_settings_control_port_label": "Porto de control", - "gui_settings_socket_file_label": "Ficheiro Socket", - "gui_settings_socks_label": "Porto SOCKS", - "gui_settings_authenticate_label": "Axustes de autenticación Tor", - "gui_settings_authenticate_no_auth_option": "Sen autenticación, ou autenticación por cookie", - "gui_settings_authenticate_password_option": "Contrasinal", - "gui_settings_password_label": "Contrasinal", - "gui_settings_tor_bridges": "Conectar usando unha ponte Tor?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Non usar pontes", - "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transporte engadido obfs4 incluído", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transporte engadido obfs4 (require obfs4proxy) incluído", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transporte engadido meek_lite (Azure) incluído", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transporte engadido meek_lite (Azure) incluído (require obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure requiren moitos recursos do Proxecto Tor.

Utilízao só se non podes conectar directamente con Tor, vía transporte obfs4 ou outras pontes habituais.", - "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", - "gui_settings_tor_bridges_custom_label": "Podes obter pontes en https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Non funciona ningunha das pontes engadidas. Compróbaas ou engade outras.", - "gui_settings_button_save": "Gardar", - "gui_settings_button_cancel": "Cancelar", - "gui_settings_button_help": "Axuda", - "settings_test_success": "Conectado ó controlador Tor.\n\nVersión Tor: {}\nSoporte de servicios efémeros onion: {}.\nSoporte da autenticación do cliente: {}.\nSoporte de enderezos next-gen .onion: {}.", - "connecting_to_tor": "Conectando á rede Tor", - "update_available": "Nova saída OnionShare. Preme aquí para obtela.

Estas a usar {} e a última é {}.", - "update_error_invalid_latest_version": "Non se puido comprobar actualización: A web de OnionShare di que a última versión non é recoñecible '{}'…", - "update_error_check_error": "Non se puido comprobar actualización: Pode que non estés conectado a Tor, ou a web OnionShare está caída?", - "update_not_available": "Xa estás executando a última OnionShare.", - "gui_tor_connection_ask": "Abrir os axustes para arranxar a conexión a Tor?", - "gui_tor_connection_ask_open_settings": "Si", - "gui_tor_connection_ask_quit": "Non", - "gui_tor_connection_error_settings": "Intenta cambiar nos axustes o xeito en que OnionShare se conecta á rede Tor.", - "gui_tor_connection_canceled": "Non hai conexión a Tor.\n\nAsegúrate de ter conexión a Internet, volve a abrir OnionShare e configura a súa conexión a Tor.", - "gui_tor_connection_lost": "Desconectado de Tor.", - "gui_server_started_after_autostop_timer": "O temporizador de detención automática esgotouse antes de iniciar o servidor. Fai outra compartición.", - "gui_server_autostop_timer_expired": "O temporizador de detención automática esgotouse. Configúrao para comezar a compartir.", - "gui_server_autostart_timer_expired": "A hora programada xa pasou. Configúraa para comezar a compartir.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "A hora de detención automática non pode ser a mesma ou anterior á hora de inicio. Configúraa para comezar a compartir.", - "share_via_onionshare": "Compartir vía OnionShare", - "gui_share_url_description": "Calquera con este enderezo OnionShare e chave privada pode descargar os teus ficheiros usando o Tor Browser: ", - "gui_website_url_description": "Calqueracon este enderezo OnionShare e chave privada pode visitar o teu sition web usando Tor Browser: ", - "gui_receive_url_description": "Calquera con este enderezo OnionShare e chave privada pode subir ficheiros ó teu ordenador usando Tor Browser: ", - "gui_chat_url_description": "Calquera con este enderezo OnionShare e chave privada pode unirse a esta sala de conversa usando Tor Browser: ", - "gui_url_label_persistent": "Esta compartición non se rematará automáticamente.

En futuras comparticións reutilizará o enderezo. (Para enderezos dun só uso, desactiva nos axustes \"Usar enderezo persistente\".)", - "gui_url_label_stay_open": "Este enderezo non desaparecerá automáticamente.", - "gui_url_label_onetime": "Esta compartición deterase tras o primeiro completado.", - "gui_url_label_onetime_and_persistent": "Esta compartición non se deterá automáticamente.

Cada futura compartición reutilizará o enderezo. (Para usar enderezos dun só uso, desactiva nos axustes \"Usar enderezo persistente\".)", - "gui_status_indicator_share_stopped": "Preparado para compartir", - "gui_status_indicator_share_working": "Comezando…", - "gui_status_indicator_share_scheduled": "Programado…", - "gui_status_indicator_share_started": "Compartindo", - "gui_status_indicator_receive_stopped": "Preparado para recibir", - "gui_status_indicator_receive_working": "Comezando…", - "gui_status_indicator_receive_scheduled": "Programado…", - "gui_status_indicator_receive_started": "Recibindo", - "gui_file_info": "{} ficheiros, {}", - "gui_file_info_single": "{} ficheiro, {}", - "history_in_progress_tooltip": "{} en progreso", - "history_completed_tooltip": "{} completado", - "history_requests_tooltip": "{} solicitudes web", - "error_cannot_create_data_dir": "Non se puido crear o cartafol de datos OnionShare: {}", - "gui_receive_mode_warning": "O modo Recepción permite que outras poidan subir ficheiros á túa computadora.

Potencialmente algúns ficheiros poderían tomar control sobre a túa computadora ó abrilos. Abre só elementos que recibas de xente de confianza, ou se realmente sabes o que fas.", - "gui_open_folder_error": "Fallou a apertura do cartafol con xdg-open. O ficheiro está aquí: {}", - "gui_settings_language_label": "Idioma", - "gui_settings_language_changed_notice": "Reinicia OnionShare para utilizar o idioma seleccionado.", - "systray_menu_exit": "Saír", - "systray_page_loaded_title": "Páxina cargada", - "systray_page_loaded_message": "Cargado enderezo OnionShare", - "systray_share_started_title": "Compartición iniciada", - "systray_share_started_message": "Comezou o envío de ficheiros para alguén", - "systray_share_completed_title": "Compartición completa", - "systray_share_completed_message": "Rematou o envío de ficheiros", - "systray_share_canceled_title": "Compartición cancelada", - "systray_share_canceled_message": "Alguén cancelou a recepción dos teus ficheiros", - "systray_receive_started_title": "Recepción iniciada", - "systray_receive_started_message": "Alguén estache enviando ficheiros", - "gui_all_modes_history": "Historial", - "gui_all_modes_clear_history": "Baleirar todo", - "gui_all_modes_transfer_started": "Iniciado {}", - "gui_all_modes_progress_complete": "%p%, {0:s} transcorridos.", - "gui_all_modes_progress_starting": "{0:s}, %p% (calculando)", - "gui_all_modes_progress_eta": "{0:s}, Estimado: {1:s}, %p%", - "gui_share_mode_no_files": "Aínda non se enviou nada", - "gui_share_mode_autostop_timer_waiting": "Agardando a que remate o envío", - "gui_website_mode_no_files": "Aínda non se publicou unha web", - "gui_receive_mode_no_files": "Aínda non se recibiu nada", - "gui_receive_mode_autostop_timer_waiting": "Agardando a que remate a recepción", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_new_tab": "Nova lapela", - "gui_new_tab_tooltip": "Abrir nova lapela", - "gui_new_tab_share_button": "Compartir ficheiros", - "gui_new_tab_receive_button": "Recibir ficheiros", - "gui_new_tab_website_button": "Publicar sitio web", - "gui_new_tab_chat_button": "Chat anónimo", - "gui_main_page_share_button": "Comeza a compartir", - "gui_main_page_receive_button": "Recibe ficheiros", - "gui_main_page_website_button": "Publica un Sitio web", - "gui_main_page_chat_button": "Conversa", - "gui_tab_name_share": "Compartir", - "gui_tab_name_receive": "Recibir", - "gui_tab_name_website": "Sitio Web", - "gui_tab_name_chat": "Chat", - "gui_close_tab_warning_title": "Estás certo?", - "gui_close_tab_warning_persistent_description": "Esta lapela é persistente. Se a pechas perderás o enderezo onion que está a utilizar. Tes a certeza de querer pechala?", - "gui_close_tab_warning_share_description": "Estás enviando ficheiros. Tes a certeza de querer pechar esta lapela?", - "gui_close_tab_warning_receive_description": "Estás recibindo ficheiros. Tes a certeza de querer pechar esta lapela?", - "gui_close_tab_warning_website_description": "Estás publicando un sitio web. Tes a certeza de querer pechar esta lapela?", - "gui_close_tab_warning_close": "Pechar", - "gui_close_tab_warning_cancel": "Cancelar", - "gui_quit_warning_title": "Estas certo?", - "gui_quit_warning_description": "A compartición está activa nalgunha das túas lapelas. Se saes, pecharás todas as lapelas. Tes a certeza de querer saír?", - "gui_quit_warning_quit": "Saír", - "gui_quit_warning_cancel": "Cancelar", - "mode_settings_advanced_toggle_show": "Mostrar axustes avanzados", - "mode_settings_advanced_toggle_hide": "Agochar axustes avanzados", - "mode_settings_persistent_checkbox": "Garda esta lapela, e abrirase automáticamente cando abras OnionShare", - "mode_settings_public_checkbox": "Este é un servizo OnionShare público (desactiva a chave privada)", - "mode_settings_autostart_timer_checkbox": "Iniciar o servizo onion na hora programada", - "mode_settings_autostop_timer_checkbox": "Deter o servizo onion na hora programada", - "mode_settings_legacy_checkbox": "Usar enderezos antigos (servizo onion v2, non recomendado)", - "mode_settings_share_autostop_sharing_checkbox": "Deixar de compartir unha vez enviado o ficheiro (desmarca para permitir a descarga de ficheiros individuais)", - "mode_settings_receive_data_dir_label": "Gardar ficheiros en", - "mode_settings_receive_data_dir_browse_button": "Navegar", - "mode_settings_website_disable_csp_checkbox": "Non enviar cabeceira Content Security Policy (isto permite ao teu sitio web usar recursos de terceiros)", - "gui_all_modes_transfer_finished_range": "Transferido {} - {}", - "gui_all_modes_transfer_finished": "Transferido {}", - "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", - "gui_all_modes_transfer_canceled": "Cancelado {}", - "settings_error_unknown": "Non se puido conectar ó contralor Tor porque os teus axustes non teñen sentido.", - "settings_error_automatic": "Non se puido conectar ó controlador Tor. Estase executando o Tor Browser (dispoñible en torproject.org) en segundo plano?", - "settings_error_socket_port": "Non se puido conectar co controlador Tor en {}:{}.", - "settings_error_socket_file": "Non se puido conectar co controlador Tor usando o ficheiro socket {}.", - "settings_error_auth": "Conectado a {}:{}, pero sen autenticar. Pode que non sexa un controlador Tor?", - "settings_error_missing_password": "Conectado ó controlador Tor, pero require un contrasinal para autenticar.", - "settings_error_unreadable_cookie_file": "Conectado ó controlador Tor, pero o contrasinal igual está mal, ou o teu usuario non ten permiso para ler o ficheiro de cookie.", - "settings_error_bundled_tor_not_supported": "A versión Tor que ven con OnionShare non funciona en modo desenvolvedor en Windows ou macOS.", - "settings_error_bundled_tor_timeout": "Tarda demasiado en conectar a Tor. Igual non tes conexión a Internet, ou o reloxo do sistema está mal axustado?", - "settings_error_bundled_tor_broken": "OnionShare non puido conectar a Tor:\n{}", - "error_port_not_available": "Non está dispoñible o porto OnionShare", - "gui_rendezvous_cleanup_quit_early": "Saír axiña", - "gui_rendezvous_cleanup": "Agardando a que se pechen tódolos circuitos de Tor para ter certeza de que os ficheiros foron transferidos.\n\nEsto podería tardar un pouco.", - "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor.", - "error_tor_protocol_error": "Hai un erro con Tor: {}", - "history_receive_read_message_button": "Ler mensaxe", - "mode_settings_receive_disable_files_checkbox": "Desactivar a subida de ficheiros", - "mode_settings_receive_disable_text_checkbox": "Desactivar o envío de texto", - "mode_settings_title_label": "Título personalizado", - "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificación", - "gui_status_indicator_chat_started": "Conversando", - "gui_status_indicator_chat_scheduled": "Programado…", - "gui_status_indicator_chat_working": "Comezando…", - "gui_status_indicator_chat_stopped": "Preparado para conversar", - "gui_settings_theme_dark": "Escuro", - "gui_settings_theme_light": "Claro", - "gui_settings_theme_auto": "Auto", - "gui_settings_theme_label": "Decorado", - "gui_please_wait_no_button": "Iniciando…", - "gui_client_auth_instructions": "A continuación, envía a chave privada para permitir o acceso ao teu servicio OnionShare:", - "gui_url_instructions_public_mode": "Envia o enderezo OnionShare inferior:", - "gui_url_instructions": "Primeiro, envía o enderezo OnionShare inferior:", - "gui_chat_url_public_description": "Calquera con este enderezo OnionShare pode unirse a esta sala de conversa usando o Tor Browser: ", - "gui_receive_url_public_description": "Calquera con este enderezo OnionShare pode descargar ficheiros ao teu computador utilizando o Tor Browser: ", - "gui_website_url_public_description": "Calquera con este enderezo OnionShare pode visitar o teu sitio web usando o Tor Browser: ", - "gui_share_url_public_description": "Calquera con este enderezo OnionShare pode descargar os teus ficheiros usando o Tor Browser: ", - "gui_server_doesnt_support_stealth": "Lamentámolo, pero esta versión de Tor non soporta ocultación (Autenticación do cliente). Inténtao cunha nova versión de Tor, ou utiliza o modo 'público' se non ten que ser privado.", - "gui_hide": "Agochar", - "gui_reveal": "Amosar", - "gui_qr_label_auth_string_title": "Chave Privada", - "gui_qr_label_url_title": "Enderezo OnionShare", - "gui_copied_client_auth": "Chave privada copiada ao portapapeis", - "gui_copied_client_auth_title": "Copiouse a chave privada", - "gui_copy_client_auth": "Copiar Chave privada", - "gui_tor_settings_window_title": "Axustes Tor", - "gui_settings_controller_extras_label": "Axustes Tor", - "gui_settings_bridge_use_checkbox": "Usar unha ponte", - "gui_settings_bridge_radio_builtin": "Elixe unha ponte prestablecida", - "gui_settings_bridge_none_radio_option": "Non usar unha ponte", - "gui_settings_bridge_moat_radio_option": "Solicitar unha ponte a torproject.org", - "gui_settings_bridge_custom_radio_option": "Proporcionar unha ponte que coñeces e é da túa confianza", - "gui_settings_bridge_custom_placeholder": "escribe enderezo:porto (un por liña)", - "gui_settings_moat_bridges_invalid": "Aínda non solicitaches unha ponte a torproject.org", - "gui_settings_version_label": "Estás utilizando OnionShare {}", - "gui_settings_help_label": "Precisas axuda? Le docs.onionshare.org", - "moat_captcha_label": "Completa o CAPTCHA para solicitar unha ponte.", - "moat_captcha_placeholder": "Escribe os caracteres da imaxe", - "moat_captcha_submit": "Enviar", - "moat_captcha_reload": "Recargar", - "moat_bridgedb_error": "Fallou a conexión a BridgeDB.", - "moat_captcha_error": "A solución non é correcta. Inténtao outra vez.", - "moat_solution_empty_error": "Debes escribir os caracteres que aparecen na imaxe", - "mode_tor_not_connected_label": "OnionShare non está conectado á rede Tor", - "gui_dragdrop_sandbox_flatpak": "Para facer aínda máis segura a instancia Flatpak, non hai soporte para arrastrar e soltar. Usa o botón Engadir Ficheiros e Engadir Cartafol para buscar ficheiros.", - "gui_settings_bridge_moat_button": "Solicitar Nova Ponte", - "gui_settings_stop_active_tabs_label": "Hai servizos en execución nalgunha das túas lapelas.\nDebes deter tódolos servizo para cambiar os axustes Tor.", - "mode_settings_website_custom_csp_checkbox": "Envía cabeceira Content Security Policy personalizada", - "gui_settings_tor_bridges_label": "As Pontes axúdanche a acceder á Rede Tor en lugares onde Tor está bloqueada. Dependendo de onde estés unha ponte podería funcionar mellor que outras.", - "moat_contact_label": "Contactando BridgeDB..." -} diff --git a/desktop/src/onionshare/resources/locale/gu.json b/desktop/src/onionshare/resources/locale/gu.json deleted file mode 100644 index 313f17d8..00000000 --- a/desktop/src/onionshare/resources/locale/gu.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "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": "{0: s} એ વાંચી શકાય તેવી ફાઇલ નથી.", - "no_available_port": "Onion સેવા શરૂ કરવા માટે ઉપલબ્ધ બંદર શોધી શકાયું નહીં", - "other_page_loaded": "સરનામું લોડ થયું", - "close_on_autostop_timer": "બંધ થયું કારણ કે સ્વત stop-સ્ટોપ ટાઇમર સમાપ્ત થઈ ગયો છે", - "closing_automatically": "અટક્યું કારણ કે સ્થાનાંતરણ પૂર્ણ છે", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "ચેતવણી: મોટો શેર મોકલવામાં કલાકો લાગી શકે છે", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "ફાઇલો અને ફોલ્ડર્સ ખેંચો અને છોડો\nવહેંચણી શરૂ કરવા માટે", - "gui_add": "ઉમેરો", - "gui_delete": "", - "gui_choose_items": "", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "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_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_add_files": "ફાઇલો ઉમેરો", - "gui_add_folder": "ફોલ્ડર ઉમેરો", - "incorrect_password": "ખોટો પાસવર્ડ" -} diff --git a/desktop/src/onionshare/resources/locale/he.json b/desktop/src/onionshare/resources/locale/he.json deleted file mode 100644 index ee941304..00000000 --- a/desktop/src/onionshare/resources/locale/he.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "", - "systray_menu_exit": "יציאה", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_autostop_timer": "הפסק לשתף ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "העתק כתובת", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "מבוטל", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "ביטול", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_settings_data_dir_browse_button": "עיין", - "gui_all_modes_history": "היסטוריה", - "gui_all_modes_clear_history": "למחוק הכול" -} diff --git a/desktop/src/onionshare/resources/locale/hi.json b/desktop/src/onionshare/resources/locale/hi.json deleted file mode 100644 index 4d2ff6e5..00000000 --- a/desktop/src/onionshare/resources/locale/hi.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "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": "{0:s} रीड होने योग्य फाइल नहीं है।", - "no_available_port": "अनियन सेवा शुरू करने के लिए कोई उपलब्ध पोर्ट नहीं सका", - "other_page_loaded": "पता लोड हो गया", - "close_on_autostop_timer": "ऑटो-स्टॉप टाइमर बंद होने के कारण बंद हो गया", - "closing_automatically": "स्थानांतरण पूरा होने के कारण रुक गया", - "large_filesize": "चेतावनी: बड़े आकार की फाइल साझा करने में घंटों लग सकते हैं", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_autostop_timer": "साझा बंद करें ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "रिसीव मोड चालू करें", - "gui_receive_stop_server": "रिसीव मोड बंद करें", - "gui_receive_stop_server_autostop_timer": "रिसीव मोड बंद करें ({} remaining)", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "पता कॉपी करें", - "gui_canceled": "रद्द हो गया", - "gui_copied_url_title": "OnionShare पता कॉपी हो गया", - "gui_copied_url": "अनियन शेयर पता क्लिपबोर्ड में कॉपी हो गया", - "gui_please_wait": "शुरू हो रहा है... रद्द करने के लिए क्लिक करें।", - "version_string": "", - "gui_quit_title": "इतनी तेज़ी से नहीं", - "gui_share_quit_warning": "आपके फाइल अभी जा रहे हैं। क्या आप वाकई OnionShare को बंद करना चाहते हैं?", - "gui_receive_quit_warning": "आप अभी फाइलों को प्राप्त रहे हैं। क्या आप वाकई OnionShare को बंद करना चाहते हैं?", - "gui_quit_warning_quit": "छोड़ें", - "gui_quit_warning_dont_quit": "रद्द करें", - "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_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": "Onion सेटिंग्स", - "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 के साथ ऑटो-कॉन्फ़िगरेशन का प्रयास करें", - "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": "SOCKS पोर्ट", - "gui_settings_authenticate_label": "Tor प्रमाणीकरण सेटिंग्स", - "gui_settings_authenticate_no_auth_option": "कोई प्रमाणीकरण या कुकी प्रमाणीकरण नहीं", - "gui_settings_authenticate_password_option": "पासवर्ड", - "gui_settings_password_label": "पासवर्ड", - "gui_settings_tor_bridges": "Tor ब्रिज सपोर्ट", - "gui_settings_tor_bridges_no_bridges_radio_option": "ब्रिड्जेस का प्रयोग न करें", - "gui_settings_tor_bridges_obfs4_radio_option": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य है)", - "gui_settings_meek_lite_expensive_warning": "चेतावनी: टॉर प्रोजेक्ट को चलाने के लिए मीक_लाइट ब्रिज एक अच्छा विकल्प नहीं हैं।

केवल उनका उपयोग तभी करें यदि ओबीफएस4 ट्रांसपोर्ट, या अन्य सामान्य ब्रिड्जेस के माध्यम से टोर से सीधे कनेक्ट करने में आप असमर्थ हों।", - "gui_settings_tor_bridges_custom_radio_option": "कस्टम ब्रिड्जेस का उपयोग करे", - "gui_settings_tor_bridges_custom_label": "https://bridges.torproject.org से ब्रिड्जेस प्राप्त कर सकते हैं", - "gui_settings_tor_bridges_invalid": "", - "gui_settings_button_save": "सहेजें", - "gui_settings_button_cancel": "रद्द करे", - "gui_settings_button_help": "मदद", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "settings_error_unknown": "टोर कंट्रोलर से कनेक्ट नहीं हो सकता क्योंकि आपकी सेटिंग्स गलत हैः ।", - "settings_error_automatic": "टोर कंट्रोलर से कनेक्ट नहीं हो सका हैः । क्या टोर ब्राउज़र (torproject.org से उपलब्ध) बैकग्राउंड में चल रहा है?", - "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": "अनियन शेयर टोर से कनेक्ट नहीं हो सका :\n{}", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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_autostop_timer_waiting": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "", - "gui_stop_server_autostop_timer_tooltip": "ऑटो-स्टॉप टाइमर {} पर बंद होगा", - "gui_start_server_autostart_timer_tooltip": "ऑटो-स्टार्ट टाइमर {} पर बंद होगा", - "gui_waiting_to_start": "{} में शुरू होने के लिए शेडयूल है। रद्द करने के लिए क्लिक करें।", - "incorrect_password": "पासवर्ड गलत है", - "gui_settings_individual_downloads_label": "विशिष्ट फाइलों के डाउनलोड को मंजूरी देने के लिए अचिन्हित करें", - "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें", - "gui_show_qr_code": "क्यूआर कोड दिखाएं", - "gui_chat_stop_server": "चैट सर्वर बंद करें", - "gui_chat_start_server": "चैट सर्वर शुरू करें", - "gui_file_selection_remove_all": "सभी हटाएं", - "gui_remove": "हटाएं", - "gui_qr_code_dialog_title": "अनियन शेयर क्यूआर कोड", - "gui_receive_flatpak_data_dir": "चूँकि आपने फ़्लैटपैक का उपयोग करके OnionShare स्थापित किया है, इसलिए आपको फ़ाइलों को ~/OnionShare फ़ोल्डर में सहेजना होगा।", - "history_receive_read_message_button": "मैसेज पढ़े", - "error_port_not_available": "ओनियनशेयर पोर्ट उपलब्ध नहीं है", - "gui_rendezvous_cleanup_quit_early": "जल्दी छोड़ो", - "gui_rendezvous_cleanup": "यह सुनिश्चित करने के लिए कि आपकी फ़ाइलें सक्सेस्स्फुल्ली ट्रांसफर हो गई हैं, टोर सर्किट के बंद होने की प्रतीक्षा कर रहा है।\n\nइसमें कुछ मिनट लग सकते हैं।", - "mode_settings_website_disable_csp_checkbox": "कंटेंट सिक्योरिटी पॉलिसी हैडर ना भेजे (आपकी वेबसाइट को थर्ड पार्टी रिसोर्सेज का उपयोग करने की अनुमति देता है)", - "mode_settings_receive_webhook_url_checkbox": "नोटिफिकेशन वेबहुक का प्रयोग करें", - "mode_settings_receive_disable_files_checkbox": "फ़ाइलें अपलोड करना अक्षम करें", - "mode_settings_receive_disable_text_checkbox": "टेक्स्ट सबमिट करना अक्षम करें", - "mode_settings_receive_data_dir_browse_button": "ब्राउज", - "mode_settings_share_autostop_sharing_checkbox": "फ़ाइलें भेजे जाने के बाद शेरिंग करना बंद करें (अलग-अलग फ़ाइलों को डाउनलोड करने की अनुमति देने के लिए अनचेक करें)", - "mode_settings_autostop_timer_checkbox": "निर्धारित समय पर अनियन सर्विस बंद करें", - "mode_settings_autostart_timer_checkbox": "निर्धारित समय पर अनियन सर्विस शुरू करें", - "mode_settings_public_checkbox": "यह एक पब्लिक अनियन शेयर सर्विस है (कि अक्षम करे )", - "mode_settings_title_label": "कस्टम टाइटल", - "mode_settings_advanced_toggle_hide": "एडवांस्ड सेटिंग छुपाए", - "mode_settings_advanced_toggle_show": "एडवांस्ड सेटिंग दिखाएं", - "gui_quit_warning_cancel": "रद्द करना", - "gui_quit_warning_description": "आपके कुछ टैब में शेरिंग सक्रिय है। यदि आप छोड़ते हैं, तो आपके सभी टैब बंद हो जाएंगे। क्या आप वाकई छोड़ना चाहते हैं?", - "gui_quit_warning_title": "क्या आप सुनिचित हैः?", - "gui_close_tab_warning_cancel": "रद्द करे", - "gui_close_tab_warning_close": "बंद करे", - "gui_close_tab_warning_website_description": "आप सक्रिय रूप से एक वेबसाइट होस्ट कर रहे हैं। क्या आप वाकई इस टैब को बंद करना चाहते हैं?", - "gui_close_tab_warning_receive_description": "आप फ़ाइलें प्राप्त करने की प्रक्रिया में हैं. क्या आप वाकई इस टैब को बंद करना चाहते हैं?", - "gui_close_tab_warning_share_description": "आप फ़ाइलें भेजने की प्रक्रिया में हैं. क्या आप वाकई इस टैब को बंद करना चाहते हैं?", - "gui_close_tab_warning_persistent_description": "यह टैब पर्सिस्टेंट है। यदि आप इसे बंद करते हैं तो आप अनियन एड्रेस खो देंगे जिसका आप उपयोग कर रहे है। क्या आप वाकई इसे बंद करना चाहते हैं?", - "gui_close_tab_warning_title": "क्या आप सुनिश्त है?", - "gui_please_wait_no_button": "शुरू हो रहा हैः …", - "gui_hide": "छुपाइ", - "gui_reveal": "दिखाए", - "gui_qr_label_auth_string_title": "प्राइवेट कि", - "gui_qr_label_url_title": "अनियन शेयर एड्रेस", - "gui_copied_client_auth": "प्राइवेट कि क्लिपबोर्ड पर कॉपी हो गयी हैः", - "gui_copied_client_auth_title": "प्राइवेट कि कॉपी हो गयी हैः", - "gui_copy_client_auth": "प्राइवेट कि कॉपी करें" -} diff --git a/desktop/src/onionshare/resources/locale/hr.json b/desktop/src/onionshare/resources/locale/hr.json deleted file mode 100644 index 39df94fa..00000000 --- a/desktop/src/onionshare/resources/locale/hr.json +++ /dev/null @@ -1,259 +0,0 @@ -{ - "preparing_files": "Komprimiranje datoteka.", - "not_a_readable_file": "{0:s} nije čitljiva datoteka.", - "no_available_port": "Priključak za pokretanje Onion usluge nije pronađen", - "other_page_loaded": "Adresa učitana", - "incorrect_password": "Neispravna lozinka", - "close_on_autostop_timer": "Prekinuto, jer je vrijeme timera za automatsko prekidanje isteklo", - "closing_automatically": "Prekinuto, jer je prijenos završen", - "large_filesize": "Upozorenje: Slanje velike količine podataka može trajati satima", - "gui_drag_and_drop": "Povuci i ispusti datoteke i mape koje želiš dijeliti", - "gui_add": "Dodaj", - "gui_add_files": "Dodaj datoteke", - "gui_add_folder": "Dodaj mapu", - "gui_delete": "Izbriši", - "gui_choose_items": "Odaberi", - "gui_share_start_server": "Pokreni dijeljenje", - "gui_share_stop_server": "Prekini dijeljenje", - "gui_share_stop_server_autostop_timer": "Prekini dijeljenje ({})", - "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko prekidanje završava u {}", - "gui_start_server_autostart_timer_tooltip": "Timer za automatsko pokretanje završava u {}", - "gui_receive_start_server": "Pokreni modus primanja", - "gui_receive_stop_server": "Prekini modus primanja", - "gui_receive_stop_server_autostop_timer": "Prekini modus primanja ({} preostalo)", - "gui_copy_url": "Kopiraj adresu", - "gui_canceled": "Prekinuto", - "gui_copied_url_title": "OnionShare adresa je kopirana", - "gui_copied_url": "OnionShare adresa je kopirana u međuspremnik", - "gui_waiting_to_start": "Planirano pokretanje za {}. Pritisni za prekid.", - "gui_please_wait": "Pokretanje … Pritisni za prekid.", - "gui_quit_title": "Ne tako brzo", - "gui_share_quit_warning": "Proces slanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?", - "gui_receive_quit_warning": "Proces primanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?", - "gui_quit_warning_quit": "Izađi", - "gui_quit_warning_dont_quit": "Odustani", - "zip_progress_bar_format": "Komprimiranje: %p %", - "error_stealth_not_supported": "Za korištenje autorizacije klijenta, potrebni su barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare zahtijeva barem Tor 0.2.7.1 i python3-stem 1.4.0.", - "gui_settings_window_title": "Postavke", - "gui_settings_whats_this": "Što je ovo?", - "gui_settings_stealth_option": "Koristi autorizaciju klijenta", - "gui_settings_autoupdate_label": "Traži nove verzije", - "gui_settings_autoupdate_option": "Obavijesti me o novim verzijama", - "gui_settings_autoupdate_timestamp": "Zadnja provjera: {}", - "gui_settings_autoupdate_timestamp_never": "Nikada", - "gui_settings_autoupdate_check_button": "Traži nove verzije", - "gui_settings_general_label": "Opće postavke", - "gui_settings_onion_label": "Onion postavke", - "gui_settings_sharing_label": "Postavke za dijeljenje", - "gui_settings_close_after_first_download_option": "Zaustavi dijeljenje nakon što se datoteke pošalju", - "gui_settings_csp_header_disabled_option": "Isključi zaglavlje za politike sigurnosti sadržaja", - "gui_settings_individual_downloads_label": "Odznači, za preuzimanje pojedinačnih datoteka", - "gui_settings_connection_type_label": "Kako se OnionShare treba povezati s Torom?", - "gui_settings_connection_type_bundled_option": "Koristi verziju Tora koja je ugrađena u OnionShareu", - "gui_settings_connection_type_automatic_option": "Pokušaj automatsku konfiguraciju s Tor preglednikom", - "gui_settings_connection_type_control_port_option": "Poveži se koristeći kontrolni priključak", - "gui_settings_connection_type_socket_file_option": "Poveži se koristeći socket datoteku", - "gui_settings_connection_type_test_button": "Ispitaj vezu s Torom", - "gui_settings_control_port_label": "Kontrolni priključak", - "gui_settings_socket_file_label": "Socket datoteka", - "gui_settings_socks_label": "SOCKS priključak", - "gui_settings_authenticate_label": "Postavke za autentifikaciju na Tor", - "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem", - "gui_settings_authenticate_password_option": "Lozinka", - "gui_settings_password_label": "Lozinka", - "gui_settings_tor_bridges": "Torova podrška za mostove", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove", - "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 uključive prijenose", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 uključive prijenose (potreban je obfs4proksi)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) uključive prijenose", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) uključive prijenose (potreban je obfs4proksi)", - "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek_lite mostovi troše velike količine resursa za pokretanje Tor projekta.

Koristi ih samo ako se ne možeš povezati s Torom direktno putem obfs4 prijenosa ili drugih normalnih mostova.", - "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", - "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti na https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nijedan od dodanih mostova ne funkcionira.\nProvjeri ih ili dodaj druge.", - "gui_settings_button_save": "Spremi", - "gui_settings_button_cancel": "Odustani", - "gui_settings_button_help": "Pomoć", - "gui_settings_autostop_timer_checkbox": "Koristi timer za automatsko zaustavljanje", - "gui_settings_autostop_timer": "Zaustavi dijeljenje pri:", - "gui_settings_autostart_timer_checkbox": "Koristi timer za automatsko pokretanje", - "gui_settings_autostart_timer": "Pokreni dijeljenje pri:", - "settings_error_unknown": "Nije moguće povezivanje s Tor kontrolerom, jer tvoje postavke nemaju smisla.", - "settings_error_automatic": "Neuspjelo povezivanje s Tor kontrolerom. Radi li Tor preglednik (dostupan na torproject.org) u pozadini?", - "settings_error_socket_port": "Nije moguće povezivanje s Tor kontrolerom pri {}:{}.", - "settings_error_socket_file": "Nije moguće povezivanje s Tor kontrolerom pomoću socket datoteke {}.", - "settings_error_auth": "Povezan s {}:{}, ali autentifikacija nije moguća. Možda ovo nije Tor kontroler?", - "settings_error_missing_password": "Povezan s Tor kontrolerom, ali zahtijeva lozinku za autentifikaciju.", - "settings_error_unreadable_cookie_file": "Povezan s Tor kontrolerom, ali je lozinka možda pogrešna ili tvom korisniku nije dozvoljeno čitati datoteku kolačića.", - "settings_error_bundled_tor_not_supported": "Tor verzija koja se isporučuje s OnionShare ne radi u razvojnom modusu operacijskih sustava Windows ili macOS.", - "settings_error_bundled_tor_timeout": "Povezivanje s Torom traje predugo. Možda nemaš vezu s internetom ili imaš netočno postavljen sat sustava?", - "settings_error_bundled_tor_broken": "Neuspjelo povezivanje OnionShare-a s Torom:\n{}", - "settings_test_success": "Povezan s Tor kontrolerom.\n\nTor verzija: {}\nPodržava kratkotrajne Onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava .onion adrese sljedeće generacije: {}.", - "error_tor_protocol_error": "Dogodila se greška s Torom: {}", - "error_tor_protocol_error_unknown": "Nepoznata greška s Torom", - "connecting_to_tor": "Povezivanje s Tor mrežom", - "update_available": "Objavljen je novi OnionShare. Pritisni ovdje za preuzimanje.

Trenutačno koristiš verziju {}, a najnovija verzija je {}.", - "update_error_check_error": "Neuspjela pretraga za novom verzijom: možda nemaš vezu s Torom ili OnionShare web-stranica ne radi?", - "update_error_invalid_latest_version": "Neuspjela pretraga za novom verzijom: OnionShare web-stranica kaže, da je zadnja verzija neprepoznatljiva „{}” …", - "update_not_available": "Koristiš najnoviji OnionShare.", - "gui_tor_connection_ask": "Otvoriti postavke za podešavanje veze s Torom?", - "gui_tor_connection_ask_open_settings": "Da", - "gui_tor_connection_ask_quit": "Zatvori", - "gui_tor_connection_error_settings": "U postavkama promijeni način na koji se OnionShare povezuje s Tor mrežom.", - "gui_tor_connection_canceled": "Neuspjelo povezivanje s Torom.\n\nProvjeri vezu s internetom, a zatim ponovo pokreni OnionShare i postavi njegovu vezu s Torom.", - "gui_tor_connection_lost": "Prekinuta veza s Torom.", - "gui_server_started_after_autostop_timer": "Vrijeme timera za automatsko prekidanje je isteklo prije nego što je poslužitelj započeo. Izradi novo dijeljenje.", - "gui_server_autostop_timer_expired": "Vrijeme timera za automatsko prekidanje je već isteklo. Za pokretanje dijeljenja, podesi vrijeme.", - "gui_server_autostart_timer_expired": "Planirano vrijeme je već prošlo. Za pokretanje dijeljenja, podesi vrijeme.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vrijeme za automatsko prekidanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. Za pokretanje dijeljenja, podesi vrijeme.", - "share_via_onionshare": "Dijeli putem OnionSharea", - "gui_connect_to_tor_for_onion_settings": "Poveži se s Torom za prikaz postavki Onion usluge", - "gui_save_private_key_checkbox": "Koristi trajnu adresu", - "gui_share_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može preuzeti tvoje datoteke koristeći Tor preglednik: ", - "gui_website_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može posjetiti tvoju web-stranicu koristeći Tor preglednik: ", - "gui_receive_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može prenijeti datoteke na tvoje računalo koristeći Tor preglednik: ", - "gui_url_label_persistent": "Ovo se dijeljenje neće automatski prekinuti.

Svako naredno dijeljenje koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)", - "gui_url_label_stay_open": "Ovo se dijeljenje neće automatski prekinuti.", - "gui_url_label_onetime": "Ovo će se dijeljenje prekinuti nakon prvog završavanja.", - "gui_url_label_onetime_and_persistent": "Ovo se dijeljenje neće automatski prekinuti.

Svako naredno dijeljenje će koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)", - "gui_status_indicator_share_stopped": "Spremno za dijeljenje", - "gui_status_indicator_share_working": "Pokretanje …", - "gui_status_indicator_share_scheduled": "Planirano …", - "gui_status_indicator_share_started": "Dijeljenje", - "gui_status_indicator_receive_stopped": "Spremno za primanje", - "gui_status_indicator_receive_working": "Pokretanje …", - "gui_status_indicator_receive_scheduled": "Planirano …", - "gui_status_indicator_receive_started": "Primanje", - "gui_file_info": "{} datoteke, {}", - "gui_file_info_single": "{} datoteka, {}", - "history_in_progress_tooltip": "{} u tijeku", - "history_completed_tooltip": "{} završeno", - "history_requests_tooltip": "{} web zahtjeva", - "error_cannot_create_data_dir": "Neuspjelo stvaranje mape za OnionShare podatke: {}", - "gui_receive_mode_warning": "Modus primanja dozvoljava korisnicima prenijeti datoteke na tvoje računalo.

Pri tome neke datoteke mogu preuzeti kontrolu nad tvojim računalom, ako ih otvoriš. Otvaraj samo stvari od ljudi kojima vjeruješ ili ako znaš što radiš.", - "gui_mode_share_button": "Dijeli datoteke", - "gui_mode_receive_button": "Primaj datoteke", - "gui_mode_website_button": "Objavi web-stranicu", - "gui_settings_receiving_label": "Postavke za primanje", - "gui_settings_website_label": "Postavke za web-stranicu", - "gui_settings_data_dir_label": "Spremi datoteke u", - "gui_settings_data_dir_browse_button": "Pretraži", - "gui_settings_public_mode_checkbox": "Javni modus", - "gui_open_folder_error_nautilus": "Nije moguće otvoriti mapu, jer Nautilus nije dostupan. Datoteka je ovdje: {}", - "gui_settings_language_label": "Željeni jezik", - "gui_settings_language_changed_notice": "Za primjenu novog jezika, ponovo pokreni OnionShare.", - "systray_menu_exit": "Izađi", - "systray_page_loaded_title": "Stranica učitana", - "systray_page_loaded_message": "OnionShare adresa učitana", - "systray_share_started_title": "Dijeljenje pokrenuto", - "systray_share_started_message": "Počinje slanja datoteka nekome", - "systray_share_completed_title": "Dijeljenje završeno", - "systray_share_completed_message": "Završeno je slanje datoteka", - "systray_share_canceled_title": "Dijeljenje prekinuto", - "systray_share_canceled_message": "Netko je prekinuo primanje tvojih datoteka", - "systray_receive_started_title": "Primanje pokrenuto", - "systray_receive_started_message": "Netko ti šalje datoteke", - "gui_all_modes_history": "Kronologija", - "gui_all_modes_clear_history": "Izbriši sve", - "gui_all_modes_transfer_started": "Pokrenuto {}", - "gui_all_modes_transfer_finished_range": "Preneseno {} – {}", - "gui_all_modes_transfer_finished": "Preneseno {}", - "gui_all_modes_transfer_canceled_range": "Prekinuto {} – {}", - "gui_all_modes_transfer_canceled": "Prekinuto {}", - "gui_all_modes_progress_complete": "%p %, {0:s} proteklo.", - "gui_all_modes_progress_starting": "{0:s}, %p % (izračunavanje)", - "gui_all_modes_progress_eta": "{0:s}, procijenjeno: {1:s}, %p %", - "gui_share_mode_no_files": "Nijedna datoteka još nije poslana", - "gui_share_mode_autostop_timer_waiting": "Čeka se na završetak slanja", - "gui_website_mode_no_files": "Nijedna web-stranica još nije dijeljena", - "gui_receive_mode_no_files": "Nijedna datoteka još nije primljena", - "gui_receive_mode_autostop_timer_waiting": "Čeka se na završetak primanja", - "receive_mode_upload_starting": "Započinje prijenos ukupne veličine od {}", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "mode_settings_website_disable_csp_checkbox": "Ne šalji zaglavlja politike sigurnosti sadržaja (omogućuje tvojim web-stranicama koristiti strane resurse)", - "mode_settings_receive_data_dir_browse_button": "Pregledaj", - "mode_settings_receive_data_dir_label": "Spremi datoteke u", - "mode_settings_share_autostop_sharing_checkbox": "Prekini dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)", - "mode_settings_legacy_checkbox": "Koristi stare adrese (v2 onion usluge, ne preporučuje se)", - "mode_settings_autostop_timer_checkbox": "Prekini onion uslugu u planirano vrijeme", - "mode_settings_autostart_timer_checkbox": "Pokreni onion uslugu u planirano vrijeme", - "mode_settings_public_checkbox": "Ovo je javna OnionShare usluga (deaktivira privatni ključ)", - "mode_settings_persistent_checkbox": "Spremi ovu karticu i automatski je otvori kad otvorim OnionShare", - "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke", - "mode_settings_advanced_toggle_show": "Prikaži napredne postavke", - "gui_quit_warning_cancel": "Odustani", - "gui_quit_warning_description": "Na nekim tvojim karticama je dijeljenje aktivno. Ako zatvoriš program, zatvorit će se sve kartice. Stvarno želiš zatvoriti program?", - "gui_quit_warning_title": "Stvarno?", - "gui_close_tab_warning_cancel": "Odustani", - "gui_close_tab_warning_close": "Zatvori", - "gui_close_tab_warning_website_description": "Imaš aktivni hosting za web-stranicu. Stvarno želiš zatvoriti ovu karticu?", - "gui_close_tab_warning_receive_description": "Trenutačno primaš datoteke. Stvarno želiš zatvoriti ovu karticu?", - "gui_close_tab_warning_share_description": "Trenutačno šalješ datoteke. Stvarno želiš zatvoriti ovu karticu?", - "gui_close_tab_warning_persistent_description": "Ovo je trajna kartica. Ako je zatvoriš, izgubit ćeš onion adresu koju koristi. Stvarno je želiš zatvoriti?", - "gui_close_tab_warning_title": "Stvarno?", - "gui_new_tab_website_description": "Postavi hosting za statičku HTML onion web-stranicu na tvom računalu.", - "gui_new_tab_website_button": "Objavi web-stranicu", - "gui_new_tab_share_description": "Odaberi datoteke na računalu koje nekome želiš poslati. Za preuzimanje tih datoteka, osoba ili ljudi kojima šalješ datoteke moraju koristiti Tor preglednik.", - "gui_new_tab_receive_description": "Pretvori svoje računalo u internetski dropbox. Ljudi će moći koristiti Tor preglednik za slanje datoteka na tvoje računalo.", - "gui_new_tab_receive_button": "Primaj datoteke", - "gui_new_tab_share_button": "Dijeli datoteke", - "gui_new_tab_tooltip": "Otvori novu karticu", - "gui_new_tab": "Nova kartica", - "gui_qr_code_description": "Skeniraj ovaj QR kȏd pomoću QR čitača, kao što je kamera na tvom telefonu, za lakše dijeljenje adrese OnionSharea.", - "gui_receive_flatpak_data_dir": "Budući da je tvoj OnionShare instaliran pomoću Flatpak-a, datoteke moraš spremiti u jednu mapu u ~/OnionShare.", - "gui_tab_name_chat": "Razgovor", - "gui_new_tab_chat_button": "Razgovaraj anonimno", - "gui_chat_start_server": "Pokreni poslužitelja za razgovor", - "gui_chat_stop_server": "Prekini poslužitelja za razgovor", - "gui_chat_stop_server_autostop_timer": "Zaustavi poslužitelja za chat ({})", - "gui_tab_name_receive": "Primi", - "gui_open_folder_error": "Otvaranje mape s xdg-open nije uspjelo. Datoteka je ovdje: {}", - "gui_tab_name_website": "Web-stranica", - "gui_tab_name_share": "Dijeli", - "gui_qr_code_dialog_title": "OnionShare QR-kod", - "gui_show_qr_code": "Prikaži QR-kod", - "gui_file_selection_remove_all": "Ukloni sve", - "gui_remove": "Ukloni", - "gui_main_page_chat_button": "Pokreni razgovor", - "gui_main_page_website_button": "Pokreni hosting", - "gui_main_page_receive_button": "Pokreni primanje", - "gui_main_page_share_button": "Pokreni dijeljenje", - "gui_chat_url_description": "Svatko s ovom OnionShare adresom i privatnim ključem može se pridružiti ovoj sobi za razgovor koristeći Tor preglednik: ", - "error_port_not_available": "OnionShare priključak nije dostupan", - "gui_rendezvous_cleanup_quit_early": "Prekini preuranjeno", - "gui_rendezvous_cleanup": "Čekanje na zatvarnje Tor lanaca, kako bi se osigurao uspješan prijenos datoteka.\n\nOvo može potrajati nekoliko minuta.", - "gui_color_mode_changed_notice": "Za primjenu novog modusa boja ponovo pokreni OnionShare .", - "history_receive_read_message_button": "Čitaj poruku", - "mode_settings_receive_disable_files_checkbox": "Onemogući prenošenje datoteka", - "mode_settings_receive_disable_text_checkbox": "Onemogući slanje teksta", - "mode_settings_title_label": "Prilagođeni naslov", - "gui_status_indicator_chat_scheduled": "Planirano …", - "gui_status_indicator_chat_working": "Pokretanje …", - "mode_settings_receive_webhook_url_checkbox": "Koristi automatsko obavještavanje", - "gui_status_indicator_chat_started": "Razgovor u tijeku", - "gui_status_indicator_chat_stopped": "Spremno za razgovor", - "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušaj s novijom Tor verzijom ili koristi „javni” način rada ako ne mora biti privatni.", - "gui_settings_theme_dark": "Tamna", - "gui_settings_theme_light": "Svjetla", - "gui_settings_theme_auto": "Automatski", - "gui_settings_theme_label": "Tema", - "gui_client_auth_instructions": "Zatim pošalji privatni ključ za dozvoljavanje pristupa tvoji OnionShare usluzi:", - "gui_url_instructions_public_mode": "Pošalji donju OnionShare adresu:", - "gui_url_instructions": "Najprije pošalji donju OnionShare adresu:", - "gui_chat_url_public_description": "Svatko s ovom OnionShare adresom može se pridružiti ovoj sobi za razgovor koristeći Tor preglednik: ", - "gui_receive_url_public_description": "Svatko s ovom OnionShare adresom može prenijeti datoteke na tvoje računalo koristeći Tor preglednik: ", - "gui_website_url_public_description": "Svatko s ovom OnionShare adresom može posjetiti tvoju web-stranicu koristeći Tor preglednik: ", - "gui_share_url_public_description": "Svatko s ovom OnionShare adresom može preuzeti tvoje datoteke koristeći Tor preglednik: ", - "gui_please_wait_no_button": "Pokretanje …", - "gui_hide": "Sakrij", - "gui_reveal": "Otkrij", - "gui_qr_label_auth_string_title": "Privatni ključ", - "gui_qr_label_url_title": "OnionShare adresa", - "gui_copied_client_auth": "Privatni ključ je kopiran u međuspremnik", - "gui_copied_client_auth_title": "Privatni ključ je kopiran", - "gui_copy_client_auth": "Kopiraj privatni ključ" -} diff --git a/desktop/src/onionshare/resources/locale/hu.json b/desktop/src/onionshare/resources/locale/hu.json deleted file mode 100644 index 3a725427..00000000 --- a/desktop/src/onionshare/resources/locale/hu.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "config_onion_service": "", - "preparing_files": "Fájlok tömörítése.", - "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": "{0:s} nem egy olvasható fájl.", - "no_available_port": "Nem található elérhető port az onion szolgáltatás indításához", - "other_page_loaded": "Cím betöltve", - "close_on_autostop_timer": "Leállítva, mert az auto-sop időzítő lejárt", - "closing_automatically": "Leállítva, mert az átvitel véget ért", - "timeout_download_still_running": "", - "large_filesize": "Figyelem: A nagyobb fájlok elküldése órákat vehet igénybe", - "systray_menu_exit": "Kilépés", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "Húzzon ide fájlt vagy mappát\na megosztás megkezdéséhez", - "gui_add": "Hozzáadás", - "gui_delete": "Törlés", - "gui_choose_items": "Kiválaszt", - "gui_share_start_server": "Megosztás kezdése", - "gui_share_stop_server": "Megosztás leállítása", - "gui_share_stop_server_autostop_timer": "Megosztás leállítása ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "Fogadó mód indítása", - "gui_receive_stop_server": "Fogadó mód leállítása", - "gui_receive_stop_server_autostop_timer": "Fogadó mód leállítása ({} van hátra)", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "Cím másolása", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Megszakítva", - "gui_copied_url_title": "OnionShare-cím másolva", - "gui_copied_url": "OnionShare-cím a vágólapra másolva", - "gui_please_wait": "Indítás... Kattints a megszakításhoz.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "version_string": "", - "gui_quit_title": "Állj csak meg", - "gui_share_quit_warning": "A fájlküldés folyamatban van. Biztosan kilépsz az OnionShare-ből?", - "gui_receive_quit_warning": "A fájlok fogadása folyamatban van. Biztosan kilépsz az OnionShare-ből?", - "gui_quit_warning_quit": "Kilépés", - "gui_quit_warning_dont_quit": "Mégse", - "zip_progress_bar_format": "Tömörítés: %p%", - "error_stealth_not_supported": "A kliens-hitelesítés használatához szükséged van legalább ezekre: Tor 0.2.9.1-alpha (vagy Tor Browser 6.5) és python3-stem 1.5.0.", - "error_ephemeral_not_supported": "Az OnionShare minimális követelményei: Tor 0.2.7.1 és python3-stem 1.4.0.", - "gui_settings_window_title": "Beállítások", - "gui_settings_whats_this": "Mi ez?", - "gui_settings_stealth_option": "Kliens-hitelesítés használata", - "gui_settings_autoupdate_label": "Új verzió keresése", - "gui_settings_autoupdate_option": "Értesítést kérek, ha új verzió érhető el", - "gui_settings_autoupdate_timestamp": "Utoljára ellenőrizve: {}", - "gui_settings_autoupdate_timestamp_never": "Soha", - "gui_settings_autoupdate_check_button": "Új Verzió keresése", - "gui_settings_general_label": "Általános beállítások", - "gui_settings_sharing_label": "Megosztás beállításai", - "gui_settings_close_after_first_download_option": "Fejezze be a megosztást, ha a fájlokat elküldte", - "gui_settings_connection_type_label": "Hogyan csatlakozzon az OnionShare a Tor-hoz?", - "gui_settings_connection_type_bundled_option": "Beépített Tor-verzió használata", - "gui_settings_connection_type_automatic_option": "Automatikus konfiguráció a Tor-ral", - "gui_settings_connection_type_control_port_option": "Csatlakozás kontroll port által", - "gui_settings_connection_type_socket_file_option": "Szokettfájl használata", - "gui_settings_connection_type_test_button": "Tor-kapcsolat tesztelése", - "gui_settings_control_port_label": "Kontroll port", - "gui_settings_socket_file_label": "Szokettfájl", - "gui_settings_socks_label": "SOCKS port", - "gui_settings_authenticate_label": "Tor hitelesítési beállítások", - "gui_settings_authenticate_no_auth_option": "Nincs hitelesítés, vagy sütik általi hitelesítés", - "gui_settings_authenticate_password_option": "Jelszó", - "gui_settings_password_label": "Jelszó", - "gui_settings_tor_bridges": "Tor híd támogatása", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ne használjon hidakat", - "gui_settings_tor_bridges_obfs4_radio_option": "Beépített obfs4 pluggable transports használata", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Beépített obfs4 pluggable transports használata (obfs4proxy szükséges)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Beépített meek_lite (Azure) pluggable transports használata", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Beépített meek_lite (Azure) pluggable transports használata (obfs4proxy szükséges)", - "gui_settings_meek_lite_expensive_warning": "Figyelem: A meek_lite hidak fenntartása nagyon költséges a Tor Project számára.

Csak akkor használd őket, ha nem tudsz közetlenül a Tor-hoz csatlakozni az obfs4 vagy más hidak által.", - "gui_settings_tor_bridges_custom_radio_option": "Egyéb hidak használata", - "gui_settings_tor_bridges_custom_label": "Hidakat innen szerezhetsz: https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Egyetlen híd sem működik.\nEllenőrizd őket, vagy adj hozzá újakat.", - "gui_settings_button_save": "Mentés", - "gui_settings_button_cancel": "Mégse", - "gui_settings_button_help": "Súgó", - "gui_settings_autostop_timer_checkbox": "Leállítás automata időzítővel", - "gui_settings_autostop_timer": "Megosztás leállítása ekkor:", - "settings_error_unknown": "Nem lehet csatlakozni a Tor-kontrollerhez, mert értelmetlenek a beállításaid.", - "settings_error_automatic": "Nem lehet csatlakozni a Tor-kontrollerhez. Fut-e a Tor böngésző (letölthető innen: torproject.org) a háttérben?", - "settings_error_socket_port": "Nem lehet csatlakozni a Tor-kontrollerhez itt: {}:{}.", - "settings_error_socket_file": "Nem lehet csatlakozni a Tor-kontrollerhez az alábbi szokettfájl használatával: {}.", - "settings_error_auth": "Csatlakozva itt: {}:{}, de nem hitelesíthető. Biztos, hogy ez egy Tor-kontroller?", - "settings_error_missing_password": "Csatlakozva a Tor-kontrollerhez, de a hitelesítéshez jelszó szükséges.", - "settings_error_unreadable_cookie_file": "Csatlakozva a Tor-kontrollerhez, de vagy a jelszó hibás, vagy a felhasználó nem jogosult a süti fájl olvasására.", - "settings_error_bundled_tor_not_supported": "Az OnionShare beépített Tor-verziója nem használható fejlesztői módban Windows ill. macOS alatt.", - "settings_error_bundled_tor_timeout": "Túl sok időbe telik csatlakozni a Tor-hoz. Lehet hogy nincs internetkapcsolatod, vagy a rendszer órája pontatlan?", - "settings_error_bundled_tor_broken": "Az OnionShare nem tudott a háttérben a Tor-hoz csatlakozni:\n{}", - "settings_test_success": "Csatlakozva a Tor-kontrollerhez.\n\nTor-verziószám: {}\nTámogatott ideiglenes Onion szolgáltatások: {}.\nTámogatott kliens-hitelesítés: {}.\nTámogatott újgenerációs .onion címek: {}.", - "error_tor_protocol_error": "Hiba a Tor-ral: {}", - "error_tor_protocol_error_unknown": "Ismeretlen hiba a Tor-ral", - "error_invalid_private_key": "", - "connecting_to_tor": "Csatlakozás a Tor-hálózathoz", - "update_available": "Új OnionShare-verzió érhető el. Kattints ide a letöltéshez.

A te verziód {}, a mostani pedig {}.", - "update_error_check_error": "Nem sikerült az új verzió keresése: Az OnionShare weboldal szerint az új verzió '{}' ám az felismerhetetlen…", - "update_error_invalid_latest_version": "Nem sikerült az új verzió keresése: Lehet, hogy nem csatlakoztál a Tor-hoz, vagy az OnionShare oldal nem elérhető?", - "update_not_available": "A legújabb OnionShare-verziót használod.", - "gui_tor_connection_ask": "", - "gui_tor_connection_ask_open_settings": "Igen", - "gui_tor_connection_ask_quit": "Kilépés", - "gui_tor_connection_error_settings": "", - "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", - "gui_server_started_after_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "Megosztás", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", - "gui_status_indicator_receive_started": "Bevétel", - "gui_file_info": "", - "gui_file_info_single": "", - "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": "", - "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_downloads_label": "", - "gui_settings_downloads_button": "Tallózás", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "Az összes törlése", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "Előnyben részesített nyelv", - "gui_settings_language_changed_notice": "", - "gui_add_files": "Fájlok hozzáadása", - "gui_add_folder": "Mappák hozzáadása", - "gui_stop_server_autostop_timer_tooltip": "Auto-stop időzítő megáll: {}", - "gui_start_server_autostart_timer_tooltip": "Auto-start időzítő megáll: {}", - "incorrect_password": "Rossz jelszó", - "gui_settings_autostart_timer": "Megosztás indítása ekkor:", - "gui_settings_autostart_timer_checkbox": "Indítás automata időzítővel", - "gui_settings_individual_downloads_label": "Ne pipáld be az egyenkénti fájlletöltés engedélyezéséhez", - "gui_settings_csp_header_disabled_option": "Tartalombiztonsági Irányelvek-fejléc tiltása", - "gui_settings_onion_label": "Onion-beállítások", - "gui_waiting_to_start": "Indulás ütemezve: {}. Kattints a megszakításhoz." -} diff --git a/desktop/src/onionshare/resources/locale/id.json b/desktop/src/onionshare/resources/locale/id.json deleted file mode 100644 index 7cdb5993..00000000 --- a/desktop/src/onionshare/resources/locale/id.json +++ /dev/null @@ -1,280 +0,0 @@ -{ - "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_autostop_timer": "Berhenti karena timer berhenti otomatis habis", - "closing_automatically": "Terhenti karena transfer telah tuntas", - "timeout_download_still_running": "", - "large_filesize": "Peringatan: Mengirim dalam jumlah besar dapat memakan waktu berjam-jam", - "systray_menu_exit": "Keluar", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "Tidak menggunakan Tor (hanya untuk pengembangan)", - "help_stay_open": "Lanjutkan berbagi setelah berkas telah terkirim", - "help_autostop_timer": "Berhenti berbagi setelah beberapa detik", - "help_stealth": "Gunakan otorisasi klien (lanjutan)", - "help_receive": "", - "help_verbose": "Catat kesalahan OnionShare ke stdout, dan kesalahan web ke disk", - "help_filename": "Daftar berkas atau folder untuk dibagikan", - "help_config": "", - "gui_drag_and_drop": "Seret dan lepas berkas dan folder untuk mulai berbagi", - "gui_add": "Tambahkan", - "gui_delete": "Hapus", - "gui_choose_items": "Pilih", - "gui_share_start_server": "Mulai berbagi", - "gui_share_stop_server": "Berhenti berbagi", - "gui_share_stop_server_autostop_timer": "Berhenti berbagi ({})", - "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_autostop_timer": "Menghentikan Mode Menerima ({}d tersisa)", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "Salin Alamat", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Dibatalkan", - "gui_copied_url_title": "Alamat OnionShare disalin", - "gui_copied_url": "Alamat OnionShare 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": "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", - "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": "Apakah ini?", - "gui_settings_stealth_option": "Gunakan otorisasi klien", - "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": "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": "Gunakan versi Tor yang terintegrasi dengan OnionShare", - "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": "Hubungkan menggunakan file socket", - "gui_settings_connection_type_test_button": "Menguji sambungan ke Tor", - "gui_settings_control_port_label": "Port kontrol", - "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": "Dukungan Tor bridge", - "gui_settings_tor_bridges_no_bridges_radio_option": "Jangan gunakan bridges", - "gui_settings_tor_bridges_obfs4_radio_option": "Gunakan obfs4 pluggable transports bawaan", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gunakan obfs4 pluggable transports bawaan (memerlukan obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gunakan meek_lite (Azure) pluggable transports bawaan", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gunakan meek_lite (Azure) pluggable transports bawaan (memerlukan obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Peringatan: meek_lite sangat mahal untuk dijalankan oleh Tor Project.

Gunakan hanya jika tidak dapat terhubung ke Tor secara langsung, melalui obfs4 transports,, atau bridge normal lainnya.", - "gui_settings_tor_bridges_custom_radio_option": "Gunakan bridge kustom", - "gui_settings_tor_bridges_custom_label": "Anda bisa mendapatkan bridge dari https://bridges.torproject.org ", - "gui_settings_tor_bridges_invalid": "Tak satu pun dari bridge yang Anda tambahkan bekerja.\nPeriksa kembali atau tambahkan yang lain.", - "gui_settings_button_save": "Simpan", - "gui_settings_button_cancel": "Batal", - "gui_settings_button_help": "Bantuan", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "settings_error_unknown": "Tidak dapat tersambung ke pengontrol Tor karena pengaturan Anda tidak masuk akal.", - "settings_error_automatic": "Tidak dapat terhubung ke pengontrol Tor. Apakah Tor Browser (unduh di torproject.org) berjalan di latar belakang?", - "settings_error_socket_port": "Tidak dapat tersambung ke pengontrol Tor di {}:{}.", - "settings_error_socket_file": "Tidak dapat tersambung ke pengontrol Tor menggunakan file soket {}.", - "settings_error_auth": "Tersambung ke {}:{}, tetapi tidak bisa mengautentikasi. Mungkin ini bukan pengontrol Tor?", - "settings_error_missing_password": "Terhubung ke pengontrol Tor, tetapi memerlukan kata sandi untuk mengotentikasi.", - "settings_error_unreadable_cookie_file": "Terhubung ke pengontrol Tor, tetapi kata sandi mungkin salah, atau pengguna Anda tidak diizinkan untuk membaca file kuki.", - "settings_error_bundled_tor_not_supported": "Menggunakan versi Tor bawaan OnioShare tidak bekerja dalam mode pengembang di Windows atau macOS.", - "settings_error_bundled_tor_timeout": "Terlalu lama terhubung ke Tor. Mungkin Anda tidak terhubung Internet, atau jam sistem tidak akurat?", - "settings_error_bundled_tor_broken": "OnioShare tidak dapat terhubung Tor:\n{}", - "settings_test_success": "Terhubung ke pengontrol Tor.\n\nVersi tor: {}\nMendukung layanan ephemeral onion: {}.\nMendukung otentikasi klien: {}.\nMendukung alamat .onion generasi berikutnya: {}.", - "error_tor_protocol_error": "Ada kesalahan dengan Tor: {}", - "error_tor_protocol_error_unknown": "", - "error_invalid_private_key": "", - "connecting_to_tor": "Menghubungkan ke jaringan Tor", - "update_available": "OnionShare Baru tersedia. klik di sini untuk mendapatkannya.

Anda menggunakan {} dan yang terbaru adalah {}.", - "update_error_check_error": "Tidak dapat memeriksa versi baru: Mungkin Anda tidak terhubung ke Tor, atau situs web OnionShare sedang down?", - "update_error_invalid_latest_version": "Tidak dapat memeriksa versi baru: Situs web OnionShare mengatakan bahwa versi terbaru adalah '{}' yang tidak dapat dikenali…", - "update_not_available": "Anda menjalankan OnionShare terbaru.", - "gui_tor_connection_ask": "Buka pengaturan untuk memilah koneksi ke Tor?", - "gui_tor_connection_ask_open_settings": "Ya", - "gui_tor_connection_ask_quit": "Keluar", - "gui_tor_connection_error_settings": "Coba ubah cara OnionShare terhubung ke jaringan Tor di pengaturan.", - "gui_tor_connection_canceled": "Tidak dapat terhubung ke Tor.\n\nPastikan Anda terhubung ke Internet, kemudian buka kembali OnionShare dan atur koneksinya ke Tor.", - "gui_tor_connection_lost": "Terputus dari Tor.", - "gui_server_started_after_autostop_timer": "Timer berhenti otomatis habis sebelum server dimulai. Silakan buat pembagian baru.", - "gui_server_autostop_timer_expired": "Timer berhenti otomatis sudah habis. Silakan sesuaikan untuk mulai berbagi.", - "share_via_onionshare": "Bagikan via OnionShare", - "gui_save_private_key_checkbox": "", - "gui_share_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunduh berkas Anda menggunakan Tor Browser:", - "gui_receive_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunggah berkas ke komputer Anda menggunakan Tor Browser:", - "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.

Setiap pembagian selanjutnya menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", - "gui_url_label_stay_open": "Pembagian ini tidak akan berhenti otomatis.", - "gui_url_label_onetime": "Pembagian ini akan berhenti setelah penyelesaian pertama.", - "gui_url_label_onetime_and_persistent": "Pembagian ini tidak akan berhenti otomatis.

Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", - "gui_status_indicator_share_stopped": "Siap untuk berbagi", - "gui_status_indicator_share_working": "Memulai…", - "gui_status_indicator_share_started": "Berbagi", - "gui_status_indicator_receive_stopped": "Siap untuk menerima", - "gui_status_indicator_receive_working": "Memulai…", - "gui_status_indicator_receive_started": "Menerima", - "gui_file_info": "{} file, {}", - "gui_file_info_single": "{} file, {}", - "history_in_progress_tooltip": "{} sedang berlangsung", - "history_completed_tooltip": "{} selesai", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "", - "gui_receive_mode_warning": "Mode menerima membiarkan orang mengunggah berkas ke komputer Anda.

Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.", - "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": "Jelajahi", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Halaman dimuat", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "Bahasa", - "gui_settings_language_changed_notice": "Mulai ulang OnionShare untuk menerapkan bahasa baru.", - "gui_add_files": "Tambahkan berkas", - "gui_add_folder": "Tambahkan Folder", - "gui_settings_onion_label": "Pengaturan Onion", - "incorrect_password": "Password salah", - "gui_waiting_to_start": "Dijadwalkan akan dimulai pada {}. Klik untuk membatalkan.", - "gui_start_server_autostart_timer_tooltip": "Timer mulai otomatis berakhir pada {}", - "gui_stop_server_autostop_timer_tooltip": "Timer berhenti otomatis berakhir pada {}", - "gui_new_tab_chat_button": "Mengobrol secara Anonim", - "gui_new_tab_website_button": "Host sebuah situs web", - "gui_main_page_share_button": "Mulai Berbagi", - "gui_main_page_website_button": "Mulai Hosting", - "gui_main_page_receive_button": "Mulai Menerima", - "gui_close_tab_warning_cancel": "Batal", - "gui_close_tab_warning_title": "Anda yakin?", - "gui_tab_name_chat": "Obrolan", - "gui_tab_name_website": "Situs web", - "gui_tab_name_receive": "Menerima", - "gui_tab_name_share": "Berbagi", - "gui_main_page_chat_button": "Mulai Obrolan", - "gui_quit_warning_title": "Anda yakin?", - "gui_receive_flatpak_data_dir": "Karena Anda menginstal OnionShare menggunakan Flatpak, Anda harus menyimpan file ke folder di ~/OnionShare.", - "mode_settings_website_disable_csp_checkbox": "Jangan kirim header Kebijakan Keamanan Konten (memungkinkan situs web Anda menggunakan sumber daya pihak ketiga)", - "gui_open_folder_error": "Gagal membuka folder dengan xdg-open. File ada di sini: {}", - "gui_status_indicator_share_scheduled": "Dijadwalkan…", - "error_cannot_create_data_dir": "Tidak dapat membuat folder data OnionShare: {}", - "history_requests_tooltip": "{} permintaan web", - "gui_status_indicator_receive_scheduled": "Dijadwalkan…", - "systray_page_loaded_message": "Alamat OnionShare dimuat", - "gui_all_modes_transfer_canceled": "Dibatalkan {}", - "gui_all_modes_transfer_canceled_range": "Dibatalkan {} - {}", - "gui_all_modes_transfer_finished": "Ditransfer {}", - "gui_all_modes_transfer_finished_range": "Ditransfer {} - {}", - "mode_settings_receive_data_dir_browse_button": "Telusur", - "mode_settings_receive_data_dir_label": "Simpan file ke", - "mode_settings_share_autostop_sharing_checkbox": "Berhenti berbagi setelah file dikirim (hapus centang untuk memperbolehkan mengunduh file individual)", - "mode_settings_legacy_checkbox": "Gunakan alamat legacy (layanan onion v2, tidak disarankan)", - "mode_settings_autostop_timer_checkbox": "Hentikan layanan onion pada waktu yang dijadwalkan", - "mode_settings_autostart_timer_checkbox": "Mulai layanan onion pada waktu yang dijadwalkan", - "mode_settings_public_checkbox": "Jangan gunakan kata sandi", - "mode_settings_persistent_checkbox": "Simpan tab ini, dan secara otomatis membukanya saat saya membuka OnionShare", - "mode_settings_advanced_toggle_hide": "Sembunyikan pengaturan lanjut", - "mode_settings_advanced_toggle_show": "Tampilkan pengaturan lanjut", - "gui_quit_warning_cancel": "Batal", - "gui_new_tab_receive_button": "Terima File", - "gui_new_tab_share_button": "Bagikan file", - "gui_new_tab_tooltip": "Buka tab baru", - "gui_new_tab": "Tab Baru", - "seconds_first_letter": "d", - "minutes_first_letter": "m", - "hours_first_letter": "j", - "days_first_letter": "h", - "gui_receive_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan penerimaan", - "gui_receive_mode_no_files": "Belum Ada File yang Diterima", - "gui_website_mode_no_files": "Belum Ada Situs Web yang Dibagikan", - "gui_share_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan pengiriman", - "gui_share_mode_no_files": "Belum Ada File yang Dikirim", - "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "gui_all_modes_progress_starting": "{0:s}, %p% (menghitung)", - "gui_all_modes_progress_complete": "%p%, {0:s} berlalu.", - "gui_all_modes_transfer_started": "Dimulai {}", - "gui_all_modes_clear_history": "Bersihkan Semua", - "gui_all_modes_history": "Riwayat", - "systray_receive_started_message": "Seseorang mengirim file kepada Anda", - "systray_receive_started_title": "Menerima Dimulai", - "systray_share_canceled_message": "Seseorang membatalkan menerima file Anda", - "systray_share_canceled_title": "Berbagi Dibatalkan", - "systray_share_completed_message": "Selesai mengirim file", - "systray_share_completed_title": "Berbagi Selesai", - "systray_share_started_message": "Mulai mengirim file ke seseorang", - "systray_share_started_title": "Berbagi dimulai", - "gui_color_mode_changed_notice": "Mulai ulang OnionShare agar mode warna baru diterapkan.", - "gui_qr_code_dialog_title": "Kode QR OnionShare", - "gui_show_qr_code": "Tampilkan kode QR", - "error_port_not_available": "Port OnionShare tidak tersedia", - "gui_chat_stop_server": "Hentikan server obrolan", - "gui_chat_start_server": "Mulai server obrolan", - "gui_file_selection_remove_all": "Hapus Semua", - "gui_remove": "Hapus", - "history_receive_read_message_button": "Baca Pesan", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Waktu berhenti otomatis tidak boleh sama atau lebih awal dari waktu mulai otomatis. Silakan sesuaikan untuk mulai berbagi.", - "gui_rendezvous_cleanup_quit_early": "Keluar Dini", - "gui_rendezvous_cleanup": "Menunggu sirkuit Tor menutup untuk memastikan berkas Anda telah berhasil ditransfer.\n\nIni mungkin perlu beberapa menit.", - "mode_settings_receive_webhook_url_checkbox": "Gunakan notifikasi webhook", - "mode_settings_receive_disable_files_checkbox": "Nonaktifkan pengunggahan berkas", - "mode_settings_receive_disable_text_checkbox": "Nonaktifkan pengiriman teks", - "mode_settings_title_label": "Judul kustom", - "gui_quit_warning_description": "Pembagian sedang aktif di beberapa tab Anda. Jika Anda keluar, seluruh tab Anda akan tertutup. Apakah Anda yakin mau keluar?", - "gui_close_tab_warning_close": "Tutup", - "gui_close_tab_warning_website_description": "Anda secara aktif menghosting situs web. Apakah Anda yakin mau menutup tab ini?", - "gui_close_tab_warning_receive_description": "Anda dalam proses menerima berkas. Apakah Anda yakin mau menutup tab ini?", - "gui_close_tab_warning_share_description": "Anda dalam proses mengirim berkas. Apakah Anda yakin mau menutup tab ini?", - "gui_close_tab_warning_persistent_description": "Tab ini persisten. Jika Anda menutup tab ini Anda akan kehilangan alamat onion yang sedang digunakan. Apakah Anda yakin mau menutup tab ini?", - "gui_chat_url_description": "Siapa saja dengan alamat OnionShare ini dapat bergabung di ruang obrolan ini menggunakan Tor Browser:", - "gui_website_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunjungi situs web Anda menggunakan Tor Browser:", - "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi.", - "gui_status_indicator_chat_started": "Mengobrol", - "gui_status_indicator_chat_scheduled": "Menjadwalkan…", - "gui_status_indicator_chat_working": "Memulai…", - "gui_status_indicator_chat_stopped": "Siap untuk mengobrol", - "gui_copied_client_auth_title": "Kunci Pribadi Disalin", - "gui_copy_client_auth": "Salin Kunci Pribadi" -} diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json deleted file mode 100644 index a1c2b9af..00000000 --- a/desktop/src/onionshare/resources/locale/is.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "config_onion_service": "Set upp onion-þjónustu á gátt {0:d}.", - "preparing_files": "Þjappa skrám.", - "give_this_url": "Láttu viðtakandann hafa þetta vistfang:", - "give_this_url_stealth": "Láttu viðtakandann hafa þetta vistfang ásamt línunni með HidServAuth:", - "give_this_url_receive": "Láttu sendandann hafa þetta vistfang:", - "give_this_url_receive_stealth": "Láttu sendandann hafa þetta vistfang ásamt línunni með HidServAuth:", - "ctrlc_to_stop": "Ýttu á Ctrl+C til að stöðva þjóninn", - "not_a_file": "{0:s} er ekki gild skrá.", - "not_a_readable_file": "{0:s} er ekki læsileg skrá.", - "no_available_port": "Fann ekki tiltæka gátt til að hefja á onion-þjónustuna", - "other_page_loaded": "Vistfangi hlaðið inn", - "close_on_autostop_timer": "Stöðvað vegna þess að sjálfvirk niðurtalning endaði", - "closing_automatically": "Stöðvað vegna þess að flutningi er lokið", - "timeout_download_still_running": "", - "large_filesize": "Aðvörun: að senda stóra skrá getur tekið klukkustundir", - "systray_menu_exit": "Hætta", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "Ekki nota Tor (einungis fyrir þróunarvinnu)", - "help_stay_open": "Halda áfram deilingu eftir að skrár hafa verið sendar", - "help_autostop_timer": "Hætta deilingu eftir tiltekinn fjölda sekúndna", - "help_stealth": "Nota auðkenningu biðlaraforrits (ítarlegt)", - "help_receive": "Taka á móti sameignum í staðinn fyrir að senda þær", - "help_debug": "Skrá OnionShare-villur í stdout og vefvillur á disk", - "help_filename": "Listi yfir skrár eða möppur sem á að deila", - "help_config": "Staðsetning sérsniðinnar JSON-stillingaskrár (valfrjálst)", - "gui_drag_and_drop": "Dragðu og slepptu skrám og möppum til að hefja deilingu", - "gui_add": "Bæta við", - "gui_delete": "Eyða", - "gui_choose_items": "Veldu", - "gui_share_start_server": "Hefja deilingu", - "gui_share_stop_server": "Hætta deilingu", - "gui_share_stop_server_autostop_timer": "Hætta deilingu ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar {}", - "gui_receive_start_server": "Byrja í móttökuham", - "gui_receive_stop_server": "Hætta í móttökuham", - "gui_receive_stop_server_autostop_timer": "Hætta í móttökuham ({} eftir)", - "gui_receive_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar {}", - "gui_copy_url": "Afrita vistfang", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Hætt við", - "gui_copied_url_title": "Afritaði OnionShare-vistfang", - "gui_copied_url": "OnionShare-vistfang afritað á klippispjald", - "gui_please_wait": "Ræsi... Smelltu til að hætta við.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Ekki svona snöggt", - "gui_share_quit_warning": "Þú ert að senda skrár. Ertu viss um að þú viljir hætta í OnionShare?", - "gui_receive_quit_warning": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir hætta í OnionShare?", - "gui_quit_warning_quit": "Hætta", - "gui_quit_warning_dont_quit": "Hætta við", - "zip_progress_bar_format": "Þjappa: %p%", - "error_stealth_not_supported": "Til að nota biðlaraauðkenningu þarf a.m.k. bæði Tor 0.2.9.1-Alpha (eða Tor Browser 6,5) og python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare krefst a.m.k. bæði Tor 0.2.7.1 og python3-stem 1.4.0.", - "gui_settings_window_title": "Stillingar", - "gui_settings_whats_this": "Hvað er þetta?", - "gui_settings_stealth_option": "Nota auðkenningu biðlaraforrits", - "gui_settings_autoupdate_label": "Athuga með nýja útgáfu", - "gui_settings_autoupdate_option": "Láta vita þegar ný útgáfa er tiltæk", - "gui_settings_autoupdate_timestamp": "Síðast athugað: {}", - "gui_settings_autoupdate_timestamp_never": "Aldrei", - "gui_settings_autoupdate_check_button": "Athuga með nýjar útgáfur", - "gui_settings_general_label": "Almennar stillingar", - "gui_settings_sharing_label": "Stillingar deilingar", - "gui_settings_close_after_first_download_option": "Hætta deilingu eftir að skrár hafa verið sendar", - "gui_settings_connection_type_label": "Hvernig ætti OnionShare að tengjast við Tor?", - "gui_settings_connection_type_bundled_option": "Nota Tor útgáfuna sem er innbyggð í OnionShare", - "gui_settings_connection_type_automatic_option": "Reyna sjálfvirka uppsetningu með Tor-vafranum", - "gui_settings_connection_type_control_port_option": "Tengjast með stýrigátt", - "gui_settings_connection_type_socket_file_option": "Tengjast með sökkulskrá", - "gui_settings_connection_type_test_button": "Prófa tengingu við Tor", - "gui_settings_control_port_label": "Stýrigátt", - "gui_settings_socket_file_label": "Sökkulskrá", - "gui_settings_socks_label": "SOCKS-gátt", - "gui_settings_authenticate_label": "Auðkenningarstillingar Tor", - "gui_settings_authenticate_no_auth_option": "Engin auðkenning eða auðkenning með vefköku", - "gui_settings_authenticate_password_option": "Lykilorð", - "gui_settings_password_label": "Lykilorð", - "gui_settings_tor_bridges": "Tengjast með Tor-brú?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ekki nota brýr", - "gui_settings_tor_bridges_obfs4_radio_option": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Nota innbyggðar obfs4 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir (þarfnast obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aðvörun: Að reka meek_azure brýrnar er kostnaðarsamt fyrir Tor-verkefnið.

Ekki nota þær nema þér takist ekki að tengjast beint við Tor, með obfs4 tengileið, eða öðrum venjulegum brúm.", - "gui_settings_tor_bridges_custom_radio_option": "Nota sérsniðnar brýr", - "gui_settings_tor_bridges_custom_label": "Þú getur náð í brýr frá https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka. Yfirfarðu þær eða bættu öðrum við.", - "gui_settings_button_save": "Vista", - "gui_settings_button_cancel": "Hætta við", - "gui_settings_button_help": "Hjálp", - "gui_settings_autostop_timer_checkbox": "Nota sjálfvirka niðurtalningu", - "gui_settings_autostop_timer": "Stöðva deilinguna:", - "settings_error_unknown": "Gat ekki tengst við Tor-stýringu því engin glóra er í stillingunum þínum.", - "settings_error_automatic": "Ekki tókst að tengjast Tor-stýringunni. Er Tor-vafrinn (tiltækur á torproject.org) keyrandi í bakgrunni?", - "settings_error_socket_port": "Gat ekki tengst við Tor-stýringu á {}:{}.", - "settings_error_socket_file": "Gat ekki tengst við Tor-stýringu með sökkulskránni {}.", - "settings_error_auth": "Tengt við {}:{}, en get ekki auðkennt. Kannski er þetta ekki Tor-stýring?", - "settings_error_missing_password": "Tengt við Tor-stýringu, en hún krefst lykilorðs fyrir auðkenningu.", - "settings_error_unreadable_cookie_file": "Tengt við Tor-stýringuna, en lykilorðið gæti verið rangt eða að notandinn þinn hafi ekki heimild til að lesa vefkökuskrána.", - "settings_error_bundled_tor_not_supported": "Sé notuð Tor útgáfan sem er innbyggð í OnionShare, virkar hún ekki í þróunarham á Windows eða macOS.", - "settings_error_bundled_tor_timeout": "Það tekur of langan tíma að tengjast við Tor. Kannski er ekki tenging við internetið, nú eða að klukka kerfisins sé ekki rétt stillt?", - "settings_error_bundled_tor_broken": "OnionShare gat ekki tengst við Tor:\n{}", - "settings_test_success": "Tengt við Tor-stýringuna.\n\nTor útgáfa: {}\nStyður stuttlifandi onion-þjónustur: {}.\nStyður auðkenningu biðlaraforrits: {}.\nStyður næstu-kynslóðar .onion vistföng: {}.", - "error_tor_protocol_error": "Það kom upp villa í Tor: {}", - "error_tor_protocol_error_unknown": "Það kom uppóþekkt villa varðandi Tor", - "error_invalid_private_key": "Þessi gerð einkalykils er ekki studd", - "connecting_to_tor": "Tengist við Tor-netkerfið", - "update_available": "Ný útgáfa OnionShare er komin út. Smelltu hér til að ná í hana.

Þú ert að nota útgáfu {} og sú nýjasta er {}.", - "update_error_check_error": "Gat ekki athugað með nýjar uppfærslur: mögulega ertu ekki tengd(ur) við Tor eða að vefsvæði OnionShare sé óvirkt í augnablikinu?", - "update_error_invalid_latest_version": "Gat ekki athugað með nýjar uppfærslu: vefsvæði OnionShare tilkynnir að nýjasta útgáfan sé hin óskiljanlega '{}'…", - "update_not_available": "Þú ert þegar að keyra nýjustu útgáfu OnionShare.", - "gui_tor_connection_ask": "Opna stillingarnar til að ráða fram úr tengingu við Tor?", - "gui_tor_connection_ask_open_settings": "Já", - "gui_tor_connection_ask_quit": "Hætta", - "gui_tor_connection_error_settings": "Prófaðu að breyta í stillingunum hvernig OnionShare tengist við Tor-netkerfið.", - "gui_tor_connection_canceled": "Tókst ekki að tengjast Tor.\n\nGakktu úr skugga um að þú sért tengd/ur internetinu, opnaðu síðan aftur OnionShare og settu upp tengingu þess við Tor.", - "gui_tor_connection_lost": "Aftengt frá Tor.", - "gui_server_autostop_timer_expired": "Sjálfvirkri niðurtalningu er þegar lokið. Lagaðu hana til að hefja deilingu.", - "share_via_onionshare": "Deila með OnionShare", - "gui_save_private_key_checkbox": "Nota viðvarandi vistföng", - "gui_share_url_description": "Hver sem er með þetta OnionShare vistfang og þennan einkalykil getur sótt skrárnar þínar með því að nota Tor-vafrann: ", - "gui_receive_url_description": "Hver sem er með þetta OnionShare vistfang og einkalykil getur sent skrár inn á tölvuna þína með því að nota Tor-vafrann: ", - "gui_url_label_persistent": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.

Allar deilingar sem á eftir koma munu endurnýta vistfangið. (Til að nota eins-skiptis vistföng skaltu slökkva á \"Nota viðvarandi vistföng\" í stillingunum.)", - "gui_url_label_stay_open": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.", - "gui_url_label_onetime": "Deiling þessarar sameignar mun stöðvast eftir fyrstu klárun.", - "gui_url_label_onetime_and_persistent": "Deiling þessarar sameignar mun ekki stöðvast sjálfvirkt.

Allar deilingar sem á eftir koma munu endurnýta vistfangið. (Til að nota eins-skiptis vistföng skaltu slökkva á \"Nota viðvarandi vistföng\" í stillingunum.)", - "gui_status_indicator_share_stopped": "Tilbúið til að deila", - "gui_status_indicator_share_working": "Ræsi…", - "gui_status_indicator_share_started": "Deiling", - "gui_status_indicator_receive_stopped": "Tilbúið til að taka við", - "gui_status_indicator_receive_working": "Ræsi…", - "gui_status_indicator_receive_started": "Tek á móti", - "gui_file_info": "{} skrár, {}", - "gui_file_info_single": "{} skrá, {}", - "history_in_progress_tooltip": "{} í vinnslu", - "history_completed_tooltip": "{} lokið", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "Aðvörun: móttökuhamur leyfir fólk að hlaða skrám inn á tölvuna þína. Sumar skrár geta hugsanlega tekið yfir stjórn á tölvunni ef þær eru opnaðar. Ekki opna hluti nema frá fólki sem þú treystir, eða ef þú veist raunverulega hvað þú ert að gera.", - "gui_receive_mode_warning": "Móttökuhamur leyfir fólk að hlaða skrám inn á tölvuna þína.

Sumar skrár geta hugsanlega tekið yfir stjórn á tölvunni ef þær eru opnaðar. Ekki opna hluti nema frá fólki sem þú treystir, eða ef þú veist raunverulega hvað þú ert að gera.", - "receive_mode_upload_starting": "Innsending alls {} er að ræsast", - "receive_mode_received_file": "Móttekið: {}", - "gui_mode_share_button": "Deila skrám", - "gui_mode_receive_button": "Taka á móti skrám", - "gui_settings_receiving_label": "Stillingar á móttöku", - "gui_settings_downloads_label": "", - "gui_settings_downloads_button": "Flakka", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Opinber hamur", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Síða lesin inn", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "Get ekki opnað möppu því nautilus er ekki til taks. Skráin er hér: {}", - "gui_settings_language_label": "Tungumál", - "gui_settings_language_changed_notice": "Þú þarft að endurræsa OnionShare til að nýtt tungumál taki gildi.", - "gui_add_files": "Bæta við skrám", - "gui_add_folder": "Bæta við möppu", - "gui_settings_onion_label": "Onion-stillingar", - "gui_connect_to_tor_for_onion_settings": "Tengstu við Tor til að sjá stillingar onion-þjónustu", - "error_cannot_create_data_dir": "Gat ekki búið til OnionShare gagnamöppu: {}", - "receive_mode_data_dir": "Skrár sem þér eru sendar munu birtast í þessari möppu: {}", - "gui_settings_data_dir_label": "Vista skrár í", - "gui_settings_data_dir_browse_button": "Flakka", - "systray_page_loaded_message": "OnionShare-vistfang hlaðið inn", - "systray_share_started_title": "Deiling hafin", - "systray_share_started_message": "Byrja að senda skrár til einhvers", - "systray_share_completed_title": "Deilingu lokið", - "systray_share_completed_message": "Lokið við að senda skrár", - "systray_share_canceled_title": "Hætt við deilingu", - "systray_share_canceled_message": "Einhver hætti við að taka á móti skrám frá þér", - "systray_receive_started_title": "Móttaka hafin", - "systray_receive_started_message": "Einhver er að senda þér skrár", - "gui_all_modes_history": "Vinnsluferill", - "gui_all_modes_clear_history": "Hreinsa allt", - "gui_all_modes_transfer_started": "Ræsti {}", - "gui_all_modes_transfer_finished_range": "Færði {} - {}", - "gui_all_modes_transfer_finished": "Færði {}", - "gui_all_modes_transfer_canceled_range": "Hætt við {} - {}", - "gui_all_modes_transfer_canceled": "Hætt við {}", - "gui_all_modes_progress_complete": "%p%, {0:s} liðnar.", - "gui_all_modes_progress_starting": "{0:s}, %p% (reikna)", - "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "gui_share_mode_no_files": "Engar skrár sendar ennþá", - "gui_share_mode_autostop_timer_waiting": "Bíð þess að sendingu ljúki", - "gui_receive_mode_no_files": "Engar skrár mótteknar ennþá", - "gui_receive_mode_autostop_timer_waiting": "Bíð þess að móttöku ljúki", - "gui_stop_server_autostop_timer_tooltip": "Sjálfvirk niðurtalning endar kl. {}", - "gui_start_server_autostart_timer_tooltip": "Sjálfvirk ræsing endar kl. {}", - "gui_waiting_to_start": "Áætlað að ræsa eftir {}. Smelltu til að hætta við.", - "gui_settings_autostart_timer_checkbox": "Nota sjálfvirka niðurtalningu ræsingar", - "gui_settings_autostart_timer": "Byrja deilinguna:", - "gui_server_started_after_autostop_timer": "Sjálfvirka niðurtalningin rann út áður en þjónninn ræstist. Útbúðu nýja sameign.", - "gui_server_autostart_timer_expired": "Áætlaðri tímasetningu er þegar lokið. Lagaðu hana til að hefja deilingu.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Tímasetning sjálfvirkrar lokaniðurtalningar má ekki vera sú sama eða á undan sjálfvirkri ræsiniðurtalningu. Lagaðu tímasetninguna til að hefja deilingu.", - "gui_status_indicator_share_scheduled": "Áætlað…", - "gui_status_indicator_receive_scheduled": "Áætlað…", - "days_first_letter": "dag", - "hours_first_letter": "klst", - "minutes_first_letter": "mín", - "seconds_first_letter": "sek", - "gui_website_url_description": "Hver sem er með þetta OnionShare vistfang og einkalykil getur skoðað vefsvæðið þitt með því að nota Tor-vafrann: ", - "gui_mode_website_button": "Birta vefsvæði", - "gui_website_mode_no_files": "Ennþá hefur engu vefsvæði verið deilt", - "incorrect_password": "Rangt lykilorð", - "gui_settings_individual_downloads_label": "Taktu merkið úr til að leyfa niðurhal á stökum skrám", - "history_requests_tooltip": "{} vefbeiðnir", - "gui_settings_csp_header_disabled_option": "Gera haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan", - "gui_settings_website_label": "Stillingar vefsvæðis", - "gui_new_tab_share_description": "Veldu skrár á tölvunni til að senda einhverjum öðrum. Sá eða þau sem þú ætlar að senda skrárnar þarf að nota Tor-vafrann til að sækja þær frá þér.", - "gui_new_tab_receive_description": "Breyttu tölvunni þinni í nettengt afhendingarhólf (dropbox). Fólk getur þá notað Tor-vafrann til að senda skrár inn á tölvuna þína.", - "mode_settings_persistent_checkbox": "Vista þennan flipa og opna hann sjálfkrafa þegar ég opna OnionShare", - "gui_close_tab_warning_persistent_description": "Þessi flipi er viðvarandi. Ef þú lokar honum muntu tapa onion-vistfanginu sem hann er að nota. Ertu viss að þú viljir loka honum?", - "gui_quit_warning_description": "Deiling er virk í sumum flipanna þinna. Ef þú hættir núna, lokast allir fliparnir. Ertu viss um að þú viljir hætta?", - "mode_settings_share_autostop_sharing_checkbox": "Hætta að deila eftir að skrár hafa verið sendar (taka merkið úr reitnum til að leyfa niðurhal á stökum skrám)", - "mode_settings_website_disable_csp_checkbox": "Gera sjálfgefinn haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan (gerir vefsvæðinu þínu kleift að nota tilföng frá utanaðkomandi aðilum)", - "gui_close_tab_warning_share_description": "Þú ert að senda skrár. Ertu viss um að þú viljir loka þessum flipa?", - "mode_settings_legacy_checkbox": "Nota eldri gerð vistfangs (onion-þjónusta af útgáfu 2, ekki mælt með því)", - "gui_close_tab_warning_website_description": "Þú ert að hýsa vefsvæði. Ertu viss um að þú viljir loka þessum flipa?", - "gui_close_tab_warning_receive_description": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir loka þessum flipa?", - "gui_new_tab_website_description": "Hýstu statskt HTML onion-vefsvæði frá tölvunni þinni.", - "mode_settings_receive_data_dir_browse_button": "Skoða", - "mode_settings_public_checkbox": "Þetta er opinber OnionShare-þjónusta (gerir einkalykil óvirkann)", - "mode_settings_receive_data_dir_label": "Vista skrár í", - "mode_settings_autostart_timer_checkbox": "Ræsa onion-þjónustu á áætluðum tíma", - "gui_quit_warning_title": "Ertu viss?", - "gui_new_tab_share_button": "Deila skrám", - "mode_settings_advanced_toggle_show": "Birta ítarlegar stillingar", - "gui_new_tab_tooltip": "Opna nýjan flipa", - "gui_new_tab_receive_button": "Taka á móti skrám", - "mode_settings_advanced_toggle_hide": "Fela ítarlegar stillingar", - "gui_quit_warning_cancel": "Hætta við", - "gui_close_tab_warning_title": "Ertu viss?", - "gui_new_tab_website_button": "Hýsa vefsvæði", - "gui_new_tab": "Nýr flipi", - "gui_close_tab_warning_close": "Loka", - "gui_close_tab_warning_cancel": "Hætta við", - "mode_settings_autostop_timer_checkbox": "Stöðva onion-þjónustu á áætluðum tíma", - "gui_receive_flatpak_data_dir": "Þar sem þú settir OnionShare upp með því að nota Flatpak, þá verður þú að vista skrár í möppu undir ~/OnionShare.", - "gui_tab_name_receive": "Taka á móti", - "gui_chat_stop_server": "Stöðva spjallþjón", - "gui_chat_start_server": "Ræsa spjallþjón", - "gui_tab_name_chat": "Spjall", - "gui_tab_name_website": "Vefsvæði", - "gui_tab_name_share": "Deila", - "gui_open_folder_error": "Mistókst að opna möppu með xdg-open. Skráin er hér: {}", - "gui_qr_code_description": "Skannaðu þennan QR-kóða með QR-kóðalesara, svo sem eins og með myndavélinni á símanum þínum, svo auðveldara sé fyrir þig að deila OnionShare-vistfanginu með öðrum.", - "gui_remove": "Fjarlægja", - "gui_chat_stop_server_autostop_timer": "Stöðva spjallþjón ({})", - "gui_qr_code_dialog_title": "QR-kóði OnionShare", - "gui_file_selection_remove_all": "Fjarlægja allt", - "gui_show_qr_code": "Birta QR-kóða", - "gui_new_tab_chat_button": "Spjalla nafnlaust", - "gui_main_page_chat_button": "Hefja spjall", - "gui_main_page_website_button": "Hefja hýsingu", - "gui_main_page_receive_button": "Hefja móttöku", - "gui_main_page_share_button": "Hefja deilingu", - "gui_chat_url_description": "Hver og einn með þetta OnionShare-vistfang og einkalykil getur tekið þátt í þessari spjallrás í gegnum Tor-vafrann: ", - "error_port_not_available": "OnionShare-gátt ekki tiltæk", - "gui_rendezvous_cleanup_quit_early": "Hætta snemma", - "gui_rendezvous_cleanup": "Bíð eftir að Tor-rásir lokist svo öruggt sé að tekist hafi að flytja skrárnar þínar.\n\nÞetta gæti tekið nokkrar mínútur.", - "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi.", - "history_receive_read_message_button": "Lesa skilaboð", - "mode_settings_receive_webhook_url_checkbox": "Nota webhook fyrir tilkynningar", - "mode_settings_receive_disable_files_checkbox": "Gera innsendingu skráa óvirka", - "mode_settings_receive_disable_text_checkbox": "Gera innsendingu texta óvirka", - "mode_settings_title_label": "Sérsniðinn titill", - "gui_status_indicator_chat_started": "Spjalla", - "gui_status_indicator_chat_scheduled": "Áætlað…", - "gui_status_indicator_chat_working": "Ræsi…", - "gui_status_indicator_chat_stopped": "Tilbúið í spjall", - "gui_please_wait_no_button": "Ræsi…", - "gui_settings_theme_dark": "Dökkt", - "gui_settings_theme_light": "Ljóst", - "gui_settings_theme_auto": "Sjálfvirkt", - "gui_settings_theme_label": "Þema", - "gui_server_doesnt_support_stealth": "Því miður, þessi útgáfa Tor styður ekki huliðsham (stealth - m. auðkenningu biðlara). Prófaðu að nota nýrri útgáfu af Tor eða að nota opinberan 'public' ham ef þetta þarf ekki að vera einkamál.", - "gui_client_auth_instructions": "Næst skaltu senda einkalykilinn til að heimila aðgang að OnionShare-þjónustunni þinni:", - "gui_url_instructions_public_mode": "Sendu OnionShare-vistfangið sem er hér fyrir neðan:", - "gui_url_instructions": "Fyrst skaltu senda OnionShare-vistfangið sem er hér fyrir neðan:", - "gui_chat_url_public_description": "Hver og einn með þetta OnionShare-vistfang getur tekið þátt í þessari spjallrás í gegnum Tor-vafrann: ", - "gui_receive_url_public_description": "Hver sem er með þetta OnionShare vistfang getur sent skrár inn á tölvuna þína með því að nota Tor-vafrann: ", - "gui_website_url_public_description": "Hver sem er með þetta OnionShare vistfang getur skoðað vefsvæðið þitt með því að nota Tor-vafrann: ", - "gui_share_url_public_description": "Hver sem er með þetta OnionShare vistfang getur sótt skrárnar þínar með því að nota Tor-vafrann: ", - "gui_hide": "Fela", - "gui_reveal": "Birta", - "gui_qr_label_auth_string_title": "Einkalykill", - "gui_qr_label_url_title": "OnionShare-vistfang", - "gui_copied_client_auth": "Einkalykill afritaður á klippispjald", - "gui_copied_client_auth_title": "Afritaði einkalykil", - "gui_copy_client_auth": "Afrita einkalykil", - "gui_tor_settings_window_title": "Stillingar Tor", - "gui_settings_controller_extras_label": "Stillingar Tor", - "gui_settings_bridge_use_checkbox": "Nota brú", - "gui_settings_bridge_radio_builtin": "Velja innbyggða brú", - "gui_settings_bridge_none_radio_option": "Ekki nota brú", - "gui_settings_tor_bridges_label": "Brýr hjálpa þér við að tengjast Tor-netinu þar sem lokað er á Tor. Það fer eftir því hvar þú ert hvaða brýr virka best, ein brú getur virkað betur en aðrar.", - "mode_settings_website_custom_csp_checkbox": "Senda sérsniðinn haus fyrir öryggisstefnu efnis (Content Security Policy)", - "moat_captcha_submit": "Senda inn", - "gui_settings_bridge_moat_radio_option": "Biðja um brú frá torproject.org", - "gui_settings_bridge_moat_button": "Biðja um nýja brú", - "gui_settings_bridge_custom_radio_option": "Settu inn brúna sem þú heyrðir um hjá áreiðanlegum aðila", - "gui_settings_bridge_custom_placeholder": "skrifaðu vistfang:gátt (eitt á hverja línu)", - "gui_settings_moat_bridges_invalid": "Þú hefur ekki ennþá beðið um brú frá torproject.org.", - "gui_settings_stop_active_tabs_label": "Það eru þjónustur að keyra í sumum flipanna þinna.\nÞú þarft að stöðva allar þjónustur til að breyta Tor-stillingunum þínum.", - "gui_settings_version_label": "Þú ert að nota OnionShare {}", - "gui_settings_help_label": "Þarftu aðstoð? Skoðaðu docs.onionshare.org", - "moat_captcha_error": "Þetta er ekki rétt, reyndu aftur.", - "moat_contact_label": "Hef samband við brúagagnagrunn...", - "moat_captcha_label": "Leystu CAPTCHA-þraut til að biðja um brýr.", - "moat_captcha_placeholder": "Settu inn stafina úr myndinni", - "moat_solution_empty_error": "Þú verður að setja inn stafina úr myndinni", - "moat_captcha_reload": "Endurhlaða", - "moat_bridgedb_error": "Villa við að tengjast brúagagnagrunni.", - "mode_tor_not_connected_label": "OnionShare er ekki tengt við Tor-netið", - "gui_dragdrop_sandbox_flatpak": "Til að auka öryggi Flatpak sandkassans, er draga/sleppa ekki stutt. Notaðu frekar hnappana til að bæta við skrám og möppum." -} diff --git a/desktop/src/onionshare/resources/locale/it.json b/desktop/src/onionshare/resources/locale/it.json deleted file mode 100644 index 9063f0f0..00000000 --- a/desktop/src/onionshare/resources/locale/it.json +++ /dev/null @@ -1,279 +0,0 @@ -{ - "preparing_files": "Compressione dei file in corso.", - "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": "Indirizzo caricato", - "closing_automatically": "Fermato perché il trasferimento è completato", - "large_filesize": "Attenzione: inviare file di grandi dimensioni può richiedere ore", - "help_local_only": "Non usare Tor (solo per lo sviluppo)", - "help_stay_open": "Mantieni la condivisione attiva anche dopo che i file sono stati inviati", - "help_verbose": "Registra gli errori sul disco", - "help_filename": "Lista dei file o cartelle da condividere", - "gui_drag_and_drop": "Trascina e rilascia i file e le cartelle per iniziare la condivisione", - "gui_add": "Aggiungi", - "gui_delete": "Cancella", - "gui_choose_items": "Scegli", - "gui_share_start_server": "Inizia la condivisione", - "gui_share_stop_server": "Arresta la condivisione", - "gui_copy_url": "Copia Indirizzo", - "gui_downloads": "Cronologia dei Download", - "gui_canceled": "Annullato", - "gui_copied_url": "Indirizzo OnionShare copiato negli appunti", - "gui_please_wait": "Avviato... Clicca per annullare.", - "zip_progress_bar_format": "Compressione al: %p%", - "config_onion_service": "Preparando il servizio onion sulla porta {0:d}.", - "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.", - "no_available_port": "Non è stato possibile trovare alcuna porta per avviare il servizio onion", - "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", - "systray_download_started_message": "Un utente ha iniziato il download dei tuoi file", - "systray_download_completed_title": "Download completato", - "systray_download_completed_message": "L'utente ha terminato il download dei tuoi file", - "systray_download_canceled_title": "OnionShare Download cancellato", - "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_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_autostop_timer": "Arresta la condivisione ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Il timer si arresterà tra {}", - "gui_receive_start_server": "Avvia modalità Ricezione", - "gui_receive_stop_server": "Arresta modalità Ricezione", - "gui_receive_stop_server_autostop_timer": "Interrompi la ricezione ({} rimanenti)", - "gui_receive_stop_server_autostop_timer_tooltip": "Il timer termina tra {}", - "gui_no_downloads": "Ancora nessun Download", - "gui_copied_url_title": "Indirizzo OnionShare copiato", - "gui_download_upload_progress_complete": "%p%, {0:s} trascorsi.", - "gui_download_upload_progress_starting": "{0:s}, %p% (calcolato)", - "gui_download_upload_progress_eta": "{0:s}, Terminando in: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org", - "gui_quit_title": "Non così in fretta", - "gui_share_quit_warning": "Stai inviando dei file. Sei sicuro di voler uscire da OnionShare?", - "gui_receive_quit_warning": "Stai ricevendo dei file, vuoi davvero terminare OnionShare?", - "gui_quit_warning_quit": "Esci", - "gui_quit_warning_dont_quit": "Annulla", - "error_stealth_not_supported": "Per usare l'opzione \"client auth\" hai bisogno almeno della versione di Tor 0.2.9.1-alpha (o Tor Browser 6.5) con python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare richiede almeno Tor 0.2.7.1 e python3-stem 1.4.0.", - "gui_settings_window_title": "Impostazioni", - "gui_settings_whats_this": "Cos'è questo?", - "help_receive": "Ricevi le condivisioni invece di inviarle", - "gui_settings_stealth_option": "Usa l'autorizzazione client (legacy)", - "gui_settings_autoupdate_label": "Verifica se c'è una nuova versione", - "gui_settings_autoupdate_option": "Avvisami quando è disponibile una nuova versione", - "gui_settings_autoupdate_timestamp": "Ultimo controllo: {}", - "gui_settings_autoupdate_timestamp_never": "Mai", - "gui_settings_autoupdate_check_button": "Controlla se esiste una nuova versione", - "gui_settings_general_label": "Impostazioni generali", - "gui_settings_sharing_label": "Impostazioni di condivisione", - "gui_settings_close_after_first_download_option": "Interrompe la condivisione dopo che i file sono stati inviati", - "gui_settings_connection_type_label": "Come dovrebbe connettersi OnionShare a Tor?", - "gui_settings_connection_type_bundled_option": "Usa la versione Tor integrata in OnionShare", - "gui_settings_connection_type_automatic_option": "Tentativo di auto-configurazione con Tor Browser", - "gui_settings_language_label": "Lingua preferita", - "gui_settings_language_changed_notice": "Riavvia OnionShare affinché il cambiamento della tua lingua abbia effetto.", - "gui_settings_tor_bridges_custom_radio_option": "Usa bridge personalizzati", - "timeout_upload_still_running": "In attesa del completamento dell'upload", - "gui_add_files": "Aggiungi file", - "gui_add_folder": "Aggiungi una cartella", - "gui_settings_connection_type_control_port_option": "Connetti usando la porta di controllo", - "gui_settings_connection_type_socket_file_option": "Collegamento tramite file socket", - "gui_settings_connection_type_test_button": "Verifica la connessione a Tor", - "gui_settings_socket_file_label": "File di socket", - "gui_settings_socks_label": "Porta SOCKS", - "gui_settings_authenticate_label": "Impostazioni di autenticazione Tor", - "gui_settings_authenticate_password_option": "Password", - "gui_settings_password_label": "Password", - "gui_settings_control_port_label": "Porta di controllo", - "gui_settings_authenticate_no_auth_option": "Nessuna autenticazione, o cookie di autenticazione", - "gui_settings_tor_bridges": "Supporto bridge Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "Non usare i bridge", - "gui_settings_tor_bridges_obfs4_radio_option": "Usa i trasporti collegabili obfs4 integrati", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usa i trasporti collegabili obfs4 integrati (richiede obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usa i trasporti collegabili meek_lite (Azure) integrati", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usa i trasporti collegabili meek_lite (Azure) integrati (richiede obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Attenzione: i bridge meek_lite sono molto costosi da mantenere per il Progetto Tor.

Usali solo se è impossibile connettersi a Tor direttamente, con i trasporti obfs4, o con un altro bridge normale.", - "gui_settings_tor_bridges_custom_label": "Puoi ottenere i bridge da https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nessuno dei bridge che hai aggiunto funziona.\nControllali nuovamente o aggiungine altri.", - "gui_settings_button_save": "Salva", - "gui_settings_button_cancel": "Cancella", - "gui_settings_button_help": "Aiuto", - "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. Il Tor Browser (disponibile da torproject.org) è in esecuzione in background?", - "settings_error_socket_port": "Impossibile connettersi al controller Tor in {}: {}.", - "settings_error_socket_file": "Impossibile connettersi al controller Tor utilizzando il file socket {}.", - "settings_error_auth": "Connesso a {}: {}, ma non può autenticarsi. Forse questo non è un controller Tor?", - "settings_error_missing_password": "Collegato al controller Tor, ma richiede una password per l'autenticazione.", - "settings_error_unreadable_cookie_file": "Collegato al controller Tor, ma la password potrebbe essere errata o l'utente non è autorizzato a leggere il file cookie.", - "settings_error_bundled_tor_not_supported": "L'uso della versione Tor fornita con OnionShare non funziona in modalità sviluppatore su Windows o macOS.", - "settings_error_bundled_tor_timeout": "Prendendo troppo tempo per connettersi a Tor. Forse non sei connesso a Internet o hai un orologio di sistema impreciso?", - "settings_error_bundled_tor_broken": "OnionShare non è riuscito a connettersi a Tor in background:\n{}", - "settings_test_success": "Collegato al controller Tor.\n\nVersione Tor: {}\nSupporta servizi onion effimeri: {}.\nSupporta l'autenticazione del client: {}.\nSupporta indirizzi .onion next-gen: {}.", - "error_tor_protocol_error": "Si è verificato un errore con Tor: {}", - "error_tor_protocol_error_unknown": "Si è verificato un errore sconosciuto con Tor", - "error_invalid_private_key": "Questo tipo di chiave privata non è supportato", - "connecting_to_tor": "In connessione alla rete Tor", - "update_available": "E' disponibile una nuova versione di OnionShare. Clicca qui per scaricarla.

Stai usando {} e l'ultima versione è {}.", - "update_error_check_error": "Non è possibile controllare per una nuova versione: Magari non sei connesso a Tor, o il sito OnionShare non funziona?", - "update_error_invalid_latest_version": "Non è possibile verificare per la nuova versione: il sito OnionShare dice che l'ultima versione non è riconoscibile '{}'…", - "update_not_available": "Stai usando la ultima versione di OnionShare.", - "gui_tor_connection_ask": "Apri le impostazione per trovare la connessione a Tor?", - "gui_tor_connection_ask_open_settings": "Sì", - "gui_tor_connection_ask_quit": "Esci", - "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\nAssicurati di essere connesso a Internet, dopo prova a riaprire OnionShare e configurare la connessione a Tor.", - "gui_tor_connection_lost": "Disconnesso da Tor.", - "gui_server_started_after_autostop_timer": "Il timer ad arresto automatico si è fermato prima dell'avvio del server. Si prega di fare una nuova condivisione.", - "gui_server_autostop_timer_expired": "Il timer di arresto automatico è già scaduto. Si prega di modificarlo per iniziare la condivisione.", - "share_via_onionshare": "Condividi via OnionShare", - "gui_connect_to_tor_for_onion_settings": "Connetti a Tor per vedere le impostazioni del servizio onion", - "gui_save_private_key_checkbox": "Usa un indirizzo persistente", - "gui_share_url_description": "1 Tutti2 con questo l'indirizzo di OnionShare possono 3 scaricare4 i tuoi file usando 5 il Browser Tor6: 7", - "gui_receive_url_description": "1 Tutti2 con questo indirizzo OnionShare possono 3 caricare4 file nel tuo computer usando 5 Tor Browser6: 7", - "gui_url_label_persistent": "Questa condivisione non si arresterà automaticamente.

Ogni successiva condivisione riutilizza l'indirizzo. (Per utilizzare indirizzi monouso, disattivare \"Usa indirizzo persistente\" nelle impostazioni.)", - "gui_url_label_stay_open": "Questa condivisione non si arresterà automaticamente.", - "gui_url_label_onetime": "Questa condivisione verrà interrotta dopo il primo completamento.", - "gui_url_label_onetime_and_persistent": "Questa condivisione non si arresterà automaticamente.

Ogni condivisione successiva riutilizzerà l'indirizzo. (Per utilizzare indirizzi monouso, disattivare \"Usa indirizzo persistente\" nelle impostazioni.)", - "gui_status_indicator_share_stopped": "Pronto per condividere", - "gui_status_indicator_share_working": "Iniziando…", - "gui_status_indicator_share_started": "Condividendo", - "gui_status_indicator_receive_stopped": "Pronto per ricevere", - "gui_status_indicator_receive_working": "Iniziando…", - "gui_status_indicator_receive_started": "Ricevendo", - "gui_file_info": "{} file, {}", - "gui_file_info_single": "{} file, {}", - "history_in_progress_tooltip": "{} in avanzamento", - "history_completed_tooltip": "{} completato", - "info_in_progress_uploads_tooltip": "{} upload(s) in avanzamento", - "info_completed_uploads_tooltip": "{} upload(s) completati", - "error_cannot_create_downloads_dir": "Non è stato possibile creare la cartella in modalità ricezione: {}", - "receive_mode_downloads_dir": "I file a te mandati appariranno in questa cartella: {}", - "receive_mode_warning": "Attenzione: La modalità ricezione permette alla gente di fare l'upload di file nel tuo computer. Alcuni file possono potenzialmente prendere il controllo del tuo computer se aperti. Apri solamente file inviati da persone di cui ti fidi, o se sai quello che stai facendo.", - "gui_receive_mode_warning": "La modalità ricezione permette alle persone di fare l'upload di file nel tuo computer.

Alcuni file possono potenzialmente prendere il controllo del tuo computer se li apri. Apri solamente file di persone di cui ti fidi, o se sai quello che stai facendo.", - "receive_mode_upload_starting": "Upload di dimensione totale {} sta partendo", - "receive_mode_received_file": "Ricevuto: {}", - "gui_mode_share_button": "Condividi File", - "gui_mode_receive_button": "Ricevi File", - "gui_settings_receiving_label": "Impostazioni di Ricezione", - "gui_settings_downloads_label": "Salva i file in", - "gui_settings_downloads_button": "Navigare", - "gui_settings_public_mode_checkbox": "Modalità pubblica", - "systray_close_server_title": "Il server OnionShare è inattivo", - "systray_close_server_message": "Un utente ha disattivato il Server", - "systray_page_loaded_title": "Pagina caricata", - "systray_download_page_loaded_message": "Un utente ha caricato la pagina di Download", - "systray_upload_page_loaded_message": "Un utente ha caricato la pagina di Upload", - "gui_uploads": "Storia degli Upload", - "gui_no_uploads": "Nessun Upload ancora", - "gui_clear_history": "Pulisci tutto", - "gui_upload_in_progress": "Upload iniziato {}", - "gui_upload_finished_range": "Upload eseguito {} a {}", - "gui_upload_finished": "Caricato {}", - "gui_download_in_progress": "Download iniziato {}", - "gui_open_folder_error_nautilus": "Impossibile aprire la cartella perché Nautilus non è disponibile. Il file è qui: {}", - "gui_settings_onion_label": "Impostazioni Onion", - "error_cannot_create_data_dir": "Non è possibile creare la cartella dati OnionShare: {}", - "receive_mode_data_dir": "I file inviati a te appariranno in questa cartella: {}", - "gui_settings_data_dir_label": "Salva i file in", - "gui_settings_data_dir_browse_button": "Naviga", - "systray_page_loaded_message": "Indirizzo OnionShare caricato", - "systray_share_started_title": "Condivisione iniziata", - "systray_share_started_message": "Inizio dell'invio dei file a qualcuno", - "systray_share_completed_title": "Condivisione completata", - "systray_share_completed_message": "Completato l'invio dei file", - "systray_share_canceled_title": "Condivisione annullata", - "systray_share_canceled_message": "Qualcuno ha annullato la ricezione dei file", - "systray_receive_started_title": "Inizio ricezione", - "systray_receive_started_message": "Qualcuno ti sta inviando dei file", - "gui_all_modes_history": "Storico", - "gui_all_modes_clear_history": "Pulisci tutto", - "gui_all_modes_transfer_started": "Iniziato {}", - "gui_all_modes_transfer_finished_range": "Trasferito {} - {}", - "gui_all_modes_transfer_finished": "Trasferito {}", - "gui_all_modes_transfer_canceled_range": "Annullato {} - {}", - "gui_all_modes_transfer_canceled": "Annullato {}", - "gui_all_modes_progress_complete": "%p%, {0:s} trascorsi.", - "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_autostop_timer_waiting": "In attesa di finire l'invio", - "gui_receive_mode_no_files": "Nessun file ricevuto ancora", - "gui_receive_mode_autostop_timer_waiting": "In attesa di finire la ricezione", - "gui_stop_server_autostop_timer_tooltip": "Il timer di arresto automatico termina alle {}", - "gui_start_server_autostart_timer_tooltip": "Il timer Auto-start termina alle {}", - "gui_waiting_to_start": "Programmato per avviarsi in {}. Clicca per annullare.", - "gui_settings_autostart_timer_checkbox": "Usa il timer a partenza automatica", - "gui_settings_autostart_timer": "Inizia la condivisione a:", - "gui_server_autostart_timer_expired": "L'ora pianificata è già passata. Si prega di modificarla per iniziare la condivisione.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Il tempo di arresto automatico non può essere uguale o precedente all'ora di avvio automatico. Si prega di modificarlo per iniziare la condivisione.", - "gui_status_indicator_share_scheduled": "In programma…", - "gui_status_indicator_receive_scheduled": "In programma…", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "incorrect_password": "Password errata", - "gui_settings_individual_downloads_label": "Disabilita per consentire il download di file singoli", - "gui_website_url_description": "Chiunque, con questo indirizzo di OnionShare, può visitare il tuo sito web utilizzando il Browser Tor: ", - "gui_mode_website_button": "Pubblica sito web", - "gui_website_mode_no_files": "Nessun sito web condiviso al momento", - "history_requests_tooltip": "{} richieste web", - "gui_settings_csp_header_disabled_option": "Disabilita header dei criteri di sicurezza dei contenuti", - "gui_settings_website_label": "Impostazioni sito web", - "gui_chat_start_server": "Avvia il server della chat", - "mode_settings_advanced_toggle_hide": "Nascondi le impostazioni avanzate", - "mode_settings_advanced_toggle_show": "Mostra impostazioni avanzate", - "gui_tab_name_chat": "Chat", - "gui_tab_name_website": "Sito web", - "gui_tab_name_receive": "Ricevi", - "gui_tab_name_share": "Condividi", - "gui_main_page_chat_button": "Inizia a Chattare", - "gui_main_page_receive_button": "Inizia a Ricevere", - "gui_main_page_share_button": "Inizia a Condividere", - "gui_new_tab_chat_button": "Chatta in modo anonimo", - "gui_new_tab_receive_button": "Ricevi File", - "gui_new_tab_share_button": "Condividi Files", - "gui_new_tab_tooltip": "Apri una nuova scheda", - "gui_new_tab": "Nuova Scheda", - "gui_open_folder_error": "Impossibile aprire la cartella con xdg-open. Il file è qui: {}", - "gui_qr_code_dialog_title": "OnionShare QR Code", - "gui_show_qr_code": "Mostra QR Code", - "gui_receive_flatpak_data_dir": "Dato che hai installato OnionShare usando Flatpak, devi salvare i file nella cartella ~/OnionShare.", - "gui_chat_stop_server": "Arresta il server della chat", - "gui_file_selection_remove_all": "Rimuovi tutto", - "gui_remove": "Rimuovi", - "gui_close_tab_warning_receive_description": "Stai ricevendo dei file. Sei sicuro di voler chiudere questa scheda?", - "gui_close_tab_warning_share_description": "Stai inviando dei file. Sei sicuro di voler chiudere questa scheda?", - "gui_close_tab_warning_title": "Sei sicuro?", - "gui_new_tab_website_button": "Ospita un sito web", - "gui_quit_warning_description": "La condivisione è attiva in alcune delle tue schede. Uscendo, tutte le tue schede verranno chiuse. Sei sicuro di voler uscire?", - "gui_quit_warning_title": "Sei sicuro?", - "gui_close_tab_warning_close": "Chiudi", - "gui_close_tab_warning_website_description": "Stai ospitando un sito web. Sei sicuro di voler chiudere questa scheda?", - "mode_settings_website_disable_csp_checkbox": "Non inviare l'intestazione della Politica sulla Sicurezza dei Contenuti (consente al sito web di utilizzare risorse di terze parti)", - "mode_settings_receive_data_dir_browse_button": "Naviga", - "mode_settings_autostop_timer_checkbox": "Interrompere il servizio onion all'ora pianificata", - "mode_settings_autostart_timer_checkbox": "Avviare il servizio onion all'ora pianificata", - "mode_settings_persistent_checkbox": "Salva questa scheda e aprirla automaticamente quando apro OnionShare", - "gui_quit_warning_cancel": "Annulla", - "gui_close_tab_warning_cancel": "Annulla", - "gui_close_tab_warning_persistent_description": "Questa scheda è persistente. Se lo chiudi perderai l'indirizzo onion che sta usando. Sei sicuro di volerlo chiudere?", - "gui_main_page_website_button": "Inizia a Ospitare", - "gui_chat_url_description": "Chiunque con questo indirizzo OnionShare può unirsi a questa chat room utilizzando Tor Browser:", - "mode_settings_receive_data_dir_label": "Salva i file in", - "mode_settings_share_autostop_sharing_checkbox": "Interrompi la condivisione dopo che i file sono stati inviati (deseleziona per consentire lo scaricamento di singoli file)", - "mode_settings_legacy_checkbox": "Usa un indirizzo legacy (servizio onion v2, non consigliato)", - "mode_settings_public_checkbox": "Non usare una password", - "gui_rendezvous_cleanup_quit_early": "Chiudi in anticipo", - "gui_rendezvous_cleanup": "In attesa che i circuiti Tor si chiudano per assicurarsi che i file siano stati trasferiti con successo.\n\nQuesto potrebbe richiedere alcuni minuti.", - "error_port_not_available": "Porta OnionShare non disponibile", - "gui_color_mode_changed_notice": "Riavvia OnionShare per applicare la nuova modalità colore." -} diff --git a/desktop/src/onionshare/resources/locale/ja.json b/desktop/src/onionshare/resources/locale/ja.json deleted file mode 100644 index 5290ea63..00000000 --- a/desktop/src/onionshare/resources/locale/ja.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "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_autostop_timer": "自動タイマーがタイムアウトしたため停止されました", - "closing_automatically": "転送が完了されたため停止されました", - "timeout_download_still_running": "ダウンロード完了待ち", - "timeout_upload_still_running": "アップロード完了待ち", - "large_filesize": "注意:大きいなファイルを送信するに数時間かかるかもしれない", - "systray_menu_exit": "終了", - "systray_download_started_title": "OnionShareダウンロードは開始されました", - "systray_download_started_message": "ユーザーがダウンロードを開始しました", - "systray_download_completed_title": "OnionShareダウンロード完了", - "systray_download_completed_message": "ユーザーがダウンロードし終えました", - "systray_download_canceled_title": "OnionShareダウンロードは中止されました", - "systray_download_canceled_message": "ユーザーがダウンロードを中止しました", - "systray_upload_started_title": "OnionShareアップロードは開始されました", - "systray_upload_started_message": "ユーザーがファイルをアップロードし始めました", - "help_local_only": "Torを使わない(開発利用のみ)", - "help_stay_open": "ファイルが送信された後に共有し続けます", - "help_autostop_timer": "数秒後に共有が停止されます", - "help_stealth": "クライアント認証を使う(上級者向け)", - "help_receive": "共有を送信する代わりに受信する", - "help_verbose": "OnionShareのエラーを標準出力に、Webのエラーをディスクに記録する", - "help_filename": "共有するファイルとフォルダの一覧", - "help_config": "カスタムJSON設定ファイルの位置(任意)", - "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_autostop_timer": "共有を停止中です({})", - "gui_share_stop_server_autostop_timer_tooltip": "{}に自動停止します", - "gui_receive_start_server": "受信モードを開始", - "gui_receive_stop_server": "受信モードを停止", - "gui_receive_stop_server_autostop_timer": "受信モードを停止(残り {} 秒)", - "gui_receive_stop_server_autostop_timer_tooltip": "{}に自動停止します", - "gui_copy_url": "アドレスをコピー", - "gui_downloads": "ダウンロード履歴", - "gui_no_downloads": "まだダウンロードがありません", - "gui_canceled": "キャンセルされました", - "gui_copied_url_title": "OnionShareのアドレスをコピーしました", - "gui_copied_url": "OnionShareのアドレスをクリップボードへコピーしました", - "gui_please_wait": "実行中… クリックでキャンセルします。", - "gui_download_upload_progress_complete": "%p%、 経過時間 ({0:s})。", - "gui_download_upload_progress_starting": "{0:s}, %p% (計算中)", - "gui_download_upload_progress_eta": "{0:s} 終了予定:{1:s}、%p%", - "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": "キャンセル", - "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_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_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と自動設定してみる", - "gui_settings_connection_type_control_port_option": "コントロールポートを使用して接続する", - "gui_settings_connection_type_socket_file_option": "ソケットファイルを使用して接続する", - "gui_settings_connection_type_test_button": "Torへの接続をテストする", - "gui_settings_control_port_label": "コントロールポート", - "gui_settings_socket_file_label": "ソケットファイル", - "gui_settings_socks_label": "SOCKSポート", - "gui_settings_authenticate_label": "Tor認証の設定", - "gui_settings_authenticate_no_auth_option": "認証なし、それともクッキー認証", - "gui_settings_authenticate_password_option": "パスワード", - "gui_settings_password_label": "パスワード", - "gui_settings_tor_bridges": "Torブリッジを利用して接続しますか?", - "gui_settings_tor_bridges_no_bridges_radio_option": "ブリッジを使用しない", - "gui_settings_tor_bridges_obfs4_radio_option": "組み込みのobs4 pluggable transportを使用する", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "組み込みのobs4 pluggable transportを使用する(obsf4proxy必要)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "組み込みのmeek_lite (Azure) pluggable transportを使用する", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "組み込みのmeek_lite (Azure) pluggable transportを使用する(obsf4proxy必要)", - "gui_settings_meek_lite_expensive_warning": "警告:meek-azureブリッジはTor Projectにとって維持費がかさむ

直接にTorと接続できない場合、あるいはobsf4ブリッジや他のブリッジが使用できない場合のみに使って下さい。", - "gui_settings_tor_bridges_custom_radio_option": "カスタムブリッジを使用する", - "gui_settings_tor_bridges_custom_label": "https://bridges.torproject.orgからブリッジを入手できます", - "gui_settings_tor_bridges_invalid": "全ての追加したブリッジは機能しませんでした。再確認して、あるいは他のを追加して下さい。", - "gui_settings_button_save": "保存", - "gui_settings_button_cancel": "キャンセル", - "gui_settings_button_help": "ヘルプ", - "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コントローラーと接続できません。", - "settings_error_socket_file": "ソケットファイル{}を使用してTorコントローラーと接続できません。", - "settings_error_auth": "{}:{}と接続できましたが、認証ができません。これは実際にTorコントローラーですか?", - "settings_error_missing_password": "Torコントローラーと接続できましたが、認証にはパスワードが必要です。", - "settings_error_unreadable_cookie_file": "Torコントローラーと接続できましたが、パスワードが診違っているあるいはクッキーファイルの読み出し許可がないかもしれない。", - "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クライアント認証をサポートする:{}\nnext-gen .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": "新バージョンのチェックは失敗:多分Torと接続していない、あるいはOnionShare公式サイトはダウンかもしれない?", - "update_error_invalid_latest_version": "新バージョンチェック失敗: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": "設定でTorとの接続方法を変更してみて下さい。", - "gui_tor_connection_canceled": "Torと接続できませんでした。\n\nインターネット接続を確認してから、OnionShareを再開してTorとの接続を設定して下さい。", - "gui_tor_connection_lost": "Torから切断されました。", - "gui_server_started_after_autostop_timer": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。再びファイル共有をして下さい。", - "gui_server_autostop_timer_expired": "自動停止タイマーはすでにタイムアウトしています。共有し始めるにはタイマーを調整して下さい。", - "share_via_onionshare": "OnionShareで共有する", - "gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい", - "gui_save_private_key_checkbox": "永続的アドレスを使用する", - "gui_share_url_description": "このOnionShareアドレスと秘密鍵を持つ限り誰でもTor Browserを利用してこのファイルをダウンロードできます", - "gui_receive_url_description": "このOnionShareアドレスと秘密鍵を持つ限り誰でもTor Browserを利用してこのPCにファイルをアップロードできます", - "gui_url_label_persistent": "このファイル共有には自動停止はありません。

その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)", - "gui_url_label_stay_open": "このファイル共有には自動停止はありません。", - "gui_url_label_onetime": "このファイル共有は最初の完了後に停止されます。", - "gui_url_label_onetime_and_persistent": "このファイル共有には自動停止はありません。

その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)", - "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": "{} 完了", - "info_in_progress_uploads_tooltip": "{} 進行中のアップロード", - "info_completed_uploads_tooltip": "{} 完了のアップロード", - "error_cannot_create_downloads_dir": "受信モードフォルダを作成できなかった: {}", - "receive_mode_downloads_dir": "受信されるファイルはこのフォルダに保存されます: {}", - "receive_mode_warning": "警告:受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。", - "gui_receive_mode_warning": "受信モードでは他の人があなたのPCへファイルをアップロードできるようにします。

悪意ある人物によってアップロードされたファイルを開いたら、PCが乗っ取られる可能性があります。内容を完全に理解しているファイルか、信頼できる人物がアップロードしたファイル以外は開かないでください。", - "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": "公開モード", - "systray_close_server_title": "OnionShareサーバーは閉鎖されました", - "systray_close_server_message": "ユーザーがサーバーを閉鎖しました", - "systray_page_loaded_title": "ページはロードされました", - "systray_download_page_loaded_message": "ユーザーがダウンロードページをロードしました", - "systray_upload_page_loaded_message": "ユーザーがアップロードページをロードしました", - "gui_uploads": "アップロード履歴", - "gui_no_uploads": "アップロードはまだありません", - "gui_clear_history": "全てをクリアする", - "gui_upload_in_progress": "アップロード開始しました {}", - "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を再起動して下さい。", - "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_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": "%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": "送信されたファイルがまだありません", - "gui_share_mode_autostop_timer_waiting": "送信完了を待機しています", - "gui_receive_mode_no_files": "受信されたファイルがまだありません", - "gui_receive_mode_autostop_timer_waiting": "受信完了を待機しています", - "gui_settings_onion_label": "Onion設定", - "gui_stop_server_autostop_timer_tooltip": "自動停止タイマーは {} に終了します", - "gui_start_server_autostart_timer_tooltip": "自動スタートタイマーは {} に終了します", - "gui_waiting_to_start": "{} 後に開始予定。クリックして中止する。", - "gui_settings_autostart_timer_checkbox": "自動スタートタイマーを利用する", - "gui_settings_autostart_timer": "共有を実行する時間:", - "gui_server_autostart_timer_expired": "予定した時間がすでに終了しました。共有し始めるには、タイマーを調整して下さい。", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自動停止タイマーを自動スタートタイマーより後に設定しなければなりません。共有し始めるには、タイマーを調整して下さい。", - "gui_status_indicator_share_scheduled": "予定されました…", - "gui_status_indicator_receive_scheduled": "予定されました…", - "days_first_letter": "日", - "hours_first_letter": "時間", - "minutes_first_letter": "分", - "seconds_first_letter": "秒", - "gui_website_url_description": "誰でも このOnionShareアドレスと秘密鍵を知る限り、Tor Browserで サイトを訪れることができます: ", - "gui_mode_website_button": "ウェブサイトを発行する", - "gui_website_mode_no_files": "共有されたウェブサイトは未だありません", - "incorrect_password": "不正なパスワード", - "gui_settings_individual_downloads_label": "個別ファイルのダウンロード許可を与えるのにチェックを外す", - "history_requests_tooltip": "{} ウェブリクエスト", - "gui_settings_csp_header_disabled_option": "コンテンツセキュリティポリシーヘッダーを無効にする", - "gui_settings_website_label": "ウェブサイト設定", - "mode_settings_website_disable_csp_checkbox": "デフォルトのコンテンツセキュリティポリシーヘッダーを送らない(ウェブサイトにはサードパーティーのリソースを可能にします)", - "mode_settings_receive_data_dir_browse_button": "閲覧", - "mode_settings_receive_data_dir_label": "保存するファイルの位置", - "mode_settings_share_autostop_sharing_checkbox": "ファイル送信が終了したら共有を停止(個別ファイルのダウンロードを許可するにはチェックマークを消す)", - "mode_settings_legacy_checkbox": "レガシーアドレスを利用する(v2 onionサービス、非推奨)", - "mode_settings_autostop_timer_checkbox": "指定の日時にonionサービスを停止する", - "mode_settings_autostart_timer_checkbox": "指定の日時にonionサービスを起動する", - "mode_settings_public_checkbox": "これは公開OnionShareサービス(秘密鍵は無効されます)", - "mode_settings_persistent_checkbox": "このタブを保存し、OnionShareがスタートアップの時に自動的に開く", - "mode_settings_advanced_toggle_hide": "詳細設定を非表示", - "mode_settings_advanced_toggle_show": "詳細設定を表示", - "gui_quit_warning_cancel": "キャンセル", - "gui_quit_warning_description": "開いてるタブにはアクティブな共有はあります。終了すると、全てのタブは閉じられます。本当に終了してもよろしいですか?", - "gui_quit_warning_title": "本当によろしいですか?", - "gui_close_tab_warning_cancel": "キャンセル", - "gui_close_tab_warning_close": "閉じる", - "gui_close_tab_warning_website_description": "ウェブサイトをホストする中です。本当に閉じてもよろしいですか?", - "gui_close_tab_warning_receive_description": "ファイルはまだ受信中です。本当に閉じてもよろしいですか?", - "gui_close_tab_warning_share_description": "ファイルはまだ送信中です。本当に閉じてもよろしいですか?", - "gui_close_tab_warning_persistent_description": "これは永続的タブです。閉じると、利用しているonionアドレスを失う。本当に閉じてもよろしいですか?", - "gui_close_tab_warning_title": "本当によろしいですか?", - "gui_tab_name_chat": "チャット", - "gui_tab_name_website": "ウェブサイト", - "gui_tab_name_receive": "受信", - "gui_tab_name_share": "共有", - "gui_main_page_chat_button": "チャットを開始", - "gui_main_page_website_button": "ホストを開始", - "gui_main_page_receive_button": "受信を開始", - "gui_main_page_share_button": "共有を開始", - "gui_new_tab_chat_button": "匿名でチャットする", - "gui_new_tab_website_button": "サイトをホスト", - "gui_new_tab_receive_button": "ファイルを受信", - "gui_new_tab_share_button": "ファイルを共有", - "gui_new_tab_tooltip": "新しいタブを開く", - "gui_new_tab": "新しいタブ", - "gui_open_folder_error": "xdg-openでフォルダー開くの失敗。ファイルはここにあります: {}", - "gui_qr_code_description": "より簡単にOnionShareアドレスを共有するため、スマホのカメラなどのQRリーダーでこのコードをスキャンして下さい。", - "gui_qr_code_dialog_title": "OnionShareのQRコード", - "gui_show_qr_code": "QRコードを表示する", - "gui_receive_flatpak_data_dir": "FlatpakでOnionShareをインストールしたため、ファイルを~/OnionShareの中のフォルダーに保存しなければなりません。", - "gui_chat_stop_server": "チャットサーバーを停止", - "gui_chat_start_server": "チャットサーバーを始動", - "gui_file_selection_remove_all": "全てを削除", - "gui_remove": "削除", - "error_port_not_available": "OnionShareポートは利用可能ではありません", - "gui_rendezvous_cleanup_quit_early": "早めに終了", - "gui_rendezvous_cleanup": "ファイルは成功に転送されたか確実にするために、Torサーキットの切断を待機しています。\n\n数分かかります。", - "gui_chat_url_description": "このOnionShareアドレスと秘密鍵を持つ限り、誰でもTor Browserを利用してチャットルームに入れます", - "history_receive_read_message_button": "既読メッセージ", - "mode_settings_receive_webhook_url_checkbox": "通知webhookを利用する", - "mode_settings_receive_disable_files_checkbox": "ファイルのアップロードを無効にする", - "mode_settings_receive_disable_text_checkbox": "テキストの提出を無効にする", - "mode_settings_title_label": "カスタムタイトル", - "gui_color_mode_changed_notice": "新しいカラーモードを適用するのに、OnionShareを再起動して下さい。", - "gui_settings_theme_dark": "ダーク", - "gui_settings_theme_light": "ライト", - "gui_settings_theme_auto": "自動", - "gui_settings_theme_label": "テーマ", - "gui_status_indicator_chat_started": "チャット中", - "gui_status_indicator_chat_scheduled": "予定されています…", - "gui_status_indicator_chat_working": "起動中…", - "gui_status_indicator_chat_stopped": "チャット準備完了", - "gui_client_auth_instructions": "次に、OnionShareサービスにアクセスを許可する秘密鍵を送る:", - "gui_url_instructions_public_mode": "以下に表示されるOnionShareアドレスを送る:", - "gui_url_instructions": "まずは、以下に表示されるOnionShareアドレスを送る:", - "gui_chat_url_public_description": "このOnionShareアドレスを持つ限り、誰でもTor Browserを利用してチャットルームに入れます", - "gui_receive_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのPCにファイルをアップロードできます", - "gui_website_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのサイトを訪れる", - "gui_share_url_public_description": "このOnionShareアドレスを持つ限り誰でもTor Browserを利用してこのファイルをダウンロードできます", - "gui_server_doesnt_support_stealth": "申し訳ない、このTorバージョンではステルス(クライアント認証)がサポートされていません。より新しいTorバージョンを使うか、プライバシーの必要なければ公開モードを使って下さい。", - "gui_please_wait_no_button": "起動中…", - "gui_hide": "非表示", - "gui_reveal": "表示", - "gui_qr_label_auth_string_title": "秘密鍵", - "gui_qr_label_url_title": "OnionShareアドレス", - "gui_copied_client_auth": "秘密鍵をクリップボードにコピーしました", - "gui_copied_client_auth_title": "秘密鍵をコピーしました", - "gui_copy_client_auth": "秘密鍵をコピーする", - "gui_tor_settings_window_title": "Tor設定", - "gui_settings_controller_extras_label": "Tor設定", - "gui_settings_bridge_use_checkbox": "ブリッジを利用する", - "gui_settings_bridge_radio_builtin": "組み込みブリッジを選択", - "gui_settings_bridge_moat_radio_option": "torproject.orgからブリッジを要求する", - "gui_settings_bridge_custom_radio_option": "信頼できる筋からもらったブリッジを提供する", - "gui_settings_bridge_custom_placeholder": "「アドレス:ポート番号」を入力する(行内ごと1つ)", - "gui_settings_moat_bridges_invalid": "まだtorproject.orgからブリッジを要求していません。", - "gui_settings_version_label": "OnionShare {}を使っています", - "gui_settings_help_label": "サポートが必要ですか? docs.onionshare.orgを訪れて下さい", - "mode_settings_website_custom_csp_checkbox": "カスタムなコンテンツセキュリティポリシーヘッダーを送る", - "moat_contact_label": "BridgeDBと接続中…", - "moat_captcha_label": "ブリッジを要求するのにCAPTCHAを解決して下さい。", - "moat_captcha_placeholder": "イメージにある文字を入力して下さい", - "moat_captcha_submit": "提出する", - "moat_captcha_reload": "リロード", - "moat_bridgedb_error": "BridgeDB接続にエラーが生じました。", - "moat_captcha_error": "間違った解答です。もう一度試して下さい。", - "moat_solution_empty_error": "イメージからの文字を入力しなければなりません", - "mode_tor_not_connected_label": "OnionShareはTorネットワークと接続されていません", - "gui_dragdrop_sandbox_flatpak": "Flatpakサンドボックスの安全性を確保するため、ドラッグ・アンド・ドロップは無効されました。ファイルを探すのに「ファイルを追加」、「フォルダを追加」ボタンを使って下さい。", - "gui_settings_tor_bridges_label": "Torがブロックされる場合、ブリッジはTorネットワークにアクセスするのに役立ちます。一番効果的なブリッジは場所によります。", - "gui_settings_bridge_none_radio_option": "ブリッジを利用しない", - "gui_settings_bridge_moat_button": "新しいブリッジを要求する", - "gui_settings_stop_active_tabs_label": "タブに実行しているサービスはまだあります。\nTor設定を変更するには、全てのサービスを停止する必要があります。" -} diff --git a/desktop/src/onionshare/resources/locale/ka.json b/desktop/src/onionshare/resources/locale/ka.json deleted file mode 100644 index 87d5c0c5..00000000 --- a/desktop/src/onionshare/resources/locale/ka.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "large_filesize": "", - "systray_menu_exit": "პროგრამის დატოვება", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "არჩევა", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_settings_data_dir_browse_button": "არჩევა", - "gui_all_modes_history": "" -} diff --git a/desktop/src/onionshare/resources/locale/km.json b/desktop/src/onionshare/resources/locale/km.json deleted file mode 100644 index 11b3cdb3..00000000 --- a/desktop/src/onionshare/resources/locale/km.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "preparing_files": "", - "not_a_readable_file": "", - "no_available_port": "", - "other_page_loaded": "", - "close_on_autostop_timer": "", - "closing_automatically": "", - "large_filesize": "", - "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_autostop_timer": "", - "gui_stop_server_autostop_timer_tooltip": "", - "gui_start_server_autostart_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_copy_url": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_waiting_to_start": "", - "gui_please_wait": "", - "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", - "gui_quit_warning_quit": "", - "gui_quit_warning_dont_quit": "", - "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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "gui_settings_autostart_timer_checkbox": "", - "gui_settings_autostart_timer": "", - "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": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "gui_server_autostart_timer_expired": "", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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_scheduled": "", - "gui_status_indicator_share_started": "", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", - "gui_status_indicator_receive_scheduled": "", - "gui_status_indicator_receive_started": "", - "gui_file_info": "", - "gui_file_info_single": "", - "history_in_progress_tooltip": "", - "history_completed_tooltip": "", - "error_cannot_create_data_dir": "", - "gui_receive_mode_warning": "", - "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_autostop_timer_waiting": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "", - "receive_mode_upload_starting": "", - "days_first_letter": "", - "hours_first_letter": "", - "minutes_first_letter": "", - "seconds_first_letter": "" -} diff --git a/desktop/src/onionshare/resources/locale/ko.json b/desktop/src/onionshare/resources/locale/ko.json deleted file mode 100644 index 76c0c814..00000000 --- a/desktop/src/onionshare/resources/locale/ko.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "config_onion_service": "어니언 서비스를 포트{0:d} 에서 설정하기.", - "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": "어니언 서비스를 시작하기 위한 사용 가능한 포트를 찾을수 없었습니다", - "other_page_loaded": "주소가 로드되다", - "close_on_autostop_timer": "자동멈춤 타이머가 끝났기 때문에 정지되다", - "closing_automatically": "다운로드가 완료되었기 때문에 정지되다", - "timeout_download_still_running": "다운로드가 완료되기를 기다리는 중입니다", - "timeout_upload_still_running": "업로드가 완료되기를 기다리는 중입니다", - "large_filesize": "경고: 대용량의 자료를 보내는것은 오래 걸릴수 있습니다", - "systray_menu_exit": "종료", - "systray_download_started_title": "어니언쉐어 다운로드가 시작됨", - "systray_download_started_message": "사용자가 당신의 파일들을 다운로딩 하기 시작했습니다", - "systray_download_completed_title": "어니언쉐어 다운로드가 완료됨", - "systray_download_completed_message": "사용자가 당신의 파일들을 다운로딩 하는것을 완료했습니다", - "systray_download_canceled_title": "어니언쉐어 다운로드가 취소됨", - "systray_download_canceled_message": "사용자가 다운로드를 취소했습니다", - "systray_upload_started_title": "어니언쉐어 업로드가 시작됨", - "systray_upload_started_message": "사용자가 파일들을 당신의 컴퓨터로 업로딩 하는것을 시작했습니다", - "help_local_only": "Tor를 사용하지 마시오 (오직 개발자용)", - "help_stay_open": "첫 다운로드 후 계속 공유하시오", - "help_autostop_timer": "정해진 초단위의 시간이 지난후 공유하는 것을 멈추시오", - "help_stealth": "고객 허가를 사용 (고급 수준의)", - "help_receive": "그것들을 보내는것 대신 공유를 받으시오", - "help_verbose": "어니언쉐어 에러들은 표준 출력 장치로 접속하고, 웹 에러들은 디스크로 접속 ", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "취소 된", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "취소", - "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_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_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_button_save": "저장", - "gui_settings_button_cancel": "취소", - "gui_settings_button_help": "도움말", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "보기", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "모두 삭제", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "선호 언어", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/lg.json b/desktop/src/onionshare/resources/locale/lg.json deleted file mode 100644 index 13e70fdf..00000000 --- a/desktop/src/onionshare/resources/locale/lg.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/lt.json b/desktop/src/onionshare/resources/locale/lt.json deleted file mode 100644 index 2436efcd..00000000 --- a/desktop/src/onionshare/resources/locale/lt.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "preparing_files": "Glaudinami failai.", - "not_a_readable_file": "{0:s} nėra perskaitomas failas.", - "no_available_port": "", - "other_page_loaded": "Adresas įkeltas", - "incorrect_password": "Neteisingas slaptažodis", - "close_on_autostop_timer": "Sustabdyta, nes baigėsi automatinio sustabdymo laikmatis", - "closing_automatically": "Sustabdyta, nes perdavimas yra užbaigtas", - "large_filesize": "Įspėjimas: Didelio viešinio siuntimas gali užtrukti ilgą laiką (kelias valandas)", - "gui_drag_and_drop": "Norėdami bendrinti, tempkite failus ir aplankus čia", - "gui_add": "Pridėti", - "gui_add_files": "Pridėti failus", - "gui_add_folder": "Pridėti aplanką", - "gui_delete": "Ištrinti", - "gui_choose_items": "Pasirinkti", - "gui_share_start_server": "Pradėti bendrinti", - "gui_share_stop_server": "Nustoti bendrinti", - "gui_share_stop_server_autostop_timer": "Nustoti bendrinti ({})", - "gui_stop_server_autostop_timer_tooltip": "Automatinio sustabdymo laikmatis baigiasi {}", - "gui_start_server_autostart_timer_tooltip": "Automatinio paleidimo laikmatis baigiasi {}", - "gui_receive_start_server": "Įjungti gavimo veikseną", - "gui_receive_stop_server": "Išjungti gavimo veikseną", - "gui_receive_stop_server_autostop_timer": "Išjungti gavimo veikseną (Liko {})", - "gui_copy_url": "Kopijuoti adresą", - "gui_copy_hidservauth": "Kopijuoti HidServAuth", - "gui_canceled": "Atsisakyta", - "gui_copied_url_title": "OnionShare adresas nukopijuotas", - "gui_copied_url": "OnionShare adresas nukopijuotas į iškarpinę", - "gui_copied_hidservauth_title": "HidServAuth nukopijuota", - "gui_copied_hidservauth": "HidServAuth eilutė nukopijuota į iškarpinę", - "gui_waiting_to_start": "Planuojama pradėti {}. Spustelėkite , jei norite atšaukti.", - "gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.", - "zip_progress_bar_format": "Glaudinama: %p%", - "error_stealth_not_supported": "", - "error_ephemeral_not_supported": "", - "gui_settings_window_title": "Nustatymai", - "gui_settings_whats_this": "Kas tai?", - "gui_settings_stealth_option": "", - "gui_settings_stealth_hidservauth_string": "", - "gui_settings_autoupdate_label": "Tikrinti, ar yra nauja versija", - "gui_settings_autoupdate_option": "Pranešti, kai bus prieinama nauja versija", - "gui_settings_autoupdate_timestamp": "Paskutinį kartą tikrinta: {}", - "gui_settings_autoupdate_timestamp_never": "Niekada", - "gui_settings_autoupdate_check_button": "Tikrinti, ar yra nauja versija", - "gui_settings_general_label": "Bendri nustatymai", - "gui_settings_onion_label": "", - "gui_settings_sharing_label": "", - "gui_settings_close_after_first_download_option": "", - "gui_settings_csp_header_disabled_option": "", - "gui_settings_individual_downloads_label": "", - "gui_settings_connection_type_label": "Kaip OnionShare turėtų jungtis prie Tor?", - "gui_settings_connection_type_bundled_option": "Naudokite „Tor“ versiją, integruotą į „OnionShare“", - "gui_settings_connection_type_automatic_option": "Bandyti automatiškai konfigūruoti naudojant „Tor“ naršyklę", - "gui_settings_connection_type_control_port_option": "Prisijunkti naudojant valdymo prievadą", - "gui_settings_connection_type_socket_file_option": "Prisijungti naudojant socket failą", - "gui_settings_connection_type_test_button": "Tikrinti ryšį su „Tor“", - "gui_settings_control_port_label": "Valdymo prievadas", - "gui_settings_socket_file_label": "Socket failas", - "gui_settings_socks_label": "SOCKS prievadas", - "gui_settings_authenticate_label": "Tor autentifikavimo nustatymai", - "gui_settings_authenticate_no_auth_option": "Jokio autentifikavimo ar slapukų autentifikavimo", - "gui_settings_authenticate_password_option": "Slaptažodis", - "gui_settings_password_label": "Slaptažodis", - "gui_settings_tor_bridges": "„Tor“ tilto palaikymas", - "gui_settings_tor_bridges_no_bridges_radio_option": "Nenaudoti tiltų", - "gui_settings_tor_bridges_obfs4_radio_option": "Naudoti integruotą obfs4 prijungiamą transportą", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Naudoti integruotą obfs4 prijungiamą transportą (reikalingas obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus (reikalingas obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Įspėjimas:

Meek_lite tiltai labai brangiai kainuoja „Tor“ projektui.

Jais naudokitės tik tuo atveju, jei negalite prisijungti prie „Tor“ tiesiogiai, per obfs4 transportą ar kitus įprastus tiltus.", - "gui_settings_tor_bridges_custom_radio_option": "Naudoti tinkintus tinklų tiltus", - "gui_settings_tor_bridges_custom_label": "Galite gauti tinklų tiltus iš https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nei vienas iš jūsų pridėtų tinklų tiltų neveikia.\nPatikrinkite juos dar kartą arba pridėkite kitus.", - "gui_settings_button_save": "Įrašyti", - "gui_settings_button_cancel": "Atsisakyti", - "gui_settings_button_help": "Žinynas", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "gui_settings_autostart_timer_checkbox": "", - "gui_settings_autostart_timer": "", - "settings_error_unknown": "Nepavyksta prisijungti prie „Tor“ valdiklio, nes jūsų nustatymai nustatyti nesuprantamai.", - "settings_error_automatic": "Nepavyko prisijungti prie „Tor“ valdiklio. Ar „Tor“ naršyklė (prieinama torproject.org) veikia fone?", - "settings_error_socket_port": "Nepavyksta prisijungti prie „Tor“ valdiklio adresu {}:{}.", - "settings_error_socket_file": "Negalima prisijungti prie „Tor“ valdiklio naudojant lizdo failą {}.", - "settings_error_auth": "Prisijungta prie {}:{}, bet negalima patvirtinti autentiškumo. Galbūt tai ne „Tor“ valdiklis?", - "settings_error_missing_password": "Prisijungta prie „Tor“ valdiklio, tačiau norint jį autentifikuoti reikia slaptažodžio.", - "settings_error_unreadable_cookie_file": "Prisijungta prie „Tor“ valdiklio, bet slaptažodis gali būti klaidingas arba jūsų naudotojui neleidžiama skaityti slapukų failo.", - "settings_error_bundled_tor_not_supported": "Naudojant „Tor“ versiją, kuri pateikiama kartu su \"OnionShare\", \"Windows\" arba \"macOS\" sistemose ji neveiks kūrėjo režime.", - "settings_error_bundled_tor_timeout": "Per ilgai trunka prisijungimas prie „Tor“. Galbūt nesate prisijungę prie interneto arba turite netikslų sistemos laikrodį?", - "settings_error_bundled_tor_broken": "OnionShare nepavyko prisijungti prie Tor:\n{}", - "settings_test_success": "Prisijungta prie „Tor“ valdiklio.\n\n„Tor“ versija: {}\nPalaiko efemerines onion paslaugas: {}.\nPalaiko kliento autentifikavimą: {}.\nPalaiko naujos kartos .onion adresus: {}.", - "error_tor_protocol_error": "Įvyko „Tor“ klaida: {}", - "error_tor_protocol_error_unknown": "", - "connecting_to_tor": "Jungiamasi prie Tor tinklo", - "update_available": "Išleistas naujas „OnionShare“. Paspauskite čia, kad jį gautumėte.

Jūs naudojate {}, o naujausia versija yra {}.", - "update_error_invalid_latest_version": "Nepavyko patikrinti naujos versijos: „OnionShare“ svetainė sako, kad naujausia versija yra neatpažįstama „{}“…", - "update_error_check_error": "Nepavyko patikrinti naujos versijos: Galbūt nesate prisijungę prie „Tor“ arba „OnionShare“ svetainė neveikia?", - "update_not_available": "Jūs naudojate naujausią OnionShare versiją.", - "gui_tor_connection_ask": "Atidarykite nustatymus, kad sutvarkytumėte ryšį su „Tor“?", - "gui_tor_connection_ask_open_settings": "Taip", - "gui_tor_connection_ask_quit": "Išeiti", - "gui_tor_connection_error_settings": "Pabandykite nustatymuose pakeisti tai, kaip OnionShare jungiasi prie Tor tinklo.", - "gui_tor_connection_canceled": "Nepavyko prisijungti prie Tor.\n\nĮsitikinkite, kad esate prisijungę prie interneto, o tuomet iš naujo atverkite OnionShare ir nustatykite prisijungimą prie Tor.", - "gui_tor_connection_lost": "Atsijungta nuo Tor.", - "gui_server_started_after_autostop_timer": "Automatinio sustabdymo laikmatis baigėsi prieš paleidžiant serverį. Prašome sukurti naują bendrinimą.", - "gui_server_autostop_timer_expired": "Automatinio sustabdymo laikmatis jau baigėsi. Sureguliuokite jį, kad pradėtumėte dalintis.", - "gui_server_autostart_timer_expired": "Numatytas laikas jau praėjo. Pakoreguokite jį, kad galėtumėte pradėti dalintis.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatinio sustabdymo laikas negali būti toks pat arba ankstesnis už automatinio paleidimo laiką. Sureguliuokite jį, kad galėtumėte pradėti dalytis.", - "share_via_onionshare": "Bendrinti per OnionShare", - "gui_connect_to_tor_for_onion_settings": "", - "gui_save_private_key_checkbox": "", - "gui_share_url_description": "Visi, turintys šį OnionShare adresą ir privatųjį raktą gali atsisiųsti jūsų failus, naudodamiesi Tor Naršykle: ", - "gui_website_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali apsilankyti jūsų svetainėje naudodamas „Tor“ naršyklę: ", - "gui_receive_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali įkelti failus į jūsų kompiuterį naudodamas „Tor“ naršyklę: ", - "gui_url_label_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.

Kiekvienas vėlesnis bendrinimas pakartotinai naudoja adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)", - "gui_url_label_stay_open": "Šis bendrinimas nebus automatiškai sustabdytas.", - "gui_url_label_onetime": "Šis bendrinimas pabaigus bus automatiškai sustabdytas.", - "gui_url_label_onetime_and_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.

Kiekvienas vėlesnis bendrinimas pakartotinai naudos adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)", - "gui_status_indicator_share_stopped": "Parengta dalintis", - "gui_status_indicator_share_working": "Pradedama…", - "gui_status_indicator_share_scheduled": "Suplanuota…", - "gui_status_indicator_share_started": "Dalijimasis", - "gui_status_indicator_receive_stopped": "Parengta gauti", - "gui_status_indicator_receive_working": "Pradedama…", - "gui_status_indicator_receive_scheduled": "Suplanuota…", - "gui_status_indicator_receive_started": "Gaunama", - "gui_file_info": "{} failai, {}", - "gui_file_info_single": "{} failas, {}", - "history_in_progress_tooltip": "{} vykdoma", - "history_completed_tooltip": "{} baigta", - "history_requests_tooltip": "{} žiniatinklio užklausos", - "error_cannot_create_data_dir": "Nepavyko sukurti OnionShare duomenų aplanko: {}", - "gui_receive_mode_warning": "Gavimo režimas leidžia žmonėms nusiųsti failus į jūsų kompiuterį.

Kai kurie failai gali perimti kompiuterio valdymą, jei juos atidarysite. Atidarykite failus tik iš žmonių, kuriais pasitikite, arba jei žinote, ką darote.", - "gui_mode_share_button": "", - "gui_mode_receive_button": "", - "gui_mode_website_button": "", - "gui_settings_receiving_label": "", - "gui_settings_website_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": "Pageidaujama kalba", - "gui_settings_language_changed_notice": "Norėdami pritaikyti naują kalbą, paleiskite OnionShare iš naujo.", - "systray_menu_exit": "Išeiti", - "systray_page_loaded_title": "Puslapis įkeltas", - "systray_page_loaded_message": "OnionShare adresas įkeltas", - "systray_share_started_title": "Pradėtas dalijimasis", - "systray_share_started_message": "Pradedama kažkam siųsti failus", - "systray_share_completed_title": "Dalijimasis baigtas", - "systray_share_completed_message": "Failų siuntimas užbaigtas", - "systray_share_canceled_title": "Dalijimasis atšauktas", - "systray_share_canceled_message": "Kažkas atšaukė jūsų failų gavimą", - "systray_receive_started_title": "Pradėtas gavimas", - "systray_receive_started_message": "Kažkas siunčia jums failus", - "gui_all_modes_history": "Istorija", - "gui_all_modes_clear_history": "Išvalyti viską", - "gui_all_modes_transfer_started": "Pradėta {}", - "gui_all_modes_transfer_finished_range": "Perkelta {} - {}", - "gui_all_modes_transfer_finished": "Perkelta {}", - "gui_all_modes_transfer_canceled_range": "Atšaukta {} - {}", - "gui_all_modes_transfer_canceled": "Atšaukta {}", - "gui_all_modes_progress_complete": "Praėjo %p%, {0:s}.", - "gui_all_modes_progress_starting": "{0:s}, %p% (apskaičiuojama)", - "gui_all_modes_progress_eta": "{0:s}, Preliminarus laikas: {1:s}, %p%", - "gui_share_mode_no_files": "Kol kas nėra išsiųstų failų", - "gui_share_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas siuntimas", - "gui_website_mode_no_files": "Dar nėra bendrinama jokia svetainė", - "gui_receive_mode_no_files": "Kol kas nėra gautų failų", - "gui_receive_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas gavimas", - "days_first_letter": "d", - "hours_first_letter": "val", - "minutes_first_letter": "min", - "seconds_first_letter": "s", - "gui_new_tab": "Nauja kortelė", - "gui_new_tab_tooltip": "Atverti naują kortelę", - "gui_new_tab_share_button": "Dalytis failais", - "gui_new_tab_share_description": "", - "gui_new_tab_receive_button": "Gauti failus", - "gui_new_tab_receive_description": "", - "gui_new_tab_website_button": "Talpinti svetainę", - "gui_new_tab_website_description": "", - "gui_close_tab_warning_title": "Ar tikrai?", - "gui_close_tab_warning_persistent_description": "Šis skirtukas yra nuolatinis. Jei jį uždarysite, prarasite jo naudojamą onion adresą. Ar tikrai norite jį uždaryti?", - "gui_close_tab_warning_share_description": "Šiuo metu siunčiate failus. Ar tikrai norite uždaryti šį skirtuką?", - "gui_close_tab_warning_receive_description": "Šiuo metu gaunate failus. Ar tikrai norite uždaryti šį skirtuką?", - "gui_close_tab_warning_website_description": "Aktyviai talpinate svetainę. Ar tikrai norite uždaryti šį skirtuką?", - "gui_close_tab_warning_close": "Užverti", - "gui_close_tab_warning_cancel": "Atsisakyti", - "gui_quit_warning_title": "Ar tikrai?", - "gui_quit_warning_description": "Kuriuose skirtukuose yra aktyviai dalijamasi . Jei išeisite, visi skirtukai bus uždaryti. Ar tikrai norite baigti?", - "gui_quit_warning_quit": "Išeiti", - "gui_quit_warning_cancel": "Atsisakyti", - "mode_settings_advanced_toggle_show": "Rodyti išplėstinius nustatymus", - "mode_settings_advanced_toggle_hide": "Slėpti išplėstinius nustatymus", - "mode_settings_persistent_checkbox": "Išsaugoti šį skirtuką ir automatiškai jį atidaryti, kai atidarysiu „OnionShare“", - "mode_settings_public_checkbox": "Tai yra vieša „OnionShare“ paslauga (išjungia privatųjį raktą)", - "mode_settings_autostart_timer_checkbox": "Pradėti onion paslaugos paleidimą suplanuotu laiku", - "mode_settings_autostop_timer_checkbox": "Sustabdyti onion paslaugos paleidimą suplanuotu laiku", - "mode_settings_legacy_checkbox": "Naudoti senąjį adresą (nerekomenduojama naudoti v2 onion paslaugos)", - "mode_settings_share_autostop_sharing_checkbox": "Sustabdyti dalijimąsi po to, kai failai buvo išsiųsti (atžymėkite, jei norite leisti atsisiųsti atskirus failus)", - "mode_settings_receive_data_dir_label": "Įrašyti failus į", - "mode_settings_receive_data_dir_browse_button": "Naršyti", - "mode_settings_website_disable_csp_checkbox": "Nesiųskite turinio saugumo politikos antraštės (leidžia jūsų svetainei naudoti trečiųjų šalių išteklius)", - "gui_file_selection_remove_all": "Šalinti visus", - "gui_remove": "Šalinti", - "gui_qr_code_dialog_title": "OnionShare QR kodas", - "gui_show_qr_code": "Rodyti QR kodą", - "gui_open_folder_error": "Nepavyko atverti aplanko naudojant xdg-open. Failas yra čia: {}", - "gui_chat_stop_server": "Sustabdyti pokalbių serverį", - "gui_chat_start_server": "Pradėti pokalbių serverį", - "history_receive_read_message_button": "Skaityti žinutę", - "mode_settings_title_label": "Pasirinktinis pavadinimas", - "gui_main_page_chat_button": "Pradėti pokalbį", - "gui_main_page_receive_button": "Pradėti gavimą", - "gui_main_page_share_button": "Pradėti dalintis", - "gui_new_tab_chat_button": "Kalbėtis anonimiškai", - "gui_status_indicator_chat_scheduled": "Suplanuota…", - "gui_status_indicator_chat_working": "Pradedama…", - "gui_tab_name_chat": "Pokalbiai", - "gui_tab_name_website": "Tinklalapis", - "gui_tab_name_receive": "Gauti", - "gui_tab_name_share": "Dalintis", - "gui_receive_flatpak_data_dir": "Kadangi „OnionShare“ įdiegėte naudodami „Flatpak“, turite išsaugoti failus aplanke, esančiame ~/OnionShare.", - "mode_settings_receive_webhook_url_checkbox": "Naudoti pranešimų webhook", - "gui_main_page_website_button": "Pradėti talpinimą", - "gui_status_indicator_chat_started": "Kalbamasi", - "gui_status_indicator_chat_stopped": "Paruošta pokalbiui", - "gui_color_mode_changed_notice": "Iš naujo paleiskite „OnionShare“, kad būtų pritaikytas naujas spalvų režimas.", - "mode_settings_receive_disable_files_checkbox": "Išjungti failų įkėlimą", - "mode_settings_receive_disable_text_checkbox": "Išjungti teksto pateikimą", - "gui_rendezvous_cleanup": "Laukiama, kol užsidarys „Tor“ grandinės, kad įsitikintume, jog jūsų failai sėkmingai perkelti.\n\nTai gali užtrukti kelias minutes.", - "gui_rendezvous_cleanup_quit_early": "Išeiti anksčiau", - "error_port_not_available": "„OnionShare“ prievadas nepasiekiamas", - "gui_chat_url_description": "Kiekvienas, turintis šį „OnionShare“ adresą ir privatųjį raktą, gali prisijungti prie šio pokalbių kambario naudodamas „Tor“ naršyklę: ", - "gui_settings_theme_dark": "Tamsi", - "gui_settings_theme_light": "Šviesi", - "gui_settings_theme_auto": "Automatinė", - "gui_settings_theme_label": "Tema", - "gui_please_wait_no_button": "Pradedama…", - "gui_client_auth_instructions": "Tuomet nusiųskite privatųjį raktą, kad leistumėte pasiekti jūsų \"OnionShare\" paslaugą:", - "gui_url_instructions_public_mode": "Siųsti toliau nurodytą \"OnionShare\" adresą:", - "gui_url_instructions": "Pirmiausia nusiųskite žemiau nurodytą \"OnionShare\" adresą:", - "gui_chat_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali prisijungti prie šio pokalbių kambario naudodamas „Tor“ naršyklę: ", - "gui_receive_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali įkelti failus į jūsų kompiuterį naudodamas „Tor“ naršyklę: ", - "gui_website_url_public_description": "Kiekvienas , turintis šį „OnionShare“ adresą, gali apsilankyti jūsų svetainėje naudodamas „Tor“ naršyklę : ", - "gui_share_url_public_description": "Kiekvienas, turintis šį „OnionShare“ adresą, gali atsisiųsti jūsų failus naudodamas „Tor“ naršyklę: ", - "gui_server_doesnt_support_stealth": "Atsiprašome, ši „Tor“ versija nepalaiko slapto (kliento autentifikavimo). Pabandykite naudoti naujesnę „Tor“ versiją arba naudokite viešąjį režimą, jei jis neturi būti privatus.", - "gui_hide": "Slėpti", - "gui_reveal": "Parodyti", - "gui_qr_label_auth_string_title": "Privatusis raktas", - "gui_qr_label_url_title": "OnionShare adresas", - "gui_copied_client_auth": "Privatusis raktas nukopijuotas į iškarpinę", - "gui_copied_client_auth_title": "Nukopijuotas privatusis raktas", - "gui_copy_client_auth": "Kopijuoti privatųjį raktą" -} diff --git a/desktop/src/onionshare/resources/locale/mk.json b/desktop/src/onionshare/resources/locale/mk.json deleted file mode 100644 index a264021f..00000000 --- a/desktop/src/onionshare/resources/locale/mk.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "large_filesize": "", - "systray_menu_exit": "Излези", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "Откажи", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "Преглед", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/ms.json b/desktop/src/onionshare/resources/locale/ms.json deleted file mode 100644 index 371c61b7..00000000 --- a/desktop/src/onionshare/resources/locale/ms.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "large_filesize": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "", - "gui_add": "Tambah", - "gui_add_files": "", - "gui_add_folder": "", - "gui_delete": "Padam", - "gui_choose_items": "", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "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_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_please_wait": "", - "version_string": "", - "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", - "gui_quit_warning_quit": "Keluar", - "gui_quit_warning_dont_quit": "Batal", - "zip_progress_bar_format": "", - "error_stealth_not_supported": "", - "error_ephemeral_not_supported": "", - "gui_settings_window_title": "Tetapan", - "gui_settings_whats_this": "", - "gui_settings_stealth_option": "", - "gui_settings_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "Tidak pernah", - "gui_settings_autoupdate_check_button": "", - "gui_settings_general_label": "Tetapan umum", - "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": "Kara laluan", - "gui_settings_password_label": "Kara laluan", - "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": "Simpan", - "gui_settings_button_cancel": "Batal", - "gui_settings_button_help": "", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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": "Ya", - "gui_tor_connection_ask_quit": "Keluar", - "gui_tor_connection_error_settings": "", - "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", - "gui_server_started_after_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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": "Penerimaan", - "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": "Lungsur", - "gui_settings_public_mode_checkbox": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "systray_menu_exit": "Keluar", - "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": "Sejarah", - "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_autostop_timer_waiting": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "" -} diff --git a/desktop/src/onionshare/resources/locale/nb_NO.json b/desktop/src/onionshare/resources/locale/nb_NO.json deleted file mode 100644 index e4f9b317..00000000 --- a/desktop/src/onionshare/resources/locale/nb_NO.json +++ /dev/null @@ -1,321 +0,0 @@ -{ - "give_this_url": "Gi denne adressen til mottakeren:", - "ctrlc_to_stop": "Trykk Ctrl+C for å stoppe tjeneren", - "not_a_file": "{0:s} er ikke en fil.", - "gui_copied_url": "OnionShare-adresse kopiert til utklippstavle", - "other_page_loaded": "Adresse innlastet", - "config_onion_service": "Setter opp løk-tjeneste på port {0:d}.", - "preparing_files": "Pakker filer.", - "give_this_url_stealth": "Gi denne adressen og HidServAuth-linjen til mottakeren:", - "give_this_url_receive": "Gi denne adressen til avsenderen:", - "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øk-tjenesten", - "close_on_autostop_timer": "Stoppet fordi tidsavbruddsuret gikk ut", - "closing_automatically": "Stoppet fordi nedlastingen er ferdig", - "timeout_download_still_running": "Venter på at nedlastingen skal fullføres", - "large_filesize": "Advarsel: Forsendelse av stor deling kan ta flere timer", - "systray_menu_exit": "Avslutt", - "systray_download_started_title": "OnionShare-nedlasting startet", - "systray_download_started_message": "En bruker startet nedlasting av filene dine", - "systray_download_completed_title": "OnionShare-nedlasting fullført", - "systray_download_completed_message": "Brukeren fullførte nedlasting av filene dine", - "systray_download_canceled_title": "OnionShare-nedlasting avbrutt", - "systray_download_canceled_message": "Brukeren avbrøt nedlastingen", - "systray_upload_started_title": "OnionShare-opplasting startet", - "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_autostop_timer": "Stopp deling etter et gitt antall sekunder", - "help_stealth": "Bruk klientidentifisering (avansert)", - "help_receive": "Motta delinger istedenfor å sende dem", - "help_verbose": "Log OnionShare-feil til stdout, og vev-feil til disk", - "help_filename": "Liste over filer eller mapper å dele", - "help_config": "Egendefinert JSON-oppsettsfil (valgfri)", - "gui_drag_and_drop": "Dra og slipp filer og mapper for å starte deling", - "gui_add": "Legg til", - "gui_delete": "Slett", - "gui_choose_items": "Velg", - "gui_share_start_server": "Start deling", - "gui_share_stop_server": "Stopp deling", - "gui_share_stop_server_autostop_timer": "Stopp deling ({})", - "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_autostop_timer": "Stopp mottaksmodus ({} gjenstår)", - "gui_receive_stop_server_autostop_timer_tooltip": "Tidsavbruddsuret går ut {}", - "gui_copy_url": "Kopier nettadresse", - "gui_downloads": "Nedlastingshistorikk", - "gui_no_downloads": "Ingen nedlastinger enda.", - "gui_canceled": "Avbrutt", - "gui_copied_url_title": "Kopierte OnionShare-adressen", - "gui_please_wait": "Starter… Klikk for å avbryte.", - "gui_download_upload_progress_complete": "%p%, {0:s} forløpt.", - "gui_download_upload_progress_starting": "{0:s}, %p% (regner ut)", - "gui_download_upload_progress_eta": "{0:s}, anslått ferdigstilt: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Hold an", - "gui_share_quit_warning": "Filer er i ferd med å bli sendt. Er du sikker på at du ønsker å avslutte OnionShare?", - "gui_receive_quit_warning": "Du har ikke fått alle filene enda. Er du sikker på at du ønsker å avslutte OnionShare?", - "gui_quit_warning_quit": "Avslutt", - "gui_quit_warning_dont_quit": "Avbryt", - "zip_progress_bar_format": "Pakker sammen: %p%", - "error_stealth_not_supported": "For å bruke klientidentitetsbekreftelse, trenger du minst Tor 0.2.9.1-alpha (eller Tor-Browser 6.5) og python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare krever minst både Tor 0.2.7.1 og pything3-stem 1.4.0.", - "gui_settings_window_title": "Innstillinger", - "gui_settings_whats_this": "Hva er dette?", - "gui_settings_stealth_option": "Bruk klientidentifisering", - "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: {}", - "gui_settings_autoupdate_timestamp_never": "Aldri", - "gui_settings_autoupdate_check_button": "Se etter ny versjon", - "gui_settings_general_label": "Generelle innstillinger", - "gui_settings_sharing_label": "Delingsinnstillinger", - "gui_settings_close_after_first_download_option": "Stopp deling etter at filene har blitt sendt", - "gui_settings_connection_type_label": "Hvordan skal OnionShare koble seg til Tor?", - "gui_settings_connection_type_bundled_option": "Bruk Tor-versjonen som er bygget inn i OnionShare", - "gui_settings_connection_type_automatic_option": "Forsøk automatisk oppsett med Tor-nettleseren", - "gui_settings_connection_type_control_port_option": "Koble til ved bruk av kontrollport", - "gui_settings_connection_type_socket_file_option": "Koble til ved bruk av socket-fil", - "gui_settings_connection_type_test_button": "Test tilkobling til Tor", - "gui_settings_control_port_label": "Kontrollport", - "gui_settings_socket_file_label": "Socket-fil", - "gui_settings_socks_label": "SOCKS-port", - "gui_settings_authenticate_label": "Tor-identitetsbekreftelsesinnstillinger", - "gui_settings_authenticate_no_auth_option": "Ingen identitetsbekreftelse, eller cookie-identifiseringsbekreftelse", - "gui_settings_authenticate_password_option": "Passord", - "gui_settings_password_label": "Passord", - "gui_settings_tor_bridges": "Støtte for Tor-bro", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ikke benytt broer", - "gui_settings_tor_bridges_obfs4_radio_option": "Bruk innebygd pluggbare obfs4-transporter", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Bruk innebygd pluggbare obfs4-transporter (krever obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Bruk innebygd pluggbare meek_lite (Azure)-transporter", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bruk innebygd pluggbare meek_lite (Azure) transporter (krever obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Advarsel: Meek-lite-broene er veldig kostbare å kjøre for Tor-prosjektet.

Kun bruk dem hvis direkte tilkobling til Tor ikke virker, via obfs-transporter, eller andre normale broer.", - "gui_settings_tor_bridges_custom_radio_option": "Bruk egendefinerte broer", - "gui_settings_tor_bridges_custom_label": "Du kan hente broer fra https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Ingen av broene du la til virker.\nDobbeltsjekk dem eller legg til andre.", - "gui_settings_button_save": "Lagre", - "gui_settings_button_cancel": "Avbryt", - "gui_settings_button_help": "Hjelp", - "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 Browser (tilgjengelig fra torproject.org) i bakgrunnen?", - "settings_error_socket_port": "Kan ikke koble til Tor-kontroller på {}:{}.", - "settings_error_socket_file": "Kan ikke koble til Tor-kontroller ved bruk av socket-fil {}.", - "settings_error_auth": "Koblet til {}:{}, men kan ikke identitetsbekrefte. Kanskje dette ikke er en Tor-kontroller?", - "settings_error_missing_password": "Tilkoblet til Tor-kontroller, men den krever et passord for å identitetsbekrefte.", - "settings_error_unreadable_cookie_file": "Koblet til Tor-kontrolleren, men passordet kan være galt, eller så har ikke brukeren din tilgang til å lese fra kakefilen.", - "settings_error_bundled_tor_not_supported": "Bruk av Tor-versjonen som kommer med OnionShare fungerer ikke i utviklermodus på Windows eller macOS.", - "settings_error_bundled_tor_timeout": "Det tar for lang tid å koble til Tor. Kanskje du ikke er koblet til Internett, eller har du kanskje en unøyaktig systemklokke?", - "settings_error_bundled_tor_broken": "OnionShare kunne ikke koble til Tor i bakgrunnen:\n{}", - "settings_test_success": "Koblet til Tor-kontrolleren.\n\nTor-versjon: {}.\nStøtter flyktige løk-tjenester: {}.\nStøtter klientidentifisering: {}.\nStøtter nestegenerasjons .onion-adresser: {}.", - "error_tor_protocol_error": "Det oppsto en feil med Tor: {}", - "error_tor_protocol_error_unknown": "Ukjent feil med Tor", - "error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet", - "connecting_to_tor": "Kobler til Tor-nettverket", - "update_available": "Ny OnionShare-versjon tilgjenglig. Klikk her for å laste den ned.

Du bruker {} og nyeste versjon er {}.", - "update_error_check_error": "Kunne ikke sjekke etter ny versjon: Kanskje du ikke er tilknyttet Tor, eller OnionShare-nettsiden er nede?", - "update_error_invalid_latest_version": "Kunne ikke sjekke etter ny versjon: OnionShare-nettsiden melder at siste versjon er det ugjenkjennelige «{}»…", - "update_not_available": "Du kjører siste versjon av OnionShare.", - "gui_tor_connection_ask": "Åpne innstillingene for å ordne opp i tilkoblingen til Tor?", - "gui_tor_connection_ask_open_settings": "Ja", - "gui_tor_connection_ask_quit": "Avslutt", - "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_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet. Lag en ny deling.", - "gui_server_autostop_timer_expired": "Tidsavbruddsuret har gått ut allerede. Juster det for å starte deling.", - "share_via_onionshare": "Del via OnionShare", - "gui_save_private_key_checkbox": "Bruk en vedvarende adresse", - "gui_share_url_description": "Alle som har denne OnionShare-adressen og tilhørende privat nøkkel kan Laste ned filene dine ved bruk av Tor-Browser: ", - "gui_receive_url_description": "Alle som har denne OnionShare-adressen og tilhørende privat nøkkel kan Laste opp filer til din datamaskin ved bruk av Tor-Browser: ", - "gui_url_label_persistent": "Delingen vil ikke stoppe automatisk.

Hver påfølgende deling vil gjenbruke adressen. (For engangsadresser, skru av \"Bruk vedvarende adresse\" i innstillingene.)", - "gui_url_label_stay_open": "Denne delingen vil ikke stoppe automatisk.", - "gui_url_label_onetime": "Denne delingen vil stoppe etter første fullføring.", - "gui_url_label_onetime_and_persistent": "Delingen vil ikke stoppe automatisk.

Hver påfølgende deling vil gjenbruke adressen. (For å bruke engangsadresser, skru av \"Bruk vedvarende adresse\" i innstillingene.)", - "gui_status_indicator_share_stopped": "Klar til å dele", - "gui_status_indicator_share_working": "Starter…", - "gui_status_indicator_share_started": "Deler", - "gui_status_indicator_receive_stopped": "Klar til mottak", - "gui_status_indicator_receive_working": "Starter…", - "gui_status_indicator_receive_started": "Mottar", - "gui_file_info": "{} filer, {}", - "gui_file_info_single": "{} fil, {}", - "info_in_progress_downloads_tooltip": "{} nedlasting(er) underveis", - "info_completed_downloads_tooltip": "{} nedlasting(er) fullført", - "info_in_progress_uploads_tooltip": "{} opplasting(er) underveis", - "info_completed_uploads_tooltip": "{} nedlasting(er) fullført", - "error_cannot_create_downloads_dir": "Kunne ikke opprette mottaksmodusmappe: {}", - "error_downloads_dir_not_writable": "Mottaksmodusmappen er skrivebeskyttet: {}", - "receive_mode_downloads_dir": "Filer sendt til deg vil vises i denne mappen: {}", - "receive_mode_warning": "Advarsel: Mottaksmodus lar folk laste opp filer til din datamaskin. Noen filer kan potensielt ta over datamaskinen din hvis du åpner dem. Kun åpne ting fra folk du stoler på, eller hvis du vet hva du gjør.", - "gui_receive_mode_warning": "Mottaksmodus lar folk laste opp filer til din datamaskin.

Noen filer kan potensielt ta over datamaskinen din hvis du åpner dem. Åpne kun filer fra personer du stoler på, eller hvis du vet hva du gjør.", - "receive_mode_upload_starting": "Opplasting av total størrelse {} starter", - "receive_mode_received_file": "Mottatt: {}", - "gui_mode_share_button": "Del filer", - "gui_mode_receive_button": "Motta filer", - "gui_settings_receiving_label": "Mottaksinnstillinger", - "gui_settings_downloads_label": "Lagre filer i", - "gui_settings_downloads_button": "Utforstk", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "Mottaksmodus kan stoppes av avsenderen", - "gui_settings_public_mode_checkbox": "Offentlig modus", - "systray_close_server_title": "OnionShare-tjener lukket", - "systray_close_server_message": "En bruker stengte tjeneren", - "systray_page_loaded_title": "Side innlastet", - "systray_download_page_loaded_message": "En bruker lastet inn nedlastingssiden", - "systray_upload_page_loaded_message": "En bruker lastet inn opplastingssiden", - "gui_uploads": "Opplastingshistorikk", - "gui_no_uploads": "Ingen opplastinger enda.", - "gui_clear_history": "Tøm alt", - "gui_upload_in_progress": "Opplasting startet {}", - "gui_upload_finished_range": "Lastet opp {} til {}", - "gui_upload_finished": "Lastet opp {}", - "gui_open_folder_error_nautilus": "Kan ikke åpne mappe fordi nautilus ikke er tilgjengelig. Filen er her: {}", - "history_in_progress_tooltip": "{} underveis", - "history_completed_tooltip": "{} fullført", - "gui_download_in_progress": "Nedlasting startet {}", - "gui_settings_language_label": "Foretrukket språk", - "gui_settings_language_changed_notice": "Start OnionShare på ny for å se nytt språkvalg.", - "timeout_upload_still_running": "Venter på at opplastingen fullføres", - "gui_add_files": "Legg til filer", - "gui_add_folder": "Legg til mappe", - "gui_connect_to_tor_for_onion_settings": "Koble til Tor for å se Onion-innstillinger", - "error_cannot_create_data_dir": "Kunne ikke opprette OnionShare-datamappe: {}", - "receive_mode_data_dir": "Filers sendt til deg havner i denne mappen: {}", - "gui_settings_data_dir_label": "Lagre filer i", - "gui_settings_data_dir_browse_button": "Utforsk", - "systray_page_loaded_message": "OnionShare-adresse lastet", - "systray_share_started_title": "Deling startet", - "systray_share_started_message": "Begynner å sende filer til noen", - "systray_share_completed_title": "Deling fullført", - "systray_share_completed_message": "Forsendelse av filer utført", - "systray_share_canceled_title": "Deling avbrutt", - "systray_share_canceled_message": "Noen avbrøt mottak av filene dine", - "systray_receive_started_title": "Mottak startet", - "systray_receive_started_message": "Noen sender deg filer", - "gui_all_modes_history": "Historikk", - "gui_all_modes_clear_history": "Tøm alt", - "gui_all_modes_transfer_started": "Startet {}", - "gui_all_modes_transfer_finished_range": "Overført {} - {}", - "gui_all_modes_transfer_finished": "Overført {}", - "gui_all_modes_progress_complete": "%p%, {0:s} forløpt.", - "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_autostop_timer_waiting": "Venter på fullføring av forsendelse", - "gui_receive_mode_no_files": "Ingen filer mottatt enda", - "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", - "gui_stop_server_autostop_timer_tooltip": "Automatisk tidsavbruddsur utløper {}", - "gui_start_server_autostart_timer_tooltip": "Automatisk tidsur slutter {}", - "gui_waiting_to_start": "Planlagt start om {}. Klikk for å avbryte.", - "gui_settings_autostart_timer_checkbox": "Bruk tidur for automatisk start", - "gui_settings_autostart_timer": "Start delingen:", - "gui_server_autostart_timer_expired": "Planlagt tid allerede tilbakelagt. Juster det for å starte deling.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatisk tidsavbruddsur kan ikke være likt eller predatere auomatisk starttid. Juster det for å starte deling.", - "gui_status_indicator_share_scheduled": "Planlagt…", - "gui_status_indicator_receive_scheduled": "Planlagt…", - "days_first_letter": "d", - "hours_first_letter": "t", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_website_url_description": "Hvem som helst med denne OnionShare-adressen og tilhørende privat nøkkel kan besøke din nettside ved bruk av Tor-nettleseren: ", - "gui_mode_website_button": "Publiser nettside", - "systray_site_loaded_title": "Nettside innlastet", - "systray_site_loaded_message": "OnionShare-nettside innlastet", - "systray_website_started_title": "Starter deling av nettside", - "systray_website_started_message": "Noen besøker din nettside", - "gui_website_mode_no_files": "Ingen nettside delt enda", - "incorrect_password": "Feil passord", - "gui_settings_individual_downloads_label": "Forby nedlasting av enkeltfiler", - "history_requests_tooltip": "{} vevforespørsler", - "systray_individual_file_downloaded_title": "Enkeltfil innlastet", - "systray_individual_file_downloaded_message": "Enkeltfil {} sett", - "mode_settings_advanced_toggle_hide": "Skjul avanserte innstillinger", - "mode_settings_advanced_toggle_show": "Vis avanserte innstillinger", - "gui_quit_warning_cancel": "Avbryt", - "gui_quit_warning_title": "Er du sikker?", - "gui_close_tab_warning_cancel": "Avbryt", - "gui_close_tab_warning_close": "Lukk", - "gui_close_tab_warning_title": "Er du sikker?", - "gui_new_tab_website_button": "Offentliggjør nettside", - "gui_new_tab_share_button": "Del filer", - "gui_new_tab_tooltip": "Åpne en ny fane", - "gui_new_tab": "Ny fane", - "gui_settings_website_label": "Nettsideinnstillinger", - "mode_settings_receive_data_dir_browse_button": "Utforsk", - "mode_settings_receive_data_dir_label": "Lagre filer i", - "gui_new_tab_receive_button": "Motta filer", - "mode_settings_autostop_timer_checkbox": "Stopp løktjeneste ved planlagt tidspunkt", - "mode_settings_autostart_timer_checkbox": "Start løktjeneste ved planlagt tidspunkt", - "mode_settings_public_checkbox": "Dette er en offentlig OnionShare-tjeneste (skrur av privat nøkkel)", - "gui_close_tab_warning_receive_description": "Du mottar filer. Er du sikker på at du vil lukke denne fanen?", - "gui_close_tab_warning_share_description": "Du sender filer. Er du sikker på at du vil lukke denne fanen?", - "gui_chat_stop_server": "Stopp sludringstjener", - "gui_chat_start_server": "Start sludringstjener", - "gui_chat_stop_server_autostop_timer": "Stopp sludringstjener ({})", - "gui_file_selection_remove_all": "Fjern alle", - "gui_remove": "Fjern", - "gui_quit_warning_description": "Deling er aktiv i noen av fanene dine. Hvis du avslutter, vil alle fanene dine lukkes. Er du sikker på at du vil avslutte?", - "gui_close_tab_warning_website_description": "Du deler en nettside akkurat nå. Er du sikker på at du vil lukke denne fanen?", - "gui_settings_csp_header_disabled_option": "Ikke send hode for innholdssikkerhetspraksis", - "mode_settings_website_disable_csp_checkbox": "Ikke send hode for innholdsikkerhetspraksis (tillater nettsiden din å bruke tredjepartsressurser)", - "mode_settings_legacy_checkbox": "Bruk en gammeldags adresse (v2-onion tjeneste, anbefales ikke)", - "mode_settings_persistent_checkbox": "Lagre denne fanen og åpne den automatisk sammen med OnionShare", - "gui_open_folder_error": "Klarte ikke å åpne mappe med xdg-open. Filen er her: {}", - "gui_receive_flatpak_data_dir": "Fordi du har installert OnionShare som Flatpak må du lagre filer til en mappe i ~/OnionShare.", - "mode_settings_share_autostop_sharing_checkbox": "Stopp deling etter at filer er sendt (fravelg for å tillate nedlasting av individuelle filer)", - "gui_close_tab_warning_persistent_description": "Denne fanen er vedvarende. Hvis du lukker den vil du miste onion-adressen den bruker. Er du sikker på at du vil lukke den?", - "gui_tab_name_chat": "Prat", - "gui_tab_name_website": "Nettside", - "gui_tab_name_receive": "Motta", - "gui_tab_name_share": "Del", - "gui_new_tab_chat_button": "Sludre anonymt", - "gui_qr_code_description": "Skann denne QR-koden med en QR-kodeleser (f.eks. kameraprogrammet på enheten din) for enklere deling av OnionShare-adressen med noen.", - "gui_qr_code_dialog_title": "OnionShare-QR-kode", - "gui_show_qr_code": "Vis QR-kode", - "gui_main_page_chat_button": "Start sludring", - "gui_main_page_website_button": "Start vertsjening", - "gui_main_page_receive_button": "Start mottak", - "gui_main_page_share_button": "Start deling", - "gui_chat_url_description": "Alle med denne OnionShare-adressen og tilhørende privat nøkkel kan ta del i dette sludrerommet ved bruk av Tor-nettleseren: ", - "error_port_not_available": "OnionShare-port ikke tilgjengelig", - "gui_rendezvous_cleanup_quit_early": "Avslutt tidlig", - "gui_rendezvous_cleanup": "Venter på at Tor-kretsene lukkes for å være sikker på at filene dine er overført.\n\nDette kan ta noen minutter.", - "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus.", - "history_receive_read_message_button": "Les melding", - "mode_settings_receive_webhook_url_checkbox": "Bruk varsling webhook", - "mode_settings_receive_disable_files_checkbox": "Deaktiver opplasting av filer", - "mode_settings_receive_disable_text_checkbox": "Deaktiver innsending av tekst", - "mode_settings_title_label": "Egendefinert tittel", - "gui_url_instructions": "Først sender du OnionShare-adressen nedenfor:", - "gui_website_url_public_description": "Alle med denne OnionShare-adressen kan besøke nettsiden din ved bruk av Tor-nettleseren: ", - "gui_status_indicator_chat_started": "Sludrer", - "gui_status_indicator_chat_scheduled": "Planlagt …", - "gui_status_indicator_chat_working": "Starter …", - "gui_status_indicator_chat_stopped": "Klar til å sludre", - "gui_client_auth_instructions": "Så sender du den private nøkkelen for å innvilge tilgang til din OnionShare-tjeneste:", - "gui_url_instructions_public_mode": "Send OnionShare-adressen nedenfor:", - "gui_chat_url_public_description": "Alle med denne OnionShare-adressen kan ta del i dette sludrerommet ved bruk av Tor-nettleseren: ", - "gui_receive_url_public_description": "Alle med denne OnionShare-adressen kan laste opp filer til datamaskinen din ved bruk av Tor-nettleseren: ", - "gui_share_url_public_description": "Alle med dene OnionShare-adressen kan laste ned filene dine ved bruk av Tor-nettleseren: ", - "gui_server_doesnt_support_stealth": "Denne versjonen av Tor støtter ikke stealth (klient-identitetsbekreftelse). Prøv med en nyere versjon av Tor, eller bruk «offentlig» modus hvis det ikke trenger å være privat.", - "gui_settings_theme_light": "Lys", - "gui_settings_theme_auto": "Auto", - "gui_settings_theme_label": "Drakt", - "gui_settings_theme_dark": "Mørk", - "gui_please_wait_no_button": "Starter …", - "gui_hide": "Skjul", - "gui_reveal": "Avslør", - "gui_qr_label_auth_string_title": "Privat nøkkel", - "gui_qr_label_url_title": "OnionShare-adresse", - "gui_copied_client_auth": "Privat nøkkel kopiert til utklippstavle", - "gui_copied_client_auth_title": "Privat nøkkel kopiert", - "gui_copy_client_auth": "Kopier privat nøkkel" -} diff --git a/desktop/src/onionshare/resources/locale/nl.json b/desktop/src/onionshare/resources/locale/nl.json deleted file mode 100644 index 2ae1351a..00000000 --- a/desktop/src/onionshare/resources/locale/nl.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "config_onion_service": "Onion-dienst configureren op poort {0:d}.", - "preparing_files": "Bezig met comprimeren van bestanden.", - "give_this_url": "Geef dit adres aan de ontvanger:", - "give_this_url_stealth": "Geef dit adres en de HidServAuth-regel aan de ontvanger:", - "ctrlc_to_stop": "Druk op Ctrl+C om de server te stoppen", - "not_a_file": "{0:s} is geen geldig bestand.", - "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_autostop_timer": "Gestopt omdat de automatische stop-timer afgelopen was", - "closing_automatically": "Gestopt omdat de overdracht klaar is", - "timeout_download_still_running": "Bezig met wachten op afronden van download", - "large_filesize": "Waarschuwing: het versturen van grote bestanden kan uren duren", - "systray_menu_exit": "Afsluiten", - "systray_download_started_title": "OnionShare-download gestart", - "systray_download_started_message": "Een gebruiker is begonnen met downloaden van je bestanden", - "systray_download_completed_title": "OnionShare-download afgerond", - "systray_download_completed_message": "De gebruiker is klaar met downloaden", - "systray_download_canceled_title": "OnionShare-download afgebroken", - "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_autostop_timer": "Stoppen met delen na het opgegeven aantal seconden", - "help_stealth": "Client-authorisatie gebruiken (geavanceerd)", - "help_verbose": "Log OnionShare fouten naar stdout, en web fouten naar disk", - "help_filename": "Lijst van bestanden of mappen om te delen", - "help_config": "Instelbaar pad naar JSON configuratie bestand (optioneel)", - "gui_drag_and_drop": "Sleep bestanden hier naar toe om het delen te starten", - "gui_add": "Toevoegen", - "gui_delete": "Verwijder", - "gui_choose_items": "Kies", - "gui_copy_url": "Kopieer URL", - "gui_downloads": "Download Geschiedenis", - "gui_canceled": "Afgebroken", - "gui_copied_url": "OnionShare adres gekopieerd naar klembord", - "gui_please_wait": "Aan het starten... Klik om te annuleren.", - "gui_download_upload_progress_complete": "%p%, {0:s} verstreken.", - "gui_download_upload_progress_starting": "{0:s}, %p% (berekenen)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_share_quit_warning": "Je bent in het proces van bestanden versturen. Weet je zeker dat je OnionShare af wilt sluiten?", - "gui_quit_warning_quit": "Afsluiten", - "gui_quit_warning_dont_quit": "Annuleren", - "zip_progress_bar_format": "Comprimeren: %p%", - "error_stealth_not_supported": "Om client authorization te gebruiken heb je op zijn minst zowel Tor 0.2.9.1-alpha (of Tor Browser 6.5) en python3-stem 1.5.0 nodig.", - "error_ephemeral_not_supported": "OnionShare vereist minstens zowel Tor 0.2.7.1 als python3-stem 1.4.0.", - "gui_settings_window_title": "Instellingen", - "gui_settings_stealth_option": "Gebruik cliëntautorisatie", - "gui_settings_autoupdate_label": "Controleer op nieuwe versies", - "gui_settings_autoupdate_option": "Laat me weten als er een nieuwe versie beschikbaar is", - "gui_settings_autoupdate_timestamp": "Laatste controle: {}", - "gui_settings_autoupdate_timestamp_never": "Nooit", - "gui_settings_autoupdate_check_button": "Controleer op een Nieuwe Versie", - "gui_settings_sharing_label": "Instelling voor delen", - "gui_settings_close_after_first_download_option": "Stop met delen, nadat de bestanden verstuurd zijn", - "gui_settings_connection_type_label": "Hoe moet OnionShare verbinden met Tor?", - "gui_settings_connection_type_bundled_option": "Gebruik de Tor versie die is ingebouwd in OnionShare", - "gui_settings_connection_type_automatic_option": "Probeer auto-configuratie met Tor Browser", - "gui_settings_connection_type_control_port_option": "Verbinden via controle poort", - "gui_settings_connection_type_socket_file_option": "Verbinden via socket bestand", - "gui_settings_connection_type_test_button": "Test Connectie naar Tor", - "gui_settings_control_port_label": "Controle poort", - "gui_settings_socket_file_label": "Socket bestand", - "gui_settings_socks_label": "SOCKS poort", - "gui_settings_authenticate_label": "Tor authenticatie instellingen", - "gui_settings_authenticate_no_auth_option": "Geen authenticatie, of cookie authenticatie", - "gui_settings_authenticate_password_option": "Wachtwoord", - "gui_settings_password_label": "Wachtwoord", - "gui_settings_button_save": "Opslaan", - "gui_settings_button_cancel": "Annuleren", - "gui_settings_button_help": "Help", - "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?", - "settings_error_socket_port": "Kan geen verbinding maken met de Tor controller op {}:{}.", - "settings_error_socket_file": "Kan geen verbinding maken met de Tor controller via socket bestand {}.", - "settings_error_auth": "Verbonden met {}:{}, maar kan niet authenticeren. Misschien is het geen Tor controller?", - "settings_error_missing_password": "Verbonden met Tor controller, maar het heeft een wachtwoord nodig voor authenticatie.", - "settings_error_unreadable_cookie_file": "Verbonden met de Tor controller, maar het wachtwoord kan onjuist zijn, of je gebruiker heeft geen toestemming om het cookie bestand te lezen.", - "settings_error_bundled_tor_not_supported": "De Tor versie die is meegeleverd bij OnionShare werkt niet in de ontwikkelaarsmodus op Windows of macOS.", - "settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer niet verbonden met internet, of je hebt een inaccurate systeemklok?", - "settings_error_bundled_tor_broken": "OnionShare kan geen verbinding maken met Tor:\n{}", - "settings_test_success": "Verbonden met de Tor controller.\n\nTor versie: {}\nOndersteunt ephemeral onion services: {}.\nOndersteunt client authentication: {}.\nOndersteunt next-gen .onion addresses: {}.", - "error_tor_protocol_error": "Er was een fout met Tor: {}", - "connecting_to_tor": "Verbinden met het Tor netwerk", - "update_available": "Nieuwe OnionShare is uitgekomen. Klik hier om hem te krijgen.

Jij gebruikt {} en de laatste is {}.", - "update_error_check_error": "Kon niet controleren op een nieuwe versie: Wellicht ben je niet met Tor verbonden, of de OnionShare website is niet beschikbaar?", - "update_error_invalid_latest_version": "Kon niet controleren op een nieuwe versie: de OnionShare website meldt dat de laatste versie de onherkenbare is '{}' is…", - "update_not_available": "Je draait de laatst beschikbare OnionShare.", - "gui_tor_connection_ask": "Open de instellingen om het verbindingsprobleem met Tor op te lossen?", - "gui_tor_connection_ask_open_settings": "Ja", - "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\nZorg dat je met het internet verbonden bent, herstart OnionShare en configureer de verbinding met Tor.", - "gui_server_started_after_autostop_timer": "De auto-stop timer verliep, voordat de server startte. Maak een nieuwe share aan.", - "gui_server_autostop_timer_expired": "De auto-stop timer is al verlopen. Stel 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:", - "systray_upload_started_title": "OnionShare-upload gestart", - "systray_upload_started_message": "Een gebruiker is begonnen met uploaden van bestanden naar je computer", - "help_receive": "Bestanden ontvangen in plaats van ze versturen", - "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_autostop_timer": "Stop met Delen ({})", - "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_autostop_timer": "Stop Ontvangstmodus ({} 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_quit_title": "Niet zo snel", - "gui_receive_quit_warning": "Je bent in het proces van bestanden ontvangen. Weet je zeker dat je OnionShare af wilt sluiten?", - "gui_settings_whats_this": "1Wat is dit?2", - "gui_settings_general_label": "Algemene instellingen", - "gui_settings_tor_bridges": "Tor bridge ondersteuning", - "gui_settings_tor_bridges_no_bridges_radio_option": "Gebruik geen bridges", - "gui_settings_tor_bridges_obfs4_radio_option": "Gebruik ingebouwde obfs4 pluggable transports", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gebruik ingebouwde pluggable transports (vereist obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gebruik ingebouwde meek_lite (Azure) pluggable transports", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingebouwde meek_lite (Azure) pluggable transports (vereist obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Waarschuwing: De meek_lite bridges zijn erg kostbaar voor het Tor Project om uit te voeren.

Gebruik ze alleen als je niet direct met Tor kan verbinden, via obfs4 transports, of andere normale bridges.", - "gui_settings_tor_bridges_custom_radio_option": "Gebruik custom bridges", - "gui_settings_tor_bridges_custom_label": "Je kan bridges krijgen via https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Geen van de bridges die je hebt toegevoegd werken. \nControleer ze of voeg andere toe.", - "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.", - "gui_save_private_key_checkbox": "Gebruik een vast adres", - "gui_share_url_description": "1Iedereen2 met dit OnionShare-adres kan je bestanden 3binnenhalen4 met de 5Tor Browser6: ", - "gui_receive_url_description": "Iedereen met dit OnionShare adres kan bestanden op je computer plaatsen met de Tor Browser: ", - "gui_url_label_persistent": "Deze share stopt niet vanzelf.

Elke volgende share zal het adres hergebruiken. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)", - "gui_url_label_stay_open": "Deze share stopt niet automatisch.", - "gui_url_label_onetime": "Deze share stopt na de eerste voltooiïng.", - "gui_url_label_onetime_and_persistent": "Deze share stopt niet vanzelf.

Elke volgende share zal het adres hergebruiken. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)", - "gui_status_indicator_share_stopped": "Klaar om te delen", - "gui_status_indicator_share_working": "Starten…", - "gui_status_indicator_share_started": "Aan het delen", - "gui_status_indicator_receive_stopped": "Klaar om te ontvangen", - "gui_status_indicator_receive_working": "Starten…", - "gui_status_indicator_receive_started": "Ontvangen", - "gui_file_info": "{} bestanden, {}", - "gui_file_info_single": "{} bestand, {}", - "history_in_progress_tooltip": "{} bezig", - "history_completed_tooltip": "{} klaar", - "info_in_progress_uploads_tooltip": "{} upload(s) zijn bezig", - "info_completed_uploads_tooltip": "de {} upload(s) zijn klaar", - "error_cannot_create_downloads_dir": "Kon de ontvangst modus map niet aanmaken: {}", - "receive_mode_downloads_dir": "De naar je verstuurde bestanden verschijnen in deze map: {}", - "receive_mode_warning": "Waarschuwing: Ontvangst mode laat het toe dat mensen bestanden op je computer zetten. Sommige bestanden kunnen mogelijk de controle over je computer overnemen als je ze opent. Open alleen dingen van mensen die je vertrouwd of als je weet wat je aan het doen bent.", - "gui_receive_mode_warning": "Ontvangstmodus laat anderen bestanden op je computer zetten.

Sommige van die bestanden kunnen mogelijk je computer overnemen, als je ze opent. Open alleen dingen van mensen die je vertrouwt, of als je heel zeker weet wat je doet.", - "receive_mode_upload_starting": "Upload met totale grootte {} is aan het starten", - "receive_mode_received_file": "Ontvangen: {}", - "gui_mode_share_button": "Deel Bestanden", - "gui_mode_receive_button": "Ontvang Bestanden", - "gui_settings_receiving_label": "Instellingen voor Ontvangen", - "gui_settings_downloads_label": "Sla bestanden op naar", - "gui_settings_downloads_button": "Surf", - "gui_settings_public_mode_checkbox": "Openbare modus", - "systray_close_server_title": "OnionShare Server Afgesloten", - "systray_close_server_message": "Een gebruiker heeft de server gestopt", - "systray_page_loaded_title": "Pagina Geladen", - "systray_download_page_loaded_message": "Een gebruiker heeft de download pagina geladen", - "systray_upload_page_loaded_message": "Een gebruiker heeft de upload pagina geladen", - "gui_uploads": "Upload Geschiedenis", - "gui_no_uploads": "Er Zijn Nog Geen Uploads", - "gui_clear_history": "Wis Alles", - "gui_upload_in_progress": "Upload Is Gestart{}", - "gui_upload_finished_range": "{} is naar {} gestuurd", - "gui_upload_finished": "Verzonden {}", - "gui_download_in_progress": "Downloaden Gestart {}", - "gui_open_folder_error_nautilus": "Kan de map niet openen, omdat nautilus niet beschikbaar is. Het bestand staat hier: {}", - "gui_settings_language_label": "Voorkeurstaal", - "gui_settings_language_changed_notice": "Herstart OnionShare om de nieuwe taal te gebruiken.", - "gui_add_files": "Voeg bestanden toe", - "gui_add_folder": "Voeg map toe", - "gui_connect_to_tor_for_onion_settings": "Verbind met Tor om de instellingen van onion-diensten te zien", - "gui_settings_data_dir_label": "Bewaar bestanden naar", - "gui_settings_data_dir_browse_button": "Surf", - "systray_page_loaded_message": "OnionShare adres geladen", - "systray_share_started_title": "Delen Begonnen", - "systray_share_started_message": "Begint bestanden aan iemand te sturen", - "systray_share_completed_title": "Delen Afgerond", - "systray_share_completed_message": "Klaar met versturen van bestanden", - "systray_share_canceled_title": "Delen geannulleerd", - "systray_share_canceled_message": "Iemand heeft het ontvangen van je bestanden geannulleerd", - "systray_receive_started_title": "Ontvangen Begonnen", - "systray_receive_started_message": "Iemand stuurt bestanden naar je", - "gui_all_modes_history": "Geschiedenis", - "gui_all_modes_clear_history": "Wis Alles", - "gui_all_modes_transfer_started": "Begonnen {}", - "gui_all_modes_transfer_finished_range": "Overgezet {} - {}", - "gui_all_modes_transfer_finished": "Overgezet {}", - "gui_all_modes_progress_complete": "%p%, {0:s} verlopen.", - "gui_all_modes_progress_starting": "{0:s}, %p% (aan het berekenen)", - "gui_share_mode_no_files": "Nog Geen Bestanden Verzonden", - "gui_receive_mode_no_files": "Nog Geen Bestanden Ontvangen", - "gui_all_modes_transfer_canceled_range": "Geannuleerd {} - {}", - "gui_all_modes_transfer_canceled": "Geannuleerd {}", - "gui_settings_onion_label": "Onion instellingen", - "gui_stop_server_autostop_timer_tooltip": "Auto-stop timer stopt om {}", - "gui_start_server_autostart_timer_tooltip": "Auto-start timer stopt om {}", - "gui_waiting_to_start": "Gepland te beginnen in {}. Klik om af te breken.", - "gui_settings_autostart_timer_checkbox": "Gebruik auto-start timer", - "gui_settings_autostart_timer": "Begin het delen om:", - "gui_server_autostart_timer_expired": "De geplande timer is al verlopen. Stel een nieuwe in om te beginnen met delen.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "De auto-stop tijd mag niet identiek of vroeger zijn dan de auto-start tijd. Stel hem opnieuw in om te beginnen met delen.", - "gui_status_indicator_share_scheduled": "Gepland…", - "gui_status_indicator_receive_scheduled": "Gepland…", - "gui_share_mode_autostop_timer_waiting": "Wachten tot verzenden klaar is", - "gui_receive_mode_autostop_timer_waiting": "Wachten tot ontvangen klaar is", - "gui_website_url_description": "1Iedereen2 met dit OnionShare-adres kan je bestanden 3bezoeken4 met de 5Tor Browser6: ", - "gui_mode_website_button": "Zet website online", - "systray_site_loaded_title": "Website geladen", - "systray_site_loaded_message": "OnionShare website geladen", - "systray_website_started_title": "Delen van website begint", - "systray_website_started_message": "Iemand bezoekt je website nu", - "gui_website_mode_no_files": "Nog Geen Website Gedeeld", - "gui_visit_started": "Iemand heeft je website bezocht {}", - "incorrect_password": "Foutief wachtwoord", - "gui_settings_individual_downloads_label": "Klik uit om het downloaden van individuele bestanden toe te staan", - "systray_individual_file_downloaded_title": "Individueel bestand geladen", - "systray_individual_file_downloaded_message": "Individueel bestand {} bekeken", - "gui_settings_website_label": "Instellingen voor website", - "error_cannot_create_data_dir": "Kon geen OnionShare datamap aanmaken: {}", - "gui_all_modes_progress_eta": "{0:s}, Verwachte aankomsttijd: {1:s}, %p%", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "history_requests_tooltip": "{} webverzoeken", - "gui_settings_csp_header_disabled_option": "Schakel Content Security Policy header uit", - "mode_settings_share_autostop_sharing_checkbox": "Stop met het delen van bestanden nadat ze verzonden zijn (afvinken om het downloaden van individuele bestanden toe te staan)", - "mode_settings_legacy_checkbox": "Gebruik een verouderd adres (v2 onion service, niet aanbevolen)", - "mode_settings_public_checkbox": "Geen wachtwoord gebruiken", - "mode_settings_advanced_toggle_hide": "Verberg geavanceerde instellingen", - "mode_settings_advanced_toggle_show": "Toon geavanceerde instellingen", - "gui_quit_warning_cancel": "Annuleren", - "gui_quit_warning_title": "Weet je het zeker?", - "gui_close_tab_warning_cancel": "Annuleren", - "gui_close_tab_warning_close": "Afsluiten", - "gui_close_tab_warning_receive_description": "Je bent bezig met bestanden ontvangen. Weet je zeker dat je dit tabblad wilt sluiten?", - "gui_close_tab_warning_share_description": "Je bent bezig bestanden te sturen. Weet je zeker dat je dit tabblad wilt sluiten?", - "gui_close_tab_warning_title": "Weet je het zeker?", - "gui_new_tab_website_description": "Host een statische HTML onion website vanaf je computer.", - "gui_new_tab_receive_button": "Bestanden ontvangen", - "gui_new_tab_share_description": "Kies bestanden op jouw computer om naar iemand anders te sturen. De persoon of personen waar je de bestanden naar wilt sturen moeten de Tor Browser gebruiken om jouw bestanden te downloaden.", - "mode_settings_website_disable_csp_checkbox": "Stuur geen Content Security Policy header (hiermee kan uw website bronnen van derden gebruiken)", - "mode_settings_receive_data_dir_browse_button": "Blader", - "mode_settings_receive_data_dir_label": "Bewaar bestanden in", - "mode_settings_autostop_timer_checkbox": "Stop onion service op een geplande tijd", - "mode_settings_autostart_timer_checkbox": "Start onion service op een geplande tijd", - "mode_settings_persistent_checkbox": "Bewaar dit tabblad en open het automatisch wanneer ik OnionShare open", - "gui_quit_warning_description": "Delen is actief op sommige van uw tabbladen. Als u stopt, worden al uw tabbladen gesloten. Weet u zeker dat u wilt stoppen?", - "gui_close_tab_warning_website_description": "U host actief een website. Weet u zeker dat u dit tabblad wilt sluiten?", - "gui_close_tab_warning_persistent_description": "Dit tabblad heeft een vast onion adres. Als je het tabblad sluit wordt het gebruikte onion adres opgeheven. Weet je zeker dat je dit wil sluiten?", - "gui_tab_name_chat": "Chat", - "gui_tab_name_website": "Website", - "gui_tab_name_receive": "Ontvang", - "gui_tab_name_share": "Deel", - "gui_main_page_chat_button": "Begin met chatten", - "gui_main_page_website_button": "Begin met hosten", - "gui_main_page_receive_button": "Begin met ontvangen", - "gui_main_page_share_button": "Begin met delen", - "gui_new_tab_chat_button": "Chat anoniem", - "gui_new_tab_website_button": "Host een website", - "gui_new_tab_share_button": "Deel bestanden", - "gui_new_tab_tooltip": "Open een tabblad", - "gui_new_tab": "Nieuw tabblad", - "gui_open_folder_error": "Niet gelukt om de map te openen met xdg-open. Het bestand staat hier: {}", - "gui_qr_code_dialog_title": "OnionShare QR Code", - "gui_show_qr_code": "Toon QR Code", - "gui_receive_flatpak_data_dir": "Omdat je OnionShare installeerde met Flatpak, moet je bestanden opslaan in een folder in ~/OnionShare.", - "gui_chat_stop_server": "Stop chat server", - "gui_chat_start_server": "Start chat server", - "gui_file_selection_remove_all": "Alles verwijderen", - "gui_remove": "Verwijderen", - "gui_rendezvous_cleanup": "Wachten op Tor circuits om af te sluiten, om zeker te stellen dat je bestanden succesvol zijn verplaatst\n\nDit kan enkele minuten duren.", - "mode_settings_receive_disable_text_checkbox": "Schakel het versturen van tekst uit", - "mode_settings_receive_disable_files_checkbox": "Schakel uploaden bestanden uit", - "mode_settings_receive_webhook_url_checkbox": "Gebruik notificatie webhook", - "gui_rendezvous_cleanup_quit_early": "Vervroegd afsluiten", - "error_port_not_available": "OnionShare poort is niet beschikbaar", - "history_receive_read_message_button": "Lees bericht", - "gui_chat_url_description": "Iedereen met dit OnionShare adres kanin deze chatkamer aansluiten met de Tor Browser: ", - "mode_settings_title_label": "Handmatige titel", - "gui_status_indicator_chat_working": "Starten…", - "gui_status_indicator_chat_started": "in gesprek", - "gui_status_indicator_chat_scheduled": "Ingepland…", - "gui_color_mode_changed_notice": "Herstart OnionShare om de nieuwe kleur toe te passen.", - "gui_status_indicator_chat_stopped": "Klaar om te chatten" -} diff --git a/desktop/src/onionshare/resources/locale/pa.json b/desktop/src/onionshare/resources/locale/pa.json deleted file mode 100644 index 766e3a02..00000000 --- a/desktop/src/onionshare/resources/locale/pa.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "large_filesize": "", - "systray_menu_exit": "ਬਾਹਰ", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/pl.json b/desktop/src/onionshare/resources/locale/pl.json deleted file mode 100644 index bd725126..00000000 --- a/desktop/src/onionshare/resources/locale/pl.json +++ /dev/null @@ -1,309 +0,0 @@ -{ - "config_onion_service": "Konfiguruję usługę onion na porcie {0:d}.", - "preparing_files": "Kompresuję pliki.", - "give_this_url": "Przekaż ten adres odbiorcy:", - "give_this_url_stealth": "Przekaż ten adres i linijkę HidServAuth odbiorcy:", - "give_this_url_receive": "Przekaż ten adres do nadawcy:", - "give_this_url_receive_stealth": "Przekaż ten adres i linijkę HidServAuth do nadawcy:", - "ctrlc_to_stop": "Przyciśnij kombinację klawiszy Ctrl i C aby zatrzymać serwer", - "not_a_file": "{0:s} nie jest prawidłowym plikiem.", - "not_a_readable_file": "Brak uprawnień do odczytu {0:s}.", - "no_available_port": "Nie można znaleźć dostępnego portu aby włączyć usługę onion", - "other_page_loaded": "Adres został wczytany", - "close_on_autostop_timer": "Upłynął maksymalny czas wysyłania - operacja zatrzymana", - "closing_automatically": "Transfer został zakończony", - "timeout_download_still_running": "Czekam na ukończenie pobierania", - "large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć wiele godzin", - "systray_menu_exit": "Wyjście", - "systray_download_started_title": "Pobieranie OnionShare zostało rozpoczęte", - "systray_download_started_message": "Użytkownik rozpoczął ściąganie Twoich plików", - "systray_download_completed_title": "Pobieranie OnionShare skończone", - "systray_download_completed_message": "Użytkownik ukończył ściąganie Twoich plików", - "systray_download_canceled_title": "Pobieranie OnionShare zostało anulowane", - "systray_download_canceled_message": "Użytkownik anulował pobieranie", - "systray_upload_started_title": "Wysyłanie OnionShare rozpoczęte", - "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_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_verbose": "Zapisz błędy OnionShare do stdout i zapisz błędy sieciowe na dysku", - "help_filename": "Lista plików i folderów do udostępnienia", - "help_config": "Lokalizacja niestandarowego pliku konfiguracyjnego JSON (opcjonalne)", - "gui_drag_and_drop": "Przeciągnij i upuść pliki i foldery, aby je udostępnić", - "gui_add": "Dodaj", - "gui_delete": "Usuń", - "gui_choose_items": "Wybierz", - "gui_share_start_server": "Rozpocznij udostępnianie", - "gui_share_stop_server": "Zatrzymaj udostępnianie", - "gui_share_stop_server_autostop_timer": "Przerwij udostępnianie ({})", - "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_autostop_timer": "Zatrzymaj tryb odbierania (pozostało: {})", - "gui_receive_stop_server_autostop_timer_tooltip": "Czas upływa za {}", - "gui_copy_url": "Kopiuj adres", - "gui_downloads": "Historia pobierania", - "gui_no_downloads": "Nie pobrano jeszcze niczego", - "gui_canceled": "Anulowano", - "gui_copied_url_title": "Skopiowano adres OnionShare", - "gui_copied_url": "Adres OnionShare został skopiowany do schowka", - "gui_please_wait": "Rozpoczynam... Kliknij, aby zatrzymać.", - "gui_download_upload_progress_complete": "%p%, {0:s} upłynęło.", - "gui_download_upload_progress_starting": "{0:s}, %p% (obliczam)", - "gui_download_upload_progress_eta": "{0:s}, pozostało: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Nie tak szybko", - "gui_share_quit_warning": "Jesteś w trakcie wysyłania plików. Jesteś pewien, że chcesz wyjść z OnionShare?", - "gui_receive_quit_warning": "Odbierasz teraz pliki. Jesteś pewien, że chcesz wyjść z OnionShare?", - "gui_quit_warning_quit": "Wyjście", - "gui_quit_warning_dont_quit": "Anuluj", - "zip_progress_bar_format": "Postęp kompresji: %p%", - "error_stealth_not_supported": "Aby skorzystać z autoryzacji klienta wymagana jest wersja programu Tor 0.2.9.1-alpha lub nowsza, bądź Tor Browser w wersji 6.5 lub nowszej oraz python3-stem w wersji 1.5 lub nowszej.", - "error_ephemeral_not_supported": "OnionShare wymaga programu Tor w wersji 0.2.7.1 lub nowszej oraz python3-stem w wersji 1.4.0 lub nowszej.", - "gui_settings_window_title": "Ustawienia", - "gui_settings_whats_this": "Co to jest?", - "gui_settings_stealth_option": "Użyj autoryzacji klienta", - "gui_settings_autoupdate_label": "Sprawdź nową wersję", - "gui_settings_autoupdate_option": "Poinformuj mnie, kiedy nowa wersja programu będzie dostępna", - "gui_settings_autoupdate_timestamp": "Ostatnie sprawdzenie aktualizacji: {}", - "gui_settings_autoupdate_timestamp_never": "Nigdy", - "gui_settings_autoupdate_check_button": "Sprawdź, czy nowa wersja programu jest dostępna", - "gui_settings_general_label": "Ustawienia ogólne", - "gui_settings_sharing_label": "Ustawienia udostępniania", - "gui_settings_close_after_first_download_option": "Zatrzymaj udostępnianie po wysłaniu plików", - "gui_settings_connection_type_label": "W jaki sposób OnionShare powinien połączyć się z siecią Tor?", - "gui_settings_connection_type_bundled_option": "Skorzystaj z wersji Tora wbudowanej w OnionShare", - "gui_settings_connection_type_automatic_option": "Spróbuj skonfigurować automatycznie przy pomocy Tor Browser", - "gui_settings_connection_type_control_port_option": "Połącz za pomocą portu sterowania", - "gui_settings_connection_type_socket_file_option": "Połącz z użyciem pliku socket", - "gui_settings_connection_type_test_button": "Sprawdź połączenie z siecią Tor", - "gui_settings_control_port_label": "Port sterowania", - "gui_settings_socket_file_label": "Plik socket", - "gui_settings_socks_label": "Port SOCKS", - "gui_settings_authenticate_label": "Ustawienia autoryzacji sieci Tor", - "gui_settings_authenticate_no_auth_option": "Bez uwierzytelniania lub uwierzytelnianie za pomocą cookie", - "gui_settings_authenticate_password_option": "Hasło", - "gui_settings_password_label": "Hasło", - "gui_settings_tor_bridges": "Wsparcie mostków sieci Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "Nie korzystaj z mostków sieci Tor", - "gui_settings_tor_bridges_obfs4_radio_option": "Użyj wbudowanych transportów wtykowych obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Użyj wbudowanych transportów plug-in obfs4 (wymaga obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Użyj wbudowanych transportów wtykowych meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Użyj wbudowanych transportów wtykowych meek_lite (Azure) (wymaga obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Uwaga: Mostki meek_lite są bardzo kosztowne dla Tor Project.

Korzystaj z nich tylko wtedy, gdy nie możesz połączyć się bezpośrednio z siecią Tor poprzez obsf4 albo przez inne normalne mostki.", - "gui_settings_tor_bridges_custom_radio_option": "Użyj niestandardowych mostków", - "gui_settings_tor_bridges_custom_label": "Mostki możesz znaleźć na https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Żadne z dodanych przez Ciebie mostków nie działają.\nZweryfikuj je lub dodaj inne.", - "gui_settings_button_save": "Zapisz", - "gui_settings_button_cancel": "Anuluj", - "gui_settings_button_help": "Pomoc", - "gui_settings_autostop_timer_checkbox": "Użyj czasomierza automatycznego zatrzymania", - "gui_settings_autostop_timer": "Zatrzymaj udział w:", - "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 {}:{}.", - "settings_error_socket_file": "Nie można połączyć się z kontrolerem Tor używając pliku socket znajdującym się w ścieżce {}.", - "settings_error_auth": "Połączono z {}:{} ale nie można uwierzytelnić. Być może to nie jest kontroler Tor?", - "settings_error_missing_password": "Połączono z kontrolerem Tor ale wymaga on hasła do uwierzytelnienia.", - "settings_error_unreadable_cookie_file": "Połączono z kontrolerem Tor, ale hasło może być niepoprawne albo Twój użytkownik nie ma uprawnień do odczytania pliku z cookie.", - "settings_error_bundled_tor_not_supported": "Używanie wersji Tora dołączonej do OnionShare nie działa w trybie programisty w systemie Windows i MacOS.", - "settings_error_bundled_tor_timeout": "Połączenie się z siecią Tor zajmuje zbyt dużo czasu. Być może nie jesteś połączony z internetem albo masz niedokładny zegar systemowy?", - "settings_error_bundled_tor_broken": "OnionShare nie mógł połączyć się z siecią Tor:\n{}", - "settings_test_success": "Połączono z kontrolerem Tor.\n\nWersja Tor: {}\nWsparcie ulotnych serwisów onion: {}.\nWsparcie autoryzacji klienta: {}.\nWsparcie adresów .onion nowej generacji: {}.", - "error_tor_protocol_error": "Pojawił się błąd z Tor: {}", - "error_tor_protocol_error_unknown": "Pojawił się nieznany błąd z Tor", - "error_invalid_private_key": "Ten typ klucza prywatnego jest niewspierany", - "connecting_to_tor": "Łączę z siecią Tor", - "update_available": "Nowa wersja programu OnionShare jest dostępna. Kliknij tutaj aby ją ściągnąć.

Korzystasz z wersji {}, a najnowszą jest {}.", - "update_error_check_error": "Nie można sprawdzić czy jest dostępna aktualizacja. Być może nie działa połączenie do sieci Tor albo strona OnionShare?", - "update_error_invalid_latest_version": "Nie można sprawdzić nowej wersji: strona OnionShare twierdzi, że najnowsza wersja jest nierozpoznawalna '{}'…", - "update_not_available": "Korzystasz z najnowszej wersji OnionShare.", - "gui_tor_connection_ask": "Otworzyć ustawienia w celu naprawienia połączenia z Tor?", - "gui_tor_connection_ask_open_settings": "Tak", - "gui_tor_connection_ask_quit": "Wyjście", - "gui_tor_connection_error_settings": "Spróbuj w ustawieniach zmienić sposób, w jaki OnionShare łączy się z siecią Tor.", - "gui_tor_connection_canceled": "Nie można połączyć się z Tor.\n\nSprawdź połączenie z Internetem, następnie ponownie otwórz OnionShare i skonfiguruj połączenie z Tor.", - "gui_tor_connection_lost": "Odłączony od sieci Tor.", - "gui_server_started_after_autostop_timer": "Czas automatycznego zatrzymania upłynął przed uruchomieniem serwera. Utwórz nowy udział.", - "gui_server_autostop_timer_expired": "Czas automatycznego zatrzymania już upłynął. Dostosuj go, aby rozpocząć udostępnianie.", - "share_via_onionshare": "Udostępniaj przez OnionShare", - "gui_save_private_key_checkbox": "Użyj stałego adresu", - "gui_share_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może pobrać Twoje pliki za pomocą przeglądarki Tor Browser: ", - "gui_receive_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może przesyłać pliki na Twój komputer za pomocą przeglądarki Tor Browser: ", - "gui_url_label_persistent": "Ten udział nie zatrzyma się automatycznie.

Każdy kolejny udział ponownie użyje tego adresu. (Aby użyć adresów jednorazowych, wyłącz w ustawieniach „Użyj stałego adresu”.)", - "gui_url_label_stay_open": "Ten udział nie zostanie automatycznie zatrzymany.", - "gui_url_label_onetime": "Ten udział zatrzyma się po pierwszym zakończeniu.", - "gui_url_label_onetime_and_persistent": "Ten udział nie zatrzyma się automatycznie.

Każdy kolejny udział ponownie wykorzysta adres. (Aby użyć adresów jednorazowych, wyłącz w ustawieniach „Użyj stałego adresu”.)", - "gui_status_indicator_share_stopped": "Gotowy do udostępniania", - "gui_status_indicator_share_working": "Rozpoczynanie…", - "gui_status_indicator_share_started": "Udostępnianie", - "gui_status_indicator_receive_stopped": "Gotowy do odbioru", - "gui_status_indicator_receive_working": "Rozpoczynanie…", - "gui_status_indicator_receive_started": "Odbieram", - "gui_file_info": "{} pliki/ów, {}", - "gui_file_info_single": "{} plik, {}", - "history_in_progress_tooltip": "{} w trakcie", - "history_completed_tooltip": "{} zakończone", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "", - "gui_receive_mode_warning": "Tryb odbioru umożliwia przesyłanie plików do komputera.

Niektóre pliki mogą potencjalnie przejąć kontrolę nad komputerem, jeśli je otworzysz. Otwieraj rzeczy tylko od osób, którym ufasz, lub jeśli wiesz, co robisz.", - "receive_mode_upload_starting": "Wysyłanie o całkowitej wielkości {} rozpoczyna się", - "receive_mode_received_file": "", - "gui_mode_share_button": "Udostępnij pliki", - "gui_mode_receive_button": "Odbierz pliki", - "gui_settings_receiving_label": "Ustawienia odbioru", - "gui_settings_downloads_label": "", - "gui_settings_downloads_button": "Przeglądaj", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Tryb publiczny", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Strona załadowana", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "Wyczyść wszystko", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "Nie można otworzyć folderu, ponieważ nautilus nie jest dostępny. Plik jest tutaj:{}", - "gui_settings_language_label": "Preferowany język", - "gui_settings_language_changed_notice": "Uruchom ponownie OnionShare, aby zastosować nowy język.", - "timeout_upload_still_running": "Czekam na ukończenie wysyłania", - "gui_add_files": "Dodaj pliki", - "gui_add_folder": "Dodaj folder", - "gui_stop_server_autostop_timer_tooltip": "Automatyczne zatrzymanie zakończy się za {}", - "gui_waiting_to_start": "Planowane rozpoczęcie za {}. Kliknij, aby anulować.", - "gui_settings_onion_label": "Ustawienia Onion", - "gui_settings_autostart_timer": "Rozpocznij udział w:", - "gui_server_autostart_timer_expired": "Zaplanowany czas już minął. Dostosuj go, aby rozpocząć udostępnianie.", - "gui_status_indicator_share_scheduled": "Zaplanowane…", - "gui_status_indicator_receive_scheduled": "Zaplanowane…", - "error_cannot_create_data_dir": "Nie można utworzyć folderu danych OnionShare: {}", - "gui_settings_data_dir_label": "Zapisz pliki do", - "gui_settings_data_dir_browse_button": "Przeglądaj", - "systray_page_loaded_message": "Załadowano adres OnionShare", - "systray_share_started_title": "Udostępnianie rozpoczęte", - "systray_share_started_message": "Rozpoczynam wysyłanie plików", - "systray_share_completed_title": "Udostępnianie zakończone", - "systray_share_completed_message": "Zakończono wysyłanie plików", - "systray_share_canceled_title": "Udostępnianie anulowane", - "systray_share_canceled_message": "Anulowano odbieranie plików", - "systray_receive_started_title": "Rozpoczęto odbieranie", - "systray_receive_started_message": "Ktoś wysyła Ci pliki", - "gui_all_modes_history": "Historia", - "gui_all_modes_clear_history": "Wyczyść wszystko", - "gui_all_modes_transfer_started": "Uruchomiono {}", - "gui_all_modes_transfer_finished_range": "Przesłano {} - {}", - "gui_all_modes_transfer_finished": "Przesłano {}", - "gui_all_modes_transfer_canceled_range": "Anulowano {} - {}", - "gui_all_modes_transfer_canceled": "Anulowano {}", - "gui_all_modes_progress_complete": "%p%, upłynęło {0:s}.", - "gui_all_modes_progress_starting": "{0:s}, %p% (obliczanie)", - "gui_share_mode_no_files": "Żadne pliki nie zostały jeszcze wysłane", - "gui_share_mode_autostop_timer_waiting": "Oczekiwanie na zakończenie wysyłania", - "gui_receive_mode_no_files": "Nie odebrano jeszcze żadnych plików", - "gui_receive_mode_autostop_timer_waiting": "Czekam na zakończenie odbioru", - "gui_start_server_autostart_timer_tooltip": "Automatyczne rozpoczęcie zakończy się za {}", - "gui_settings_autostart_timer_checkbox": "Użyj czasomierza automatycznego rozpoczęcia", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Czas automatycznego zakończenia powinien być późniejszy niż czas automatycznego rozpoczęcia. Dostosuj go, aby rozpocząć udostępnianie.", - "gui_connect_to_tor_for_onion_settings": "Połącz się z Tor, aby zobaczyć ustawienia usług onion", - "gui_all_modes_progress_eta": "{0:s}, pozostało: {1:s}, %p%", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "incorrect_password": "Niepoprawne hasło", - "gui_settings_csp_header_disabled_option": "Wyłącz nagłówek Polityki Bezpieczeństwa Treści", - "gui_website_mode_no_files": "Żadna strona nie została jeszcze udostępniona", - "gui_website_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może odwiedzić twoją stronę używając przeglądarki Tor Browser: ", - "gui_settings_website_label": "Ustawienia Strony", - "history_requests_tooltip": "{} żądań z sieci", - "gui_mode_website_button": "Opublikuj Stronę", - "gui_settings_individual_downloads_label": "Odznacz, aby umożliwić pobieranie pojedynczych plików.", - "gui_close_tab_warning_title": "Na pewno?", - "gui_tab_name_chat": "Czat", - "gui_tab_name_website": "Strona internetowa", - "gui_tab_name_receive": "Odbierz", - "gui_tab_name_share": "Udostępnij", - "gui_main_page_chat_button": "Rozpocznij czatowanie", - "gui_main_page_website_button": "Rozpocznij hostowanie", - "gui_main_page_receive_button": "Rozpocznij odbieranie", - "gui_main_page_share_button": "Rozpocznij udostępnianie", - "gui_new_tab_chat_button": "Czatuj anonimowo", - "gui_new_tab_website_button": "Hostuj witrynę internetową", - "gui_new_tab_receive_button": "Odbierz pliki", - "gui_new_tab_share_button": "Udostępnij pliki", - "gui_new_tab_tooltip": "Otwórz nową kartę", - "gui_new_tab": "Nowa karta", - "gui_open_folder_error": "Nie udało się otworzyć folderu za pomocą xdg-open. Plik jest tutaj: {}", - "gui_qr_code_description": "Zeskanuj ten kod QR za pomocą czytnika QR, takiego jak aparat w telefonie, aby łatwiej udostępnić komuś adres OnionShare.", - "gui_qr_code_dialog_title": "Kod QR OnionShare", - "gui_show_qr_code": "Pokaż kod QR", - "gui_receive_flatpak_data_dir": "Ponieważ zainstalowałeś OnionShare przy użyciu Flatpak, musisz zapisywać pliki w folderze w ~/OnionShare.", - "gui_chat_stop_server": "Zatrzymaj serwer czatu", - "gui_chat_start_server": "Uruchom serwer czatu", - "gui_file_selection_remove_all": "Usuń wszystko", - "gui_remove": "Usuń", - "error_port_not_available": "Port OnionShare nie jest dostępny", - "gui_rendezvous_cleanup_quit_early": "Zakończ wcześniej", - "gui_rendezvous_cleanup": "Oczekiwanie na zamknięcie obwodów Tor, aby upewnić się, że pliki zostały pomyślnie przeniesione.\n\nMoże to potrwać kilka minut.", - "mode_settings_website_disable_csp_checkbox": "Nie ustawiaj nagłówka Content Security Policy (pozwala Twojej witrynie na korzystanie z zasobów zewnętrznych)", - "mode_settings_receive_data_dir_browse_button": "Przeglądaj", - "mode_settings_receive_data_dir_label": "Zapisz pliki do", - "mode_settings_share_autostop_sharing_checkbox": "Zatrzymaj udostępnianie po wysłaniu plików (odznacz, aby umożliwić pobieranie pojedynczych plików)", - "mode_settings_legacy_checkbox": "Użyj starszego adresu (onion service v2, niezalecane)", - "mode_settings_autostop_timer_checkbox": "Zatrzymaj usługę .onion w zaplanowanym czasie", - "mode_settings_autostart_timer_checkbox": "Uruchom usługę cebulową w zaplanowanym czasie", - "mode_settings_public_checkbox": "To jest publiczny serwis OnionShare (wyłącza klucz prywatny)", - "mode_settings_persistent_checkbox": "Zapisz tę kartę i automatycznie otwieraj ją, gdy uruchamiam OnionShare", - "mode_settings_advanced_toggle_hide": "Ukryj ustawienia zaawansowane", - "mode_settings_advanced_toggle_show": "Pokaż ustawienia zaawansowane", - "gui_quit_warning_cancel": "Anuluj", - "gui_quit_warning_description": "Udostępnianie jest aktywne w niektórych kartach. Jeśli zakończysz pracę, wszystkie karty zostaną zamknięte. Czy na pewno chcesz zrezygnować?", - "gui_quit_warning_title": "Na pewno?", - "gui_close_tab_warning_cancel": "Anuluj", - "gui_close_tab_warning_close": "Zamknij", - "gui_close_tab_warning_website_description": "Prowadzisz aktywny hosting strony internetowej. Czy na pewno chcesz zamknąć tę zakładkę?", - "gui_close_tab_warning_receive_description": "Jesteś w trakcie odbierania plików. Czy na pewno chcesz zamknąć tę zakładkę?", - "gui_close_tab_warning_share_description": "Jesteś w trakcie wysyłania plików. Czy na pewno chcesz zamknąć tę kartę?", - "gui_close_tab_warning_persistent_description": "Ta zakładka jest trwała. Jeśli ją zamkniesz, stracisz adres .onion, którego używa. Czy na pewno chcesz ją zamknąć?", - "gui_color_mode_changed_notice": "Uruchom ponownie OnionShare aby zastosować nowy tryb kolorów.", - "gui_chat_url_description": "Każdy z tym adresem OnionShare oraz kluczem prywatnym może dołączyć do tego czatu używając Przeglądarki Tor: ", - "mode_settings_receive_disable_files_checkbox": "Wyłącz wysyłanie plików", - "gui_status_indicator_chat_scheduled": "Zaplanowane…", - "gui_status_indicator_chat_working": "Uruchamianie…", - "history_receive_read_message_button": "Czytaj Wiadomość", - "mode_settings_receive_webhook_url_checkbox": "Użyj powiadomień webhook", - "mode_settings_receive_disable_text_checkbox": "Nie wysyłaj tekstu", - "mode_settings_title_label": "Tytuł", - "gui_settings_theme_dark": "Ciemny", - "gui_settings_theme_light": "Jasny", - "gui_settings_theme_auto": "Automatyczny", - "gui_settings_theme_label": "Motyw", - "gui_status_indicator_chat_started": "Czatuje", - "gui_status_indicator_chat_stopped": "Gotowy do rozmowy", - "gui_client_auth_instructions": "Następnie wyślij klucz prywatny, by umożliwić dostęp do Twojego serwisu OnionShare:", - "gui_url_instructions_public_mode": "Wyślij poniższy adres OnionShare:", - "gui_url_instructions": "Najpierw wyślij poniższy adres OnionShare:", - "gui_chat_url_public_description": "Każdy z tym adresem OnionShare może dołączyć do tego pokoju używając Przeglądarki Tor: ", - "gui_receive_url_public_description": "Każdy z tym adresem OnionShare może przesyłać pliki na Twój komputer za pomocą przeglądarki Tor Browser: ", - "gui_website_url_public_description": "Każdy z tym adresem OnionShare może odwiedzić twoją stronę używając przeglądarki Tor Browser: ", - "gui_share_url_public_description": "Każdy z tym adresem OnionShare może pobrać Twoje pliki za pomocą przeglądarki Tor Browser: ", - "gui_server_doesnt_support_stealth": "Przepraszamy, ta wersja Tora nie obsługuje skrytego uwierzytelniania klienta. Spróbuj z nowszą wersją Tora lub użyj trybu „publicznego”, jeśli nie musi być prywatny.", - "gui_please_wait_no_button": "Rozpoczynam…", - "gui_hide": "Ukryj", - "gui_reveal": "Odsłoń", - "gui_qr_label_auth_string_title": "Klucz Prywatny", - "gui_copy_client_auth": "Skopiuj Klucz Prywatny", - "gui_copied_client_auth_title": "Skopiowany Klucz Prywatny", - "gui_copied_client_auth": "Klucz Prywatny skopiowany do schowka", - "gui_qr_label_url_title": "Adres OnionShare" -} diff --git a/desktop/src/onionshare/resources/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json deleted file mode 100644 index cab895e3..00000000 --- a/desktop/src/onionshare/resources/locale/pt_BR.json +++ /dev/null @@ -1,338 +0,0 @@ -{ - "config_onion_service": "Configurando o serviço onion na porta {0:d}.", - "preparing_files": "Comprimindo arquivos.", - "give_this_url": "Dar este endereço ao destinatário:", - "give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:", - "give_this_url_receive": "Enviar este endereço à pessoa remetente:", - "give_this_url_receive_stealth": "Dar este endereço e HidServAuth à pessoa remetente:", - "ctrlc_to_stop": "Pressione Ctrl+C para interromper o servidor", - "not_a_file": "{0:s} não é um arquivo válido.", - "not_a_readable_file": "{0:s} não é um arquivo legível.", - "no_available_port": "Não foi possível encontrar uma porta disponível para iniciar o serviço onion", - "other_page_loaded": "Endereço carregado", - "close_on_autostop_timer": "Interrompido ao final da contagem do cronômetro automático", - "closing_automatically": "Interrompido devido à conclusão da transferência", - "timeout_download_still_running": "Esperando que o download termine", - "large_filesize": "Aviso: O envio de arquivos grandes pode levar horas", - "systray_menu_exit": "Sair", - "systray_download_started_title": "O download de OnionShare começou", - "systray_download_started_message": "Alguém começou fazer o download dos seus arquivos", - "systray_download_completed_title": "O download de OnionShare terminou", - "systray_download_completed_message": "Essa pessoa terminou de fazer o download dos seus arquivos", - "systray_download_canceled_title": "O download de OnionShare foi cancelado", - "systray_download_canceled_message": "Essa pessoa cancelou o download", - "systray_upload_started_title": "OnionShare começou a carregar", - "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_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_verbose": "Registrar erros do OnionShare no stdout e erros de rede, no disco", - "help_filename": "Lista de arquivos ou pastas a compartilhar", - "help_config": "Personalizar a configuração JSON de localização de arquivos (opcional)", - "gui_drag_and_drop": "Arraste e solte arquivos e pastas para começar a compartilhá-los", - "gui_add": "Adicionar", - "gui_delete": "Apagar", - "gui_choose_items": "Escolher", - "gui_share_start_server": "Começar a compartilhar", - "gui_share_stop_server": "Parar de compartilhar", - "gui_share_stop_server_autostop_timer": "Parar de compartilhar em ({})", - "gui_share_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às", - "gui_receive_start_server": "Iniciar o Modo de Recepção", - "gui_receive_stop_server": "Parar o Modo Recepção", - "gui_receive_stop_server_autostop_timer": "Parar o Modo Recepção ({} para terminar)", - "gui_receive_stop_server_autostop_timer_tooltip": "O cronômetro automático termina às {}", - "gui_copy_url": "Copiar endereço", - "gui_downloads": "Histórico de download", - "gui_no_downloads": "Nenhum download por enquanto", - "gui_canceled": "Cancelado", - "gui_copied_url_title": "O endereço OnionShare foi copiado", - "gui_copied_url": "O endereço OnionShare foi copiado para a área de transferência", - "gui_please_wait": "Começando... Clique para cancelar.", - "gui_download_upload_progress_complete": "%p%, {0:s} decorridos.", - "gui_download_upload_progress_starting": "{0:s}, %p% (calculando)", - "gui_download_upload_progress_eta": "{0:s}, tempo estimado para término: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Mais devagar", - "gui_share_quit_warning": "O envio dos seus arquivos ainda não terminou. Você tem certeza de que quer sair de OnionShare?", - "gui_receive_quit_warning": "O recebimento dos seus arquivos ainda não terminou. Você tem certeza de que quer sair do OnionShare?", - "gui_quit_warning_quit": "Sair", - "gui_quit_warning_dont_quit": "Cancelar", - "zip_progress_bar_format": "Comprimindo: %p%", - "error_stealth_not_supported": "Para usar uma autorização de cliente, você precisa ao menos de Tor 0.2.9.1-alpha (ou Navegador Tor 6.5) e de python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare requer ao menos Tor 0.2.7.1 e python3-stem 1.4.0.", - "gui_settings_window_title": "Configurações", - "gui_settings_whats_this": "O que é isso?", - "gui_settings_stealth_option": "Usar autorização de cliente", - "gui_settings_autoupdate_label": "Procurar por uma nova versão", - "gui_settings_autoupdate_option": "Notificar-me quando uma nova versão estiver disponível", - "gui_settings_autoupdate_timestamp": "Última verificação: {}", - "gui_settings_autoupdate_timestamp_never": "Nunca", - "gui_settings_autoupdate_check_button": "Procurar por uma nova versão", - "gui_settings_general_label": "Configurações gerais", - "gui_settings_sharing_label": "Configurações de compartilhamento", - "gui_settings_close_after_first_download_option": "Parar de compartilhar após o envio dos arquivos", - "gui_settings_connection_type_label": "Como OnionShare normalmente conecta-se a Tor?", - "gui_settings_connection_type_bundled_option": "Usar a versão de Tor já instalada no OnionShare", - "gui_settings_connection_type_automatic_option": "Tentar configuração automática com o Navegador Tor", - "gui_settings_connection_type_control_port_option": "Conectar usando porta de controle", - "gui_settings_connection_type_socket_file_option": "Conectar usando um arquivo socket", - "gui_settings_connection_type_test_button": "Testar a conexão com a rede Tor", - "gui_settings_control_port_label": "Porta de controle", - "gui_settings_socket_file_label": "Arquivo socket", - "gui_settings_socks_label": "Porta SOCKS", - "gui_settings_authenticate_label": "Configurações de autenticação do Tor", - "gui_settings_authenticate_no_auth_option": "Sem autenticação nem cookie de autenticação", - "gui_settings_authenticate_password_option": "Senha", - "gui_settings_password_label": "Senha", - "gui_settings_tor_bridges": "Conectar usando uma ponte Tor?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Não usar pontes", - "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportadores plugáveis obfs4 já instalados", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportadores plugáveis obfs4 já instalados (requer obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportadores plugáveis meek_lite (Azure) já instalados", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportadores plugáveis meek_lite (Azure) já instalados (requer obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito custosas para o Projeto Tor.

Use-as somente se você não conseguir se conectar ao Tor diretamente, via transportadores obfs4 ou outras pontes comuns.", - "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas", - "gui_settings_tor_bridges_custom_label": "Você pode obter pontes em https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nenhuma das ponte adicionadas funciona. Tente usá-las de novo ou adicione outras.", - "gui_settings_button_save": "Salvar", - "gui_settings_button_cancel": "Cancelar", - "gui_settings_button_help": "Ajuda", - "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 foi possível conectar ao controlador do Tor às {}:{}.", - "settings_error_socket_file": "Não foi possível conectar ao controlador Tor usando o arquivo de socket {}.", - "settings_error_auth": "Conectado a {}:{}, mas não foi possível autenticar. Talvez este não seja um controlador Tor?", - "settings_error_missing_password": "Conectado ao controlador Tor, mas é preciso ter uma senha para autenticar.", - "settings_error_unreadable_cookie_file": "Conectado ao controlador Tor, mas talvez a senha esteja incorreta ou o seu usuário não possua autorização para ler o arquivo de cookie.", - "settings_error_bundled_tor_not_supported": "Não é possível usar a versão de Tor que vem junto com OnionShare, em modo 'programação', com Windows ou macOS.", - "settings_error_bundled_tor_timeout": "A conexão ao Tor está demorando muito. O seu computado está conectado à Internet e o seu relógio de sistema, ajustado?", - "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}", - "settings_test_success": "Conectado ao controlador Tor.\n\nVersão do Tor: {}\nPossui suporte para serviços onion efêmeros: {}.\nPossui suporte para autenticação de cliente: {}.\nPossui suporte para a próxima geração de endereços .onion: {}.", - "error_tor_protocol_error": "Houve um erro com Tor: {}", - "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com Tor", - "error_invalid_private_key": "Este tipo de chave privada não possui suporte", - "connecting_to_tor": "Conectando à rede Tor", - "update_available": "Atualização de OnionShare disponível. Clique aqui para obtê-la.

Você está usando a versão {} e a última é {}.", - "update_error_check_error": "Não foi possível verificar a nova versão: talvez você não esteja conectado ao Tor ou o site OnionShare esteja inativo?", - "update_error_invalid_latest_version": "Não foi possível verificar a nova versão: o site OnionShare está dizendo que a versão mais recente é a irreconhecível '{}'…", - "update_not_available": "Você está rodando a última versão de OnionShare.", - "gui_tor_connection_ask": "Abrir as configurações para consertar a conexão ao Tor?", - "gui_tor_connection_ask_open_settings": "Sim", - "gui_tor_connection_ask_quit": "Sair", - "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 ao Tor.\n\nTenha certeza que você está conectado à Internet, então abra OnionShare novamente e configure sua conexão ao Tor.", - "gui_tor_connection_lost": "Desconectado do Tor.", - "gui_server_started_after_autostop_timer": "O cronômetro de parada automática acabou antes que o servidor fosse iniciado. Por favor, faça um novo compartilhamento.", - "gui_server_autostop_timer_expired": "O cronômetro já esgotou. Por favor, ajuste-o para começar a compartilhar.", - "share_via_onionshare": "Compartilhar via OnionShare", - "gui_save_private_key_checkbox": "Usar o mesmo endereço", - "gui_share_url_description": "Qualquer pessoa com este endereço e esta chave privada do OnionShare pode baixar seus arquivos usando o Navegador Tor: ", - "gui_receive_url_description": "Qualquer pessoa com este endereço do OnionShare e chave privada pode carregar arquivos no seu computador usando o Navegador Tor: ", - "gui_url_label_persistent": "Este compartilhamento não vai ser encerrado automaticamente.

Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar um endereço novo a cada vez, desative a opção \"Usar o mesmo endereço\" nas configurações.)", - "gui_url_label_stay_open": "Este compartilhamento não será encerrado automaticamente.", - "gui_url_label_onetime": "Este compartilhamento será encerrado após completar uma vez.", - "gui_url_label_onetime_and_persistent": "Este compartilhamento não será encerrado automaticamente.

Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar endereços únicos a cada compartilhamento, desative a opção \"Usar o mesmo endereço\" nas configurações.)", - "gui_status_indicator_share_stopped": "Pronto para compartilhar", - "gui_status_indicator_share_working": "Começando…", - "gui_status_indicator_share_started": "Compartilhando", - "gui_status_indicator_receive_stopped": "Pronto para receber", - "gui_status_indicator_receive_working": "Começando…", - "gui_status_indicator_receive_started": "Recebendo", - "gui_file_info": "{} arquivos, {}", - "gui_file_info_single": "{} arquivo, {}", - "history_in_progress_tooltip": "{} em curso", - "history_completed_tooltip": "{} completado", - "info_in_progress_uploads_tooltip": "{} upload(s) em progresso", - "info_completed_uploads_tooltip": "{} upload(s) completado(s)", - "error_cannot_create_downloads_dir": "Não foi possível a pasta do modo de recepção: {}", - "receive_mode_downloads_dir": "Os arquivos enviados para você aparecem na seguinte pasta: {}", - "receive_mode_warning": "Atenção: O modo de recepção permite que as pessoas enviem arquivos para o seu computador. Alguns arquivos podem tomar o controle do seu computador se você abri-los. Apenas abra arquivos enviados por pessoas que você confia, ou se você souber o que está fazendo.", - "gui_receive_mode_warning": "O modo de recepção permite que pessoas enviem arquivos para o seu computador.

Alguns arquivos podem tomar o controle do seu computador se você abri-los. Apenas abra arquivos enviados por pessoas em quem você confia, ou se souber o que está fazendo.", - "receive_mode_upload_starting": "Um upload de tamanho total {} está sendo iniciado", - "receive_mode_received_file": "Recebido: {}", - "gui_mode_share_button": "Compartilhar Arquivos", - "gui_mode_receive_button": "Receber Arquivos", - "gui_settings_receiving_label": "Configurações de recepção", - "gui_settings_downloads_label": "Armazenar arquivos em", - "gui_settings_downloads_button": "Navegar", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Modo público", - "systray_close_server_title": "Servidor OnionShare encerrado", - "systray_close_server_message": "Um usuário encerrou o servidor", - "systray_page_loaded_title": "A página carregou", - "systray_download_page_loaded_message": "Um usuário carregou a página de download", - "systray_upload_page_loaded_message": "Um usuário carregou a página de upload", - "gui_uploads": "Histórico de Uploads", - "gui_no_uploads": "Nenhum upload realizado", - "gui_clear_history": "Limpar Tudo", - "gui_upload_in_progress": "Upload Iniciado {}", - "gui_upload_finished_range": "Upload de {} feito para {}", - "gui_upload_finished": "Upload realizado de {}", - "gui_download_in_progress": "Download Iniciado {}", - "gui_open_folder_error_nautilus": "Não foi possível abrir a pasta porque o nautilus não está disponível. O arquivo está aqui: {}", - "gui_settings_language_label": "Língua", - "gui_settings_language_changed_notice": "Reinicie OnionShare para que o novo idioma seja aplicado.", - "timeout_upload_still_running": "Esperando o término do upload", - "gui_add_files": "Adicionar Arquivos", - "gui_add_folder": "Adicionar Pasta", - "gui_share_mode_no_files": "Nenhum arquivo ainda enviado", - "gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion", - "error_cannot_create_data_dir": "Pasta de dados OnionShare não foi criada: {}", - "receive_mode_data_dir": "Os arquivos que lhe foram enviados estão nesta pasta: {}", - "gui_settings_data_dir_label": "Salvar arquivos em", - "gui_settings_data_dir_browse_button": "Navegar", - "systray_share_started_title": "O compartilhamento iniciou", - "systray_share_started_message": "Iniciando o envio de arquivos", - "systray_share_completed_title": "O compartilhamento completou-se", - "systray_share_completed_message": "O envio de arquivos terminou", - "systray_share_canceled_title": "O compartilhamento foi anulado", - "systray_share_canceled_message": "Alguém cancelou o recebimento dos seus arquivos", - "systray_receive_started_title": "O recebimento iniciou", - "systray_receive_started_message": "Alguém está lhe enviando arquivos", - "gui_all_modes_history": "Histórico", - "gui_all_modes_clear_history": "Apagar Tudo", - "gui_all_modes_transfer_started": "Iniciou {}", - "gui_all_modes_transfer_finished_range": "Transferido {} - {}", - "gui_all_modes_transfer_finished": "Transferido {}", - "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", - "gui_all_modes_transfer_canceled": "Cancelado {}", - "gui_share_mode_autostop_timer_waiting": "Esperando para completar o envio", - "gui_receive_mode_no_files": "Nenhum arquivo recebido", - "gui_receive_mode_autostop_timer_waiting": "Esperando para completar o recebimento", - "gui_settings_onion_label": "Configurações do Onion", - "systray_page_loaded_message": "O endereço OnionShare carregou", - "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%", - "gui_stop_server_autostop_timer_tooltip": "O relógio de interrupção automática encerra às {}", - "gui_start_server_autostart_timer_tooltip": "O cronômetro de iniciação automática acaba às {}", - "gui_waiting_to_start": "Marcado para começar daqui a {}. Clique para cancelar.", - "gui_settings_autostart_timer_checkbox": "Usar cronômetro para começar automaticamente", - "gui_settings_autostart_timer": "Começar o compartilhamento às:", - "gui_server_autostart_timer_expired": "O horário marcado já passou. Por favor, atualize-o para começar a compartilhar.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O horário para o término automático não pode ser o mesmo ou anterior aquele marcado para começar. Por favor, ajuste-o para começar a compartilhar.", - "gui_status_indicator_share_scheduled": "Marcado…", - "gui_status_indicator_receive_scheduled": "Marcado…", - "days_first_letter": "dia(s)", - "hours_first_letter": "hora(s)", - "minutes_first_letter": "minuto(s)", - "seconds_first_letter": "segundo(s)", - "incorrect_password": "Senha incorreta", - "gui_settings_individual_downloads_label": "Desmarque para permitir download de arquivos individuais", - "gui_settings_csp_header_disabled_option": "Desabilitar cabeçalho Política de Segurança de Conteúdo", - "gui_website_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode visitar seu site usando o Navegador Tor: ", - "gui_mode_website_button": "Publicar Website", - "gui_website_mode_no_files": "Nenhum website compartilhado ainda", - "history_requests_tooltip": "{} solicitações da web", - "gui_settings_website_label": "Configurações do Website", - "mode_settings_website_disable_csp_checkbox": "Não envie o cabeçalho padrão da Política de Segurança de Conteúdo (permite que seu website utilize recursos de terceiros)", - "mode_settings_receive_data_dir_browse_button": "Navegar", - "mode_settings_receive_data_dir_label": "Salvar arquivos em", - "mode_settings_share_autostop_sharing_checkbox": "Interrompa o compartilhamento após o envio dos arquivos (desmarque para permitir o download de arquivos individuais)", - "mode_settings_legacy_checkbox": "Usar um endereço herdado (serviço de onion v2, não recomendado)", - "mode_settings_autostop_timer_checkbox": "Interromper o serviço de onion na hora programada", - "mode_settings_autostart_timer_checkbox": "Iniciar serviço de onion na hora programada", - "mode_settings_public_checkbox": "Este é um serviço público OnionShare (desativa a chave privada)", - "mode_settings_persistent_checkbox": "Salvar essa guia e abra-a automaticamente quando eu abrir o OnionShare", - "mode_settings_advanced_toggle_hide": "Ocultar configurações avançadas", - "mode_settings_advanced_toggle_show": "Mostrar configurações avançadas", - "gui_quit_warning_cancel": "Cancelar", - "gui_quit_warning_description": "O compartilhamento está ativo em algumas de suas guias. Se você sair, todas as suas guias serão fechadas. Você tem certeza que quer sair?", - "gui_quit_warning_title": "Você tem certeza?", - "gui_close_tab_warning_cancel": "Cancelar", - "gui_close_tab_warning_close": "Fechar", - "gui_close_tab_warning_website_description": "Você está hospedando ativamente um site. Tem certeza de que deseja fechar esta guia?", - "gui_close_tab_warning_receive_description": "Você está recebendo arquivos. Tem certeza de que deseja fechar esta guia?", - "gui_close_tab_warning_share_description": "Você está enviando arquivos. Tem certeza de que deseja fechar esta guia?", - "gui_close_tab_warning_persistent_description": "Essa guia é persistente. Se você fechá-lo, perderá o endereço de onion que está usando. Tem certeza de que deseja fechá-lo?", - "gui_close_tab_warning_title": "Você tem certeza?", - "gui_new_tab_website_description": "Hospede um site estático de onion HTML a partir do seu computador.", - "gui_new_tab_website_button": "Publicar site", - "gui_new_tab_receive_description": "Transforme seu computador em uma caixa de depósito online. As pessoas poderão usar o Navegador Tor para enviar arquivos para o seu computador.", - "gui_new_tab_receive_button": "Receber arquivos", - "gui_new_tab_share_description": "Escolha os arquivos no seu computador para enviar para outra pessoa. A pessoa ou pessoas para quem você deseja enviar os arquivos precisarão usar o Navegador Tor para fazer o download deles.", - "gui_new_tab_share_button": "Compartilhar arquivos", - "gui_new_tab_tooltip": "Abrir uma nova aba", - "gui_new_tab": "Nova aba", - "gui_tab_name_website": "Site", - "gui_tab_name_receive": "Receber", - "gui_tab_name_share": "Compartilhar", - "gui_main_page_chat_button": "Iniciar a conversar", - "gui_main_page_website_button": "Iniciar a hospedar", - "gui_main_page_receive_button": "Iniciar a receber", - "gui_main_page_share_button": "Iniciar compartilhamento", - "gui_new_tab_chat_button": "Converse anonimamente", - "gui_open_folder_error": "Falha ao abrir a pasta com xdg-open. O arquivo está aqui: {}", - "gui_qr_code_description": "Leia este código QR com um leitor, como a câmera do seu celular, para compartilhar mais facilmente o endereço OnionShare com alguém.", - "gui_qr_code_dialog_title": "Código QR OnionShare", - "gui_show_qr_code": "Mostrar QR Code", - "gui_receive_flatpak_data_dir": "Como você instalou o OnionShare usando o Flatpak, você deve salvar os arquivos em uma pasta em ~ / OnionShare.", - "gui_chat_stop_server": "Parar o servidor de conversas", - "gui_chat_start_server": "Iniciar um servidor de conversas", - "gui_file_selection_remove_all": "Remover tudo", - "gui_remove": "Remover", - "gui_tab_name_chat": "Bate-papo", - "error_port_not_available": "Porta OnionShare não disponível", - "gui_chat_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode entrar nesta sala de bate-papo usando o Navegador Tor: ", - "gui_rendezvous_cleanup_quit_early": "Fechar facilmente", - "gui_rendezvous_cleanup": "Aguardando o fechamento dos circuitos do Tor para ter certeza de que seus arquivos foram transferidos com sucesso.\n\nIsso pode demorar alguns minutos.", - "gui_color_mode_changed_notice": "Reinicie o OnionShare para que o novo modo de cor seja aplicado.", - "history_receive_read_message_button": "Ler mensagem", - "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificação", - "mode_settings_receive_disable_files_checkbox": "Desativar o carregamento de arquivos", - "mode_settings_receive_disable_text_checkbox": "Desativar envio de texto", - "mode_settings_title_label": "Título personalizado", - "gui_status_indicator_chat_started": "Conversando", - "gui_status_indicator_chat_scheduled": "Programando…", - "gui_status_indicator_chat_working": "Começando…", - "gui_status_indicator_chat_stopped": "Pronto para conversar", - "gui_share_url_public_description": "Qualquer pessoa com este endereço OnionShare pode baixar seus arquivos usando o Navegador Tor: ", - "gui_server_doesnt_support_stealth": "Desculpe, esta versão de Tor não suporta (Autenticação de Cliente) furtiva. Por favor, tente uma versão mais recente de Tor ou utilize o modo 'público' se não houver a necessidade de privacidade.", - "gui_please_wait_no_button": "Iniciando…", - "gui_hide": "Ocultar", - "gui_reveal": "Mostrar", - "gui_qr_label_auth_string_title": "Chave Privada", - "gui_qr_label_url_title": "Endereço OnionShare", - "gui_copied_client_auth": "Chave Privada copiada para a área de transferência", - "gui_copied_client_auth_title": "Chave Privada Copiada", - "gui_copy_client_auth": "Copiar Chave Privada", - "gui_settings_theme_auto": "Automático", - "gui_settings_theme_dark": "Escuro", - "gui_settings_theme_light": "Claro", - "gui_settings_theme_label": "Tema", - "gui_client_auth_instructions": "Em seguida, envie a chave privada para permitir o acesso ao seu serviço OnionShare:", - "gui_url_instructions_public_mode": "Envie o endereço OnionShare abaixo:", - "gui_url_instructions": "Primeiro, envie o endereço OnionShare abaixo:", - "gui_chat_url_public_description": "Qualquer pessoa com este endereço OnionShare pode entrar nesta sala de bate-papo usando o Navegador Tor: ", - "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode carregar arquivos para o seu computador usando o Navegador Tor: ", - "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Navegador Tor: ", - "gui_dragdrop_sandbox_flatpak": "Para tornar a ferramenta Flatpak sandbox mais segura, a função de arrastar e largar não é suportada. Em vez disso, use os botões Adicionar Arquivos e Adicionar Pasta para procurar por arquivos.", - "gui_tor_settings_window_title": "Configurações do Tor", - "gui_settings_controller_extras_label": "Configurações do Tor", - "gui_settings_tor_bridges_label": "Pontes ajudam a acessar a Rede Tor em locais onde o Tor está bloqueado. Dependendo de onde você estiver, uma ponte pode funcionar melhor que outra.", - "gui_settings_bridge_use_checkbox": "Usar uma ponte", - "gui_settings_bridge_radio_builtin": "Selecione uma ponte embutida", - "gui_settings_bridge_none_radio_option": "Não usar uma ponte", - "gui_settings_bridge_moat_radio_option": "Solicite uma ponte no torproject.org", - "gui_settings_bridge_moat_button": "Solicitar uma nova ponte", - "gui_settings_bridge_custom_radio_option": "Fornece uma ponte que você teve acesso de uma fonte confiável", - "gui_settings_bridge_custom_placeholder": "digite adress:port (um por linha)", - "gui_settings_moat_bridges_invalid": "Você ainda não solicitou uma ponte do torproject.org.", - "gui_settings_stop_active_tabs_label": "Há serviços funcionando em algumas de suas abas.\nVocê deve parar todos os serviços para alterar suas configurações Tor.", - "gui_settings_version_label": "Você está usando o OnionShare {}", - "gui_settings_help_label": "Precisa de ajuda? Veja docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Enviar um cabeçalho personalizado da Política de Segurança de Conteúdo", - "moat_contact_label": "Contactando BridgeDB...", - "moat_captcha_label": "Resolva o CAPTCHA para solicitar uma ponte.", - "moat_captcha_placeholder": "Digite os caracteres que aparecem na imagem", - "moat_captcha_submit": "Enviar", - "moat_captcha_reload": "Recarregar", - "moat_bridgedb_error": "Erro ao contactar BridgeDB.", - "moat_captcha_error": "A solução não está correta. Por favor tente novamente.", - "moat_solution_empty_error": "Você deve informar os caracteres que aparecem na imagem", - "mode_tor_not_connected_label": "OnionShare não está conectado com a rede Tor" -} diff --git a/desktop/src/onionshare/resources/locale/pt_PT.json b/desktop/src/onionshare/resources/locale/pt_PT.json deleted file mode 100644 index b7e63075..00000000 --- a/desktop/src/onionshare/resources/locale/pt_PT.json +++ /dev/null @@ -1,319 +0,0 @@ -{ - "config_onion_service": "A configurar o serviço onion na porta {0:d}.", - "preparing_files": "A comprimir os ficheiros.", - "give_this_url": "Dar este endereço ao destinatário:", - "give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:", - "give_this_url_receive": "Dar este endereço ao remetente:", - "give_this_url_receive_stealth": "Dar este endereço e HidServAuth ao remetente:", - "ctrlc_to_stop": "Pressionar Ctrl-C para parar o servidor", - "not_a_file": "{0:s} não é um ficheiro válido.", - "not_a_readable_file": "{0:s} não é um ficheiro legível.", - "no_available_port": "Não foi possível encontrar uma porta disponível para iniciar o serviço onion", - "other_page_loaded": "Endereço carregado", - "close_on_autostop_timer": "Parado porque o cronómetro de paragem automática expirou", - "closing_automatically": "Parado porque a transferência está concluída", - "timeout_download_still_running": "", - "large_filesize": "Aviso: o envio de ficheiros grandes pode levar várias horas", - "systray_menu_exit": "Sair", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "Não usar o Tor (apenas para programadores)", - "help_stay_open": "Continuar a partilhar após o envio dos ficheiros", - "help_autostop_timer": "Parar de partilhar após um número determinado de segundos", - "help_stealth": "Usar autorização de cliente (avançado)", - "help_receive": "Receber partilhas em vez de de enviá-las", - "help_debug": "Registar erros do OnionShare no stdout e erros de rede no disco", - "help_filename": "Lista de ficheiros ou pastas a partilhar", - "help_config": "Localização personalizada do ficheiro de configuração JSON (opcional)", - "gui_drag_and_drop": "Arrastar e largar ficheiros e pastas para começar a partilhar", - "gui_add": "Adicionar", - "gui_delete": "Eliminar", - "gui_choose_items": "Escolher", - "gui_share_start_server": "Começar a partilhar", - "gui_share_stop_server": "Parar de partilhar", - "gui_share_stop_server_autostop_timer": "Parar de partilhar ({})", - "gui_share_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}", - "gui_receive_start_server": "Iniciar modo de receber", - "gui_receive_stop_server": "Parar modo de receber", - "gui_receive_stop_server_autostop_timer": "Parar modo de receber ({} restantes)", - "gui_receive_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}", - "gui_copy_url": "Copiar endereço", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Cancelado", - "gui_copied_url_title": "Endereço OnionShare copiado", - "gui_copied_url": "O endereço OnionShare foi copiado para área de transferência", - "gui_please_wait": "A iniciar… Clique para cancelar.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Mais devagar", - "gui_share_quit_warning": "O envio dos seus ficheiros ainda não terminou. Tem a certeza que deseja sair do OnionShare?", - "gui_receive_quit_warning": "Ainda não recebeu todos os seus ficheiros. Tem a certeza que que deseja sair do OnionShare?", - "gui_quit_warning_quit": "Sair", - "gui_quit_warning_dont_quit": "Cancelar", - "zip_progress_bar_format": "A comprimir: %p%", - "error_stealth_not_supported": "Para utilizar uma autorização de cliente, precisa pelo menos do Tor 0.2.9.1-alpha (ou do Tor Browser 6.5) e do python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare requer pelo menos do Tor 0.2.7.1 e do python3-stem 1.4.0.", - "gui_settings_window_title": "Configurações", - "gui_settings_whats_this": "O que é isto?", - "gui_settings_stealth_option": "Utilizar autorização de cliente", - "gui_settings_autoupdate_label": "Procurar por nova versão", - "gui_settings_autoupdate_option": "Notificar-me quando estiver disponível uma nova versão", - "gui_settings_autoupdate_timestamp": "Última verificação: {}", - "gui_settings_autoupdate_timestamp_never": "Nunca", - "gui_settings_autoupdate_check_button": "Procurar por nova versão", - "gui_settings_general_label": "Configurações gerais", - "gui_settings_sharing_label": "Configurações de partilha", - "gui_settings_close_after_first_download_option": "Parar partilha depois de terminar o envio dos ficheiros", - "gui_settings_connection_type_label": "Como é que o OnionShare deve conectar-se à rede Tor?", - "gui_settings_connection_type_bundled_option": "Utilizar a versão do Tor integrada no OnionShare", - "gui_settings_connection_type_automatic_option": "Tentar configurar automaticamente com o Tor Browser", - "gui_settings_connection_type_control_port_option": "Ligar utilizando a porta de controlo", - "gui_settings_connection_type_socket_file_option": "Ligar utilizando um ficheiro socket", - "gui_settings_connection_type_test_button": "Testar a Ligação ao Tor", - "gui_settings_control_port_label": "Porta de controlo", - "gui_settings_socket_file_label": "Ficheiro socket", - "gui_settings_socks_label": "Porta SOCKS", - "gui_settings_authenticate_label": "Definições de autenticação do Tor", - "gui_settings_authenticate_no_auth_option": "Sem autenticação, ou autenticação por cookie", - "gui_settings_authenticate_password_option": "Palavra-passe", - "gui_settings_password_label": "Palavra-passe", - "gui_settings_tor_bridges": "Ligar com Ponte Tor?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Não utilizar pontes", - "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transportes ligáveis obfs4 integrados", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis obfs4 integrados (requer obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizar transportes ligáveis meek_lite (Azure) integrados", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis meek_lite (Azure) integrados (requer obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek-azure são muito dispendiosas para o Projeto Tor.

Utilize-as apenas se não conseguir ligar diretamente ao Tor, via transportes obfs4, ou outras pontes normais.", - "gui_settings_tor_bridges_custom_radio_option": "Utilizar pontes personalizadas", - "gui_settings_tor_bridges_custom_label": "Pode obter pontes em https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nenhuma das pontes que adicionou funciona.\nVerifique se estão corretas ou adicione outras.", - "gui_settings_button_save": "Guardar", - "gui_settings_button_cancel": "Cancelar", - "gui_settings_button_help": "Ajuda", - "gui_settings_autostop_timer_checkbox": "Utilizar cronómetro de paragem automática", - "gui_settings_autostop_timer": "Parar a partilha em:", - "settings_error_unknown": "Não é possível ligar ao controlador Tor porque as suas definições não fazem sentido.", - "settings_error_automatic": "Não foi possível ligar ao controlador Tor. O Tor Browser (disponível em torproject.org) está a ser executado em segundo plano?", - "settings_error_socket_port": "Não é possível ligar ao controlador Tor em {}:{}.", - "settings_error_socket_file": "Não é possível ligar ao controlador Tor utilizando o ficheiro socket {}.", - "settings_error_auth": "Ligado a {}:{}, mas não é possível autenticar. Talvez não seja um controlador Tor?", - "settings_error_missing_password": "Ligado ao controlador Tor, mas este requer uma palavra-passe para autenticar.", - "settings_error_unreadable_cookie_file": "Ligado ao controlador Tor, mas a palavra-passe pode estar incorreta, ou o seu utilizador não tem autorização para ler o ficheiro do cookie.", - "settings_error_bundled_tor_not_supported": "Utilizar a versão do Tor que vem com o OnionShare não funciona no modo de 'programação' no Windows ou macOS.", - "settings_error_bundled_tor_timeout": "A ligação ao Tor está a demorar muito. Talvez não esteja ligado à Internet, ou o relógio do sistema está incorreto?", - "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}", - "settings_test_success": "Ligado ao controlador Tor.\n\nVersão do Tor: {}\nSuporta serviços onion efémeros: {}.\nSuporta autenticação de cliente: {}.\nSuporta próxima geração de endereços .onion: {}.", - "error_tor_protocol_error": "Ocorreu um erro com o Tor: {}", - "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com o Tor", - "error_invalid_private_key": "Este tipo de chave privada não é suportada", - "connecting_to_tor": "A ligar à rede Tor", - "update_available": "Disponível nova versão do OnionShare. Clique aqui para obtê-la.

Está a utilizar a versão {}, e a versão mais recente é a {}.", - "update_error_check_error": "Não foi possível procurar por nova versão: Talvez não esteja ligado ao Tor, ou o ''site'' da Web OnionShare está em baixo?", - "update_error_invalid_latest_version": "Não foi possível procurar por nova versão: o ''site'' da Web OnionShare está a dizer que a última versão não é reconhecida '{}'…", - "update_not_available": "Está a utilizar a versão mais recente do OnionShare.", - "gui_tor_connection_ask": "Abrir as definições para corrigir a ligação ao Tor?", - "gui_tor_connection_ask_open_settings": "Sim", - "gui_tor_connection_ask_quit": "Sair", - "gui_tor_connection_error_settings": "Tente alterar nas definições o modo como o OnionShare liga à rede Tor.", - "gui_tor_connection_canceled": "Não foi possível ligar à rede Tor.\n\nCertifique-se se está ligado à Internet, depois reabra o OnionShare e configure a sua ligação ao Tor.", - "gui_tor_connection_lost": "Desconectado da rede Tor.", - "gui_server_started_after_autostop_timer": "O cronómetro de paragem automática atingiu o tempo limite antes do servidor iniciar. Crie uma nova partilha.", - "gui_server_autostop_timer_expired": "O cronómetro de paragem automática expirou. Por favor, ajuste-o para começar a partilhar.", - "share_via_onionshare": "Partilhar via OnionShare", - "gui_save_private_key_checkbox": "Usar um endereço persistente", - "gui_share_url_description": "Qualquer pessoa com este endereço do OnionShare pode descarregar os seus ficheiros utilizando o Tor Browser: ", - "gui_receive_url_description": "Qualquer pessoa com este endereço do OnionShare pode enviar ficheiros para o seu computador utilizando o Tor Browser: ", - "gui_url_label_persistent": "Esta partilha não vai ser encerrada automaticamente.

Todas as partilhas posteriores utilizarão este endereço. (Para usar endereços de uma só utilização, desative a opção \"Usar endereço persistente\" nas configurações.)", - "gui_url_label_stay_open": "Esta partilha não irá parar automaticamente.", - "gui_url_label_onetime": "Esta partilha irá parar após ser descarregada uma vez com sucesso.", - "gui_url_label_onetime_and_persistent": "Esta partilha não vai ser encerrada automaticamente.

Todas as partilhas posteriores utilizarão este endereço. (Para usar endereços de uma só utilização, desative a opção \"Usar endereço persistente\" nas configurações.)", - "gui_status_indicator_share_stopped": "Pronto para partilhar", - "gui_status_indicator_share_working": "A começar…", - "gui_status_indicator_share_started": "A partilhar", - "gui_status_indicator_receive_stopped": "Pronto para receber", - "gui_status_indicator_receive_working": "A começar…", - "gui_status_indicator_receive_started": "A receber", - "gui_file_info": "{} ficheiros, {}", - "gui_file_info_single": "{} ficheiro, {}", - "history_in_progress_tooltip": "{} a decorrer", - "history_completed_tooltip": "{} completo", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "Atenção: o modo de receção permite que as pessoas enviem ficheiros para o seu computador. Alguns ficheiros podem tomar o controlo do seu computador se os abrir. Apenas abra ficheiros enviados por pessoas que confia ou se souber o que está a fazer.", - "gui_receive_mode_warning": "O modo de receção permite que as pessoas enviem ficheiros para o seu computador.

Alguns ficheiros podem potencialmente tomar o controlo do seu computador se os abrir. Abra apenas ficheiros enviados por pessoas que confia ou se souber o que está a fazer.", - "receive_mode_upload_starting": "A iniciar o envio com um tamanho total de {}", - "receive_mode_received_file": "Recebido: {}", - "gui_mode_share_button": "Partilhar Ficheiros", - "gui_mode_receive_button": "Receber Ficheiros", - "gui_settings_receiving_label": "Definições de \"receber\"", - "gui_settings_downloads_label": "", - "gui_settings_downloads_button": "Navegar", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Modo público", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Página Carregada", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "Não é possível abrir a pasta porque o Nautilus não está disponível. O ficheiro está em: {}", - "gui_settings_language_label": "Idioma preferido", - "gui_settings_language_changed_notice": "Reiniciar o OnionShare para o novo idioma seja aplicado.", - "gui_add_files": "Adicionar ficheiros", - "gui_add_folder": "Adicionar pasta", - "gui_settings_onion_label": "Definições do onion", - "gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion", - "error_cannot_create_data_dir": "Não foi possível criar a pasta de dados do OnionShare: {}", - "receive_mode_data_dir": "Os ficheiros enviados para si aparecem nesta pasta: {}", - "gui_settings_data_dir_label": "Guardar ficheiros em", - "gui_settings_data_dir_browse_button": "Explorar", - "systray_page_loaded_message": "Endereço do OnionShare carregado", - "systray_share_started_title": "Partilha Iniciada", - "systray_share_started_message": "A iniciar o envio dos ficheiros para alguém", - "systray_share_completed_title": "Partilha Concluída", - "systray_share_completed_message": "O envio dos ficheiros terminou", - "systray_share_canceled_title": "Partilha Cancelada", - "systray_share_canceled_message": "Alguém cancelou a receção dos seus ficheiros", - "systray_receive_started_title": "Receção Iniciada", - "systray_receive_started_message": "Alguém está a enviar-lhe ficheiros", - "gui_all_modes_history": "Histórico", - "gui_all_modes_clear_history": "Limpar Tudo", - "gui_all_modes_transfer_started": "Iniciado em {}", - "gui_all_modes_transfer_finished_range": "Transferido {} - {}", - "gui_all_modes_transfer_finished": "Transferido {}", - "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}", - "gui_all_modes_transfer_canceled": "Cancelado {}", - "gui_all_modes_progress_complete": "%p%, {0:s} decorrido.", - "gui_all_modes_progress_starting": "{0:s}, %p% (a calcular)", - "gui_all_modes_progress_eta": "{0:s}, tempo restante estimado: {1:s}, %p%", - "gui_share_mode_no_files": "Ainda não foram enviados ficheiros", - "gui_share_mode_timeout_waiting": "A esperar que termine o envio", - "gui_receive_mode_no_files": "Ainda não foram recebidos ficheiros", - "gui_receive_mode_timeout_waiting": "A esperar que termine a receção", - "gui_stop_server_autostop_timer_tooltip": "O cronómetro de paragem automática termina em {}", - "gui_start_server_autostart_timer_tooltip": "O cronómetro de início automático começa em {}", - "gui_waiting_to_start": "Agendado para iniciar em {}. Clique para cancelar.", - "gui_settings_autostart_timer_checkbox": "Usar cronómetro de início automático", - "gui_settings_autostart_timer": "Iniciar a partilha em:", - "gui_server_autostart_timer_expired": "O tempo agendado já passou. Por favor, ajuste-o para começar a partilhar.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O tempo de paragem automática não pode ser o mesmo que o tempo do início automático. Por favor, ajuste-o para começar a partilhar.", - "gui_status_indicator_share_scheduled": "Agendado…", - "gui_status_indicator_receive_scheduled": "Agendado…", - "gui_share_mode_autostop_timer_waiting": "A aguardar que o envio termine", - "gui_receive_mode_autostop_timer_waiting": "A aguardar que o recebimento termine", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "incorrect_password": "Palavra-passe incorreta", - "gui_settings_individual_downloads_label": "Desmarque para permitir a transferência de ficheiros individuais", - "gui_settings_csp_header_disabled_option": "Desativar cabeçalho da Política de Segurança de Conteúdo", - "mode_settings_autostop_timer_checkbox": "Parar serviço Onion na hora agendada", - "mode_settings_autostart_timer_checkbox": "Iniciar serviço Onion na hora agendada", - "mode_settings_public_checkbox": "Não utilizar uma palavra-passe", - "mode_settings_advanced_toggle_hide": "Ocultar definições avançadas", - "mode_settings_advanced_toggle_show": "Mostrar definições avançadas", - "gui_quit_warning_cancel": "Cancelar", - "gui_quit_warning_title": "Tem a certeza?", - "gui_close_tab_warning_cancel": "Cancelar", - "gui_close_tab_warning_close": "Fechar", - "gui_close_tab_warning_title": "Tem a certeza?", - "gui_new_tab_website_button": "Publicar Site da Web", - "gui_new_tab_receive_button": "Receber Ficheiros", - "gui_new_tab_share_button": "Partilhar Ficheiros", - "gui_new_tab_tooltip": "Abrir um novo separador", - "gui_new_tab": "Novo Separador", - "gui_website_mode_no_files": "Ainda Sem Site da Web Partilhado", - "gui_settings_website_label": "Definições do ''site'' da Web", - "gui_mode_website_button": "Publicar Site da Web", - "history_requests_tooltip": "{} pedidos da Web", - "gui_website_url_description": "Qualquer pessoa com um endereço do OnionShare pode visitar o seu site utilizando o Tor Browser: ", - "mode_settings_website_disable_csp_checkbox": "Não envie cabeçalho de Política de Segurança de Conteúdo (permite que o seu sítio electrónico utilize recursos de terceiros)", - "mode_settings_receive_data_dir_browse_button": "Navegar", - "mode_settings_receive_data_dir_label": "Guardar ficheiros para", - "mode_settings_share_autostop_sharing_checkbox": "Parar a partilha de ficheiros após terem sido enviados (desmarque para permitir o descarregamento de ficheiros individuais)", - "mode_settings_legacy_checkbox": "Utilize um endereço de herança (serviço onion v2, não é recomendado)", - "mode_settings_persistent_checkbox": "Guarda esta aba e abre-a automaticamente quando eu inicio o OnionShare", - "gui_quit_warning_description": "A partilha está ativa em algumas das suas abas. Se sair, todas as abas serão fechadas. Tem a certeza que pretende sair?", - "gui_close_tab_warning_website_description": "Está no processo ativo de hospedar um sítio eletrónico. Tem a certeza que pretende fechar esta aba?", - "gui_close_tab_warning_receive_description": "Está no processo de receber ficheiros. Tem a certeza que pretende fechar esta aba?", - "gui_close_tab_warning_share_description": "Está no processo de enviar ficheiros. Tem a certeza que pretende fechar esta aba?", - "gui_close_tab_warning_persistent_description": "Esta aba é persistente. Se a fechar vai perder o endereço onion que está a ser usado. Tem a certeza que pretende fechar?", - "gui_tab_name_chat": "Conversa", - "gui_tab_name_website": "Sítio Electrónico", - "gui_tab_name_receive": "Recebe", - "gui_tab_name_share": "Partilha", - "gui_main_page_chat_button": "Começa a Conversar", - "gui_main_page_website_button": "Começa a Hospedar", - "gui_main_page_receive_button": "Começa a Receber", - "gui_main_page_share_button": "Começa a Partilhar", - "gui_new_tab_chat_button": "Converse Anónimamente", - "gui_open_folder_error": "Falhou a abrir a pasta com xdc-open. O ficheiro está aqui: {}", - "gui_qr_code_dialog_title": "Código QR OnionShare", - "gui_show_qr_code": "Mostrar código QR", - "gui_receive_flatpak_data_dir": "Como instalou o OnionShare utilizando Flatpak, deve guardar os ficheiros na pasta ~/OnionShare.", - "gui_chat_stop_server": "Para servidor de conversa", - "gui_chat_start_server": "Começar servidor de conversa", - "gui_file_selection_remove_all": "Remover todos", - "gui_remove": "Remover", - "gui_please_wait_no_button": "A iniciar…", - "gui_hide": "Ocultar", - "gui_reveal": "Revelar", - "gui_qr_label_auth_string_title": "Chave privada", - "gui_qr_label_url_title": "Endereço OnionShare", - "gui_copied_client_auth": "Chave privada copiada para a área de transferência", - "gui_copied_client_auth_title": "Chave privada copiada", - "gui_copy_client_auth": "Copiar chave privada", - "history_receive_read_message_button": "Ler mensagem", - "error_port_not_available": "Porta OnionShare não disponível", - "gui_rendezvous_cleanup_quit_early": "Sair mais cedo", - "gui_rendezvous_cleanup": "A aguardar o fecho dos circuitos do Tor para ter certeza que os seus ficheiros foram transferidos com sucesso.\n\nIsto pode demorar alguns minutos.", - "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificação", - "mode_settings_receive_disable_files_checkbox": "Desativar o envio de ficheiros", - "mode_settings_receive_disable_text_checkbox": "Desativar envio de texto", - "mode_settings_title_label": "Título personalizado", - "gui_color_mode_changed_notice": "Reinicie o OnionShare para que o novo tema seja aplicado.", - "gui_settings_theme_dark": "Escuro", - "gui_settings_theme_light": "Claro", - "gui_settings_theme_auto": "Automático", - "gui_settings_theme_label": "Tema", - "gui_status_indicator_chat_started": "A conversar", - "gui_status_indicator_chat_scheduled": "Agendado…", - "gui_status_indicator_chat_working": "A iniciar…", - "gui_status_indicator_chat_stopped": "Pronto para conversar", - "gui_client_auth_instructions": "Em seguida, envie a chave privada para permitir o acesso ao seu serviço OnionShare:", - "gui_url_instructions_public_mode": "Envie o seguinte endereço OnionShare:", - "gui_url_instructions": "Primeiro, envie o seguinte endereço OnionShare:", - "gui_chat_url_public_description": "Qualquer pessoa com este endereço OnionShare pode entrar nesta sala de conversa usando o Tor Browser: ", - "gui_chat_url_description": "Qualquer pessoa com este endereço OnionShare e chave privada pode entrar nesta sala de conversa usando o Tor Browser: ", - "gui_receive_url_public_description": "Qualquer pessoa com este endereço OnionShare pode enviar ficheiros para o seu computador usando o Tor Browser: ", - "gui_website_url_public_description": "Qualquer pessoa com este endereço OnionShare pode visitar o seu site usando o Tor Browser: ", - "gui_share_url_public_description": "Qualquer pessoa com este endereço OnionShare pode descarregar os seus ficheiros usando o Tor Browser: ", - "gui_server_doesnt_support_stealth": "Desculpe, esta versão do Tor não suporta ocultação (stealth - autenticação do cliente). Por favor, tente uma versão mais recente do Tor ou utilize o modo 'público' se não houver a necessidade de privacidade.", - "gui_dragdrop_sandbox_flatpak": "Para tornar a \"caixa de areia\" mais segura não é possível utilizar a funcionalidade de arrastar e largar, em alternativa procure os ficheiros utilizando os botões de Adicionar Ficheiro e Adicionar Diretório.", - "gui_tor_settings_window_title": "Definições do Tor", - "gui_settings_controller_extras_label": "Definições do Tor", - "gui_settings_bridge_use_checkbox": "Utilizar uma ponte", - "gui_settings_bridge_radio_builtin": "Selecionar uma ponte embutida", - "gui_settings_bridge_none_radio_option": "Não utilizar uma ponte", - "gui_settings_bridge_moat_radio_option": "Pedir uma ponte a torproject.org", - "gui_settings_bridge_moat_button": "Pedir uma Ponte Nova", - "gui_settings_tor_bridges_label": "As pontes ajudam no acesso a rede Tor em localizações onde esta está bloqueada, algumas pontes podem funcionar melhor do que outras dependendo da localização." -} diff --git a/desktop/src/onionshare/resources/locale/ro.json b/desktop/src/onionshare/resources/locale/ro.json deleted file mode 100644 index 35dcedbf..00000000 --- a/desktop/src/onionshare/resources/locale/ro.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "config_onion_service": "", - "preparing_files": "Comprimare fișiere.", - "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": "Fișierul {0:s} nu poate fi citit.", - "no_available_port": "Nu s-a putut găsi un port liber pentru a porni serviciul onion", - "other_page_loaded": "Adresă încărcată", - "close_on_autostop_timer": "Oprit deoarece s-a oprit cronometrul automat", - "closing_automatically": "Oprit pentru că transferul s-a încheiat cu succes", - "timeout_download_still_running": "", - "large_filesize": "Avertisment: Transferul unui volum mare de date poate dura ore", - "systray_menu_exit": "Închidere", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "Tragere și plasare fișiere și directoare\npentru a începe partajarea", - "gui_add": "Adaugă", - "gui_delete": "Şterge", - "gui_choose_items": "Alegeți", - "gui_share_start_server": "Începe partajarea", - "gui_share_stop_server": "Oprește partajarea", - "gui_share_stop_server_autostop_timer": "Oprire partajare ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "Începeți modul de primire", - "gui_receive_stop_server": "Opriți modul de primire", - "gui_receive_stop_server_autostop_timer": "Opriți modul de primire (au rămas {})", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "Copiere adresă", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Anulat", - "gui_copied_url_title": "Adresă OnionShare copiată", - "gui_copied_url": "Adresa OnionShare a fost copiată în memoria clipboard", - "gui_please_wait": "Începem ... Faceți clic pentru a anula.", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "version_string": "", - "gui_quit_title": "Nu atât de repede", - "gui_share_quit_warning": "Sunteți în proces de trimitere fișiere. Sigur vreți să închideți OnionShare?", - "gui_receive_quit_warning": "Sunteți în proces de primire fișiere. Sigur vreți să închideți OnionShare?", - "gui_quit_warning_quit": "Închidere", - "gui_quit_warning_dont_quit": "Anulare", - "zip_progress_bar_format": "Compresare: %p%", - "error_stealth_not_supported": "Pentru a folosi autorizarea clientului, aveți nevoie de versiunile minim Tor 0.2.9.1-alfa (sau Tor Browser 6.5) cât și de python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare are nevoie de minim versiunea Tor 0.2.7.1 cât și de Python3-stem 1.4.0.", - "gui_settings_window_title": "Setari", - "gui_settings_whats_this": "Ce este asta?", - "gui_settings_stealth_option": "Utilizați autorizarea clientului", - "gui_settings_autoupdate_label": "Verificați dacă există o versiune nouă", - "gui_settings_autoupdate_option": "Anunțați-mă când este disponibilă o nouă versiune", - "gui_settings_autoupdate_timestamp": "Ultima verificare: {}", - "gui_settings_autoupdate_timestamp_never": "Niciodata", - "gui_settings_autoupdate_check_button": "Verificați versiunea nouă", - "gui_settings_general_label": "Setări generale", - "gui_settings_sharing_label": "Setări de partajare", - "gui_settings_close_after_first_download_option": "Opriți partajarea după ce fișierele au fost trimise", - "gui_settings_connection_type_label": "Cum ar trebui să se conecteze OnionShare la Tor?", - "gui_settings_connection_type_bundled_option": "Utilizați versiunea Tor încorporată în OnionShare", - "gui_settings_connection_type_automatic_option": "Încercați configurarea automată cu Tor Browser", - "gui_settings_connection_type_control_port_option": "Conectați-vă cu portul de control", - "gui_settings_connection_type_socket_file_option": "Conectați-vă cu fișierul socket", - "gui_settings_connection_type_test_button": "Testează conexiunea la Tor", - "gui_settings_control_port_label": "Port de control", - "gui_settings_socket_file_label": "Fișier socket", - "gui_settings_socks_label": "Port SOCKS", - "gui_settings_authenticate_label": "Setări de autentificare Tor", - "gui_settings_authenticate_no_auth_option": "Fără autentificare sau autentificare cookie", - "gui_settings_authenticate_password_option": "Parolă", - "gui_settings_password_label": "Parolă", - "gui_settings_tor_bridges": "Suport pentru Tor", - "gui_settings_tor_bridges_no_bridges_radio_option": "Nu folosiți poduri", - "gui_settings_tor_bridges_obfs4_radio_option": "Folosiți transporturi conectabile obfs4 integrate", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Folosiți transporturi conectabile obfs4 conectate (necesită obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizați transporturi conectabile meek_lite (Azure) încorporate", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Folosiți transporturi conectabile meek_lite (Azure) încorporate (necesită obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Avertisment: podurile meek_lite sunt foarte costisitoare pentru rularea Proiectului Tor.

Utilizați-le numai dacă nuvă puteți conecta direct la Tor, prin transporturi obfs4 sau alte poduri normale.", - "gui_settings_tor_bridges_custom_radio_option": "Folosiți poduri personalizate", - "gui_settings_tor_bridges_custom_label": "Puteți obține poduri de la https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Niciunul din podurile adăugate nu funcționează.\nVerificați-le încă o dată sau adăugați altele.", - "gui_settings_button_save": "Salvare", - "gui_settings_button_cancel": "Anulare", - "gui_settings_button_help": "Ajutor", - "gui_settings_autostop_timer_checkbox": "Folosiți cronometrul auto-stop", - "gui_settings_autostop_timer": "Opriți partajarea la:", - "settings_error_unknown": "Nu se poate face conectarea la controlerul Tor, deoarece setările dvs. nu au sens.", - "settings_error_automatic": "Nu s-a putut face conectarea la controlerul Tor. Tor Browser (disponibil de la torproject.org) rulează în fundal?", - "settings_error_socket_port": "Nu se poate face conectarea la controlerul Tor la {}:{}.", - "settings_error_socket_file": "Nu se poate face conectarea la controlerul Tor folosind fișierul socket {}.", - "settings_error_auth": "Conectat la {}:{}, dar nu se poate face autentificarea. Poate că nu este un controler Tor?", - "settings_error_missing_password": "Conectat la controlerul Tor, dar este nevoie de o parolă pentru autentificare.", - "settings_error_unreadable_cookie_file": "Conectat la controlerul Tor, dar parola poate fi greșită sau utilizatorului nu i se permite să citească fișierul cookie.", - "settings_error_bundled_tor_not_supported": "Utilizarea versiunii Tor care vine cu OnionShare nu funcționează în modul dezvoltator pe Windows sau macOS.", - "settings_error_bundled_tor_timeout": "Durează prea mult timp pentru a vă conecta la Tor. Poate nu sunteți conectat la Internet sau aveți un ceas al sistemului setat inexact?", - "settings_error_bundled_tor_broken": "OnionShare nu se poate conecta la Tor în fundal:\n{}", - "settings_test_success": "Conectat la controlerul Tor.\n\nVersiunea Tor: {}\nSuportă servicii efemere onion: {}.\nSuportă autentificarea clientului: {}.\nSuportă adrese next-gen .onion: {}.", - "error_tor_protocol_error": "A apărut o eroare cu Tor: {}", - "error_tor_protocol_error_unknown": "A apărut o eroare necunoscută cu Tor", - "error_invalid_private_key": "", - "connecting_to_tor": "Conectarea la rețeaua Tor", - "update_available": "Noua versiune OnionShare. Clic aici pentru a o obține.

Folosiți versiunea {} și ultima versiune este {}.", - "update_error_check_error": "Nu s-a putut verifica dacă există o versiune nouă: site-ul OnionShare spune că ultima versiune nu poate fi recunoscută '{}'…", - "update_error_invalid_latest_version": "Nu s-a putut verifica dacă există o versiune nouă: Poate nu sunteți conectat la Tor, sau site-ul OnionShare este închis?", - "update_not_available": "Rulează ultima versiune OnionShare.", - "gui_tor_connection_ask": "Deschideți setările pentru a sorta conexiunea la Tor?", - "gui_tor_connection_ask_open_settings": "Da", - "gui_tor_connection_ask_quit": "Închidere", - "gui_tor_connection_error_settings": "Încercați să schimbați în setări modul în care OnionShare se conectează la rețeaua Tor.", - "gui_tor_connection_canceled": "Nu se poate realiza conexiunea la Tor.\n\nVerificați dacă sunteți conectat la Internet, apoi redeschideți OnionShare și setați conexiunea la Tor.", - "gui_tor_connection_lost": "Deconectat de la Tor.", - "gui_server_started_after_autostop_timer": "Cronometrul de oprire automată a expirat înainte de pornirea serverului. Vă rugăm să faceți o nouă partajare.", - "gui_server_autostop_timer_expired": "Timpul pentru cronometrul auto-stop a expirat deja. Vă rugăm să îl modificați pentru a începe distribuirea.", - "share_via_onionshare": "Partajați prin OnionShare", - "gui_save_private_key_checkbox": "Folosiți o adresă persistentă", - "gui_share_url_description": "Oricine are această adresă OnionShare poate descărca fișierele dvs. folosind Tor Browser: ", - "gui_receive_url_description": "Oricine are această adresă OnionShare poate încărca fișiere pe computerul dvs. folosind Tor Browser: ", - "gui_url_label_persistent": "Această partajare nu se va opri automat.

Fiecare acțiune ulterioară reutilizează adresa. (Pentru a utiliza adrese unice, dezactivați „Utilizați adresa persistentă” din setări.)", - "gui_url_label_stay_open": "Această partajare nu se va opri automat.", - "gui_url_label_onetime": "Această partajare se va opri după prima finalizare.", - "gui_url_label_onetime_and_persistent": "Această partajare nu se va opri automat.

Fiecare acțiune ulterioară va reutiliza adresa. (Pentru a utiliza adrese unice, dezactivați „Utilizați adresa persistentă” din setări.)", - "gui_status_indicator_share_stopped": "Pregătit pentru partajare", - "gui_status_indicator_share_working": "Pornire…", - "gui_status_indicator_share_started": "Partajare", - "gui_status_indicator_receive_stopped": "Pregătit pentru primire", - "gui_status_indicator_receive_working": "Pornire…", - "gui_status_indicator_receive_started": "Primire", - "gui_file_info": "{} fișiere, {}", - "gui_file_info_single": "{} fișier, {}", - "history_in_progress_tooltip": "{} în progres", - "history_completed_tooltip": "{} complet", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_dir": "", - "receive_mode_warning": "", - "gui_receive_mode_warning": "Modul de recepție permite utilizatorilor să încarce fișiere pe computerul dvs.


Unele fișiere pot prelua controlul computerului dacă le deschideți. Deschideți doar fișierele de la persoanele de încredere sau dacă știți ce faceți. ", - "receive_mode_upload_starting": "Începe încărcarea din dimensiunea totală {}", - "receive_mode_received_file": "", - "gui_mode_share_button": "Partajare fișiere", - "gui_mode_receive_button": "Primire fișiere", - "gui_settings_receiving_label": "Setări de primire", - "gui_settings_downloads_label": "", - "gui_settings_downloads_button": "Răsfoiește", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "Mod public", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "Pagină încărcată", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "Nu se poate deschide folderul deoarece nautilus nu este disponibil. Fișierul este aici: {}", - "gui_settings_language_label": "Limba preferată", - "gui_settings_language_changed_notice": "Reporniți OnionShare pentru a aplica noul limbaj.", - "gui_add_files": "Adaugă fișiere", - "gui_add_folder": "Adaugă director", - "gui_connect_to_tor_for_onion_settings": "Conectați-vă la Tor pentru a vedea setările serviciului onion", - "error_cannot_create_data_dir": "Nu s-a putut crea folderul de date OnionShare: {}", - "gui_settings_data_dir_label": "Salvare fișiere în", - "gui_settings_data_dir_browse_button": "Navigare", - "systray_page_loaded_message": "Adresa OnionShare a fost încărcată", - "systray_share_started_title": "Partajarea a început", - "systray_share_started_message": "Începeți să trimiteți cuiva fișiere", - "systray_share_completed_title": "Partajare completă", - "systray_share_completed_message": "Am terminat trimiterea fișierelor", - "systray_share_canceled_title": "Partajarea a fost anulată", - "systray_share_canceled_message": "Cineva a anulat primirea fișierelor", - "systray_receive_started_title": "A început primirea", - "systray_receive_started_message": "Cineva vă trimite fișiere", - "gui_all_modes_history": "Istoric", - "gui_all_modes_clear_history": "Ștergere toate", - "gui_all_modes_transfer_started": "Pornit {}", - "gui_all_modes_transfer_finished_range": "Transferat {} - {}", - "gui_all_modes_transfer_finished": "Transferat {}", - "gui_all_modes_progress_complete": "au trecut %p%, {0:s}.", - "gui_all_modes_progress_starting": "{0:s}, %p% (se calculează)", - "gui_all_modes_progress_eta": "{0:s}, Timp estimat: {1:s}, %p%", - "gui_share_mode_no_files": "Niciun fișier trimis încă", - "gui_receive_mode_no_files": "Încă nu au fost primite fișiere", - "gui_all_modes_transfer_canceled_range": "Anulat {} - {}", - "gui_all_modes_transfer_canceled": "Anulat {}", - "gui_settings_onion_label": "Setări Onion", - "gui_stop_server_autostop_timer_tooltip": "Cronometrul de oprire automată se oprește la {}", - "gui_start_server_autostart_timer_tooltip": "Cronometrul de pornire automată se oprește la {}", - "gui_waiting_to_start": "Programat pentru a începe în {}. Click pentru a anula.", - "gui_settings_autostart_timer_checkbox": "Folosiți cronometrul de pornire automată", - "gui_settings_autostart_timer": "Porniți partajarea la:", - "gui_server_autostart_timer_expired": "Ora programată a trecut deja. Vă rugăm să o reajustați pentru a începe distribuirea.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Ora de oprire automată nu poate fi aceeași sau mai devreme decât ora de pornire automată. Vă rugăm să o ajustați pentru a începe distribuirea.", - "gui_status_indicator_share_scheduled": "Programat …", - "gui_status_indicator_receive_scheduled": "Programat …", - "gui_share_mode_autostop_timer_waiting": "Se așteaptă să se termine trimiterea", - "gui_receive_mode_autostop_timer_waiting": "Se așteaptă să se termine primirea", - "days_first_letter": "zi", - "hours_first_letter": "ore", - "minutes_first_letter": "min", - "seconds_first_letter": "s", - "gui_website_url_description": "Oricine are această adresă OnionShare poate vizita website-ul dvs. folosind Tor Browser: ", - "gui_mode_website_button": "Publicare site web", - "gui_website_mode_no_files": "Niciun site nu a fost partajat încă", - "incorrect_password": "Parolă incorectă", - "gui_settings_individual_downloads_label": "Debifează pentru a permite descărcarea fișierelor individuale", - "history_requests_tooltip": "{} solicitări web", - "gui_settings_csp_header_disabled_option": "Dezactivează antetul Politicii de securitate a conținutului", - "gui_settings_website_label": "Setări pentru website" -} diff --git a/desktop/src/onionshare/resources/locale/ru.json b/desktop/src/onionshare/resources/locale/ru.json deleted file mode 100644 index 2636323f..00000000 --- a/desktop/src/onionshare/resources/locale/ru.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "give_this_url": "Передайте получателю этот адрес:", - "ctrlc_to_stop": "Нажмите Ctrl+C, чтобы остановить сервер", - "not_a_file": "{0:s} недопустимый файл.", - "gui_copied_url": "Ссылка OnionShare скопирована в буфер обмена", - "other_page_loaded": "Адрес загружен", - "gui_copy_url": "Копировать адрес", - "systray_menu_exit": "Выйти", - "gui_add": "Добавить", - "gui_delete": "Удалить", - "gui_choose_items": "Выбрать", - "gui_canceled": "Отменено", - "gui_quit_warning_quit": "Выход", - "gui_quit_warning_dont_quit": "Отмена", - "gui_settings_window_title": "Настройки", - "gui_settings_autoupdate_timestamp_never": "Никогда", - "gui_settings_general_label": "Общие настройки", - "gui_settings_control_port_label": "Контрольный порт", - "gui_settings_authenticate_password_option": "Пароль", - "gui_settings_password_label": "Пароль", - "gui_settings_button_save": "Сохранить", - "gui_settings_button_cancel": "Отмена", - "gui_settings_button_help": "Помощь", - "gui_tor_connection_ask_open_settings": "Да", - "gui_tor_connection_ask_quit": "Выйти", - "gui_status_indicator_share_started": "Идёт отправка", - "gui_status_indicator_receive_started": "Идёт получение", - "gui_settings_downloads_label": "Путь сохранения файлов: ", - "gui_settings_downloads_button": "Выбрать", - "gui_clear_history": "Очистить Все", - "gui_settings_language_label": "Язык интерфейса", - "config_onion_service": "Назначем \"луковому\" сервису порт {:d}.", - "preparing_files": "Сжимаем файлы.", - "give_this_url_stealth": "Передайте этот адрес и строку HidServAuth получателю:", - "give_this_url_receive": "Передайте этот адрес отправителю:", - "give_this_url_receive_stealth": "Передайте этот адрес и строку HidServAuth отправителю:", - "not_a_readable_file": "{0:s} не является читаемым файлом.", - "no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса", - "close_on_autostop_timer": "Время ожидания таймера истекло, сервис остановлен", - "closing_automatically": "Загрузка завершена, сервис остановлен", - "timeout_download_still_running": "Ожидаем завершения скачивания", - "timeout_upload_still_running": "Ожидаем завершения загрузки", - "large_filesize": "Внимание: Отправка данных большого объёма может занять продолжительное время (несколько часов)", - "systray_download_started_title": "OnionShare: скачивание началось", - "systray_download_started_message": "Пользователь начал загружать Ваши файлы", - "systray_download_completed_title": "OnionShare: скачивание завершено", - "systray_download_completed_message": "Пользователь завершил скачивание Ваших файлов", - "systray_download_canceled_title": "OnionShare: скачивание отменено", - "systray_download_canceled_message": "Пользователь отменил скачивание", - "systray_upload_started_title": "OnionShare: загрузка началась", - "systray_upload_started_message": "Пользователь начал загрузку файлов на Ваш компьютер", - "help_local_only": "Не использовать Tor (только для разработки)", - "help_stay_open": "Продолжить отправку после первого скачивания", - "help_autostop_timer": "Остановить отправку после заданного количества секунд", - "help_stealth": "Использовать авторизацию клиента (дополнительно)", - "help_receive": "Получать загрузки вместо их отправки", - "help_verbose": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск", - "help_filename": "Список файлов или папок для отправки", - "help_config": "Расположение пользовательского конфигурационного JSON-файла (необязательно)", - "gui_drag_and_drop": "Перетащите сюда файлы и/или папки, которые хотите отправить", - "gui_share_start_server": "Сделать доступным для скачивания", - "gui_share_stop_server": "Отменить доступ к скачиванию", - "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_autostop_timer": "Выключить Режим Получения (осталось {})", - "gui_receive_stop_server_autostop_timer_tooltip": "Время таймера истекает в {}", - "gui_downloads": "История скачиваний", - "gui_no_downloads": "Скачиваний пока нет ", - "gui_copied_url_title": "Адрес OnionShare скопирован", - "gui_please_wait": "Запуск... Для отмены нажмите здесь.", - "gui_download_upload_progress_complete": "%p%, прошло {0:s}.", - "gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Не так быстро", - "gui_share_quit_warning": "Идёт процесс отправки файлов. Уверены, что хотите завершить работу OnionShare?", - "gui_receive_quit_warning": "Идёт процесс получения файлов. Уверены, что хотите завершить работу 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_whats_this": "Что это?", - "gui_settings_stealth_option": "Использовать авторизацию клиента", - "gui_settings_autoupdate_label": "Проверить наличие новой версии", - "gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия", - "gui_settings_autoupdate_timestamp": "Последняя проверка: {}", - "gui_settings_autoupdate_check_button": "Проверить наличие новой версии", - "gui_settings_sharing_label": "Настройки отправки", - "gui_settings_close_after_first_download_option": "Завершить отправку Ваших файлов\nпосле их первого скачивания", - "gui_settings_connection_type_label": "Как OnionShare следует подключаться к сети Tor?", - "gui_settings_connection_type_bundled_option": "Использовать версию Tor, встроенную в OnionShare", - "gui_settings_connection_type_automatic_option": "Автоматическая настройка при помощи Tor Browser", - "gui_settings_connection_type_control_port_option": "Использовать контрольный порт", - "gui_settings_connection_type_socket_file_option": "Использовать файл сокет", - "gui_settings_connection_type_test_button": "Проверить подключение к сети Tor", - "gui_settings_socket_file_label": "Файл сокет", - "gui_settings_socks_label": "Порт SOCKS", - "gui_settings_authenticate_label": "Настройки аутентификации Tor", - "gui_settings_authenticate_no_auth_option": "Без аутентификации или cookie-аутентификации", - "gui_settings_tor_bridges": "Использовать \"мост\" Tor?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Не использовать \"мосты\"", - "gui_settings_tor_bridges_obfs4_radio_option": "Использовать встроенные подключаемые транспорты obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Использовать встроенные подключаемые транспорты obfs4 (необходим obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Использовать встроенные транспорты meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные транспорты meek_lite (Azure) (необходим obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_azure очень затратно для Tor Project.

Используйте их только если не можете подключиться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".", - "gui_settings_tor_bridges_custom_radio_option": "Использовать пользовательские \"мосты\"", - "gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь: https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работает. Проверьте их снова или добавьте другие.", - "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 в {}:{}.", - "settings_error_socket_file": "Ошибка подключения к контроллеру Tor с использованием файла-сокета {}.", - "settings_error_auth": "Подключено к {}:{}, ошибка проверки подлинности. Возможно, это не контроллер Tor?", - "settings_error_missing_password": "Подключено к контроллеру Tor, но для аутентификации нужен пароль.", - "settings_error_unreadable_cookie_file": "Подключено к контроллеру Tor, но возможна ошибка пароля, или пользователю запрещено чтение файла cookie.", - "settings_error_bundled_tor_not_supported": "Версия Tor, которая поставляется вместе с OnionShare, не подходит для разработчика в Windows и macOS.", - "settings_error_bundled_tor_timeout": "Подключение к Tor занимает слишком много времени. Возможно, отсутствует подключение к сети Интернет, или у вас неточно настроено системное время?", - "settings_error_bundled_tor_broken": "Ошибка подключения OnionShare к Tor в фоновом режиме:\n{}", - "settings_test_success": "Подключено к контроллеру Tor.\n\nВерсия Tor: {}\nПоддержка временных \"луковых\" сервисов: {}.\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": "Ошибка проверки наличия новой версии: сайт OnionShare сообщает что новейшая версия не распознана - '{}'…", - "update_not_available": "Вы используете наиболее свежую версию OnionShare.", - "gui_tor_connection_ask": "Перейти в раздел \"Настройки\" для решения проблем с подключением к Tor?", - "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_autostop_timer": "Время стоп-таймера истекло до того, как сервер был запущен. Пожалуйста, отправьте файлы заново.", - "gui_server_autostop_timer_expired": "Время стоп-таймера истекло. Пожалуйста, отрегулируйте его для начала отправки.", - "share_via_onionshare": "Поделиться через OnionShare", - "gui_save_private_key_checkbox": "Используйте постоянный адрес", - "gui_share_url_description": "Кто угодно c этим адресом OnionShare и секретным ключом может скачать Ваши файлы при помощи Tor Browser: ", - "gui_receive_url_description": "Кто угодно c этим адресом OnionShare и секретным ключом может загрузить файлы на ваш компьютер с помощьюTor Browser: ", - "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_receive_stopped": "Данные готовы к получению", - "gui_status_indicator_receive_working": "Ожидайте…", - "gui_file_info": "{} файлы, {}", - "gui_file_info_single": "{} файл, {}", - "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": "Внимание: режим получения позволяет другим людям загружать файлы на ваш компьютер. Некоторые файлы могут представлять угрозу для вашего компьютера. Открывайте файлы от тех людей, которым вы доверяете, или если вы точно знаете, что делаете.", - "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_public_mode_checkbox": "Публичный режим", - "systray_close_server_title": "Сервер OnionShare отключен", - "systray_close_server_message": "Пользователь отключил сервер", - "systray_page_loaded_title": "Страница загружена", - "systray_download_page_loaded_message": "Пользователь находится на странице скачивания", - "systray_upload_page_loaded_message": "Пользователь посетил странцу загрузки", - "gui_uploads": "История загрузок", - "gui_no_uploads": "Загрузок пока нет", - "gui_upload_in_progress": "Загрузка началась {}", - "gui_upload_finished_range": "Загружено {} в {}", - "gui_upload_finished": "Загружено {}", - "gui_download_in_progress": "Загрузка началась {}", - "gui_open_folder_error_nautilus": "Не удаётся открыть папку без файлового менеджера Nautilus. Файл находится здесь: {}", - "gui_settings_language_changed_notice": "Перезапустите OnionShare, чтобы изменения языковых настроек вступили в силу.", - "gui_add_files": "Добавить файлы", - "gui_add_folder": "Добавить папку", - "error_cannot_create_data_dir": "Не удалось создать папку данных OnionShare: {}", - "gui_settings_onion_label": "Настройки \"лукового\" сервиса", - "gui_connect_to_tor_for_onion_settings": "Подключитесь к Tor, чтобы видеть настройки \"лукового\" сервиса", - "receive_mode_data_dir": "Отправленные Вам файлы можно найти в этой папке: {}", - "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_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": "%p%, {0:s.} прошло.", - "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_autostop_timer_waiting": "Ожидается завершение отправки", - "gui_receive_mode_no_files": "Пока нет полученных файлов", - "gui_receive_mode_autostop_timer_waiting": "Ожидается завершение загрузки", - "gui_stop_server_autostop_timer_tooltip": "Время окончания стоп-таймера: {}", - "gui_start_server_autostart_timer_tooltip": "Время окончания старт-таймера: {}", - "gui_waiting_to_start": "Начиная через {}. Нажмите, чтобы отменить.", - "gui_settings_autostart_timer_checkbox": "Использовать таймер запуска", - "gui_settings_autostart_timer": "Начать отправку:", - "gui_server_autostart_timer_expired": "Запланированное время уже прошло. Пожалуйста, отрегулируйте его для начала отправки.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Время окончания не может быть раньше времени начала. Пожалуйста, отрегулируйте его для начала отправки.", - "gui_status_indicator_share_scheduled": "По расписанию…", - "gui_status_indicator_receive_scheduled": "По расписанию…", - "days_first_letter": "д", - "hours_first_letter": "ч", - "minutes_first_letter": "м", - "seconds_first_letter": "с", - "gui_website_url_description": "Любой у кого есть этот адрес OnionShare и секретный ключ может посетить ваш сайт при помощи Tor Browser: ", - "gui_mode_website_button": "Опубликовать Веб-сайт", - "gui_website_mode_no_files": "Нет опубликованных Веб-сайтов", - "incorrect_password": "Неверный пароль", - "gui_settings_individual_downloads_label": "Снимите флажок чтобы разрешить скачивание отдельных файлов", - "history_requests_tooltip": "{} веб запросы", - "gui_settings_csp_header_disabled_option": "Отключить проверку Политики Безопасности Содержимого", - "gui_settings_website_label": "Настройки Веб-сайта", - "gui_main_page_share_button": "Сделать доступным для скачивания", - "gui_close_tab_warning_title": "Вы уверены?", - "mode_settings_website_disable_csp_checkbox": "Не посылать стандартный заголовок Content Security Policy (разрешить вашему веб-сайту использовать сторонние ресурсы)", - "mode_settings_receive_data_dir_browse_button": "Обзор файлов", - "mode_settings_receive_data_dir_label": "Сохранять файлы в", - "mode_settings_share_autostop_sharing_checkbox": "Закрыть доступ к файлам после их отправки (отмените чтобы разрешить скачивание отдельных файлов)", - "mode_settings_legacy_checkbox": "Использовать устаревшую версию адресов (версия 2 сервиса Тор, не рукомендуем)", - "mode_settings_autostop_timer_checkbox": "Отключить сервис onion в назначенное время", - "mode_settings_autostart_timer_checkbox": "Запустить сервис onion в назначенное время", - "mode_settings_public_checkbox": "Это публичная версия сервиса OnionShare (секретный ключ не используется)", - "mode_settings_persistent_checkbox": "Сохранить эту вкладку, и открывать ее автоматически при открытии OnionShare", - "mode_settings_advanced_toggle_hide": "Спрятать дополнительные настройки", - "mode_settings_advanced_toggle_show": "Показать дополнительные настройки", - "gui_quit_warning_cancel": "Отменить", - "gui_quit_warning_description": "Раздача файлов все еще активна в некоторых вкладках. Если выйдете сейчас, все ваши вкладки закроются. Вы уверены что хотите выйти?", - "gui_quit_warning_title": "Вы уверены?", - "gui_close_tab_warning_cancel": "Отменить", - "gui_close_tab_warning_close": "Закрыть", - "gui_close_tab_warning_website_description": "Запущенный вами веб сайт все еще активен. Вы уверены что хотите закрыть эту вкладку?", - "gui_close_tab_warning_receive_description": "Вы в процессе скачивания файлов. Вы уверены что хотите закрыть эту вкладку?", - "gui_close_tab_warning_share_description": "Вы в процессе посылки файлов. Вы уверены что хотите закрыть эту вкладку?", - "gui_close_tab_warning_persistent_description": "Эта закладка важна. Если Вы закроете ее, то потеряете используемую Тор ссылку. Вы уверены?", - "gui_tab_name_chat": "Чат", - "gui_tab_name_website": "Веб сайт", - "gui_tab_name_receive": "Скачать", - "gui_tab_name_share": "Поделиться", - "gui_main_page_chat_button": "Начать чат", - "gui_main_page_website_button": "Запустить веб сайт", - "gui_main_page_receive_button": "Начать скачивание", - "gui_new_tab_chat_button": "Начать чат анонимно", - "gui_new_tab_website_button": "Поднять веб сайт", - "gui_new_tab_receive_button": "Получить файлы", - "gui_new_tab_share_button": "Поделиться файлами", - "gui_new_tab_tooltip": "Открыть новую вкладку", - "gui_new_tab": "Новая вкладка", - "gui_open_folder_error": "Ошибка при попытке открыть папку с помощью xdg-open. Файл находится здесь: {}", - "gui_qr_code_description": "Сканируйте этот QR-код считывающим устройством, например камерой Вашего телефона, чтобы было удобнее поделиться ссылкой OnionShare с кем либо.", - "gui_qr_code_dialog_title": "Код QR OnionShare", - "gui_show_qr_code": "Показать QR-код", - "gui_receive_flatpak_data_dir": "Так как Вы установили OnionShare с помощью Flatpak, Вы должны сохранять файлы в папке ~/OnionShare.", - "gui_chat_stop_server": "Остановить сервер чата", - "gui_chat_start_server": "Запустить сервер чата", - "gui_file_selection_remove_all": "Очистить все", - "gui_remove": "Очистить", - "error_port_not_available": "Порт OnionShare не доступен", - "gui_rendezvous_cleanup_quit_early": "Выйти Раньше", - "gui_rendezvous_cleanup": "Ожидается завершение соединений с сетью Tor для подтверждения успешной отправки ваших файлов.\n\nЭто может занять несколько минут.", - "gui_color_mode_changed_notice": "Перезапустите OnionShare чтобы изменения цветовой гаммы вступили в силу.", - "gui_chat_url_description": "Каждый у кого есть этот адрес OnionShare и секретный ключ может присоединиться к этому чату при помощи Tor Browser: ", - "history_receive_read_message_button": "Прочитать сообщение", - "mode_settings_receive_webhook_url_checkbox": "Использовать веб-хук для отправки уведомлений", - "mode_settings_receive_disable_files_checkbox": "Запретить передачу файлов", - "mode_settings_receive_disable_text_checkbox": "Запретить отправку текста", - "mode_settings_title_label": "Собственное название", - "gui_status_indicator_chat_started": "Чат активен", - "gui_status_indicator_chat_scheduled": "По расписанию…", - "gui_status_indicator_chat_working": "Запуск…", - "gui_status_indicator_chat_stopped": "Готов начать чат", - "gui_settings_theme_dark": "Тёмная", - "gui_settings_theme_light": "Светлая", - "gui_settings_theme_auto": "Авто", - "gui_settings_theme_label": "Тема", - "gui_client_auth_instructions": "Затем, отправьте секретный ключ, необходимый для доступа к вашему сервису OnionShare:", - "gui_url_instructions_public_mode": "Отправьте адрес OnionShare, показанный ниже:", - "gui_url_instructions": "Сначала, отправьте адрес OnionShare, показанный ниже:", - "gui_chat_url_public_description": "Каждый у кого есть этот адрес OnionShare может присоединиться к этому чату при помощи Tor Browser: ", - "gui_receive_url_public_description": "Кто угодно c этим адресом OnionShare ключом может загрузить файлы на ваш компьютер с помощьюTor Browser: ", - "gui_website_url_public_description": "Любой у кого есть этот адрес OnionShare может посетить ваш сайт при помощи Tor Browser: ", - "gui_share_url_public_description": "Кто угодно c этим адресом OnionShare может скачать Ваши файлы при помощи Tor Browser: ", - "gui_server_doesnt_support_stealth": "Приносим свои извинения, текущая версия Tor не поддерживает режим \"stealth\" (Аутентификация Клиента). Пожалуйста, попробуйте обновить версию Tor, или используйте 'публичный' режим, если в 'секретном' режиме отсутствует необходимость.", - "gui_please_wait_no_button": "Запуск…", - "gui_hide": "Скрыть", - "gui_reveal": "Показать", - "gui_qr_label_auth_string_title": "Секретный Ключ", - "gui_qr_label_url_title": "Адрес OnionShare", - "gui_copied_client_auth": "Секретный Ключ скопирован в буфер обмена", - "gui_copied_client_auth_title": "Секретный Ключ Скопирован", - "gui_copy_client_auth": "Копировать Секретный Ключ", - "gui_dragdrop_sandbox_flatpak": "Для обеспечения дополнительной безопасности, функция \"drag and drop\" не поддерживается песочницей Flatpak. Вместо этого используйте кнопки \"Добавить файлы\" и \"Добавить папку\".", - "gui_tor_settings_window_title": "Настройки Tor", - "gui_settings_controller_extras_label": "Настройки Tor", - "gui_settings_tor_bridges_label": "Мосты позволяют подключаться к сети Tor в местах, где его использование заблокировано. В зависимости от вашего местоположения лучше работать может тот или иной мост.", - "gui_settings_bridge_use_checkbox": "Использовать мост", - "gui_settings_bridge_radio_builtin": "Выбрать встроенный мост", - "gui_settings_bridge_none_radio_option": "Не использовать мост", - "gui_settings_bridge_moat_radio_option": "Запросить мост с сайта torproject.org", - "gui_settings_bridge_moat_button": "Запросить Новый Мост", - "gui_settings_bridge_custom_radio_option": "Подключить мост о котором вы узнали из доверенного источника", - "gui_settings_bridge_custom_placeholder": "ввести адрес:порт (по одному на каждой строке)", - "gui_settings_moat_bridges_invalid": "Вы ещё не запрашивали мост с сайта torproject.org.", - "gui_settings_stop_active_tabs_label": "На некоторых из ваших вкладок запущены сервисы.\nНеобходимо остановить все сервисы чтобы изменить настройки Tor.", - "gui_settings_version_label": "Вы используете OnionShare {}", - "gui_settings_help_label": "Нужна помощь? Вам сюда: docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "Отправить самостоятельно настроенный заголовок Content Security Policy", - "moat_contact_label": "Устанавливается связь с BridgeDB...", - "moat_captcha_label": "Решите CAPTCHA, чтобы запросить мост.", - "moat_captcha_placeholder": "Введите символы на картинке", - "moat_captcha_submit": "Отправить", - "moat_captcha_reload": "Перезагрузить", - "moat_bridgedb_error": "Ошибка соединения с BridgeDB.", - "moat_captcha_error": "Решение не верно. Пожалуйста, попробуйте ещё раз.", - "moat_solution_empty_error": "Вы должны ввести символы с картинки", - "mode_tor_not_connected_label": "OnionShare не подключен к сети Tor" -} diff --git a/desktop/src/onionshare/resources/locale/si.json b/desktop/src/onionshare/resources/locale/si.json deleted file mode 100644 index 32417022..00000000 --- a/desktop/src/onionshare/resources/locale/si.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "not_a_readable_file": "", - "other_page_loaded": "", - "incorrect_password": "", - "close_on_autostop_timer": "", - "closing_automatically": "", - "large_filesize": "", - "gui_drag_and_drop": "", - "gui_add": "එකතු කරන්න", - "gui_add_files": "", - "gui_add_folder": "", - "gui_remove": "ඉවත් කරන්න", - "gui_file_selection_remove_all": "", - "gui_choose_items": "", - "gui_share_start_server": "", - "gui_share_stop_server": "", - "gui_share_stop_server_autostop_timer": "", - "gui_chat_start_server": "", - "gui_chat_stop_server": "", - "gui_stop_server_autostop_timer_tooltip": "", - "gui_start_server_autostart_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_flatpak_data_dir": "", - "gui_copy_url": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_show_qr_code": "", - "gui_qr_code_dialog_title": "", - "gui_waiting_to_start": "", - "gui_please_wait": "", - "zip_progress_bar_format": "", - "gui_settings_window_title": "", - "gui_settings_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "", - "gui_settings_autoupdate_check_button": "", - "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": "", - "settings_test_success": "", - "connecting_to_tor": "", - "update_available": "", - "update_error_invalid_latest_version": "", - "update_error_check_error": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "gui_server_autostart_timer_expired": "", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", - "share_via_onionshare": "", - "gui_share_url_description": "", - "gui_website_url_description": "", - "gui_receive_url_description": "", - "gui_chat_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_scheduled": "", - "gui_status_indicator_share_started": "", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", - "gui_status_indicator_receive_scheduled": "", - "gui_status_indicator_receive_started": "", - "gui_file_info": "", - "gui_file_info_single": "", - "history_in_progress_tooltip": "", - "history_completed_tooltip": "", - "history_requests_tooltip": "", - "error_cannot_create_data_dir": "", - "gui_receive_mode_warning": "", - "gui_open_folder_error": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_color_mode_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_progress_complete": "", - "gui_all_modes_progress_starting": "", - "gui_all_modes_progress_eta": "", - "gui_share_mode_no_files": "", - "gui_share_mode_autostop_timer_waiting": "", - "gui_website_mode_no_files": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "", - "days_first_letter": "", - "hours_first_letter": "", - "minutes_first_letter": "", - "seconds_first_letter": "", - "gui_new_tab": "", - "gui_new_tab_tooltip": "", - "gui_new_tab_share_button": "", - "gui_new_tab_receive_button": "", - "gui_new_tab_website_button": "", - "gui_new_tab_chat_button": "", - "gui_main_page_share_button": "", - "gui_main_page_receive_button": "", - "gui_main_page_website_button": "", - "gui_main_page_chat_button": "", - "gui_tab_name_share": "", - "gui_tab_name_receive": "", - "gui_tab_name_website": "", - "gui_tab_name_chat": "", - "gui_close_tab_warning_title": "", - "gui_close_tab_warning_persistent_description": "", - "gui_close_tab_warning_share_description": "", - "gui_close_tab_warning_receive_description": "", - "gui_close_tab_warning_website_description": "", - "gui_close_tab_warning_close": "", - "gui_close_tab_warning_cancel": "", - "gui_quit_warning_title": "", - "gui_quit_warning_description": "", - "gui_quit_warning_quit": "", - "gui_quit_warning_cancel": "", - "mode_settings_advanced_toggle_show": "", - "mode_settings_advanced_toggle_hide": "", - "mode_settings_persistent_checkbox": "", - "mode_settings_public_checkbox": "", - "mode_settings_autostart_timer_checkbox": "", - "mode_settings_autostop_timer_checkbox": "", - "mode_settings_legacy_checkbox": "", - "mode_settings_share_autostop_sharing_checkbox": "", - "mode_settings_receive_data_dir_label": "", - "mode_settings_receive_data_dir_browse_button": "", - "mode_settings_website_disable_csp_checkbox": "", - "gui_all_modes_transfer_finished_range": "", - "gui_all_modes_transfer_finished": "", - "gui_all_modes_transfer_canceled_range": "", - "gui_all_modes_transfer_canceled": "", - "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": "", - "gui_rendezvous_cleanup": "", - "gui_rendezvous_cleanup_quit_early": "", - "error_port_not_available": "" -} diff --git a/desktop/src/onionshare/resources/locale/sk.json b/desktop/src/onionshare/resources/locale/sk.json deleted file mode 100644 index 841b156e..00000000 --- a/desktop/src/onionshare/resources/locale/sk.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "not_a_readable_file": "{0:s} nie je čitateľný súbor.", - "other_page_loaded": "Načítaná adresa", - "incorrect_password": "Nesprávne heslo", - "close_on_autostop_timer": "Zastavené, pretože časovač automatického zastavenia vypršal", - "closing_automatically": "Zastavené, pretože prenos je dokončený", - "large_filesize": "Upozornenie: Odosielanie veľkých súborov môže trvať hodiny", - "gui_drag_and_drop": "Presuňte a pustite súbory a priečinky, ktoré chcete zdieľať", - "gui_add": "Pridať", - "gui_add_files": "Pridať súbory", - "gui_add_folder": "Pridať priečinok", - "gui_remove": "Odstrániť", - "gui_file_selection_remove_all": "Odstrániť všetko", - "gui_choose_items": "Vybrať", - "gui_share_start_server": "Spustiť zdieľanie", - "gui_share_stop_server": "Zastaviť zdieľanie", - "gui_share_stop_server_autostop_timer": "Zastaviť zdieľanie ({})", - "gui_chat_start_server": "Spustiť četový server", - "gui_chat_stop_server": "Zastaviť četový server", - "gui_stop_server_autostop_timer_tooltip": "Časovač automatického zastavenia končí o {}", - "gui_start_server_autostart_timer_tooltip": "Časovač automatického spustenia končí o {}", - "gui_receive_start_server": "Spustiť režim prijímania", - "gui_receive_stop_server": "Zastaviť režim prijímania", - "gui_receive_stop_server_autostop_timer": "Zastaviť režim prijímania (zostáva {})", - "gui_receive_flatpak_data_dir": "Pretože ste nainštalovali OnionShare pomocou Flatpak, musíte uložiť súbory do priečinka v ~/OnionShare.", - "gui_copy_url": "Kopírovať adresu", - "gui_canceled": "Zrušené", - "gui_copied_url_title": "Skopírovaná OnionShare adresa", - "gui_copied_url": "OnionShare adresa bola skopírovaná do schránky", - "gui_show_qr_code": "Zobraziť QR kód", - "gui_qr_code_dialog_title": "OnionShare QR kód", - "gui_qr_code_description": "Naskenujte tento QR kód pomocou čítačky QR, napríklad fotoaparátom na telefóne, aby ste mohli jednoduchšie zdieľať adresu OnionShare s niekým.", - "gui_waiting_to_start": "Naplánované spustenie o {}. Kliknutím zrušíte.", - "gui_please_wait": "Spúšťa sa... Kliknutím zrušíte.", - "zip_progress_bar_format": "Komprimovanie: %p%", - "gui_settings_window_title": "Nastavenia", - "gui_settings_autoupdate_label": "Skontrolovať novú verziu", - "gui_settings_autoupdate_option": "Upozorniť ma, keď bude k dispozícii nová verzia", - "gui_settings_autoupdate_timestamp": "Naposledy skontrolované: {}", - "gui_settings_autoupdate_timestamp_never": "Nikdy", - "gui_settings_autoupdate_check_button": "Skontrolovať novú verziu", - "gui_settings_connection_type_label": "Ako by sa mal OnionShare pripojiť k Tor?", - "gui_settings_connection_type_bundled_option": "Použite verziu Tor zabudovanú do OnionShare", - "gui_settings_connection_type_automatic_option": "Pokúsiť sa o automatickú konfiguráciu s prehliadačom Tor", - "gui_settings_connection_type_control_port_option": "Pripojiť pomocou riadiaceho port", - "gui_settings_connection_type_socket_file_option": "Pripojiť pomocou socket súboru", - "gui_settings_connection_type_test_button": "Test pripojenia k Tor", - "gui_settings_control_port_label": "Riadiaci port", - "gui_settings_socket_file_label": "Socket súbor", - "gui_settings_socks_label": "SOCKS port", - "gui_settings_authenticate_label": "Nastavenia autentifikácie Tor", - "gui_settings_authenticate_no_auth_option": "Žiadna autentifikácia alebo autentifikácia pomocou cookies", - "gui_settings_authenticate_password_option": "Heslo", - "gui_settings_password_label": "Heslo", - "gui_settings_tor_bridges": "Tor bridge podpora", - "gui_settings_tor_bridges_no_bridges_radio_option": "Nepoužívať Tor bridge", - "gui_settings_tor_bridges_obfs4_radio_option": "Použiť vstavané zásuvné transporty obfs4", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Použiť vstavané zásuvné transporty obfs4 (vyžaduje obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Použiť vstavané zásuvné transporty meek_lite (Azure)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Použiť vstavané zásuvné transporty meek_lite (Azure) (vyžaduje obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Varovanie: Mosty meek_lite sú pre Tor Projekt veľmi nákladné.

Používajte ich iba v prípade, že sa nemôžete pripojiť k Tor priamo, pomocou transportov obfs4 alebo iných bežných mostov.", - "gui_settings_tor_bridges_custom_radio_option": "Použiť vlastné mosty", - "gui_settings_tor_bridges_custom_label": "Mosty môžete získať z https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Žiadny z mostov, ktoré ste pridali, nefunguje.\nDvakrát ich skontrolujte alebo pridajte ďalšie.", - "gui_settings_button_save": "Uložiť", - "gui_settings_button_cancel": "Zrušiť", - "gui_settings_button_help": "Pomoc", - "settings_test_success": "Pripojený k ovládaču Tor.\n\nTor verzia : {}\nPodporuje pominuteľné onion služby: {}.\nPodporuje overenie klienta: {}.\nPodporuje adresy .onion ďalšej generácie: {}.", - "connecting_to_tor": "Pripája sa k sieti Tor", - "update_available": "Nová verzia OnionShare. Kliknite sem aby ste ju stiahli.

Používate {} a najnovšia je {}.", - "update_error_invalid_latest_version": "Nepodarilo sa skontrolovať novú verziu: Web OnionShare hovorí, že najnovšia verzia je na nerozpoznateľná '{}'…", - "update_error_check_error": "Nemôžete skontrolovať novú verziu: Možno nie ste pripojení k Tor, alebo je web OnionShare nefunkčný?", - "update_not_available": "Používate najnovšiu verziu OnionShare.", - "gui_tor_connection_ask": "Otvoriť nastavenia spojenia s Tor?", - "gui_tor_connection_ask_open_settings": "Áno", - "gui_tor_connection_ask_quit": "Ukončiť", - "gui_tor_connection_error_settings": "Skúste zmeniť spôsob pripojenia OnionShare k sieti Tor v nastaveniach.", - "gui_tor_connection_canceled": "Nepodarilo sa pripojiť k Tor.\n\nUistite sa, že ste pripojení na Internet, potom znova otvorte OnionShare a nastavte jeho pripojenie k Tor.", - "gui_tor_connection_lost": "Odpojený od Tor.", - "gui_server_started_after_autostop_timer": "Časovač automatického zastavenia vypršal pred spustením servera. Vytvorte nové zdieľanie.", - "gui_server_autostop_timer_expired": "Časovač automatického zastavenia už vypršal. Upravte ho tak, aby sa začal zdieľať.", - "gui_server_autostart_timer_expired": "Plánovaný čas už uplynul. Upravte ho tak, aby sa začal zdieľať.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Čas automatického zastavenia nemôže byť rovnaký alebo skorší ako čas automatického spustenia. Upravte ho, aby ste mohli začať zdieľať.", - "share_via_onionshare": "Zdieľať cez OnionShare", - "gui_share_url_description": "Ktokoľvek s touto adresou OnionShare si môže stiahnuť vaše súbory pomocou Tor Browser: ", - "gui_website_url_description": "Ktokoľvek s touto adresou OnionShare môže navštíviť váš web pomocou Tor Browser: ", - "gui_receive_url_description": "Ktokoľvek s touto adresou OnionShare môže nahrať súbory do vášho počítača pomocou Tor Browser: ", - "gui_url_label_persistent": "Toto zdieľanie sa automaticky nezastaví.

Každé ďalšie zdieľanie znova použije adresu. (Ak chcete použiť jednorazové adresy, vypnite v nastaveniach možnosť „Používať trvalú adresu“.)", - "gui_url_label_stay_open": "Toto zdieľanie sa automaticky nezastaví.", - "gui_url_label_onetime": "Toto zdieľanie sa zastaví po prvom dokončení.", - "gui_url_label_onetime_and_persistent": "Toto zdieľanie sa automaticky nezastaví.

Každé ďalšie zdieľanie znova použije adresu. (Ak chcete použiť jednorazové adresy, vypnite v nastaveniach možnosť „Používať trvalú adresu“.)", - "gui_status_indicator_share_stopped": "Pripravené na zdieľanie", - "gui_status_indicator_share_working": "Začína…", - "gui_status_indicator_share_scheduled": "Naplánované…", - "gui_status_indicator_share_started": "Zdieľanie", - "gui_status_indicator_receive_stopped": "Pripravené na príjem", - "gui_status_indicator_receive_working": "Začína…", - "gui_status_indicator_receive_scheduled": "Naplánované…", - "gui_status_indicator_receive_started": "Prijímanie", - "gui_file_info": "{} súbory, {}", - "gui_file_info_single": "{} súbor, {}", - "history_in_progress_tooltip": "{} prebieha", - "history_completed_tooltip": "{} dokončené", - "history_requests_tooltip": "{} webové požiadavky", - "error_cannot_create_data_dir": "Nepodarilo sa vytvoriť dátový priečinok OnionShare: {}", - "gui_receive_mode_warning": "Režim prijímania umožňuje ľuďom nahrávať súbory do počítača.

Niektoré súbory môžu potenciálne prevziať kontrolu nad počítačom, ak ich otvoríte. Otvárajte veci len od ľudí, ktorých dôverujete, alebo ak viete, čo robíte.", - "gui_open_folder_error": "Nepodarilo sa otvoriť priečinok s xdg-open. Súbor je tu: {}", - "gui_settings_language_label": "Preferovaný jazyk", - "gui_settings_language_changed_notice": "Reštartujte OnionShare pre nový jazyk, ktorý sa má použiť.", - "systray_menu_exit": "Ukončiť", - "systray_page_loaded_title": "Stránka bola načítaná", - "systray_page_loaded_message": "Adresa OnionShare načítaná", - "systray_share_started_title": "Zdieľanie sa začalo", - "systray_share_started_message": "Začínam niekomu odosielať súbory", - "systray_share_completed_title": "Zdieľanie dokončené", - "systray_share_completed_message": "Odosielanie súborov bolo dokončené", - "systray_share_canceled_title": "Zdieľanie bolo zrušené", - "systray_share_canceled_message": "Niekto zrušil prijímanie vašich súborov", - "systray_receive_started_title": "Prijímanie začalo", - "systray_receive_started_message": "Niekto vám posiela súbory", - "gui_all_modes_history": "História", - "gui_all_modes_clear_history": "Vymazať všetko", - "gui_all_modes_transfer_started": "Spustené {}", - "gui_all_modes_progress_complete": "%p%, {0:s} uplynulo.", - "gui_all_modes_progress_starting": "{0:s}, %p% (výpočet)", - "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "gui_share_mode_no_files": "Zatiaľ neboli odoslané žiadne súbory", - "gui_share_mode_autostop_timer_waiting": "Čaká sa na dokončenie odosielania", - "gui_website_mode_no_files": "Zatiaľ nie je zdieľaný žiadny web", - "gui_receive_mode_no_files": "Zatiaľ neboli prijaté žiadne súbory", - "gui_receive_mode_autostop_timer_waiting": "Čakanie na dokončenie prijímania", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_new_tab": "Nová karta", - "gui_new_tab_tooltip": "Otvoriť novú kartu", - "gui_new_tab_share_button": "Zdieľať súbory", - "gui_new_tab_receive_button": "Prijímanie súborov", - "gui_new_tab_website_button": "Hosťovanie webu", - "gui_new_tab_chat_button": "Četujte anonymne", - "gui_main_page_share_button": "Spustiť zdieľanie", - "gui_main_page_receive_button": "Spustiť prijímanie", - "gui_main_page_website_button": "Spustiť hosťovanie", - "gui_main_page_chat_button": "Začať četovať", - "gui_tab_name_share": "Zdieľať", - "gui_tab_name_receive": "Príjem", - "gui_tab_name_website": "Web", - "gui_tab_name_chat": "Čet", - "gui_close_tab_warning_title": "Ste si istí?", - "gui_close_tab_warning_persistent_description": "Táto karta je trvalá. Ak ju zatvoríte, prídete o onion adresu, ktorú používa. Naozaj ju chcete zavrieť?", - "gui_close_tab_warning_share_description": "Ste v procese odosielania súborov. Naozaj chcete zavrieť túto kartu?", - "gui_close_tab_warning_receive_description": "Ste v procese prijímania súborov. Naozaj chcete zavrieť túto kartu?", - "gui_close_tab_warning_website_description": "Aktívne hosťujete webovú lokalitu. Naozaj chcete zavrieť túto kartu?", - "gui_close_tab_warning_close": "Zatvoriť", - "gui_close_tab_warning_cancel": "Zrušiť", - "gui_quit_warning_title": "Ste si istí?", - "gui_quit_warning_description": "Zdieľanie je aktívne na niektorých kartách. Ak skončíte, všetky karty sa zavrú. Naozaj chcete skončiť?", - "gui_quit_warning_quit": "Ukončiť", - "gui_quit_warning_cancel": "Zrušiť", - "mode_settings_advanced_toggle_show": "Zobraziť rozšírené nastavenia", - "mode_settings_advanced_toggle_hide": "Skryť rozšírené nastavenia", - "mode_settings_persistent_checkbox": "Uložiť túto kartu a automaticky ju otvoriť, keď otvorím OnionShare", - "mode_settings_public_checkbox": "Nepoužiť heslo", - "mode_settings_autostart_timer_checkbox": "Spustiť onion službu v plánovanom čase", - "mode_settings_autostop_timer_checkbox": "Zastaviť onion službu v plánovanom čase", - "mode_settings_legacy_checkbox": "Použiť staršiu adresu (v2 onion služba, neodporúča sa)", - "mode_settings_share_autostop_sharing_checkbox": "Po odoslaní súborov zastaviť zdieľanie (zrušením začiarknutia povolíte sťahovanie jednotlivých súborov)", - "mode_settings_receive_data_dir_label": "Uložiť súbory do", - "mode_settings_receive_data_dir_browse_button": "Prechádzať", - "mode_settings_website_disable_csp_checkbox": "Neposielať hlavičku politiky zabezpečenia obsahu (umožňuje vašej webovej lokalite používať zdroje tretích strán)", - "gui_all_modes_transfer_finished_range": "Prenesené {} - {}", - "gui_all_modes_transfer_finished": "Prenesené {}", - "gui_all_modes_transfer_canceled_range": "Zrušené {} - {}", - "gui_all_modes_transfer_canceled": "Zrušené {}", - "error_port_not_available": "Port OnionShare nie je k dispozícii", - "gui_rendezvous_cleanup_quit_early": "Ukončiť predčasne", - "gui_rendezvous_cleanup": "Čaká sa na zatvorenie obvodov Tor, aby ste sa uistili, že sa súbory úspešne preniesli.\n\nMôže to trvať niekoľko minút.", - "settings_error_bundled_tor_broken": "OnionShare sa nemohol pripojiť k Tor:\n{}", - "settings_error_bundled_tor_timeout": "Pripojenie k Tor trvá príliš dlho. Možno nie ste pripojení na internet alebo máte nepresné systémové hodiny?", - "settings_error_bundled_tor_not_supported": "Použitie verzie Tor, ktorá je dodávaná s OnionShare nefunguje v režime vývojára v systéme Windows alebo macOS.", - "settings_error_unreadable_cookie_file": "Pripojené k ovládaču Tor, ale heslo môže byť nesprávne, alebo váš používateľ nemá povolenie na čítanie súboru cookie.", - "settings_error_missing_password": "Pripojené k ovládaču Tor, ale je potrebné heslo na autentifikáciu.", - "settings_error_auth": "Pripojené k {}:{}, ale nemôže sa autentifikovať. Možno to nie je ovládač Tor?", - "settings_error_socket_file": "Nedá sa pripojiť k ovládaču Tor pomocou socket súboru {}.", - "settings_error_socket_port": "Nedá sa pripojiť k ovládaču Tor na {}:{}.", - "settings_error_automatic": "Nepodarilo sa pripojiť k ovládaču Tor. Je prehliadač Tor (dostupný na torproject.org) spustený na pozadí?", - "settings_error_unknown": "Nemôžem sa pripojiť k ovládaču Tor, pretože vaše nastavenia nedávajú zmysel.", - "gui_chat_url_description": "Ktokoľvek s touto adresou OnionShare sa môže pripojiť k tejto miestnosti chatu pomocou Tor prehliadača: " -} diff --git a/desktop/src/onionshare/resources/locale/sl.json b/desktop/src/onionshare/resources/locale/sl.json deleted file mode 100644 index 52f14cce..00000000 --- a/desktop/src/onionshare/resources/locale/sl.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "config_onion_service": "", - "preparing_files": "Stiskanje datotek.", - "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": "{0:s} ni mogoče prebrati.", - "no_available_port": "Ni mogoče najti prostega vhoda, da bi lahko zagnali onion service", - "other_page_loaded": "Naslov naložen", - "close_on_autostop_timer": "Prenehal, ker je auto-stop timer pretekel", - "closing_automatically": "Prenehal, ker se je prenos končal", - "timeout_download_still_running": "", - "large_filesize": "Opozorilo: Pošiljanje prevelikih deležel lahko traja ure", - "systray_menu_exit": "Izhod", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "Povleci in spusti datoteke in mape\nza začetek skupne rabe", - "gui_add": "Dodaj", - "gui_delete": "Zbriši", - "gui_choose_items": "Izberi", - "gui_share_start_server": "Začni deliti", - "gui_share_stop_server": "Zaustavi deljenje", - "gui_share_stop_server_autostop_timer": "Zaustavi deljenje ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "Odpovedan", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "Izhod", - "gui_quit_warning_dont_quit": "", - "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_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "Nikoli", - "gui_settings_autoupdate_check_button": "", - "gui_settings_general_label": "Splošne nastavitve", - "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": "Krmilna vrata", - "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": "Pomoč", - "gui_settings_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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": "Da", - "gui_tor_connection_ask_quit": "Izhod", - "gui_tor_connection_error_settings": "", - "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", - "gui_server_started_after_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "Brskanje", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_add_files": "Dodaj Datoteke", - "gui_add_folder": "Dodaj Mapo", - "gui_stop_server_autostop_timer_tooltip": "Samodejno zaustavi timer, ki se konča ob{}", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "incorrect_password": "Napačno geslo" -} diff --git a/desktop/src/onionshare/resources/locale/sn.json b/desktop/src/onionshare/resources/locale/sn.json deleted file mode 100644 index 81b46cba..00000000 --- a/desktop/src/onionshare/resources/locale/sn.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json deleted file mode 100644 index f47bade1..00000000 --- a/desktop/src/onionshare/resources/locale/sr_Latn.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "preparing_files": "Komprimujem fajlove.", - "not_a_readable_file": "(0:s) nije čitljiv fajl.", - "no_available_port": "Ne mogu da pronađem raspoloživi port da bih počeo onion servis", - "other_page_loaded": "Adresa učitana", - "incorrect_password": "Pogrešna lozinka", - "close_on_autostop_timer": "Prekid rada zato što je isteklo vreme na auto-stop tajmeru", - "closing_automatically": "Prekid rada zato što je prenos završen", - "large_filesize": "Upozorenje: Slanje velikih fajlova može trajati satima", - "gui_drag_and_drop": "Prevuci i otpusti datoteke i fascikle da bi započeo deljenje", - "gui_add": "Dodaj", - "gui_add_files": "Dodaj datoteke", - "gui_add_folder": "Dodat fascikle", - "gui_delete": "Obriši", - "gui_choose_items": "Odaberi", - "gui_share_start_server": "Započni deljenje", - "gui_share_stop_server": "Prekini deljenje", - "gui_share_stop_server_autostop_timer": "Prekini deljenje ({})", - "gui_stop_server_autostop_timer_tooltip": "Auto-stop tajmer se zaustavlja na {}", - "gui_start_server_autostart_timer_tooltip": "Auto-start tajmer se zaustavlja na {}", - "gui_receive_start_server": "Započni režim primanja", - "gui_receive_stop_server": "Prekini režim primanja", - "gui_receive_stop_server_autostop_timer": "Prekini režim primanja ({} preostalo)", - "gui_copy_url": "Kopiraj adresu", - "gui_canceled": "Obustavljeno", - "gui_copied_url_title": "Kopirana OnionShare adresa", - "gui_copied_url": "OnionShare adresa kopirana u privremenu memoriju", - "gui_waiting_to_start": "Planirano da počne u {}. Klikni da obustaviš.", - "gui_please_wait": "Počinje… Klikni da obustaviš.", - "gui_quit_title": "Ne tako brzo", - "gui_share_quit_warning": "Proces slanja datoteka u toku. Jeste li sigurni da želite da zaustavite OnionShare?", - "gui_receive_quit_warning": "Proces primanja datoteka u toku. Jeste li sigurni da želite da zaustavite OnionShare?", - "gui_quit_warning_quit": "Izađi", - "gui_quit_warning_dont_quit": "Odustani", - "zip_progress_bar_format": "Komprimujem: %p%", - "error_stealth_not_supported": "Da bi koristion klijen autorizaciju, potrebni su ti barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare zahteva barem Tor 0.2.7.1 i python3-stem 1.4.0.", - "gui_settings_window_title": "Podešavanja", - "gui_settings_whats_this": "Šta je ovo?", - "gui_settings_stealth_option": "Koristi klijent autorizaciju", - "gui_settings_autoupdate_label": "Proveri da li postoji nova verzija", - "gui_settings_autoupdate_option": "Obavesti me kada nova verzija bude na raspolaganju", - "gui_settings_autoupdate_timestamp": "Poslednja provera: {}", - "gui_settings_autoupdate_timestamp_never": "Nikada", - "gui_settings_autoupdate_check_button": "Proveri da li postoji nova verzija", - "gui_settings_general_label": "Generalna podešavanja", - "gui_settings_onion_label": "Onion podešavanja", - "gui_settings_sharing_label": "Podešavanja deljenja", - "gui_settings_close_after_first_download_option": "Prekini deljenje kada datoteke budu poslate", - "gui_settings_csp_header_disabled_option": "Onemogući zaglavlje Pravilnika o sigurnosti sadržaja", - "gui_settings_individual_downloads_label": "Poništi izbor da bi dozvolio preuzimanje pojedinačnih datoteka", - "gui_settings_connection_type_label": "Kako bi OnionShare trebalo povezati sa Torom?", - "gui_settings_connection_type_bundled_option": "Koristi verziju Tora ugrađenu u OnionShare", - "gui_settings_connection_type_automatic_option": "Pokušaj automatsku konfiguraciju pomoću Tor pretraživača", - "gui_settings_connection_type_control_port_option": "Poveži se koristeći kontrolni port", - "gui_settings_connection_type_socket_file_option": "Poveži se koristeći datoteku priključka", - "gui_settings_connection_type_test_button": "Testiranje veze sa Torom", - "gui_settings_control_port_label": "Kontrolni port", - "gui_settings_socket_file_label": "Datoteka priključka", - "gui_settings_socks_label": "SOCKS priključak", - "gui_settings_authenticate_label": "Podešavanje autentifikacije Tora", - "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem", - "gui_settings_authenticate_password_option": "Lozinka", - "gui_settings_password_label": "Lozinka", - "gui_settings_tor_bridges": "Povezivanje pomoću Tor mosta?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove", - "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 dodatne prenose", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 dodatne prenose (potreban obfs4proksi)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) dodatne prenose", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) dodatne prenose (potreban obfs4proksi)", - "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek-azure mostovi su vrlo skupi za Tor projekat da ih koristi.

Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.", - "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove", - "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Nijedan od mostova koje ste dodali ne funkcioniše. Proverite ih ponovo ili dodajte druge.", - "gui_settings_button_save": "Sačuvaj", - "gui_settings_button_cancel": "Odustani", - "gui_settings_button_help": "Pomoć", - "gui_settings_autostop_timer_checkbox": "Koristi tajmer za automatsko zaustavljanje", - "gui_settings_autostop_timer": "Zaustavi deljenje na:", - "gui_settings_autostart_timer_checkbox": "Koristi tajmer automatskog pokretanja", - "gui_settings_autostart_timer": "Započni deljenje na:", - "settings_error_unknown": "Nije moguće povezati se sa Tor kontrolerom jer tvoje postavke nemaju smisla.", - "settings_error_automatic": "Nije moguće povezati se sa Tor kontrolerom. Da li Tor pregledač (dostupan na torproject.org) radi u pozadini?", - "settings_error_socket_port": "Nije moguće povezati se sa Tor kontrolerom na {}: {}.", - "settings_error_socket_file": "Nije moguće povezati se na Tor kontroler pomoću datoteke priključka {}.", - "settings_error_auth": "Povezan na {}: {}, ali nije moguća autentifikacija. Možda ovo nije Tor kontroler?", - "settings_error_missing_password": "Povezan sa Tor kontrolerom, ali on zahteva lozinku za autentifikaciju.", - "settings_error_unreadable_cookie_file": "Povezan sa Tor kontrolerom, ali je lozinka možda pogrešna ili tvomj korisniku nije dozvoljeno da pročita datoteku kolačića.", - "settings_error_bundled_tor_not_supported": "Korišćenje verzije Tora koja se isporučuje sa OnionShare ne radi u razvojnom režimu u operativnom sistemu Windows ili macOS.", - "settings_error_bundled_tor_timeout": "Predugo traje povezivanje sa Torom. Možda nisi povezan sa Internetom ili imaš netačan sistemski sat?", - "settings_error_bundled_tor_broken": "OnionShare ne može da se poveže sa Torom u pozadini:\n{}", - "settings_test_success": "Povezan sa Tor kontrolerom.\n\nTor verzija: {}\nPodržava povremene onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava next-gen .onion adrese: {}.", - "error_tor_protocol_error": "Došlo je do greške sa Torom: {}", - "error_tor_protocol_error_unknown": "Došlo je do nepoznate greške sa Torom", - "connecting_to_tor": "Povezivanje sa Tor mrežom", - "update_available": "Novi OnionShare objavljen. Klikni ovde da bi ga dobio.

Trenutno koristiš {} a najnoviji je {}.", - "update_error_check_error": "Nije moguće proveriti novu verziju: Mođda nije povezana na Tor, ili sajt OnionShare ne radi?", - "update_error_invalid_latest_version": "Nije moguće proveriti novu verziju: Sajt OnionShare kaže da poslednja verzija nije prepoznata '{}'…", - "update_not_available": "Da li koristite najnoviji OnionShare.", - "gui_tor_connection_ask": "Da li otvoriti podešavanja da biste podesili vezu sa Torom?", - "gui_tor_connection_ask_open_settings": "Da", - "gui_tor_connection_ask_quit": "Odustani", - "gui_tor_connection_error_settings": "Pokušaj da u podešavanjima promeniš način na koji se OnionShare povezuje sa Tor mrežom.", - "gui_tor_connection_canceled": "Nije moguće povezati se sa Torom.\n\nProveri da li si povezan sa Internetom, a zatim ponovo pokreni OnionShare i podesi vezu sa Torom.", - "gui_tor_connection_lost": "Prekinuta veza sa Torom.", - "gui_server_started_after_autostop_timer": "Tajmer automatskog zaustavljanja je odbrojao pre početka rada servera. Unesi novi deo.", - "gui_server_autostop_timer_expired": "Tajmer automatskog zaustavljanja je već odbrojao. Podesi ga da bi započelo deljenje.", - "gui_server_autostart_timer_expired": "Predviđeno vreme je već prošlo. Podesi ga da bi započelo deljenje.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vreme automatskog zaustavljanja ne može biti isto ili ranije od vremena početka automatskog pokretanja. Podesi ga da bi započelo deljenje.", - "share_via_onionshare": "Deljenje pomoću OnionShare", - "gui_connect_to_tor_for_onion_settings": "Poveži se sa Torom da bi video postavke onion servisa", - "gui_save_private_key_checkbox": "Koristi trajnu adresu", - "gui_share_url_description": "Svako sa ovom OnionShare adresom i privatnim ključem može preuzeti tvoje datoteke koristeći Tor Browser: ", - "gui_website_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može posetiti tvoju web-stranicu koristeći Tor Browser: ", - "gui_receive_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može poslati datoteke na tvoj računar koristeći Tor Browser: ", - "gui_url_label_persistent": "Ovo deljenje neće se automatski zaustaviti.

Svako sledeće deljenje ponovo koristi istu adresu. (Da bi koristio jednokratnu adresu, isključi opciju \"koristi trajnu adresu\" u podešavanjima.)", - "gui_url_label_stay_open": "Ovaj deljenje neće se automatski zaustaviti.", - "gui_url_label_onetime": "Ovaj deljenje će se zaustaviti nakon prvog dovršenja.", - "gui_url_label_onetime_and_persistent": "Ovaj deljenje neće se automatski zaustaviti.

Svako naredno deljenje ponovo će koristiti istu adresu. (Da bi koristio jednokratnu adresu, isključi opciju \"Koristi trajnu adresu\" u podešavanjima.)", - "gui_status_indicator_share_stopped": "Spremno za deljenje", - "gui_status_indicator_share_working": "Počinje…", - "gui_status_indicator_share_scheduled": "Planirano…", - "gui_status_indicator_share_started": "Deljenje", - "gui_status_indicator_receive_stopped": "Spremno za prijem", - "gui_status_indicator_receive_working": "Počinje…", - "gui_status_indicator_receive_scheduled": "Planirano…", - "gui_status_indicator_receive_started": "Primanje", - "gui_file_info": "{} datoteke, {}", - "gui_file_info_single": "{} datoteka, {}", - "history_in_progress_tooltip": "{} u toku", - "history_completed_tooltip": "{} završeno", - "history_requests_tooltip": "{} web zahtevi", - "error_cannot_create_data_dir": "Nije moguće kreirati OnionShare fasciklu sa podacima: {}", - "gui_receive_mode_warning": "Režim prijema dozvoljava korisnicima da šalju datoteke na tvoj računar.

Neke datoteke mogu da preuzmu kontrolu nad tvojim računarom ako ih otvoriš. Otvaraj samo stvari od ljudi kojima veruješ ili ako znaš šta radiš. ", - "gui_mode_share_button": "Podeli datoteke", - "gui_mode_receive_button": "Prijem datoteka", - "gui_mode_website_button": "Objavljivanje web stranice", - "gui_settings_receiving_label": "Podešavanja prijema", - "gui_settings_website_label": "Podešavanja web lokacije", - "gui_settings_data_dir_label": "Snimi datoteke u", - "gui_settings_data_dir_browse_button": "Potraži", - "gui_settings_public_mode_checkbox": "Javni režim", - "gui_open_folder_error_nautilus": "Nije moguće otvoriti fasciklu jer Nautilus nije dostupan. Datoteka je ovde: {}", - "gui_settings_language_label": "Željeni jezik", - "gui_settings_language_changed_notice": "Ponovo pokreni OnionShare da bi novi jezik bio primenjen.", - "systray_menu_exit": "Izađi", - "systray_page_loaded_title": "Stranica učitana", - "systray_page_loaded_message": "OnionShare adresa učitana", - "systray_share_started_title": "Deljenje započeto", - "systray_share_started_message": "Početak slanja datoteka nekome", - "systray_share_completed_title": "Deljenje završeno", - "systray_share_completed_message": "Slanje datoteka završeno", - "systray_share_canceled_title": "Deljenje otkazano", - "systray_share_canceled_message": "Neko je otkazao primanje tvojih datoteka", - "systray_receive_started_title": "Prijem započet", - "systray_receive_started_message": "Neko ti šalje datoteke", - "gui_all_modes_history": "Istorija", - "gui_all_modes_clear_history": "Izbriši sve", - "gui_all_modes_transfer_started": "Započeto {}", - "gui_all_modes_transfer_finished_range": "Preneto {}-{}", - "gui_all_modes_transfer_finished": "Preneto {}", - "gui_all_modes_transfer_canceled_range": "Otkazano {}-{}", - "gui_all_modes_transfer_canceled": "Otkazano {}", - "gui_all_modes_progress_complete": "% p%, {0: s} je proteklo.", - "gui_all_modes_progress_starting": "{0: s},% p% (proračunavam)", - "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "gui_share_mode_no_files": "Nijedna datoteka još nije poslata", - "gui_share_mode_autostop_timer_waiting": "Čekam na završetak slanja", - "gui_website_mode_no_files": "Još nijedna web stranica nije podeljena", - "gui_receive_mode_no_files": "Još nijedna datoteka nije primljena", - "gui_receive_mode_autostop_timer_waiting": "Čekam na završetak prijema", - "receive_mode_upload_starting": "Slanje ukupne veličine od {} počinje", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_rendezvous_cleanup_quit_early": "Prestani", - "gui_rendezvous_cleanup": "Čekajući da se Tor čvorovi zatvore da bi bili sigurni da su vaši fajlovi uspešno preneti.\n\nOvo može trajati nekoliko minuta.", - "error_port_not_available": "OnionShare port nije dostupan", - "mode_settings_website_disable_csp_checkbox": "Ne šaljite zaglavlje smernica za bezbednost sadržaja (omogućava vašem veb sajtu da koristi nezavisne resurse)", - "mode_settings_share_autostop_sharing_checkbox": "Zaustavite deljenje nakon slanja fajlova (uklonite oznaku da bi omogućili preuzimanje pojedinačnih fajlova)", - "gui_quit_warning_description": "Deljenje je aktivno u nekim vašim jezičcima. Ako želite napustiti, svi važi jezičci će biti zatvoreni. Da li ste sigurni da želite napustiti?", - "gui_close_tab_warning_website_description": "Aktivno hostujete veb sajt. Da li ste sigurni da želite da zatvorite ovaj jezičak?", - "gui_close_tab_warning_receive_description": "U procesu ste primanja fajlova. Da li ste sigurni da želite da zatvorite ovaj jezičak?", - "gui_close_tab_warning_share_description": "U procesu ste slanja fajlova. Da li ste sigurni da želite zatvoriti ovaj jezičak?", - "gui_close_tab_warning_persistent_description": "Ovaj jezičak je postojan. Ako ga zatvorite, izgubićete onion adresu koju koristite. Da li ste sigurni da želite zatvoriti?", - "mode_settings_receive_data_dir_browse_button": "Pronađi", - "mode_settings_receive_data_dir_label": "Sačuvaj fajlove u", - "mode_settings_legacy_checkbox": "Koristite zastarelu adresu (v2 onion servis, nije preporučeno)", - "mode_settings_autostop_timer_checkbox": "Zaustavi onion servis u planirano vreme", - "mode_settings_autostart_timer_checkbox": "Pokreni onion servis u planirano vreme", - "mode_settings_public_checkbox": "Ne koristi lozinku", - "mode_settings_persistent_checkbox": "Sačuvaj ovaj jezičak i automatski ga otvori kada otvorim OnionShare", - "gui_quit_warning_cancel": "Otkaži", - "gui_close_tab_warning_cancel": "Otkaži", - "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke", - "mode_settings_advanced_toggle_show": "Prikaži napredne postavke", - "gui_quit_warning_title": "Da li ste sigurni?", - "gui_close_tab_warning_close": "Zatvori", - "gui_close_tab_warning_title": "Da li ste sigurni?", - "gui_tab_name_chat": "Ćaskanje", - "gui_tab_name_website": "Veb sajt", - "gui_tab_name_receive": "Prijem", - "gui_tab_name_share": "Deli", - "gui_main_page_chat_button": "Pokreni ćaskanje", - "gui_new_tab_website_button": "Hosting veb sajta", - "gui_main_page_website_button": "Pokreni hosting", - "gui_main_page_receive_button": "Pokreni primanje", - "gui_main_page_share_button": "Pokreni deljenje", - "gui_new_tab_chat_button": "Anonimno ćaskanje", - "gui_new_tab_receive_button": "Primanje fajlova", - "gui_new_tab_share_button": "Deli fajlove", - "gui_new_tab_tooltip": "Otvori novi jezičak", - "gui_new_tab": "Novi jezičak", - "gui_color_mode_changed_notice": "Ponovo pokrenite OnionShare da bi primenili novi režim boja.", - "gui_open_folder_error": "Neuspelo otvaranje fascikle sa xdg-open. Fajl je ovde: {}", - "gui_chat_url_description": "Bilo ko sa ovom OnionShare adresom i privatnim ključem može pristupiti ovoj sobi za ćaskanje koristeći Tor Browser: ", - "gui_qr_code_dialog_title": "OnionShare QR kod", - "gui_show_qr_code": "Prikaži QR kod", - "gui_receive_flatpak_data_dir": "Pošto ste instalirali OnionShare koristeći Flatpak, morate čuvati fajlove u falcikli ~/OnionShare.", - "gui_chat_stop_server": "Zaustavi server za ćaskanje", - "gui_chat_start_server": "Pokreni server za ćaskanje", - "gui_file_selection_remove_all": "Ukloni sve", - "gui_remove": "Ukloni", - "gui_copy_client_auth": "Kopiraj privatni ključ", - "gui_copied_client_auth_title": "Privatni ključ je kopiran", - "gui_copied_client_auth": "Privatni ključ je kopiran u clipboard", - "gui_tor_settings_window_title": "Tor Podešenja", - "gui_settings_controller_extras_label": "Tor Podešenja", - "gui_settings_bridge_use_checkbox": "Koristite most", - "gui_settings_bridge_radio_builtin": "Odaberite most", - "gui_settings_bridge_none_radio_option": "Ne koristi most", - "gui_settings_bridge_moat_radio_option": "Zatražite most od torproject.org", - "gui_settings_bridge_moat_button": "Zatražite novi most", - "gui_settings_bridge_custom_radio_option": "Obezbedite most za koji ste saznali iz pouzdanog izvora", - "gui_settings_bridge_custom_placeholder": "upišite adresu:port (jedan po liniji)", - "gui_settings_moat_bridges_invalid": "Još niste zatražili most od torproject.org.", - "gui_settings_version_label": "Koristite OnionShare {}", - "gui_share_url_public_description": "Bilo ko sa ovom OnionShare adresom može preuzeti tvoje datoteke koristeći Tor Browser: ", - "gui_website_url_public_description": "Bilo ko s ovom OnionShare adresom može posetiti tvoju web-stranicu koristeći Tor Browser: ", - "gui_receive_url_public_description": "Bilo ko sa ovom OnionShare adresom može poslati datoteke na tvoj računar koristeći Tor Browser: ", - "gui_chat_url_public_description": "Bilo ko sa ovom OnionShare adresom može se pridružiti ovoj sobi za ćaskanje koristeći Tor Browser: ", - "gui_url_instructions": "Prvo pošalji ovu dole OnionShare adresu:", - "moat_contact_label": "Kontaktiranje BridgeDB-a...", - "moat_captcha_label": "Rešite CAPTCHA da bi zatražili most.", - "moat_captcha_placeholder": "Unesite znakove sa slike", - "moat_captcha_submit": "Pošalji", - "moat_captcha_reload": "Obnovi", - "moat_bridgedb_error": "Greška u kontaktiranju BridgeDB.", - "gui_please_wait_no_button": "Pokretanje …", - "gui_qr_label_url_title": "OnionShare adresa", - "gui_qr_label_auth_string_title": "Privatni ključ", - "gui_reveal": "Otkrij", - "gui_hide": "Sakrij", - "gui_dragdrop_sandbox_flatpak": "Da bi Flatpak sandbox bio sigurniji, prevlačenje i ispuštanje nije podržano. Umesto toga koristite dugmad Dodaj datoteke i Dodaj direktorijume za pretraživanje datoteka.", - "gui_settings_tor_bridges_label": "Mostovi vam pomažu da pristupite Tor mreži u područjima gde je Tor blokiran. U zavisnosti gde se nalazite, jedan most može raditi bolje od drugog.", - "gui_settings_help_label": "Treba vam pomoć? Pogledajte docs.onionshare.org", - "gui_server_doesnt_support_stealth": "Nažalost, ova Tor verzija ne podržava nevidljivost (autentifikacija klijenta). Pokušajte s novijom verzijom Tor-a ili koristite 'javni' način rada ako ne mora biti privatan.", - "history_receive_read_message_button": "Pročitaj poruku", - "moat_captcha_error": "Rješenje nije ispravno. Molimo pokušajte ponovo.", - "moat_solution_empty_error": "Morate uneti znakove sa slike", - "mode_tor_not_connected_label": "OnionShare nije povezan na Tor mrežu" -} diff --git a/desktop/src/onionshare/resources/locale/sv.json b/desktop/src/onionshare/resources/locale/sv.json deleted file mode 100644 index d44b3a9e..00000000 --- a/desktop/src/onionshare/resources/locale/sv.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "config_onion_service": "Förbereder onion-tjänsten på port {0:d}.", - "preparing_files": "Komprimera filer.", - "give_this_url": "Ge den här adressen till mottagaren:", - "give_this_url_stealth": "Ge den här adressen och HidServAuth-raden till mottagaren:", - "give_this_url_receive": "Ge denna adress till avsändaren:", - "give_this_url_receive_stealth": "Ge denna adress och HidServAuth till avsändaren:", - "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 port för att starta onion-tjänsten", - "other_page_loaded": "Adress inläst", - "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", - "large_filesize": "Varning: Att skicka en stor delning kan ta timmar", - "systray_menu_exit": "Avsluta", - "systray_download_started_title": "OnionShare Nedladdning Startad", - "systray_download_started_message": "En användare började ladda ner dina filer", - "systray_download_completed_title": "OnionShare Nedladdning Klar", - "systray_download_completed_message": "Användaren har laddat ner dina filer", - "systray_download_canceled_title": "OnionShare Nedladdning Avbruten", - "systray_download_canceled_message": "Användaren avbröt nedladdningen", - "systray_upload_started_title": "OnionShare Uppladdning Påbörjad", - "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_autostop_timer": "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_verbose": "Logga OnionShare fel till stdout och webbfel till hårddisken", - "help_filename": "Lista filer och mappar att dela", - "help_config": "Egenvald sökväg för JSON konfigurationsfil (valfri)", - "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att starta delning", - "gui_add": "Lägg till", - "gui_delete": "Ta bort", - "gui_choose_items": "Välj", - "gui_share_start_server": "Starta delning", - "gui_share_stop_server": "Stoppa delning", - "gui_share_stop_server_autostop_timer": "Stoppa delning ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", - "gui_receive_start_server": "Starta mottagningsläge", - "gui_receive_stop_server": "Stoppa mottagningsläge", - "gui_receive_stop_server_autostop_timer": "Stoppa mottagningsläge ({} kvarstår)", - "gui_receive_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}", - "gui_copy_url": "Kopiera adress", - "gui_downloads": "Nedladdningshistorik", - "gui_no_downloads": "Inga Nedladdningar Än", - "gui_canceled": "Avbruten", - "gui_copied_url_title": "OnionShare-adress kopierad", - "gui_copied_url": "OnionShare-adress kopierad till urklipp", - "gui_please_wait": "Startar... klicka för att avbryta.", - "gui_download_upload_progress_complete": "%p%, {0:s} förflutit.", - "gui_download_upload_progress_starting": "{0:s}, %p% (beräknar)", - "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Inte så fort", - "gui_share_quit_warning": "Du håller på att skicka filer. Är du säker på att du vill avsluta OnionShare?", - "gui_receive_quit_warning": "Du håller på att ta emot filer. Är du säker på att du vill avsluta OnionShare?", - "gui_quit_warning_quit": "Avsluta", - "gui_quit_warning_dont_quit": "Avbryt", - "zip_progress_bar_format": "Komprimerar: %p%", - "error_stealth_not_supported": "För att använda klientauktorisering behöver du minst både Tor 0.2.9.1-alpha (eller Tor Browser 6.5) och python3-stem 1.5.0.", - "error_ephemeral_not_supported": "OnionShare kräver minst både Tor 0.2.7.1 och python3-stem 1.4.0.", - "gui_settings_window_title": "Inställningar", - "gui_settings_whats_this": "Vad är det här?", - "gui_settings_stealth_option": "Använd klientauktorisering", - "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: {}", - "gui_settings_autoupdate_timestamp_never": "Aldrig", - "gui_settings_autoupdate_check_button": "Sök efter ny version", - "gui_settings_general_label": "Allmänna inställningar", - "gui_settings_sharing_label": "Delningsinställningar", - "gui_settings_close_after_first_download_option": "Avbryt delning efter att filer har skickats", - "gui_settings_connection_type_label": "Hur ska OnionShare ansluta till Tor?", - "gui_settings_connection_type_bundled_option": "Använd Tor-versionen som är inbyggd i OnionShare", - "gui_settings_connection_type_automatic_option": "Försök med automatisk konfiguration med Tor Browser", - "gui_settings_connection_type_control_port_option": "Anslut med kontrollport", - "gui_settings_connection_type_socket_file_option": "Anslut med socket-fil", - "gui_settings_connection_type_test_button": "Testa anslutning till Tor", - "gui_settings_control_port_label": "Kontrollport", - "gui_settings_socket_file_label": "Socket-fil", - "gui_settings_socks_label": "SOCKS-port", - "gui_settings_authenticate_label": "Tor-autentiseringsinställningar", - "gui_settings_authenticate_no_auth_option": "Ingen autentisering eller kak-autentisering", - "gui_settings_authenticate_password_option": "Lösenord", - "gui_settings_password_label": "Lösenord", - "gui_settings_tor_bridges": "Stöd för Tor-broar", - "gui_settings_tor_bridges_no_bridges_radio_option": "Använd inte broar", - "gui_settings_tor_bridges_obfs4_radio_option": "Använd inbyggda obfs4 pluggbara transporter", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Använd inbyggda obfs4 pluggbara transporter (kräver obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Använd inbyggda meek_lite (Azure) pluggbara transporter", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Använd inbyggda meek_lite (Azure) pluggbara transporter (kräver obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Varning: meek_lite-broarna är mycket kostsamma för att Tor-projektet ska kunna köras.

Använd dem endast om det inte går att ansluta till Tor direkt, via obfs4 transporter eller andra normala broar.", - "gui_settings_tor_bridges_custom_radio_option": "Använd anpassade broar", - "gui_settings_tor_bridges_custom_label": "Du kan få broar från https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Ingen av broarna du lagt till arbete.\nDubbelkolla dem eller lägga till andra.", - "gui_settings_button_save": "Spara", - "gui_settings_button_cancel": "Avbryt", - "gui_settings_button_help": "Hjälp", - "gui_settings_autostop_timer_checkbox": "Använd automatisk stopp-tidtagare", - "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å {}:{}.", - "settings_error_socket_file": "Det går inte att ansluta till Tor-regulatorn med socket-filen {}.", - "settings_error_auth": "Ansluten till {}:{}, men kan inte autentisera. Kanske är det här inte en Tor-regulator?", - "settings_error_missing_password": "Ansluten till Tor-regulatorn, men den kräver ett lösenord för att autentisera.", - "settings_error_unreadable_cookie_file": "Ansluten till Tor-regulatorn, men lösenordet kan vara fel, eller din användare är inte tillåtet att läsa kakfilen.", - "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:\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: {}.", - "error_tor_protocol_error": "Det uppstod 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", - "connecting_to_tor": "Ansluter till Tor-nätverket", - "update_available": "Ny OnionShare utgiven. Klicka här för att få den.

Du använder {} och den senaste är {}.", - "update_error_check_error": "Det gick inte att söka efter ny version: Kanske är du inte ansluten till Tor eller OnionShare-webbplatsen är nere?", - "update_error_invalid_latest_version": "Det gick inte att söka efter ny version: OnionShare-webbplatsen säger att den senaste versionen är den oigenkännliga \"{}\"…", - "update_not_available": "Du kör den senaste OnionShare.", - "gui_tor_connection_ask": "Öppna inställningarna för att reda ut anslutning till Tor?", - "gui_tor_connection_ask_open_settings": "Ja", - "gui_tor_connection_ask_quit": "Avsluta", - "gui_tor_connection_error_settings": "Försök att ä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 igen och ställ in anslutningen till Tor.", - "gui_tor_connection_lost": "Frånkopplad från Tor.", - "gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-tidtagaren löpte ut innan servern startades.\nVänligen gör en ny delning.", - "gui_server_autostop_timer_expired": "Den automatiska stopp-tidtagaren har redan löpt ut. Vänligen justera den för att starta delning.", - "share_via_onionshare": "Dela med OnionShare", - "gui_save_private_key_checkbox": "Använd en beständig adress", - "gui_share_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan ladda ner dina filer med hjälp av Tor Browser: ", - "gui_receive_url_description": "Alla med denna OnionShare-adress och privata nyckel kan ladda upp filer till din dator med Tor Browser: ", - "gui_url_label_persistent": "Denna delning kommer inte automatiskt att avslutas.
< br>Varje efterföljande delning återanvänder adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)", - "gui_url_label_stay_open": "Denna delning kommer inte automatiskt att avslutas.", - "gui_url_label_onetime": "Denna delning kommer att sluta efter första slutförandet.", - "gui_url_label_onetime_and_persistent": "Denna delning kommer inte automatiskt att avslutas.
< br>Varje efterföljande delning kommer att återanvända adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)", - "gui_status_indicator_share_stopped": "Redo att dela", - "gui_status_indicator_share_working": "Startar…", - "gui_status_indicator_share_started": "Delar", - "gui_status_indicator_receive_stopped": "Redo att ta emot", - "gui_status_indicator_receive_working": "Startar…", - "gui_status_indicator_receive_started": "Tar emot", - "gui_file_info": "{} filer, {}", - "gui_file_info_single": "{} fil, {}", - "history_in_progress_tooltip": "{} pågår", - "history_completed_tooltip": "{} slutförda", - "info_in_progress_uploads_tooltip": "{} pågående sändning(ar)", - "info_completed_uploads_tooltip": "{} sändning(ar) slutförd(a)", - "error_cannot_create_downloads_dir": "Det gick inte att skapa mappen mottagningsläge: {}", - "receive_mode_downloads_dir": "Filer som skickas till dig visas i den här mappen: {}", - "receive_mode_warning": "Varning: Mottagningsläge låter personer skicka filer till din dator. Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Bara öppna saker från personer du litar på, eller om du vet vad du gör.", - "gui_receive_mode_warning": "Mottagningsläget låter personer skicka filer till din dator.

Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Öppna endast saker från personer du litar på eller om du vet vad du gör.", - "receive_mode_upload_starting": "Sändning av total storlek {} börjar", - "receive_mode_received_file": "Mottaget: {}", - "gui_mode_share_button": "Dela filer", - "gui_mode_receive_button": "Ta emot filer", - "gui_settings_receiving_label": "Mottagningsinställningar", - "gui_settings_downloads_label": "Spara filer till", - "gui_settings_downloads_button": "Bläddra", - "gui_settings_public_mode_checkbox": "Offentligt läge", - "systray_close_server_title": "OnionShare-servern stängd", - "systray_close_server_message": "En användare stängde servern", - "systray_page_loaded_title": "Sidan lästes in", - "systray_download_page_loaded_message": "En användare läste in hämtningssidan", - "systray_upload_page_loaded_message": "En användare läste in sändningssidan", - "gui_uploads": "Sändningshistoriken", - "gui_no_uploads": "Inga sändningar ännu", - "gui_clear_history": "Rensa alla", - "gui_upload_in_progress": "Sändning påbörjad {}", - "gui_upload_finished_range": "Skickade {} till {}", - "gui_upload_finished": "Skickade {}", - "gui_download_in_progress": "Hämtning påbörjad {}", - "gui_open_folder_error_nautilus": "Det går inte att öppna mappen eftersom nautilus inte är tillgänglig. Filen är här: {}", - "gui_settings_language_label": "Föredraget språk", - "gui_settings_language_changed_notice": "Starta om OnionShare för att din språkändring ska träda i kraft.", - "gui_add_files": "Lägg till filer", - "gui_add_folder": "Lägg till mapp", - "gui_connect_to_tor_for_onion_settings": "Anslut till Tor för att se onion-tjänst-inställningar", - "error_cannot_create_data_dir": "Det gick inte att skapa OnionShare-datamapp: {}", - "receive_mode_data_dir": "Filer som skickas till dig visas i den här mappen: {}", - "gui_settings_data_dir_label": "Spara filer i", - "gui_settings_data_dir_browse_button": "Bläddra", - "systray_page_loaded_message": "OnionShare-adress lästes in", - "systray_share_started_title": "Delningen startades", - "systray_share_started_message": "Startar sändning av filer till någon", - "systray_share_completed_title": "Delning klar", - "systray_share_completed_message": "Filerna skickades", - "systray_share_canceled_title": "Delning avbruten", - "systray_share_canceled_message": "Någon har avbrutit att ta emot dina filer", - "systray_receive_started_title": "Mottagning startad", - "systray_receive_started_message": "Någon skickar filer till dig", - "gui_all_modes_history": "Historik", - "gui_all_modes_clear_history": "Rensa alla", - "gui_all_modes_transfer_started": "Startades {}", - "gui_all_modes_transfer_finished_range": "Överförd {} - {}", - "gui_all_modes_transfer_finished": "Överförd {}", - "gui_all_modes_progress_complete": "%p%, {0} förflutit.", - "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_autostop_timer_waiting": "Väntar på att avsluta sändningen", - "gui_receive_mode_no_files": "Inga filer har mottagits ännu", - "gui_receive_mode_autostop_timer_waiting": "Väntar på att ta emot mottagningen", - "gui_all_modes_transfer_canceled_range": "Avbröt {} - {}", - "gui_all_modes_transfer_canceled": "Avbröt {}", - "gui_settings_onion_label": "Inställningar för Onion", - "gui_stop_server_autostop_timer_tooltip": "Automatisk stopp-tidtagare slutar vid {}", - "gui_start_server_autostart_timer_tooltip": "Automatisk start-tidtagare slutar vid {}", - "gui_waiting_to_start": "Planeras starta om {}. Klicka för att avbryta.", - "gui_settings_autostart_timer_checkbox": "Använd automatisk start-tidtagare", - "gui_settings_autostart_timer": "Starta delning vid:", - "gui_server_autostart_timer_expired": "Den schemalagda tiden har redan passerat. Vänligen justera den för att starta delning.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än den automatiska starttiden. Vänligen justera den för att starta delning.", - "gui_status_indicator_share_scheduled": "Planerad…", - "gui_status_indicator_receive_scheduled": "Planerad…", - "days_first_letter": "d", - "hours_first_letter": "t", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "gui_website_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan besöka din webbplats med hjälp av Tor Browser: ", - "gui_mode_website_button": "Publicera webbplats", - "systray_site_loaded_title": "Webbplats inläst", - "systray_site_loaded_message": "OnionShare-webbplats inläst", - "systray_website_started_title": "Börjar dela webbplats", - "systray_website_started_message": "Någon besöker din webbplats", - "gui_website_mode_no_files": "Ingen webbplats delas ännu", - "gui_visit_started": "Någon har besökt din webbplats {}", - "incorrect_password": "Felaktigt lösenord", - "gui_settings_individual_downloads_label": "Avmarkera för att tillåta hämtning av enskilda filer", - "history_requests_tooltip": "{} webbförfrågningar", - "systray_individual_file_downloaded_title": "Enskild fil inläst", - "systray_individual_file_downloaded_message": "Individuell fil {} visad", - "gui_settings_website_label": "Webbplatsinställningar", - "gui_settings_csp_header_disabled_option": "Inaktivera rubriken för innehållssäkerhetspolicy", - "gui_close_tab_warning_persistent_description": "Denna flik är beständig. Om du stänger den förlorar du onion-adressen som den använder. Är du säker på att du vill stänga den?", - "mode_settings_website_disable_csp_checkbox": "Inaktivera rubriken för innehållssäkerhetspolicy (tillåter din webbplats att använda resurser från tredje part)", - "mode_settings_receive_data_dir_browse_button": "Bläddra", - "mode_settings_receive_data_dir_label": "Spara filer till", - "mode_settings_share_autostop_sharing_checkbox": "Stoppa delning efter att filer har skickats (avmarkera för att tillåta hämtning av enskilda filer)", - "mode_settings_legacy_checkbox": "Använd en äldre adress (v2-oniontjänst, rekommenderas inte)", - "mode_settings_autostart_timer_checkbox": "Starta oniontjänsten vid schemalagd tid", - "mode_settings_autostop_timer_checkbox": "Stoppa oniontjänsten vid schemalagd tid", - "mode_settings_public_checkbox": "Detta är en offentlig OnionShare-tjänst (inaktiverar den privata nyckeln)", - "mode_settings_persistent_checkbox": "Spara denna flik och öppna den automatiskt när jag öppnar OnionShare", - "mode_settings_advanced_toggle_hide": "Dölj avancerade inställningar", - "mode_settings_advanced_toggle_show": "Visa avancerade inställningar", - "gui_quit_warning_cancel": "Avbryt", - "gui_quit_warning_description": "Delning är aktiv i några av dina flikar. Om du avslutar stängs alla dina flikar. Är du säker på att du vill avsluta?", - "gui_quit_warning_title": "Är du säker?", - "gui_close_tab_warning_cancel": "Avbryt", - "gui_close_tab_warning_close": "Stäng", - "gui_close_tab_warning_website_description": "Du är aktivt värd för en webbplats. Är du säker på att du vill stänga denna flik?", - "gui_close_tab_warning_receive_description": "Du håller på att ta emot filer. Är du säker på att du vill stänga denna flik?", - "gui_close_tab_warning_share_description": "Du håller på att skicka filer. Är du säker på att du vill stänga denna flik?", - "gui_close_tab_warning_title": "Är du säker?", - "gui_new_tab_website_description": "Var värd till en statisk HTML-onionwebbplats från din dator.", - "gui_new_tab_website_button": "Publicera webbplats", - "gui_new_tab_receive_description": "Förvandla din dator till en dropbox på nätet. Personer kommer att kunna använda Tor Browser för att skicka filer till din dator.", - "gui_new_tab_receive_button": "Ta emot filer", - "gui_new_tab_share_description": "Välj filer på din dator för att skicka till någon annan. Den eller de personer som du vill skicka filer till måste använda Tor Browser för att hämta dem från dig.", - "gui_new_tab_share_button": "Dela filer", - "gui_new_tab_tooltip": "Öppna en ny flik", - "gui_new_tab": "Ny flik", - "gui_qr_code_description": "Skanna den här QR-koden med en QR-läsare, till exempel kameran på din telefon, för att lättare kunna dela OnionShare-adressen med någon.", - "gui_qr_code_dialog_title": "OnionShare QR-kod", - "gui_show_qr_code": "Visa QR-kod", - "gui_receive_flatpak_data_dir": "Eftersom du installerade OnionShare med Flatpak måste du spara filer i en mapp i ~/OnionShare.", - "gui_chat_stop_server": "Stoppa chattservern", - "gui_chat_start_server": "Starta chattservern", - "gui_file_selection_remove_all": "Ta bort alla", - "gui_remove": "Ta bort", - "gui_main_page_share_button": "Starta delning", - "error_port_not_available": "OnionShare-porten är inte tillgänglig", - "gui_rendezvous_cleanup_quit_early": "Avsluta tidigt", - "gui_rendezvous_cleanup": "Väntar på att Tor-kretsar stänger för att vara säker på att dina filer har överförts.\n\nDet kan ta några minuter.", - "gui_tab_name_chat": "Chatt", - "gui_tab_name_website": "Webbplats", - "gui_tab_name_receive": "Ta emot", - "gui_tab_name_share": "Dela", - "gui_main_page_chat_button": "Börja chatta", - "gui_main_page_website_button": "Börja publicera", - "gui_main_page_receive_button": "Starta mottagning", - "gui_new_tab_chat_button": "Chatta anonymt", - "gui_open_folder_error": "Det gick inte att öppna mappen med xdg-open. Filen finns här: {}", - "gui_chat_url_description": "Vem som helst med denna OnionShare-adress och privata nyckel kan gå med i detta chattrum med hjälp av Tor Browser: ", - "gui_status_indicator_chat_stopped": "Redo att chatta", - "gui_status_indicator_chat_scheduled": "Schemalagd…", - "history_receive_read_message_button": "Läs meddelandet", - "mode_settings_receive_webhook_url_checkbox": "Använd aviseringswebhook", - "mode_settings_receive_disable_files_checkbox": "Inaktivera uppladdning av filer", - "mode_settings_receive_disable_text_checkbox": "Inaktivera att skicka text", - "mode_settings_title_label": "Anpassad titel", - "gui_color_mode_changed_notice": "Starta om OnionShare för att det nya färgläget ska tillämpas.", - "gui_status_indicator_chat_started": "Chattar", - "gui_status_indicator_chat_working": "Startar…", - "gui_chat_url_public_description": "Alla med denna OnionShare-adress kan gå med i detta chattrum med Tor Browser: ", - "gui_settings_theme_dark": "Dark", - "gui_settings_theme_light": "Light", - "gui_settings_theme_auto": "Automatiskt", - "gui_settings_theme_label": "Tema", - "gui_client_auth_instructions": "Skicka sedan den privata nyckeln för att ge åtkomst till din OnionShare -tjänst:", - "gui_url_instructions_public_mode": "Skicka OnionShare-adressen nedan:", - "gui_url_instructions": "Skicka först OnionShare-adressen nedan:", - "gui_receive_url_public_description": "Alla med denna OnionShare-adress kan ladda upp filer till din dator med Tor Browser: ", - "gui_website_url_public_description": "Alla med denna OnionShare-adress kan besöka din webbplats med Tor Browser: ", - "gui_share_url_public_description": "Alla med denna OnionShare-adress kan hämta dina filer med Tor Browser: ", - "gui_server_doesnt_support_stealth": "Tyvärr stöder den här versionen av Tor inte stealth (klientautentisering). Försök med en nyare version av Tor, eller använd det offentliga läget om det inte behöver vara privat.", - "gui_please_wait_no_button": "Startar…", - "gui_hide": "Dölja", - "gui_reveal": "Visa", - "gui_qr_label_auth_string_title": "Privat nyckel", - "gui_qr_label_url_title": "OnionShare-adress", - "gui_copied_client_auth": "Privat nyckel kopierad till Urklipp", - "gui_copied_client_auth_title": "Kopierad privat nyckel", - "gui_copy_client_auth": "Kopiera den privata nyckeln", - "gui_tor_settings_window_title": "Torinställningar", - "gui_settings_controller_extras_label": "Torinställningar", - "gui_dragdrop_sandbox_flatpak": "För att göra Flatpak mer säkert, är dra och släpp inte tillåtet. Använd Lägg till filer och Lägg till katalog knapparna för att bläddra efter filer istället." -} diff --git a/desktop/src/onionshare/resources/locale/sw.json b/desktop/src/onionshare/resources/locale/sw.json deleted file mode 100644 index 31eb72c5..00000000 --- a/desktop/src/onionshare/resources/locale/sw.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "preparing_files": "", - "not_a_readable_file": "", - "no_available_port": "", - "other_page_loaded": "", - "close_on_autostop_timer": "", - "closing_automatically": "", - "large_filesize": "", - "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_autostop_timer": "", - "gui_stop_server_autostop_timer_tooltip": "", - "gui_start_server_autostart_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_copy_url": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "gui_waiting_to_start": "", - "gui_please_wait": "", - "gui_quit_title": "", - "gui_share_quit_warning": "", - "gui_receive_quit_warning": "", - "gui_quit_warning_quit": "", - "gui_quit_warning_dont_quit": "", - "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_autoupdate_label": "", - "gui_settings_autoupdate_option": "", - "gui_settings_autoupdate_timestamp": "", - "gui_settings_autoupdate_timestamp_never": "", - "gui_settings_autoupdate_check_button": "", - "gui_settings_general_label": "Mipangilio ya kawaida", - "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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "gui_settings_autostart_timer_checkbox": "", - "gui_settings_autostart_timer": "", - "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": "", - "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": "Ndio", - "gui_tor_connection_ask_quit": "", - "gui_tor_connection_error_settings": "", - "gui_tor_connection_canceled": "", - "gui_tor_connection_lost": "", - "gui_server_started_after_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "gui_server_autostart_timer_expired": "", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "", - "share_via_onionshare": "", - "gui_connect_to_tor_for_onion_settings": "", - "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_scheduled": "", - "gui_status_indicator_share_started": "", - "gui_status_indicator_receive_stopped": "", - "gui_status_indicator_receive_working": "", - "gui_status_indicator_receive_scheduled": "", - "gui_status_indicator_receive_started": "", - "gui_file_info": "", - "gui_file_info_single": "", - "history_in_progress_tooltip": "", - "history_completed_tooltip": "", - "error_cannot_create_data_dir": "", - "gui_receive_mode_warning": "", - "gui_mode_share_button": "", - "gui_mode_receive_button": "", - "gui_settings_receiving_label": "", - "gui_settings_data_dir_label": "", - "gui_settings_data_dir_browse_button": "Vinjari", - "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_autostop_timer_waiting": "", - "gui_receive_mode_no_files": "", - "gui_receive_mode_autostop_timer_waiting": "", - "receive_mode_upload_starting": "", - "days_first_letter": "", - "hours_first_letter": "", - "minutes_first_letter": "", - "seconds_first_letter": "" -} diff --git a/desktop/src/onionshare/resources/locale/te.json b/desktop/src/onionshare/resources/locale/te.json deleted file mode 100644 index d1784090..00000000 --- a/desktop/src/onionshare/resources/locale/te.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "preparing_files": "దస్త్రాలు కుదించబడుతున్నాయి.", - "not_a_readable_file": "{0:s} చదువగలిగిన దస్త్రం కాదు.", - "no_available_port": "Onion సేవను మొదలుపెట్టుటకై ఒక అనువైన పోర్టు కనబడలేదు", - "other_page_loaded": "జాల చిరునామా లోడు చేయబడినది", - "close_on_autostop_timer": "స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది కనుక ఆపివేయబడినది", - "closing_automatically": "బదిలీ పూర్తి అయినందున ఆపబడినది", - "large_filesize": "హెచ్చరిక: ఒక పెద్ద అంశాన్ని పంపించడానికి కొన్ని గంటలు పట్టవచ్చు", - "gui_drag_and_drop": "దస్త్రాలను, సంచయాలను లాగి వదలండి\nవాటిని పంచుకోవడం మొదలుపెట్టుటకు", - "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_autostop_timer": "పంచుకోవడం ఆపివేయి ({})", - "gui_stop_server_autostop_timer_tooltip": "స్వీయ నియంత్రణ సమయం అయిపోయినది", - "gui_start_server_autostart_timer_tooltip": "స్వీయ నియంత్రణ సమయం అయిపోయినది", - "gui_receive_start_server": "స్వీకరించు రీతిని మొదలుపెట్టు", - "gui_receive_stop_server": "స్వీకరించు రీతిని ఆపివేయి", - "gui_receive_stop_server_autostop_timer": "స్వీకరించు రీతిని ఆపివేయి ({} మిగిలినది)", - "gui_copy_url": "జాల చిరునామాను నకలు తీయి", - "gui_canceled": "రద్దు చేయబడినది", - "gui_copied_url_title": "OnionShare జాల చిరునామా నకలు తీయబడినది", - "gui_copied_url": "OnionShare జాల చిరునామా క్లిప్‌బోర్డునకు నకలు తీయబడినది", - "gui_waiting_to_start": "ఇంకా {}లో మొదలగునట్లు అమర్చబడినది. రద్దుచేయుటకై ఇక్కడ నొక్కు.", - "gui_please_wait": "మొదలుపెట్టబడుతుంది... రద్దు చేయుటకై ఇక్కడ నొక్కు.", - "gui_quit_title": "అంత త్వరగా కాదు", - "gui_share_quit_warning": "మీరు దస్త్రాలను పంపించే క్రమంలో ఉన్నారు. మీరు నిశ్చయంగా ఇప్పుడు OnionShareని విడిచి వెళ్ళాలనుకుంటున్నారా?", - "gui_receive_quit_warning": "మీరు దస్త్రాలను స్వీకరించే క్రమంలో ఉన్నారు. మీరు నిశ్చయంగా ఇప్పుడు OnionShareని విడిచి వెళ్ళాలనుకుంటున్నారా?", - "gui_quit_warning_quit": "నిష్క్రమించు", - "gui_quit_warning_dont_quit": "రద్దుచేయి", - "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 మరియు python-3-stem 1.4.0, ఈ రెండూ ఉండాలి.", - "gui_settings_window_title": "అమరికలు", - "gui_settings_whats_this": "ఇది ఏమిటి?", - "gui_settings_stealth_option": "ఉపయోక్త ధ్రువీకరణను వాడు", - "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": "Onion అమరికలు", - "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 విహారిణిని వాడి స్వయంచాలక ఆకృతీకరణకు ప్రయత్నించు", - "gui_settings_connection_type_control_port_option": "నియంత్రణ పోర్టును వాడి అనుసంధానం చేయి", - "gui_settings_connection_type_socket_file_option": "సాకెట్ దస్త్రాన్ని వాడి అనుసంధానం చేయి", - "gui_settings_connection_type_test_button": "Torకు అనుసంధానతను పరీక్షించు", - "gui_settings_control_port_label": "నియంత్రణ చేయు పోర్టు", - "gui_settings_socket_file_label": "సాకెట్ దస్త్రం", - "gui_settings_socks_label": "SOCKS పోర్టు", - "gui_settings_authenticate_label": "Tor ధ్రువీకరణ అమరికలు", - "gui_settings_authenticate_no_auth_option": "ధృవీకరణ లేకుండా, లేదా కుకీ ధ్రువీకరణ", - "gui_settings_authenticate_password_option": "సంకేతపుమాట", - "gui_settings_password_label": "సంకేతపుమాట", - "gui_settings_tor_bridges": "Tor బ్రిడ్జి మద్దతు", - "gui_settings_tor_bridges_no_bridges_radio_option": "బ్రిడ్జిలు వాడవద్దు", - "gui_settings_tor_bridges_obfs4_radio_option": "అంతర్నిర్మిత obfs4 అనుసంధానయుక్త మాధ్యమాలు వాడు", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "అంతర్నిర్మిత obfs4 అనుసంధానయుక్త మాధ్యమాలు వాడు (obfs4proxy కావాలి)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "అంతర్నిర్మిత meek_lite (Azure) అనుసంధానయుక్త మాధ్యమాలు వాడు", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "అంతర్నిర్మిత meek_lite (Azure) అనుసంధానయుక్త మాధ్యమాలు వాడు (obfs4proxy కావాలి)", - "gui_settings_meek_lite_expensive_warning": "హెచ్చరిక: tor వ్యవస్థను meek_lite బ్రిడ్జిల ద్వారా నడపడం చాలా ఖర్చుతో కూడిన పని.

మీరు obfs4 మాధ్యమాల ద్వారా లేదా వేరే మామూలు బ్రిడ్జిల ద్వారా torకు సూటిగా అనుసంధానించలేని పక్షంలోనే వాటిని వాడండి.", - "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_button_save": "భద్రపరచు", - "gui_settings_button_cancel": "రద్దుచేయి", - "gui_settings_button_help": "సహాయం", - "gui_settings_autostop_timer_checkbox": "స్వయంచాలితంగా ఆగు సమయ సూచీని వాడు", - "gui_settings_autostop_timer": "ఇక్కడ పంచినది ఆపు:", - "gui_settings_autostart_timer_checkbox": "స్వయంచాలితంగా మొదలయ్యే సమయ సూచీని వాడు", - "gui_settings_autostart_timer": "ఇక్కడ పంచినది మొదలుపెట్టు:", - "settings_error_unknown": "మీ అమరికలు సరైనవిగా లేవు కనుక టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", - "settings_error_automatic": "Tor నియంత్రణకర్తకు అనుసంధానం కాలేకపోతుంది. Tor విహారిణి (torproject.org నుండి లభ్యం) వెనుతలంలో పనిచేస్తుందా?", - "settings_error_socket_port": "{}:{} వద్ద టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", - "settings_error_socket_file": "సాకెట్ దస్త్రం {} ద్వారా టార్ నియంత్రితకు అనుసంధానింపబడలేదు.", - "settings_error_auth": "{}:{} వద్ద అనుసంధానించబడినది, కానీ ధ్రువపరచబడలేదు. ఇది టార్ నియంత్రిత కాదేమో?", - "settings_error_missing_password": "Tor నియంత్రితకు అనుసంధానించబడినది, కానీ ధ్రువపరచడానికి ఒక సంకేతపుమాట అవసరం.", - "settings_error_unreadable_cookie_file": "Tor నియంత్రితకు అనుసంధానించబడినది, కానీ సంకేతపుమాట సరైనది కాకపోవచ్చు, లేదా మీ వాడుకరికి కుకీ దస్త్రాన్ని చదవడానికి అనుమతి లేకపోవచ్చు.", - "settings_error_bundled_tor_not_supported": "OnionShareతో పాటు వచ్చిన Tor రూపాంతరం విండోస్ లేదా మాక్ఓఎస్‌లో అభివృద్ధి రీతిలో పనిచేయదు.", - "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 చిరునామాలకు మద్దతు ఉంది: {}.", - "error_tor_protocol_error": "Torతో పనిచేయుటలో ఒక దోషం కనబడింది: {}", - "error_tor_protocol_error_unknown": "Torతో పనిచేయుటలో ఒక తెలియని దోషం కనబడింది", - "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_autostop_timer": "సర్వరు మొదలయ్యేలోపే స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది. ఒక కొత్త అంశాన్ని పంచుకోండి.", - "gui_server_autostop_timer_expired": "స్వయంచాలితంగా ఆగు సమయ సూచీ సమయాతీతమయిపోయినది. పంచుకోవడం మొదలుపెట్టడానికి దానిని నవీకరించండి.", - "gui_server_autostart_timer_expired": "నిర్ణీత సమయం ఇప్పటికే దాటిపోయింది. పంచుకోవడం ప్రారంభించడం కొరకు దయచేసి దానిని నవీకరించండి.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "స్వయంచాలక ఆగు సమయం అనేది స్వయంచాలక ప్రారంభ సమయంతో సమానంగా లేదా అంతకు ముందు ఉండకూడదు. పంచుకోవడం ప్రారంభించడం కొరకు దయచేసి దానిని నవీకరించండి.", - "share_via_onionshare": "OnionShare చేయి", - "gui_connect_to_tor_for_onion_settings": "Onion సేవా అమరికలను చూచుటకు Torతో అనుసంధానించు", - "gui_save_private_key_checkbox": "ఒక నిరంతర చిరునామాను వాడు", - "gui_share_url_description": "ఈOnionShare చిరునామా గల ఎవరైనా మీ దస్త్రాలను Tor విహారిణితో దింపుకోవచ్చు: ", - "gui_receive_url_description": "ఈOnionShare చిరునామా గల ఎవరైనా మీ దస్త్రాలను Tor విహారిణితో ఎక్కించుకోవచ్చు:", - "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_scheduled": "షెడ్యూల్…", - "gui_status_indicator_share_started": "పంచుకొంటుంది", - "gui_status_indicator_receive_stopped": "స్వీకరణకు సిద్ధం", - "gui_status_indicator_receive_working": "మొదలుపెడుతుంది…", - "gui_status_indicator_receive_scheduled": "షెడ్యూల్…", - "gui_status_indicator_receive_started": "స్వీకరిస్తుంది", - "gui_file_info": "{} దస్త్రాలు, {}", - "gui_file_info_single": "{} దస్త్రము, {}", - "history_in_progress_tooltip": "{} పని జరుగుతూ ఉంది", - "history_completed_tooltip": "{} అయిపోయింది", - "error_cannot_create_data_dir": "OnionShare దత్త సంచయం: {}ని సృష్టించడం జరగలేదు", - "gui_receive_mode_warning": "స్వీకరించు రీతి వ్యక్తులు మీ కంప్యూటరుకు దస్త్రాలను ఎక్కించడానికి అనుమతినిస్తుంది.

కొన్ని దస్త్రాలను మీరు తెరిస్తే అవి అవశ్యం మీ కంప్యూటరును నియంత్రించగలవు. కనుక మీరు విశ్వసించే వ్యక్తులనుండి వచ్చిన వాటినే తెరవండి, లేదా మీరేం చేస్తున్నారో మీకు అవగాహన ఉంటేనే తెరవండి.", - "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": "nautilus అందుబాటులో లేనందున సంచయం తెరువబడలేదు. దస్త్రం ఇక్కడుంది: {}", - "gui_settings_language_label": "ఎంచుకున్న భాష", - "gui_settings_language_changed_notice": "మీరు మార్చిన భాష అమలులోకి రావడానికి OnionShareని పునఃప్రారంభించండి.", - "systray_menu_exit": "నిష్క్రమించు", - "systray_page_loaded_title": "పుట లోడు చేయబడినది", - "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_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": "%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": "ఇంకా ఏ దస్త్రాలు పంపబడలేదు", - "gui_share_mode_autostop_timer_waiting": "పంపుట పూర్తి అగుటకు వేచిచూడడం జరుగుతున్నది", - "gui_receive_mode_no_files": "ఇంకా ఏ దస్త్రాలు స్వీకరించబడలేదు", - "gui_receive_mode_autostop_timer_waiting": "స్వీకరణ పూర్తి అగుటకు వేచిచూడడం జరుగుతున్నది", - "receive_mode_upload_starting": "పూర్తి పరిమాణం {} గల ఎక్కింపు మొదలవుతుంది", - "days_first_letter": "d", - "hours_first_letter": "h", - "minutes_first_letter": "m", - "seconds_first_letter": "s", - "incorrect_password": "తప్పు పాస్వర్డ్" -} diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json deleted file mode 100644 index dc792c27..00000000 --- a/desktop/src/onionshare/resources/locale/tr.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "preparing_files": "Dosyalar sıkıştırılıyor.", - "give_this_url": "Bu adresi alıcıya verin:", - "ctrlc_to_stop": "Sunucuyu durdurmak için, Ctrl+C'ye basın", - "not_a_file": "{0:s} dosya değil.", - "other_page_loaded": "Adres yüklendi", - "closing_automatically": "Aktarım tamamlandığından durduruldu", - "large_filesize": "Uyarı: Büyük bir paylaşım saatler sürebilir", - "help_local_only": "Tor kullanmayın (sadece geliştirme için)", - "help_stay_open": "Dosyalar gönderildikten sonra paylaşmaya devam et", - "help_debug": "OnionShare hatalarını stdout'a ve web hatalarını diske yaz", - "help_filename": "Paylaşmak için dosya ve klasörler listesi", - "gui_drag_and_drop": "Paylaşıma başlamak için dosya ve klasörleri sürükleyip bırakın", - "gui_add": "Ekle", - "gui_delete": "Sil", - "gui_choose_items": "Seç", - "gui_share_start_server": "Paylaşımı başlat", - "gui_share_stop_server": "Paylaşımı durdur", - "gui_copy_url": "Adresi kopyala", - "gui_downloads": "İndirilenler:", - "gui_canceled": "İptal edilen", - "gui_copied_url": "OnionShare adresi panoya kopyalandı", - "gui_please_wait": "Başlatılıyor... İptal etmek için tıklayın.", - "zip_progress_bar_format": "Sıkıştırılıyor: %p%", - "config_onion_service": "{0:d} bağlantı noktasında onion servisini ayarla.", - "give_this_url_receive": "Bu adresi gönderene ver:", - "not_a_readable_file": "{0:s} okunabilir bir dosya değil.", - "no_available_port": "Onion hizmetinin başlatılacağı uygun bir kapı numarası bulunamadı", - "close_on_autostop_timer": "Otomatik durdurma sayacı sona erdiğinden durduruldu", - "give_this_url_stealth": "Bu adresi ve HidServAuth hattını alıcıya verin:", - "give_this_url_receive_stealth": "Bu adresi ve HidServAuth'u gönderene verin:", - "help_autostop_timer": "Belirli bir saniye sonra paylaşmayı durdur", - "help_stealth": "İstemci yetkilendirmesini kullan (gelişmiş)", - "help_receive": "Paylaşımı göndermek yerine, almak", - "help_config": "Özel JSON config dosyası konumu (isteğe bağlı)", - "gui_add_files": "Dosya ekle", - "gui_add_folder": "Klasör ekle", - "gui_share_stop_server_autostop_timer": "Paylaşımı durdur ({})", - "gui_share_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter", - "gui_receive_start_server": "Alma kipini başlat", - "gui_receive_stop_server": "Alma kipini durdur", - "gui_receive_stop_server_autostop_timer": "Alma kipini durdur ({} kaldı)", - "gui_receive_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter", - "gui_copied_url_title": "OnionShare adresi kopyalandı", - "version_string": "OnionShare {0:s} | https://onionshare.org/", - "gui_quit_title": "Çok hızlı değil", - "gui_share_quit_warning": "Dosya gönderiyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?", - "gui_receive_quit_warning": "Dosya alıyorsunuz. OnionShare uygulamasından çıkmak istediğinize emin misiniz?", - "gui_quit_warning_quit": "Çık", - "gui_quit_warning_dont_quit": "İptal", - "error_stealth_not_supported": "İstemci kimlik doğrulamasını kullanmak için, en az Tor 0.2.9.1-alpha (ya da Tor Browser 6.5) ve python3-stem 1.5.0 sürümleri gereklidir.", - "error_ephemeral_not_supported": "OnionShare için en az Tor 0.2.7.1 ve python3-stem 1.4.0 sürümleri gereklidir.", - "gui_settings_window_title": "Ayarlar", - "gui_settings_whats_this": "Bu nedir?", - "gui_settings_stealth_option": "İstemci kimlik doğrulaması kullanılsın", - "gui_settings_autoupdate_label": "Yeni sürümü denetle", - "gui_settings_autoupdate_option": "Yeni bir sürüm yayınlandığında haber ver", - "gui_settings_autoupdate_timestamp": "Son denetleme: {}", - "gui_settings_autoupdate_timestamp_never": "Hiçbir zaman", - "gui_settings_autoupdate_check_button": "Güncelleme denetimi", - "gui_settings_general_label": "Genel ayarlar", - "gui_settings_onion_label": "Onion ayarları", - "gui_settings_sharing_label": "Paylaşım ayarları", - "gui_settings_close_after_first_download_option": "Dosyalar gönderildikten sonra paylaşım durdurulsun", - "gui_settings_connection_type_label": "OnionShare ile Tor bağlantısı nasıl kurulmalı?", - "gui_settings_connection_type_bundled_option": "OnionShare üzerindeki Tor sürümü kullanılsın", - "gui_settings_connection_type_automatic_option": "Tor Browser ile otomatik yapılandırma denensin", - "gui_settings_connection_type_control_port_option": "Denetim kapı numarası kullanılarak bağlanılsın", - "gui_settings_connection_type_socket_file_option": "Soket dosyası kullanılarak bağlantı kurulsun", - "gui_settings_connection_type_test_button": "Tor bağlantısını sına", - "gui_settings_control_port_label": "Denetim kapı numarası", - "gui_settings_socket_file_label": "Soket dosyası", - "gui_settings_socks_label": "SOCKS kapı numarası", - "gui_settings_authenticate_label": "Tor kimlik doğrulama ayarları", - "gui_settings_authenticate_no_auth_option": "Kimlik doğrulama yok, veya çerez doğrulaması", - "gui_settings_authenticate_password_option": "Parola", - "gui_settings_password_label": "Parola", - "gui_settings_tor_bridges": "Tor köprüsü kullanarak bağlanılsın mı?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Köprüler kullanılmasın", - "gui_settings_tor_bridges_obfs4_radio_option": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Yerleşik obfs4 değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Yerleşik meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)", - "gui_settings_meek_lite_expensive_warning": "Uyarı: meek-azure köprülerini çalıştırmak Tor Projesine pahalıya patlıyor.

Bu köprüleri yalnızca Tor ile doğrudan veya obfs4 ve diğer normal köprüler üzerinden bağlantı kuramıyorsanız kullanın.", - "gui_settings_tor_bridges_custom_radio_option": "Özel köprüler kullanılsın", - "gui_settings_tor_bridges_custom_label": "Köprüleri https://bridges.torproject.org adresinden alabilirsiniz", - "gui_settings_tor_bridges_invalid": "Eklediğiniz köprülerin hiçbiri çalışmıyor. İki kez denetleyin veya başka köprüler ekleyin.", - "gui_settings_button_save": "Kaydet", - "gui_settings_button_cancel": "İptal", - "gui_settings_button_help": "Yardım", - "gui_settings_autostop_timer_checkbox": "Otomatik durdurma sayacı kullanılsın", - "gui_settings_autostop_timer": "Paylaşımı durdurma zamanı:", - "settings_error_unknown": "Ayarlarınız mantıklı olmadığından Tor denetleyicisine bağlanılamıyor.", - "settings_error_automatic": "Tor denetleyicisi ile bağlantı kurulamadı. Arka planda Tor Browser (torproject.org adresinden alınabilir) çalışıyor olabilir mi?", - "settings_error_socket_port": "{}:{} adresinden Tor denetleyicisi ile bağlantı kurulamadı.", - "settings_error_socket_file": "{} socket dosyası kullanılarak Tor denetleyicisi ile bağlantı kurulamadı.", - "settings_error_auth": "{}:{} bağlantısı kuruldu, ancak kimlik doğrulaması yapılamadı. Bu bir Tor denetleyicisi olmayabilir mi?", - "settings_error_missing_password": "Tor denetleyicisi ile bağlantı kuruldu, ancak kimlik doğrulaması için parola gerekiyor.", - "settings_error_unreadable_cookie_file": "Tor denetleyicisi ile bağlantı kuruldu, ancak parola yanlış ya da kullanıcının çerez dosyasını okumasına izin verilmiyor.", - "settings_error_bundled_tor_not_supported": "OnionShare ile birlikte gelen Tor sürümünü kullanmak, Windows veya macOS üzerinde geliştirici modunda çalışmaz.", - "settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?", - "settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}", - "settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.", - "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}", - "error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı", - "error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor", - "connecting_to_tor": "Tor ağı ile bağlantı kuruluyor", - "update_available": "Yeni bir OnionShare sürümü yayınlanmış. Almak için buraya tıklayın.

Kullandığınız sürüm {}, son sürüm {}.", - "update_error_check_error": "Sürüm denetimi yapılamadı: Tor bağlantınız kesik ya da OnionShare web sitesi kapalı olabilir mi?", - "update_error_invalid_latest_version": "Sürüm denetimi yapılamadı: OnionShare web sitesi en son sürümün anlaşılamayan '{}' olduğunu bildiriyor…", - "update_not_available": "Güncel OnionShare sürümünü kullanıyorsunuz.", - "gui_tor_connection_ask": "Tor bağlantı sorunlarını çözmek için ayarlar açılsın mı?", - "gui_tor_connection_ask_open_settings": "Evet", - "gui_tor_connection_ask_quit": "Çık", - "gui_tor_connection_error_settings": "OnionShare ayarlarından Tor ağı ile bağlantı kurma yöntemini değiştirmeyi deneyin.", - "gui_tor_connection_canceled": "Tor bağlantısı kurulamadı.\n\nİnternete bağlı olduğunuzdan emin olduktan sonra OnionShare uygulamasını yeniden açın ve Tor bağlantısını kurun.", - "gui_tor_connection_lost": "Tor bağlantısı kesildi.", - "gui_server_started_after_autostop_timer": "Otomatik durdurma sayacı, sunucu başlamadan önce sona erdi. Lütfen yeni bir paylaşım yapın.", - "gui_server_autostop_timer_expired": "Otomatik durdurma sayacı zaten sona ermiş. Paylaşımı başlatmak için sayacı ayarlayın.", - "share_via_onionshare": "OnionShare ile paylaş", - "gui_connect_to_tor_for_onion_settings": "Onion hizmet ayarlarını görmek için Tor bağlantısı kurun", - "gui_save_private_key_checkbox": "Kalıcı bir adres kullanılsın", - "gui_share_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak dosyalarınızı indirebilir: ", - "gui_receive_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak dosyaları bilgisayarınıza yükleyebilir: ", - "gui_url_label_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.

Sonraki her paylaşımda adres yeniden kullanılır (bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini kapatın.)", - "gui_url_label_stay_open": "Bu paylaşım otomatik olarak durdurulmayacak.", - "gui_url_label_onetime": "Bu paylaşım bir kez tamamlandıktan sonra durdurulacak.", - "gui_url_label_onetime_and_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.

Sonraki her paylaşım adresi yeniden kullanır (bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini kapatın.)", - "gui_status_indicator_share_stopped": "Paylaşıma hazır", - "gui_status_indicator_share_working": "Başlatılıyor…", - "gui_status_indicator_share_started": "Paylaşılıyor", - "gui_status_indicator_receive_stopped": "Almaya hazır", - "gui_status_indicator_receive_working": "Başlatılıyor…", - "gui_status_indicator_receive_started": "Alınıyor", - "gui_file_info": "{} dosya, {}", - "gui_file_info_single": "{} dosya, {}", - "history_in_progress_tooltip": "{} sürüyor", - "history_completed_tooltip": "{} tamamlandı", - "error_cannot_create_data_dir": "OnionShare veri klasörü oluşturulamadı: {}", - "receive_mode_data_dir": "Size gönderilen dosyalar bu klasörde görünür: {}", - "receive_mode_warning": "Uyarı: Alma kipi, insanların bilgisayarınıza dosya yüklemesini sağlar. Bazı dosyalar, onları açarsanız bilgisayarınızın denetimini ele geçirebilir. Yalnızca güvendiğiniz insanlara veya ne yaptığınızı biliyorsanız bunları açın.", - "gui_receive_mode_warning": "Alma kipi başkalarının bilgisayarınıza dosya yüklemesini sağlar.

Bazı dosyalar, açtığınızda bilgisayarınızın denetimini ele geçirebilir. Bir şeyleri yalnızca güvendiğiniz kişilerden geliyorsa veya ne yaptığınızı biliyorsanız açın.", - "receive_mode_upload_starting": "Toplam boyutu {} olan karşıya yükleme başlatılıyor", - "receive_mode_received_file": "Alınan: {}", - "gui_mode_share_button": "Paylaşılan Dosyalar", - "gui_mode_receive_button": "Alınan Dosyalar", - "gui_settings_receiving_label": "Alma ayarları", - "gui_settings_data_dir_label": "Dosyaları şuraya kaydet", - "gui_settings_data_dir_browse_button": "Göz at", - "gui_settings_public_mode_checkbox": "Herkese açık kip", - "gui_open_folder_error_nautilus": "Nautilus kullanılamadığından klasör açılamıyor. Dosya burada: {}", - "gui_settings_language_label": "Dil", - "gui_settings_language_changed_notice": "Dil değişikliğinin uygulanabilmesi için OnionShare uygulamasını yeniden başlatın.", - "systray_menu_exit": "Çık", - "systray_page_loaded_title": "Sayfa yüklendi", - "systray_page_loaded_message": "OnionShare adresi yüklendi", - "systray_share_started_title": "Paylaşım başlatıldı", - "systray_share_started_message": "Birine dosya gönderilmeye başlanıyor", - "systray_share_completed_title": "Paylaşım tamamlandı", - "systray_share_completed_message": "Dosyalar gönderildi", - "systray_share_canceled_title": "Paylaşım iptal edildi", - "systray_share_canceled_message": "Birisi dosyalarınızı almayı iptal etti", - "systray_receive_started_title": "Alma başlatıldı", - "systray_receive_started_message": "Birisi size dosyalar gönderiyor", - "gui_all_modes_history": "Geçmiş", - "gui_all_modes_clear_history": "Tümünü temizle", - "gui_all_modes_transfer_started": "Başlatıldı {}", - "gui_all_modes_transfer_finished_range": "Aktarıldı {} - {}", - "gui_all_modes_transfer_finished": "Aktarıldı {}", - "gui_all_modes_transfer_canceled_range": "İptal edildi {} - {}", - "gui_all_modes_transfer_canceled": "İptal edildi {}", - "gui_all_modes_progress_complete": "%p%, {0:s} geçti.", - "gui_all_modes_progress_starting": "{0:s}, %p% (hesaplanıyor)", - "gui_all_modes_progress_eta": "{0:s}, öngörülen yükleme zamanı: {1:s}, %p%", - "gui_share_mode_no_files": "Henüz bir dosya gönderilmedi", - "gui_share_mode_timeout_waiting": "Göndermeyi bitirmek için bekleniyor", - "gui_receive_mode_no_files": "Henüz bir dosya alınmadı", - "gui_receive_mode_timeout_waiting": "Almayı bitirmek için bekleniyor", - "gui_stop_server_autostop_timer_tooltip": "Otomatik durdurma sayacı bitişi {}", - "gui_start_server_autostart_timer_tooltip": "Otomatik başlatma sayacı bitişi {}", - "gui_waiting_to_start": "{} içinde başlamaya zamanlandı. İptal etmek için tıklayın.", - "gui_settings_autostart_timer_checkbox": "Otomatik başlatma sayacı kullanılsın", - "gui_settings_autostart_timer": "Paylaşımı başlatma zamanı:", - "gui_server_autostart_timer_expired": "Zamanlanan süre zaten geçmiş. Paylaşımı başlatmak için ayarlayın.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Otomatik durdurma zamanı, otomatik başlatma zamanı ile aynı veya daha önce olamaz. Paylaşımı başlatmak için ayarlayın.", - "gui_status_indicator_share_scheduled": "Zamanlandı…", - "gui_status_indicator_receive_scheduled": "Zamanlandı…", - "gui_share_mode_autostop_timer_waiting": "Gönderme işleminin bitmesi bekleniyor", - "gui_receive_mode_autostop_timer_waiting": "Alma işleminin bitmesi bekleniyor", - "days_first_letter": "g", - "hours_first_letter": "s", - "minutes_first_letter": "d", - "seconds_first_letter": "sn", - "gui_website_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak web sitenizi ziyaret edebilir: ", - "gui_mode_website_button": "Web Sitesini Yayınla", - "gui_website_mode_no_files": "Henüz bir web sitesi paylaşılmadı", - "incorrect_password": "Parola yanlış", - "gui_settings_individual_downloads_label": "Dosyaların tek tek indirilmesine izin vermek için işareti kaldırın", - "history_requests_tooltip": "{} web isteği", - "gui_settings_csp_header_disabled_option": "İçerik Güvenlik Politikası başlığını devre dışı bırak", - "gui_settings_website_label": "Website ayarları", - "mode_settings_website_disable_csp_checkbox": "Öntanımlı İçerik Güvenliği İlkesi başlığı gönderme (web sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)", - "mode_settings_receive_data_dir_browse_button": "Göz at", - "mode_settings_receive_data_dir_label": "Dosyaları şuraya kaydet", - "mode_settings_share_autostop_sharing_checkbox": "Dosyalar gönderildikten sonra paylaşım durdurulsun (dosyaların tek tek indirilmesine izin vermek için işareti kaldırın)", - "mode_settings_legacy_checkbox": "Eski bir adres kullan (v2 onion hizmeti, tavsiye edilmez)", - "mode_settings_autostop_timer_checkbox": "Onion hizmeti şu zamanda durdurulsun", - "mode_settings_autostart_timer_checkbox": "Onion hizmeti şu zamanda başlatılsın", - "mode_settings_public_checkbox": "Bu, herkese açık bir OnionShare hizmetidir (kişisel anahtarı devre dışı bırakır)", - "mode_settings_persistent_checkbox": "Bu sekme kaydedilsin ve OnionShare ile otomatik olarak açılsın", - "mode_settings_advanced_toggle_hide": "Gelişmiş ayarları gizle", - "mode_settings_advanced_toggle_show": "Gelişmiş ayarları görüntüle", - "gui_quit_warning_cancel": "İptal", - "gui_quit_warning_description": "Bazı sekmelerinizde paylaşım etkin. Çıkarsanız tüm sekmeleriniz kaptılacak. Çıkmak istediğinize emin misiniz?", - "gui_quit_warning_title": "Emin misiniz?", - "gui_close_tab_warning_cancel": "İptal", - "gui_close_tab_warning_close": "Kapat", - "gui_close_tab_warning_website_description": "Şu anda bir web sitesi barındırıyorsunuz. Bu sekmeyi kapatmak istediğinize emin misiniz?", - "gui_close_tab_warning_receive_description": "Dosya alma işlemi devam ediyor. Bu sekmeyi kapatmak istediğinizden emin misiniz?", - "gui_close_tab_warning_share_description": "Dosya gönderme işlemi devam ediyor. Bu sekmeyi kapatmak istediğinize emin misiniz?", - "gui_close_tab_warning_persistent_description": "Bu sekme kalıcıdır. Kapatırsanız, kullandığı Onion adresini kaybedeceksiniz. Kapatmak istediğinize emin misiniz?", - "gui_new_tab_website_description": "Bilgisayarınızda statik bir HTML onion web sitesi barındırın.", - "gui_new_tab_website_button": "Web sitesi barındırın", - "gui_new_tab_receive_description": "Bilgisayarınızı çevrim içi bir dropbox'a dönüştürün. İnsanlar bilgisayarınıza dosya göndermek için Tor Browser kullanabilecekler.", - "gui_new_tab_receive_button": "Dosya alın", - "gui_new_tab_share_description": "Başka birine göndermek için bilgisayarınızdaki dosyaları seçin. Dosya göndermek istediğiniz kişi veya kişilerin sizden indirmek için Tor Browser kullanması gerekecektir.", - "gui_new_tab_share_button": "Dosya paylaşın", - "gui_close_tab_warning_title": "Emin misiniz?", - "gui_new_tab_tooltip": "Yeni bir sekme aç", - "gui_new_tab": "Yeni sekme", - "gui_remove": "Kaldır", - "gui_file_selection_remove_all": "Tümünü kaldır", - "gui_chat_start_server": "Sohbet sunucusunu başlat", - "gui_chat_stop_server": "Sohbet sunucusunu durdur", - "gui_receive_flatpak_data_dir": "OnionShare uygulamasını Flatpak kullanarak kurduğunuz için, dosyaları ~/OnionShare içindeki bir klasöre kaydetmelisiniz.", - "gui_show_qr_code": "QR kodunu görüntüle", - "gui_qr_code_dialog_title": "OnionShare QR kodu", - "gui_qr_code_description": "OnionShare adresini bir başkasıyla daha kolay paylaşmak için bu QR kodunu telefonunuzdaki kamera gibi bir QR okuyucuyla tarayın.", - "gui_open_folder_error": "Klasör xdg-open ile açılamadı. Dosya burada: {}", - "gui_new_tab_chat_button": "Anonim olarak sohbet edin", - "gui_main_page_share_button": "Paylaşımı başlat", - "gui_main_page_receive_button": "Almayı başlat", - "gui_main_page_website_button": "Barındırmayı başlat", - "gui_main_page_chat_button": "Sohbeti başlat", - "gui_tab_name_share": "Paylaş", - "gui_tab_name_receive": "Al", - "gui_tab_name_website": "Web sitesi", - "gui_tab_name_chat": "Sohbet", - "gui_chat_url_description": "Bu OnionShare adresine ve kişisel anahtara sahip olan herkes Tor Browser kullanarak bu sohbet odasına katılabilir: ", - "error_port_not_available": "OnionShare kapı numarası kullanılamıyor", - "gui_rendezvous_cleanup_quit_early": "Erken çık", - "gui_rendezvous_cleanup": "Dosyalarınızın aktarıldığından emin olmak için Tor devrelerinin kapanması bekleniyor.\n\nBu, birkaç dakika sürebilir.", - "gui_color_mode_changed_notice": "Yeni renk kipinin uygulanması için OnionShare uygulamasını yeniden başlatın.", - "history_receive_read_message_button": "İletiyi oku", - "mode_settings_receive_webhook_url_checkbox": "Bildirim web kancası kullanılsın", - "mode_settings_receive_disable_files_checkbox": "Dosya yüklenemesin", - "mode_settings_receive_disable_text_checkbox": "Metin gönderilemesin", - "mode_settings_title_label": "Özel başlık", - "gui_status_indicator_chat_started": "Sohbet ediliyor", - "gui_status_indicator_chat_scheduled": "Zamanlandı…", - "gui_status_indicator_chat_working": "Başlatılıyor…", - "gui_status_indicator_chat_stopped": "Sohbet etmeye hazır", - "gui_settings_theme_dark": "Koyu", - "gui_settings_theme_light": "Açık", - "gui_settings_theme_auto": "Otomatik", - "gui_settings_theme_label": "Tema", - "gui_please_wait_no_button": "Başlatılıyor…", - "gui_server_doesnt_support_stealth": "Maalesef bu Tor sürümü gizliliği (istemci kimlik doğrulaması) desteklemiyor. Lütfen daha yeni bir Tor sürümünü deneyin veya özel olması gerekmiyorsa 'herkese açık' kipini kullanın.", - "gui_client_auth_instructions": "Ardından, OnionShare hizmetinize erişime izin vermek için kişisel anahtarı gönderin:", - "gui_url_instructions_public_mode": "Aşağıdaki OnionShare adresini gönderin:", - "gui_url_instructions": "İlk olarak, aşağıdaki OnionShare adresini gönderin:", - "gui_chat_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak bu sohbet odasına katılabilir: ", - "gui_receive_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak dosyaları bilgisayarınıza yükleyebilir: ", - "gui_website_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak web sitenizi ziyaret edebilir: ", - "gui_share_url_public_description": "Bu OnionShare adresine sahip olan herkes Tor Browser kullanarak dosyalarınızı indirebilir: ", - "gui_hide": "Gizle", - "gui_reveal": "Görüntüle", - "gui_qr_label_auth_string_title": "Kişisel anahtar", - "gui_qr_label_url_title": "OnionShare adresi", - "gui_copied_client_auth": "Kişisel anahtar panoya kopyalandı", - "gui_copied_client_auth_title": "Kişisel anahtar kopyalandı", - "gui_copy_client_auth": "Kişisel anahtarı kopyala", - "gui_settings_bridge_moat_radio_option": "torproject.org'dan bir köprü talep et", - "gui_settings_bridge_moat_button": "Yeni Bir Köprü Talep Et", - "gui_settings_bridge_custom_placeholder": "adres:bağlantınoktası yazın (satır başına bir tane)", - "gui_settings_moat_bridges_invalid": "Henüz torproject.org'dan bir köprü talep etmediniz.", - "moat_contact_label": "BridgeDB ile iletişime geçiliyor...", - "moat_captcha_error": "Çözüm doğru değil. Lütfen tekrar deneyin.", - "moat_solution_empty_error": "Resimdeki karakterleri girmelisiniz", - "mode_tor_not_connected_label": "OnionShare Tor ağına bağlı değil", - "gui_settings_tor_bridges_label": "Köprüler, Tor'un engellendiği yerlerde Tor Ağına erişmenize yardımcı olur. Nerede olduğunuza bağlı olarak, bir köprü diğerinden daha iyi çalışabilir.", - "gui_settings_bridge_use_checkbox": "Köprü kullan", - "mode_settings_website_custom_csp_checkbox": "Özel bir İçerik Güvenliği İlkesi başlığı gönder", - "gui_dragdrop_sandbox_flatpak": "Flatpak korumalı alanını daha güvenli hale getirmek için sürükle ve bırak desteklenmemektedir. Bunun yerine dosyalara göz atmak için Dosya Ekle ve Klasör Ekle düğmelerini kullanın.", - "gui_tor_settings_window_title": "Tor Ayarları", - "gui_settings_controller_extras_label": "Tor ayarları", - "gui_settings_bridge_none_radio_option": "Köprü kullanma", - "gui_settings_bridge_radio_builtin": "Yerleşik bir köprü seç", - "gui_settings_version_label": "OnionShare {} kullanıyorsunuz", - "gui_settings_bridge_custom_radio_option": "Güvenilir bir kaynaktan öğrendiğiniz bir köprü belirtin", - "gui_settings_stop_active_tabs_label": "Bazı sekmelerinizde çalışan hizmetler var.\nTor ayarlarınızı değiştirmek için tüm hizmetleri durdurmalısınız.", - "gui_settings_help_label": "Yardıma mı ihtiyacınız var? docs.onionshare.org adresine bakın", - "moat_captcha_submit": "Gönder", - "moat_captcha_reload": "Yeniden yükle", - "moat_captcha_label": "Bir köprü talep etmek için CAPTCHA'yı çözün.", - "moat_captcha_placeholder": "Resimdeki karakterleri girin", - "moat_bridgedb_error": "BridgeDB ile bağlantı kurulurken hata oluştu." -} diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json deleted file mode 100644 index 74a380eb..00000000 --- a/desktop/src/onionshare/resources/locale/uk.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "preparing_files": "Стиснення файлів.", - "not_a_readable_file": "{0:s} - файл що не читається.", - "no_available_port": "Не вдалося знайти доступний порт для запуску onion служби", - "other_page_loaded": "Адресу завантажено", - "close_on_autostop_timer": "Зупинено, оскільки збіг час таймера автоспину", - "closing_automatically": "Зупинено, оскільки передавання виконано", - "large_filesize": "Увага: надсилання великого об'єму може тривати години", - "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_autostop_timer": "Зупинити надсилання ({})", - "gui_stop_server_autostop_timer_tooltip": "Таймер автоспину спливає о {}", - "gui_start_server_autostart_timer_tooltip": "Таймер автостарту спливає о {}", - "gui_receive_start_server": "Запустити режим отримання", - "gui_receive_stop_server": "Зупинити режим отримання", - "gui_receive_stop_server_autostop_timer": "Зупинити режим отримання ({} залишилось)", - "gui_copy_url": "Копіювати Адресу", - "gui_canceled": "Скасовано", - "gui_copied_url_title": "Адресу OnionShare копійовано", - "gui_copied_url": "Адресу OnionShare копійовано до буферу обміну", - "gui_waiting_to_start": "Заплановано почати за {}. Натисніть для скасування.", - "gui_please_wait": "Початок... Натисніть для скасування.", - "gui_quit_title": "Не так швидко", - "gui_share_quit_warning": "Відбувається передача файлів. Ви впевнені, що бажаєте вийти з OnionShare?", - "gui_receive_quit_warning": "Відбувається отримання файлів. Ви впевнені, що бажаєте вийти з OnionShare?", - "gui_quit_warning_quit": "Вийти", - "gui_quit_warning_dont_quit": "Відміна", - "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_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": "Параметри Onion", - "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", - "gui_settings_connection_type_control_port_option": "Під'єднатися через порт керування", - "gui_settings_connection_type_socket_file_option": "Під'єднатися через файл сокета", - "gui_settings_connection_type_test_button": "Перевірити з'єднання з Tor", - "gui_settings_control_port_label": "Порт керування", - "gui_settings_socket_file_label": "Файл сокета", - "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?", - "gui_settings_tor_bridges_no_bridges_radio_option": "Не застосовувати мости", - "gui_settings_tor_bridges_obfs4_radio_option": "Застосовувати вбудовані obfs4 під'єднувані транспорти", - "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Застосовувати вбудовані obfs4 під'єднувані транспорти (вимагає obfs4proxy)", - "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти", - "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти (вимагає obfs4proxy)", - "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek-azure заважкі для роботи Tor Project.

Користуйтеся ними лише якщо не вдається з'єднатися з Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.", - "gui_settings_tor_bridges_custom_radio_option": "Застосовувати власні мости", - "gui_settings_tor_bridges_custom_label": "Ви можете отримати мости з https://bridges.torproject.org", - "gui_settings_tor_bridges_invalid": "Жоден з доданих мостів не працює. Ще раз перевірте їх або додайте інші.", - "gui_settings_button_save": "Зберегти", - "gui_settings_button_cancel": "Скасувати", - "gui_settings_button_help": "Допомога", - "gui_settings_autostop_timer_checkbox": "Використовувати таймер автоспину", - "gui_settings_autostop_timer": "Зупинити надсилання о:", - "gui_settings_autostart_timer_checkbox": "Використовувати таймер автозапуску", - "gui_settings_autostart_timer": "Почати ділитися о:", - "settings_error_unknown": "Не вдалося з'єднатися з контролером Tor, оскільки налаштування беззмістовні.", - "settings_error_automatic": "Не вдалося під'єднатися до контролера Tor. Чи запущено Tor браузер (доступний з torproject.org) у фоні?", - "settings_error_socket_port": "Не вдалося з'єднатися з контролером Tor за {}: {}.", - "settings_error_socket_file": "Не вдалося з'єднатися з контролером Tor за допомогою сокет файлу {}.", - "settings_error_auth": "З'єднано з {}:{}, але не вдається автентифікувати. Можливо це не Tor контролер?", - "settings_error_missing_password": "З'єднано з контролером Tor, але він вимагає пароль автентифікації.", - "settings_error_unreadable_cookie_file": "З'єднано з контролером Tor, але пароль може бути неправильним, або у вас немає прав на читання файлів cookie.", - "settings_error_bundled_tor_not_supported": "Використання Tor версії, яка поставляється з OnionShare не працює в режимі розробника на Windows або macOS.", - "settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, відсутнє з'єднання з Інтернетом або у вас неточний системний час?", - "settings_error_bundled_tor_broken": "OnionShare не вдалося з'єднатися з Tor:\n{}", - "settings_test_success": "З'єднано з контролером Tor.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.", - "error_tor_protocol_error": "Сталася помилка Tor: {}", - "error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor", - "connecting_to_tor": "З'єднання з мережею Tor", - "update_available": "Випущено новий OnionShare. Натисніть тут, щоб його отримати.

Ваша версія {}, а найновіша {}.", - "update_error_check_error": "Не вдалося перевірити наявність нових версій: можливо, ви не під'єднані до Tor або вебсайт OnionShare не працює?", - "update_error_invalid_latest_version": "Не вдалося перевірити наявність нової версії: вебсайт 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_autostop_timer": "Таймер автоспину збіг до початку роботи сервера. Будь ласка, почніть ділитися знову.", - "gui_server_autostop_timer_expired": "Час автоспину збіг. Налаштуйте його, щоб почати надсилання.", - "gui_server_autostart_timer_expired": "Запланований час збіг. Оновіть його, щоб почати надсилання.", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Час автоспину не може бути однаковим або ранішим за час автоматичного запуску. Налаштуйте його, щоб почати надсилання.", - "share_via_onionshare": "Поділитися через OnionShare", - "gui_connect_to_tor_for_onion_settings": "З'єднайтеся з Tor, щоб побачити параметри служби onion", - "gui_save_private_key_checkbox": "Використовувати постійну адресу", - "gui_share_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може завантажити ваші файли, через Tor Browser: ", - "gui_receive_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може вивантажити файли на ваш комп'ютер через Tor Browser: ", - "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_scheduled": "Заплановано…", - "gui_status_indicator_share_started": "Надсилання", - "gui_status_indicator_receive_stopped": "Готово до отримання", - "gui_status_indicator_receive_working": "Початок…", - "gui_status_indicator_receive_scheduled": "Заплановано…", - "gui_status_indicator_receive_started": "Отримання", - "gui_file_info": "{} файлів, {}", - "gui_file_info_single": "{} файл, {}", - "history_in_progress_tooltip": "{} в процесі", - "history_completed_tooltip": "{} завершено", - "error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}", - "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.

Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо ви впевнені у своїх діях.", - "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": "Неможливо відкрити теку бо nautilus недоступний. Файл розташовано: {}", - "gui_settings_language_label": "Мова", - "gui_settings_language_changed_notice": "Перезапустіть OnionShare для зміни мови.", - "systray_menu_exit": "Вийти", - "systray_page_loaded_title": "Сторінку Завантажено", - "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_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": "%p%, {0:s} минуло.", - "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_autostop_timer_waiting": "Очікування завершення надсилання", - "gui_receive_mode_no_files": "Поки що нічого не отримано", - "gui_receive_mode_autostop_timer_waiting": "Очікування завершення отримання", - "receive_mode_upload_starting": "Завантаження об'ємом {} починається", - "days_first_letter": "д", - "hours_first_letter": "г", - "minutes_first_letter": "х", - "seconds_first_letter": "с", - "gui_website_url_description": "Будь-хто, за допомогою цієї адреси та приватного ключа, може відвідати ваш вебсайт через Tor Browser: ", - "gui_mode_website_button": "Опублікувати вебсайт", - "gui_website_mode_no_files": "Немає опублікованих вебсайтів", - "incorrect_password": "Неправильний пароль", - "gui_settings_individual_downloads_label": "Приберіть позначку, щоб дозволити завантаження окремих файлів", - "history_requests_tooltip": "{} вебзапити", - "gui_settings_csp_header_disabled_option": "Відключити заголовок Політики захисту вмісту (CSP)", - "gui_settings_website_label": "Налаштування вебсайту", - "gui_close_tab_warning_persistent_description": "Це усталена вкладка. Якщо ви закриєте її, ви втратите onion-адресу, яку вона використовує. Ви впевнені, що хочете закрити її?", - "gui_close_tab_warning_website_description": "Ви маєте активний розміщений вебсайт. Ви впевнені, що хочете закрити цю вкладку?", - "gui_new_tab_website_description": "Розмістіть статичний onion HTML-вебсайт на вашому комп'ютері.", - "mode_settings_receive_data_dir_browse_button": "Вибрати", - "mode_settings_website_disable_csp_checkbox": "Не надсилати типовий заголовок Content Security Policy (дозволяє вебсайту використовувати сторонні ресурси)", - "mode_settings_receive_data_dir_label": "Зберігати файли до", - "mode_settings_share_autostop_sharing_checkbox": "Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити завантаження окремих файлів)", - "mode_settings_legacy_checkbox": "Користуватися застарілою адресою (служба onion v2, не рекомендовано)", - "mode_settings_autostop_timer_checkbox": "Зупинити службу onion у запланований час", - "mode_settings_autostart_timer_checkbox": "Запускати службу onion у запланований час", - "mode_settings_public_checkbox": "Це загальнодоступна служба OnionShare (вимикає приватний ключ)", - "mode_settings_persistent_checkbox": "Зберегти цю вкладку та автоматично відкривати її, коли я відкриваю OnionShare", - "mode_settings_advanced_toggle_hide": "Сховати розширені налаштування", - "mode_settings_advanced_toggle_show": "Показати розширені налаштування", - "gui_quit_warning_description": "На деяких ваших вкладках триває обмін файлами. Якщо ви вийдете, це призведе до закриття всіх вкладок. Ви справді хочете вийти?", - "gui_close_tab_warning_receive_description": "Триває отримання файлів. Ви впевнені, що хочете закрити цю вкладку?", - "gui_close_tab_warning_share_description": "Триває надсилання ваших файлів. Ви впевнені, що хочете закрити цю вкладку?", - "gui_new_tab_website_button": "Опублікувати вебсайт", - "gui_new_tab_receive_description": "Перетворіть ваш комп’ютер на онлайн-обмінник. Люди зможуть надсилати файли на ваш комп’ютер за допомогою браузера Tor.", - "gui_new_tab_receive_button": "Отримання файлів", - "gui_new_tab_share_button": "Надсилання файлів", - "gui_new_tab_share_description": "Виберіть файли на вашому комп'ютері, щоб надіслати їх іншому користувачу. Особа або люди, яким ви хочете надіслати файли, повинні скористатись переглядачем Tor для їхнього отримання.", - "gui_quit_warning_cancel": "Скасувати", - "gui_quit_warning_title": "Ви впевнені?", - "gui_close_tab_warning_cancel": "Скасувати", - "gui_close_tab_warning_close": "Закрити", - "gui_close_tab_warning_title": "Ви впевнені?", - "gui_new_tab_tooltip": "Відкрити нову вкладку", - "gui_new_tab": "Нова вкладка", - "gui_file_selection_remove_all": "Вилучити всі", - "gui_remove": "Вилучити", - "gui_new_tab_chat_button": "Анонімне спілкування", - "gui_open_folder_error": "Не вдалося відкрити теку за допомогою xdg- open. Файл тут: {}", - "gui_tab_name_chat": "Бесіда", - "gui_tab_name_website": "Вебсайт", - "gui_tab_name_receive": "Отримання", - "gui_tab_name_share": "Поділитися", - "gui_qr_code_description": "Скануйте цей QR-код за допомогою зчитувача QR, наприклад камери на телефоні, щоб простіше надіслати комусь адресу OnionShare.", - "gui_receive_flatpak_data_dir": "Оскільки ви встановили OnionShare за допомогою Flatpak, ви повинні зберігати файли в теці ~/OnionShare.", - "gui_chat_stop_server": "Зупинити сервер бесіди", - "gui_chat_start_server": "Запустити сервер бесіди", - "gui_chat_stop_server_autostop_timer": "Зупинити сервер чату ({})", - "gui_qr_code_dialog_title": "QR-код OnionShare", - "gui_show_qr_code": "Показати QR-код", - "gui_main_page_share_button": "Поділитися", - "gui_main_page_chat_button": "Почати спілкуватися у бесіді", - "gui_main_page_website_button": "Почати хостинг", - "gui_main_page_receive_button": "Почати отримання", - "gui_chat_url_description": "Будь-хто, за цією адресою та з приватним ключем, може приєднатися до цієї бесіди за допомогою Tor Browser: ", - "error_port_not_available": "Порт OnionShare недоступний", - "gui_rendezvous_cleanup_quit_early": "Вийти раніше", - "gui_rendezvous_cleanup": "Очікування закриття схем Tor, щоб переконатися, що файли успішно передано.\n\nЦе може тривати кілька хвилин.", - "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим.", - "mode_settings_receive_webhook_url_checkbox": "Застосовувати мережні обробники сповіщень", - "history_receive_read_message_button": "Читати повідомлення", - "mode_settings_receive_disable_files_checkbox": "Вимкнути передавання файлів", - "mode_settings_receive_disable_text_checkbox": "Вимкнути надсилання тексту", - "mode_settings_title_label": "Власний заголовок", - "gui_status_indicator_chat_scheduled": "Заплановано…", - "gui_status_indicator_chat_started": "Спілкування", - "gui_status_indicator_chat_working": "Запуск…", - "gui_status_indicator_chat_stopped": "Готовий до спілкування", - "gui_settings_theme_dark": "Темна", - "gui_settings_theme_light": "Світла", - "gui_settings_theme_auto": "Автоматична", - "gui_settings_theme_label": "Тема", - "gui_please_wait_no_button": "Запускається…", - "gui_hide": "Сховати", - "gui_reveal": "Показати", - "gui_qr_label_auth_string_title": "Приватний ключ", - "gui_qr_label_url_title": "Адреса OnionShare", - "gui_copied_client_auth": "Приватний ключ скопійовано до буфера обміну", - "gui_copied_client_auth_title": "Приватний ключ скопійовано", - "gui_copy_client_auth": "Скопіювати приватний ключ", - "gui_client_auth_instructions": "Далі надішліть приватний ключ, щоб дозволити доступ до служби OnionShare:", - "gui_url_instructions_public_mode": "Надішліть вказану внизу адресу OnionShare:", - "gui_url_instructions": "Спочатку надішліть вказану внизу адресу OnionShare:", - "gui_chat_url_public_description": "Будь-хто, за цією адресою OnionShare, може приєднатися до цієї бесіди за допомогою Tor Browser: ", - "gui_website_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може відвідати ваш вебсайт через Tor Browser: ", - "gui_receive_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може вивантажити файли на ваш комп'ютер через Tor Browser: ", - "gui_share_url_public_description": "Будь-хто, за допомогою цієї адреси OnionShare, може завантажити ваші файли, через Tor Browser: ", - "gui_server_doesnt_support_stealth": "На жаль, ця версія Tor не підтримує стелс-режим (автентифікацію клієнта). Спробуйте за допомогою новішої версії Tor або скористайтеся загальнодоступним режимом, якщо він не повинен бути приватним.", - "gui_tor_settings_window_title": "Налаштування Tor", - "gui_settings_bridge_radio_builtin": "Вибрати вбудований міст", - "gui_settings_bridge_none_radio_option": "Не використовувати міст", - "gui_settings_stop_active_tabs_label": "На деяких ваших вкладках працюють служби.\nВи повинні зупинити всі служби, щоб змінити налаштування Tor.", - "moat_captcha_label": "Розв'яжіть CAPTCHA для запиту мостів.", - "moat_captcha_error": "Неправильний розв'язок. Повторіть спробу.", - "gui_settings_bridge_use_checkbox": "Використовувати міст", - "gui_settings_bridge_moat_radio_option": "Запит мосту на torproject.org", - "gui_dragdrop_sandbox_flatpak": "Щоб пісочниця Flatpak була безпечнішою, перетягування не підтримується. Натомість скористайтеся кнопками Додати файли та Додати теку, щоб знайти файли.", - "gui_settings_controller_extras_label": "Налаштування Tor", - "gui_settings_tor_bridges_label": "Мости допомагають отримати доступ до мережі Tor у місцях, де Tor заблоковано. Залежно від того, де ви знаходитесь, один міст може працювати краще, ніж інший.", - "gui_settings_bridge_moat_button": "Запит нового мосту", - "gui_settings_bridge_custom_radio_option": "Укажіть міст, про який ви дізналися з надійного джерела", - "gui_settings_bridge_custom_placeholder": "введіть адреса:порт (по одному на рядок)", - "gui_settings_version_label": "Ви використовуєте OnionShare {}", - "gui_settings_help_label": "Потрібна допомога? Перегляньте docs.onionshare.org", - "gui_settings_moat_bridges_invalid": "Ви ще не запитували міст на torproject.org.", - "moat_captcha_placeholder": "Введіть символи із зображення", - "moat_captcha_submit": "Надіслати", - "mode_settings_website_custom_csp_checkbox": "Надсилати власний заголовок Content Security Policy", - "moat_contact_label": "Зв'язок з BridgeDB...", - "moat_captcha_reload": "Перезавантажити", - "mode_tor_not_connected_label": "OnionShare не під'єднано до мережі Tor", - "moat_bridgedb_error": "Помилка з’єднання з BridgeDB.", - "moat_solution_empty_error": "Ви повинні ввести символи з зображення" -} diff --git a/desktop/src/onionshare/resources/locale/wo.json b/desktop/src/onionshare/resources/locale/wo.json deleted file mode 100644 index e0f37715..00000000 --- a/desktop/src/onionshare/resources/locale/wo.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "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_autostop_timer": "", - "closing_automatically": "", - "timeout_download_still_running": "", - "large_filesize": "", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "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_stop_server_autostop_timer": "", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "", - "gui_receive_stop_server": "", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "" -} diff --git a/desktop/src/onionshare/resources/locale/yo.json b/desktop/src/onionshare/resources/locale/yo.json deleted file mode 100644 index 5da034d1..00000000 --- a/desktop/src/onionshare/resources/locale/yo.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "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": "{0:s} je oun ti a ko le ka.", - "no_available_port": "", - "other_page_loaded": "Adiresi ti wole", - "close_on_autostop_timer": "O danuduro nitori akoko idaduro aifowoyi ti pe", - "closing_automatically": "Odanuduro nitori o ti fi ranse tan", - "timeout_download_still_running": "", - "timeout_upload_still_running": "", - "large_filesize": "Ikilo: Fi fi nkan repete ranse le gba aimoye wakati", - "systray_menu_exit": "", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "", - "help_stay_open": "", - "help_autostop_timer": "", - "help_stealth": "", - "help_receive": "", - "help_verbose": "", - "help_filename": "", - "help_config": "", - "gui_drag_and_drop": "Wo awon iwe pelebe ati apamowo re sibi lati bere sini fi ranse", - "gui_add": "Fikun", - "gui_delete": "", - "gui_choose_items": "Yan", - "gui_share_start_server": "Bere si ni pin", - "gui_share_stop_server": "Dawo pinpin duro", - "gui_share_stop_server_autostop_timer": "Dawo pinpin duro ({})", - "gui_share_stop_server_autostop_timer_tooltip": "", - "gui_receive_start_server": "Bere ipele gbigba", - "gui_receive_stop_server": "Duro ipele gbigba", - "gui_receive_stop_server_autostop_timer": "", - "gui_receive_stop_server_autostop_timer_tooltip": "", - "gui_copy_url": "", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "", - "gui_copied_url_title": "", - "gui_copied_url": "", - "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": "", - "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_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_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_autostop_timer_checkbox": "", - "gui_settings_autostop_timer": "", - "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_autostop_timer": "", - "gui_server_autostop_timer_expired": "", - "share_via_onionshare": "", - "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": "", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "", - "gui_settings_public_mode_checkbox": "", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "gui_upload_finished_range": "", - "gui_upload_finished": "", - "gui_download_in_progress": "", - "gui_open_folder_error_nautilus": "", - "gui_settings_language_label": "", - "gui_settings_language_changed_notice": "", - "gui_start_server_autostart_timer_tooltip": "Akoko ti nbere laifowoyi duro ni {}", - "gui_stop_server_autostop_timer_tooltip": "Akoko ti nduro laifowoyi dopin ni {}", - "gui_chat_stop_server": "Da olupin iregbe duro", - "gui_chat_start_server": "Bere olupin iregbe", - "gui_file_selection_remove_all": "Yo gbogbo re kuro", - "gui_remove": "Yokuro", - "gui_add_folder": "S'afikun folda", - "gui_add_files": "S'afikun faili", - "incorrect_password": "Ashiko oro igbaniwole" -} diff --git a/desktop/src/onionshare/resources/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json deleted file mode 100644 index 749bb9a0..00000000 --- a/desktop/src/onionshare/resources/locale/zh_Hans.json +++ /dev/null @@ -1,336 +0,0 @@ -{ - "config_onion_service": "在端口{0:d}上设置洋葱服务。", - "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_autostop_timer": "因为定时器计时结束,已自动停止", - "closing_automatically": "传输已完成,已自动停止", - "timeout_download_still_running": "", - "large_filesize": "警告:发送大的共享文件可能会花费数小时", - "systray_menu_exit": "退出", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "不使用Tor(仅开发测试)", - "help_stay_open": "文件传输完成后继续分享", - "help_autostop_timer": "超过给定时间(秒)后终止分享", - "help_stealth": "使用服务端认证(高级选项)", - "help_receive": "仅接收分享的文件,不发送", - "help_verbose": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘", - "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_autostop_timer": "停止共享({})", - "gui_share_stop_server_autostop_timer_tooltip": "在{}自动停止", - "gui_receive_start_server": "开启接收模式", - "gui_receive_stop_server": "停止接收模式", - "gui_receive_stop_server_autostop_timer": "停止接收模式(还剩 {} 秒)", - "gui_receive_stop_server_autostop_timer_tooltip": "在{}自动停止", - "gui_copy_url": "复制地址", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "已取消", - "gui_copied_url_title": "已复制 OnionShare 地址", - "gui_copied_url": "OnionShare 地址已复制到剪贴板", - "gui_please_wait": "正在开启……点击以取消。", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "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": "取消", - "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_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_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 的自动设置", - "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_socket_file_label": "Socket 文件", - "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 网桥连接?", - "gui_settings_tor_bridges_no_bridges_radio_option": "不使用网桥", - "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": "警告:meek-azure 网桥会对 Tor 的运行产生极大负担。

仅在无法直接连接至 Tor,通过 obfs4 transports 连接,或通过其他网桥连接时使用。", - "gui_settings_tor_bridges_custom_radio_option": "使用自定义网桥", - "gui_settings_tor_bridges_custom_label": "您可以从 https://bridges.torproject.org 获得网桥", - "gui_settings_tor_bridges_invalid": "您所添加的网桥均无法工作。请再次检查或添加其它网桥。", - "gui_settings_button_save": "保存", - "gui_settings_button_cancel": "取消", - "gui_settings_button_help": "帮助", - "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 控制器。", - "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_bundled_tor_timeout": "连接至 Tor 的时间过长。也许您未连接至互联网,或是系统时间不准确?", - "settings_error_bundled_tor_broken": "OnionShare 无法连接至 Tor\n{}", - "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": "无法检查更新:可能是您没有连接到Tor,或者OnionShare瘫痪了?", - "update_error_invalid_latest_version": "无法检查更新: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_autostop_timer": "在服务器启动之前,自动停止的定时器的计时已到。请建立一个新的共享。", - "gui_server_autostop_timer_expired": "自动停止的定时器计时已到。请对其调整以开始共享。", - "share_via_onionshare": "通过 OnionShare 共享", - "gui_save_private_key_checkbox": "使用长期地址", - "gui_share_url_description": "任何人只要有这个 OnionShare 地址和私钥,都可以用 Tor Browser 下载您的文件:", - "gui_receive_url_description": "任何人只要有这个 OnionShare 地址和私钥,都可以用 Tor Browser 向您的电脑上传文件:", - "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": "{} 已完成", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "分享轨迹", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "公共模式", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "页面已加载", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "清除所有", - "gui_upload_in_progress": "", - "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_add_files": "添加文件", - "gui_add_folder": "添加文件夹", - "gui_connect_to_tor_for_onion_settings": "连接至 Tor 以查看 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_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_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": "还没有文件已被发出", - "gui_share_mode_autostop_timer_waiting": "正在等待发送结束", - "gui_receive_mode_no_files": "还没有接收到文件", - "gui_receive_mode_autostop_timer_waiting": "正在等待接收结束", - "gui_settings_onion_label": "Onion 设置", - "gui_all_modes_transfer_canceled_range": "取消于 {} - {}", - "gui_all_modes_transfer_canceled": "取消于 {}", - "gui_stop_server_autostop_timer_tooltip": "自动停止的定时器在 {} 停止", - "gui_start_server_autostart_timer_tooltip": "自动开始的定时器在 {} 停止", - "gui_waiting_to_start": "已计划在 {} 秒后开始。点击取消。", - "gui_settings_autostart_timer_checkbox": "使用自动开始计时器", - "gui_settings_autostart_timer": "开始分享时间:", - "gui_server_autostart_timer_expired": "已超过计划的时间。请对其调整以开始共享。", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自动停止的时间无法与自动开始的时间相同,或早于自动开始的时间。请对其调整以开始共享。", - "gui_status_indicator_share_scheduled": "已计划……", - "gui_status_indicator_receive_scheduled": "已计划……", - "days_first_letter": "天", - "hours_first_letter": "小时", - "minutes_first_letter": "分", - "seconds_first_letter": "秒", - "gui_website_url_description": "任何有此 OnionShare 地址和私钥的人都可以使用 Tor 浏览器访问你的网站:", - "gui_mode_website_button": "发布网站", - "gui_website_mode_no_files": "尚未分享网站", - "incorrect_password": "密码错误", - "gui_settings_individual_downloads_label": "取消选择来允许下载单独的文件", - "history_requests_tooltip": "{}个网络请求", - "gui_settings_csp_header_disabled_option": "禁用内容安全策略标题", - "gui_settings_website_label": "网站设置", - "mode_settings_website_disable_csp_checkbox": "不发送默认的内容安全政策(Content Security Policy) 头(允许您的网站使用第三方资源)", - "mode_settings_receive_data_dir_browse_button": "浏览", - "mode_settings_receive_data_dir_label": "保存文件到", - "mode_settings_share_autostop_sharing_checkbox": "文件传送完后停止共享(取消选中可允许下载单个文件)", - "mode_settings_legacy_checkbox": "使用旧地址(v2 onion服务,不推荐)", - "mode_settings_autostop_timer_checkbox": "定时停止onion服务", - "mode_settings_autostart_timer_checkbox": "定时起动onion服务", - "mode_settings_public_checkbox": "这是一个公共 OnionShare 服务(禁用私钥)", - "mode_settings_persistent_checkbox": "保存此页,并在我打开 OnionShare 时自动打开它", - "mode_settings_advanced_toggle_hide": "隐藏高级选项", - "mode_settings_advanced_toggle_show": "显示高级选项", - "gui_quit_warning_cancel": "取消", - "gui_quit_warning_description": "有的页中有激活的共享,如果退出,所有的页将被关闭。您确定要退出吗?", - "gui_quit_warning_title": "您确定吗?", - "gui_close_tab_warning_cancel": "取消", - "gui_close_tab_warning_close": "关闭", - "gui_close_tab_warning_website_description": "您正在托管一个网站,确定要关闭此页吗?", - "gui_close_tab_warning_receive_description": "您正在接收文件,确定要关闭此页吗?", - "gui_close_tab_warning_share_description": "您正在发送文件,确定要关闭此页吗?", - "gui_close_tab_warning_persistent_description": "此页会持续存在, 如果关闭它,将会丢失它正在使用的onion地址。 您确定要关闭它吗?", - "gui_close_tab_warning_title": "您确定吗?", - "gui_new_tab_website_description": "从您的计算机托管一个静态HTML的onion网站。", - "gui_new_tab_website_button": "发布网站", - "gui_new_tab_receive_description": "将您的计算机变成一个在线的dropbox。 人们将能够使用Tor浏览器将文件发送到您的计算机。", - "gui_new_tab_receive_button": "接收文件", - "gui_new_tab_share_description": "选择计算机上的文件发送给别人。 您要将文件发送给的那些人需要使用Tor浏览器来从您这里下载文件。", - "gui_new_tab_share_button": "共享文件", - "gui_new_tab_tooltip": "打开一个新标签", - "gui_new_tab": "新建标签", - "gui_show_qr_code": "显示二维码", - "gui_receive_flatpak_data_dir": "因为你用Flatpack安装的OnionShare,你需要把文件储存到在~/OnionShare里的一个文件夹里。", - "gui_chat_stop_server": "停止言论服务器", - "gui_chat_start_server": "开始言论服务器", - "gui_file_selection_remove_all": "删除所有", - "gui_remove": "删除", - "gui_qr_code_dialog_title": "Onionshare 二维码", - "error_port_not_available": "OnionShare端口不可用", - "gui_tab_name_chat": "聊天", - "gui_tab_name_website": "网站", - "gui_tab_name_receive": "接收", - "gui_tab_name_share": "分享", - "gui_main_page_chat_button": "开始聊天", - "gui_main_page_website_button": "开始托管", - "gui_main_page_receive_button": "开始接收", - "gui_main_page_share_button": "开始分享", - "gui_new_tab_chat_button": "匿名聊天", - "gui_open_folder_error": "用xdg-open打开文件夹失败。文件在这里: {}", - "gui_chat_url_description": "任何有这个OnionShare地址和私钥的人均可 加入这个聊天室,方法是使用Tor浏览器:", - "gui_rendezvous_cleanup_quit_early": "提前退出", - "gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文件传输成功。\n\n这可能需要几分钟。", - "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。", - "history_receive_read_message_button": "读取消息", - "mode_settings_receive_webhook_url_checkbox": "使用通知 webhook", - "mode_settings_receive_disable_files_checkbox": "禁用上传文件", - "mode_settings_receive_disable_text_checkbox": "禁用提交文本", - "mode_settings_title_label": "自定义标题", - "gui_status_indicator_chat_started": "正在聊天", - "gui_status_indicator_chat_scheduled": "已安排…", - "gui_status_indicator_chat_working": "启动中…", - "gui_status_indicator_chat_stopped": "准备好聊天", - "gui_please_wait_no_button": "启动中…", - "gui_settings_theme_dark": "深色", - "gui_settings_theme_light": "浅色", - "gui_settings_theme_auto": "自动", - "gui_settings_theme_label": "主题", - "gui_client_auth_instructions": "接下来,发送私钥以允许访问您的 OnionShare 服务:", - "gui_url_instructions_public_mode": "发送下面的 OnionShare 地址:", - "gui_url_instructions": "首先,发送下面的 OnionShare 地址:", - "gui_chat_url_public_description": "任何有此 OnionShare 地址的人均可加入此聊天室,方法是使用Tor 浏览器", - "gui_receive_url_public_description": "任何有此 OnionShare 地址的人均可上传文件至你的计算机,方法是使用Tor 浏览器", - "gui_website_url_public_description": "任何有此 OnionShare 地址的人均可访问你的网站,方法是使用Tor 浏览器", - "gui_share_url_public_description": "任何有此 OnionShare 地址的人均可下载你的文件,方法是使用Tor浏览器", - "gui_server_doesnt_support_stealth": "抱歉,此版本的 Tor 不支持隐身(客户端身份验证)。 请尝试使用较新版本的 Tor,如果不需要私密分享,请使用“公共”模式。", - "gui_hide": "隐藏", - "gui_reveal": "揭示", - "gui_qr_label_auth_string_title": "私钥", - "gui_qr_label_url_title": "OnionShare 地址", - "gui_copied_client_auth": "已复制私钥到剪贴板", - "gui_copied_client_auth_title": "已复制私钥", - "gui_copy_client_auth": "复制私钥", - "gui_settings_bridge_use_checkbox": "使用网桥", - "gui_settings_bridge_radio_builtin": "选择内置网桥", - "gui_settings_bridge_none_radio_option": "不使用网桥", - "gui_settings_bridge_moat_button": "请求新网桥", - "gui_settings_bridge_custom_placeholder": "输入地址:端口(每行一个)", - "gui_settings_help_label": "需要帮助?参见 docs.onionshare.org", - "mode_settings_website_custom_csp_checkbox": "发送自定义 CSP 标头", - "moat_bridgedb_error": "联系 BridgeDB 时出错。", - "moat_solution_empty_error": "你必须输入图像中的字符", - "mode_tor_not_connected_label": "OnionShare 没有连接到 Tor 网络", - "gui_dragdrop_sandbox_flatpak": "为了使 Flatpak 沙箱更安全,不支持拖放操作。请使用“添加文件”和“添加文件夹”按钮来浏览文件。", - "gui_tor_settings_window_title": "Tor 设置", - "gui_settings_controller_extras_label": "Tor 设置", - "gui_settings_tor_bridges_label": "网桥帮助你在 Tor 被封锁的地方访问 Tor 网络。取决于你所在地方,一个网桥可能比另一个网桥更好用。", - "gui_settings_bridge_custom_radio_option": "提供一座你从可信来源处了解到的网桥", - "gui_settings_bridge_moat_radio_option": "从 torproject.org 请求网桥", - "moat_captcha_error": "解答不正确。请再试一次。", - "gui_settings_moat_bridges_invalid": "你尚未从 torproject.org 请求网桥。", - "gui_settings_stop_active_tabs_label": "一些选项卡中有服务正在运行。\n你必须停止所有服务才能更改 Tor 设置。", - "moat_contact_label": "正联系 BridgeDB...", - "gui_settings_version_label": "你正在使用 OnionShare {}", - "moat_captcha_label": "解决 CAPTCHA 来请求网桥。", - "moat_captcha_reload": "重新加载", - "moat_captcha_placeholder": "输入图片中字符", - "moat_captcha_submit": "提交" -} diff --git a/desktop/src/onionshare/resources/locale/zh_Hant.json b/desktop/src/onionshare/resources/locale/zh_Hant.json deleted file mode 100644 index f0a51217..00000000 --- a/desktop/src/onionshare/resources/locale/zh_Hant.json +++ /dev/null @@ -1,282 +0,0 @@ -{ - "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_autostop_timer": "因自動停止計時器的時間已到,已停止", - "closing_automatically": "因傳輸完成,已停止", - "timeout_download_still_running": "", - "large_filesize": "警告:傳輸巨大的檔案將有可能耗時數小時以上", - "systray_menu_exit": "離開", - "systray_download_started_title": "", - "systray_download_started_message": "", - "systray_download_completed_title": "", - "systray_download_completed_message": "", - "systray_download_canceled_title": "", - "systray_download_canceled_message": "", - "systray_upload_started_title": "", - "systray_upload_started_message": "", - "help_local_only": "不要使用Tor(僅限開發使用)", - "help_stay_open": "繼續分享即使檔案已傳送", - "help_autostop_timer": "在所給定的秒數後停止分享", - "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_autostop_timer": "停止分享 (剩餘時間{})", - "gui_share_stop_server_autostop_timer_tooltip": "計數器將在{}停止", - "gui_receive_start_server": "啟動接收模式", - "gui_receive_stop_server": "停止接收模式", - "gui_receive_stop_server_autostop_timer": "停止接收模式 (剩餘{}秒)", - "gui_receive_stop_server_autostop_timer_tooltip": "計數器將在{}停止", - "gui_copy_url": "複製地址", - "gui_downloads": "", - "gui_no_downloads": "", - "gui_canceled": "已取消", - "gui_copied_url_title": "已複製OnionShare地址", - "gui_copied_url": "OnionShare地址已複製到剪貼簿", - "gui_please_wait": "啟動中...點擊以取消。", - "gui_download_upload_progress_complete": "", - "gui_download_upload_progress_starting": "", - "gui_download_upload_progress_eta": "", - "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": "取消", - "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_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_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_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。", - "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": "無法檢查更新:可能是您沒有連接到Tor,或者OnionShare癱瘓了?", - "update_error_invalid_latest_version": "無法檢查更新: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_autostop_timer": "在服務器啓動之前,自動停止的定時器的計時已到。請建立一個新的共享。", - "gui_server_autostop_timer_expired": "自動停止計時器時間已到。請調整它來開始分享。", - "share_via_onionshare": "使用OnionShare分享", - "gui_save_private_key_checkbox": "使用永久地址", - "gui_share_url_description": "任何人只要擁有這個地址就可以下載你的檔案經由Tor Browser: ", - "gui_receive_url_description": "任何人只要擁有這個地址就可以上傳檔案到你的電腦經由Tor Browser: ", - "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": "{}個已完成", - "info_in_progress_uploads_tooltip": "", - "info_completed_uploads_tooltip": "", - "error_cannot_create_downloads_dir": "", - "receive_mode_downloads_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_downloads_label": "", - "gui_settings_downloads_button": "瀏覽", - "gui_settings_receive_allow_receiver_shutdown_checkbox": "", - "gui_settings_public_mode_checkbox": "公開模式", - "systray_close_server_title": "", - "systray_close_server_message": "", - "systray_page_loaded_title": "頁面已載入", - "systray_download_page_loaded_message": "", - "systray_upload_page_loaded_message": "", - "gui_uploads": "", - "gui_no_uploads": "", - "gui_clear_history": "", - "gui_upload_in_progress": "", - "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_add_files": "新增檔案", - "gui_add_folder": "新增資料夾", - "gui_settings_onion_label": "Onion設定", - "gui_connect_to_tor_for_onion_settings": "連結到Tor來查看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_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": "%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": "目前無已傳送的檔案", - "gui_share_mode_timeout_waiting": "等待完成傳送", - "gui_receive_mode_no_files": "目前無已接收的檔案", - "gui_receive_mode_timeout_waiting": "等待完成接收", - "gui_stop_server_autostop_timer_tooltip": "自動停止的定時器在 {} 停止", - "gui_start_server_autostart_timer_tooltip": "自動開始計時器在 {} 停止", - "gui_waiting_to_start": "預定在 {} 開始。點擊以取消。", - "gui_settings_autostart_timer_checkbox": "使用自動開始計時器", - "gui_settings_autostart_timer": "開始分享於:", - "gui_server_autostart_timer_expired": "排定的時間已經過了。請調整它以開始分享。", - "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "自動停止時間不能相同或早於自動開始時間。請調整它以開始分享。", - "gui_status_indicator_share_scheduled": "預定…", - "gui_status_indicator_receive_scheduled": "預定…", - "gui_share_mode_autostop_timer_waiting": "等待完成傳送", - "gui_receive_mode_autostop_timer_waiting": "等待完成接收", - "days_first_letter": "天", - "hours_first_letter": "時", - "minutes_first_letter": "分", - "seconds_first_letter": "秒", - "incorrect_password": "密碼錯誤", - "gui_settings_csp_header_disabled_option": "停用Content Security Policy標頭", - "gui_website_url_description": "有OnionShare位址的任何人都可以使用Tor瀏覽器造訪你的網站: : ", - "gui_mode_website_button": "發佈網站", - "gui_website_mode_no_files": "尚未分享網站", - "gui_settings_individual_downloads_label": "取消選取以允許下載個別的檔案", - "history_requests_tooltip": "{}個網頁請求", - "gui_settings_website_label": "網站設定", - "mode_settings_receive_data_dir_browse_button": "瀏覽", - "mode_settings_receive_data_dir_label": "儲存檔案至", - "mode_settings_public_checkbox": "不要使用密碼", - "mode_settings_advanced_toggle_hide": "隱藏進階設定", - "gui_close_tab_warning_title": "您確定?", - "gui_quit_warning_cancel": "取消", - "gui_quit_warning_title": "您確定?", - "gui_close_tab_warning_cancel": "取消", - "gui_close_tab_warning_close": "關閉", - "gui_new_tab_share_description": "選擇要寄送給他人的檔案。接收您傳送檔案的人需要使用Tor 瀏覽器才能下載檔案。", - "gui_new_tab_receive_button": "接收檔案", - "gui_new_tab": "新分頁", - "gui_new_tab_tooltip": "開啟新分頁", - "gui_new_tab_share_button": "分享檔案", - "mode_settings_advanced_toggle_show": "顯示進階設定", - "gui_tab_name_chat": "聊天", - "gui_tab_name_website": "網站", - "gui_tab_name_receive": "接收", - "gui_tab_name_share": "分享", - "gui_main_page_chat_button": "開始聊天", - "gui_main_page_receive_button": "開始接收", - "gui_main_page_share_button": "開始分享", - "gui_new_tab_website_button": "架設一個網站", - "gui_qr_code_dialog_title": "OnionShare QR Code", - "gui_show_qr_code": "顯示QR Code", - "gui_chat_stop_server": "停止聊天伺服器", - "gui_chat_start_server": "開啟聊天伺服器", - "gui_file_selection_remove_all": "全部移除", - "gui_remove": "移除", - "error_port_not_available": "OnionShare通訊埠不可用", - "gui_rendezvous_cleanup_quit_early": "提前退出", - "gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文檔传输成功。\n\n這可能需要幾分鐘。", - "mode_settings_website_disable_csp_checkbox": "取消內容安全政策(Content Security Policy)信頭(允許您的網站使用三方資源)", - "mode_settings_share_autostop_sharing_checkbox": "檔案傳送完後停止共享(取消選中可允許下載單個檔案)", - "mode_settings_legacy_checkbox": "使用舊地址(v2 onion服務,不推薦)", - "mode_settings_autostop_timer_checkbox": "定時停止onion服務", - "mode_settings_autostart_timer_checkbox": "定時起動onion服務", - "mode_settings_persistent_checkbox": "保存此頁,並在我打開OnionShare時自動打開它", - "gui_quit_warning_description": "有的頁中有激活的共享,如果退出,所有的頁將被關閉。您確定要退出嗎?", - "gui_close_tab_warning_website_description": "您正在代管一個網站,確定要關閉此頁嗎?", - "gui_close_tab_warning_receive_description": "您正在接收文件,確定要關閉此頁嗎?", - "gui_close_tab_warning_share_description": "您正在發送文件,確定要關閉此页嗎?", - "gui_close_tab_warning_persistent_description": "此頁會持續存在,如果關閉它,將會丟失它正在使用的onion地址。您確定要關閉它嗎?", - "gui_main_page_website_button": "開始代管網頁", - "gui_new_tab_chat_button": "匿名聊天", - "gui_color_mode_changed_notice": "要使即將應用的新色彩模式生效,請重啓 OnionShare。", - "gui_open_folder_error": "用xdg-open打開文件夾失敗。文件在這裏: {}", - "gui_chat_url_description": "任何有這個OnionShare地址的人均可 加入這個聊天室,方法是使用Tor瀏覽器:", - "gui_receive_flatpak_data_dir": "因爲你用Flatpack安裝的OnionShare,你需要把文件儲存到在~/OnionShare裏的一個文件夾裏。" -} diff --git a/desktop/src/onionshare/resources/onionshare-128.png b/desktop/src/onionshare/resources/onionshare-128.png deleted file mode 100644 index 856ab4e7..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-128.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare-16.png b/desktop/src/onionshare/resources/onionshare-16.png deleted file mode 100644 index dea20940..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-16.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare-256.png b/desktop/src/onionshare/resources/onionshare-256.png deleted file mode 100644 index b47cd94a..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-256.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare-32.png b/desktop/src/onionshare/resources/onionshare-32.png deleted file mode 100644 index 14c849c9..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-32.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare-512.png b/desktop/src/onionshare/resources/onionshare-512.png deleted file mode 100644 index a4810d04..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-512.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare-64.png b/desktop/src/onionshare/resources/onionshare-64.png deleted file mode 100644 index 8468dc52..00000000 Binary files a/desktop/src/onionshare/resources/onionshare-64.png and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare.icns b/desktop/src/onionshare/resources/onionshare.icns deleted file mode 100644 index f65ad12d..00000000 Binary files a/desktop/src/onionshare/resources/onionshare.icns and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare.ico b/desktop/src/onionshare/resources/onionshare.ico deleted file mode 100644 index dcde4f1f..00000000 Binary files a/desktop/src/onionshare/resources/onionshare.ico and /dev/null differ diff --git a/desktop/src/onionshare/resources/onionshare.png b/desktop/src/onionshare/resources/onionshare.png deleted file mode 100644 index a4810d04..00000000 Binary files a/desktop/src/onionshare/resources/onionshare.png and /dev/null differ diff --git a/desktop/src/onionshare/settings_tab.py b/desktop/src/onionshare/settings_tab.py deleted file mode 100644 index cfa3261e..00000000 --- a/desktop/src/onionshare/settings_tab.py +++ /dev/null @@ -1,354 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui -import platform -import datetime -from onionshare_cli.settings import Settings - -from . import strings -from .widgets import Alert -from .update_checker import UpdateThread - - -class SettingsTab(QtWidgets.QWidget): - """ - Settings dialog. - """ - - close_this_tab = QtCore.Signal() - - def __init__(self, common, tab_id): - super(SettingsTab, self).__init__() - - self.common = common - self.common.log("SettingsTab", "__init__") - - self.system = platform.system() - self.tab_id = tab_id - - # Automatic updates options - - # Autoupdate - self.autoupdate_checkbox = QtWidgets.QCheckBox() - self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.autoupdate_checkbox.setText(strings._("gui_settings_autoupdate_option")) - - # Last update time - self.autoupdate_timestamp = QtWidgets.QLabel() - - # Check for updates button - self.check_for_updates_button = QtWidgets.QPushButton( - strings._("gui_settings_autoupdate_check_button") - ) - self.check_for_updates_button.clicked.connect(self.check_for_updates) - # We can't check for updates if not connected to Tor - if not self.common.gui.onion.connected_to_tor: - self.check_for_updates_button.setEnabled(False) - - # Autoupdate options layout - autoupdate_group_layout = QtWidgets.QVBoxLayout() - autoupdate_group_layout.addWidget(self.autoupdate_checkbox) - autoupdate_group_layout.addWidget(self.autoupdate_timestamp) - autoupdate_group_layout.addWidget(self.check_for_updates_button) - autoupdate_group = QtWidgets.QGroupBox( - strings._("gui_settings_autoupdate_label") - ) - autoupdate_group.setLayout(autoupdate_group_layout) - - autoupdate_layout = QtWidgets.QHBoxLayout() - autoupdate_layout.addStretch() - autoupdate_layout.addWidget(autoupdate_group) - autoupdate_layout.addStretch() - autoupdate_widget = QtWidgets.QWidget() - autoupdate_widget.setLayout(autoupdate_layout) - - # Autoupdate is only available for Windows and Mac (Linux updates using package manager) - if self.system != "Windows" and self.system != "Darwin": - autoupdate_widget.hide() - - # Language settings - language_label = QtWidgets.QLabel(strings._("gui_settings_language_label")) - self.language_combobox = QtWidgets.QComboBox() - # Populate the dropdown with all of OnionShare's available languages - language_names_to_locales = { - v: k for k, v in self.common.settings.available_locales.items() - } - language_names = list(language_names_to_locales) - language_names.sort() - for language_name in language_names: - locale = language_names_to_locales[language_name] - self.language_combobox.addItem(language_name, locale) - language_layout = QtWidgets.QHBoxLayout() - language_layout.addStretch() - language_layout.addWidget(language_label) - language_layout.addWidget(self.language_combobox) - language_layout.addStretch() - - # Theme Settings - theme_label = QtWidgets.QLabel(strings._("gui_settings_theme_label")) - self.theme_combobox = QtWidgets.QComboBox() - theme_choices = [ - strings._("gui_settings_theme_auto"), - strings._("gui_settings_theme_light"), - strings._("gui_settings_theme_dark"), - ] - self.theme_combobox.addItems(theme_choices) - theme_layout = QtWidgets.QHBoxLayout() - theme_layout.addStretch() - theme_layout.addWidget(theme_label) - theme_layout.addWidget(self.theme_combobox) - theme_layout.addStretch() - - # Version and help - version_label = QtWidgets.QLabel( - strings._("gui_settings_version_label").format(self.common.version) - ) - version_label.setAlignment(QtCore.Qt.AlignHCenter) - help_label = QtWidgets.QLabel(strings._("gui_settings_help_label")) - help_label.setAlignment(QtCore.Qt.AlignHCenter) - help_label.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction) - help_label.setOpenExternalLinks(True) - - # Buttons - self.save_button = QtWidgets.QPushButton(strings._("gui_settings_button_save")) - self.save_button.clicked.connect(self.save_clicked) - buttons_layout = QtWidgets.QHBoxLayout() - buttons_layout.addStretch() - buttons_layout.addWidget(self.save_button) - buttons_layout.addStretch() - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addStretch() - layout.addWidget(autoupdate_widget) - if autoupdate_widget.isVisible(): - layout.addSpacing(20) - layout.addLayout(language_layout) - layout.addLayout(theme_layout) - layout.addSpacing(20) - layout.addWidget(version_label) - layout.addWidget(help_label) - layout.addSpacing(20) - layout.addLayout(buttons_layout) - layout.addStretch() - - self.setLayout(layout) - - self.reload_settings() - - if self.common.gui.onion.connected_to_tor: - self.tor_is_connected() - else: - self.tor_is_disconnected() - - def reload_settings(self): - # Load settings, and fill them in - self.old_settings = Settings(self.common) - self.old_settings.load() - - use_autoupdate = self.old_settings.get("use_autoupdate") - if use_autoupdate: - self.autoupdate_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.autoupdate_checkbox.setCheckState(QtCore.Qt.Unchecked) - - autoupdate_timestamp = self.old_settings.get("autoupdate_timestamp") - self._update_autoupdate_timestamp(autoupdate_timestamp) - - locale = self.old_settings.get("locale") - locale_index = self.language_combobox.findData(locale) - self.language_combobox.setCurrentIndex(locale_index) - - theme_choice = self.old_settings.get("theme") - self.theme_combobox.setCurrentIndex(theme_choice) - - def check_for_updates(self): - """ - Check for Updates button clicked. Manually force an update check. - """ - self.common.log("SettingsTab", "check_for_updates") - # Disable buttons - self._disable_buttons() - self.common.gui.qtapp.processEvents() - - def update_timestamp(): - # Update the last checked label - settings = Settings(self.common) - settings.load() - autoupdate_timestamp = settings.get("autoupdate_timestamp") - self._update_autoupdate_timestamp(autoupdate_timestamp) - - def close_forced_update_thread(): - forced_update_thread.quit() - # Enable buttons - self._enable_buttons() - # Update timestamp - update_timestamp() - - # Check for updates - def update_available(update_url, installed_version, latest_version): - Alert( - self.common, - strings._("update_available").format( - update_url, installed_version, latest_version - ), - ) - close_forced_update_thread() - - def update_not_available(): - Alert(self.common, strings._("update_not_available")) - close_forced_update_thread() - - def update_error(): - Alert( - self.common, - strings._("update_error_check_error"), - QtWidgets.QMessageBox.Warning, - ) - close_forced_update_thread() - - def update_invalid_version(latest_version): - Alert( - self.common, - strings._("update_error_invalid_latest_version").format(latest_version), - QtWidgets.QMessageBox.Warning, - ) - close_forced_update_thread() - - forced_update_thread = UpdateThread( - self.common, self.common.gui.onion, force=True - ) - forced_update_thread.update_available.connect(update_available) - forced_update_thread.update_not_available.connect(update_not_available) - forced_update_thread.update_error.connect(update_error) - forced_update_thread.update_invalid_version.connect(update_invalid_version) - forced_update_thread.start() - - def save_clicked(self): - """ - Save button clicked. Save current settings to disk. - """ - self.common.log("SettingsTab", "save_clicked") - - def changed(s1, s2, keys): - """ - Compare the Settings objects s1 and s2 and return true if any values - have changed for the given keys. - """ - for key in keys: - if s1.get(key) != s2.get(key): - return True - return False - - settings = self.settings_from_fields() - if settings: - # If language changed, inform user they need to restart OnionShare - if changed(settings, self.old_settings, ["locale"]): - # Look up error message in different locale - new_locale = settings.get("locale") - if ( - new_locale in strings.translations - and "gui_settings_language_changed_notice" - in strings.translations[new_locale] - ): - notice = strings.translations[new_locale][ - "gui_settings_language_changed_notice" - ] - else: - notice = strings._("gui_settings_language_changed_notice") - Alert(self.common, notice, QtWidgets.QMessageBox.Information) - - # If color mode changed, inform user they need to restart OnionShare - if changed(settings, self.old_settings, ["theme"]): - notice = strings._("gui_color_mode_changed_notice") - Alert(self.common, notice, QtWidgets.QMessageBox.Information) - - # Save the new settings - settings.save() - self.close_this_tab.emit() - - def help_clicked(self): - """ - Help button clicked. - """ - self.common.log("SettingsTab", "help_clicked") - SettingsTab.open_help() - - @staticmethod - def open_help(): - help_url = "https://docs.onionshare.org/" - QtGui.QDesktopServices.openUrl(QtCore.QUrl(help_url)) - - def settings_from_fields(self): - """ - Return a Settings object that's full of values from the settings dialog. - """ - self.common.log("SettingsTab", "settings_from_fields") - settings = Settings(self.common) - settings.load() # To get the last update timestamp - - # Theme - theme_index = self.theme_combobox.currentIndex() - settings.set("theme", theme_index) - - # Language - locale_index = self.language_combobox.currentIndex() - locale = self.language_combobox.itemData(locale_index) - settings.set("locale", locale) - - return settings - - def settings_have_changed(self): - # Global settings have changed - self.common.log("SettingsTab", "settings_have_changed") - - def _update_autoupdate_timestamp(self, autoupdate_timestamp): - self.common.log("SettingsTab", "_update_autoupdate_timestamp") - - if autoupdate_timestamp: - dt = datetime.datetime.fromtimestamp(autoupdate_timestamp) - last_checked = dt.strftime("%B %d, %Y %H:%M") - else: - last_checked = strings._("gui_settings_autoupdate_timestamp_never") - self.autoupdate_timestamp.setText( - strings._("gui_settings_autoupdate_timestamp").format(last_checked) - ) - - def _disable_buttons(self): - self.common.log("SettingsTab", "_disable_buttons") - - self.check_for_updates_button.setEnabled(False) - self.save_button.setEnabled(False) - - def _enable_buttons(self): - self.common.log("SettingsTab", "_enable_buttons") - # We can't check for updates if we're still not connected to Tor - if not self.common.gui.onion.connected_to_tor: - self.check_for_updates_button.setEnabled(False) - else: - self.check_for_updates_button.setEnabled(True) - self.save_button.setEnabled(True) - - def tor_is_connected(self): - self.check_for_updates_button.show() - - def tor_is_disconnected(self): - self.check_for_updates_button.hide() diff --git a/desktop/src/onionshare/strings.py b/desktop/src/onionshare/strings.py deleted file mode 100644 index 55f56788..00000000 --- a/desktop/src/onionshare/strings.py +++ /dev/null @@ -1,63 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" -import json -import os - -strings = {} -translations = {} - - -def load_strings(common, locale_dir): - """ - Loads translated strings and fallback to English - if the translation does not exist. - """ - global strings, translations - - # Load all translations - translations = {} - for locale in common.settings.available_locales: - filename = os.path.join(locale_dir, f"{locale}.json") - with open(filename, encoding="utf-8") as f: - translations[locale] = json.load(f) - - # Build strings - default_locale = "en" - current_locale = common.settings.get("locale") - strings = {} - for s in translations[default_locale]: - if ( - current_locale in translations - and s in translations[current_locale] - and translations[current_locale][s] != "" - ): - strings[s] = translations[current_locale][s] - else: - strings[s] = translations[default_locale][s] - - -def translated(k): - """ - Returns a translated string. - """ - return strings[k] - - -_ = translated diff --git a/desktop/src/onionshare/tab/__init__.py b/desktop/src/onionshare/tab/__init__.py deleted file mode 100644 index 62ec4a74..00000000 --- a/desktop/src/onionshare/tab/__init__.py +++ /dev/null @@ -1,21 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from .tab import Tab diff --git a/desktop/src/onionshare/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py deleted file mode 100644 index c9b5cad1..00000000 --- a/desktop/src/onionshare/tab/mode/__init__.py +++ /dev/null @@ -1,576 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets - -from onionshare_cli.common import AutoStopTimer - -from .history import IndividualFileHistoryItem -from .mode_settings_widget import ModeSettingsWidget - -from ..server_status import ServerStatus -from ... import strings -from ...threads import OnionThread, AutoStartTimer -from ...widgets import Alert, MinimumSizeWidget - - -class Mode(QtWidgets.QWidget): - """ - The class that all modes inherit from - """ - - start_server_finished = QtCore.Signal() - stop_server_finished = QtCore.Signal() - starting_server_step2 = QtCore.Signal() - starting_server_step3 = QtCore.Signal() - starting_server_error = QtCore.Signal(str) - starting_server_early = QtCore.Signal() - set_server_active = QtCore.Signal(bool) - change_persistent = QtCore.Signal(int, bool) - - def __init__(self, tab): - super(Mode, self).__init__() - self.tab = tab - self.settings = tab.settings - - self.common = tab.common - self.qtapp = self.common.gui.qtapp - self.app = tab.app - - self.status_bar = tab.status_bar - self.server_status_label = tab.status_bar.server_status_label - self.system_tray = tab.system_tray - - self.filenames = tab.filenames - - # The web object gets created in init() - self.web = None - - # Threads start out as None - self.onion_thread = None - self.web_thread = None - self.startup_thread = None - - # Mode settings widget - self.mode_settings_widget = ModeSettingsWidget( - self.common, self.tab, self.settings - ) - self.mode_settings_widget.change_persistent.connect(self.change_persistent) - - # Server status - self.server_status = ServerStatus( - self.common, - self.qtapp, - self.app, - self.settings, - self.mode_settings_widget, - None, - self.common.gui.local_only, - ) - self.server_status.server_started.connect(self.start_server) - self.server_status.server_stopped.connect(self.stop_server) - self.server_status.server_canceled.connect(self.cancel_server) - self.start_server_finished.connect(self.server_status.start_server_finished) - 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 - # Note: It's up to the downstream Mode to add this to its layout - self.primary_action_layout = QtWidgets.QVBoxLayout() - self.primary_action_layout.addWidget(self.mode_settings_widget) - self.primary_action = QtWidgets.QWidget() - self.primary_action.setLayout(self.primary_action_layout) - - # It's up to the downstream Mode to add stuff to self.content_layout - # self.content_layout shows the actual content of the mode - # self.tor_not_connected_layout is displayed when Tor isn't connected - self.content_layout = QtWidgets.QVBoxLayout() - self.content_widget = QtWidgets.QWidget() - self.content_widget.setLayout(self.content_layout) - - tor_not_connected_label = QtWidgets.QLabel( - strings._("mode_tor_not_connected_label") - ) - tor_not_connected_label.setAlignment(QtCore.Qt.AlignHCenter) - tor_not_connected_label.setStyleSheet( - self.common.gui.css["tor_not_connected_label"] - ) - self.tor_not_connected_layout = QtWidgets.QVBoxLayout() - self.tor_not_connected_layout.addStretch() - self.tor_not_connected_layout.addWidget(tor_not_connected_label) - self.tor_not_connected_layout.addWidget(MinimumSizeWidget(700, 0)) - self.tor_not_connected_layout.addStretch() - self.tor_not_connected_widget = QtWidgets.QWidget() - self.tor_not_connected_widget.setLayout(self.tor_not_connected_layout) - - self.wrapper_layout = QtWidgets.QVBoxLayout() - self.wrapper_layout.addWidget(self.content_widget) - self.wrapper_layout.addWidget(self.tor_not_connected_widget) - self.setLayout(self.wrapper_layout) - - if self.common.gui.onion.connected_to_tor: - self.tor_connection_started() - else: - self.tor_connection_stopped() - - def init(self): - """ - Add custom initialization here. - """ - pass - - def get_type(self): - """ - Returns the type of mode as a string (e.g. "share", "receive", etc.) - """ - 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 = ( - (f"{days}{strings._('days_first_letter')}, " if days else "") - + (f"{hours}{strings._('hours_first_letter')}, " if hours else "") - + (f"{minutes}{strings._('minutes_first_letter')}, " if minutes else "") - + f"{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.settings.get("general", "autostart_timer"): - now = QtCore.QDateTime.currentDateTime() - if self.server_status.local_only: - seconds_remaining = now.secsTo( - self.mode_settings_widget.autostart_timer_widget.dateTime() - ) - else: - 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) - ) - ) - else: - if self.common.platform == "Windows" or self.settings.get( - "general", "autostart_timer" - ): - self.server_status.server_button.setText( - strings._("gui_please_wait") - ) - else: - self.server_status.server_button.setText( - strings._("gui_please_wait_no_button") - ) - - # If the auto-stop timer has stopped, stop the server - if self.server_status.status == ServerStatus.STATUS_STARTED: - if self.app.autostop_timer_thread and self.settings.get( - "general", "autostop_timer" - ): - if self.autostop_timer_datetime_delta > 0: - now = QtCore.QDateTime.currentDateTime() - seconds_remaining = now.secsTo( - self.server_status.autostop_timer_datetime - ) - - # Update the server button - 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.autostop_timer_thread.is_alive(): - self.autostop_timer_finished_should_stop_server() - - def timer_callback_custom(self): - """ - Add custom timer code. - """ - pass - - def get_stop_server_autostop_timer_text(self): - """ - Return the string to put on the stop server button, if there's an auto-stop timer - """ - pass - - def autostop_timer_finished_should_stop_server(self): - """ - The auto-stop timer expired, should we stop the server? Returns a bool - """ - pass - - def start_server(self): - """ - Start the onionshare server. This uses multiple threads to start the Tor onion - server and the web app. - """ - self.common.log("Mode", "start_server") - - self.start_server_custom() - self.set_server_active.emit(True) - - # Clear the status bar - self.status_bar.clearMessage() - self.server_status_label.setText("") - - # Hide the mode settings - self.mode_settings_widget.hide() - - # 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, password - # and onion address, but it will not start the WebThread yet. - if self.settings.get("general", "autostart_timer"): - self.start_onion_thread(obtain_onion_early=True) - 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) - self.startup_thread.canceled = False - self.startup_thread.start() - else: - self.start_onion_thread() - - def start_onion_thread(self, obtain_onion_early=False): - # If we tried to start with Client Auth and our Tor is too old to support it, - # bail out early - if ( - not self.server_status.local_only - and not self.app.onion.supports_stealth - and not self.settings.get("general", "public") - ): - self.stop_server() - self.start_server_error(strings._("gui_server_doesnt_support_stealth")) - else: - 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) - self.onion_thread.start() - - def start_server_custom(self): - """ - Add custom initialization here. - """ - 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. - """ - self.common.log("Mode", "start_server_step2") - - self.start_server_step2_custom() - - # Nothing to do here. - - # start_server_step2_custom has call these to move on: - # self.starting_server_step3.emit() - # self.start_server_finished.emit() - - def start_server_step2_custom(self): - """ - Add custom initialization here. - """ - pass - - def start_server_step3(self): - """ - Step 3 in starting the onionshare server. - """ - self.common.log("Mode", "start_server_step3") - - self.start_server_step3_custom() - - if self.settings.get("general", "autostop_timer"): - # Convert the date value to seconds between now and then - now = QtCore.QDateTime.currentDateTime() - 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_autostop_timer") - ) - - def start_server_step3_custom(self): - """ - Add custom initialization here. - """ - pass - - def start_server_error(self, error): - """ - If there's an error when trying to start the onion service - """ - self.common.log("Mode", "start_server_error") - - Alert(self.common, error, QtWidgets.QMessageBox.Warning) - self.set_server_active.emit(False) - self.server_status.stop_server() - self.status_bar.clearMessage() - - self.start_server_error_custom() - - def start_server_error_custom(self): - """ - Add custom initialization here. - """ - pass - - def cancel_server(self): - """ - 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.app.onion.scheduled_auth_cookie = None - self.startup_thread.quit() - - # Canceling only works in Windows - # https://github.com/onionshare/onionshare/issues/1371 - if self.common.platform == "Windows": - if self.onion_thread: - self.common.log("Mode", "cancel_server: quitting onion thread") - self.onion_thread.terminate() - self.onion_thread.wait() - if self.web_thread: - self.common.log("Mode", "cancel_server: quitting web thread") - self.web_thread.terminate() - self.web_thread.wait() - - self.stop_server() - - def cancel_server_custom(self): - """ - Add custom initialization here. - """ - pass - - def stop_server(self): - """ - Stop the onionshare server. - """ - self.common.log("Mode", "stop_server") - - if self.server_status.status != ServerStatus.STATUS_STOPPED: - try: - self.web.stop(self.app.port) - except Exception: - # Probably we had no port to begin with (Onion service didn't start) - pass - self.web.cleanup() - - self.stop_server_custom() - - self.set_server_active.emit(False) - self.stop_server_finished.emit() - - # Show the mode settings - self.mode_settings_widget.show() - - def stop_server_custom(self): - """ - Add custom initialization here. - """ - pass - - def handle_tor_broke(self): - """ - Handle connection from Tor breaking. - """ - if self.server_status.status != ServerStatus.STATUS_STOPPED: - self.server_status.stop_server() - self.handle_tor_broke_custom() - - def handle_tor_broke_custom(self): - """ - Add custom initialization here. - """ - pass - - # Handle web server events - - def handle_request_load(self, event): - """ - Handle REQUEST_LOAD event. - """ - pass - - def handle_request_started(self, event): - """ - Handle REQUEST_STARTED event. - """ - pass - - def handle_request_progress(self, event): - """ - Handle REQUEST_PROGRESS event. - """ - pass - - def handle_request_canceled(self, event): - """ - Handle REQUEST_CANCELED event. - """ - pass - - def handle_request_upload_includes_message(self, event): - """ - Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event. - """ - pass - - def handle_request_upload_file_renamed(self, event): - """ - Handle REQUEST_UPLOAD_FILE_RENAMED event. - """ - pass - - def handle_request_upload_message(self, event): - """ - Handle REQUEST_UPLOAD_MESSAGE event. - """ - pass - - def handle_request_upload_set_dir(self, event): - """ - Handle REQUEST_UPLOAD_SET_DIR event. - """ - pass - - def handle_request_upload_finished(self, event): - """ - Handle REQUEST_UPLOAD_FINISHED event. - """ - pass - - def handle_request_upload_canceled(self, event): - """ - Handle REQUEST_UPLOAD_CANCELED event. - """ - pass - - def handle_request_individual_file_started(self, event): - """ - Handle REQUEST_INDVIDIDUAL_FILES_STARTED event. - Used in both Share and Website modes, so implemented here. - """ - self.toggle_history.update_indicator(True) - self.history.requests_count += 1 - self.history.update_requests() - - item = IndividualFileHistoryItem(self.common, event["data"], event["path"]) - self.history.add(event["data"]["id"], item) - - def handle_request_individual_file_progress(self, event): - """ - Handle REQUEST_INDVIDIDUAL_FILES_PROGRESS event. - Used in both Share and Website modes, so implemented here. - """ - self.history.update(event["data"]["id"], event["data"]["bytes"]) - - if self.server_status.status == self.server_status.STATUS_STOPPED: - self.history.cancel(event["data"]["id"]) - - def handle_request_individual_file_canceled(self, event): - """ - Handle REQUEST_INDVIDIDUAL_FILES_CANCELED event. - Used in both Share and Website modes, so implemented here. - """ - self.history.cancel(event["data"]["id"]) - - def tor_connection_started(self): - """ - This is called on every Mode when Tor is connected - """ - self.content_widget.show() - self.tor_not_connected_widget.hide() - - def tor_connection_stopped(self): - """ - This is called on every Mode when Tor is disconnected - """ - if self.common.gui.local_only: - self.tor_connection_started() - return - - self.content_widget.hide() - self.tor_not_connected_widget.show() diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py deleted file mode 100644 index 1081fe9d..00000000 --- a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.web import Web - -from .. import Mode -from .... import strings -from ....widgets import MinimumSizeWidget -from ....gui_common import GuiCommon - - -class ChatMode(Mode): - """ - Parts of the main window UI for sharing files. - """ - - success = QtCore.Signal() - error = QtCore.Signal(str) - - def init(self): - """ - Custom initialization for ChatMode. - """ - # Create the Web object - self.web = Web(self.common, True, self.settings, "chat") - - # Chat image - self.image_label = QtWidgets.QLabel() - self.image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path( - "images/{}_mode_chat.png".format(self.common.gui.color_mode) - ) - ) - ) - ) - self.image_label.setFixedSize(300, 300) - image_layout = QtWidgets.QVBoxLayout() - image_layout.addStretch() - image_layout.addWidget(self.image_label) - image_layout.addStretch() - self.image = QtWidgets.QWidget() - self.image.setLayout(image_layout) - - # Set title placeholder - self.mode_settings_widget.title_lineedit.setPlaceholderText( - strings._("gui_tab_name_chat") - ) - - # Server status - self.server_status.set_mode("chat") - self.server_status.server_started_finished.connect(self.update_primary_action) - self.server_status.server_stopped.connect(self.update_primary_action) - self.server_status.server_canceled.connect(self.update_primary_action) - # Tell server_status about web, then update - self.server_status.web = self.web - self.server_status.update() - - # Header - header_label = QtWidgets.QLabel(strings._("gui_new_tab_chat_button")) - header_label.setStyleSheet(self.common.gui.css["mode_header_label"]) - - # Top bar - top_bar_layout = QtWidgets.QHBoxLayout() - # Add space at the top, same height as the toggle history bar in other modes - top_bar_layout.addWidget(MinimumSizeWidget(0, 30)) - - # Main layout - self.main_layout = QtWidgets.QVBoxLayout() - self.main_layout.addLayout(top_bar_layout) - self.main_layout.addWidget(header_label) - self.main_layout.addWidget(self.primary_action, stretch=1) - self.main_layout.addWidget(self.server_status) - self.main_layout.addWidget(MinimumSizeWidget(700, 0)) - - # Column layout - self.column_layout = QtWidgets.QHBoxLayout() - self.column_layout.addWidget(self.image) - self.column_layout.addLayout(self.main_layout) - - # Content layout - self.content_layout.addLayout(self.column_layout) - - def get_type(self): - """ - Returns the type of mode as a string (e.g. "share", "receive", etc.) - """ - return "chat" - - def get_stop_server_autostop_timer_text(self): - """ - Return the string to put on the stop server button, if there's an auto-stop timer - """ - return strings._("gui_share_stop_server_autostop_timer") - - def autostop_timer_finished_should_stop_server(self): - """ - The auto-stop timer expired, should we stop the server? Returns a bool - """ - - self.server_status.stop_server() - self.server_status_label.setText(strings._("close_on_autostop_timer")) - return True - - def start_server_custom(self): - """ - Starting the server. - """ - # Reset web counters - self.web.chat_mode.cur_history_id = 0 - - def start_server_step2_custom(self): - """ - Step 2 in starting the server. Zipping up files. - """ - # Continue - self.starting_server_step3.emit() - self.start_server_finished.emit() - - def cancel_server_custom(self): - """ - Log that the server has been cancelled - """ - self.common.log("ChatMode", "cancel_server") - - def handle_tor_broke_custom(self): - """ - Connection to Tor broke. - """ - self.primary_action.hide() - - def on_reload_settings(self): - """ - We should be ok to re-enable the 'Start Receive Mode' button now. - """ - self.primary_action.show() - - def update_primary_action(self): - self.common.log("ChatMode", "update_primary_action") diff --git a/desktop/src/onionshare/tab/mode/file_selection.py b/desktop/src/onionshare/tab/mode/file_selection.py deleted file mode 100644 index 1addba22..00000000 --- a/desktop/src/onionshare/tab/mode/file_selection.py +++ /dev/null @@ -1,534 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os -from PySide2 import QtCore, QtWidgets, QtGui - -from ... import strings -from ...widgets import Alert, AddFileDialog -from ...gui_common import GuiCommon - - -class DropHereWidget(QtWidgets.QWidget): - """ - When there are no files or folders in the FileList yet, display the - 'drop files here' message and graphic. - """ - - def __init__(self, common, image_filename, header_text, w, h, parent): - super(DropHereWidget, self).__init__(parent) - self.common = common - self.setAcceptDrops(True) - - self.image_label = QtWidgets.QLabel(parent=self) - self.image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage(GuiCommon.get_resource_path(image_filename)) - ) - ) - self.image_label.setAlignment(QtCore.Qt.AlignCenter) - self.image_label.show() - - self.header_label = QtWidgets.QLabel(parent=self) - self.header_label.setText(header_text) - self.header_label.setStyleSheet( - self.common.gui.css["share_file_selection_drop_here_header_label"] - ) - self.header_label.setAlignment(QtCore.Qt.AlignCenter) - self.header_label.show() - - self.text_label = QtWidgets.QLabel(parent=self) - self.text_label.setText(strings._("gui_drag_and_drop")) - self.text_label.setStyleSheet( - self.common.gui.css["share_file_selection_drop_here_label"] - ) - self.text_label.setAlignment(QtCore.Qt.AlignCenter) - self.text_label.show() - - self.resize(w, h) - self.hide() - - def dragEnterEvent(self, event): - self.hide() - event.accept() - - def resize(self, w, h): - self.setGeometry(0, 0, w, h) - self.image_label.setGeometry(0, 0, w, h - 100) - self.header_label.setGeometry(0, 290, w, h - 360) - self.text_label.setGeometry(0, 340, w, h - 380) - - -class DropCountLabel(QtWidgets.QLabel): - """ - While dragging files over the FileList, this counter displays the - number of files you're dragging. - """ - - def __init__(self, common, parent): - self.parent = parent - super(DropCountLabel, self).__init__(parent=parent) - - self.common = common - - self.setAcceptDrops(True) - self.setAlignment(QtCore.Qt.AlignCenter) - self.setText(strings._("gui_drag_and_drop")) - self.setStyleSheet(self.common.gui.css["share_file_selection_drop_count_label"]) - self.hide() - - def dragEnterEvent(self, event): - self.hide() - event.accept() - - -class FileList(QtWidgets.QListWidget): - """ - The list of files and folders in the GUI. - """ - - files_dropped = QtCore.Signal() - files_updated = QtCore.Signal() - - def __init__(self, common, background_image_filename, header_text, parent=None): - super(FileList, self).__init__(parent) - self.common = common - self.setAcceptDrops(True) - - self.setIconSize(QtCore.QSize(32, 32)) - self.setSortingEnabled(True) - self.setMinimumHeight(160) - self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - self.drop_here = DropHereWidget( - self.common, - background_image_filename, - header_text, - self.width(), - self.height(), - self, - ) - self.drop_count = DropCountLabel(self.common, self) - self.resizeEvent(None) - self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) - - def update(self): - """ - Update the GUI elements based on the current state. - """ - # file list should have a background image if empty - if self.count() == 0: - self.drop_here.show() - else: - self.drop_here.hide() - - def server_started(self): - """ - Update the GUI when the server starts, by hiding delete buttons. - """ - self.setAcceptDrops(False) - self.setCurrentItem(None) - self.setSelectionMode(QtWidgets.QAbstractItemView.NoSelection) - for index in range(self.count()): - self.item(index).item_button.hide() - - def server_stopped(self): - """ - Update the GUI when the server stops, by showing delete buttons. - """ - self.setAcceptDrops(True) - self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - for index in range(self.count()): - self.item(index).item_button.show() - - def resizeEvent(self, event): - """ - When the widget is resized, resize the drop files image and text. - """ - self.drop_here.resize(self.width(), self.height()) - - if self.count() > 0: - # Add and delete an empty item, to force all items to get redrawn - # This is ugly, but the only way I could figure out how to proceed - item = QtWidgets.QListWidgetItem("fake item") - self.addItem(item) - self.takeItem(self.row(item)) - self.update() - - # Extend any filenames that were truncated to fit the window - # We use 200 as a rough guess at how wide the 'file size + delete button' widget is - # and extend based on the overall width minus that amount. - for index in range(self.count()): - metrics = QtGui.QFontMetrics(self.item(index).font()) - elided = metrics.elidedText( - self.item(index).basename, QtCore.Qt.ElideRight, self.width() - 200 - ) - self.item(index).setText(elided) - - def dragEnterEvent(self, event): - """ - dragEnterEvent for dragging files and directories into the widget. - """ - # Drag and drop doesn't work in Flatpak, because of the sandbox - if self.common.is_flatpak(): - Alert(self.common, strings._("gui_dragdrop_sandbox_flatpak").format()) - event.ignore() - return - - if event.mimeData().hasUrls: - self.setStyleSheet(self.common.gui.css["share_file_list_drag_enter"]) - count = len(event.mimeData().urls()) - self.drop_count.setText(f"+{count}") - - size_hint = self.drop_count.sizeHint() - self.drop_count.setGeometry( - self.width() - size_hint.width() - 30, - self.height() - size_hint.height() - 10, - size_hint.width(), - size_hint.height(), - ) - self.drop_count.show() - event.accept() - else: - event.ignore() - - def dragLeaveEvent(self, event): - """ - dragLeaveEvent for dragging files and directories into the widget. - """ - # Drag and drop doesn't work in Flatpak, because of the sandbox - if self.common.is_flatpak(): - event.ignore() - return - - self.setStyleSheet(self.common.gui.css["share_file_list_drag_leave"]) - self.drop_count.hide() - event.accept() - self.update() - - def dragMoveEvent(self, event): - """ - dragMoveEvent for dragging files and directories into the widget. - """ - # Drag and drop doesn't work in Flatpak, because of the sandbox - if self.common.is_flatpak(): - event.ignore() - return - - if event.mimeData().hasUrls: - event.setDropAction(QtCore.Qt.CopyAction) - event.accept() - else: - event.ignore() - - def dropEvent(self, event): - """ - dropEvent for dragging files and directories into the widget. - """ - # Drag and drop doesn't work in Flatpak, because of the sandbox - if self.common.is_flatpak(): - event.ignore() - return - - if event.mimeData().hasUrls: - event.setDropAction(QtCore.Qt.CopyAction) - event.accept() - for url in event.mimeData().urls(): - filename = str(url.toLocalFile()) - self.add_file(filename) - else: - event.ignore() - - self.setStyleSheet(self.common.gui.css["share_file_list_drag_leave"]) - self.drop_count.hide() - - self.files_dropped.emit() - - def add_file(self, filename): - """ - Add a file or directory to this widget. - """ - filenames = [] - for index in range(self.count()): - filenames.append(self.item(index).filename) - - if filename not in filenames: - if not os.access(filename, os.R_OK): - Alert(self.common, strings._("not_a_readable_file").format(filename)) - return - - fileinfo = QtCore.QFileInfo(filename) - ip = QtWidgets.QFileIconProvider() - icon = ip.icon(fileinfo) - - if os.path.isfile(filename): - size_bytes = fileinfo.size() - size_readable = self.common.human_readable_filesize(size_bytes) - else: - size_bytes = self.common.dir_size(filename) - size_readable = self.common.human_readable_filesize(size_bytes) - - # Create a new item - item = QtWidgets.QListWidgetItem() - item.setIcon(icon) - item.size_bytes = size_bytes - - # Item's filename attribute and size labels - item.filename = filename - item_size = QtWidgets.QLabel(size_readable) - item_size.setStyleSheet(self.common.gui.css["share_file_list_item_size"]) - - item.basename = os.path.basename(filename.rstrip("/")) - # Use the basename as the method with which to sort the list - metrics = QtGui.QFontMetrics(item.font()) - elided = metrics.elidedText( - item.basename, QtCore.Qt.ElideRight, self.sizeHint().width() - ) - item.setData(QtCore.Qt.DisplayRole, elided) - - # Item's delete button - def delete_item(): - itemrow = self.row(item) - self.takeItem(itemrow) - self.files_updated.emit() - - item.item_button = QtWidgets.QPushButton() - item.item_button.setDefault(False) - item.item_button.setFlat(True) - item.item_button.setIcon( - QtGui.QIcon(GuiCommon.get_resource_path("images/file_delete.png")) - ) - item.item_button.clicked.connect(delete_item) - item.item_button.setSizePolicy( - QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed - ) - - # Item info widget, with a white background - item_info_layout = QtWidgets.QHBoxLayout() - item_info_layout.setContentsMargins(0, 0, 0, 0) - item_info_layout.addWidget(item_size) - item_info_layout.addWidget(item.item_button) - item_info = QtWidgets.QWidget() - item_info.setObjectName("item-info") - item_info.setLayout(item_info_layout) - - # Create the item's widget and layouts - item_hlayout = QtWidgets.QHBoxLayout() - item_hlayout.addStretch() - item_hlayout.addWidget(item_info) - widget = QtWidgets.QWidget() - widget.setLayout(item_hlayout) - - item.setSizeHint(widget.sizeHint()) - - self.addItem(item) - self.setItemWidget(item, widget) - - self.files_updated.emit() - - -class FileSelection(QtWidgets.QVBoxLayout): - """ - The list of files and folders in the GUI, as well as buttons to add and - delete the files and folders. - """ - - def __init__(self, common, background_image_filename, header_text, parent): - super(FileSelection, self).__init__() - - self.common = common - self.parent = parent - - self.server_on = False - - # File list - self.file_list = FileList(self.common, background_image_filename, header_text) - self.file_list.itemSelectionChanged.connect(self.update) - self.file_list.files_dropped.connect(self.update) - self.file_list.files_updated.connect(self.update) - - # Sandboxes (for masOS, Flatpak, etc.) need separate add files and folders buttons, in - # order to use native file selection dialogs - if self.common.platform == "Darwin" or self.common.is_flatpak(): - self.sandbox = True - else: - self.sandbox = False - - # Buttons - if self.sandbox: - # The macOS sandbox makes it so the Mac version needs separate add files - # and folders buttons, in order to use native file selection dialogs - self.add_files_button = QtWidgets.QPushButton(strings._("gui_add_files")) - self.add_files_button.clicked.connect(self.add_files) - self.add_folder_button = QtWidgets.QPushButton(strings._("gui_add_folder")) - self.add_folder_button.clicked.connect(self.add_folder) - else: - self.add_button = QtWidgets.QPushButton(strings._("gui_add")) - self.add_button.clicked.connect(self.add) - self.remove_button = QtWidgets.QPushButton(strings._("gui_remove")) - self.remove_button.clicked.connect(self.delete) - button_layout = QtWidgets.QHBoxLayout() - button_layout.addStretch() - if self.sandbox: - button_layout.addWidget(self.add_files_button) - button_layout.addWidget(self.add_folder_button) - else: - button_layout.addWidget(self.add_button) - button_layout.addWidget(self.remove_button) - - # Add the widgets - self.addWidget(self.file_list) - self.addLayout(button_layout) - - self.update() - - def update(self): - """ - Update the GUI elements based on the current state. - """ - # All buttons should be hidden if the server is on - if self.server_on: - if self.sandbox: - self.add_files_button.hide() - self.add_folder_button.hide() - else: - self.add_button.hide() - self.remove_button.hide() - else: - if self.sandbox: - self.add_files_button.show() - self.add_folder_button.show() - else: - self.add_button.show() - - # Delete button should be hidden if item isn't selected - if len(self.file_list.selectedItems()) == 0: - self.remove_button.hide() - else: - self.remove_button.show() - - # Update the file list - self.file_list.update() - - # Save the latest file list to mode settings - self.save_filenames() - - def add(self): - """ - Add button clicked. - """ - file_dialog = AddFileDialog(self.common, caption=strings._("gui_choose_items")) - if file_dialog.exec_() == QtWidgets.QDialog.Accepted: - self.common.log("FileSelection", "add", file_dialog.selectedFiles()) - for filename in file_dialog.selectedFiles(): - self.file_list.add_file(filename) - - self.file_list.setCurrentItem(None) - self.update() - - def add_files(self): - """ - Add Files button clicked. - """ - files = QtWidgets.QFileDialog.getOpenFileNames( - self.parent, caption=strings._("gui_choose_items") - ) - self.common.log("FileSelection", "add_files", files) - - filenames = files[0] - for filename in filenames: - self.file_list.add_file(filename) - - self.file_list.setCurrentItem(None) - self.update() - - def add_folder(self): - """ - Add Folder button clicked. - """ - filename = QtWidgets.QFileDialog.getExistingDirectory( - self.parent, - caption=strings._("gui_choose_items"), - options=QtWidgets.QFileDialog.ShowDirsOnly, - ) - self.common.log("FileSelection", "add_folder", filename) - if filename: - self.file_list.add_file(filename) - self.file_list.setCurrentItem(None) - self.update() - - def delete(self): - """ - Delete button clicked - """ - selected = self.file_list.selectedItems() - for item in selected: - itemrow = self.file_list.row(item) - self.file_list.takeItem(itemrow) - self.file_list.files_updated.emit() - - self.file_list.setCurrentItem(None) - self.update() - - def server_started(self): - """ - Gets called when the server starts. - """ - self.server_on = True - self.file_list.server_started() - self.update() - - def server_stopped(self): - """ - Gets called when the server stops. - """ - self.server_on = False - self.file_list.server_stopped() - self.update() - - def get_num_files(self): - """ - Returns the total number of files and folders in the list. - """ - return len(range(self.file_list.count())) - - def get_filenames(self): - """ - Return the list of file and folder names - """ - filenames = [] - for index in range(self.file_list.count()): - filenames.append(self.file_list.item(index).filename) - return filenames - - def save_filenames(self): - """ - Save the filenames to mode settings - """ - filenames = self.get_filenames() - if self.parent.tab.mode == self.common.gui.MODE_SHARE: - self.parent.settings.set("share", "filenames", filenames) - elif self.parent.tab.mode == self.common.gui.MODE_WEBSITE: - self.parent.settings.set("website", "filenames", filenames) - - def setFocus(self): - """ - Set the Qt app focus on the file selection box. - """ - self.file_list.setFocus() diff --git a/desktop/src/onionshare/tab/mode/history.py b/desktop/src/onionshare/tab/mode/history.py deleted file mode 100644 index 091905f7..00000000 --- a/desktop/src/onionshare/tab/mode/history.py +++ /dev/null @@ -1,892 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import time -import subprocess -import os -from datetime import datetime -from PySide2 import QtCore, QtWidgets, QtGui - -from ... import strings -from ...widgets import Alert -from ...gui_common import GuiCommon - - -class HistoryItem(QtWidgets.QWidget): - """ - The base history item - """ - - STATUS_STARTED = 0 - STATUS_FINISHED = 1 - STATUS_CANCELED = 2 - - def __init__(self): - super(HistoryItem, self).__init__() - - def update(self): - pass - - def cancel(self): - pass - - def get_finished_label_text(self, started): - """ - When an item finishes, returns a string displaying the start/end datetime range. - started is a datetime object. - """ - return self._get_label_text( - "gui_all_modes_transfer_finished", - "gui_all_modes_transfer_finished_range", - started, - ) - - def get_canceled_label_text(self, started): - """ - When an item is canceled, returns a string displaying the start/end datetime range. - started is a datetime object. - """ - return self._get_label_text( - "gui_all_modes_transfer_canceled", - "gui_all_modes_transfer_canceled_range", - started, - ) - - def _get_label_text(self, string_name, string_range_name, started): - """ - Return a string that contains a date, or date range. - """ - ended = datetime.now() - if ( - started.year == ended.year - and started.month == ended.month - and started.day == ended.day - ): - if started.hour == ended.hour and started.minute == ended.minute: - text = strings._(string_name).format(started.strftime("%b %d, %I:%M%p")) - else: - text = strings._(string_range_name).format( - started.strftime("%b %d, %I:%M%p"), ended.strftime("%I:%M%p") - ) - else: - text = strings._(string_range_name).format( - started.strftime("%b %d, %I:%M%p"), ended.strftime("%b %d, %I:%M%p") - ) - return text - - -class ShareHistoryItem(HistoryItem): - """ - Download history item, for share mode - """ - - def __init__(self, common, id, total_bytes): - super(ShareHistoryItem, self).__init__() - self.common = common - - self.id = id - self.total_bytes = total_bytes - self.downloaded_bytes = 0 - self.started = time.time() - self.started_dt = datetime.fromtimestamp(self.started) - self.status = HistoryItem.STATUS_STARTED - - # Label - self.label = QtWidgets.QLabel( - strings._("gui_all_modes_transfer_started").format( - self.started_dt.strftime("%b %d, %I:%M%p") - ) - ) - - # Progress bar - self.progress_bar = QtWidgets.QProgressBar() - self.progress_bar.setTextVisible(True) - self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) - self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) - self.progress_bar.setMinimum(0) - self.progress_bar.setMaximum(total_bytes / 1024) - self.progress_bar.setValue(0) - self.progress_bar.setStyleSheet( - self.common.gui.css["downloads_uploads_progress_bar"] - ) - self.progress_bar.total_bytes = total_bytes - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.label) - layout.addWidget(self.progress_bar) - self.setLayout(layout) - - # Start at 0 - self.update(0) - - def update(self, downloaded_bytes): - self.downloaded_bytes = downloaded_bytes - - self.progress_bar.setValue(downloaded_bytes / 1024) - if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024): - pb_fmt = strings._("gui_all_modes_progress_complete").format( - self.common.format_seconds(time.time() - self.started) - ) - - # Change the label - self.label.setText(self.get_finished_label_text(self.started_dt)) - self.label.setStyleSheet(self.common.gui.css["history_default_label"]) - self.status = HistoryItem.STATUS_FINISHED - - else: - elapsed = time.time() - self.started - if elapsed < 10: - # Wait a couple of seconds for the download rate to stabilize. - # This prevents a "Windows copy dialog"-esque experience at - # the beginning of the download. - pb_fmt = strings._("gui_all_modes_progress_starting").format( - self.common.human_readable_filesize(downloaded_bytes) - ) - else: - pb_fmt = strings._("gui_all_modes_progress_eta").format( - self.common.human_readable_filesize(downloaded_bytes), - self.estimated_time_remaining, - ) - - self.progress_bar.setFormat(pb_fmt) - - def cancel(self): - self.progress_bar.setFormat(strings._("gui_canceled")) - self.status = HistoryItem.STATUS_CANCELED - - @property - def estimated_time_remaining(self): - return self.common.estimated_time_remaining( - self.downloaded_bytes, self.total_bytes, self.started - ) - - -class ReceiveHistoryItemFile(QtWidgets.QWidget): - def __init__(self, common, filename): - super(ReceiveHistoryItemFile, self).__init__() - self.common = common - - self.common.log("ReceiveHistoryItemFile", "__init__", f"filename: {filename}") - - self.filename = filename - self.dir = None - self.started = datetime.now() - - # Filename label - self.filename_label = QtWidgets.QLabel(self.filename) - self.filename_label_width = self.filename_label.width() - - # File size label - self.filesize_label = QtWidgets.QLabel() - self.filesize_label.setStyleSheet(self.common.gui.css["receive_file_size"]) - self.filesize_label.hide() - - # Folder button - folder_pixmap = QtGui.QPixmap.fromImage( - QtGui.QImage(GuiCommon.get_resource_path("images/open_folder.png")) - ) - folder_icon = QtGui.QIcon(folder_pixmap) - self.folder_button = QtWidgets.QPushButton() - self.folder_button.clicked.connect(self.open_folder) - self.folder_button.setIcon(folder_icon) - self.folder_button.setIconSize(folder_pixmap.rect().size()) - self.folder_button.setFlat(True) - self.folder_button.hide() - - # Layouts - layout = QtWidgets.QHBoxLayout() - layout.addWidget(self.filename_label) - layout.addWidget(self.filesize_label) - layout.addStretch() - layout.addWidget(self.folder_button) - self.setLayout(layout) - - def update(self, uploaded_bytes, complete): - self.filesize_label.setText(self.common.human_readable_filesize(uploaded_bytes)) - self.filesize_label.show() - - if complete: - self.folder_button.show() - - def rename(self, new_filename): - self.filename = new_filename - self.filename_label.setText(self.filename) - - def set_dir(self, dir): - self.dir = dir - - def open_folder(self): - """ - Open the downloads folder, with the file selected, in a cross-platform manner - """ - self.common.log("ReceiveHistoryItemFile", "open_folder") - - if not self.dir: - self.common.log( - "ReceiveHistoryItemFile", - "open_folder", - "dir has not been set yet, can't open folder", - ) - return - - abs_filename = os.path.join(self.dir, self.filename) - - # Linux - if self.common.platform == "Linux" or self.common.platform == "BSD": - try: - # If nautilus is available, open it - subprocess.Popen(["xdg-open", self.dir]) - except Exception: - Alert( - self.common, - strings._("gui_open_folder_error").format(abs_filename), - ) - - # macOS - elif self.common.platform == "Darwin": - subprocess.call(["open", "-R", abs_filename]) - - # Windows - elif self.common.platform == "Windows": - subprocess.Popen(["explorer", f"/select,{abs_filename}"]) - - -class ReceiveHistoryItemMessage(QtWidgets.QWidget): - def __init__( - self, - common, - ): - super(ReceiveHistoryItemMessage, self).__init__() - self.common = common - self.filename = None - - # Read message button - message_pixmap = QtGui.QPixmap.fromImage( - QtGui.QImage(GuiCommon.get_resource_path("images/open_message.png")) - ) - message_icon = QtGui.QIcon(message_pixmap) - self.message_button = QtWidgets.QPushButton( - strings._("history_receive_read_message_button") - ) - self.message_button.setStyleSheet(self.common.gui.css["receive_message_button"]) - self.message_button.clicked.connect(self.open_message) - self.message_button.setIcon(message_icon) - self.message_button.setIconSize(message_pixmap.rect().size()) - - # Layouts - layout = QtWidgets.QHBoxLayout() - layout.addWidget(self.message_button) - layout.addStretch() - self.setLayout(layout) - - self.hide() - - def set_filename(self, new_filename): - self.filename = new_filename - self.show() - - def open_message(self): - """ - Open the message in the operating system's default text editor - """ - self.common.log("ReceiveHistoryItemMessage", "open_message", self.filename) - - # Linux - if self.common.platform == "Linux" or self.common.platform == "BSD": - # If nautilus is available, open it - subprocess.Popen(["xdg-open", self.filename]) - - # macOS - elif self.common.platform == "Darwin": - subprocess.call(["open", self.filename]) - - # Windows - elif self.common.platform == "Windows": - subprocess.Popen(["notepad", self.filename]) - - -class ReceiveHistoryItem(HistoryItem): - def __init__(self, common, id, content_length): - super(ReceiveHistoryItem, self).__init__() - self.common = common - self.id = id - self.content_length = content_length - self.started = datetime.now() - self.status = HistoryItem.STATUS_STARTED - - self.common.log( - "ReceiveHistoryItem", - "__init__", - f"id={self.id} content_length={self.content_length}", - ) - - # Label - self.label = QtWidgets.QLabel( - strings._("gui_all_modes_transfer_started").format( - self.started.strftime("%b %d, %I:%M%p") - ) - ) - - # Progress bar - self.progress_bar = QtWidgets.QProgressBar() - self.progress_bar.setTextVisible(True) - self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) - self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) - self.progress_bar.setMinimum(0) - self.progress_bar.setValue(0) - self.progress_bar.setStyleSheet( - self.common.gui.css["downloads_uploads_progress_bar"] - ) - - # The message widget, if a message was included - self.message = ReceiveHistoryItemMessage(self.common) - - # This layout contains file widgets - self.files_layout = QtWidgets.QVBoxLayout() - self.files_layout.setContentsMargins(0, 0, 0, 0) - files_widget = QtWidgets.QWidget() - files_widget.setStyleSheet(self.common.gui.css["receive_file"]) - files_widget.setLayout(self.files_layout) - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.label) - layout.addWidget(self.message) - layout.addWidget(self.progress_bar) - layout.addWidget(files_widget) - layout.addStretch() - self.setLayout(layout) - - # We're also making a dictionary of file widgets, to make them easier to access - self.files = {} - - def includes_message(self, message_filename): - self.message.set_filename(message_filename) - - def update(self, data): - """ - Using the progress from Web, update the progress bar and file size labels - for each file - """ - if data["action"] == "progress": - total_uploaded_bytes = 0 - for filename in data["progress"]: - total_uploaded_bytes += data["progress"][filename]["uploaded_bytes"] - - # Update the progress bar - self.progress_bar.setMaximum(self.content_length / 1024) - self.progress_bar.setValue(total_uploaded_bytes / 1024) - - elapsed = datetime.now() - self.started - if elapsed.seconds < 10: - pb_fmt = strings._("gui_all_modes_progress_starting").format( - self.common.human_readable_filesize(total_uploaded_bytes) - ) - else: - estimated_time_remaining = self.common.estimated_time_remaining( - total_uploaded_bytes, self.content_length, self.started.timestamp() - ) - pb_fmt = strings._("gui_all_modes_progress_eta").format( - self.common.human_readable_filesize(total_uploaded_bytes), - estimated_time_remaining, - ) - - self.progress_bar.setFormat(pb_fmt) - - # Using list(progress) to avoid "RuntimeError: dictionary changed size during iteration" - for filename in list(data["progress"]): - # Add a new file if needed - if filename not in self.files: - self.files[filename] = ReceiveHistoryItemFile(self.common, filename) - self.files_layout.addWidget(self.files[filename]) - - # Update the file - self.files[filename].update( - data["progress"][filename]["uploaded_bytes"], - data["progress"][filename]["complete"], - ) - - elif data["action"] == "rename": - self.files[data["old_filename"]].rename(data["new_filename"]) - self.files[data["new_filename"]] = self.files.pop(data["old_filename"]) - - elif data["action"] == "set_dir": - self.files[data["filename"]].set_dir(data["dir"]) - - elif data["action"] == "finished": - # Change the status - self.status = HistoryItem.STATUS_FINISHED - - # Hide the progress bar - self.progress_bar.hide() - - # Change the label - self.label.setText(self.get_finished_label_text(self.started)) - self.label.setStyleSheet(self.common.gui.css["history_default_label"]) - - elif data["action"] == "canceled": - # Change the status - self.status = HistoryItem.STATUS_CANCELED - - # Hide the progress bar - self.progress_bar.hide() - - # Change the label - self.label.setText(self.get_canceled_label_text(self.started)) - - -class IndividualFileHistoryItem(HistoryItem): - """ - Individual file history item, for share mode viewing of individual files - """ - - def __init__(self, common, data, path): - super(IndividualFileHistoryItem, self).__init__() - self.status = HistoryItem.STATUS_STARTED - self.common = common - - self.id = id - self.path = path - self.total_bytes = 0 - self.downloaded_bytes = 0 - self.started = time.time() - self.started_dt = datetime.fromtimestamp(self.started) - self.status = HistoryItem.STATUS_STARTED - - self.directory_listing = "directory_listing" in data - - # Labels - self.timestamp_label = QtWidgets.QLabel( - self.started_dt.strftime("%b %d, %I:%M%p") - ) - self.timestamp_label.setStyleSheet( - self.common.gui.css["history_individual_file_timestamp_label"] - ) - self.path_label = QtWidgets.QLabel(self.path) - self.path_label.setStyleSheet(self.common.gui.css["history_default_label"]) - self.status_code_label = QtWidgets.QLabel() - - # Progress bar - self.progress_bar = QtWidgets.QProgressBar() - self.progress_bar.setTextVisible(True) - self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose) - self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter) - self.progress_bar.setValue(0) - self.progress_bar.setStyleSheet( - self.common.gui.css["downloads_uploads_progress_bar"] - ) - - # Text layout - labels_layout = QtWidgets.QHBoxLayout() - labels_layout.addWidget(self.timestamp_label) - labels_layout.addWidget(self.path_label) - labels_layout.addWidget(self.status_code_label) - labels_layout.addStretch() - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.addLayout(labels_layout) - layout.addWidget(self.progress_bar) - self.setLayout(layout) - - # Is a status code already sent? - if "status_code" in data: - self.status_code_label.setText(str(data["status_code"])) - if data["status_code"] >= 200 and data["status_code"] < 300: - self.status_code_label.setStyleSheet( - self.common.gui.css["history_individual_file_status_code_label_2xx"] - ) - if data["status_code"] >= 400 and data["status_code"] < 500: - self.status_code_label.setStyleSheet( - self.common.gui.css["history_individual_file_status_code_label_4xx"] - ) - self.status = HistoryItem.STATUS_FINISHED - self.progress_bar.hide() - return - - else: - self.total_bytes = data["filesize"] - self.progress_bar.setMinimum(0) - self.progress_bar.setMaximum(data["filesize"] / 1024) - self.progress_bar.total_bytes = data["filesize"] - - # Start at 0 - self.update(0) - - def update(self, downloaded_bytes): - self.downloaded_bytes = downloaded_bytes - - self.progress_bar.setValue(downloaded_bytes / 1024) - if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024): - self.status_code_label.setText("200") - self.status_code_label.setStyleSheet( - self.common.gui.css["history_individual_file_status_code_label_2xx"] - ) - self.progress_bar.hide() - self.status = HistoryItem.STATUS_FINISHED - - else: - elapsed = time.time() - self.started - if elapsed < 10: - # Wait a couple of seconds for the download rate to stabilize. - # This prevents a "Windows copy dialog"-esque experience at - # the beginning of the download. - pb_fmt = strings._("gui_all_modes_progress_starting").format( - self.common.human_readable_filesize(downloaded_bytes) - ) - else: - pb_fmt = strings._("gui_all_modes_progress_eta").format( - self.common.human_readable_filesize(downloaded_bytes), - self.estimated_time_remaining, - ) - - self.progress_bar.setFormat(pb_fmt) - - def cancel(self): - self.progress_bar.setFormat(strings._("gui_canceled")) - self.status = HistoryItem.STATUS_CANCELED - - @property - def estimated_time_remaining(self): - return self.common.estimated_time_remaining( - self.downloaded_bytes, self.total_bytes, self.started - ) - - -class HistoryItemList(QtWidgets.QScrollArea): - """ - List of items - """ - - def __init__(self, common): - super(HistoryItemList, self).__init__() - self.common = common - - self.items = {} - - # The layout that holds all of the items - self.items_layout = QtWidgets.QVBoxLayout() - self.items_layout.setContentsMargins(0, 0, 0, 0) - self.items_layout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) - - # Wrapper layout that also contains a stretch - wrapper_layout = QtWidgets.QVBoxLayout() - wrapper_layout.setSizeConstraint(QtWidgets.QLayout.SetMinAndMaxSize) - wrapper_layout.addLayout(self.items_layout) - wrapper_layout.addStretch() - - # The internal widget of the scroll area - widget = QtWidgets.QWidget() - widget.setLayout(wrapper_layout) - self.setWidget(widget) - self.setWidgetResizable(True) - - # Other scroll area settings - self.setBackgroundRole(QtGui.QPalette.Light) - self.verticalScrollBar().rangeChanged.connect(self.resizeScroll) - - def resizeScroll(self, minimum, maximum): - """ - Scroll to the bottom of the window when the range changes. - """ - self.verticalScrollBar().setValue(maximum) - - def add(self, id, item): - """ - Add a new item. Override this method. - """ - self.items[id] = item - self.items_layout.addWidget(item) - - def update(self, id, data): - """ - Update an item. Override this method. - """ - if id in self.items: - self.items[id].update(data) - - def cancel(self, id): - """ - Cancel an item. Override this method. - """ - if id in self.items: - self.items[id].cancel() - - def includes_message(self, id, message_filename): - """ - Show message button for receive mode - """ - if id in self.items: - self.items[id].includes_message(message_filename) - - def reset(self): - """ - Reset all items, emptying the list. Override this method. - """ - for key, item in self.items.copy().items(): - self.items_layout.removeWidget(item) - item.close() - del self.items[key] - - -class History(QtWidgets.QWidget): - """ - A history of what's happened so far in this mode. This contains an internal - object full of a scrollable list of items. - """ - - def __init__(self, common, empty_image, empty_text, header_text, mode=""): - super(History, self).__init__() - self.common = common - self.mode = mode - - self.setMinimumWidth(350) - - # In progress and completed counters - self.in_progress_count = 0 - self.completed_count = 0 - self.requests_count = 0 - - # In progress, completed, and requests labels - self.in_progress_label = QtWidgets.QLabel() - self.in_progress_label.setStyleSheet(self.common.gui.css["mode_info_label"]) - self.completed_label = QtWidgets.QLabel() - self.completed_label.setStyleSheet(self.common.gui.css["mode_info_label"]) - self.requests_label = QtWidgets.QLabel() - self.requests_label.setStyleSheet(self.common.gui.css["mode_info_label"]) - - # Header - self.header_label = QtWidgets.QLabel(header_text) - self.header_label.setStyleSheet(self.common.gui.css["downloads_uploads_label"]) - self.clear_button = QtWidgets.QPushButton( - strings._("gui_all_modes_clear_history") - ) - self.clear_button.setStyleSheet(self.common.gui.css["downloads_uploads_clear"]) - self.clear_button.setFlat(True) - self.clear_button.clicked.connect(self.reset) - header_layout = QtWidgets.QHBoxLayout() - header_layout.addWidget(self.header_label) - header_layout.addStretch() - header_layout.addWidget(self.in_progress_label) - header_layout.addWidget(self.completed_label) - header_layout.addWidget(self.requests_label) - header_layout.addWidget(self.clear_button) - - # When there are no items - self.empty_image = QtWidgets.QLabel() - self.empty_image.setAlignment(QtCore.Qt.AlignCenter) - self.empty_image.setPixmap(empty_image) - self.empty_text = QtWidgets.QLabel(empty_text) - self.empty_text.setAlignment(QtCore.Qt.AlignCenter) - self.empty_text.setStyleSheet( - self.common.gui.css["downloads_uploads_empty_text"] - ) - empty_layout = QtWidgets.QVBoxLayout() - empty_layout.addStretch() - empty_layout.addWidget(self.empty_image) - empty_layout.addWidget(self.empty_text) - empty_layout.addStretch() - self.empty = QtWidgets.QWidget() - self.empty.setStyleSheet(self.common.gui.css["downloads_uploads_empty"]) - self.empty.setLayout(empty_layout) - - # When there are items - self.item_list = HistoryItemList(self.common) - self.not_empty_layout = QtWidgets.QVBoxLayout() - self.not_empty_layout.addLayout(header_layout) - self.not_empty_layout.addWidget(self.item_list) - self.not_empty = QtWidgets.QWidget() - self.not_empty.setStyleSheet(self.common.gui.css["downloads_uploads_not_empty"]) - self.not_empty.setLayout(self.not_empty_layout) - - # Layout - layout = QtWidgets.QVBoxLayout() - layout.setContentsMargins(0, 0, 0, 0) - layout.addWidget(self.empty) - layout.addWidget(self.not_empty) - self.setLayout(layout) - - # Reset once at the beginning - self.reset() - - def add(self, id, item): - """ - Add a new item. - """ - self.common.log("History", "add", f"id: {id}") - - # Hide empty, show not empty - self.empty.hide() - self.not_empty.show() - - # Add it to the list - self.item_list.add(id, item) - - def update(self, id, data): - """ - Update an item. - """ - self.item_list.update(id, data) - - def cancel(self, id): - """ - Cancel an item. - """ - self.item_list.cancel(id) - - def includes_message(self, id, message_filename): - """ - Show the message button - """ - self.item_list.includes_message(id, message_filename) - - def reset(self): - """ - Reset all items. - """ - self.item_list.reset() - if len(self.item_list.items) == 0: - # Hide not empty, show empty - self.not_empty.hide() - self.empty.show() - # Reset in-progress counter - self.in_progress_count = 0 - self.update_in_progress() - - # Reset completed counter - self.completed_count = 0 - self.update_completed() - - # Reset web requests counter - self.requests_count = 0 - self.update_requests() - - def update_completed(self): - """ - Update the 'completed' widget. - """ - if self.completed_count == 0: - image = GuiCommon.get_resource_path("images/history_completed_none.png") - else: - image = GuiCommon.get_resource_path("images/history_completed.png") - self.completed_label.setText(f' {self.completed_count}') - self.completed_label.setToolTip( - strings._("history_completed_tooltip").format(self.completed_count) - ) - - def update_in_progress(self): - """ - Update the 'in progress' widget. - """ - if self.in_progress_count == 0: - image = GuiCommon.get_resource_path("images/history_in_progress_none.png") - else: - image = GuiCommon.get_resource_path("images/history_in_progress.png") - - self.in_progress_label.setText( - f' {self.in_progress_count}' - ) - self.in_progress_label.setToolTip( - strings._("history_in_progress_tooltip").format(self.in_progress_count) - ) - - def update_requests(self): - """ - Update the 'web requests' widget. - """ - if self.requests_count == 0: - image = GuiCommon.get_resource_path("images/history_requests_none.png") - else: - image = GuiCommon.get_resource_path("images/history_requests.png") - - self.requests_label.setText(f' {self.requests_count}') - self.requests_label.setToolTip( - strings._("history_requests_tooltip").format(self.requests_count) - ) - - -class ToggleHistory(QtWidgets.QPushButton): - """ - Widget for toggling showing or hiding the history, as well as keeping track - of the indicator counter if it's hidden - """ - - def __init__(self, common, current_mode, history_widget, icon, selected_icon): - super(ToggleHistory, self).__init__() - self.common = common - self.current_mode = current_mode - self.history_widget = history_widget - self.icon = icon - self.selected_icon = selected_icon - - # Toggle button - self.setDefault(False) - self.setFixedWidth(35) - self.setFixedHeight(30) - self.setFlat(True) - self.setIcon(icon) - self.clicked.connect(self.toggle_clicked) - - # Keep track of indicator - self.indicator_count = 0 - self.indicator_label = QtWidgets.QLabel(parent=self) - self.indicator_label.setStyleSheet( - self.common.gui.css["download_uploads_indicator"] - ) - self.update_indicator() - - def update_indicator(self, increment=False): - """ - Update the display of the indicator count. If increment is True, then - only increment the counter if History is hidden. - """ - if increment and not self.history_widget.isVisible(): - self.indicator_count += 1 - - self.indicator_label.setText(str(self.indicator_count)) - - if self.indicator_count == 0: - self.indicator_label.hide() - else: - size = self.indicator_label.sizeHint() - self.indicator_label.setGeometry( - 35 - size.width(), 0, size.width(), size.height() - ) - self.indicator_label.show() - - def toggle_clicked(self): - """ - Toggle showing and hiding the history widget - """ - self.common.log("ToggleHistory", "toggle_clicked") - - if self.history_widget.isVisible(): - self.history_widget.hide() - self.setIcon(self.icon) - self.setFlat(True) - else: - self.history_widget.show() - self.setIcon(self.selected_icon) - self.setFlat(False) - - # Reset the indicator count - self.indicator_count = 0 - self.update_indicator() diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py deleted file mode 100644 index 0e80023e..00000000 --- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py +++ /dev/null @@ -1,288 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets - -from ... import strings - - -class ModeSettingsWidget(QtWidgets.QScrollArea): - """ - All of the common settings for each mode are in this widget - """ - - change_persistent = QtCore.Signal(int, bool) - - def __init__(self, common, tab, mode_settings): - super(ModeSettingsWidget, self).__init__() - self.common = common - self.tab = tab - self.settings = mode_settings - - # Downstream Mode need to fill in this layout with its settings - self.mode_specific_layout = QtWidgets.QVBoxLayout() - - # Persistent - self.persistent_checkbox = QtWidgets.QCheckBox() - self.persistent_checkbox.clicked.connect(self.persistent_checkbox_clicked) - self.persistent_checkbox.setText(strings._("mode_settings_persistent_checkbox")) - if self.settings.get("persistent", "enabled"): - self.persistent_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.persistent_checkbox.setCheckState(QtCore.Qt.Unchecked) - - # Public - self.public_checkbox = QtWidgets.QCheckBox() - self.public_checkbox.clicked.connect(self.public_checkbox_clicked) - self.public_checkbox.setText(strings._("mode_settings_public_checkbox")) - if self.settings.get("general", "public"): - self.public_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.public_checkbox.setCheckState(QtCore.Qt.Unchecked) - - # Title - title_label = QtWidgets.QLabel(strings._("mode_settings_title_label")) - self.title_lineedit = QtWidgets.QLineEdit() - self.title_lineedit.editingFinished.connect(self.title_editing_finished) - if self.settings.get("general", "title"): - self.title_lineedit.setText(self.settings.get("general", "title")) - title_layout = QtWidgets.QHBoxLayout() - title_layout.addWidget(title_label) - title_layout.addWidget(self.title_lineedit) - - # Whether or not to use an auto-start timer - self.autostart_timer_checkbox = QtWidgets.QCheckBox() - self.autostart_timer_checkbox.clicked.connect( - self.autostart_timer_checkbox_clicked - ) - self.autostart_timer_checkbox.setText( - strings._("mode_settings_autostart_timer_checkbox") - ) - if self.settings.get("general", "autostart_timer"): - self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.autostart_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) - - # The autostart timer widget - self.autostart_timer_widget = QtWidgets.QDateTimeEdit() - self.autostart_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") - self.autostart_timer_reset() - self.autostart_timer_widget.setCurrentSection( - QtWidgets.QDateTimeEdit.MinuteSection - ) - if self.settings.get("general", "autostart_timer"): - self.autostart_timer_widget.show() - else: - self.autostart_timer_widget.hide() - - # Autostart timer layout - autostart_timer_layout = QtWidgets.QHBoxLayout() - autostart_timer_layout.setContentsMargins(0, 0, 0, 0) - autostart_timer_layout.addWidget(self.autostart_timer_checkbox) - autostart_timer_layout.addWidget(self.autostart_timer_widget) - - # Whether or not to use an auto-stop timer - self.autostop_timer_checkbox = QtWidgets.QCheckBox() - self.autostop_timer_checkbox.clicked.connect( - self.autostop_timer_checkbox_clicked - ) - self.autostop_timer_checkbox.setText( - strings._("mode_settings_autostop_timer_checkbox") - ) - if self.settings.get("general", "autostop_timer"): - self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.autostop_timer_checkbox.setCheckState(QtCore.Qt.Unchecked) - - # The autostop timer widget - self.autostop_timer_widget = QtWidgets.QDateTimeEdit() - self.autostop_timer_widget.setDisplayFormat("hh:mm A MMM d, yy") - self.autostop_timer_reset() - self.autostop_timer_widget.setCurrentSection( - QtWidgets.QDateTimeEdit.MinuteSection - ) - if self.settings.get("general", "autostop_timer"): - self.autostop_timer_widget.show() - else: - self.autostop_timer_widget.hide() - - # Autostop timer layout - autostop_timer_layout = QtWidgets.QHBoxLayout() - autostop_timer_layout.setContentsMargins(0, 0, 0, 0) - autostop_timer_layout.addWidget(self.autostop_timer_checkbox) - autostop_timer_layout.addWidget(self.autostop_timer_widget) - - # Toggle advanced settings - self.toggle_advanced_button = QtWidgets.QPushButton() - self.toggle_advanced_button.clicked.connect(self.toggle_advanced_clicked) - self.toggle_advanced_button.setFlat(True) - self.toggle_advanced_button.setStyleSheet( - self.common.gui.css["mode_settings_toggle_advanced"] - ) - - # Advanced group itself - advanced_layout = QtWidgets.QVBoxLayout() - advanced_layout.setContentsMargins(0, 0, 0, 0) - advanced_layout.addLayout(title_layout) - advanced_layout.addLayout(autostart_timer_layout) - advanced_layout.addLayout(autostop_timer_layout) - self.advanced_widget = QtWidgets.QWidget() - self.advanced_widget.setLayout(advanced_layout) - self.advanced_widget.hide() - - layout = QtWidgets.QVBoxLayout() - layout.addLayout(self.mode_specific_layout) - layout.addWidget(self.persistent_checkbox) - layout.addWidget(self.public_checkbox) - layout.addWidget(self.advanced_widget) - layout.addWidget(self.toggle_advanced_button) - layout.addStretch() - main_widget = QtWidgets.QWidget() - main_widget.setLayout(layout) - - self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff) - self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded) - self.setWidgetResizable(True) - self.setFrameShape(QtWidgets.QFrame.NoFrame) - self.setWidget(main_widget) - - self.update_ui() - - def update_ui(self): - # Update text on advanced group toggle button - if self.advanced_widget.isVisible(): - self.toggle_advanced_button.setText( - strings._("mode_settings_advanced_toggle_hide") - ) - else: - self.toggle_advanced_button.setText( - strings._("mode_settings_advanced_toggle_show") - ) - - def title_editing_finished(self): - if self.title_lineedit.text().strip() == "": - self.title_lineedit.setText("") - self.settings.set("general", "title", None) - if self.tab.mode == self.common.gui.MODE_SHARE: - self.tab.change_title.emit( - self.tab.tab_id, strings._("gui_tab_name_share") - ) - elif self.tab.mode == self.common.gui.MODE_RECEIVE: - self.tab.change_title.emit( - self.tab.tab_id, strings._("gui_tab_name_receive") - ) - elif self.tab.mode == self.common.gui.MODE_WEBSITE: - self.tab.change_title.emit( - self.tab.tab_id, strings._("gui_tab_name_website") - ) - elif self.tab.mode == self.common.gui.MODE_CHAT: - self.tab.change_title.emit( - self.tab.tab_id, strings._("gui_tab_name_chat") - ) - elif self.tab_mode is None: - pass - else: - title = self.title_lineedit.text() - self.settings.set("general", "title", title) - self.tab.change_title.emit(self.tab.tab_id, title) - - def persistent_checkbox_clicked(self): - self.settings.set("persistent", "enabled", self.persistent_checkbox.isChecked()) - self.settings.set("persistent", "mode", self.tab.mode) - self.change_persistent.emit( - self.tab.tab_id, self.persistent_checkbox.isChecked() - ) - - # If disabling persistence, delete the file from disk - if not self.persistent_checkbox.isChecked(): - self.settings.delete() - - def public_checkbox_clicked(self): - self.settings.set("general", "public", self.public_checkbox.isChecked()) - - def autostart_timer_checkbox_clicked(self): - self.settings.set( - "general", "autostart_timer", self.autostart_timer_checkbox.isChecked() - ) - - if self.autostart_timer_checkbox.isChecked(): - self.autostart_timer_widget.show() - else: - self.autostart_timer_widget.hide() - - def autostop_timer_checkbox_clicked(self): - self.settings.set( - "general", "autostop_timer", self.autostop_timer_checkbox.isChecked() - ) - - if self.autostop_timer_checkbox.isChecked(): - self.autostop_timer_widget.show() - else: - self.autostop_timer_widget.hide() - - def toggle_advanced_clicked(self): - if self.advanced_widget.isVisible(): - self.advanced_widget.hide() - else: - self.advanced_widget.show() - - self.update_ui() - - def autostart_timer_reset(self): - """ - Reset the auto-start timer in the UI after stopping a share - """ - if self.common.gui.local_only: - # For testing - self.autostart_timer_widget.setDateTime( - QtCore.QDateTime.currentDateTime().addSecs(15) - ) - self.autostart_timer_widget.setMinimumDateTime( - QtCore.QDateTime.currentDateTime() - ) - else: - self.autostart_timer_widget.setDateTime( - QtCore.QDateTime.currentDateTime().addSecs( - 300 - ) # 5 minutes in the future - ) - self.autostart_timer_widget.setMinimumDateTime( - QtCore.QDateTime.currentDateTime().addSecs(60) - ) - - def autostop_timer_reset(self): - """ - Reset the auto-stop timer in the UI after stopping a share - """ - if self.common.gui.local_only: - # For testing - self.autostop_timer_widget.setDateTime( - QtCore.QDateTime.currentDateTime().addSecs(15) - ) - self.autostop_timer_widget.setMinimumDateTime( - QtCore.QDateTime.currentDateTime() - ) - else: - self.autostop_timer_widget.setDateTime( - QtCore.QDateTime.currentDateTime().addSecs(300) - ) - self.autostop_timer_widget.setMinimumDateTime( - QtCore.QDateTime.currentDateTime().addSecs(60) - ) diff --git a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py deleted file mode 100644 index b2b2fc5a..00000000 --- a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py +++ /dev/null @@ -1,427 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.web import Web - -from ..history import History, ToggleHistory, ReceiveHistoryItem -from .. import Mode -from .... import strings -from ....widgets import MinimumSizeWidget, Alert -from ....gui_common import GuiCommon - - -class ReceiveMode(Mode): - """ - Parts of the main window UI for receiving files. - """ - - def init(self): - """ - Custom initialization for ReceiveMode. - """ - # Create the Web object - self.web = Web(self.common, True, self.settings, "receive") - - # Receive image - self.image_label = QtWidgets.QLabel() - self.image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path( - "images/{}_mode_receive.png".format(self.common.gui.color_mode) - ) - ) - ) - ) - self.image_label.setFixedSize(250, 250) - image_layout = QtWidgets.QVBoxLayout() - image_layout.addWidget(self.image_label) - self.image = QtWidgets.QWidget() - self.image.setLayout(image_layout) - - # Settings - - # Data dir - data_dir_label = QtWidgets.QLabel( - strings._("mode_settings_receive_data_dir_label") - ) - self.data_dir_lineedit = QtWidgets.QLineEdit() - self.data_dir_lineedit.setReadOnly(True) - self.data_dir_lineedit.setText(self.settings.get("receive", "data_dir")) - data_dir_button = QtWidgets.QPushButton( - strings._("mode_settings_receive_data_dir_browse_button") - ) - data_dir_button.clicked.connect(self.data_dir_button_clicked) - data_dir_layout = QtWidgets.QHBoxLayout() - data_dir_layout.addWidget(data_dir_label) - data_dir_layout.addWidget(self.data_dir_lineedit) - data_dir_layout.addWidget(data_dir_button) - self.mode_settings_widget.mode_specific_layout.addLayout(data_dir_layout) - - # Disable text or files - self.disable_text_checkbox = self.settings.get("receive", "disable_files") - self.disable_text_checkbox = QtWidgets.QCheckBox() - self.disable_text_checkbox.clicked.connect(self.disable_text_checkbox_clicked) - self.disable_text_checkbox.setText( - strings._("mode_settings_receive_disable_text_checkbox") - ) - self.disable_files_checkbox = self.settings.get("receive", "disable_files") - self.disable_files_checkbox = QtWidgets.QCheckBox() - self.disable_files_checkbox.clicked.connect(self.disable_files_checkbox_clicked) - self.disable_files_checkbox.setText( - strings._("mode_settings_receive_disable_files_checkbox") - ) - disable_layout = QtWidgets.QHBoxLayout() - disable_layout.addWidget(self.disable_text_checkbox) - disable_layout.addWidget(self.disable_files_checkbox) - disable_layout.addStretch() - self.mode_settings_widget.mode_specific_layout.addLayout(disable_layout) - - # Webhook URL - webhook_url = self.settings.get("receive", "webhook_url") - self.webhook_url_checkbox = QtWidgets.QCheckBox() - self.webhook_url_checkbox.clicked.connect(self.webhook_url_checkbox_clicked) - self.webhook_url_checkbox.setText( - strings._("mode_settings_receive_webhook_url_checkbox") - ) - self.webhook_url_lineedit = QtWidgets.QLineEdit() - self.webhook_url_lineedit.editingFinished.connect( - self.webhook_url_editing_finished - ) - self.webhook_url_lineedit.setPlaceholderText( - "https://example.com/post-when-file-uploaded" - ) - webhook_url_layout = QtWidgets.QHBoxLayout() - webhook_url_layout.addWidget(self.webhook_url_checkbox) - webhook_url_layout.addWidget(self.webhook_url_lineedit) - if webhook_url is not None and webhook_url != "": - self.webhook_url_checkbox.setCheckState(QtCore.Qt.Checked) - self.webhook_url_lineedit.setText( - self.settings.get("receive", "webhook_url") - ) - self.show_webhook_url() - else: - self.webhook_url_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.hide_webhook_url() - self.mode_settings_widget.mode_specific_layout.addLayout(webhook_url_layout) - - # Set title placeholder - self.mode_settings_widget.title_lineedit.setPlaceholderText( - strings._("gui_tab_name_receive") - ) - - # Server status - self.server_status.set_mode("receive") - self.server_status.server_started_finished.connect(self.update_primary_action) - self.server_status.server_stopped.connect(self.update_primary_action) - self.server_status.server_canceled.connect(self.update_primary_action) - - # Tell server_status about web, then update - self.server_status.web = self.web - self.server_status.update() - - # Upload history - self.history = History( - self.common, - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path("images/receive_icon_transparent.png") - ) - ), - strings._("gui_receive_mode_no_files"), - strings._("gui_all_modes_history"), - ) - self.history.hide() - - # Toggle history - self.toggle_history = ToggleHistory( - self.common, - self, - self.history, - QtGui.QIcon(GuiCommon.get_resource_path("images/receive_icon_toggle.png")), - QtGui.QIcon( - GuiCommon.get_resource_path("images/receive_icon_toggle_selected.png") - ), - ) - - # Header - header_label = QtWidgets.QLabel(strings._("gui_new_tab_receive_button")) - header_label.setStyleSheet(self.common.gui.css["mode_header_label"]) - - # Receive mode warning - receive_warning = QtWidgets.QLabel(strings._("gui_receive_mode_warning")) - receive_warning.setMinimumHeight(80) - receive_warning.setWordWrap(True) - - # Top bar - top_bar_layout = QtWidgets.QHBoxLayout() - top_bar_layout.addStretch() - top_bar_layout.addWidget(self.toggle_history) - - # Main layout - self.main_layout = QtWidgets.QVBoxLayout() - self.main_layout.addWidget(header_label) - self.main_layout.addWidget(receive_warning) - self.main_layout.addWidget(self.primary_action, stretch=1) - self.main_layout.addWidget(self.server_status) - - # Row layout - content_row = QtWidgets.QHBoxLayout() - content_row.addLayout(self.main_layout, stretch=1) - content_row.addWidget(self.image) - row_layout = QtWidgets.QVBoxLayout() - row_layout.addLayout(top_bar_layout) - row_layout.addLayout(content_row, stretch=1) - - # Column layout - self.column_layout = QtWidgets.QHBoxLayout() - self.column_layout.addLayout(row_layout) - self.column_layout.addWidget(self.history, stretch=1) - - # Content layout - self.content_layout.addLayout(self.column_layout) - - def get_type(self): - """ - Returns the type of mode as a string (e.g. "share", "receive", etc.) - """ - return "receive" - - def data_dir_button_clicked(self): - """ - Browse for a new OnionShare data directory, and save to tab settings - """ - data_dir = self.data_dir_lineedit.text() - selected_dir = QtWidgets.QFileDialog.getExistingDirectory( - self, strings._("mode_settings_receive_data_dir_label"), data_dir - ) - - if selected_dir: - # If we're running inside a flatpak package, the data dir must be inside ~/OnionShare - if self.common.gui.is_flatpak: - if not selected_dir.startswith(os.path.expanduser("~/OnionShare")): - Alert(self.common, strings._("gui_receive_flatpak_data_dir")) - return - - self.common.log( - "ReceiveMode", - "data_dir_button_clicked", - f"selected dir: {selected_dir}", - ) - self.data_dir_lineedit.setText(selected_dir) - self.settings.set("receive", "data_dir", selected_dir) - - def disable_text_checkbox_clicked(self): - self.settings.set( - "receive", "disable_text", self.disable_text_checkbox.isChecked() - ) - - def disable_files_checkbox_clicked(self): - self.settings.set( - "receive", "disable_files", self.disable_files_checkbox.isChecked() - ) - - def webhook_url_checkbox_clicked(self): - if self.webhook_url_checkbox.isChecked(): - if self.settings.get("receive", "webhook_url"): - self.webhook_url_lineedit.setText( - self.settings.get("receive", "webhook_url") - ) - self.show_webhook_url() - else: - self.settings.set("receive", "webhook_url", None) - self.hide_webhook_url() - - def webhook_url_editing_finished(self): - self.settings.set("receive", "webhook_url", self.webhook_url_lineedit.text()) - - def hide_webhook_url(self): - self.webhook_url_lineedit.hide() - - def show_webhook_url(self): - self.webhook_url_lineedit.show() - - def get_stop_server_autostop_timer_text(self): - """ - Return the string to put on the stop server button, if there's an auto-stop timer - """ - return strings._("gui_receive_stop_server_autostop_timer") - - def autostop_timer_finished_should_stop_server(self): - """ - 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.cur_history_id == 0 - or not self.web.receive_mode.uploads_in_progress - ): - self.server_status.stop_server() - 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_autostop_timer_waiting") - ) - self.web.receive_mode.can_upload = False - return False - - def start_server_custom(self): - """ - Starting the server. - """ - # Reset web counters - self.web.receive_mode.cur_history_id = 0 - - # Hide and reset the uploads if we have previously shared - self.reset_info_counters() - - # Set proxies for webhook URL - if self.common.gui.local_only: - self.web.proxies = None - else: - (socks_address, socks_port) = self.common.gui.onion.get_tor_socks_port() - self.web.proxies = { - "http": f"socks5h://{socks_address}:{socks_port}", - "https": f"socks5h://{socks_address}:{socks_port}", - } - - def start_server_step2_custom(self): - """ - Step 2 in starting the server. - """ - # Continue - self.starting_server_step3.emit() - self.start_server_finished.emit() - - def handle_tor_broke_custom(self): - """ - Connection to Tor broke. - """ - self.primary_action.hide() - - def handle_request_load(self, event): - """ - Handle REQUEST_LOAD event. - """ - self.system_tray.showMessage( - strings._("systray_page_loaded_title"), - strings._("systray_page_loaded_message"), - ) - - def handle_request_started(self, event): - """ - Handle REQUEST_STARTED event. - """ - item = ReceiveHistoryItem( - self.common, - event["data"]["id"], - event["data"]["content_length"], - ) - - self.history.add(event["data"]["id"], item) - self.toggle_history.update_indicator(True) - self.history.in_progress_count += 1 - self.history.update_in_progress() - - self.system_tray.showMessage( - strings._("systray_receive_started_title"), - strings._("systray_receive_started_message"), - ) - - def handle_request_progress(self, event): - """ - Handle REQUEST_PROGRESS event. - """ - self.history.update( - event["data"]["id"], - {"action": "progress", "progress": event["data"]["progress"]}, - ) - - def handle_request_upload_includes_message(self, event): - """ - Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event. - """ - self.history.includes_message(event["data"]["id"], event["data"]["filename"]) - - def handle_request_upload_file_renamed(self, event): - """ - Handle REQUEST_UPLOAD_FILE_RENAMED event. - """ - self.history.update( - event["data"]["id"], - { - "action": "rename", - "old_filename": event["data"]["old_filename"], - "new_filename": event["data"]["new_filename"], - }, - ) - - def handle_request_upload_set_dir(self, event): - """ - Handle REQUEST_UPLOAD_SET_DIR event. - """ - self.history.update( - event["data"]["id"], - { - "action": "set_dir", - "filename": event["data"]["filename"], - "dir": event["data"]["dir"], - }, - ) - - def handle_request_upload_finished(self, event): - """ - Handle REQUEST_UPLOAD_FINISHED event. - """ - self.history.update(event["data"]["id"], {"action": "finished"}) - self.history.completed_count += 1 - self.history.in_progress_count -= 1 - self.history.update_completed() - self.history.update_in_progress() - - def handle_request_upload_canceled(self, event): - """ - Handle REQUEST_UPLOAD_CANCELED event. - """ - self.history.update(event["data"]["id"], {"action": "canceled"}) - self.history.in_progress_count -= 1 - self.history.update_in_progress() - - def on_reload_settings(self): - """ - We should be ok to re-enable the 'Start Receive Mode' button now. - """ - self.primary_action.show() - - def reset_info_counters(self): - """ - Set the info counters back to zero. - """ - self.history.reset() - self.toggle_history.indicator_count = 0 - self.toggle_history.update_indicator() - - def update_primary_action(self): - self.common.log("ReceiveMode", "update_primary_action") diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py deleted file mode 100644 index ed7f6912..00000000 --- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py +++ /dev/null @@ -1,478 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.common import Common -from onionshare_cli.web import Web - -from .threads import CompressThread -from .. import Mode -from ..file_selection import FileSelection -from ..history import History, ToggleHistory, ShareHistoryItem -from .... import strings -from ....widgets import MinimumSizeWidget -from ....gui_common import GuiCommon - - -class ShareMode(Mode): - """ - Parts of the main window UI for sharing files. - """ - - def init(self): - """ - Custom initialization for ReceiveMode. - """ - # Threads start out as None - self.compress_thread = None - - # Create the Web object - self.web = Web(self.common, True, self.settings, "share") - - # Settings - self.autostop_sharing_checkbox = QtWidgets.QCheckBox() - self.autostop_sharing_checkbox.clicked.connect( - self.autostop_sharing_checkbox_clicked - ) - self.autostop_sharing_checkbox.setText( - strings._("mode_settings_share_autostop_sharing_checkbox") - ) - if self.settings.get("share", "autostop_sharing"): - self.autostop_sharing_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.autostop_sharing_checkbox.setCheckState(QtCore.Qt.Unchecked) - - self.mode_settings_widget.mode_specific_layout.addWidget( - self.autostop_sharing_checkbox - ) - - # File selection - self.file_selection = FileSelection( - self.common, - "images/{}_mode_share.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_share_button"), - self, - ) - if self.filenames: - for filename in self.filenames: - self.file_selection.file_list.add_file(filename) - - # Set title placeholder - self.mode_settings_widget.title_lineedit.setPlaceholderText( - strings._("gui_tab_name_share") - ) - - # Server status - self.server_status.set_mode("share", self.file_selection) - self.server_status.server_started.connect(self.file_selection.server_started) - self.server_status.server_stopped.connect(self.file_selection.server_stopped) - self.server_status.server_stopped.connect(self.update_primary_action) - self.server_status.server_canceled.connect(self.file_selection.server_stopped) - self.server_status.server_canceled.connect(self.update_primary_action) - self.file_selection.file_list.files_updated.connect(self.server_status.update) - self.file_selection.file_list.files_updated.connect(self.update_primary_action) - # Tell server_status about web, then update - self.server_status.web = self.web - self.server_status.update() - - # Filesize warning - self.filesize_warning = QtWidgets.QLabel() - self.filesize_warning.setWordWrap(True) - self.filesize_warning.setStyleSheet( - self.common.gui.css["share_filesize_warning"] - ) - self.filesize_warning.hide() - - # Download history - self.history = History( - self.common, - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path("images/share_icon_transparent.png") - ) - ), - strings._("gui_share_mode_no_files"), - strings._("gui_all_modes_history"), - ) - self.history.hide() - - # Info label - self.info_label = QtWidgets.QLabel() - self.info_label.hide() - - # Delete all files button - self.remove_all_button = QtWidgets.QPushButton( - strings._("gui_file_selection_remove_all") - ) - self.remove_all_button.setFlat(True) - self.remove_all_button.setStyleSheet( - self.common.gui.css["share_delete_all_files_button"] - ) - self.remove_all_button.clicked.connect(self.delete_all) - self.remove_all_button.hide() - - # Toggle history - self.toggle_history = ToggleHistory( - self.common, - self, - self.history, - QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")), - QtGui.QIcon( - GuiCommon.get_resource_path("images/share_icon_toggle_selected.png") - ), - ) - - # Top bar - top_bar_layout = QtWidgets.QHBoxLayout() - top_bar_layout.addWidget(self.info_label) - top_bar_layout.addStretch() - top_bar_layout.addWidget(self.remove_all_button) - top_bar_layout.addWidget(self.toggle_history) - - # Primary action layout - self.primary_action_layout.addWidget(self.filesize_warning) - self.primary_action.hide() - self.update_primary_action() - - # Status bar, zip progress bar - self._zip_progress_bar = None - - # Main layout - self.main_layout = QtWidgets.QVBoxLayout() - self.main_layout.addLayout(top_bar_layout) - self.main_layout.addLayout(self.file_selection) - self.main_layout.addWidget(self.primary_action, stretch=1) - self.main_layout.addWidget(self.server_status) - self.main_layout.addWidget(MinimumSizeWidget(700, 0)) - - # Column layout - self.column_layout = QtWidgets.QHBoxLayout() - self.column_layout.addLayout(self.main_layout) - self.column_layout.addWidget(self.history, stretch=1) - - # Content layout - self.content_layout.addLayout(self.column_layout) - - # Always start with focus on file selection - self.file_selection.setFocus() - - def get_type(self): - """ - Returns the type of mode as a string (e.g. "share", "receive", etc.) - """ - return "share" - - def autostop_sharing_checkbox_clicked(self): - """ - Save autostop sharing setting to the tab settings - """ - self.settings.set( - "share", "autostop_sharing", self.autostop_sharing_checkbox.isChecked() - ) - - def get_stop_server_autostop_timer_text(self): - """ - Return the string to put on the stop server button, if there's an auto-stop timer - """ - return strings._("gui_share_stop_server_autostop_timer") - - def autostop_timer_finished_should_stop_server(self): - """ - 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.history.in_progress_count == 0 or self.web.done: - self.server_status.stop_server() - 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_autostop_timer_waiting") - ) - return False - - def start_server_custom(self): - """ - Starting the server. - """ - # Reset web counters - self.web.share_mode.cur_history_id = 0 - - # Hide and reset the downloads if we have previously shared - self.reset_info_counters() - - self.remove_all_button.hide() - - def start_server_step2_custom(self): - """ - Step 2 in starting the server. Zipping up files. - """ - # Add progress bar to the status bar, indicating the compressing of files. - self._zip_progress_bar = ZipProgressBar(self.common, 0) - self.filenames = self.file_selection.get_filenames() - - self._zip_progress_bar.total_files_size = ShareMode._compute_total_size( - self.filenames - ) - self.status_bar.insertWidget(0, self._zip_progress_bar) - - # prepare the files for sending in a new thread - self.compress_thread = CompressThread(self) - self.compress_thread.success.connect(self.starting_server_step3.emit) - self.compress_thread.success.connect(self.start_server_finished.emit) - self.compress_thread.error.connect(self.starting_server_error.emit) - self.server_status.server_canceled.connect(self.compress_thread.cancel) - self.compress_thread.start() - - def start_server_step3_custom(self): - """ - Step 3 in starting the server. Remove zip progress bar, and display large filesize - warning, if applicable. - """ - # Remove zip progress bar - if self._zip_progress_bar is not None: - self.status_bar.removeWidget(self._zip_progress_bar) - self._zip_progress_bar = None - - # Warn about sending large files over Tor - if self.web.share_mode.download_filesize >= 157286400: # 150mb - self.filesize_warning.setText(strings._("large_filesize")) - self.filesize_warning.show() - - def start_server_error_custom(self): - """ - Start server error. - """ - if self._zip_progress_bar is not None: - self.status_bar.removeWidget(self._zip_progress_bar) - self._zip_progress_bar = None - - def stop_server_custom(self): - """ - Stop server. - """ - # Remove the progress bar - if self._zip_progress_bar is not None: - self.status_bar.removeWidget(self._zip_progress_bar) - self._zip_progress_bar = None - - self.filesize_warning.hide() - self.history.in_progress_count = 0 - self.history.completed_count = 0 - self.history.update_in_progress() - self.file_selection.file_list.adjustSize() - - self.remove_all_button.show() - - def cancel_server_custom(self): - """ - Stop the compression thread on cancel - """ - if self.compress_thread: - self.common.log("ShareMode", "cancel_server: quitting compress thread") - self.compress_thread.quit() - - def handle_tor_broke_custom(self): - """ - Connection to Tor broke. - """ - self.primary_action.hide() - - def handle_request_started(self, event): - """ - Handle REQUEST_STARTED event. - """ - if event["data"]["use_gzip"]: - filesize = self.web.share_mode.gzip_filesize - else: - filesize = self.web.share_mode.download_filesize - - item = ShareHistoryItem(self.common, event["data"]["id"], filesize) - self.history.add(event["data"]["id"], item) - self.toggle_history.update_indicator(True) - self.history.in_progress_count += 1 - self.history.update_in_progress() - - self.system_tray.showMessage( - strings._("systray_share_started_title"), - strings._("systray_share_started_message"), - ) - - def handle_request_progress(self, event): - """ - Handle REQUEST_PROGRESS event. - """ - self.history.update(event["data"]["id"], event["data"]["bytes"]) - - # Is the download complete? - if event["data"]["bytes"] == self.web.share_mode.filesize: - self.system_tray.showMessage( - strings._("systray_share_completed_title"), - strings._("systray_share_completed_message"), - ) - - # Update completed and in progress labels - self.history.completed_count += 1 - self.history.in_progress_count -= 1 - self.history.update_completed() - self.history.update_in_progress() - - # Close on finish? - if self.settings.get("share", "autostop_sharing"): - self.server_status.stop_server() - self.status_bar.clearMessage() - self.server_status_label.setText(strings._("closing_automatically")) - else: - if self.server_status.status == self.server_status.STATUS_STOPPED: - self.history.cancel(event["data"]["id"]) - self.history.in_progress_count = 0 - self.history.update_in_progress() - - def handle_request_canceled(self, event): - """ - Handle REQUEST_CANCELED event. - """ - self.history.cancel(event["data"]["id"]) - - # Update in progress count - self.history.in_progress_count -= 1 - self.history.update_in_progress() - self.system_tray.showMessage( - strings._("systray_share_canceled_title"), - strings._("systray_share_canceled_message"), - ) - - def on_reload_settings(self): - """ - If there were some files listed for sharing, we should be ok to re-enable - the 'Start Sharing' button now. - """ - if self.server_status.file_selection.get_num_files() > 0: - self.primary_action.show() - self.info_label.show() - self.remove_all_button.show() - - def update_primary_action(self): - self.common.log("ShareMode", "update_primary_action") - - # Show or hide primary action layout - file_count = self.file_selection.file_list.count() - if file_count > 0: - self.primary_action.show() - self.info_label.show() - self.remove_all_button.show() - - # Update the file count in the info label - total_size_bytes = 0 - for index in range(self.file_selection.file_list.count()): - item = self.file_selection.file_list.item(index) - total_size_bytes += item.size_bytes - total_size_readable = self.common.human_readable_filesize(total_size_bytes) - - if file_count > 1: - self.info_label.setText( - strings._("gui_file_info").format(file_count, total_size_readable) - ) - else: - self.info_label.setText( - strings._("gui_file_info_single").format( - file_count, total_size_readable - ) - ) - - else: - self.primary_action.hide() - self.info_label.hide() - self.remove_all_button.hide() - - def reset_info_counters(self): - """ - Set the info counters back to zero. - """ - self.history.reset() - self.toggle_history.indicator_count = 0 - self.toggle_history.update_indicator() - - def delete_all(self): - """ - Delete All button clicked - """ - self.file_selection.file_list.clear() - self.file_selection.file_list.files_updated.emit() - - self.file_selection.file_list.setCurrentItem(None) - - @staticmethod - def _compute_total_size(filenames): - total_size = 0 - for filename in filenames: - if os.path.isfile(filename): - total_size += os.path.getsize(filename) - if os.path.isdir(filename): - total_size += Common.dir_size(filename) - return total_size - - -class ZipProgressBar(QtWidgets.QProgressBar): - update_processed_size_signal = QtCore.Signal(int) - - def __init__(self, common, total_files_size): - super(ZipProgressBar, self).__init__() - self.common = common - - self.setMaximumHeight(20) - self.setMinimumWidth(200) - self.setValue(0) - self.setFormat(strings._("zip_progress_bar_format")) - self.setStyleSheet(self.common.gui.css["share_zip_progess_bar"]) - - self._total_files_size = total_files_size - self._processed_size = 0 - - self.update_processed_size_signal.connect(self.update_processed_size) - - @property - def total_files_size(self): - return self._total_files_size - - @total_files_size.setter - def total_files_size(self, val): - self._total_files_size = val - - @property - def processed_size(self): - return self._processed_size - - @processed_size.setter - def processed_size(self, val): - self.update_processed_size(val) - - def update_processed_size(self, val): - self._processed_size = val - - if self.processed_size < self.total_files_size: - self.setValue(int((self.processed_size * 100) / self.total_files_size)) - elif self.total_files_size != 0: - self.setValue(100) - else: - self.setValue(0) diff --git a/desktop/src/onionshare/tab/mode/share_mode/threads.py b/desktop/src/onionshare/tab/mode/share_mode/threads.py deleted file mode 100644 index 839d30ea..00000000 --- a/desktop/src/onionshare/tab/mode/share_mode/threads.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore - - -class CompressThread(QtCore.QThread): - """ - Compresses files to be shared - """ - - success = QtCore.Signal() - error = QtCore.Signal(str) - - def __init__(self, mode): - super(CompressThread, self).__init__() - self.mode = mode - self.mode.common.log("CompressThread", "__init__") - - # prepare files to share - def set_processed_size(self, x): - if self.mode._zip_progress_bar is not None: - self.mode._zip_progress_bar.update_processed_size_signal.emit(x) - - def run(self): - self.mode.common.log("CompressThread", "run") - - try: - self.mode.web.share_mode.set_file_info( - self.mode.filenames, processed_size_callback=self.set_processed_size - ) - self.success.emit() - except OSError as e: - self.error.emit(e.strerror) - - def cancel(self): - self.mode.common.log("CompressThread", "cancel") - - # Let the Web and ZipWriter objects know that we're canceling compression early - self.mode.web.cancel_compression = True - try: - self.mode.web.zip_writer.cancel_compression = True - except AttributeError: - # we never made it as far as creating a ZipWriter object - pass diff --git a/desktop/src/onionshare/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py deleted file mode 100644 index 0acbc1a2..00000000 --- a/desktop/src/onionshare/tab/mode/website_mode/__init__.py +++ /dev/null @@ -1,388 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import os - -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.common import Common -from onionshare_cli.web import Web - -from .. import Mode -from ..file_selection import FileSelection -from ..history import History, ToggleHistory -from .... import strings -from ....widgets import MinimumSizeWidget -from ....gui_common import GuiCommon - - -class WebsiteMode(Mode): - """ - Parts of the main window UI for sharing files. - """ - - success = QtCore.Signal() - error = QtCore.Signal(str) - - def init(self): - """ - Custom initialization for ReceiveMode. - """ - # Create the Web object - self.web = Web(self.common, True, self.settings, "website") - - # Settings - # Disable CSP option - self.disable_csp_checkbox = QtWidgets.QCheckBox() - self.disable_csp_checkbox.clicked.connect(self.disable_csp_checkbox_clicked) - self.disable_csp_checkbox.setText( - strings._("mode_settings_website_disable_csp_checkbox") - ) - if self.settings.get("website", "disable_csp"): - self.disable_csp_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.disable_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) - - self.mode_settings_widget.mode_specific_layout.addWidget( - self.disable_csp_checkbox - ) - - # Custom CSP option - self.custom_csp_checkbox = QtWidgets.QCheckBox() - self.custom_csp_checkbox.clicked.connect(self.custom_csp_checkbox_clicked) - self.custom_csp_checkbox.setText(strings._("mode_settings_website_custom_csp_checkbox")) - if self.settings.get("website", "custom_csp") and not self.settings.get("website", "disable_csp"): - self.custom_csp_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.custom_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.custom_csp = QtWidgets.QLineEdit() - self.custom_csp.setPlaceholderText( - "default-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; img-src 'self' data:;" - ) - self.custom_csp.editingFinished.connect(self.custom_csp_editing_finished) - - custom_csp_layout = QtWidgets.QHBoxLayout() - custom_csp_layout.setContentsMargins(0, 0, 0, 0) - custom_csp_layout.addWidget(self.custom_csp_checkbox) - custom_csp_layout.addWidget(self.custom_csp) - self.mode_settings_widget.mode_specific_layout.addLayout(custom_csp_layout) - - # File selection - self.file_selection = FileSelection( - self.common, - "images/{}_mode_website.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_website_button"), - self, - ) - if self.filenames: - for filename in self.filenames: - self.file_selection.file_list.add_file(filename) - - # Set title placeholder - self.mode_settings_widget.title_lineedit.setPlaceholderText( - strings._("gui_tab_name_website") - ) - - # Server status - self.server_status.set_mode("website", self.file_selection) - self.server_status.server_started.connect(self.file_selection.server_started) - self.server_status.server_stopped.connect(self.file_selection.server_stopped) - self.server_status.server_stopped.connect(self.update_primary_action) - self.server_status.server_canceled.connect(self.file_selection.server_stopped) - self.server_status.server_canceled.connect(self.update_primary_action) - self.file_selection.file_list.files_updated.connect(self.server_status.update) - self.file_selection.file_list.files_updated.connect(self.update_primary_action) - # Tell server_status about web, then update - self.server_status.web = self.web - self.server_status.update() - - # Filesize warning - self.filesize_warning = QtWidgets.QLabel() - self.filesize_warning.setWordWrap(True) - self.filesize_warning.setStyleSheet( - self.common.gui.css["share_filesize_warning"] - ) - self.filesize_warning.hide() - - # Download history - self.history = History( - self.common, - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path("images/share_icon_transparent.png") - ) - ), - strings._("gui_website_mode_no_files"), - strings._("gui_all_modes_history"), - "website", - ) - self.history.in_progress_label.hide() - self.history.completed_label.hide() - self.history.hide() - - # Info label - self.info_label = QtWidgets.QLabel() - self.info_label.hide() - - # Delete all files button - self.remove_all_button = QtWidgets.QPushButton( - strings._("gui_file_selection_remove_all") - ) - self.remove_all_button.setFlat(True) - self.remove_all_button.setStyleSheet( - self.common.gui.css["share_delete_all_files_button"] - ) - self.remove_all_button.clicked.connect(self.delete_all) - self.remove_all_button.hide() - - # Toggle history - self.toggle_history = ToggleHistory( - self.common, - self, - self.history, - QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")), - QtGui.QIcon( - GuiCommon.get_resource_path("images/share_icon_toggle_selected.png") - ), - ) - - # Top bar - top_bar_layout = QtWidgets.QHBoxLayout() - top_bar_layout.addWidget(self.info_label) - top_bar_layout.addStretch() - top_bar_layout.addWidget(self.remove_all_button) - top_bar_layout.addWidget(self.toggle_history) - - # Primary action layout - self.primary_action_layout.addWidget(self.filesize_warning) - self.primary_action.hide() - self.update_primary_action() - - # Main layout - self.main_layout = QtWidgets.QVBoxLayout() - self.main_layout.addLayout(top_bar_layout) - self.main_layout.addLayout(self.file_selection) - self.main_layout.addWidget(self.primary_action, stretch=1) - self.main_layout.addWidget(self.server_status) - self.main_layout.addWidget(MinimumSizeWidget(700, 0)) - - # Column layout - self.column_layout = QtWidgets.QHBoxLayout() - self.column_layout.addLayout(self.main_layout) - self.column_layout.addWidget(self.history, stretch=1) - - # Content layout - self.content_layout.addLayout(self.column_layout) - - # Always start with focus on file selection - self.file_selection.setFocus() - - def get_type(self): - """ - Returns the type of mode as a string (e.g. "share", "receive", etc.) - """ - return "website" - - def disable_csp_checkbox_clicked(self): - """ - Save disable CSP setting to the tab settings. Uncheck 'custom CSP' - setting if disabling CSP altogether. - """ - self.settings.set( - "website", "disable_csp", self.disable_csp_checkbox.isChecked() - ) - if self.disable_csp_checkbox.isChecked(): - self.custom_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.custom_csp_checkbox.setEnabled(False) - else: - self.custom_csp_checkbox.setEnabled(True) - - def custom_csp_checkbox_clicked(self): - """ - Uncheck 'disable CSP' setting if custom CSP is used. - """ - if self.custom_csp_checkbox.isChecked(): - self.disable_csp_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.disable_csp_checkbox.setEnabled(False) - self.settings.set( - "website", "custom_csp", self.custom_csp - ) - else: - self.disable_csp_checkbox.setEnabled(True) - self.custom_csp.setText("") - self.settings.set( - "website", "custom_csp", None - ) - - def custom_csp_editing_finished(self): - if self.custom_csp.text().strip() == "": - self.custom_csp.setText("") - self.settings.set("website", "custom_csp", None) - else: - custom_csp = self.custom_csp.text() - self.settings.set("website", "custom_csp", custom_csp) - - def get_stop_server_autostop_timer_text(self): - """ - Return the string to put on the stop server button, if there's an auto-stop timer - """ - return strings._("gui_share_stop_server_autostop_timer") - - def autostop_timer_finished_should_stop_server(self): - """ - The auto-stop timer expired, should we stop the server? Returns a bool - """ - - self.server_status.stop_server() - self.server_status_label.setText(strings._("close_on_autostop_timer")) - return True - - def start_server_custom(self): - """ - Starting the server. - """ - # Reset web counters - self.web.website_mode.visit_count = 0 - - # Hide and reset the downloads if we have previously shared - self.reset_info_counters() - - self.remove_all_button.hide() - - def start_server_step2_custom(self): - """ - Step 2 in starting the server. Zipping up files. - """ - self.filenames = [] - for index in range(self.file_selection.file_list.count()): - self.filenames.append(self.file_selection.file_list.item(index).filename) - - # Continue - self.starting_server_step3.emit() - self.start_server_finished.emit() - - def start_server_step3_custom(self): - """ - Step 3 in starting the server. Display large filesize - warning, if applicable. - """ - self.web.website_mode.set_file_info(self.filenames) - self.success.emit() - - def start_server_error_custom(self): - """ - Start server error. - """ - if self._zip_progress_bar is not None: - self.status_bar.removeWidget(self._zip_progress_bar) - self._zip_progress_bar = None - - def stop_server_custom(self): - """ - Stop server. - """ - - self.filesize_warning.hide() - self.history.completed_count = 0 - self.file_selection.file_list.adjustSize() - - self.remove_all_button.show() - - def cancel_server_custom(self): - """ - Log that the server has been cancelled - """ - self.common.log("WebsiteMode", "cancel_server") - - def handle_tor_broke_custom(self): - """ - Connection to Tor broke. - """ - self.primary_action.hide() - - def on_reload_settings(self): - """ - If there were some files listed for sharing, we should be ok to re-enable - the 'Start Sharing' button now. - """ - if self.server_status.file_selection.get_num_files() > 0: - self.primary_action.show() - self.info_label.show() - self.remove_all_button.show() - - def update_primary_action(self): - self.common.log("WebsiteMode", "update_primary_action") - - # Show or hide primary action layout - file_count = self.file_selection.file_list.count() - if file_count > 0: - self.primary_action.show() - self.info_label.show() - self.remove_all_button.show() - - # Update the file count in the info label - total_size_bytes = 0 - for index in range(self.file_selection.file_list.count()): - item = self.file_selection.file_list.item(index) - total_size_bytes += item.size_bytes - total_size_readable = self.common.human_readable_filesize(total_size_bytes) - - if file_count > 1: - self.info_label.setText( - strings._("gui_file_info").format(file_count, total_size_readable) - ) - else: - self.info_label.setText( - strings._("gui_file_info_single").format( - file_count, total_size_readable - ) - ) - - else: - self.primary_action.hide() - self.info_label.hide() - self.remove_all_button.hide() - - def reset_info_counters(self): - """ - Set the info counters back to zero. - """ - self.history.reset() - self.toggle_history.indicator_count = 0 - self.toggle_history.update_indicator() - - def delete_all(self): - """ - Delete All button clicked - """ - self.file_selection.file_list.clear() - self.file_selection.file_list.files_updated.emit() - - self.file_selection.file_list.setCurrentItem(None) - - @staticmethod - def _compute_total_size(filenames): - total_size = 0 - for filename in filenames: - if os.path.isfile(filename): - total_size += os.path.getsize(filename) - if os.path.isdir(filename): - total_size += Common.dir_size(filename) - return total_size diff --git a/desktop/src/onionshare/tab/server_status.py b/desktop/src/onionshare/tab/server_status.py deleted file mode 100644 index 115acfd5..00000000 --- a/desktop/src/onionshare/tab/server_status.py +++ /dev/null @@ -1,598 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" -import textwrap -from PySide2 import QtCore, QtWidgets, QtGui -from PySide2.QtCore import Qt - -from .. import strings -from ..widgets import Alert -from ..widgets import QRCodeDialog -from ..gui_common import GuiCommon - - -class ServerStatus(QtWidgets.QWidget): - """ - The server status chunk of the GUI. - """ - - server_started = QtCore.Signal() - server_started_finished = QtCore.Signal() - server_stopped = QtCore.Signal() - server_canceled = QtCore.Signal() - button_clicked = QtCore.Signal() - url_copied = QtCore.Signal() - client_auth_copied = QtCore.Signal() - - STATUS_STOPPED = 0 - STATUS_WORKING = 1 - STATUS_STARTED = 2 - - def __init__( - self, - common, - qtapp, - app, - mode_settings, - mode_settings_widget, - file_selection=None, - local_only=False, - ): - super(ServerStatus, self).__init__() - - self.common = common - - self.status = self.STATUS_STOPPED - self.mode = None # Gets set in self.set_mode - - self.qtapp = qtapp - self.app = app - self.settings = mode_settings - self.mode_settings_widget = mode_settings_widget - - self.web = None - self.autostart_timer_datetime = None - self.local_only = local_only - - self.resizeEvent(None) - - # Server layout - self.server_button = QtWidgets.QPushButton() - self.server_button.clicked.connect(self.server_button_clicked) - - # URL layout - url_font = QtGui.QFontDatabase.systemFont(QtGui.QFontDatabase.FixedFont) - self.url_description = QtWidgets.QLabel() - self.url_description.setWordWrap(True) - self.url_description.setMinimumHeight(50) - - # URL sharing instructions, above the URL and Copy Address/QR Code buttons - self.url_instructions = QtWidgets.QLabel() - self.url_instructions.setWordWrap(True) - - # The URL label itself - self.url = QtWidgets.QLabel() - self.url.setFont(url_font) - self.url.setWordWrap(True) - self.url.setMinimumSize(self.url.sizeHint()) - self.url.setStyleSheet(self.common.gui.css["server_status_url"]) - self.url.setTextInteractionFlags( - Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard - ) - - # Copy Onion Address button - self.copy_url_button = QtWidgets.QPushButton(strings._("gui_copy_url")) - self.copy_url_button.setStyleSheet( - self.common.gui.css["server_status_url_buttons"] - ) - self.copy_url_button.clicked.connect(self.copy_url) - - # Onion Address QR code button - self.show_url_qr_code_button = QtWidgets.QPushButton( - strings._("gui_show_qr_code") - ) - self.show_url_qr_code_button.hide() - self.show_url_qr_code_button.clicked.connect( - self.show_url_qr_code_button_clicked - ) - self.show_url_qr_code_button.setStyleSheet( - self.common.gui.css["server_status_url_buttons"] - ) - - # Client Auth sharing instructions, above the - # Copy Private Key/QR Code buttons - self.client_auth_instructions = QtWidgets.QLabel() - self.client_auth_instructions.setWordWrap(True) - self.client_auth_instructions.setText(strings._("gui_client_auth_instructions")) - - # The private key itself - self.private_key = QtWidgets.QLabel() - self.private_key.setFont(url_font) - self.private_key.setWordWrap(True) - self.private_key.setMinimumSize(self.private_key.sizeHint()) - self.private_key.setStyleSheet(self.common.gui.css["server_status_url"]) - self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) - self.private_key_hidden = True - - # Copy ClientAuth button - self.copy_client_auth_button = QtWidgets.QPushButton( - strings._("gui_copy_client_auth") - ) - self.copy_client_auth_button.setStyleSheet( - self.common.gui.css["server_status_url_buttons"] - ) - self.copy_client_auth_button.clicked.connect(self.copy_client_auth) - - # ClientAuth QR code button - self.show_client_auth_qr_code_button = QtWidgets.QPushButton( - strings._("gui_show_qr_code") - ) - self.show_client_auth_qr_code_button.hide() - self.show_client_auth_qr_code_button.clicked.connect( - self.show_client_auth_qr_code_button_clicked - ) - self.show_client_auth_qr_code_button.setStyleSheet( - self.common.gui.css["server_status_url_buttons"] - ) - - # ClientAuth reveal/hide toggle button - self.client_auth_toggle_button = QtWidgets.QPushButton(strings._("gui_reveal")) - self.client_auth_toggle_button.hide() - self.client_auth_toggle_button.clicked.connect( - self.client_auth_toggle_button_clicked - ) - self.client_auth_toggle_button.setStyleSheet( - self.common.gui.css["server_status_url_buttons"] - ) - - # URL instructions layout - url_buttons_layout = QtWidgets.QHBoxLayout() - url_buttons_layout.addWidget(self.copy_url_button) - url_buttons_layout.addWidget(self.show_url_qr_code_button) - url_buttons_layout.addStretch() - - url_layout = QtWidgets.QVBoxLayout() - url_layout.addWidget(self.url_description) - url_layout.addWidget(self.url_instructions) - url_layout.addWidget(self.url) - url_layout.addLayout(url_buttons_layout) - - # Private key instructions layout - client_auth_buttons_layout = QtWidgets.QHBoxLayout() - client_auth_buttons_layout.addWidget(self.copy_client_auth_button) - client_auth_buttons_layout.addWidget(self.show_client_auth_qr_code_button) - client_auth_buttons_layout.addWidget(self.client_auth_toggle_button) - client_auth_buttons_layout.addStretch() - - client_auth_layout = QtWidgets.QVBoxLayout() - client_auth_layout.addWidget(self.client_auth_instructions) - client_auth_layout.addWidget(self.private_key) - client_auth_layout.addLayout(client_auth_buttons_layout) - - # Add the widgets and URL/ClientAuth layouts - # to the main ServerStatus layout - button_layout = QtWidgets.QHBoxLayout() - button_layout.addWidget(self.server_button) - button_layout.addStretch() - - layout = QtWidgets.QVBoxLayout() - layout.addLayout(button_layout) - layout.addLayout(url_layout) - layout.addLayout(client_auth_layout) - self.setLayout(layout) - - def set_mode(self, share_mode, file_selection=None): - """ - The server status is in share mode. - """ - self.mode = share_mode - - if (self.mode == self.common.gui.MODE_SHARE) or ( - self.mode == self.common.gui.MODE_WEBSITE - ): - self.file_selection = file_selection - - self.update() - - def resizeEvent(self, event): - """ - When the widget is resized, try and adjust the display of a v3 onion URL. - """ - try: - # Wrap the URL label - url_length = len(self.get_url()) - if url_length > 60: - width = self.frameGeometry().width() - if width < 530: - wrapped_onion_url = textwrap.fill(self.get_url(), 46) - self.url.setText(wrapped_onion_url) - else: - self.url.setText(self.get_url()) - except Exception: - pass - - def show_url(self): - """ - Show the URL in the UI. - """ - self.url_description.show() - - info_image = GuiCommon.get_resource_path("images/info.png") - - if self.mode == self.common.gui.MODE_SHARE: - if self.settings.get("general", "public"): - self.url_description.setText( - strings._("gui_share_url_public_description").format(info_image) - ) - else: - self.url_description.setText( - strings._("gui_share_url_description").format(info_image) - ) - elif self.mode == self.common.gui.MODE_WEBSITE: - if self.settings.get("general", "public"): - self.url_description.setText( - strings._("gui_website_url_public_description").format(info_image) - ) - else: - self.url_description.setText( - strings._("gui_website_url_description").format(info_image) - ) - elif self.mode == self.common.gui.MODE_RECEIVE: - if self.settings.get("general", "public"): - self.url_description.setText( - strings._("gui_receive_url_public_description").format(info_image) - ) - else: - self.url_description.setText( - strings._("gui_receive_url_description").format(info_image) - ) - elif self.mode == self.common.gui.MODE_CHAT: - if self.settings.get("general", "public"): - self.url_description.setText( - strings._("gui_chat_url_public_description").format(info_image) - ) - else: - self.url_description.setText( - strings._("gui_chat_url_description").format(info_image) - ) - - # Show a Tool Tip explaining the lifecycle of this URL - if self.settings.get("persistent", "enabled"): - if self.mode == self.common.gui.MODE_SHARE and self.settings.get( - "share", "autostop_sharing" - ): - 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 == self.common.gui.MODE_SHARE and self.settings.get( - "share", "autostop_sharing" - ): - self.url_description.setToolTip(strings._("gui_url_label_onetime")) - else: - self.url_description.setToolTip(strings._("gui_url_label_stay_open")) - - if self.settings.get("general", "public"): - self.url_instructions.setText(strings._("gui_url_instructions_public_mode")) - else: - self.url_instructions.setText(strings._("gui_url_instructions")) - self.url_instructions.show() - self.url.setText(self.get_url()) - self.url.show() - self.copy_url_button.show() - self.show_url_qr_code_button.show() - - if self.settings.get("general", "public"): - self.client_auth_instructions.hide() - self.private_key.hide() - self.copy_client_auth_button.hide() - self.show_client_auth_qr_code_button.hide() - else: - self.client_auth_instructions.show() - if self.private_key_hidden: - self.private_key.setText("*" * len(self.app.auth_string)) - self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) - else: - self.private_key.setText(self.app.auth_string) - self.private_key.setTextInteractionFlags( - Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard - ) - self.private_key.show() - self.copy_client_auth_button.show() - self.show_client_auth_qr_code_button.show() - self.client_auth_toggle_button.show() - - def update(self): - """ - Update the GUI elements based on the current state. - """ - self.common.log("ServerStatus", "update") - # Set the URL fields - if self.status == self.STATUS_STARTED: - # The backend Onion may have saved new settings, such as the private key. - # Reload the settings before saving new ones. - self.common.settings.load() - self.show_url() - - if self.settings.get("general", "autostop_timer"): - self.server_button.setToolTip( - strings._("gui_stop_server_autostop_timer_tooltip").format( - self.mode_settings_widget.autostop_timer_widget.dateTime().toString( - "h:mm AP, MMMM dd, yyyy" - ) - ) - ) - else: - self.url_description.hide() - self.url_instructions.hide() - self.url.hide() - self.copy_url_button.hide() - self.show_url_qr_code_button.hide() - self.private_key.hide() - self.client_auth_instructions.hide() - self.copy_client_auth_button.hide() - self.show_client_auth_qr_code_button.hide() - self.client_auth_toggle_button.hide() - - self.mode_settings_widget.update_ui() - - # Button - if ( - self.mode == self.common.gui.MODE_SHARE - and self.file_selection.get_num_files() == 0 - ): - self.server_button.hide() - elif ( - self.mode == self.common.gui.MODE_WEBSITE - and self.file_selection.get_num_files() == 0 - ): - self.server_button.hide() - else: - self.server_button.show() - - if self.status == self.STATUS_STOPPED: - self.server_button.setStyleSheet( - self.common.gui.css["server_status_button_stopped"] - ) - self.server_button.setEnabled(True) - if self.mode == self.common.gui.MODE_SHARE: - self.server_button.setText(strings._("gui_share_start_server")) - elif self.mode == self.common.gui.MODE_WEBSITE: - self.server_button.setText(strings._("gui_share_start_server")) - elif self.mode == self.common.gui.MODE_CHAT: - self.server_button.setText(strings._("gui_chat_start_server")) - else: - self.server_button.setText(strings._("gui_receive_start_server")) - self.server_button.setToolTip("") - elif self.status == self.STATUS_STARTED: - self.server_button.setStyleSheet( - self.common.gui.css["server_status_button_started"] - ) - self.server_button.setEnabled(True) - if self.mode == self.common.gui.MODE_SHARE: - self.server_button.setText(strings._("gui_share_stop_server")) - elif self.mode == self.common.gui.MODE_WEBSITE: - self.server_button.setText(strings._("gui_share_stop_server")) - elif self.mode == self.common.gui.MODE_CHAT: - self.server_button.setText(strings._("gui_chat_stop_server")) - else: - self.server_button.setText(strings._("gui_receive_stop_server")) - elif self.status == self.STATUS_WORKING: - self.server_button.setStyleSheet( - self.common.gui.css["server_status_button_working"] - ) - self.server_button.setEnabled(True) - if self.settings.get("general", "autostart_timer"): - self.server_button.setToolTip( - strings._("gui_start_server_autostart_timer_tooltip").format( - self.mode_settings_widget.autostart_timer_widget.dateTime().toString( - "h:mm AP, MMMM dd, yyyy" - ) - ) - ) - else: - if self.common.platform == "Windows": - self.server_button.setText(strings._("gui_please_wait")) - else: - self.server_button.setText( - strings._("gui_please_wait_no_button") - ) - else: - self.server_button.setStyleSheet( - self.common.gui.css["server_status_button_working"] - ) - self.server_button.setEnabled(False) - self.server_button.setText(strings._("gui_please_wait_no_button")) - - def server_button_clicked(self): - """ - Toggle starting or stopping the server. - """ - if self.status == self.STATUS_STOPPED: - can_start = True - if self.settings.get("general", "autostart_timer"): - if self.local_only: - self.autostart_timer_datetime = ( - self.mode_settings_widget.autostart_timer_widget.dateTime().toPython() - ) - else: - self.autostart_timer_datetime = ( - self.mode_settings_widget.autostart_timer_widget.dateTime() - .toPython() - .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().toPython() - > self.autostart_timer_datetime - ): - can_start = False - Alert( - self.common, - strings._("gui_server_autostart_timer_expired"), - QtWidgets.QMessageBox.Warning, - ) - if self.settings.get("general", "autostop_timer"): - if self.local_only: - self.autostop_timer_datetime = ( - self.mode_settings_widget.autostop_timer_widget.dateTime().toPython() - ) - else: - # 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.mode_settings_widget.autostop_timer_widget.dateTime() - .toPython() - .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().toPython() - > self.autostop_timer_datetime - ): - can_start = False - Alert( - self.common, - strings._("gui_server_autostop_timer_expired"), - QtWidgets.QMessageBox.Warning, - ) - if self.settings.get("general", "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() - elif self.status == self.STATUS_STARTED: - self.stop_server() - elif self.status == self.STATUS_WORKING and ( - self.common.platform == "Windows" - or self.settings.get("general", "autostart_timer") - ): - self.cancel_server() - self.button_clicked.emit() - - def show_url_qr_code_button_clicked(self): - """ - Show a QR code of the onion URL. - """ - self.qr_code_dialog = QRCodeDialog( - self.common, strings._("gui_qr_label_url_title"), self.get_url() - ) - - def show_client_auth_qr_code_button_clicked(self): - """ - Show a QR code of the private key - """ - self.qr_code_dialog = QRCodeDialog( - self.common, - strings._("gui_qr_label_auth_string_title"), - self.app.auth_string, - ) - - def client_auth_toggle_button_clicked(self): - """ - ClientAuth reveal/hide toggle button clicked - """ - if self.private_key_hidden: - self.private_key_hidden = False - self.client_auth_toggle_button.setText(strings._("gui_hide")) - else: - self.private_key_hidden = True - self.client_auth_toggle_button.setText(strings._("gui_reveal")) - - self.show_url() - - def start_server(self): - """ - Start the server. - """ - self.status = self.STATUS_WORKING - self.update() - self.server_started.emit() - - def start_server_finished(self): - """ - The server has finished starting. - """ - self.status = self.STATUS_STARTED - # self.copy_url() - self.update() - self.server_started_finished.emit() - - def stop_server(self): - """ - Stop the server. - """ - self.status = self.STATUS_WORKING - self.mode_settings_widget.autostart_timer_reset() - self.mode_settings_widget.autostop_timer_reset() - self.update() - self.server_stopped.emit() - - def cancel_server(self): - """ - Cancel the server. - """ - self.common.log( - "ServerStatus", "cancel_server", "Canceling the server mid-startup" - ) - self.status = self.STATUS_WORKING - self.mode_settings_widget.autostart_timer_reset() - self.mode_settings_widget.autostop_timer_reset() - self.update() - self.server_canceled.emit() - - def stop_server_finished(self): - """ - The server has finished stopping. - """ - self.status = self.STATUS_STOPPED - self.update() - - def copy_url(self): - """ - Copy the onionshare URL to the clipboard. - """ - clipboard = self.qtapp.clipboard() - clipboard.setText(self.get_url()) - - self.url_copied.emit() - - def copy_client_auth(self): - """ - Copy the ClientAuth private key line to the clipboard. - """ - clipboard = self.qtapp.clipboard() - clipboard.setText(self.app.auth_string) - - self.client_auth_copied.emit() - - def get_url(self): - """ - Returns the OnionShare URL. - """ - url = f"http://{self.app.onion_host}" - return url diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py deleted file mode 100644 index b0aa25df..00000000 --- a/desktop/src/onionshare/tab/tab.py +++ /dev/null @@ -1,677 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import queue -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.onionshare import OnionShare -from onionshare_cli.web import Web -from onionshare_cli.mode_settings import ModeSettings - -from .mode.share_mode import ShareMode -from .mode.receive_mode import ReceiveMode -from .mode.website_mode import WebsiteMode -from .mode.chat_mode import ChatMode - -from .server_status import ServerStatus - -from .. import strings -from ..gui_common import GuiCommon -from ..widgets import Alert - - -class NewTabButton(QtWidgets.QPushButton): - def __init__(self, common, image_filename, title, text): - super(NewTabButton, self).__init__() - self.common = common - - self.setFixedSize(280, 280) - - # Image - self.image_label = QtWidgets.QLabel(parent=self) - self.image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage(GuiCommon.get_resource_path(image_filename)) - ) - ) - self.image_label.setAlignment(QtCore.Qt.AlignCenter) - self.image_label.setStyleSheet(self.common.gui.css["new_tab_button_image"]) - self.image_label.setGeometry(0, 0, self.width(), 190) - self.image_label.show() - - # Title - self.title_label = QtWidgets.QLabel(title, parent=self) - self.title_label.setWordWrap(True) - self.title_label.setAlignment(QtCore.Qt.AlignCenter) - self.title_label.setStyleSheet(self.common.gui.css["new_tab_title_text"]) - if self.title_label.sizeHint().width() >= 250: - self.title_label.setGeometry( - (self.width() - 250) / 2, self.height() - 120, 250, 60 - ) - else: - self.title_label.setGeometry( - (self.width() - 250) / 2, self.height() - 100, 250, 30 - ) - self.title_label.show() - - # Text - self.text_label = QtWidgets.QLabel(text, parent=self) - self.text_label.setAlignment(QtCore.Qt.AlignCenter) - self.text_label.setStyleSheet(self.common.gui.css["new_tab_button_text"]) - self.text_label.setGeometry( - (self.width() - 200) / 2, self.height() - 50, 200, 30 - ) - self.text_label.show() - - -class Tab(QtWidgets.QWidget): - """ - A GUI tab, you know, sort of like in a web browser - """ - - change_title = QtCore.Signal(int, str) - change_icon = QtCore.Signal(int, str) - change_persistent = QtCore.Signal(int, bool) - - def __init__( - self, - common, - tab_id, - system_tray, - status_bar, - filenames=None, - ): - super(Tab, self).__init__() - self.common = common - self.common.log("Tab", "__init__") - - self.tab_id = tab_id - self.system_tray = system_tray - self.status_bar = status_bar - self.filenames = filenames - - self.mode = None - - # Start the OnionShare app - self.app = OnionShare(common, self.common.gui.onion, self.common.gui.local_only) - - # An invisible widget, used for hiding the persistent tab icon - self.invisible_widget = QtWidgets.QWidget() - self.invisible_widget.setFixedSize(0, 0) - - # Onionshare logo - self.image_label = QtWidgets.QLabel() - self.image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path( - "images/{}_logo_text.png".format(self.common.gui.color_mode) - ) - ) - ) - ) - self.image_label.setFixedSize(180, 40) - image_layout = QtWidgets.QVBoxLayout() - image_layout.addWidget(self.image_label) - image_layout.addStretch() - self.image = QtWidgets.QWidget() - self.image.setLayout(image_layout) - - # New tab buttons - self.share_button = NewTabButton( - self.common, - "images/{}_mode_new_tab_share.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_share_button"), - strings._("gui_main_page_share_button"), - ) - self.share_button.clicked.connect(self.share_mode_clicked) - - self.receive_button = NewTabButton( - self.common, - "images/{}_mode_new_tab_receive.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_receive_button"), - strings._("gui_main_page_receive_button"), - ) - self.receive_button.clicked.connect(self.receive_mode_clicked) - - self.website_button = NewTabButton( - self.common, - "images/{}_mode_new_tab_website.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_website_button"), - strings._("gui_main_page_website_button"), - ) - self.website_button.clicked.connect(self.website_mode_clicked) - - self.chat_button = NewTabButton( - self.common, - "images/{}_mode_new_tab_chat.png".format(self.common.gui.color_mode), - strings._("gui_new_tab_chat_button"), - strings._("gui_main_page_chat_button"), - ) - self.chat_button.clicked.connect(self.chat_mode_clicked) - - new_tab_top_layout = QtWidgets.QHBoxLayout() - new_tab_top_layout.addStretch() - new_tab_top_layout.addWidget(self.share_button) - new_tab_top_layout.addWidget(self.receive_button) - new_tab_top_layout.addStretch() - - new_tab_bottom_layout = QtWidgets.QHBoxLayout() - new_tab_bottom_layout.addStretch() - new_tab_bottom_layout.addWidget(self.website_button) - new_tab_bottom_layout.addWidget(self.chat_button) - new_tab_bottom_layout.addStretch() - - new_tab_layout = QtWidgets.QVBoxLayout() - new_tab_layout.addStretch() - new_tab_layout.addLayout(new_tab_top_layout) - new_tab_layout.addLayout(new_tab_bottom_layout) - new_tab_layout.addStretch() - - new_tab_img_layout = QtWidgets.QHBoxLayout() - new_tab_img_layout.addWidget(self.image) - new_tab_img_layout.addStretch(1) - new_tab_img_layout.addLayout(new_tab_layout) - new_tab_img_layout.addStretch(2) - - self.new_tab = QtWidgets.QWidget() - self.new_tab.setLayout(new_tab_img_layout) - self.new_tab.show() - - # Layout - self.layout = QtWidgets.QVBoxLayout() - self.layout.setContentsMargins(0, 0, 0, 0) - self.layout.addWidget(self.new_tab) - self.setLayout(self.layout) - - # Create the timer - self.timer = QtCore.QTimer() - self.timer.timeout.connect(self.timer_callback) - - # Persistent image - self.persistent_image_label = QtWidgets.QLabel() - self.persistent_image_label.setPixmap( - QtGui.QPixmap.fromImage( - QtGui.QImage( - GuiCommon.get_resource_path("images/persistent_enabled.png") - ) - ) - ) - self.persistent_image_label.setFixedSize(20, 20) - - # Create the close warning dialog -- the dialog widget needs to be in the constructor - # in order to test it - self.close_dialog = QtWidgets.QMessageBox() - self.close_dialog.setWindowTitle(strings._("gui_close_tab_warning_title")) - self.close_dialog.setIcon(QtWidgets.QMessageBox.Critical) - self.close_dialog.accept_button = self.close_dialog.addButton( - strings._("gui_close_tab_warning_close"), QtWidgets.QMessageBox.AcceptRole - ) - self.close_dialog.reject_button = self.close_dialog.addButton( - strings._("gui_close_tab_warning_cancel"), QtWidgets.QMessageBox.RejectRole - ) - self.close_dialog.setDefaultButton(self.close_dialog.reject_button) - - def init(self, mode_settings=None): - if mode_settings: - # Load this tab - self.settings = mode_settings - mode = self.settings.get("persistent", "mode") - if mode == "share": - self.filenames = self.settings.get("share", "filenames") - self.share_mode_clicked() - elif mode == "receive": - self.receive_mode_clicked() - elif mode == "website": - self.filenames = self.settings.get("website", "filenames") - self.website_mode_clicked() - elif mode == "chat": - self.chat_mode_clicked() - else: - # This is a new tab - self.settings = ModeSettings(self.common) - - def share_mode_clicked(self): - self.common.log("Tab", "share_mode_clicked") - self.mode = self.common.gui.MODE_SHARE - self.new_tab.hide() - - self.share_mode = ShareMode(self) - self.share_mode.change_persistent.connect(self.change_persistent) - - self.layout.addWidget(self.share_mode) - self.share_mode.show() - - self.share_mode.init() - self.share_mode.server_status.server_started.connect( - self.update_server_status_indicator - ) - self.share_mode.server_status.server_stopped.connect( - self.update_server_status_indicator - ) - self.share_mode.start_server_finished.connect( - self.update_server_status_indicator - ) - self.share_mode.stop_server_finished.connect( - self.update_server_status_indicator - ) - self.share_mode.stop_server_finished.connect(self.stop_server_finished) - self.share_mode.start_server_finished.connect(self.clear_message) - self.share_mode.server_status.button_clicked.connect(self.clear_message) - self.share_mode.server_status.url_copied.connect(self.copy_url) - self.share_mode.server_status.client_auth_copied.connect(self.copy_client_auth) - - self.change_title.emit(self.tab_id, strings._("gui_tab_name_share")) - - self.update_server_status_indicator() - self.timer.start(500) - - def receive_mode_clicked(self): - self.common.log("Tab", "receive_mode_clicked") - self.mode = self.common.gui.MODE_RECEIVE - self.new_tab.hide() - - self.receive_mode = ReceiveMode(self) - self.receive_mode.change_persistent.connect(self.change_persistent) - - self.layout.addWidget(self.receive_mode) - self.receive_mode.show() - - self.receive_mode.init() - self.receive_mode.server_status.server_started.connect( - self.update_server_status_indicator - ) - self.receive_mode.server_status.server_stopped.connect( - self.update_server_status_indicator - ) - self.receive_mode.start_server_finished.connect( - self.update_server_status_indicator - ) - self.receive_mode.stop_server_finished.connect( - self.update_server_status_indicator - ) - self.receive_mode.stop_server_finished.connect(self.stop_server_finished) - self.receive_mode.start_server_finished.connect(self.clear_message) - self.receive_mode.server_status.button_clicked.connect(self.clear_message) - self.receive_mode.server_status.url_copied.connect(self.copy_url) - self.receive_mode.server_status.client_auth_copied.connect( - self.copy_client_auth - ) - - self.change_title.emit(self.tab_id, strings._("gui_tab_name_receive")) - - self.update_server_status_indicator() - self.timer.start(500) - - def website_mode_clicked(self): - self.common.log("Tab", "website_mode_clicked") - self.mode = self.common.gui.MODE_WEBSITE - self.new_tab.hide() - - self.website_mode = WebsiteMode(self) - self.website_mode.change_persistent.connect(self.change_persistent) - - self.layout.addWidget(self.website_mode) - self.website_mode.show() - - self.website_mode.init() - self.website_mode.server_status.server_started.connect( - self.update_server_status_indicator - ) - self.website_mode.server_status.server_stopped.connect( - self.update_server_status_indicator - ) - self.website_mode.start_server_finished.connect( - self.update_server_status_indicator - ) - self.website_mode.stop_server_finished.connect( - self.update_server_status_indicator - ) - self.website_mode.stop_server_finished.connect(self.stop_server_finished) - self.website_mode.start_server_finished.connect(self.clear_message) - self.website_mode.server_status.button_clicked.connect(self.clear_message) - self.website_mode.server_status.url_copied.connect(self.copy_url) - self.website_mode.server_status.client_auth_copied.connect( - self.copy_client_auth - ) - - self.change_title.emit(self.tab_id, strings._("gui_tab_name_website")) - - self.update_server_status_indicator() - self.timer.start(500) - - def chat_mode_clicked(self): - self.common.log("Tab", "chat_mode_clicked") - self.mode = self.common.gui.MODE_CHAT - self.new_tab.hide() - - self.chat_mode = ChatMode(self) - self.chat_mode.change_persistent.connect(self.change_persistent) - - self.layout.addWidget(self.chat_mode) - self.chat_mode.show() - - self.chat_mode.init() - self.chat_mode.server_status.server_started.connect( - self.update_server_status_indicator - ) - self.chat_mode.server_status.server_stopped.connect( - self.update_server_status_indicator - ) - self.chat_mode.start_server_finished.connect( - self.update_server_status_indicator - ) - self.chat_mode.stop_server_finished.connect(self.update_server_status_indicator) - self.chat_mode.stop_server_finished.connect(self.stop_server_finished) - self.chat_mode.start_server_finished.connect(self.clear_message) - self.chat_mode.server_status.button_clicked.connect(self.clear_message) - self.chat_mode.server_status.url_copied.connect(self.copy_url) - self.chat_mode.server_status.client_auth_copied.connect(self.copy_client_auth) - - self.change_title.emit(self.tab_id, strings._("gui_tab_name_chat")) - - self.update_server_status_indicator() - self.timer.start(500) - - def update_server_status_indicator(self): - # Set the status image - if self.mode == self.common.gui.MODE_SHARE: - # Share mode - if self.share_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.set_server_status_indicator_stopped( - strings._("gui_status_indicator_share_stopped") - ) - elif self.share_mode.server_status.status == ServerStatus.STATUS_WORKING: - if self.settings.get("general", "autostart_timer"): - self.set_server_status_indicator_working( - strings._("gui_status_indicator_share_scheduled") - ) - else: - self.set_server_status_indicator_working( - strings._("gui_status_indicator_share_working") - ) - elif self.share_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.set_server_status_indicator_started( - strings._("gui_status_indicator_share_started") - ) - elif self.mode == self.common.gui.MODE_WEBSITE: - # Website mode - if self.website_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.set_server_status_indicator_stopped( - strings._("gui_status_indicator_share_stopped") - ) - elif self.website_mode.server_status.status == ServerStatus.STATUS_WORKING: - if self.website_mode.server_status.autostart_timer_datetime: - self.set_server_status_indicator_working( - strings._("gui_status_indicator_share_scheduled") - ) - else: - self.set_server_status_indicator_working( - strings._("gui_status_indicator_share_working") - ) - elif self.website_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.set_server_status_indicator_started( - strings._("gui_status_indicator_share_started") - ) - elif self.mode == self.common.gui.MODE_RECEIVE: - # Receive mode - if self.receive_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.set_server_status_indicator_stopped( - strings._("gui_status_indicator_receive_stopped") - ) - elif self.receive_mode.server_status.status == ServerStatus.STATUS_WORKING: - if self.settings.get("general", "autostart_timer"): - self.set_server_status_indicator_working( - strings._("gui_status_indicator_receive_scheduled") - ) - else: - self.set_server_status_indicator_working( - strings._("gui_status_indicator_receive_working") - ) - elif self.receive_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.set_server_status_indicator_started( - strings._("gui_status_indicator_receive_started") - ) - elif self.mode == self.common.gui.MODE_CHAT: - # Chat mode - if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED: - self.set_server_status_indicator_stopped( - strings._("gui_status_indicator_chat_stopped") - ) - elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING: - if self.settings.get("general", "autostart_timer"): - self.set_server_status_indicator_working( - strings._("gui_status_indicator_chat_scheduled") - ) - else: - self.set_server_status_indicator_working( - strings._("gui_status_indicator_chat_working") - ) - elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED: - self.set_server_status_indicator_started( - strings._("gui_status_indicator_chat_started") - ) - - def set_server_status_indicator_stopped(self, label_text): - self.change_icon.emit(self.tab_id, "images/server_stopped.png") - self.status_bar.server_status_image_label.setPixmap( - QtGui.QPixmap.fromImage(self.status_bar.server_status_image_stopped) - ) - self.status_bar.server_status_label.setText(label_text) - - def set_server_status_indicator_working(self, label_text): - self.change_icon.emit(self.tab_id, "images/server_working.png") - self.status_bar.server_status_image_label.setPixmap( - QtGui.QPixmap.fromImage(self.status_bar.server_status_image_working) - ) - self.status_bar.server_status_label.setText(label_text) - - def set_server_status_indicator_started(self, label_text): - self.change_icon.emit(self.tab_id, "images/server_started.png") - self.status_bar.server_status_image_label.setPixmap( - QtGui.QPixmap.fromImage(self.status_bar.server_status_image_started) - ) - self.status_bar.server_status_label.setText(label_text) - - def stop_server_finished(self): - # When the server stopped, cleanup the ephemeral onion service - self.get_mode().app.stop_onion_service(self.settings) - - def timer_callback(self): - """ - Check for messages communicated from the web app, and update the GUI accordingly. Also, - call ShareMode and ReceiveMode's timer_callbacks. - """ - self.update() - - if not self.common.gui.local_only: - # Have we lost connection to Tor somehow? - if not self.common.gui.onion.is_authenticated(): - self.timer.stop() - self.status_bar.showMessage(strings._("gui_tor_connection_lost")) - self.system_tray.showMessage( - strings._("gui_tor_connection_lost"), - strings._("gui_tor_connection_error_settings"), - ) - self.get_mode().handle_tor_broke() - - # Process events from the web object - mode = self.get_mode() - - events = [] - - done = False - while not done: - try: - r = mode.web.q.get(False) - events.append(r) - except queue.Empty: - done = True - - for event in events: - if event["type"] == Web.REQUEST_LOAD: - mode.handle_request_load(event) - - elif event["type"] == Web.REQUEST_STARTED: - mode.handle_request_started(event) - - elif event["type"] == Web.REQUEST_PROGRESS: - mode.handle_request_progress(event) - - elif event["type"] == Web.REQUEST_CANCELED: - mode.handle_request_canceled(event) - - elif event["type"] == Web.REQUEST_UPLOAD_INCLUDES_MESSAGE: - mode.handle_request_upload_includes_message(event) - - elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED: - mode.handle_request_upload_file_renamed(event) - - elif event["type"] == Web.REQUEST_UPLOAD_SET_DIR: - mode.handle_request_upload_set_dir(event) - - elif event["type"] == Web.REQUEST_UPLOAD_FINISHED: - mode.handle_request_upload_finished(event) - - elif event["type"] == Web.REQUEST_UPLOAD_CANCELED: - mode.handle_request_upload_canceled(event) - - elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_STARTED: - mode.handle_request_individual_file_started(event) - - elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_PROGRESS: - mode.handle_request_individual_file_progress(event) - - elif event["type"] == Web.REQUEST_INDIVIDUAL_FILE_CANCELED: - mode.handle_request_individual_file_canceled(event) - - if event["type"] == Web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE: - Alert( - self.common, - strings._("error_cannot_create_data_dir").format( - event["data"]["receive_mode_dir"] - ), - ) - - if event["type"] == Web.REQUEST_OTHER: - if ( - event["path"] != "/favicon.ico" - and event["path"] != f"/{mode.web.shutdown_password}/shutdown" - ): - self.status_bar.showMessage( - f"{strings._('other_page_loaded')}: {event['path']}" - ) - - mode.timer_callback() - - def copy_url(self): - """ - When the URL gets copied to the clipboard, display this in the status bar. - """ - self.common.log("Tab", "copy_url") - self.system_tray.showMessage( - strings._("gui_copied_url_title"), strings._("gui_copied_url") - ) - - def copy_client_auth(self): - """ - When the onion service's ClientAuth private key gets copied to - the clipboard, display this in the status bar. - """ - self.common.log("Tab", "copy_client_auth") - self.system_tray.showMessage( - strings._("gui_copied_client_auth_title"), - strings._("gui_copied_client_auth"), - ) - - def clear_message(self): - """ - Clear messages from the status bar. - """ - self.status_bar.clearMessage() - - def get_mode(self): - if self.mode: - if self.mode == self.common.gui.MODE_SHARE: - return self.share_mode - elif self.mode == self.common.gui.MODE_RECEIVE: - return self.receive_mode - elif self.mode == self.common.gui.MODE_CHAT: - return self.chat_mode - else: - return self.website_mode - else: - return None - - def settings_have_changed(self): - # Global settings have changed - self.common.log("Tab", "settings_have_changed") - - # We might've stopped the main requests timer if a Tor connection failed. If we've reloaded - # settings, we probably succeeded in obtaining a new connection. If so, restart the timer. - if not self.common.gui.local_only: - if self.common.gui.onion.is_authenticated(): - mode = self.get_mode() - if mode: - if not self.timer.isActive(): - self.timer.start(500) - mode.on_reload_settings() - - def close_tab(self): - self.common.log("Tab", "close_tab") - if self.mode is None: - return True - - if self.settings.get("persistent", "enabled"): - dialog_text = strings._("gui_close_tab_warning_persistent_description") - else: - server_status = self.get_mode().server_status - if server_status.status == server_status.STATUS_STOPPED: - return True - else: - if self.mode == self.common.gui.MODE_SHARE: - dialog_text = strings._("gui_close_tab_warning_share_description") - elif self.mode == self.common.gui.MODE_RECEIVE: - dialog_text = strings._("gui_close_tab_warning_receive_description") - else: - dialog_text = strings._("gui_close_tab_warning_website_description") - - # Open the warning dialog - self.common.log("Tab", "close_tab, opening warning dialog") - self.close_dialog.setText(dialog_text) - self.close_dialog.exec_() - - # Close - if self.close_dialog.clickedButton() == self.close_dialog.accept_button: - return True - # Cancel - else: - self.common.log("Tab", "close_tab", "cancel, keeping tab open") - return False - - def cleanup(self): - self.common.log("Tab", "cleanup", f"tab_id={self.tab_id}") - if self.get_mode(): - if self.get_mode().web_thread: - self.get_mode().web.stop(self.get_mode().app.port) - self.get_mode().web_thread.quit() - self.get_mode().web_thread.wait() - - self.get_mode().web.cleanup() diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py deleted file mode 100644 index c43a9b9a..00000000 --- a/desktop/src/onionshare/tab_widget.py +++ /dev/null @@ -1,412 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.mode_settings import ModeSettings - -from . import strings -from .tab import Tab -from .threads import EventHandlerThread -from .gui_common import GuiCommon -from .tor_settings_tab import TorSettingsTab -from .settings_tab import SettingsTab - - -class TabWidget(QtWidgets.QTabWidget): - """ - A custom tab widget, that has a "+" button for adding new tabs - """ - - bring_to_front = QtCore.Signal() - - def __init__(self, common, system_tray, status_bar): - super(TabWidget, self).__init__() - self.common = common - self.common.log("TabWidget", "__init__") - - self.system_tray = system_tray - self.status_bar = status_bar - - # Keep track of tabs in a dictionary that maps tab_id to tab. - # Each tab has a unique, auto-incremented id (tab_id). This is different than the - # tab's index, which changes as tabs are re-arranged. - self.tabs = {} - self.current_tab_id = 0 # Each tab has a unique id - self.tor_settings_tab = None - - # Define the new tab button - self.new_tab_button = QtWidgets.QPushButton("+", parent=self) - self.new_tab_button.setFlat(True) - self.new_tab_button.setFixedSize(40, 30) - self.new_tab_button.clicked.connect(self.new_tab_clicked) - self.new_tab_button.setStyleSheet( - self.common.gui.css["tab_widget_new_tab_button"] - ) - self.new_tab_button.setToolTip(strings._("gui_new_tab_tooltip")) - - # Use a custom tab bar - tab_bar = TabBar() - tab_bar.move_new_tab_button.connect(self.move_new_tab_button) - tab_bar.currentChanged.connect(self.tab_changed) - self.setTabBar(tab_bar) - - # Set up the tab widget - self.setMovable(True) - self.setTabsClosable(True) - self.setUsesScrollButtons(True) - self.setDocumentMode(True) - self.setStyleSheet(self.common.gui.css["tab_widget"]) - - self.tabCloseRequested.connect(self.close_tab) - - self.move_new_tab_button() - - # Watch the events file for changes - self.event_handler_t = EventHandlerThread(common) - self.event_handler_t.new_tab.connect(self.add_tab) - self.event_handler_t.new_share_tab.connect(self.new_share_tab) - self.event_handler_t.start() - - def cleanup(self): - self.common.log("TabWidget", "cleanup") - - # Stop the event thread - self.event_handler_t.should_quit = True - self.event_handler_t.quit() - self.event_handler_t.wait(50) - - # Clean up each tab - for tab_id in self.tabs: - if not ( - type(self.tabs[tab_id]) is SettingsTab - or type(self.tabs[tab_id]) is TorSettingsTab - ): - self.tabs[tab_id].cleanup() - - def move_new_tab_button(self): - # Find the width of all tabs - tabs_width = sum( - [self.tabBar().tabRect(i).width() for i in range(self.count())] - ) - - # The current position of the new tab button - pos = self.new_tab_button.pos() - - # If there are so many tabs it scrolls, move the button to the left of the scroll buttons - if tabs_width > self.width(): - pos.setX(self.width() - 65) - else: - # Otherwise move the button to the right of the tabs - pos.setX(self.tabBar().sizeHint().width()) - - self.new_tab_button.move(pos) - self.new_tab_button.raise_() - - def tab_changed(self): - # Active tab was changed - tab = self.widget(self.currentIndex()) - if not tab: - self.common.log( - "TabWidget", - "tab_changed", - f"tab at index {self.currentIndex()} does not exist", - ) - return - - tab_id = tab.tab_id - self.common.log("TabWidget", "tab_changed", f"Tab was changed to {tab_id}") - - # If it's Settings or Tor Settings, ignore - if ( - type(self.tabs[tab_id]) is SettingsTab - or type(self.tabs[tab_id]) is TorSettingsTab - ): - # Blank the server status indicator - self.status_bar.server_status_image_label.clear() - self.status_bar.server_status_label.clear() - return - - try: - mode = self.tabs[tab_id].get_mode() - if mode: - # Update the server status indicator to reflect that of the current tab - self.tabs[tab_id].update_server_status_indicator() - else: - # If this tab doesn't have a mode set yet, blank the server status indicator - self.status_bar.server_status_image_label.clear() - self.status_bar.server_status_label.clear() - except KeyError: - # When all current tabs are closed, index briefly drops to -1 before resetting to 0 - # which will otherwise trigger a KeyError on tab.get_mode() above. - pass - - def new_tab_clicked(self): - # Create a new tab - self.add_tab() - - def load_tab(self, mode_settings_id): - # Load the tab's mode settings - mode_settings = ModeSettings(self.common, id=mode_settings_id) - self.add_tab(mode_settings) - - def new_share_tab(self, filenames): - mode_settings = ModeSettings(self.common) - mode_settings.set("persistent", "mode", "share") - mode_settings.set("share", "filenames", filenames) - self.add_tab(mode_settings) - - def add_tab(self, mode_settings=None): - self.common.log("TabWidget", "add_tab", f"mode_settings: {mode_settings}") - tab = Tab(self.common, self.current_tab_id, self.system_tray, self.status_bar) - tab.change_title.connect(self.change_title) - tab.change_icon.connect(self.change_icon) - tab.change_persistent.connect(self.change_persistent) - - self.tabs[self.current_tab_id] = tab - self.current_tab_id += 1 - - index = self.addTab(tab, strings._("gui_new_tab")) - self.setCurrentIndex(index) - - tab.init(mode_settings) - - # Make sure the title is set - if tab.get_mode(): - tab.get_mode().mode_settings_widget.title_editing_finished() - - # If it's persistent, set the persistent image in the tab - self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled")) - - # Bring the window to front, in case this is being added by an event - self.bring_to_front.emit() - - def open_settings_tab(self): - self.common.log("TabWidget", "open_settings_tab") - - # See if a settings tab is already open, and if so switch to it - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is SettingsTab: - self.setCurrentIndex(self.indexOf(self.tabs[tab_id])) - return - - settings_tab = SettingsTab(self.common, self.current_tab_id) - settings_tab.close_this_tab.connect(self.close_settings_tab) - self.tabs[self.current_tab_id] = settings_tab - self.current_tab_id += 1 - index = self.addTab(settings_tab, strings._("gui_settings_window_title")) - self.setCurrentIndex(index) - - def open_tor_settings_tab(self): - self.common.log("TabWidget", "open_tor_settings_tab") - - # See if a settings tab is already open, and if so switch to it - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is TorSettingsTab: - self.setCurrentIndex(self.indexOf(self.tabs[tab_id])) - return - - self.tor_settings_tab = TorSettingsTab( - self.common, self.current_tab_id, self.are_tabs_active(), self.status_bar - ) - self.tor_settings_tab.close_this_tab.connect(self.close_tor_settings_tab) - self.tor_settings_tab.tor_is_connected.connect(self.tor_is_connected) - self.tor_settings_tab.tor_is_disconnected.connect(self.tor_is_disconnected) - self.tabs[self.current_tab_id] = self.tor_settings_tab - self.current_tab_id += 1 - index = self.addTab( - self.tor_settings_tab, strings._("gui_tor_settings_window_title") - ) - self.setCurrentIndex(index) - - def change_title(self, tab_id, title): - shortened_title = title - if len(shortened_title) > 11: - shortened_title = shortened_title[:10] + "..." - - index = self.indexOf(self.tabs[tab_id]) - self.setTabText(index, shortened_title) - self.setTabToolTip(index, title) - - def change_icon(self, tab_id, icon_path): - index = self.indexOf(self.tabs[tab_id]) - self.setTabIcon(index, QtGui.QIcon(GuiCommon.get_resource_path(icon_path))) - - # The icon changes when the server status changes, so if we have an open - # Tor Settings tab, tell it to update - if self.tor_settings_tab: - self.tor_settings_tab.active_tabs_changed(self.are_tabs_active()) - - def change_persistent(self, tab_id, is_persistent): - self.common.log( - "TabWidget", - "change_persistent", - f"tab_id: {tab_id}, is_persistent: {is_persistent}", - ) - index = self.indexOf(self.tabs[tab_id]) - if is_persistent: - self.tabBar().setTabButton( - index, - QtWidgets.QTabBar.LeftSide, - self.tabs[tab_id].persistent_image_label, - ) - else: - self.tabBar().setTabButton( - index, QtWidgets.QTabBar.LeftSide, self.tabs[tab_id].invisible_widget - ) - - self.save_persistent_tabs() - - def save_persistent_tabs(self): - # Figure out the order of persistent tabs to save in settings - persistent_tabs = [] - for tab_id in self.tabs: - if not ( - type(self.tabs[tab_id]) is SettingsTab - or type(self.tabs[tab_id]) is TorSettingsTab - ): - tab = self.widget(self.indexOf(self.tabs[tab_id])) - if tab.settings.get("persistent", "enabled"): - persistent_tabs.append(tab.settings.id) - # Only save if tabs have actually moved - if persistent_tabs != self.common.settings.get("persistent_tabs"): - self.common.settings.set("persistent_tabs", persistent_tabs) - self.common.settings.save() - - def close_tab(self, index): - self.common.log("TabWidget", "close_tab", f"{index}") - tab = self.widget(index) - tab_id = tab.tab_id - - if ( - type(self.tabs[tab_id]) is SettingsTab - or type(self.tabs[tab_id]) is TorSettingsTab - ): - self.common.log("TabWidget", "closing a settings tab") - - if type(self.tabs[tab_id]) is TorSettingsTab: - self.tor_settings_tab = None - - # Remove the tab - self.removeTab(index) - del self.tabs[tab.tab_id] - - # If the last tab is closed, open a new one - if self.count() == 0: - self.new_tab_clicked() - - else: - self.common.log("TabWidget", "closing a service tab") - if tab.close_tab(): - self.common.log("TabWidget", "user is okay with closing the tab") - tab.cleanup() - - # If the tab is persistent, delete the settings file from disk - if tab.settings.get("persistent", "enabled"): - tab.settings.delete() - - self.save_persistent_tabs() - - # Remove the tab - self.removeTab(index) - del self.tabs[tab.tab_id] - - # If the last tab is closed, open a new one - if self.count() == 0: - self.new_tab_clicked() - else: - self.common.log("TabWidget", "user does not want to close the tab") - - def close_settings_tab(self): - self.common.log("TabWidget", "close_settings_tab") - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is SettingsTab: - index = self.indexOf(self.tabs[tab_id]) - self.close_tab(index) - return - - def close_tor_settings_tab(self): - self.common.log("TabWidget", "close_tor_settings_tab") - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is TorSettingsTab: - index = self.indexOf(self.tabs[tab_id]) - self.close_tab(index) - return - - def are_tabs_active(self): - """ - See if there are active servers in any open tabs - """ - for tab_id in self.tabs: - if not ( - type(self.tabs[tab_id]) is SettingsTab - or type(self.tabs[tab_id]) is TorSettingsTab - ): - mode = self.tabs[tab_id].get_mode() - if mode: - if mode.server_status.status != mode.server_status.STATUS_STOPPED: - return True - return False - - def paintEvent(self, event): - super(TabWidget, self).paintEvent(event) - # Save the order of persistent tabs whenever a new tab is switched to -- ideally we would - # do this whenever tabs gets moved, but paintEvent is the only event that seems to get triggered - # when this happens - self.save_persistent_tabs() - - def resizeEvent(self, event): - # Make sure to move new tab button on each resize - super(TabWidget, self).resizeEvent(event) - self.move_new_tab_button() - - def tor_is_connected(self): - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is SettingsTab: - self.tabs[tab_id].tor_is_connected() - else: - if not type(self.tabs[tab_id]) is TorSettingsTab: - mode = self.tabs[tab_id].get_mode() - if mode: - mode.tor_connection_started() - - def tor_is_disconnected(self): - for tab_id in self.tabs: - if type(self.tabs[tab_id]) is SettingsTab: - self.tabs[tab_id].tor_is_disconnected() - else: - if not type(self.tabs[tab_id]) is TorSettingsTab: - mode = self.tabs[tab_id].get_mode() - if mode: - mode.tor_connection_stopped() - - -class TabBar(QtWidgets.QTabBar): - """ - A custom tab bar - """ - - move_new_tab_button = QtCore.Signal() - - def __init__(self): - super(TabBar, self).__init__() - - def tabLayoutChange(self): - self.move_new_tab_button.emit() diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py deleted file mode 100644 index b02c6f21..00000000 --- a/desktop/src/onionshare/threads.py +++ /dev/null @@ -1,270 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import time -import json -import os -from PySide2 import QtCore - -from onionshare_cli.onion import ( - TorErrorInvalidSetting, - TorErrorAutomatic, - TorErrorSocketPort, - TorErrorSocketFile, - TorErrorMissingPassword, - TorErrorUnreadableCookieFile, - TorErrorAuthError, - TorErrorProtocolError, - BundledTorTimeout, - BundledTorBroken, - TorTooOldEphemeral, - TorTooOldStealth, - PortNotAvailable, -) - -from . import strings - - -class OnionThread(QtCore.QThread): - """ - Starts the onion service, and waits for it to finish - """ - - success = QtCore.Signal() - success_early = QtCore.Signal() - error = QtCore.Signal(str) - - def __init__(self, mode): - super(OnionThread, self).__init__() - self.mode = mode - self.mode.common.log("OnionThread", "__init__") - - # allow this thread to be terminated - self.setTerminationEnabled() - - def run(self): - self.mode.common.log("OnionThread", "run") - - # Make a new static URL path for each new share - self.mode.web.generate_static_url_path() - - # Choose port early, because we need them to exist in advance for scheduled shares - if not self.mode.app.port: - self.mode.app.choose_port() - - try: - if self.mode.obtain_onion_early: - self.mode.app.start_onion_service( - self.mode.get_type(), self.mode.settings, await_publication=False - ) - # 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.stop_onion_service(self.mode.settings) - else: - self.mode.app.start_onion_service( - self.mode.get_type(), self.mode.settings, 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 ( - TorErrorInvalidSetting, - TorErrorAutomatic, - TorErrorSocketPort, - TorErrorSocketFile, - TorErrorMissingPassword, - TorErrorUnreadableCookieFile, - TorErrorAuthError, - TorErrorProtocolError, - BundledTorTimeout, - BundledTorBroken, - TorTooOldEphemeral, - TorTooOldStealth, - PortNotAvailable, - ) as e: - message = self.mode.common.gui.get_translated_tor_error(e) - self.error.emit(message) - return - - -class WebThread(QtCore.QThread): - """ - Starts the web service - """ - - success = QtCore.Signal() - error = QtCore.Signal(str) - - def __init__(self, mode): - super(WebThread, self).__init__() - self.mode = mode - self.mode.common.log("WebThread", "__init__") - - def run(self): - self.mode.common.log("WebThread", "run") - self.mode.web.start(self.mode.app.port) - self.success.emit() - - -class AutoStartTimer(QtCore.QThread): - """ - Waits for a prescribed time before allowing a share to start - """ - - success = QtCore.Signal() - error = QtCore.Signal(str) - - def __init__(self, mode, canceled=False): - super(AutoStartTimer, self).__init__() - self.mode = mode - self.canceled = canceled - self.mode.common.log("AutoStartTimer", "__init__") - - # allow this thread to be terminated - self.setTerminationEnabled() - - def run(self): - now = QtCore.QDateTime.currentDateTime() - autostart_timer_datetime_delta = now.secsTo( - self.mode.server_status.autostart_timer_datetime - ) - try: - # Sleep until scheduled time - while autostart_timer_datetime_delta > 0 and self.canceled is False: - time.sleep(0.1) - now = QtCore.QDateTime.currentDateTime() - autostart_timer_datetime_delta = now.secsTo( - self.mode.server_status.autostart_timer_datetime - ) - # Timer has now finished - if self.canceled is 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]) - return - - -class EventHandlerThread(QtCore.QThread): - """ - To trigger an event, write a JSON line to the events file. When that file changes, - each line will be handled as an event. Valid events are: - {"type": "new_tab"} - {"type": "new_share_tab", "filenames": ["file1", "file2"]} - """ - - new_tab = QtCore.Signal() - new_share_tab = QtCore.Signal(list) - - def __init__(self, common): - super(EventHandlerThread, self).__init__() - self.common = common - self.common.log("EventHandlerThread", "__init__") - self.should_quit = False - - def run(self): - self.common.log("EventHandlerThread", "run") - - mtime = 0 - while True: - if os.path.exists(self.common.gui.events_filename): - # Events file exists - if os.stat(self.common.gui.events_filename).st_mtime != mtime: - # Events file has been modified, load events - try: - with open(self.common.gui.events_filename, "r") as f: - lines = f.readlines() - os.remove(self.common.gui.events_filename) - - self.common.log( - "EventHandler", "run", f"processing {len(lines)} lines" - ) - for line in lines: - try: - obj = json.loads(line) - if "type" not in obj: - self.common.log( - "EventHandler", - "run", - f"event does not have a type: {obj}", - ) - continue - except json.decoder.JSONDecodeError: - self.common.log( - "EventHandler", - "run", - f"ignoring invalid line: {line}", - ) - continue - - if obj["type"] == "new_tab": - self.common.log("EventHandler", "run", "new_tab event") - self.new_tab.emit() - - elif obj["type"] == "new_share_tab": - if ( - "filenames" in obj - and type(obj["filenames"]) is list - ): - self.new_share_tab.emit(obj["filenames"]) - else: - self.common.log( - "EventHandler", - "run", - f"invalid new_share_tab event: {obj}", - ) - - else: - self.common.log( - "EventHandler", "run", f"invalid event type: {obj}" - ) - - except Exception: - pass - - if self.should_quit: - break - time.sleep(0.2) - - -class OnionCleanupThread(QtCore.QThread): - """ - Wait for Tor rendezvous circuits to close in a separate thread - """ - - def __init__(self, common): - super(OnionCleanupThread, self).__init__() - self.common = common - self.common.log("OnionCleanupThread", "__init__") - - def run(self): - self.common.log("OnionCleanupThread", "run") - self.common.gui.onion.cleanup() diff --git a/desktop/src/onionshare/tor_connection.py b/desktop/src/onionshare/tor_connection.py deleted file mode 100644 index 2cc599c4..00000000 --- a/desktop/src/onionshare/tor_connection.py +++ /dev/null @@ -1,324 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import time -from PySide2 import QtCore, QtWidgets, QtGui - -from onionshare_cli.onion import ( - BundledTorCanceled, - TorErrorInvalidSetting, - TorErrorAutomatic, - TorErrorSocketPort, - TorErrorSocketFile, - TorErrorMissingPassword, - TorErrorUnreadableCookieFile, - TorErrorAuthError, - TorErrorProtocolError, - BundledTorTimeout, - BundledTorBroken, - TorTooOldEphemeral, - TorTooOldStealth, - PortNotAvailable, -) - -from . import strings -from .gui_common import GuiCommon -from .widgets import Alert - - -class TorConnectionDialog(QtWidgets.QProgressDialog): - """ - Connecting to Tor dialog. - """ - - open_tor_settings = QtCore.Signal() - success = QtCore.Signal() - - def __init__( - self, common, custom_settings=False, testing_settings=False, onion=None - ): - super(TorConnectionDialog, self).__init__(None) - - self.common = common - self.testing_settings = testing_settings - - if custom_settings: - self.settings = custom_settings - else: - self.settings = self.common.settings - - self.common.log("TorConnectionDialog", "__init__") - - if self.testing_settings: - self.title = strings._("gui_settings_connection_type_test_button") - self.onion = onion - else: - self.title = "OnionShare" - self.onion = self.common.gui.onion - - self.setWindowTitle(self.title) - - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - self.setModal(True) - self.setFixedSize(400, 150) - - # Label - self.setLabelText(strings._("connecting_to_tor")) - - # Progress bar ticks from 0 to 100 - self.setRange(0, 100) - # Don't show if connection takes less than 100ms (for non-bundled tor) - self.setMinimumDuration(100) - - # Start displaying the status at 0 - self._tor_status_update(0, "") - - def start(self): - self.common.log("TorConnectionDialog", "start") - - t = TorConnectionThread(self.common, self.settings, self) - t.tor_status_update.connect(self._tor_status_update) - t.connected_to_tor.connect(self._connected_to_tor) - t.canceled_connecting_to_tor.connect(self._canceled_connecting_to_tor) - t.error_connecting_to_tor.connect(self._error_connecting_to_tor) - t.start() - - # The main thread needs to remain active, and checking for Qt events, - # until the thread is finished. Otherwise it won't be able to handle - # accepting signals. - self.active = True - while self.active: - time.sleep(0.1) - self.common.gui.qtapp.processEvents() - - def _tor_status_update(self, progress, summary): - self.setValue(int(progress)) - self.setLabelText( - f"{strings._('connecting_to_tor')}
{summary}" - ) - - def _connected_to_tor(self): - self.common.log("TorConnectionDialog", "_connected_to_tor") - self.active = False - # Close the dialog after connecting - self.setValue(self.maximum()) - - def _canceled_connecting_to_tor(self): - self.common.log("TorConnectionDialog", "_canceled_connecting_to_tor") - self.active = False - self.onion.cleanup() - - # Cancel connecting to Tor - QtCore.QTimer.singleShot(1, self.cancel) - - def _error_connecting_to_tor(self, msg): - self.common.log("TorConnectionDialog", "_error_connecting_to_tor") - self.active = False - - if self.testing_settings: - # If testing, just display the error but don't open settings - def alert(): - Alert(self.common, msg, QtWidgets.QMessageBox.Warning, title=self.title) - - else: - # If not testing, open settings after displaying the error - def alert(): - Alert( - self.common, - f"{msg}\n\n{strings._('gui_tor_connection_error_settings')}", - QtWidgets.QMessageBox.Warning, - title=self.title, - ) - - # Open settings - self.open_tor_settings.emit() - - QtCore.QTimer.singleShot(1, alert) - - # Cancel connecting to Tor - QtCore.QTimer.singleShot(1, self.cancel) - - -class TorConnectionWidget(QtWidgets.QWidget): - """ - Connecting to Tor widget, with a progress bar - """ - - open_tor_settings = QtCore.Signal() - success = QtCore.Signal() - fail = QtCore.Signal(str) - - def __init__(self, common, status_bar): - super(TorConnectionWidget, self).__init__(None) - self.common = common - self.common.log("TorConnectionWidget", "__init__") - - self.status_bar = status_bar - self.label = QtWidgets.QLabel(strings._("connecting_to_tor")) - self.label.setAlignment(QtCore.Qt.AlignHCenter) - - self.progress = QtWidgets.QProgressBar() - self.progress.setRange(0, 100) - self.cancel_button = QtWidgets.QPushButton( - strings._("gui_settings_button_cancel") - ) - self.cancel_button.clicked.connect(self.cancel_clicked) - - progress_layout = QtWidgets.QHBoxLayout() - progress_layout.addWidget(self.progress) - progress_layout.addWidget(self.cancel_button) - - inner_layout = QtWidgets.QVBoxLayout() - inner_layout.addWidget(self.label) - inner_layout.addLayout(progress_layout) - - layout = QtWidgets.QHBoxLayout() - layout.addStretch() - layout.addLayout(inner_layout) - layout.addStretch() - self.setLayout(layout) - - # Start displaying the status at 0 - self._tor_status_update(0, "") - - def start(self, custom_settings=False, testing_settings=False, onion=None): - self.common.log("TorConnectionWidget", "start") - self.was_canceled = False - - self.testing_settings = testing_settings - - if custom_settings: - self.settings = custom_settings - else: - self.settings = self.common.settings - - if self.testing_settings: - self.onion = onion - else: - self.onion = self.common.gui.onion - - t = TorConnectionThread(self.common, self.settings, self) - t.tor_status_update.connect(self._tor_status_update) - t.connected_to_tor.connect(self._connected_to_tor) - t.canceled_connecting_to_tor.connect(self._canceled_connecting_to_tor) - t.error_connecting_to_tor.connect(self._error_connecting_to_tor) - t.start() - - # The main thread needs to remain active, and checking for Qt events, - # until the thread is finished. Otherwise it won't be able to handle - # accepting signals. - self.active = True - while self.active: - time.sleep(0.1) - self.common.gui.qtapp.processEvents() - - def cancel_clicked(self): - self.was_canceled = True - self.fail.emit("") - - def wasCanceled(self): - return self.was_canceled - - def _tor_status_update(self, progress, summary): - self.progress.setValue(int(progress)) - self.label.setText( - f"{strings._('connecting_to_tor')}
{summary}" - ) - - def _connected_to_tor(self): - self.common.log("TorConnectionWidget", "_connected_to_tor") - self.active = False - self.status_bar.clearMessage() - - # Close the dialog after connecting - self.progress.setValue(self.progress.maximum()) - - self.success.emit() - - def _canceled_connecting_to_tor(self): - self.common.log("TorConnectionWidget", "_canceled_connecting_to_tor") - self.active = False - self.onion.cleanup() - - # Cancel connecting to Tor - QtCore.QTimer.singleShot(1, self.cancel_clicked) - - def _error_connecting_to_tor(self, msg): - self.common.log("TorConnectionWidget", "_error_connecting_to_tor") - self.active = False - self.fail.emit(msg) - - -class TorConnectionThread(QtCore.QThread): - tor_status_update = QtCore.Signal(str, str) - connected_to_tor = QtCore.Signal() - canceled_connecting_to_tor = QtCore.Signal() - error_connecting_to_tor = QtCore.Signal(str) - - def __init__(self, common, settings, parent): - super(TorConnectionThread, self).__init__() - self.common = common - self.common.log("TorConnectionThread", "__init__") - self.settings = settings - self.parent = parent - - def run(self): - self.common.log("TorConnectionThread", "run") - - # Connect to the Onion - try: - self.parent.onion.connect(self.settings, False, self._tor_status_update) - if self.parent.onion.connected_to_tor: - self.connected_to_tor.emit() - else: - self.canceled_connecting_to_tor.emit() - - except BundledTorCanceled: - self.common.log( - "TorConnectionThread", "run", "caught exception: BundledTorCanceled" - ) - self.canceled_connecting_to_tor.emit() - - except ( - TorErrorInvalidSetting, - TorErrorAutomatic, - TorErrorSocketPort, - TorErrorSocketFile, - TorErrorMissingPassword, - TorErrorUnreadableCookieFile, - TorErrorAuthError, - TorErrorProtocolError, - BundledTorTimeout, - BundledTorBroken, - TorTooOldEphemeral, - TorTooOldStealth, - PortNotAvailable, - ) as e: - message = self.common.gui.get_translated_tor_error(e) - self.common.log( - "TorConnectionThread", "run", f"caught exception: {message}" - ) - self.error_connecting_to_tor.emit(message) - - def _tor_status_update(self, progress, summary): - self.tor_status_update.emit(progress, summary) - - # Return False if the dialog was canceled - return not self.parent.wasCanceled() diff --git a/desktop/src/onionshare/tor_settings_tab.py b/desktop/src/onionshare/tor_settings_tab.py deleted file mode 100644 index e28e5260..00000000 --- a/desktop/src/onionshare/tor_settings_tab.py +++ /dev/null @@ -1,895 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui -import sys -import platform -import re -import os - -from onionshare_cli.meek import Meek -from onionshare_cli.settings import Settings -from onionshare_cli.onion import Onion - -from . import strings -from .widgets import Alert -from .tor_connection import TorConnectionWidget -from .moat_dialog import MoatDialog - - -class TorSettingsTab(QtWidgets.QWidget): - """ - Settings dialog. - """ - - close_this_tab = QtCore.Signal() - tor_is_connected = QtCore.Signal() - tor_is_disconnected = QtCore.Signal() - - def __init__(self, common, tab_id, are_tabs_active, status_bar): - super(TorSettingsTab, self).__init__() - - self.common = common - self.common.log("TorSettingsTab", "__init__") - - self.status_bar = status_bar - self.meek = Meek(common, get_tor_paths=self.common.gui.get_tor_paths) - - self.system = platform.system() - self.tab_id = tab_id - - # Connection type: either automatic, control port, or socket file - - # Bundled Tor - self.connection_type_bundled_radio = QtWidgets.QRadioButton( - strings._("gui_settings_connection_type_bundled_option") - ) - self.connection_type_bundled_radio.toggled.connect( - self.connection_type_bundled_toggled - ) - - # Bundled Tor doesn't work on dev mode in Windows or Mac - if (self.system == "Windows" or self.system == "Darwin") and getattr( - sys, "onionshare_dev_mode", False - ): - self.connection_type_bundled_radio.setEnabled(False) - - # Bridge options for bundled tor - - ( - self.tor_path, - self.tor_geo_ip_file_path, - self.tor_geo_ipv6_file_path, - self.obfs4proxy_file_path, - self.snowflake_file_path, - self.meek_client_file_path, - ) = self.common.gui.get_tor_paths() - - bridges_label = QtWidgets.QLabel(strings._("gui_settings_tor_bridges_label")) - bridges_label.setWordWrap(True) - - self.bridge_use_checkbox = QtWidgets.QCheckBox( - strings._("gui_settings_bridge_use_checkbox") - ) - self.bridge_use_checkbox.stateChanged.connect( - self.bridge_use_checkbox_state_changed - ) - - # Built-in bridge - self.bridge_builtin_radio = QtWidgets.QRadioButton( - strings._("gui_settings_bridge_radio_builtin") - ) - self.bridge_builtin_radio.toggled.connect(self.bridge_builtin_radio_toggled) - self.bridge_builtin_dropdown = QtWidgets.QComboBox() - self.bridge_builtin_dropdown.currentTextChanged.connect( - self.bridge_builtin_dropdown_changed - ) - if self.obfs4proxy_file_path and os.path.isfile(self.obfs4proxy_file_path): - self.bridge_builtin_dropdown.addItem("obfs4") - self.bridge_builtin_dropdown.addItem("meek-azure") - if self.snowflake_file_path and os.path.isfile(self.snowflake_file_path): - self.bridge_builtin_dropdown.addItem("snowflake") - - # Request a bridge from torproject.org (moat) - self.bridge_moat_radio = QtWidgets.QRadioButton( - strings._("gui_settings_bridge_moat_radio_option") - ) - self.bridge_moat_radio.toggled.connect(self.bridge_moat_radio_toggled) - self.bridge_moat_button = QtWidgets.QPushButton( - strings._("gui_settings_bridge_moat_button") - ) - self.bridge_moat_button.clicked.connect(self.bridge_moat_button_clicked) - self.bridge_moat_textbox = QtWidgets.QPlainTextEdit() - self.bridge_moat_textbox.setMinimumHeight(100) - self.bridge_moat_textbox.setMaximumHeight(100) - self.bridge_moat_textbox.setReadOnly(True) - self.bridge_moat_textbox.setWordWrapMode(QtGui.QTextOption.NoWrap) - bridge_moat_textbox_options_layout = QtWidgets.QVBoxLayout() - bridge_moat_textbox_options_layout.addWidget(self.bridge_moat_button) - bridge_moat_textbox_options_layout.addWidget(self.bridge_moat_textbox) - self.bridge_moat_textbox_options = QtWidgets.QWidget() - self.bridge_moat_textbox_options.setLayout(bridge_moat_textbox_options_layout) - self.bridge_moat_textbox_options.hide() - - # Custom bridges radio and textbox - self.bridge_custom_radio = QtWidgets.QRadioButton( - strings._("gui_settings_bridge_custom_radio_option") - ) - self.bridge_custom_radio.toggled.connect(self.bridge_custom_radio_toggled) - self.bridge_custom_textbox = QtWidgets.QPlainTextEdit() - self.bridge_custom_textbox.setMinimumHeight(100) - self.bridge_custom_textbox.setMaximumHeight(100) - self.bridge_custom_textbox.setPlaceholderText( - strings._("gui_settings_bridge_custom_placeholder") - ) - - bridge_custom_textbox_options_layout = QtWidgets.QVBoxLayout() - bridge_custom_textbox_options_layout.addWidget(self.bridge_custom_textbox) - - self.bridge_custom_textbox_options = QtWidgets.QWidget() - self.bridge_custom_textbox_options.setLayout( - bridge_custom_textbox_options_layout - ) - self.bridge_custom_textbox_options.hide() - - # Bridge settings layout - bridge_settings_layout = QtWidgets.QVBoxLayout() - bridge_settings_layout.addWidget(self.bridge_builtin_radio) - bridge_settings_layout.addWidget(self.bridge_builtin_dropdown) - bridge_settings_layout.addWidget(self.bridge_moat_radio) - bridge_settings_layout.addWidget(self.bridge_moat_textbox_options) - bridge_settings_layout.addWidget(self.bridge_custom_radio) - bridge_settings_layout.addWidget(self.bridge_custom_textbox_options) - self.bridge_settings = QtWidgets.QWidget() - self.bridge_settings.setLayout(bridge_settings_layout) - - # Bridges layout/widget - bridges_layout = QtWidgets.QVBoxLayout() - bridges_layout.addWidget(bridges_label) - bridges_layout.addWidget(self.bridge_use_checkbox) - bridges_layout.addWidget(self.bridge_settings) - - self.bridges = QtWidgets.QWidget() - self.bridges.setLayout(bridges_layout) - - # Automatic - self.connection_type_automatic_radio = QtWidgets.QRadioButton( - strings._("gui_settings_connection_type_automatic_option") - ) - self.connection_type_automatic_radio.toggled.connect( - self.connection_type_automatic_toggled - ) - - # Control port - self.connection_type_control_port_radio = QtWidgets.QRadioButton( - strings._("gui_settings_connection_type_control_port_option") - ) - self.connection_type_control_port_radio.toggled.connect( - self.connection_type_control_port_toggled - ) - - connection_type_control_port_extras_label = QtWidgets.QLabel( - strings._("gui_settings_control_port_label") - ) - self.connection_type_control_port_extras_address = QtWidgets.QLineEdit() - self.connection_type_control_port_extras_port = QtWidgets.QLineEdit() - connection_type_control_port_extras_layout = QtWidgets.QHBoxLayout() - connection_type_control_port_extras_layout.addWidget( - connection_type_control_port_extras_label - ) - connection_type_control_port_extras_layout.addWidget( - self.connection_type_control_port_extras_address - ) - connection_type_control_port_extras_layout.addWidget( - self.connection_type_control_port_extras_port - ) - - self.connection_type_control_port_extras = QtWidgets.QWidget() - self.connection_type_control_port_extras.setLayout( - connection_type_control_port_extras_layout - ) - self.connection_type_control_port_extras.hide() - - # Socket file - self.connection_type_socket_file_radio = QtWidgets.QRadioButton( - strings._("gui_settings_connection_type_socket_file_option") - ) - self.connection_type_socket_file_radio.toggled.connect( - self.connection_type_socket_file_toggled - ) - - connection_type_socket_file_extras_label = QtWidgets.QLabel( - strings._("gui_settings_socket_file_label") - ) - self.connection_type_socket_file_extras_path = QtWidgets.QLineEdit() - connection_type_socket_file_extras_layout = QtWidgets.QHBoxLayout() - connection_type_socket_file_extras_layout.addWidget( - connection_type_socket_file_extras_label - ) - connection_type_socket_file_extras_layout.addWidget( - self.connection_type_socket_file_extras_path - ) - - self.connection_type_socket_file_extras = QtWidgets.QWidget() - self.connection_type_socket_file_extras.setLayout( - connection_type_socket_file_extras_layout - ) - self.connection_type_socket_file_extras.hide() - - # Tor SOCKS address and port - gui_settings_socks_label = QtWidgets.QLabel( - strings._("gui_settings_socks_label") - ) - self.connection_type_socks_address = QtWidgets.QLineEdit() - self.connection_type_socks_port = QtWidgets.QLineEdit() - connection_type_socks_layout = QtWidgets.QHBoxLayout() - connection_type_socks_layout.addWidget(gui_settings_socks_label) - connection_type_socks_layout.addWidget(self.connection_type_socks_address) - connection_type_socks_layout.addWidget(self.connection_type_socks_port) - - self.connection_type_socks = QtWidgets.QWidget() - self.connection_type_socks.setLayout(connection_type_socks_layout) - self.connection_type_socks.hide() - - # Authentication options - self.authenticate_no_auth_checkbox = QtWidgets.QCheckBox( - strings._("gui_settings_authenticate_no_auth_option") - ) - self.authenticate_no_auth_checkbox.toggled.connect( - self.authenticate_no_auth_toggled - ) - - authenticate_password_extras_label = QtWidgets.QLabel( - strings._("gui_settings_password_label") - ) - self.authenticate_password_extras_password = QtWidgets.QLineEdit("") - authenticate_password_extras_layout = QtWidgets.QHBoxLayout() - authenticate_password_extras_layout.addWidget( - authenticate_password_extras_label - ) - authenticate_password_extras_layout.addWidget( - self.authenticate_password_extras_password - ) - - self.authenticate_password_extras = QtWidgets.QWidget() - self.authenticate_password_extras.setLayout(authenticate_password_extras_layout) - self.authenticate_password_extras.hide() - - # Group for Tor settings - tor_settings_layout = QtWidgets.QVBoxLayout() - tor_settings_layout.addWidget(self.connection_type_control_port_extras) - tor_settings_layout.addWidget(self.connection_type_socket_file_extras) - tor_settings_layout.addWidget(self.connection_type_socks) - tor_settings_layout.addWidget(self.authenticate_no_auth_checkbox) - tor_settings_layout.addWidget(self.authenticate_password_extras) - self.tor_settings_group = QtWidgets.QGroupBox( - strings._("gui_settings_controller_extras_label") - ) - self.tor_settings_group.setLayout(tor_settings_layout) - self.tor_settings_group.hide() - - # Put the radios into their own group so they are exclusive - connection_type_radio_group_layout = QtWidgets.QVBoxLayout() - connection_type_radio_group_layout.addWidget(self.connection_type_bundled_radio) - connection_type_radio_group_layout.addWidget( - self.connection_type_automatic_radio - ) - connection_type_radio_group_layout.addWidget( - self.connection_type_control_port_radio - ) - connection_type_radio_group_layout.addWidget( - self.connection_type_socket_file_radio - ) - connection_type_radio_group_layout.addStretch() - connection_type_radio_group = QtWidgets.QGroupBox( - strings._("gui_settings_connection_type_label") - ) - connection_type_radio_group.setLayout(connection_type_radio_group_layout) - - # The Bridges options are not exclusive (enabling Bridges offers obfs4 or custom bridges) - connection_type_bridges_radio_group_layout = QtWidgets.QVBoxLayout() - connection_type_bridges_radio_group_layout.addWidget(self.bridges) - self.connection_type_bridges_radio_group = QtWidgets.QGroupBox( - strings._("gui_settings_tor_bridges") - ) - self.connection_type_bridges_radio_group.setLayout( - connection_type_bridges_radio_group_layout - ) - self.connection_type_bridges_radio_group.hide() - - # Connection type layout - connection_type_layout = QtWidgets.QVBoxLayout() - connection_type_layout.addWidget(self.tor_settings_group) - connection_type_layout.addWidget(self.connection_type_bridges_radio_group) - connection_type_layout.addStretch() - - # Settings are in columns - columns_layout = QtWidgets.QHBoxLayout() - columns_layout.addWidget(connection_type_radio_group) - columns_layout.addSpacing(20) - columns_layout.addLayout(connection_type_layout, stretch=1) - columns_wrapper = QtWidgets.QWidget() - columns_wrapper.setFixedHeight(400) - columns_wrapper.setLayout(columns_layout) - - # Tor connection widget - self.tor_con = TorConnectionWidget(self.common, self.status_bar) - self.tor_con.success.connect(self.tor_con_success) - self.tor_con.fail.connect(self.tor_con_fail) - self.tor_con.hide() - self.tor_con_type = None - - # Error label - self.error_label = QtWidgets.QLabel() - self.error_label.setStyleSheet(self.common.gui.css["tor_settings_error"]) - self.error_label.setWordWrap(True) - - # Buttons - self.test_tor_button = QtWidgets.QPushButton( - strings._("gui_settings_connection_type_test_button") - ) - self.test_tor_button.clicked.connect(self.test_tor_clicked) - self.save_button = QtWidgets.QPushButton(strings._("gui_settings_button_save")) - self.save_button.clicked.connect(self.save_clicked) - buttons_layout = QtWidgets.QHBoxLayout() - buttons_layout.addWidget(self.error_label, stretch=1) - buttons_layout.addSpacing(20) - buttons_layout.addWidget(self.test_tor_button) - buttons_layout.addWidget(self.save_button) - - # Main layout - main_layout = QtWidgets.QVBoxLayout() - main_layout.addWidget(columns_wrapper) - main_layout.addStretch() - main_layout.addWidget(self.tor_con) - main_layout.addStretch() - main_layout.addLayout(buttons_layout) - self.main_widget = QtWidgets.QWidget() - self.main_widget.setLayout(main_layout) - - # Tabs are active label - active_tabs_label = QtWidgets.QLabel( - strings._("gui_settings_stop_active_tabs_label") - ) - active_tabs_label.setAlignment(QtCore.Qt.AlignHCenter) - - # Active tabs layout - active_tabs_layout = QtWidgets.QVBoxLayout() - active_tabs_layout.addStretch() - active_tabs_layout.addWidget(active_tabs_label) - active_tabs_layout.addStretch() - self.active_tabs_widget = QtWidgets.QWidget() - self.active_tabs_widget.setLayout(active_tabs_layout) - - layout = QtWidgets.QVBoxLayout() - layout.addWidget(self.main_widget) - layout.addWidget(self.active_tabs_widget) - self.setLayout(layout) - - self.active_tabs_changed(are_tabs_active) - self.reload_settings() - - def reload_settings(self): - # Load settings, and fill them in - self.old_settings = Settings(self.common) - self.old_settings.load() - - connection_type = self.old_settings.get("connection_type") - if connection_type == "bundled": - if self.connection_type_bundled_radio.isEnabled(): - self.connection_type_bundled_radio.setChecked(True) - else: - # If bundled tor is disabled, fallback to automatic - self.connection_type_automatic_radio.setChecked(True) - elif connection_type == "automatic": - self.connection_type_automatic_radio.setChecked(True) - elif connection_type == "control_port": - self.connection_type_control_port_radio.setChecked(True) - elif connection_type == "socket_file": - self.connection_type_socket_file_radio.setChecked(True) - self.connection_type_control_port_extras_address.setText( - self.old_settings.get("control_port_address") - ) - self.connection_type_control_port_extras_port.setText( - str(self.old_settings.get("control_port_port")) - ) - self.connection_type_socket_file_extras_path.setText( - self.old_settings.get("socket_file_path") - ) - self.connection_type_socks_address.setText( - self.old_settings.get("socks_address") - ) - self.connection_type_socks_port.setText( - str(self.old_settings.get("socks_port")) - ) - auth_type = self.old_settings.get("auth_type") - if auth_type == "no_auth": - self.authenticate_no_auth_checkbox.setCheckState(QtCore.Qt.Checked) - else: - self.authenticate_no_auth_checkbox.setChecked(QtCore.Qt.Unchecked) - self.authenticate_password_extras_password.setText( - self.old_settings.get("auth_password") - ) - - if self.old_settings.get("bridges_enabled"): - self.bridge_use_checkbox.setCheckState(QtCore.Qt.Checked) - self.bridge_settings.show() - - bridges_type = self.old_settings.get("bridges_type") - if bridges_type == "built-in": - self.bridge_builtin_radio.setChecked(True) - self.bridge_builtin_dropdown.show() - self.bridge_moat_radio.setChecked(False) - self.bridge_moat_textbox_options.hide() - self.bridge_custom_radio.setChecked(False) - self.bridge_custom_textbox_options.hide() - - bridges_builtin_pt = self.old_settings.get("bridges_builtin_pt") - if bridges_builtin_pt == "obfs4": - self.bridge_builtin_dropdown.setCurrentText("obfs4") - elif bridges_builtin_pt == "meek-azure": - self.bridge_builtin_dropdown.setCurrentText("meek-azure") - else: - self.bridge_builtin_dropdown.setCurrentText("snowflake") - - self.bridge_moat_textbox_options.hide() - self.bridge_custom_textbox_options.hide() - - elif bridges_type == "moat": - self.bridge_builtin_radio.setChecked(False) - self.bridge_builtin_dropdown.hide() - self.bridge_moat_radio.setChecked(True) - self.bridge_moat_textbox_options.show() - self.bridge_custom_radio.setChecked(False) - self.bridge_custom_textbox_options.hide() - - else: - self.bridge_builtin_radio.setChecked(False) - self.bridge_builtin_dropdown.hide() - self.bridge_moat_radio.setChecked(False) - self.bridge_moat_textbox_options.hide() - self.bridge_custom_radio.setChecked(True) - self.bridge_custom_textbox_options.show() - - bridges_moat = self.old_settings.get("bridges_moat") - self.bridge_moat_textbox.document().setPlainText(bridges_moat) - bridges_custom = self.old_settings.get("bridges_custom") - self.bridge_custom_textbox.document().setPlainText(bridges_custom) - - else: - self.bridge_use_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.bridge_settings.hide() - - def active_tabs_changed(self, are_tabs_active): - if are_tabs_active: - self.main_widget.hide() - self.active_tabs_widget.show() - else: - self.main_widget.show() - self.active_tabs_widget.hide() - - def connection_type_bundled_toggled(self, checked): - """ - Connection type bundled was toggled - """ - self.common.log("TorSettingsTab", "connection_type_bundled_toggled") - if checked: - self.tor_settings_group.hide() - self.connection_type_socks.hide() - self.connection_type_bridges_radio_group.show() - - def bridge_use_checkbox_state_changed(self, state): - """ - 'Use a bridge' checkbox changed - """ - if state == QtCore.Qt.Checked: - self.bridge_settings.show() - self.bridge_builtin_radio.click() - self.bridge_builtin_dropdown.setCurrentText("obfs4") - else: - self.bridge_settings.hide() - - def bridge_builtin_radio_toggled(self, checked): - """ - 'Select a built-in bridge' radio button toggled - """ - if checked: - self.bridge_builtin_dropdown.show() - self.bridge_custom_textbox_options.hide() - self.bridge_moat_textbox_options.hide() - - def bridge_builtin_dropdown_changed(self, selection): - """ - Build-in bridge selection changed - """ - if selection == "meek-azure": - # Alert the user about meek's costliness if it looks like they're turning it on - if not self.old_settings.get("bridges_builtin_pt") == "meek-azure": - Alert( - self.common, - strings._("gui_settings_meek_lite_expensive_warning"), - QtWidgets.QMessageBox.Warning, - ) - - def bridge_moat_radio_toggled(self, checked): - """ - Moat (request bridge) bridges option was toggled. If checked, show moat bridge options. - """ - if checked: - self.bridge_builtin_dropdown.hide() - self.bridge_custom_textbox_options.hide() - self.bridge_moat_textbox_options.show() - - def bridge_moat_button_clicked(self): - """ - Request new bridge button clicked - """ - self.common.log("TorSettingsTab", "bridge_moat_button_clicked") - - moat_dialog = MoatDialog(self.common, self.meek) - moat_dialog.got_bridges.connect(self.bridge_moat_got_bridges) - moat_dialog.exec_() - - def bridge_moat_got_bridges(self, bridges): - """ - Got new bridges from moat - """ - self.common.log("TorSettingsTab", "bridge_moat_got_bridges") - self.bridge_moat_textbox.document().setPlainText(bridges) - self.bridge_moat_textbox.show() - - def bridge_custom_radio_toggled(self, checked): - """ - Custom bridges option was toggled. If checked, show custom bridge options. - """ - if checked: - self.bridge_builtin_dropdown.hide() - self.bridge_moat_textbox_options.hide() - self.bridge_custom_textbox_options.show() - - def connection_type_automatic_toggled(self, checked): - """ - Connection type automatic was toggled. If checked, hide authentication fields. - """ - self.common.log("TorSettingsTab", "connection_type_automatic_toggled") - if checked: - self.tor_settings_group.hide() - self.connection_type_socks.hide() - self.connection_type_bridges_radio_group.hide() - - def connection_type_control_port_toggled(self, checked): - """ - Connection type control port was toggled. If checked, show extra fields - for Tor control address and port. If unchecked, hide those extra fields. - """ - self.common.log("TorSettingsTab", "connection_type_control_port_toggled") - if checked: - self.tor_settings_group.show() - self.connection_type_control_port_extras.show() - self.connection_type_socks.show() - self.connection_type_bridges_radio_group.hide() - else: - self.connection_type_control_port_extras.hide() - - def connection_type_socket_file_toggled(self, checked): - """ - Connection type socket file was toggled. If checked, show extra fields - for socket file. If unchecked, hide those extra fields. - """ - self.common.log("TorSettingsTab", "connection_type_socket_file_toggled") - if checked: - self.tor_settings_group.show() - self.connection_type_socket_file_extras.show() - self.connection_type_socks.show() - self.connection_type_bridges_radio_group.hide() - else: - self.connection_type_socket_file_extras.hide() - - def authenticate_no_auth_toggled(self, checked): - """ - Authentication option no authentication was toggled. - """ - self.common.log("TorSettingsTab", "authenticate_no_auth_toggled") - if checked: - self.authenticate_password_extras.hide() - else: - self.authenticate_password_extras.show() - - def test_tor_clicked(self): - """ - Test Tor Settings button clicked. With the given settings, see if we can - successfully connect and authenticate to Tor. - """ - self.common.log("TorSettingsTab", "test_tor_clicked") - - self.error_label.setText("") - - settings = self.settings_from_fields() - if not settings: - return - - self.test_tor_button.hide() - self.save_button.hide() - - self.test_onion = Onion( - self.common, - use_tmp_dir=True, - get_tor_paths=self.common.gui.get_tor_paths, - ) - - self.tor_con_type = "test" - self.tor_con.show() - self.tor_con.start(settings, True, self.test_onion) - - def save_clicked(self): - """ - Save button clicked. Save current settings to disk. - """ - self.common.log("TorSettingsTab", "save_clicked") - - self.error_label.setText("") - - def changed(s1, s2, keys): - """ - Compare the Settings objects s1 and s2 and return true if any values - have changed for the given keys. - """ - for key in keys: - if s1.get(key) != s2.get(key): - return True - return False - - settings = self.settings_from_fields() - if settings: - # Save the new settings - settings.save() - - # If Tor isn't connected, or if Tor settings have changed, Reinitialize - # the Onion object - reboot_onion = False - if not self.common.gui.local_only: - if self.common.gui.onion.is_authenticated(): - self.common.log( - "TorSettingsTab", "save_clicked", "Connected to Tor" - ) - - if changed( - settings, - self.old_settings, - [ - "connection_type", - "control_port_address", - "control_port_port", - "socks_address", - "socks_port", - "socket_file_path", - "auth_type", - "auth_password", - "bridges_enabled", - "bridges_type", - "bridges_builtin_pt", - "bridges_moat", - "bridges_custom", - ], - ): - - reboot_onion = True - - else: - self.common.log( - "TorSettingsTab", "save_clicked", "Not connected to Tor" - ) - # Tor isn't connected, so try connecting - reboot_onion = True - - # Do we need to reinitialize Tor? - if reboot_onion: - # Tell the tabs that Tor is disconnected - self.tor_is_disconnected.emit() - - # Reinitialize the Onion object - self.common.log( - "TorSettingsTab", "save_clicked", "rebooting the Onion" - ) - self.common.gui.onion.cleanup() - - self.test_tor_button.hide() - self.save_button.hide() - - self.tor_con_type = "save" - self.tor_con.show() - self.tor_con.start(settings) - else: - self.close_this_tab.emit() - else: - self.close_this_tab.emit() - - def tor_con_success(self): - """ - Finished testing tor connection. - """ - self.tor_con.hide() - self.test_tor_button.show() - self.save_button.show() - - if self.tor_con_type == "test": - Alert( - self.common, - strings._("settings_test_success").format( - self.test_onion.tor_version, - self.test_onion.supports_ephemeral, - self.test_onion.supports_stealth, - self.test_onion.supports_v3_onions, - ), - title=strings._("gui_settings_connection_type_test_button"), - ) - self.test_onion.cleanup() - - elif self.tor_con_type == "save": - if ( - self.common.gui.onion.is_authenticated() - and not self.tor_con.wasCanceled() - ): - # Tell the tabs that Tor is connected - self.tor_is_connected.emit() - # Close the tab - self.close_this_tab.emit() - - self.tor_con_type = None - - def tor_con_fail(self, msg): - """ - Finished testing tor connection. - """ - self.tor_con.hide() - self.test_tor_button.show() - self.save_button.show() - - self.error_label.setText(msg) - - if self.tor_con_type == "test": - self.test_onion.cleanup() - - self.tor_con_type = None - - def settings_from_fields(self): - """ - Return a Settings object that's full of values from the settings dialog. - """ - self.common.log("TorSettingsTab", "settings_from_fields") - settings = Settings(self.common) - settings.load() # To get the last update timestamp - - # Tor connection - if self.connection_type_bundled_radio.isChecked(): - settings.set("connection_type", "bundled") - if self.connection_type_automatic_radio.isChecked(): - settings.set("connection_type", "automatic") - if self.connection_type_control_port_radio.isChecked(): - settings.set("connection_type", "control_port") - if self.connection_type_socket_file_radio.isChecked(): - settings.set("connection_type", "socket_file") - - settings.set( - "control_port_address", - self.connection_type_control_port_extras_address.text(), - ) - settings.set( - "control_port_port", self.connection_type_control_port_extras_port.text() - ) - settings.set( - "socket_file_path", self.connection_type_socket_file_extras_path.text() - ) - - settings.set("socks_address", self.connection_type_socks_address.text()) - settings.set("socks_port", self.connection_type_socks_port.text()) - - if self.authenticate_no_auth_checkbox.checkState() == QtCore.Qt.Checked: - settings.set("auth_type", "no_auth") - else: - settings.set("auth_type", "password") - - settings.set("auth_password", self.authenticate_password_extras_password.text()) - - # Whether we use bridges - if self.bridge_use_checkbox.checkState() == QtCore.Qt.Checked: - settings.set("bridges_enabled", True) - - if self.bridge_builtin_radio.isChecked(): - settings.set("bridges_type", "built-in") - - selection = self.bridge_builtin_dropdown.currentText() - settings.set("bridges_builtin_pt", selection) - - if self.bridge_moat_radio.isChecked(): - settings.set("bridges_type", "moat") - moat_bridges = self.bridge_moat_textbox.toPlainText() - if ( - self.connection_type_bundled_radio.isChecked() - and moat_bridges.strip() == "" - ): - self.error_label.setText( - strings._("gui_settings_moat_bridges_invalid") - ) - return False - - settings.set("bridges_moat", moat_bridges) - - if self.bridge_custom_radio.isChecked(): - settings.set("bridges_type", "custom") - - new_bridges = [] - bridges = self.bridge_custom_textbox.toPlainText().split("\n") - bridges_valid = False - for bridge in bridges: - if bridge != "": - # Check the syntax of the custom bridge to make sure it looks legitimate - ipv4_pattern = re.compile( - "(obfs4\s+)?(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]):([0-9]+)(\s+)([A-Z0-9]+)(.+)$" - ) - ipv6_pattern = re.compile( - "(obfs4\s+)?\[(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\]:[0-9]+\s+[A-Z0-9]+(.+)$" - ) - meek_lite_pattern = re.compile( - "(meek_lite)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)(\s)+url=(.+)(\s)+front=(.+)" - ) - snowflake_pattern = re.compile( - "(snowflake)(\s)+([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+:[0-9]+)(\s)+([0-9A-Z]+)" - ) - if ( - ipv4_pattern.match(bridge) - or ipv6_pattern.match(bridge) - or meek_lite_pattern.match(bridge) - or snowflake_pattern.match(bridge) - ): - new_bridges.append(bridge) - bridges_valid = True - - if bridges_valid: - new_bridges = "\n".join(new_bridges) + "\n" - settings.set("bridges_custom", new_bridges) - else: - self.error_label.setText( - strings._("gui_settings_tor_bridges_invalid") - ) - return False - else: - settings.set("bridges_enabled", False) - - return settings - - def closeEvent(self, e): - self.common.log("TorSettingsTab", "closeEvent") - - # On close, if Tor isn't connected, then quit OnionShare altogether - if not self.common.gui.local_only: - if not self.common.gui.onion.is_authenticated(): - self.common.log( - "TorSettingsTab", - "closeEvent", - "Closing while not connected to Tor", - ) - - # Wait 1ms for the event loop to finish, then quit - QtCore.QTimer.singleShot(1, self.common.gui.qtapp.quit) - - def settings_have_changed(self): - # Global settings have changed - self.common.log("TorSettingsTab", "settings_have_changed") diff --git a/desktop/src/onionshare/update_checker.py b/desktop/src/onionshare/update_checker.py deleted file mode 100644 index e9dbc060..00000000 --- a/desktop/src/onionshare/update_checker.py +++ /dev/null @@ -1,232 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore -import datetime -import re -import socks -from distutils.version import LooseVersion as Version - -from onionshare_cli.settings import Settings - - -class UpdateCheckerCheckError(Exception): - """ - Error checking for updates because of some Tor connection issue, or because - the OnionShare website is down. - """ - - pass - - -class UpdateCheckerInvalidLatestVersion(Exception): - """ - Successfully downloaded the latest version, but it doesn't appear to be a - valid version string. - """ - - def __init__(self, latest_version): - self.latest_version = latest_version - - -class UpdateChecker(QtCore.QObject): - """ - Load http://elx57ue5uyfplgva.onion/latest-version.txt to see what the latest - version of OnionShare is. If the latest version is newer than the - installed version, alert the user. - - Only check at most once per day, unless force is True. - """ - - update_available = QtCore.Signal(str, str, str) - update_not_available = QtCore.Signal() - update_error = QtCore.Signal() - update_invalid_version = QtCore.Signal(str) - - def __init__(self, common, onion): - super(UpdateChecker, self).__init__() - - self.common = common - - self.common.log("UpdateChecker", "__init__") - self.onion = onion - - def check(self, force=False): - self.common.log("UpdateChecker", "check", f"force={force}") - # Load the settings - settings = Settings(self.common) - settings.load() - - # If force=True, then definitely check - if force: - check_for_updates = True - else: - check_for_updates = False - - # See if it's been 1 day since the last check - autoupdate_timestamp = settings.get("autoupdate_timestamp") - if autoupdate_timestamp: - last_checked = datetime.datetime.fromtimestamp(autoupdate_timestamp) - now = datetime.datetime.now() - - one_day = datetime.timedelta(days=1) - if now - last_checked > one_day: - check_for_updates = True - else: - check_for_updates = True - - # Check for updates - if check_for_updates: - self.common.log("UpdateChecker", "check", "checking for updates") - # Download the latest-version file over Tor - try: - # User agent string includes OnionShare version and platform - user_agent = f"OnionShare {self.common.version}, {self.common.platform}" - - # If the update is forced, add '?force=1' to the URL, to more - # accurately measure daily users - path = "/latest-version.txt" - if force: - path += "?force=1" - - if Version(self.onion.tor_version) >= Version("0.3.2.9"): - onion_domain = ( - "lldan5gahapx5k7iafb3s4ikijc4ni7gx5iywdflkba5y2ezyg6sjgyd.onion" - ) - else: - onion_domain = "elx57ue5uyfplgva.onion" - - self.common.log( - "UpdateChecker", "check", f"loading http://{onion_domain}{path}" - ) - - (socks_address, socks_port) = self.onion.get_tor_socks_port() - socks.set_default_proxy(socks.SOCKS5, socks_address, socks_port) - - s = socks.socksocket() - s.settimeout(15) # 15 second timeout - s.connect((onion_domain, 80)) - - http_request = f"GET {path} HTTP/1.0\r\n" - http_request += f"Host: {onion_domain}\r\n" - http_request += f"User-Agent: {user_agent}\r\n" - http_request += "\r\n" - s.sendall(http_request.encode("utf-8")) - - http_response = s.recv(1024) - latest_version = ( - http_response[http_response.find(b"\r\n\r\n") :] - .strip() - .decode("utf-8") - ) - - self.common.log( - "UpdateChecker", - "check", - f"latest OnionShare version: {latest_version}", - ) - - except Exception as e: - self.common.log("UpdateChecker", "check", str(e)) - self.update_error.emit() - raise UpdateCheckerCheckError - - # Validate that latest_version looks like a version string - # This regex is: 1-3 dot-separated numeric components - version_re = r"^(\d+\.)?(\d+\.)?(\d+)$" - if not re.match(version_re, latest_version): - self.update_invalid_version.emit(latest_version) - raise UpdateCheckerInvalidLatestVersion(latest_version) - - # Update the last checked timestamp (dropping the seconds and milliseconds) - timestamp = ( - datetime.datetime.now() - .replace(microsecond=0) - .replace(second=0) - .timestamp() - ) - # Re-load the settings first before saving, just in case they've changed since we started our thread - settings.load() - settings.set("autoupdate_timestamp", timestamp) - settings.save() - - # Do we need to update? - update_url = "https://onionshare.org" - installed_version = self.common.version - if installed_version < latest_version: - self.update_available.emit( - update_url, installed_version, latest_version - ) - return - - # No updates are available - self.update_not_available.emit() - - -class UpdateThread(QtCore.QThread): - update_available = QtCore.Signal(str, str, str) - update_not_available = QtCore.Signal() - update_error = QtCore.Signal() - update_invalid_version = QtCore.Signal(str) - - def __init__(self, common, onion, force=False): - super(UpdateThread, self).__init__() - - self.common = common - - self.common.log("UpdateThread", "__init__") - self.onion = onion - self.force = force - - def run(self): - self.common.log("UpdateThread", "run") - - u = UpdateChecker(self.common, self.onion) - u.update_available.connect(self._update_available) - u.update_not_available.connect(self._update_not_available) - u.update_error.connect(self._update_error) - u.update_invalid_version.connect(self._update_invalid_version) - - try: - u.check(force=self.force) - except Exception as e: - # If update check fails, silently ignore - self.common.log("UpdateThread", "run", str(e)) - pass - - def _update_available(self, update_url, installed_version, latest_version): - self.common.log("UpdateThread", "_update_available") - self.active = False - self.update_available.emit(update_url, installed_version, latest_version) - - def _update_not_available(self): - self.common.log("UpdateThread", "_update_not_available") - self.active = False - self.update_not_available.emit() - - def _update_error(self): - self.common.log("UpdateThread", "_update_error") - self.active = False - self.update_error.emit() - - def _update_invalid_version(self, latest_version): - self.common.log("UpdateThread", "_update_invalid_version") - self.active = False - self.update_invalid_version.emit(latest_version) diff --git a/desktop/src/onionshare/widgets.py b/desktop/src/onionshare/widgets.py deleted file mode 100644 index 761df212..00000000 --- a/desktop/src/onionshare/widgets.py +++ /dev/null @@ -1,156 +0,0 @@ -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -from PySide2 import QtCore, QtWidgets, QtGui -import qrcode - -from . import strings -from .gui_common import GuiCommon - - -class Alert(QtWidgets.QMessageBox): - """ - An alert box dialog. - """ - - def __init__( - self, - common, - message, - icon=QtWidgets.QMessageBox.NoIcon, - buttons=QtWidgets.QMessageBox.Ok, - autostart=True, - title="OnionShare", - ): - super(Alert, self).__init__(None) - - self.common = common - - self.common.log("Alert", "__init__") - - self.setWindowTitle(title) - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - self.setText(message) - self.setIcon(icon) - self.setStandardButtons(buttons) - - if autostart: - self.exec_() - - -class AddFileDialog(QtWidgets.QFileDialog): - """ - Overridden version of QFileDialog which allows us to select folders as well - as, or instead of, files. For adding files/folders to share. - - Note that this dialog can't be used in macOS, only in Windows, Linux, and BSD. - This is because the macOS sandbox requires native dialogs, and this is a Qt5 - dialog. - """ - - def __init__(self, common, *args, **kwargs): - QtWidgets.QFileDialog.__init__(self, *args, **kwargs) - - self.common = common - self.common.log("AddFileDialog", "__init__") - - self.setOption(self.DontUseNativeDialog, True) - self.setOption(self.ReadOnly, True) - self.setOption(self.ShowDirsOnly, False) - self.setFileMode(self.ExistingFiles) - tree_view = self.findChild(QtWidgets.QTreeView) - tree_view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - list_view = self.findChild(QtWidgets.QListView, "listView") - list_view.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection) - - def accept(self): - self.common.log("AddFileDialog", "accept") - QtWidgets.QDialog.accept(self) - - -class MinimumSizeWidget(QtWidgets.QWidget): - """ - An empty widget with a minimum width and height, just to force layouts to behave - """ - - def __init__(self, width, height): - super(MinimumSizeWidget, self).__init__() - self.setMinimumWidth(width) - self.setMinimumHeight(height) - - -class Image(qrcode.image.base.BaseImage): - """ - A custom Image class, for use with the QR Code pixmap. - """ - - def __init__(self, border, width, box_size): - self.border = border - self.width = width - self.box_size = box_size - size = (width + border * 2) * box_size - self._image = QtGui.QImage(size, size, QtGui.QImage.Format_RGB16) - self._image.fill(QtCore.Qt.white) - - def pixmap(self): - return QtGui.QPixmap.fromImage(self._image) - - def drawrect(self, row, col): - painter = QtGui.QPainter(self._image) - painter.fillRect( - (col + self.border) * self.box_size, - (row + self.border) * self.box_size, - self.box_size, - self.box_size, - QtCore.Qt.black, - ) - - def save(self, stream, kind=None): - pass - - -class QRCodeDialog(QtWidgets.QDialog): - """ - A dialog showing a QR code. - """ - - def __init__(self, common, title, text): - super(QRCodeDialog, self).__init__() - - self.common = common - - self.common.log("QrCode", "__init__") - - self.qr_label_title = QtWidgets.QLabel(self) - self.qr_label_title.setText(title) - self.qr_label_title.setAlignment(QtCore.Qt.AlignCenter) - - self.qr_label = QtWidgets.QLabel(self) - self.qr_label.setPixmap(qrcode.make(text, image_factory=Image).pixmap()) - self.qr_label.setScaledContents(True) - self.qr_label.setFixedSize(350, 350) - - self.setWindowTitle(strings._("gui_qr_code_dialog_title")) - self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))) - layout = QtWidgets.QVBoxLayout(self) - layout.addWidget(self.qr_label_title) - layout.addWidget(self.qr_label) - - self.exec_() -- cgit v1.2.3-54-g00ecf From 5aa5c9ebcc9896e37a45c6c89862a01d419f0649 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:17:54 -0800 Subject: Switch from briefcase to poetry --- desktop/poetry.lock | 864 +++++++++++++++++++++++++++++++++++++++++++++++++ desktop/pyproject.toml | 56 ++-- 2 files changed, 883 insertions(+), 37 deletions(-) create mode 100644 desktop/poetry.lock diff --git a/desktop/poetry.lock b/desktop/poetry.lock new file mode 100644 index 00000000..c3aaabe0 --- /dev/null +++ b/desktop/poetry.lock @@ -0,0 +1,864 @@ +[[package]] +name = "bidict" +version = "0.21.4" +description = "The bidirectional mapping library for Python." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "black" +version = "21.12b0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=7.1.2" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0,<1" +platformdirs = ">=2" +tomli = ">=0.2.6,<2.0.0" +typing-extensions = ">=3.10.0.0" + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +python2 = ["typed-ast (>=1.4.3)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "cepa" +version = "1.8.3" +description = "Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/)." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "certifi" +version = "2021.10.8" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "cffi" +version = "1.15.0" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.0.9" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "7.1.2" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "colorama" +version = "0.4.4" +description = "Cross-platform colored terminal text." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "cx-freeze" +version = "6.9" +description = "Create standalone executables from Python scripts" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cx-logging = {version = ">=3.0", markers = "sys_platform == \"win32\""} +importlib-metadata = ">=4.3.1" + +[[package]] +name = "cx-logging" +version = "3.0" +description = "Python and C interfaces for logging" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "dnspython" +version = "2.1.0" +description = "DNS toolkit" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +dnssec = ["cryptography (>=2.6)"] +doh = ["requests", "requests-toolbelt"] +idna = ["idna (>=2.1)"] +curio = ["curio (>=1.2)", "sniffio (>=1.1)"] +trio = ["trio (>=0.14.0)", "sniffio (>=1.1)"] + +[[package]] +name = "eventlet" +version = "0.33.0" +description = "Highly concurrent networking library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +dnspython = ">=1.15.0" +greenlet = ">=0.3" +six = ">=1.10.0" + +[[package]] +name = "flask" +version = "1.1.4" +description = "A simple framework for building complex web applications." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +click = ">=5.1,<8.0" +itsdangerous = ">=0.24,<2.0" +Jinja2 = ">=2.10.1,<3.0" +Werkzeug = ">=0.15,<2.0" + +[package.extras] +dev = ["pytest", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] +docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-issues"] +dotenv = ["python-dotenv"] + +[[package]] +name = "flask-socketio" +version = "5.0.1" +description = "Socket.IO integration for Flask applications" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +Flask = ">=0.9" +python-socketio = ">=5.0.2" + +[[package]] +name = "greenlet" +version = "1.1.2" +description = "Lightweight in-process concurrent programming" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" + +[package.extras] +docs = ["sphinx"] + +[[package]] +name = "idna" +version = "3.3" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "importlib-metadata" +version = "4.9.0" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] + +[[package]] +name = "itsdangerous" +version = "1.1.0" +description = "Various helpers to pass data to untrusted environments and back." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "jinja2" +version = "2.11.3" +description = "A very fast and expressive template engine." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.dependencies] +MarkupSafe = ">=0.23" + +[package.extras] +i18n = ["Babel (>=0.8)"] + +[[package]] +name = "markupsafe" +version = "2.0.1" +description = "Safely add untrusted strings to HTML/XML markup." +category = "main" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "onionshare-cli" +version = "2.4" +description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." +category = "main" +optional = false +python-versions = "^3.6" +develop = false + +[package.dependencies] +cepa = "1.8.3" +click = "*" +colorama = "*" +eventlet = "*" +flask = "1.1.4" +flask-socketio = "5.0.1" +psutil = "*" +pynacl = "^1.4.0" +pysocks = "*" +requests = {version = "*", extras = ["socks"]} +unidecode = "*" +urllib3 = "*" + +[package.source] +type = "directory" +url = "../cli" + +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "platformdirs" +version = "2.4.0" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] +test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] + +[[package]] +name = "psutil" +version = "5.8.0" +description = "Cross-platform lib for process and system monitoring in Python." +category = "main" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.extras] +test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pynacl" +version = "1.4.0" +description = "Python binding to the Networking and Cryptography (NaCl) library" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +cffi = ">=1.4.1" +six = "*" + +[package.extras] +docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] +tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] + +[[package]] +name = "pyside2" +version = "5.15.2" +description = "Python bindings for the Qt cross-platform application and UI framework" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.10" + +[package.dependencies] +shiboken2 = "5.15.2" + +[[package]] +name = "pysocks" +version = "1.7.1" +description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "python-engineio" +version = "4.3.0" +description = "Engine.IO server and client for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +asyncio_client = ["aiohttp (>=3.4)"] +client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] + +[[package]] +name = "python-socketio" +version = "5.5.0" +description = "Socket.IO server and client for Python" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +bidict = ">=0.21.0" +python-engineio = ">=4.3.0" + +[package.extras] +asyncio_client = ["aiohttp (>=3.4)"] +client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"] + +[[package]] +name = "qrcode" +version = "7.3.1" +description = "QR Code image generator" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +all = ["zest.releaser", "tox", "pytest", "pytest", "pytest-cov", "pillow"] +dev = ["tox", "pytest"] +maintainer = ["zest.releaser"] +pil = ["pillow"] +test = ["pytest", "pytest-cov"] + +[[package]] +name = "requests" +version = "2.26.0" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +PySocks = {version = ">=1.5.6,<1.5.7 || >1.5.7", optional = true, markers = "extra == \"socks\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "shiboken2" +version = "5.15.2" +description = "Python / C++ bindings helper module" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <3.10" + +[[package]] +name = "six" +version = "1.16.0" +description = "Python 2 and 3 compatibility utilities" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" + +[[package]] +name = "tomli" +version = "1.2.3" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "typing-extensions" +version = "4.0.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "unidecode" +version = "1.3.2" +description = "ASCII transliterations of Unicode text" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "urllib3" +version = "1.26.7" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" + +[package.extras] +brotli = ["brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "werkzeug" +version = "1.0.1" +description = "The comprehensive WSGI web application library." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"] +watchdog = ["watchdog"] + +[[package]] +name = "zipp" +version = "3.6.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + +[metadata] +lock-version = "1.1" +python-versions = ">=3.9,<3.10" +content-hash = "fef2babd1d9cc50bdb8c183a72619123e66ea02c88b20257653ad31ac2c9b7ee" + +[metadata.files] +bidict = [ + {file = "bidict-0.21.4-py3-none-any.whl", hash = "sha256:3ac67daa353ecf853a1df9d3e924f005e729227a60a8dbada31a4c31aba7f654"}, + {file = "bidict-0.21.4.tar.gz", hash = "sha256:42c84ffbe6f8de898af6073b4be9ea7ccedcd78d3474aa844c54e49d5a079f6f"}, +] +black = [ + {file = "black-21.12b0-py3-none-any.whl", hash = "sha256:a615e69ae185e08fdd73e4715e260e2479c861b5740057fde6e8b4e3b7dd589f"}, + {file = "black-21.12b0.tar.gz", hash = "sha256:77b80f693a569e2e527958459634f18df9b0ba2625ba4e0c2d5da5be42e6f2b3"}, +] +cepa = [ + {file = "cepa-1.8.3.tar.gz", hash = "sha256:1dc6f0b324d37a2ed2ca274648ece8fd2c96a1d2f440f58c0ca17afd4b5ede7a"}, +] +certifi = [ + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, +] +cffi = [ + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, + {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, +] +click = [ + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, +] +colorama = [ + {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, + {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, +] +cx-freeze = [ + {file = "cx_Freeze-6.9-cp310-cp310-win32.whl", hash = "sha256:776d4fb68a4831691acbd3c374362b9b48ce2e568514a73c3d4cb14d5dcf1470"}, + {file = "cx_Freeze-6.9-cp310-cp310-win_amd64.whl", hash = "sha256:243f36d35a034a409cd6247d8cb5d1fbfd7374e3e668e813d0811f64d6bd5ed3"}, + {file = "cx_Freeze-6.9-cp36-cp36m-win32.whl", hash = "sha256:ffc855eabc735b693e2d604d71dce6d52d78a6ba1070c55d51e786dd68ed232c"}, + {file = "cx_Freeze-6.9-cp36-cp36m-win_amd64.whl", hash = "sha256:fe4e32a0c75b2b54491882926bf3ba12f8a3d589822a68a8be7c09f1dcca5546"}, + {file = "cx_Freeze-6.9-cp37-cp37m-win32.whl", hash = "sha256:99c292e7a31cb343efc0cf47f82220a44a4a3b8776651624cd8ee03c23104940"}, + {file = "cx_Freeze-6.9-cp37-cp37m-win_amd64.whl", hash = "sha256:738ab22f3a3f6bc220b16dccf2aa0603c3cd271b2a7a9d9480dab82311308b23"}, + {file = "cx_Freeze-6.9-cp38-cp38-win32.whl", hash = "sha256:c1c75df572858e623d0aa39771cd984c0abd8aacb43b2aca2d12d0bc95f25566"}, + {file = "cx_Freeze-6.9-cp38-cp38-win_amd64.whl", hash = "sha256:0788c895c47fdcf375151ce78ff42336c01aca7bc43daecb8f8f8356cdc42b43"}, + {file = "cx_Freeze-6.9-cp39-cp39-win32.whl", hash = "sha256:a31f5ddbc80b29e297370d868791470b0e3e9062db45038c23293a76ed039018"}, + {file = "cx_Freeze-6.9-cp39-cp39-win_amd64.whl", hash = "sha256:30708f603076713c0a839cdfb34f4126d68e9d61afb3d9a59daa9cf252033872"}, + {file = "cx_Freeze-6.9.tar.gz", hash = "sha256:673aa3199af2ef87fc03a43a30e5d78b27ced2cedde925da89c55b5657da267b"}, +] +cx-logging = [ + {file = "cx_Logging-3.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:9fcd297e5c51470521c47eff0f86ba844aeca6be97e13c3e2114ebdf03fa3c96"}, + {file = "cx_Logging-3.0-cp36-cp36m-win32.whl", hash = "sha256:0df4be47c5022cc54316949e283403214568ef599817ced0c0972183d6d4fabb"}, + {file = "cx_Logging-3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:203ca92ee7c15d5dfe1fcdfcef7b39d0123eba5c6d8c2388b6e7db6b961a5362"}, + {file = "cx_Logging-3.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:20daa71b2a30f61d09bcf55dbda002c10f0c7c691f53cb393fc6485410fa2484"}, + {file = "cx_Logging-3.0-cp37-cp37m-win32.whl", hash = "sha256:5be5f905e8d34a3326e28d428674cdc2d57912fdf6e25b8676d63f76294eb4e0"}, + {file = "cx_Logging-3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:04e4b61e2636dc8ae135937655af6626362aefc7f6175e86888a244b61001823"}, + {file = "cx_Logging-3.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:1bf0ebc79a7baa331c7deaf57088c234b82710286dfad453ff0c55eee0122b72"}, + {file = "cx_Logging-3.0-cp38-cp38-win32.whl", hash = "sha256:d98a59a47e99fa430b3f6d2a979e27509852d2c43e204f43bd0168e7ec97f469"}, + {file = "cx_Logging-3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bb2e91019e5905415f795eef994de60ace5ae186fc4fe3d358e2d8feebb24992"}, + {file = "cx_Logging-3.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:b6f4a9b750e02a180517f779d174a1c7db651981cd37e5623235b87da9774dfd"}, + {file = "cx_Logging-3.0-cp39-cp39-win32.whl", hash = "sha256:e7cca28e8ee4082654b6062cc4d06f83d48f1a7e2d152bab020c9e3e373afb90"}, + {file = "cx_Logging-3.0-cp39-cp39-win_amd64.whl", hash = "sha256:302e9c4f65a936c288a4fa59a90e7e142d9ef994aa29676731acafdcccdbb3f5"}, + {file = "cx_Logging-3.0.tar.gz", hash = "sha256:ba8a7465facf7b98d8f494030fb481a2e8aeee29dc191e10383bb54ed42bdb34"}, +] +dnspython = [ + {file = "dnspython-2.1.0-py3-none-any.whl", hash = "sha256:95d12f6ef0317118d2a1a6fc49aac65ffec7eb8087474158f42f26a639135216"}, + {file = "dnspython-2.1.0.zip", hash = "sha256:e4a87f0b573201a0f3727fa18a516b055fd1107e0e5477cded4a2de497df1dd4"}, +] +eventlet = [ + {file = "eventlet-0.33.0-py2.py3-none-any.whl", hash = "sha256:d10a8fcc9e33381905d9873303fde96ebe3541c03fb795055d2c7347dce0639c"}, + {file = "eventlet-0.33.0.tar.gz", hash = "sha256:80144f489c1bb273a51b6f96ff9785a382d2866b9bab1f5bd748385019f4141f"}, +] +flask = [ + {file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"}, + {file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"}, +] +flask-socketio = [ + {file = "Flask-SocketIO-5.0.1.tar.gz", hash = "sha256:5c4319f5214ada20807857dc8fdf3dc7d2afe8d6dd38f5c516c72e2be47d2227"}, + {file = "Flask_SocketIO-5.0.1-py2.py3-none-any.whl", hash = "sha256:5d9a4438bafd806c5a3b832e74b69758781a8ee26fb6c9b1dbdda9b4fced432e"}, +] +greenlet = [ + {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, + {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, + {file = "greenlet-1.1.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:833e1551925ed51e6b44c800e71e77dacd7e49181fdc9ac9a0bf3714d515785d"}, + {file = "greenlet-1.1.2-cp27-cp27m-win32.whl", hash = "sha256:aa5b467f15e78b82257319aebc78dd2915e4c1436c3c0d1ad6f53e47ba6e2713"}, + {file = "greenlet-1.1.2-cp27-cp27m-win_amd64.whl", hash = "sha256:40b951f601af999a8bf2ce8c71e8aaa4e8c6f78ff8afae7b808aae2dc50d4c40"}, + {file = "greenlet-1.1.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:95e69877983ea39b7303570fa6760f81a3eec23d0e3ab2021b7144b94d06202d"}, + {file = "greenlet-1.1.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:356b3576ad078c89a6107caa9c50cc14e98e3a6c4874a37c3e0273e4baf33de8"}, + {file = "greenlet-1.1.2-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8639cadfda96737427330a094476d4c7a56ac03de7265622fcf4cfe57c8ae18d"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, + {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, + {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, + {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, + {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, + {file = "greenlet-1.1.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:fa877ca7f6b48054f847b61d6fa7bed5cebb663ebc55e018fda12db09dcc664c"}, + {file = "greenlet-1.1.2-cp35-cp35m-win32.whl", hash = "sha256:7cbd7574ce8e138bda9df4efc6bf2ab8572c9aff640d8ecfece1b006b68da963"}, + {file = "greenlet-1.1.2-cp35-cp35m-win_amd64.whl", hash = "sha256:903bbd302a2378f984aef528f76d4c9b1748f318fe1294961c072bdc7f2ffa3e"}, + {file = "greenlet-1.1.2-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:049fe7579230e44daef03a259faa24511d10ebfa44f69411d99e6a184fe68073"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:dd0b1e9e891f69e7675ba5c92e28b90eaa045f6ab134ffe70b52e948aa175b3c"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:7418b6bfc7fe3331541b84bb2141c9baf1ec7132a7ecd9f375912eca810e714e"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, + {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, + {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, + {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, + {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fdcec0b8399108577ec290f55551d926d9a1fa6cad45882093a7a07ac5ec147b"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:93f81b134a165cc17123626ab8da2e30c0455441d4ab5576eed73a64c025b25c"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, + {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, + {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, + {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, + {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:eb6ea6da4c787111adf40f697b4e58732ee0942b5d3bd8f435277643329ba627"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:f3acda1924472472ddd60c29e5b9db0cec629fbe3c5c5accb74d6d6d14773478"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, + {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, + {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, + {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, + {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:572e1787d1460da79590bf44304abbc0a2da944ea64ec549188fa84d89bba7ab"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:be5f425ff1f5f4b3c1e33ad64ab994eed12fc284a6ea71c5243fd564502ecbe5"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, + {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, + {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, + {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, + {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, +] +idna = [ + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.9.0-py3-none-any.whl", hash = "sha256:e8b45564028bc25f8c99f546616112a6df5de6655893d7eb74c9a99680dc9751"}, + {file = "importlib_metadata-4.9.0.tar.gz", hash = "sha256:ee50794eccb0ec340adbc838344ebb9a6ff2bcba78f752d31fc716497e2149d6"}, +] +itsdangerous = [ + {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"}, + {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, +] +jinja2 = [ + {file = "Jinja2-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"}, + {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"}, +] +markupsafe = [ + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, +] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] +onionshare-cli = [] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +platformdirs = [ + {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, + {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, +] +psutil = [ + {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, + {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, + {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:12d844996d6c2b1d3881cfa6fa201fd635971869a9da945cf6756105af73d2df"}, + {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:02b8292609b1f7fcb34173b25e48d0da8667bc85f81d7476584d889c6e0f2131"}, + {file = "psutil-5.8.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6ffe81843131ee0ffa02c317186ed1e759a145267d54fdef1bc4ea5f5931ab60"}, + {file = "psutil-5.8.0-cp27-none-win32.whl", hash = "sha256:ea313bb02e5e25224e518e4352af4bf5e062755160f77e4b1767dd5ccb65f876"}, + {file = "psutil-5.8.0-cp27-none-win_amd64.whl", hash = "sha256:5da29e394bdedd9144c7331192e20c1f79283fb03b06e6abd3a8ae45ffecee65"}, + {file = "psutil-5.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:74fb2557d1430fff18ff0d72613c5ca30c45cdbfcddd6a5773e9fc1fe9364be8"}, + {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:74f2d0be88db96ada78756cb3a3e1b107ce8ab79f65aa885f76d7664e56928f6"}, + {file = "psutil-5.8.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:99de3e8739258b3c3e8669cb9757c9a861b2a25ad0955f8e53ac662d66de61ac"}, + {file = "psutil-5.8.0-cp36-cp36m-win32.whl", hash = "sha256:36b3b6c9e2a34b7d7fbae330a85bf72c30b1c827a4366a07443fc4b6270449e2"}, + {file = "psutil-5.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:52de075468cd394ac98c66f9ca33b2f54ae1d9bff1ef6b67a212ee8f639ec06d"}, + {file = "psutil-5.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c6a5fd10ce6b6344e616cf01cc5b849fa8103fbb5ba507b6b2dee4c11e84c935"}, + {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:61f05864b42fedc0771d6d8e49c35f07efd209ade09a5afe6a5059e7bb7bf83d"}, + {file = "psutil-5.8.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:0dd4465a039d343925cdc29023bb6960ccf4e74a65ad53e768403746a9207023"}, + {file = "psutil-5.8.0-cp37-cp37m-win32.whl", hash = "sha256:1bff0d07e76114ec24ee32e7f7f8d0c4b0514b3fae93e3d2aaafd65d22502394"}, + {file = "psutil-5.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:fcc01e900c1d7bee2a37e5d6e4f9194760a93597c97fee89c4ae51701de03563"}, + {file = "psutil-5.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6223d07a1ae93f86451d0198a0c361032c4c93ebd4bf6d25e2fb3edfad9571ef"}, + {file = "psutil-5.8.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d225cd8319aa1d3c85bf195c4e07d17d3cd68636b8fc97e6cf198f782f99af28"}, + {file = "psutil-5.8.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:28ff7c95293ae74bf1ca1a79e8805fcde005c18a122ca983abf676ea3466362b"}, + {file = "psutil-5.8.0-cp38-cp38-win32.whl", hash = "sha256:ce8b867423291cb65cfc6d9c4955ee9bfc1e21fe03bb50e177f2b957f1c2469d"}, + {file = "psutil-5.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:90f31c34d25b1b3ed6c40cdd34ff122b1887a825297c017e4cbd6796dd8b672d"}, + {file = "psutil-5.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6323d5d845c2785efb20aded4726636546b26d3b577aded22492908f7c1bdda7"}, + {file = "psutil-5.8.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:245b5509968ac0bd179287d91210cd3f37add77dad385ef238b275bad35fa1c4"}, + {file = "psutil-5.8.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:90d4091c2d30ddd0a03e0b97e6a33a48628469b99585e2ad6bf21f17423b112b"}, + {file = "psutil-5.8.0-cp39-cp39-win32.whl", hash = "sha256:ea372bcc129394485824ae3e3ddabe67dc0b118d262c568b4d2602a7070afdb0"}, + {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, + {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pynacl = [ + {file = "PyNaCl-1.4.0-cp27-cp27m-macosx_10_10_x86_64.whl", hash = "sha256:ea6841bc3a76fa4942ce00f3bda7d436fda21e2d91602b9e21b7ca9ecab8f3ff"}, + {file = "PyNaCl-1.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:d452a6746f0a7e11121e64625109bc4468fc3100452817001dbe018bb8b08514"}, + {file = "PyNaCl-1.4.0-cp27-cp27m-win32.whl", hash = "sha256:2fe0fc5a2480361dcaf4e6e7cea00e078fcda07ba45f811b167e3f99e8cff574"}, + {file = "PyNaCl-1.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f8851ab9041756003119368c1e6cd0b9c631f46d686b3904b18c0139f4419f80"}, + {file = "PyNaCl-1.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7757ae33dae81c300487591c68790dfb5145c7d03324000433d9a2c141f82af7"}, + {file = "PyNaCl-1.4.0-cp35-abi3-macosx_10_10_x86_64.whl", hash = "sha256:757250ddb3bff1eecd7e41e65f7f833a8405fede0194319f87899690624f2122"}, + {file = "PyNaCl-1.4.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:30f9b96db44e09b3304f9ea95079b1b7316b2b4f3744fe3aaecccd95d547063d"}, + {file = "PyNaCl-1.4.0-cp35-abi3-win32.whl", hash = "sha256:4e10569f8cbed81cb7526ae137049759d2a8d57726d52c1a000a3ce366779634"}, + {file = "PyNaCl-1.4.0-cp35-abi3-win_amd64.whl", hash = "sha256:c914f78da4953b33d4685e3cdc7ce63401247a21425c16a39760e282075ac4a6"}, + {file = "PyNaCl-1.4.0-cp35-cp35m-win32.whl", hash = "sha256:06cbb4d9b2c4bd3c8dc0d267416aaed79906e7b33f114ddbf0911969794b1cc4"}, + {file = "PyNaCl-1.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:511d269ee845037b95c9781aa702f90ccc36036f95d0f31373a6a79bd8242e25"}, + {file = "PyNaCl-1.4.0-cp36-cp36m-win32.whl", hash = "sha256:11335f09060af52c97137d4ac54285bcb7df0cef29014a1a4efe64ac065434c4"}, + {file = "PyNaCl-1.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:cd401ccbc2a249a47a3a1724c2918fcd04be1f7b54eb2a5a71ff915db0ac51c6"}, + {file = "PyNaCl-1.4.0-cp37-cp37m-win32.whl", hash = "sha256:8122ba5f2a2169ca5da936b2e5a511740ffb73979381b4229d9188f6dcb22f1f"}, + {file = "PyNaCl-1.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:537a7ccbea22905a0ab36ea58577b39d1fa9b1884869d173b5cf111f006f689f"}, + {file = "PyNaCl-1.4.0-cp38-cp38-win32.whl", hash = "sha256:9c4a7ea4fb81536c1b1f5cc44d54a296f96ae78c1ebd2311bd0b60be45a48d96"}, + {file = "PyNaCl-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420"}, + {file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"}, +] +pyside2 = [ + {file = "PySide2-5.15.2-5.15.2-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:4f17a0161995678110447711d685fcd7b15b762810e8f00f6dc239bffb70a32e"}, + {file = "PySide2-5.15.2-5.15.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0558ced3bcd7f9da638fa8b7709dba5dae82a38728e481aac8b9058ea22fcdd9"}, + {file = "PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-macosx_10_13_intel.whl", hash = "sha256:976cacf01ef3b397a680f9228af7d3d6273b9254457ad4204731507c1f9e6c3c"}, + {file = "PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-manylinux1_x86_64.whl", hash = "sha256:081d8c8a6c65fb1392856a547814c0c014e25ac04b38b987d9a3483e879e9634"}, + {file = "PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:087a0b719bb967405ea85fd202757c761f1fc73d0e2397bc3a6a15376782ee75"}, + {file = "PySide2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:1316aa22dd330df096daf7b0defe9c00297a66e0b4907f057aaa3e88c53d1aff"}, +] +pysocks = [ + {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, + {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, + {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, +] +python-engineio = [ + {file = "python-engineio-4.3.0.tar.gz", hash = "sha256:fed35eeacfa21f53f1fc05ef0cadd65a50780364da3a2be7650eb92f928fdb11"}, + {file = "python_engineio-4.3.0-py3-none-any.whl", hash = "sha256:ad06a975f7e14cb3bb7137cbf70fd883804484d29acd58004d1db1e2a7fc0ad3"}, +] +python-socketio = [ + {file = "python-socketio-5.5.0.tar.gz", hash = "sha256:ce972ea1b82aa1811fa10d30cf0d5c251b9a1558c3d66829b6fe70854bcccf0b"}, + {file = "python_socketio-5.5.0-py3-none-any.whl", hash = "sha256:ca28a0ff0ca5dd05ec5ba4ee2572fe06b96d6f0bc7df384d8b50fbbc06986134"}, +] +qrcode = [ + {file = "qrcode-7.3.1.tar.gz", hash = "sha256:375a6ff240ca9bd41adc070428b5dfc1dcfbb0f2507f1ac848f6cded38956578"}, +] +requests = [ + {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, + {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, +] +shiboken2 = [ + {file = "shiboken2-5.15.2-5.15.2-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:03f41b0693b91c7f89627f1085a4ecbe8591c03f904118a034854d935e0e766c"}, + {file = "shiboken2-5.15.2-5.15.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ae8ca41274cfa057106268b6249674ca669c5b21009ec49b16d77665ab9619ed"}, + {file = "shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-macosx_10_13_intel.whl", hash = "sha256:edc12a4df2b5be7ca1e762ab94e331ba9e2fbfe3932c20378d8aa3f73f90e0af"}, + {file = "shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-abi3-manylinux1_x86_64.whl", hash = "sha256:4aee1b91e339578f9831e824ce2a1ec3ba3a463f41fda8946b4547c7eb3cba86"}, + {file = "shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win32.whl", hash = "sha256:89c157a0e2271909330e1655892e7039249f7b79a64a443d52c512337065cde0"}, + {file = "shiboken2-5.15.2-5.15.2-cp35.cp36.cp37.cp38.cp39-none-win_amd64.whl", hash = "sha256:14a33169cf1bd919e4c4c4408fffbcd424c919a3f702df412b8d72b694e4c1d5"}, +] +six = [ + {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, + {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, +] +tomli = [ + {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, + {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, +] +typing-extensions = [ + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, +] +unidecode = [ + {file = "Unidecode-1.3.2-py3-none-any.whl", hash = "sha256:215fe33c9d1c889fa823ccb66df91b02524eb8cc8c9c80f9c5b8129754d27829"}, + {file = "Unidecode-1.3.2.tar.gz", hash = "sha256:669898c1528912bcf07f9819dc60df18d057f7528271e31f8ec28cc88ef27504"}, +] +urllib3 = [ + {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, + {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, +] +werkzeug = [ + {file = "Werkzeug-1.0.1-py2.py3-none-any.whl", hash = "sha256:2de2a5db0baeae7b2d2664949077c2ac63fbd16d98da0ff71837f7d1dea3fd43"}, + {file = "Werkzeug-1.0.1.tar.gz", hash = "sha256:6c80b1e5ad3665290ea39320b91e1be1e0d5f60652b964a3070216de83d2e47c"}, +] +zipp = [ + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, +] diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml index 79056ada..580994a6 100644 --- a/desktop/pyproject.toml +++ b/desktop/pyproject.toml @@ -1,41 +1,23 @@ -[tool.briefcase] -project_name = "OnionShare" -bundle = "org.onionshare" -version = "2.4" -url = "https://onionshare.org" -license = "GPLv3" -author = 'Micah Lee' -author_email = "micah@micahflee.com" +[tool.poetry] +name = "onionshare" +version = "4.2.1" +description = "OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service." +authors = ["Micah Lee "] +license = "GPLv3+" -[tool.briefcase.app.onionshare] -formal_name = "OnionShare" -description = "Securely and anonymously share files, host websites, and chat with friends using the Tor network" -icon = "src/onionshare/resources/onionshare" -sources = ['src/onionshare'] -requires = [ - "./onionshare_cli-2.4-py3-none-any.whl", - "pyside2==5.15.1", - "qrcode" -] +[tool.poetry.dependencies] +python = ">=3.9,<3.10" +onionshare_cli = {path = "../cli", develop = false} +PySide2 = "5.15.2" +qrcode = "*" +cx_freeze = {version = "*", platform = "win32"} -[tool.briefcase.app.onionshare.macOS] -requires = [] +[tool.poetry.dev-dependencies] +black = "*" -[tool.briefcase.app.onionshare.linux] -requires = [] -system_requires = [ - "tor", - "obfs4proxy", - "gcc", - "python3-dev", -] +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" -[tool.briefcase.app.onionshare.windows] -requires = ["pywin32"] - -# Mobile deployments -[tool.briefcase.app.onionshare.iOS] -requires = [] - -[tool.briefcase.app.onionshare.android] -requires = [] +[tool.poetry.scripts] +onionshare = 'onionshare:main' \ No newline at end of file -- cgit v1.2.3-54-g00ecf From 8dfbba736debaaa623dfffa5033706a0d54f75d5 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:33:00 -0800 Subject: Move the rest of the desktop files out of the src folder --- desktop/org.onionshare.OnionShare.appdata.xml | 29 + desktop/org.onionshare.OnionShare.desktop | 10 + desktop/org.onionshare.OnionShare.svg | 2154 +++++++++++++++++++++ desktop/setup.py | 72 + desktop/src/org.onionshare.OnionShare.appdata.xml | 29 - desktop/src/org.onionshare.OnionShare.desktop | 10 - desktop/src/org.onionshare.OnionShare.svg | 2154 --------------------- desktop/src/setup.py | 72 - 8 files changed, 2265 insertions(+), 2265 deletions(-) create mode 100644 desktop/org.onionshare.OnionShare.appdata.xml create mode 100644 desktop/org.onionshare.OnionShare.desktop create mode 100644 desktop/org.onionshare.OnionShare.svg create mode 100644 desktop/setup.py delete mode 100644 desktop/src/org.onionshare.OnionShare.appdata.xml delete mode 100644 desktop/src/org.onionshare.OnionShare.desktop delete mode 100644 desktop/src/org.onionshare.OnionShare.svg delete mode 100644 desktop/src/setup.py diff --git a/desktop/org.onionshare.OnionShare.appdata.xml b/desktop/org.onionshare.OnionShare.appdata.xml new file mode 100644 index 00000000..1bdac5f8 --- /dev/null +++ b/desktop/org.onionshare.OnionShare.appdata.xml @@ -0,0 +1,29 @@ + + + org.onionshare.OnionShare + CC0-1.0 + GPL-3.0 + OnionShare + Securely and anonymously share files, host websites, and chat with friends + +

+ OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. +

+
+ org.onionshare.OnionShare.desktop + + + https://docs.onionshare.org/2.4/en/_images/tabs.png + Types of services that OnionShare supports + + + https://github.com/onionshare/onionshare/issues/ + https://onionshare.org/ + https://onionshare.org/ + Micah Lee + micah@micahflee.com + + + + +
diff --git a/desktop/org.onionshare.OnionShare.desktop b/desktop/org.onionshare.OnionShare.desktop new file mode 100644 index 00000000..479dd395 --- /dev/null +++ b/desktop/org.onionshare.OnionShare.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=OnionShare +Exec=onionshare +Terminal=false +Type=Application +Icon=org.onionshare.OnionShare +Categories=Network;FileTransfer; +Keywords=tor;anonymity;privacy;onion service;file sharing;file hosting; +StartupNotify=true +StartupWMClass=onionshare diff --git a/desktop/org.onionshare.OnionShare.svg b/desktop/org.onionshare.OnionShare.svg new file mode 100644 index 00000000..502da0d8 --- /dev/null +++ b/desktop/org.onionshare.OnionShare.svg @@ -0,0 +1,2154 @@ + + + + + + + + + + +]> + + + + + + + + + + + + + + + + + + + eJzsvfuSHEd25vkE8Q65f8ise226FOGX8IjesTWrq7bX1FJbtzQj2dgYDSKhFkYkQAPB1vQ+/X6/ +73hkRlZlAaDIJns0qCBAVIZnXNyPn+t3zvmL/+M3v/vF9Rdv/unlL/LVeBj+4i9u37588e7N218e +/OnhV19++e03797y0c9++/PD1K5GDbr+1fJZH/hfXr795tWb1788JF3gatLJB779s7sXr1//8XD3 +7ddfvvyfPz/87Oc68Xev3n35Uqe+fPP7N1ff/OH3P99up+/fvXinU+kv619O62H9ZZ0Pv/k1p1+8 +/sOLb7559f/p5DTnJeuzmzffvv7i1evf37z5n788/GJKtR1SG9vhFymnQ245acz/8+q3L795MnC+ +WnLNKbV5rtVfuirLlKa2lnVOvsBuRFm42rQfoivfvfn8269evn73m7dvPn/5zTe3b7588/abXx5u +//ji9eHXL36vMy8O//jyyy/f/Nvh5ssXn//roMmqnz28+vKl5uWrF+8OU2YKr381pc9uvn315Rd/ +8+1X//RSM1aLP86f+ZJ//42upcvybz5un/3qK33yu5fv3umNdEOW4bd/dbN/DH3o42f/7bcvf//K +q6aZ/e8/75d9++brr168/ddvfrC54Kp/9/Krr7/U2nmOUx2vqr7q/+1/6WM1CX0tppTO77+eX/zw +i7ws+/uvh1zPHzGueVqOl3949fLffnn4mzevX8acX79997sgnFLGMf6OM7/99suXb//+9at3mouZ +j9aY9F+/+eLllxp//P7Dly881z6m098x4O9evP39y3citDdffvvOe2DZ7qBF/esXf3wJZUxxg7/9 ++uXrv3vzX/yMv0hzmq7mluuyLlNu66GUMl3lrF+WlEtdDuOVJq6uVTS/lDavIpt1PkzjNB2mxQ+h +QVMaj882Hf/uj8ANud32HE0E8xuR0N++ffX7V69/OXmSawni+qu3r7440daUdO15+5/vcFWnlZ9l +XNNcp/KRn7TqT9axzJmN+hGfxHRp5t+9e/m6T5/2yu2vd7Q/Xv36d3qd+9df3L75iuX/Br4gon+t +/SD2EueO//YZff3br2Nq/PtnopTfvH31mmsOf+Mzy2e/+fJbnfqrt2++/fpXr//5zfCz4IL/5eXn +YnUipi8Of/tP/0O/iKN5Px7+7u2Lz3UB/X4cc/Xi1dc/f+/l9HJvXx7ipL7pX7f/f/jbdy//WZzk +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 +dcuLY5p+87ef3xz5XW9tzT8H354c+Wu/ODv85n8f/ey/yc3it18dHZzc8KvfHb/+5suj88Oj04u1 +9rc948vzox+Pj36yR5y8ndj0q7Of3t46bmsvYW99fPR29Q6kOEOaBukssd9be/C3Y+vzfx6/vPi+ +PoakKtX7BIzE8v4f/s+j4+++v7jrBV8cvbr4xlbEH87PTu9s/LezN1faXlkJv3/2q8//1H7z+9OX +9Zd8znz+5i9np1/aUr6w1by355efH31nd1v74tlf3vBN7988P3/39vvxPr/+y9FPi/phMTS/edYs +Prf//8dPz5TT8e5ZWHz+5pkKsvW///jZPvwv++P/2aWfFmnx58X/+b/N4iW/+erZHkHUhf7zevkB +TlFg315whQ9U9dx62X7yYv0+L56d8iq8w1fPAIyE5ybZQU38j2JhcuNJMU7CEiJfhOATuXMgEqlw +fF+kVLFLKo3LtGnXUdjNWFUy4HriyaLZr5XnNfmkXfzj85t74F1VGXu+1LGvr7QfPIHuavt6ubZf +fRG7fRksry/fZrx87f5QoZLAeOX+4+Vr9xcVeLx2//Ey7f/u68YW2qVVM2kxhSmLKbx3MVGhTIKv +3hqU5uW71suEIAlXv6g9y7dcG3/+4ua7bt8iS/vYlGu9UcejaLKHq51sVXqd1i57z+GL9AVQTK1Z +rIajVdotJvWlIcprawrORm4oc7+/9vh6WY9Hh8R0W13mnVilmXeK2bNQL10ETjwJDO3S5dWEXHkP +yrMp3r3yHuNlfw98nsN6a+5NWcdAVi96C7Rgly5efo/l5dvfA+V+3DNr71Ev+3tk9P31yz5I2uX6 +C6qdyxcvvcfq8pX3iCsxub4fVpfH27y4chmGyKBlEWXjp/oeQWO01g+/9sWVTvvVDxAIfz89PXh9 +9HKhq4iGRXtdKtx6uoTm/ccLZmJRxSm7ae3wuPbFeAEkiH7tgLnt+urg8Re0f/5rO4SDCUkt1Z4s +c4AYMinYywuZIGpX9wll430IHTytpbveqK6q6/fKAiZzWNR0270uNxp3ytVm7DpKMZ1+8vWNz7vc +5ta38sLpDpLe2N32Vpcb3fpWUEoVnghq0G2vdbkR92JFvm+BkaVUzF5/fXWFjV+c3Lxum0vzcnOj +a3f6/tl/2hr9/56NWuIWLlMBF1AjAstF/55leqlRnS6KvUlmGCdR9QfFmhEmvu1eVw== + + + G918LzG+d6p794PnSrPXNza6efsgPZXViIkfbnmva41uea9euFZMCA6mW97raqMb3mtcqHVlrRb1 +UjW/+sVlUbi+BLvgqa/68cltd72+Hv++9tdtp8bGRkxo/Kuv/+OPfzg+sds8++3yTzOOf/uPP7/4 +y9nLI/68ZDXf+sVni1//6/XJqX21Z691fvztu4sj2Z9meJ8fXGlx+P3xycvzI/kJYjVkx+/4z0W1 +un9t++dXv1n89u+nx4d2efQ2rDf98eDknbf9yU3R9zXmFKWtvcpPo+G6xT36vtrIE7v0/dKkfuA+ +Te/Rz5M78/NW9+Nfk/vxr0fox9m3/+/o8OL52bvTl/Zqz8/ueNtVt15p/1vTi7eTO3jpNw/e1c// +9M3nJ2++P/gmTO3j8cs1v+UtfaLN/5jwxtsiJi/enX/77uTo9PBo6ij4TydO8ficB+7V6dnXF8cX +h3fI9FWf3qo13sXpq/fSbx5e4Ow3eWrvvj14e/SH86P/emfTPF2MXvnVg/cwTu3e6bvXfz28OPhx +g7lb/8mDd4wtN7Vv50dv351MP8fH5lMk0C2vHt7z6jdLv7VD4OhvE8XJ6p3fM/wPPC9fn707Pzz6 +4/nBm++PDyefCaeTJ+f4dMsX2/HpHXvuUmfiI/TmrtFe9eXszdH5wcXZ+eQOrX7waJvni7PXb87e +Hl9ssHc+xntIK5v6Cr/93dGrxWezCbh9PZpNwG3tx2wCbpsJmD5lE/DV+YHpwid/OTt+OxuBO2YE +TvZd7KYNOHlfzjbgbAPONuBsA57NNuBsA66vlpCenA24QY92xQbci0/FCtykJ9ttB5px9Pzox6OT +r78/eHn206cdJXO1QLbiU1EKvj15d4eAvwcNdFvNhbcXL3939ONxrTiZbOut/+jRNIQ/Hrx7+/b4 +4PT5nRO4jQr25Cl6OV3Ov9xq0/TldDH/8jHk/CaCYNuF2tmrV2+PLu7eGbtrXP9VPdy9fX+CZkl2 +4eHZydn5v//0/Z0mzrq0/vlkurextp730S/oy+TUkrfvzl8dHB59fXiwyQxd+tGDd+7tm6PDv767 +Yw/tnvIzWUGn/+9ODs6/ODt9e3FwOr1r13/4CAHQTXv5+3+9OTs9+oBern64S5bKXgDk+4nY0nmD +rmy3Mb0XN5mW/57cl/9+RFXky7Pj04sXmziYPo6v8ujrumNfVB1j97SjDY+kbVcfPshdMscdzp+w +MrQ74ZRtkQmT9bkf2snzQdPtVUx/mC4CfngMCTD5/P7hDufQekfSo8nnJxbl3vgM3fYD5+D8+OL7 +10cX06dolw6ek+OLLw+O77LLds8Mny4k7pCL60IiPJEjdHfs6M09yRvLx0eazz8fnX93xEjunkq0 +qcx4wlPy8d5jTjy6H603zIlHO5B4tEGftt1ZOrkj2+0q/bTqT744Ozt5fn509N+To6FPMb8q7E+u +9j4/eHn8bvoEj813wwe63Rb29I68nN6Rl4/QkZfHJwfT0w92yaqePEW75sj989n5m+/PTs6+m3wK +b4/Z8gSl25ORadMLY2aZ9kgy7ckWyu2yTNt7Mom8G5TGbbko26xEY4tl2fSe7NqW39X03RkjoAYZ +dxAjYLLyuZsYAZNzlXcNI2ADeb7tJ9PkJbj1J9N0S27HTqZdRm24IwFqTXxvVqfwSAUKn+TG3/p0 +nG8nr7KtF2KTe7IrSTdfTQ59ffH9wenp0cnXRydHh5v4P67/8OGjRZMDlR/ayes/fLTj6HfHb9+c +HBwevT46vfjzwZvdO5NeH9itJscud8FW2kAAbvmx1CzG/11c+zNc+nNqj/XXdLtibP7wc7gZ0uE2 +H2KTe7JrmvgXVEj/eYL42Eaxt8EC23Ih8e1kx8LWb5XJPdkVfW96rfPDAL1sy+57tVEm0avjk5NN +MqVOHmGmT45Pjw4m52CbwX7457PpebRrP9hev+XF2XTN8GybN+Or87PX09ebGj9CQOB08v45gLj8 +3d1h97Verf/k4dXeOxTUtUgABG/TIwDe+sH7c34kE3HydL18eXxx/OMGk7X8wcMLh8lT9XI6Cpi3 +ffjCvMln8NpcjY//i95+6oRd/tXDZ0Wd/HTw8+SZM+3p4uB8I23L2z+SZXJwevx6A1n3kWpUdhv+ +bq+f02a2zM47fDJpM9N7smsukTlt5jaFf06b+VhpM0+dX3E6lNquJc5sING3/Wx6Mokz03uya2fT +LifOTNZGdyNx5pPc+FufOHP4ZBJnpvdkVwIpc+LMnDizZWfS00uc2UAAbvmxdEe2zBNOnDl8Mokz +03uya5r4TifObLDAtlxIHD6ZxJnpPdkVfW/bEmd2IUS0O+k/G+y8TWXII03lDoMVbpA/OE/G7uKV +7M5cfLz3eNx3eDKQkZ//6ZvfCcXlm808ZpNUp905xaY72XYELOlJwq0/IN7QY4nYD4DnmeXbJPnW +fcrybXLnZ/k2y7dZvu2UfPv9uV2Y1bdZvG27eDtioc7SbZZum0u3WXmbpdss3Wbp9tSk23rY6JvN +wv1PTMhN7vynFyWcN9EGm6h8yptocufnTTRvorV18wnxH+VmkSdnCvqrfrVBsuDaLx4+5/hP33x5 +/K+jky9PDn7+ZrMK0ycmB8+PXp/dBbqwW5g0b9+ASjO1R7uESXN8+vLo1fHpnWSv64lvb44OLn63 +AQjF2i8eoW51RneZ0V0Wj43uEqbP1fbDu0w8l2dslzsSgkdsl4dei4vwWWwWIdt/m4X9/2f2t/37 +mX2x+OhVHI9itmwMZLMtqtQT5JT8dhOG9S0vF9ikL7tSMDB7MbZeKmy0hbZcHHxgNGrbS+DvGvZ7 +CkY9dLnJ2es3Z2/NWPzruzsk2S7XFNY+7p5cmOx1+uGOlJ21+aDp9hat/TBdDvzwGGJgsq/zhzsi +cOsdSTuy83fj6NlQud72g+fg/Pji+9dHF9MP0109gD4+9uHWCos7ur4uLMITOUp3J/zxQWt0rkL8 +gPeY489z/Hmzrn4q8efNUCTn+POWx5+fLifKHH+e489XOzXHn+/foTLHn+f485bEn6WDEYGOzWcb +6WNzzHl73WLb7embY87b7fmaY85bLxU29LZ+vRF8/KXfbPWO2nZJNxmC7u2781em7G42T5d/9OCd ++/no5OTsp6k9PDn+7vsL+37vEJTYyX28+rPtDX6+PH716t3boy/OTk2VO50u5q/97sG7WN/gqRzJ +G3bnI2ZEbMtpMbvgZhfc7IKbXXCzC251rD8lht9NdKvZD7edfjjXpj/77vzo6PQzs4GOPrOT4Pi7 +s89+PD47Obr47Pzo5Wdn5wend8XZZwfdQyMSTfaYHp3Yh418JWu/eHgJ2U/u2MF/H79+d3EHG+m6 +DBnbP5r353fHMrZeIDgfOXfmd26uvKgyfPc2wFNy2IQn7bGxM+Spu2vevjk6NPX//CFKIh48ajx5 +bdZB2NgXdf2H27wD68v+/l9vzKb8gF6ufjg7c2ZnzuzMmZ05Z7MzZ3bmzM6c2Znzy+U+rht35lTP +jnw6szNnu23Z2ZnzS5w5jyEpP1rUevZMfV3tpN11TX2AN2DbPVRPskz6aeJzPKQv6pGk1Q7Dc0yv +795yeI7pHZnhObYaRWm7D55NswS3/tB52tgcJ8cXXx4c3+UV38EoyGQh8QnCcmztXGz5ETojXG3b +Ebqp+Nr20/ODLNH5BN2GE3RGtvqUjtDdSQTYeH3OqFYf8B6P+w4zqtXuoVp9/qdvvv7+4OXZT582 +79AnDlywK8rAZGyyudj/sXbSZDrQl5PZaNX0wdfa9I7ccTysd+RfWy4Itl2onb169fbogp1xfvRy +I3G9a8Gqv6qnn5SN8OGT+4SNhW2ZnIcJE+3OvMxG3JYbcSE1v5q6Tn86frlBEllt/fCO/3Z6j74/ +2iQna9n8wfu0F/LkPk1XGB9DX9ykJ9M1xsdQGD9J98cnDXs9uz92wv3Rze6PbVeT+6fi/pjekdn9 +sQMW8uz+2PpDeHZ/bLFcn90fs/tjp9wfn5gRd3GwQWLXUzThXp0fHF4cnPzl7Hh62rv/eOIcj096 +cNSGry+OLw7v8M6tmz60/tvxyQYFyJd+8/AZbvuTUWS+PXh79Ifzo/96d3R6ON1+uPKrh/dbTs7h +O333+q+2in/cYO7Wf/LgPTv8eOlsD92TzfxfE3vyGIja03syg2lfP/pn/KUZf+mjnXOTuVouzqar +JWfbfWS/Oj97PX1PqfEj6FhPFxnrCSNJPSUgqQ002xlH6g4tZcSRehRv0sZoSh/Fk/S3d+ffvjux +tbSDrsYNVPEtNypm+JcPrx98JFfwB1SnzW7Y9/o+nlwW2gY92pUstOk92u4ctOn9mDPQtid4sVJW +vrkDeuJphzAuJiptcwBj2wIYzROPYExOhtq1AAZbbgvc5bMN+AvmZbYCZyvwnrfObAXOVuBsBc5W +4GwFPooVOFmbfopW4JzItrt24GTMjN00Ayd3bzYDZzNwNgNnM3A2A2czcN1oyk/ODNygR7tiBu6F +p2IIbtKT2RTcHlPwP8/OXn53fjD9cHmKduCT5CXZqBh9ywstniLCxmQLb0bYmAFGH6wjM8LGA4Mw +PBURPeOFbLs0e3Viup6zZ//7tycHhz98tvBLZ28ODo8vfv73DZyqby9+PpnuBq+tH74+cxOm8G3f +YBt1Ztf21B9YiLu3pTZbYDtxHn0YKNC2O0/fCnnxi6ckD54mN/Cno0Z8CvyGPshfHx5soCxc+s1s +YPySot3J2ty781cHh0ebzdPlHz145376fgP0ghP8+/b93oQDe62LV3/28DGPyXa7kxB/cXb69uLg +LnbIdSP+6u8evIub0idv+am8YXc+AVyYbjIk09GJfdjIy7n2i4ffm+1k+Xrw38ev320QYl22f/BO +SeJ9PHymR1K1fncs6fZik6DwR0IL+J3Lhxf1ZNk93W9WkGYFaXsUpA+gj96V+OBk3W8cg42Vv+s/ +fITajk17+ft/vTk7PfqAXq5+OGtPs/b08bSnWXn6aMrT13Ur76729AHn1bYrUXOy9c441x9SW5q9 +6pvOzuST/oc7oFvW5oOmD1+cNbkj08XAD48hBaZ35I7EifWOpEeT0U8swXVTz/HWHzoH58cX378+ +2oBdYpcOn5Pjiy8Pju8y3J6wnf7DHS3XhUSYj9CPOxdbfoRO78h8hG6n+Nr20/ODLNH5BJ1P0MeU +EZ/gCbo7ruqZVHKLNaOPfnztzpR8vPfYvWUxIyBVbWjnEJCePBDu06Xy+6CIyXZbE1ORj3Y3sLDL +2E6vD+xWk3EsdkG+b77etn0HhUVT//emv5ZXpnZXf02Xh2PzB+/2H+2nb+9Oq9tduaGasz9P2IDb +KDie4En1oKVl2wrzMEOKPNaO2pustW87psjekwEVeRCX1QP36a+fTB3trsJxbKz5PN0lt/2BpaeZ +D0icgvn62xPGZN7hbIYPmZ5tFxLrfZpcZ7gr+neYztU+a+DzuXuPW+ofr47O/3B8vg== + + + DV6UbZnni4Nvp8/xLvg842JyRER9/4/NXICXfvN4QGDvTg+/2j2h8uQW235ZNItPY7n9cV5uj7/c +wqci3J4/cqKK7CHqoP92fnD69tV0tovtWf0fovBsuxL3gRU6s9/ksfwmPmFbonPPnpPLE6RsvM9P +TrZgarZlSD5szc5poB/wHo/7Dh9CYfWrz/8Umm9+f/pySWXFpcyVb/5ydvql3UIwP3t++fnRd8en +6188+8sb3SP5V1///Prbs5Nnv7YpP/tp8eLo1cVvnjWLz+3///ETfxw9e3ftn78+W+W7/ONn+/C/ +7I//Z5d+WoRm8efF//m/zeIld/jK/tOG/bx4/WwvlP22G6J/3tN/x0v+qVkcPvO/lm33rrbwfw+f +Xb5++UfLm116xpVv9c8Xz55/+2xM13n+vc3lr/9+yoC/XHx3fvDy2DSvRbSjeK/Zb5rQRLPq99vc +R7uNDcB+apo01IEY//v8u2dt3E99akMbYhi6EvXN3rWre2VIYb/pUtt3izKEfj/F0jVp8fz1s1f2 +Vs+fXxr3f7N/7Q4l9iEPTbH3ybxNm3PIbba3a9vScyU0fexiCaXEtqdN03RdjClka9XFZFdyys3Q +N+0QQ+7s6XZl6Jqi1ysxW6eafbvFWquy+MfBMw2/TaUNZTO0rT7Z/+2Nn1sG4Qsb9sV45dI39p8v +nq033ltruVd/vLd+w73L3+7pDn+wafqd3iXWZdWVttdH/b8uhEEf/I6afG80/qHv7D9fPBub24e1 +hvW36/e7fN89/dj/fWHz9W9/f/Z3LaV/vHzWLX79m8U//vP6hV99Exaf2+77prEe/Oob3ei1/zE+ +eO119IKH9vX6W1/qjRqpxaWOX/5+r95l/f3Xmy9vcsr6//wUd7W962rtvdGOj2G/Hfq02IvR/3j9 +LHb7JfSMarfft01YxGF/GOzzsG9bZCjLz8HuX/+2pjajq3/bhq9b7f3xZ7o23tKeEZuyeuz4Hiwl ++y4vom3sxhbxXr/fN7aIl4vtsC5UXRmXmq1kfY90WP1E9+i6xXjLq32VoLhJOnTpN7ZXQjMELdCS +99tij7Df9/0QrssGu38uJfcpxibqEV27n9vQ55hKarre1noX9mOKdrG1bVsS2yDv20aMtp+bvvS5 +R3YE26JDl3LOpUsIkM72/hBaEwwx2YD9w/apiZycit2n79vY2M9S2S92377tOrse+6kPi+1+yCGY +/LTf9QsbtH4/xGivW/q+DIvnhw/Ys+f32LN+SPvB1rDdKnfBHtYPtvDykFLpsj2QnlVh/HdbAM1+ +v37sXdncN2wRu7jJJrHmd24T2+0bbhQkyF1bRfLh9s1iMmqj7bImTRal669IlBu1iLT487M9k0mp +S/0i75fGZs5GsN2P0daQia39LnfRD/QmWkcDT4sdA2gHl71NttdL3WCPXw36YKuyt+6k/WwLxu7C +eehi0f86lBzJrI96Za8Oa05Bf+vwH3Ir9aRZJPs4FAbapqHJYVFsAlpm0IalFDuWg42Hjoc92zeN +HakLe9UcB1+CXeBgtAt05lqHD2+VNK6G5DaWIlGT9jubTBM1wU7I9gZRYwpK22uTRFvKNj2mbnTB +VnaMubNj346CLtpitzVvQmvo0B84FewBnY1D3w5NztqQ9pLWZsjZdkZrG7I3hSG2eRhK39nuR9TY +7JiEKI1tqBTs2l6ykUc7MR3CtiTDO+1hppi1TbIXTKZ6JBM1zEq2YU221e02iJoH69nz++xZ0+3b +6w4mlCIdsa72+4OdHLHk9pKk+dU3ZoBdXLIzURnczkD7Xxxi7r87fbl4+/3Bm6PFaxlT/8NamXnw +zU2KSLysr1/69rYNiSr/jEWNQIq26k0Io3HVK3vsKS7pD/ZK9Ga2V/T34bNhv3RtV/QJOZW0bfJ+ +09qGNmFhw8mFxv/4gjOk6wu/tqGyQ3XR24YqtgruYdvarfoQ673t1jxrCKk+3l6M97HjQ9uWV0TR +4p2HbjF2mf6U3C+uDsqtm7Zo04ZhGGxNsmmb/aEkTIfS8O/VPWuSNPZ2VPZ2bnaBsbVTrLAf7FJJ +Hd3Mw36brCd219Z0DB/A1EWT1rGNaUgyLawLduY1TbYViowaehObg52gJr8ZUduzkVVr5yzD0Cad +zzY0vZkKnR2pXT/1Uak382Gwy7aL7HDpTUaZZhntJLZu2xvbwn64fj2/v341yZQMUwpKG3M/LPTs +zja49SsNdrisqwbv2192/F7bRKtrE7bRr77ZdCPZab7JVnIFYeJmwtrYaDvR14031GUFYqhibLhD +ZO1x+to9zG7FTtWY2uYzC83+LvxTlv/6Vf8v2o6J4BeXbvDivUq//e/QqK1O4as7mQFb/x9sLtOo +bGEubFD2rn9tC84GQqo2b2z784ZbpPf/2GwO/dhW5i99/vMPef6QUVeLPWN9b9x4nP16L5hm1phy +/5uVl+z5888PD9+9/ursYpk2VY+0u1TvyxOPnb2aen3q+NBE/1iufR6Wc07ry5+Wi+PyY15ojd5P +5+o6L8211W3SbigxpM7+tZ2DP8cUk2AiylQik4F90pUmoYsgpzInjekVIZnSZKqHKUlhuUMOrm6X +Th4I7XXrkP1Lv9Cl67+9rvp/1cR/gsfjfib2hpnsqldkfCv9VSejW/urr9+N/9bG4xve/+wEvWLA +MTp6m14/q3+8eOZulRfP9tb/8K9ueZGw+O3zs7MT6XT5y+N/HZ18eXT+6ujwwn2y//Pg9OXJZb3u +xtvklWbYfnlwcXF0fvrV0XfHby/O1ZW/VWe0xswsjcQRohXw26+ODk683M2+vXSD4euTY4fDt9H5 +4/nxy/999HO9yftf+venRO9/GFvH6+8Gtvf5xeqtmrUbLtvoLn98d/zSAxJ1AEbxv3KBu/P6Bnf2 +n9+9PT6cPdmzJ3v2ZM+e7GmebFToS0664YqTbljzZA8P5cmWtlHKmkM7lYkO7fJgDm3blp09rzXN +z92+ttGs/y37cEO3r6k5wSyspdvXJEkOxcyQlUM7NWajtQnJ427f1JscKA0iZzOHdo8116SlQ7uY +cVqSDfDSof0QPXt+jz2rDm3cV72JwqVDO8TW7Ltc7smhPXWvVIf2e3fLfTu0L+2Y6te+bc/c4Nd+ +7675JX5tO98292vH635tjf26Xzt/BL92utuvHe/ya693+L792jnEwTYCvlZ3/naxTTF1uG6qO5Yp +TcEuju7YXGxnmZGKm6L6fs0eNp3CFIql77dvu9wOZuaOXu00DCWkxt6vq75fW6txyAP6z9SHyatt +Go41tM05erW7knEldf3Kq/3x+/X8PvvlPu0mFbtq/Rp92tGUw4AYm53a7tTur3jieilAs1N7dmrP +Tu0NndpTt9IOOrX/elUjQ3eQdzKZDHaD1R2bQf654qfwmpd7/FDC+id9ZapDSp2O6qZPGQdVsd50 +6CBB/qqy+qOYCW/Snw+9fdCgDPY72994Q5Ni6zYoLCHTN6MEEseKLSN+nBlue6TpL9Fe35Q7grIo +f1J1omkHJes3tvT5zv5tu16vYpOQZRrGmieBWtQyzINtM35kClFsUOZsfjiZogkg/cZ030SwtUVT +xtI1oWRHn6SlXbJdLCWGhdbyV8Sm+ad9iZKVGtsojFSL+lKkkOpTlq6lr6J9iFpy1vvB9p99DtJ4 +Bnsn20V839mcHD6zzifOTdtftrPNOrW1ZCenLbKmD/YirXXHFFNuhPlhv0imEpouuLBxzNFuaSOg +xAYbm5TtTLaWxfY7n+10Zcitw0pBsH/tBE7Sbls7z20QNeJMemECshQ4GTWmtuLhNjtCSudycf3z +/SZhY4+0raCoh3XdBEw3KeoRNFe2cNBlTO/GeYVFf3MQYfAVY4OfrB3aUSZkcUs0xHSPmJgas5ls +fibeux9s4QazsoLth9jdEi25l/e+JYryYe9NdMX2a9uWhpN2TVR/3CgBrnZbI03CbAkuQQZ2voSK +rYtSHfXjd8MYRPCrHG5IXBr3kjtmays2qT2116/+6Gy7Jkmdwf4m3StKzjR9zwWXo3u2cQPHgLUI +GB2IkUT3aGNmdqzuVpNg9ua2S0v1xNko2m+71OWqahUpLkwZJrftO7ObJVbiUCWcHeeFDcde5Ufd +KHpsW0eOFkRP07JnbTlZn2xyk42I/TSZNs1PuEJMjLtJ1+av2PeSPNj1Jnn66NLFhqaQj+KfUt23 +9iHYh6gA7lB7ZLIuZ8mTnlnm+y4UTr6M5DGJmVBhrD8RyVOQJ40kTaQ3CZFVmKtD2aJdU825wMBW +8YmyEJAfxRp0kq8+4NZdFzw2ZLwUc9sydCZTbcUyPKWYkDMtqthb8Qu7gny0KzJz11bVP20dK6ri +yvkcWtn20MrF0RxZmSMrc2RljqxMiqzIizu6dbHBLrl72YTNA0ZTZPGtoil5ajSlf7BoSkntYFu+ +dMuYQzKdpXTJ9LVNYw6ctbFfxRyyaS9Nt14eUDCCbP+WMebQmXWSO/vhhuUBJgK40TKY0ptZ1HdD +vwqmPETHnt9jx2owpRsGUx1tvmowpccrk1Po7yeYcuf2sM3/3g3yEQIoq01SAyi3bZMbAijv3Si/ +JICScrt5AKW9FkDx8V4PoLAe7zuA0t4dQAl3BVDWO3zvAZRslm1nFtUy0mAmAo7+IQwbhRpKRwih +T3EMNSTTCEwHMQNjGULpbRdm24t4/zzUEHvTU7rQMxcbhFDsromdnpchFPlazSpeC6E8QM+e32fP +CKKYCLTlaI+IyyBKG03RMgNuDqLUIMpwxfM7tPexbecYyhxD+dRiKBN30g6GUC4Zw24E3hhVaRbf +Kdl/z/0OeVFqQMSMonb8YEvTTl5UPjN47VJUqCGkpvMPuNlLadd/uZdrFYH+eKXn4EYjIrPXyUsv +8xjPgMbVZiN0qXr/THFpiQ2gwZjFjozAjcZpXq9YR2ySTWE5fDZeavcHvYXcogXvHRssyrHvAQc7 +lKKkqJ2GLU6qoBpXHoqPsGXAs6aRqeVx2QSRIir18/pj66W9sI9XMcnXJ0XMFI9oG25xrb9f2EDo +sgJHthGJkmigbDjbwc5TjyVlDevY7r31F3u4UAc7bBe1DqPFlT8lIGHKoJm08qjY396V2ysaTE80 +FXIgN8uG9OY4RLdvM2i9iNzr7nv2vZlLpoU2SIt0S/jhl7zlzVGHDd9yyDZH+N37rhnWEzn+7RZf +6QZqCK6NQJRQjpzsQUHbFL10XTniFSJjJ2HLFen2CIgXijKW0NSMsuLFPFduddfKMUUbj3tdOcHM +xjx56ZhQC7S38SQedssAdv6Oy5lpI/rdLevHBE20Y7I0RC6m3bfvTYyaptBlUxpvC2H94te9eSF9 +wOv6YhpQ3/t4+YC8TeW8LME/fh3MXqeDoFt0NUIlcV4/EHAhl83EnJZlUOAn5Cb5B8IhpW/Xf7k3 +Vsvoj1eYC4lgDKHlYuc66910iwbPpQlO/LEe57E725HYSJ77IRCwHl1sj6dCCF0M8g== + + + YdVrJkhjVzoXpDbfppHomO/rIUA4LERMYBwoOgQaXBnqQOuHgKlrwawnBDrV1mbQplHA6/Ol547X +1mLvBVNpj8CY9ufVDn+hMI9dblJR9wlZJS/CYjh1EAyE9hQCXDWtvtN7kTqdR7Q8FaHN7qmuUieZ +1Am5yhhJHWL4vU9kqlLHRMzQFY99Xr6VF0WNqsgc0NqZgNaXB+/efoyIlhkjV4NaXLopruXyMw1X +w1vdlfAWv29Wf14JcnHp8q+v3vzWcJffePzrowa9TBQHsx+a4VLQa3X1xqBXJA2+3/K4F8OcLwe/ +/NIqYCUPa50QE59rkbB+LRLmv2qWf12KifmlvbUf7l2559768/auvc3au14KlY2vvx4cGh82BoPw +YfHh0tPGcFO7Hjxb9iGOj1pFk+qorH535Zbrj1uLSa1ef3nPtQ+/IMS2evalUFu7uPrKq+5cCbqt +xmk5FJfuezkCVz2Blwd5rStXYnHL4Vr++tq9NwrMDddLnrpLZRxtWn0OS+FxqZSjXYtE1M6H5Z+X +gnbjt+thCRm762GJMlyJ3A1hPShRR2hV2jE+Z1XdsdxpHqGIlzfaKqBHxuTlQo/mWqRiuO+QnvXP +lKK+MG+KfJmWTWb/WtzLo1UFkKJlKCqU0MYKVeNxr9jZ25VVEVHXN4ipvAromRnfdU2jCJbiXrE1 ++WfSKxKYmfYwD+i1vQnhQeUKiujZwLT9MKxH9D5+v57fY79qPM804lL6tXheG1JrSz79knjecFNx +1JRddaVE6o59dSnWN31nXQ74Tdxb67VTd+2uVRxw6v66j1Kq2KVrkcCSrkQC23C5lMqMnOulVN3V +Uqq08oSm60GFtO4JzStXaE0tHKOBRJovlVPlK8HAkK+VUynx8FI0cHGtz/eOEtbnYBuPzGePmJF/ +3CezCtciZhjVbVtPIQWxOjZfjutlR20uMrTHiBkWP2WUa+VUnb2RdUdxeUXM+mALkZKhNPVhtZyq +sYGNuVuChJnI6LS6ViBhH79jz++zY7WeyrYMInSMBBJ8KCbHdiESmOL1SGC3HsNwSbIWyBjFzVos +wy9dCWh0lwMaJtuvVVfZQF8pCfml25h4hiTZejwDI+VSPEM+7ivRjHA5mqHfXB6n+40OmnESYhMV +4w5Kd8kh2D+NghE1sJUbW3ClXQtsmdEmxLu1GFqbCGy1yxhaMTtH4mgZG0QxSCSi9zWGZj8Yent6 +ux6we//DPDrYJxtdJQ0pONgKP6+6NB+qW8/vs1sKDtpGb01fMkk9BgebHHHath8aHNS2uhYcnLax +LoUJp2+tq/VWd26ua+HC92+vVcBw4ga7FjCcssUmA4ndECSkLiHIIsYJipsujbUKnCjLv8IdIYdG +b9OExQozLN/gH7nuQ7fpCjZd1t/2uos9uIudJdZJJ4u3BRgGgo0UAr33Nn2voU+3xRM2fpmbwwfT +XmbIpqoPuaT1aEHns4HyJC/8WELSLf99xJloy10zYXpoc2fndZsm/8KZuPIyN8zE9Je5aSZuj9t8 +/FgNFTvsycy/L/h3z/9AzVr+pT9ePcveeLywbJKX/9aG13r0RBz4TKsiGY1ndzxxV/73Zxdnc3HK +XJwyF6cs5uKUmcBiJrCYCSxmAouZwGImsJgJLGYCi5nAYq5TmetUdqhO5WkTWNxdoaLyjKZF13K8 +JmmObVL5RTS57jhgdng0vVzT1iwJfKZT/WEALiY3WSW5qDUgCJFpXJ1fmNa9u8RShaXy/Ppi9q1y +X1s9yPYIv7ajWk720MjJFmx00+ojs9/6xz3xbDCZgv0iIEpUoevcgF74uSGgH4pgw77pzHGxvIW8 +dPXuem06hmLkPjxmNeuDQ3zpx2FY3tXaD6snvtAncHsogvGMhig0M9wfi2tD/IU2xe80/tmUHDe7 +2f8N6hyXtNB0KVHKYlZFbRNQ3EkTB/Cr4hRp1BtRRug3JQBcVEdGf9cZwTewmi0A3PiE8senwaaU +nGTdlU0ymNbWVTgkpSTz60E4RboEkA/Z4ORrL3+kC814oeu9KCh0uc5iAnlMKHGN1seV7o8VTShy +A1BUoBFlVTTZeLd96NN4xaa/77pIB4VWtfwcPUH98Nnyyl50VX15iz0Q1wZPMPHHjFcASQsqmBqv +mALUufDwm4yfl48ZL9T3GH8/vubVnhyOXVS4yxfUa/ctr1aUPoJYl0gqYYNEYRqslu2elrr1cEA5 +rsUAjUkylHpf3h259iQCLcdYV2x/I8OlINRLZvY1EdEHFFZnm5RIo60NLNfgTqlxt4RaNKMX0swL +bspTUda6pGT8bq2HoVu2I9fdTBZ+vtx4PEWpQzgHfG32HXXYDrLXp7R8y/HzqiPjlWVneVLohYVV +sJVjHbDxcRqv8TXsgxtHPtz8vZIma324M/ATkC1LADtTmCdV/SDZAdNdpOaWMpeu4WwtCJR4W5EY +ZnEeiCy/9zb9IJCufFtd2MYvc2MMbuLLULWD4MpXyr8uHV4fF3rO1kM/OBIbpfVeOenGquwaB2y0 +B6CNuiaSqXzsqnwVAlmFq0S051F6KFCIJezSlipKB0fzSg87/zhnhVTCgejnnwlPKitjFc/sM51E +48c8Hojsu34hnDt3M6Cz1UezW8HUHBz0jQ9gSTaKFtQ7BD92/ZhrWearDy+erbVa+/HqptZ87Xkv +9MkkkTbj6I+RKEm+wS+N8Hj82VDahAW9h8l+RASXhHGnSwlZisrkbQQMl6Qd1QtkDnzxrDbHrWBv +VByLT7CZdSJ45GqSGBI+uVoSbfpM69YQR89L6Pf5rC+p//NfD4NX4tilyPQH1aHqN35UhiDdThf8 +1GMuU6hTB+AmFVb+6VrXOfaQXULTs6dl9+wgkvrYry7hX5JLOpsyPpS1C6EirR4+W17aazm2pc3X +25iSkusarM9aXgGjr66l8RJlvt2wdp/xwupZ45XxdcZ7LN/3ap8O1dE8LqTXtZJ5uZL0sQPhMra+ +MSIqelmt1j30EPpoZmLnXGvSHpRq6WtBab0c1/Xcq1fC2rlXL6XlucfBwWZmRLO8V0GhkeW+aMbS +UF5IGii1ZDoX1jqkU2+te6tGaz9duyeqW9v04wN6r5jTnjO7LC1fcPy86sN4ZdlPe06QpaAC7UH1 +qmVtZzst3WpE10d6fRK+WOvAMm6zBbVejxfyPTn4+XGKt9IDxH3TY1Vp2VmAq6O/XKW1unpj9DcU +CEueTgD4F9ZkPWg8eIN6q60ID29YUPVUosX3UCt1LXh8Yz3H1SKpdvXdVsWSi1kFtq1xZY2ggBIP +ZqDkjUEBg3CL10ABUwlNt4olk8zbpa7FOPCIqwqYzFpOG3JHxa71oPBYHNWYaqzk2DW4w4/fs+f3 +2LORO8rEbWqEVFLhDoeWs6LbnljyvRRG3RBavmsjrQeZb9tKc6R5jjTPkeY50vzUI8031Tw9dKS5 +UKCMPyAty4PsfygDjAojbBKRbTsq+vIyImujGlLniWgeke1sLUPp0o0BWTNk+hQ7OBw3CjXbRupB +IR6LnhrKjODWWRY9PUS/nt9jv7zqaTDZ0xSnkfeqp2GQMJhDzRP308PRSsnF5DqM7GH5FINXZy3J +oBQm8U9j47vLa0C/WpXXdDect7dVtNi8mQYQe3+ZWzDFmrGyhURNuEVujrfk/Qx9z8DbTLhj0ygM +bCu9vS308gte8eYozIavqDqcZPsVSIaHIv/Zk2vUpLKWSecvuaz7H9l7vMGL9dYvng6pi3pbS2jC +h3tId6SE5uujg/PD7+camrmGZq6heXQn6WKuoZlraOYamrmGZq6hmT2bs2dz9mzOns2P79mca2jm +Gpq5hmY3amhux26qT2v30U8HT9dMYkVvbbEMSdmVAew9LnhGo6hNUInqUH+hpN4OF5pyS53rBX1M +qfemgMbsWp3KLCCBDo2yi2FMLp4+7yDJNCYl0g6F0FYmC7ul9JJSyx3QGVBmOJGCMixNVID7yEkS +WofI5ZRJUSmbDp1vgiTA92I7MAeBbprhgXOhjJmmts1ITCg4FwrpxFcH5y7CDDJuV4QZ9ssh3u3V +tdfuoaLBBdGb2sYCsRVjx94Nbs5Qqc41ju4IKdEGwRS4cBv/ewMFQ2+bPpmR4I+bdHfT9CH9s6cQ +9bjJ23uPr34zCNaHvrppF/shxbYl4b2s5+Vfrij7jlqgvhEObrJJDsgb69IgPkRbnloIBUJyJIxd +EBGDGNqHtLpwSM1XblTWVS+ZDm5Ssh+q7l08N9VrcIrX2Ki2p43OqmD6jlK7TWU2lYcykRyRQSYa +lDyOB4KXIcXZFpmWNuk0pP/auaKF3arSSduuH5afpQQq/3a8wmZl31r/ErQkmAnwdOIREyuH/cQM +BaXwm6EwUJTC5lWutrKOG7LFr4zcYU2Jt8/Rq5JKW1oPnFA2YNLXLCAkwuAbzcaDerzxfetHiNmR +lvVjqoOW9jk2kUrRtF163UUmhaEn4pfYpS5W7cFNL7PO1OO61Z2ZncqiOop7cVxKJioglyIHWaeA +vX4kHrNHtn7xqrgkEpNDKroGceeYXTlorUXcF52bWGKHXy2OeoHaKsIA7epSX2W3Z+f3SjWPuXh5 +U6GETJMWIKr3KrUotqseWhh7NCj/LWKzhwyEVVTI5D9k7JXybNMWe6aUeNRIQAI9y+La7NxuRf0C +oSbfsTT8kGyPs5M5AsOtgZu6D0xxSNQrmFzu7RS6BanPrEl7c4Ju0R4BzvvU2+PDKFD9mBVcXN/6 +aK9+W03RB746ZUZ2ppkiaP93iVRX/tSrx/3HDXd1fjDGWlz5miuuNbhbI6muVVpDHOv/OE2iKoZK +F0t1SrrSwAqvlROlKg12XMfk1qErDTA5aVt1VWmgIqDi4bdVaTAZ1fal1ji40tC5U8OlcBKkp/XL +C1MHJ6+pjD/sfxH8mH4l2SfitaRaxFI1HqjnpDR0q6LM0mf4kPaTmIW+uDY4Xg26Onb6peC0CZVj +viwLhDonSOqWJ47ddlAd0ChU6gXWrU6csLpmkitpPOm9e5k6L8XCHZVK6HqvrKlnjgmjrLouu3uE +eoiyVuK2oZ45NlSFPplRUs8cJgPPWVvPnEJUZUjL9xs/q7JDZ854JSQ/cyAzwgMVOj9z9hovXdJv ++np22uhK9bQRqoeOEwAuro7d8sxpXaphKSEj5fZselQG28tFxUc6c5L4wFYDOn5WxWw9Tv1KWw+e +1lYDZSixHjz2JuShaAYar4CK4wkS/ORBTjZ1ufjBg7jtRVeFhW0vqWrdOJ5YJsh9vk1sm+kldqta +i2W6QuiqEV9lO+puwO+4PHqs98TPV6ukXqC2qUld368uldFcYodAm1uWRw9LWW41qr5CHivFvFa1 +772k3c4e0Sz6yWNrSXxPh8yAvx32Ixti5CeEs0qS4eocHY6hoGHpetmCAp1mR8LPF2dvZi6mxczF +NHMxzVxMMxfTzMU0czHNXEwzF9PMxTRzMc1cTHd1bOZimrmYZi6mmYtp5mLaSS6mWw== + + + SJgIrCvWVuGv5ON2YKG1v/Td+yM+jQlxgmUe8SGdq9ugOMl0uFvrc9KKbue2cDWj0aTS33GbfrCn +WcP2lhjOxi9zc7Rm2stU7p8+dw9XcGRKcxA2k/598cyBvDxfYu2vEJ9aidGnw9LzH/bTmaVnrjCa +K4zmCqOJFUYrP0645MdZFk8Mi1WF0fBQFUYrP80l9+eUQqPyYIVGti3NGC5olhWGKGTrf8s+3BSG +yGRJ163BEBWzAIAJWBUaJVM1h5bctFqOAyJcLg0iZ7NCo54s2yYtC43MODfLK5WVx/Mhevb8Hns2 +Aiz1nV0YVoVGZp6Ypp7LPRUaTd0rV7ydD1JodGnHrDs1p9UbvXfX3IcXc6N6o3i93mjlxQxXvZiL +9WzrX1RvlO6uN4p31Rutd/i+XZg5xME2ArkX7ukjDBFTR0r96HtDDwipBt/ke7OdZQZHWHf0AXUd +HLtENTl925ml3a57MIcSUmPv142OviHGIQ/oP1MfVj2YNPz/2XvPhWSS5XH4vQHvAQOKAZgczERz +BHNEGBVFQMKG34f/tb9V3ZOZRHg2Hc+edYHp6VBdubq6WBJhIR5MSRbxiL+kWB7MX7+u7CTXpTsw +BRl+VWTTg4lOUNZ5ePgf68H8S5KNTK+KniFh86qMQ7M/yUY/yUb/a8lGUUnp35lsFKlgD3qsUZGB +jaNX5sjUswMMXabVa/TCH3hZPs/TQhf0TnQ8046Jq/pPilHfnDi+zA8irSUS+mmwTr3xFCdJTuUa +XxWBI7FuMOllo6Y9fFP0PCW9wj12a30gDQGcAl697/HN/l9RL+fBSKztiwWnQ1vNnaSEB9kZjjp9 +8cQsw8uGo1fRj+ca39BdzVHXr/09s04N5nSomGyCXcH0VDwyyulzxZzfmJGJRXDJ+kLeMbvBxjJ6 +OYgrgCP3t8cYszEe5BVop1RXNb4ZbxkdYRKEStKHSU1yOk5S0DdclWinpJWqWJ/pG7ZOUFEhayKv +YQKKAVOAtkRfQ7BZn1nFth6CXeSoLGv0gTqEZIxnVmBhCbh1aJN+VMn7m61HG9SsrfuiX0nSigVl +3Enjm0xLNrAGHK1Nt+0l5rFQvCDfVCwJoEMaTRTzi4kH9reIv1jHK1Z/TpaBpXLMLwLthkATdC3z +s6iHGIw3Q65Bw7wxPdIQKasEmJeIqYhY2wOVdm+fvExJlaRkcCDWeDBAfSrO8HxK5THWI0TvVlEZ +jLTJeELb5xq0sSbqnQw3wkRVETMJwAih3f5t1WkIE5OQiRGKFg0WB9yekWmpFkkRaMqdIggcrfGg +c3vJ5Pa8we0JK2DtHyQz0BX8iSaZCI5Pkl6VhkzK+qpgdhj+F+uO0bb4TdETTISY3gVr+2AUsAJT +wvMba/uvoFeyIKAwv1iAMrg92KG4FyqN92CJGmJJ0xiPrJO08Q2pVKBRH/t7tDQLwE8V0Bz9otNC +jskac0QOJuqpM4TLW1/IO7QLbEiO+5A+eMrik6zZlOSe6V0Sdmp+M94j7IXR2aeeHEgZvKjvsSrp +XZJmqmL7Qt/Ru6B3MRo9KByZJAEiZszQVwh7Nz+T9uRt3mDEnPE+Oc1ijGNWGmGI/NPBS/ogzNzj +m61HA1R6qgqnw1shrhHZhBWydeObztY5E3SCbOtKR3y9J3yXEWKyCViYoPVFj/nZXyIrZvV4IRuz +Zo8c3fwCIxrFVZCjm59F4w3W6Gvp4r8SUBwrVeTfEkZsNfpfWmy3/vZzXeFPMPEnmPgTTPy5rvDn +usKf6wp/riv0Cx/+XFf4c13hz3WFP9cVTjqC+HNd4U8E8SeC+HNd4RjXFVKP4hf5YPi8BJwl/YLa +AJkj+UIKWWMpbr0dOkN1f6TumAy5+orFgoJ6eAJlMh4XCgtS8DGBw7vBUI9TUVfzuaxO0m/BQ+kn +0Sr0HgEK6I2oaxJPK9EHdge6LuA1D1oVgwWYPQITY0zOIygx1OTgDxAiy4oyw/H2YAQ6HyX9HiM8 +Zkdu4GMwoYpc7MTTCAHepEN8/7ARtNgzueERVUMQzbJs/sDqFaSrU8YvaD/w5GpKEmgntdx5RHOG +3KIm4u1utNa5ivdUgmKJ0yYxaHIzjnErE4fqioA334Eugmq4/t0a0fgFdD+OUD6+yjM0jM0hZ3Ev +NtD8HBUFhZiIBeGx7DuuTuTprXgeG8ML+nVd1DZTyA0s3nEytLCwcnH0LhWZRGtFzjNHZ8xJesfI +hp8kiG8w7EFm2HN3JLzliHBw3FCwlb6mYP/IrUV4+akEsgfwA+M0yAeTQkrFS65i1HYS6M2BeOeZ +8YOFIcYvgn5poQQMipHwxi8a9TXmpZDp86S0ukiuR8T7yvASwUPQvUQBo/sqUAIxQfAKHLzSSmJB +ahhfbXRAf0AzC5ghH1PJLVs8YqnMizxWWnct95dgJd0eHsQC2m9Y7R4Uas5vg4A8Jbz+EGQz3uTF +qRLHKoIXboKBjHd2ccAF8BKuyB0D6qHTgJcEnp5e/CUT9sDTUSesAsEwHEMq6jovfvhrL/8jia1E +Bqv6URC8rM/4QhgsoLJCvyAPh15Fezv9MIP+4RUQWr8HjVXobXg69xeo9U9PWFDuz6WwDB+Kecr9 +JQAO0bf1HwCErETvSzN+kvDiDdD7yNWaLDXQFby6Tuf/MApLkjVV4P94+ymr0JA0aL1qzLgEFqWC +yOHVnfTSPOO7fUD9p6SiX+aK79JpwweqFFkLzcHCRf0mT3LHJ/AD6hShfEZOEUUYpgIaFrlmLonY +CC/g9YA0BMyTe9p48wfbZIyfeKRo6FnUGY1o+IcMBghT4Ij8Ew1GwyAT5cnBIcpogE+Ty23hCTIS +4OrUg0W/2iFAfwGGSE9OAxejV5Yq+pV3AwtGKFj4+xNV/LdFFQ9bv/8EFX+Cij9BxZ+gYqSgIolj +GIEN9EQ4Ah5IhMxfmJVI/B5WPFGMmpWo/GXxRFngVSB5WTJz9wQJ1DoJNPihc/dQTecUK3dP5Bgw +RuzxRJleRkauAyJRN7AoQHvgmWHjicACsCMznKhIoGVK9mvY/oqFZSe4MD2cKKl4/7vtIjb0TYrO ++7jHCCeGkgcQfyCB/IJERItI9EiiH5l4RBIDCWWcSCLasUNHEvmBSCKFtz2SiPg46UgiHx5JZMMi +ifYFTzwRURQkVmIY3szYk2URE+ZU1nbnWISUPVnCVDwFLwrX7xxjsGI7J4hWKqICVCgCLaIPnKbs +cQroKRKLRSWGSUWEXgWkdNFMRSQRB0WyRRL/ipVlJ7kyjCQCC8QLpch963okkedA0cLbun9CiTSU +qLriHyo/CbL9iST+RBL/1yKJESnpPxdI5I1AIk9jhxhHQscefiH+RBZ9bviZhBGx2IetlR5G5COG +ETFp3fKW4212EcOIPLkO2D+yJkpGoE5AukG3q3cUkRQz4iTYEIBxYHfQCboWQJzKIi8FRBFHmJt3 +EDH63EgQEaQoatySnbpYjjhvaQhDJqY+ZkOQOie0BAxNSsPzPcRBqaLURVc10cYwYsOju974gaUl +LchnLGRB82hSEh74kfSSLySWJ6J7VMDCeCia0NvKkliBKvMSjSES5U6FfUeCBJkPzAEPhYl4psj8 +rtug5DNqsRKDA4AZgqVHMFCDvpXYwCojBGqGRz0j7sGDKiUY4Qm/6ASXIsU99KgHmF2Kincte8Zp +UJMSAT4sXsEcuWNksRw5jIpZLwFxmnHm6xmmGW2+NEojiHiSjPs7wzSCEabRM3bRDsO4NX4h1cNY +iWfJ56T1hbQiFZMkI0FO0hOIAPeIu4hNkQI5X6i5EXskqVdmJIEaErbEUAVWDCJBd5mUGUjhncGs +9YN5x011yviNR0JjSKRGAgCivUOKmGHYBEtJyUBookhi9bB5IkNCECrSMYnXMCwprSbxvEyEDSEm +kJcqWkPGd8e4xm9gJpGiUFg+TeSIEYuaPLHSnIv+iVf8S+IVIn59Om41Tzv1Zg8mnUzSn0kUw/5g +6riNTxT65LTRh78nLx+wgqlEptZ60WLZTr/7HjuqNCtvWid20qlpncXgZzH6MFdpNOrAk9vv9are +sgxLS8f4WLuXip2jdZYebAuseyrhfAGQLOgNZ2Mx1iZdwAvFRqUX2r7c6lffBx6TLrrvxts1+ob9 +vXzlDRZtNNC36qQJH/R2pAu98VG/0asD9mjd9GIsRSEOW+SA94T3zWfBsD92cOJXhC/5P/3XEpBM +0FxHGpp3jczDP/ZxmV80rkjGRXwgwwJ3JQOp5P+/alBvzALEIDAnqapDrn2S+DGA0jAtitPwgYmR +0Jf+L4d/0I0J/2T2nrIdYKcNjbx5WH8BzvuUK0ET9QkB/JRpEsx/Q2791yzFg/iMFVmEB1+A/8aO +td+N9rD36ZihPNK34EmMdzVi0zH8h6f0DK8geaRjhEZYi1bMOxwmv4sqfQLCrtT7s6F1p9IHzdbv +TfIFhJ4eh0ofw0JAPKQzIBB/04yn6ZzuCSvWG7AgbJ97r9SbMdqA/rpIRaDeZAVke/qy3q2D2MEO +B3so9SrVz7F6GHYO2Uq3XrVepxtf6nVan1rs5PW1q/UWCfx93tdf2Gs0+kQVaHVSlTYIijTdHHhJ +08GXcHQaOwRQxgqvKNOhdbneI91xZJzGSUdvDBO06yGwF63euVZtgUSs4UPaTN8SmOX53xyfzvgf +ShCcZxJY6qpJ57XX2FpsKpawLQWVkcRes1tH3yquEVA2lsjXu+1G5U/6dZFuBNVp6KsUsMZrK1Nr +MQK72NoU7Eal0/PY7WxDa9aGQJbAvSCdWVsR8WyGBQDrfZ/ZBywk12rW+vVelEXYe5k4+SDyTgie +psZ60dUKv2nNk1oN4ULow4LyUKdgWMQ452kTbiKnTYgpau2kOcX/Ohr+h9Y0lS78oVX7OAfygLzr +JRBpVPVHKP57hGJk/vAjkX4k0t8jkbzE0LBnm36E0F+4poHDSH+DGFJ/xNCPGPoRQz9i6JeKoWFP +0vyIob9wTdzfbQvJzI8Q+hFCP0LoRwj9elsopp+4YRhy/PpH8Pxv2z8y+yN6fkTPj+j5ET0+oueX +ngSMIMt+ZNG/eU2RJFG2gTIBbwFvwL+9f7ZA+oeyhuDjToECzv4SeQdfSVXq3kLO48TU6NJt5+Tl +4xxQYjVmPwQWC1tN2n5oB3Axoc/D5ywHXiUkKwwnqRLHKYRdcSqvsIwiCALHEgYmqizLCwxeycsQ +tYyXOIFh8WSHxNL7S0RF4XiRUwWWlQkfDP/F7ygHtOQETCQC8hryRIcdTumLZr3aqmm+Mlw/OItP +YPtg8y8rnTo5aut4So78NbVu1/2YHIg13s1rbaD37onjofmq59NM862hOZ6I7hkNND/XYG1A9eWW +Y47kmWN+qvOZ94r+AbKCSYm/Qsn3XYtOe5EXM4njUjKHRXFZIClZVlUkIElSFQXz0RlOZggBSSKQ +m8CKCiPL5HAUkKQqCKqocIyKJUcYvJzKpB6sTBPlF38awxT44SnMC1t+EbvWLQU8GA== + + + OSkbxNGlyZcDN1QwiOarUf9apAhByPGj2Wvjd8zWwduj9Gat124vIln9SCVfqaQjLEv+8cdhEENA +V/97coL7X5MTyP7wOOgvlBP/CXt0Mq5QlmHoXJM+9f3+qW5QRBP5B0v+KixhLY/5vwxJxL/UQ/bv +3WN5klv8P+e56b9VXlqtp53Sv8pp81dbSBNy2kfgKSO6o34dNbMRqdlApUVTK2bMf+5sZPkQa/+F +LuS/ARDkzlpVVUQBTGKeJ84oRsUaMwxPnFbkZl9VlUUFnesyhzd+MzSUKNn/h1rCL/W3/68xu3yn +1Y6V3iu11u8/3O6H242uu4wKoDEIkrouHBg8GX+Tkygi+ZtYyTDjySg0RB4r/NGuAM/Iaq+tjha7 +1Dpd3Xz/J4cku9VGx+Gt+E3r9PTgOVlitdupOoLp/a52WjrMNvrkPd5470X/wezovdX5P+KpwNRu +w/HWrpDORNN9Uat0Ph3dtyv1jn38l0az9rebI38jz0YU/qo3K5ivHct89yv/Ks79E1z8x7tx8c5W +huUZmRcEAe+4w8gHixdCIZMRJJHeZcGkOFeWN5PiMX5hRQxRgWPtyeFB4UNO/N9zCf+EDv+boUO8 +cBulMonP8+RCBFEUeFEFeiI3ROoE5CIOJiWY9yogbaEFpDooKiiuMgoB/UQGPSKDksirP5HBvyEy ++L8oAn6igj/xHk+TcELxHlb4iQr+YIkNSwxm7HPJDcvpYWQ3uuDVbP90hPmJEEbkCpwtb2riTOHf +Cxee+YmcjuyYKoOO+BnLNvpa7Fj7p18Q+A+wEnlBUAURSy6LokQu5GMVAQsJKDLDcaJqsF3JbRLK +9J49Rrce0cui2G/c4wZUbBYQgR3tvr0I9P53AE+QRQaL8/FgGzMqsR14rEalipLMChJPri4EYEgy +j3UnOI6jIsyCJF7xjp4tuxMLbzNUHNcb8r6w5P8zsCS1fCS8ppslhV8BNWH9KgMQYADAquHvE9yI +KNEDy7p7AmHuOMjMSL7AE/4zwJNUQVEYEQDCq3gZO55vlXlWZGUsB4B1PijweDtWkYC3jYTRAYSE +rTrR0w96Ykr8z8BPViWOYYAPAuYwWEgL6w+oQITwA4/eMh1+rIPnIZxFO/Q4JF05xFdmwE+eDPQm +bkD8HfBXZF4SRQ7vcKVcEpRoBmQSQJXjWIYxnLWwLy7GOCiIfPH1l2Drr/VS8/8u2/O/ijrKL2J1 +vxZ5OPEHe/4J2APw/hcizy/FnZ/zRj82u2Wz38GvlX6j92Cz1kv1r3bDtNapd8URv8HjReeTPrMU +cEO8GwysfmbpFHhez7Y2Urmg0KxZdQtCix+cVhpar6eRFZ6+THhNiTt7JaCHRQLB6/+bcv8+dVod +BHHi6r3e0+izSZ8Oo9cTGOOmVJXnFAlPdzA8x1LHF2u2Pd/Jxs61mj4TRmIVMLJFUQbFXSWVjFIw +I5gCVg5QQffmYobzzHj7Rms0Wr/rHUicJCosq3IMK0kMF7M8bNYLOx1Na+rtRVZhYEE8lhwGm4ra +ApyINSBVgcFS6rwJOOP93J8V43VF4RVBQSOWlVSGGFkS9MSIKi+BpFGMQBRjex1dWPrrAGBYMSew +MG2ZnmcBIIGdjPJIFK2pW28fVd60Zq+id8BKWM6SF2Xdu6BiVT1eZRhWESRS81nlZEUUQegpHJbK +RccFJvNznAL7CbMmc7ZZhTAwgsBmZoPFQwwk59kbMp8NVuVjOxvwSnZDEI09ZDgsAyoyHCnLhwjA +yRIimCyLjEKnyTEywAjmDvOUqTdFAauM43GXcd9g4vYZcPROYpeNywoOF4E+KQ6s3Z0NToFJ8ZKJ +hphlzTOAFzwPw5MREKcZAesa8qyqzwK0A0YmxX8FJAR1oBwFPwga71mAhbizoTK2WWD/HFYml3hG +AhOUWJmYAM4ruOsMOdKkAq1gjVQRyEzgWJ0EHB44fG/gKBTr3CFzFggLAD1OgzGBwQtY9RDWTuGO +mAc2LvQgsSq8LFN3lmpV3UBdCLmAw6eAuhJnbwFalT6siIuH/mBYUTVWj9XbWQXfBdzQiRtYgqIo +SDQcsBp9WIefh7Ry/I/QqBM7jGE53HmebD1v0IiiyKLAqOiLw+3RVwZtgUKQo8l0Km7PHMLEBgDO +f1SW4Bsn2EeFjQWmwki8KgH3EghysQBhQZR4DhkL5YyMwALkVVnhKAf1ctsMbDXn8EMY02AFBmGu +4uIl3mTtEkwB+CHLCLwOXhV4FAObT4pv0iosDKOyoiiwMKRI3J0uRxuW37QTH6I958IFOguR4JvC +wiRkweCSkgA0RYvxSgpPuQnsIycoEnAaidSxTDE8rEgFhijCHFjdoTrgluHsS2cNfCMrFxDbJAPb +VIQ/sGZBYURgcIj0PEgRQD30pIkMTzFNhNUIEjpyCQPlEC6MCggDaMEp1EBg3Hjg8KMxgn0SWNZy +QzR4IfQB81QFGBaeUPiDlOUYTpIw+UShP7ED+D0IbreZQseEPTXAzbLmqCguBZSgDJa8JPkwjMwD +68OyrFhlHbsDJsiClONYjsgpwpwQXQA+AnGVefqvJf+lSygGWFE2RLEq4/W9IEUV4KWUUQLCARsG +k4whegZd/EB5H9cWewQgyKAC5TG4dmAeBq7JApC7Cu15Qbf7ANbA54HuRIXnjaA/QMDB3LwiH7a1 +sTyuTVEM5AKSAgNTVVgkLv0gncjLQMiYYESQhOGBtkHgqDA4cBkCYUHFO3NEFL2EjbOK40Qe/qK6 +YwhuGtAXL8G0BAJxga6daEUp5OJ4cpYXWZagKt4gAgqBIqgAEEJ7zjt3cF5u/ObdnmLK5wibQ4GG +yeAGfwG2AcsBCSVjkU3CWkF9U3ATGZbePwJdYEVg+C+IWspwQP8A2gMK5YmwSQkeKgaGDpxyT2d0 +DHJ5gBau3cB5IDJQxICceaBmosOA2iEqAkhVELY8T9YJ+M6iAwBgodA8MSBLmBnwAx5lh6dcHZD3 +ohNhDe4rG5oQDKFPCsQsCFrsgEMpgyOCnJdIqSyFxJjIfsDieAUd+sCeOEJjroOb+J7b+UxHBbra +2cAtUU1xBxgkYbwAJgfijQwKHEeU0O/BImpQVAThBqgLAp+h0RbFJci90MIFCkP8cQZeqJaGocqg +saO4h2XyZEgOGDyPUTNQdwTqePdS8lxqDMbi7KxPdSh5PMFGjjX0aQArqLmKLImkgC+KCww1AZ8H +8PLEkIHvwNxh0iB8OImyOXmADCWHqkl+MVVelbAdhTA7c6dV4GxYOx6UNqqhwTRULHiGOyiQ8mci +fMJDurALoBWQXQBBDOiBaAKKJjnJS9vZlQDCrF23ZOmbj8o3MBTC/GVT8QCCl4H7U3mK/fEgfWGC +KhIiOUiP0ThQ/oD8QDQRJsOBdQaCGA8Iw0K85A2DBUBcehnvqfmCIELNF0lBMWclw2pgQggAnkIY +VB+YKyuAyFGIeJB4GewWbAT4SnRtvPFLBZIGVGLpJUn8AGy4AeHsaGFwcQVhRWSFJJrYIol4/lmA +f0VackvBFAO8wEwGrYfsB9AdFpWGhUoiS5kIFpHGgsggYHnOU0EbjFwK7pJ1Oi4h+QKACU81NBfg +RrgPgBsq2sGEfrH2NwMwVCSiRgDfxcvY0Mkp02g0bC8W3gN8kySi7UgD+ye4pChC04PNI9OASRF1 +VuGMOYGWxAPzgJ+BhVJOKYAqAfircAoJ4gIHATEAEhaIDzRcoqiCNAJo4l4Ad5Y81Vt+wMhwK592 +9ZZot6aKAcJX4jGfBCiaxPJSoGmKHNYZB5YqEaGuUh0HyAH0XgI7nrgXeIHCQfSgL1Ru3fTvbeWx +RPcndo5p5QFeA/1xsD0KgJkoFqj7gyogAjZx1CaGhbGw5TBx3QIe3OPBdJfBE/2MJ3NUcQcpVhlI +BcY3WnrQnwrcSCHaDkIXAAY7S6PrIJtgtSxoigqdAWpuKDUEGI4jbbgBSLltIrTznIoVnRPBKp6o +UZRd00NSxA+1EqMuI5uXyutwlLOx1UexUtNi5VYspzXRVUr9O2F9eb5k9Xna77QbMNZJp9J800J7 +czXHfoZJ0DfbUkUusdOp/NnFQ/2nb7/AP0d1WhSdphoH5IM59JICpglHb6MDtswixoA+odLb6ID2 +QaGXVbx9jkhNkFyICsAfwaYiqowDQSP9ootzxA4OMdbU5CVV4DFYA0yON5gxDIiWDDoMiGoJ2Api +C1oA6olEpIK0EEVGFlmYJEdtWfNf3UJFs0FESSAaegOmZIgisE6FoxftiaC4w2pl+BHko0pVUQ6o +GOwy1B3JKRYJA0yo1ajwkbDTgSMD4b/QOcmEi6CTRjYlJh6YYdFykmUQijgFFu0JdFSCpUE1CrDT +wHaUgd2IMpH1HAP0CGIUfXvUcBfMf+3aM/5FmWPwd5BtYNGASYSWAjETgN0DIYMqDfxdkb1/ATgL +OEkFYU24+eCpifBf9HlxRBYStx38NdgWSBDcHGwNthXROWCaMmEtYF+RsrIiD2YFOh3BmNcdGqjo +8Oh2lImSIJn/OlQnkXcqcUADIjoEgakqVAzgEBJDnAii/ossg30J9o3KSKKuPg4eFQn9RZ+HTJVJ +YjbIBq8G0pbQAQhbwlC1kEVbCpQiUI8Yyr2B8nkAhCiAGOPoYb6UYv6rExUjEM0cJTn8NdxwCl6U +gQ5OGUUOUUNZBvQ/sJuBIImww7K8ighQFcHCUHQn5MCawn8xdHWGuOWQ43CGFxLsY5mRQXagi4Da +iZwAo4KAAgqj2+j6AQcY0B/CfzE8ocRMERDv4a/BaY9aL/WGFsu1Gi0UAq1+22S7IqjHyOHQfBao +cSIhUQJqYI1WiaNuqwF9UBzw5kge9956eXOAURNHCqEBAytBAVXAmAGNRfdS40Um8BPMCrmTcQJM +GNBYBjRj93UnBuHJhmrMmZYUei9VUBXQUgVRQ6gMhAieigSVS3deAotUYQx0n7F+DuPB20g93YaG +w5igKl35adYMsBlxtGHKih/Wuz17BNJ588LgeWKv1PfBm7YdNzgNhATJmKOURGcZ+qj059dLq4Hd +/H9TiUyn0/o9dqi94rCn760eqAeJy3pNa5FK8N16FX+v9LugbyRKvVYbvzYqf5KnGNxLXLZgRVrs +kCxY/4JrwfZapVN9X9QHh+nah/Zfgg7kfKsKfTV7+UqvMhV/ShvfY6vkmy02Dd8Td0dard7/ip1r +XZiDHq006yjABNiY2UFJ6/XbJN+upzVBLzvtaJiEidFjjEXHn1jrMgeYTuxI677Hzitd0OHq/0ci +nrZh6Bsg0+xvnPR77X4v5B0zRc5jcoeg4vUrb1rstNXut2n7NGxW5U/P5Sc5ngPdWkTzScJYZowD +xgfWGAuqNip0eo7eaQsAfa41yq3zk04dgAzvgh7a6taxN/KUo4MlMUJp61KMASGxI/XI6kA1AHSa +Oae/JE6a0AaopYP489YazH60tsTKXCT5kEf6HRvxJ3RwA9MEaSZzPJr9AmhlGHMF1Q== + + + ETggaDXWPMnczvsNrUPnak6MntfY6wKRvbQqnVpJa2jVnlYzx3Y30Enemt+a/jdhtCCb5Zx7DphD +pqNVaDIBfYYKr2Iighqr6K/HqkRacLEXDOVGa9oZmDBBrZqBWnXAv0pPgy61Zk1PJ3U0VmPtShsI +olv/6jcqFqZytlF7YH1027BlzeqfsbdOvQat/0+foYTOJ/8ZsrbFhDZ9oxaWvkE+7XTCcFGDuaJK +o951LbLbbvXoT7Kxqlq7nnK1+qp0dfQCaamjbbtS08ErGPfItBqdRXPf92KZfq9l0nzUTbOt02fb +Pput6mcL2MkbVR0igc/EBdbRKWF1nd/AKtX+6MUKtXqvArpJvadjKro6eLNbgyflKs3fKt2Suab0 +9dHhMVCpJysCUPzx1WjC4yTw1079BcREd5CB/eIuJtC/rVX1vd6odTQXNRhP8U/vz7YOnMR8s/v0 +W6XTXbPJH3vT3yomEZDfuz7tmjbeYjRc+ddD56VOWA8bATgARBCGlMWGQ8jeekJIOuoam62m35Tt +62sAWSOVhq/NaDmh7R9z9Wzg6iPta70CMigK4ofu5L+J0Fd/i0zq2PRvxmJcXrXf7bW+/l5O9uvw +cLVbwXOiaGAA64iKjr+cLkpY/O4fM5X/ApV2X3//B0vjv5kMuo169d/OizmRk1OyLGAoVeQNm89/ +zb/Xa+TCpdCd1hv+vaxYYFkxxQuSwkssxmPCVveu6RXbQpdntPx715cEoyOlSKLEKqwsw/6FLfDP +KGv7829fFsuJCrqrGXKAlQnFyj8i8Z6/e1mmQem3jJdWD5QG9CkaXpbwVQ2+8w9QEAhnLLX6naqW +xWS1iTDJf7f5dnq8wwnFVuer4sdf7AB8rTe0wMYOHLC3/ntRnPF4al9Xr9J503qgHKHTuruXj7K6 +wXf+9cY8E8YJXkleWTQb12r7N9s9s0Xyvwjo/YUBhBz1Q4Yv0N76b0fv4H1rto6GWpqz/T98cXU8 +i9OoVKOhpb31P1zu2j3zkTiSo/0/QN6GC5e/zAB2cuu/ezatdq/+pYcR/ylzApv6757Cl9ar1Cq9 +yrjzUMecx6wRqolCdbbGOruiRkG2oWk1VIAvrZ49+IsZFYcn6cIf7Vanh46aTLer9boHmivieKp1 +um2NhBt3OvXa0zmae6eNSlMjad4k8lPqVXom70yKRiDbCpgOdKLf5lpstFqdy0qz3n2HJZP2Lk6F +cf/Yqxlnrzbq7Vi1hT63P2Id7Q1WpnMX2YplOd7okGBa8jcYvdWJvVRg5lV9ruRotoIZVWHTNdec +0xqNwh89LWyebSNI1vpN67TxbII+TQXzcPA8UdiYuI9kyHKrbQMMnraLkU4ivO8F2cgTsBbtnIEv +YlhB8b1mTfujpFVbzZptUEUYYtVZYs3ZF66K0TbL7MK9V5EnYa18YBZRF1+sd7rGsJIcbcfIsF5b +5jcooZ4gUvR+zQSQ51sGR93B6yBrGDymQIiV3/tfLzGyOvgb2zml7U1X0k6jBdR1rrX7DaPEi5s3 +6Ss0mZPzKaCZ1zPPVdNLz3XflqjIQhCIdqz4uCD6dYtQKYKSZt4aDcqUhEXk/YFo6xeD6QEtz23H +KjwbXTTrw2Ip7plxPkZfnOILtMu69jsgVb7e7Vn8T/RvT3bKTjzOraIoYdstPDceNt9qxQSsDxTK +psS0H07wnFsoREmrrHXyxX+tuEH2pZIDuUH4ZOs1GIAn7UrVPBgR1C1pHQlNSUsXnvrPgnjD7JOw +zsGw3FOp3eoRg+sINAyX6eOSZ61+r1FvarGe9ocBJd9Bke9aJz3sPUq2HivNXj1WadQrumBMsEKK +STE2/eczs1fsNxqGuqKXjoKn3pqN07woaY3dSg/ePWwB3mFMv2s7TuXTdg8ttb28vaX9cRnVJBw1 +WPYbsOqSK5X05Qkm4FXj2CAu8qxfQf4bO9R+0xphu0k5n2M7ffEENyHX6hs4zfn3utvq1P+v1dy1 ++fFDKcCkPlFRFTaA8WVtHMKClhwr9duoInVjJFcmdmJoST5b6/puP5VZKl7FdstHh7FspfqJx5ua +tdjeFzn3WDHiLhbWe7Wmh6qdgtOYqtn+oqvp3Wa6tpf1/iVZljlWDB/GRCrvNpZl5gUGj2UYL8TK ++SuMM9l3kQtoTpZyVGkjdXgdJ/V/ozzg4vRqXQIsBXQofLV7fyIqdiO8Qm4rsntvhfABgCn06kDg +kV/Qsb1nvMJ67LW15ma10a9pudYXMiD3OUCvN3Zah4D+eDUdgPWl4WOEOTcy3283YA09cqOWRs4Q +x7Lae+W3ut/pRM650BIGGWwvk5vxmqi64WbF7hlG1DFi2PeEEd/j9feUId/TTw6z6pDvsV7oFfKa +rmhEewXwx5Roa+GtfbbNSZEl2GHgYb4TVLyBH/KWPNJb0khviZ4wDHlJ8N7jkLd4L54W9pKOThwz +1Fusl9AIe4lx+oHCXvLGJ//mhuMZmbDdb0dfpIKp1H95bTVqoIHY0hCczMqSYmZjT6amM77Y9dGp +Zz+5VvvPASnoweXs75grqvRiYO784TmwvdFVvVlr/e7Nde3tjmj1TBsgbU/r9rPJZgMCYh3cTpkb +yN0BfLlSyUuGOzsxn9lTMvwHoT44kuVr9J4cNMPBPPazwdNJvLZMUHhJMDiukSiQ63c6Xt4qsovo +TINRjXwDHcnoTUsMEzM+2PCtdLlDbMls64/rG2Oxadulji40cN/56EqMYblYZi+2Y1SewEKxNFMm +KDeGvnSIKjbMnLxEjqK7X3KOxMYKp6Whh6JvhY81bCKOoSoeVro9A/xGQDdKIhLOKiD7KLwLAsOA +HpxmG2YmoL2WQXvNTPuwq/SkP4JQOd07e273zjpTCHD2J7qVVLJbSWazUrPSBtMAzK1O5Xf7gBaU +SScu7yrjnpExStm0W20zUWPNluWgjdWbxLOMeUfaoE+ZdEczM9KX1JmctTuTGd8VWmPb+6NtAjoc +BFkgeB3zDIKLRPqKsp2eWxRC3gYhpK3oX/qj9ZJ6qfe+KmjyucmGkpq9efvt6zP1gm6m1utrih7r +MRUNn+Zflc5n192c9ZiLs/N+VwNiJS4tQ8QaqZixK+0lTdIY0zT59mEwt8zecbXVwIQvWJpD+g5M +oNtrpGp0CLJDhgROBHePr+ntm3YiHei/CoZ1isRl9TkonkCDRkSZSDUwcZNCl+X8mtrOMHpuGRnU +fhLQa+XVTi3VrVab3YA2dui0a2Ej2qYlqkLwOjvBk/ujnaq2mljmm7pt/AGMXdJD7QFYBm30ZQR0 +1MUheyTTIyIG0HFNyHgO3QVaQ+p0KsxueiS49KIfSfOHMmwZMshGpZ16D8A5srPtRvVP/zavzV6q +238xNj8CKdt2LAFECZyoFnv5M5bvgIXdCYYVwj+ETGDKPVANDeYXYT4WpcicX5etDmoXHi4VR8NG +x0S2dqvXDW5pCqgXevmMXX1wD9/Wk2Yjc1drTZ4Yim07tmuao7Oqdu0LHjeCNwERsaZ162/NEIhZ +k9Y3QPVlVXYuFDJR0islKTw4GMrfWragUxhbxTz3wHWTLa10qVwMxoAvu3vev7NWlEX87lgE40v1 +XYzWpH4L4w2dN1sbT5R8BaXlvdX5v4gjBkoZfcR3Q5vyRQK6B3ZdIJS9BSyD4InWRO9/LRJi4ZZY +mB8FC+GNHtYuDplEG5ZVb7629GZYYsOPxEH8oPLmlNzevVY7QchKm6Dz+qXSCeBVpF3XuI0/Evex +cfgIrQNJCsVLrdHuvLZMpTcCSze79JKktMtg4iMy/IuEMiwL0rtdwwrx+PTU1N4qVlq/TyMgXgw1 +GVWMHQaru+l7paZ1tKA9g2mxVeIocVkoLt3IcW6GjOjVquPW71mfmTlX4KePNeoBG24pbFZM0qdd +q90NgClpUG3ZfAZeTd7cS/NSrKBdVw9s/Y5xLQO7fMzxAKYAPQWLTjLrWj+wAYZYKw4Tz6thp9aB +Dek3qwFbRtvo3oJuAEKRhsOwSvJCpdk0rlSwnBQDrexKtxf0q18ptI/qzSAb5MsmTX0aGGe3ql9/ +6upW4iJVSqFBCNZ3pQdq6H2idHVyer8Y+40LsQqxO6dgDhqy1XvX7DFCct0C+iYyRvOYFX8Oc7QF +Kh6NhnHfQzfSPuGbxhv6XYNBCkn3s94GfbX5GdysAzyx09Vw0p2g/SfzBtkXYWS0wwcOM/nBwAvU ++62XPRCxNkCb3pOBIy3vrd936x5nJ8A+MJ2Ap/U/tAa8+aoN9JfZK1V+047ASqy3G1rGuSEjOFrq +zc9GtwcgMOP+xtL2mp8xvDTJtqpEptZ60WKn+aLu/UMlBI8Jt5pdt68QYBI7oY9sPkJZlq3Qj6uV +7aqPbN1YQ6aU29tTxLyGWIYPha2T+bvl9auNhbXK9co+P3+SzG53dr7eV9+a0/vF6ZXEQq5eSXXn +pIvdgjS7un2xs3kkbK0e3i8cbXf6VblY4I6UOCsIswzTzX/k31aYue21x9TS9vpKu7vdPeDSU/Ht +tcPpjtFov5d92z073F4XtFKuvrFZzadSC28DQx3WbmA8OV+Mr8q3O738x0NWuE2uZL5ah13Ytt77 +8qY02y/mhbmr7Edj4Woqnn9l9l88O5uT1Vf58uzuPlPOpS79B7W3W33YXv8sPmyvdlNfy/mVeL+Y +2Km9TsUJsIrPTyf9/OvDlZxtbDeuV1+z773cu3zLOsDxPJ+vsoff2+tbC1e0H5hyN/f49tiCT/Pf ++b3a3nQ2qXzMZUrJ2Sadw3Wl1p+Kqx+J5WqhKp4lcu/C09p6Js7PL2ePV56Xt3MLF8Wc1l/avNyf +fV+rViuf+Km+XHg9fKcjs0y6Infqc8+r9cf9WrYR31pIdpbv+5nD0vw3zn9xe23/nZ+KS2uXD9uZ +ZnXha3njaC0tf91v1GU53X3lM53qHrv8ucqaPVbz+91LAJu8oMlXPFNbrefSFdhf9mgjkVzRsg35 +9Iuu4OYwvp3bW5+9KqyoYhf2Ze9Omt2Uc63H5fXL2t0q9zL7QLrdbMZhQZvS0ixuyZ10JZ01EU6b +2c9FKamj5mXtkGEfZo/y6cr6fHF6+baDo0j44JH0QppMxZmXmT2BfF7eLK7rn9avCge0eW6l8Ew7 +4264PUDda2Z5c7OwwuW33jb0fq421tdqH8ePZCfNCUN/J1lRHwUaZffNCTxYE2ATG+fYSBPIb+J0 +Nv9EQJ3XuluCdCt9VDPl/Mdy/jV98F2oVBbmstLLxZl6Gr++yJzksqf511L9e/v7YfVtKp4VbspP +FJi3Uu228MQuX2aF68xJMf9x9ZSrf0jptdev+Fsx97rEAgA3n2X5vNayxlNK318HmZPDpYNifrF2 +QGFjAJriPux+r506W966rHzTBW1KSmV7rdybyZT3e/3Bpbkga4ODsRHXnWmjqxJQzkmuNxUv3Nbi +b9zz+laeKd5v8wQF1p/Xi3nAjqWV5WxLfXTvlROy9o01NoJiztZ7t0+gBGuxw2n/cA== + + + J/O0zxKMWV9urz0XE68HqQyzXr7lFuce1+lEnOCQ+ueqVkzMtxdz79L5Z2H5MFW0MBUI4KaFHKZU +qCGGbgNRfc3D0mYXc2/vha68Vr04z8i33JV7D053G5eOvmd2CsmVF9VrS9RP7SA3Fc+Uj2rLwGE2 +1Xz28ObTa7akpa3dzo38CkRT4BhuRzgaxJzeaXHxtLFWzIu33PLmznNyKm6tC1ZVfS0W8qKclZIn +l4ThpNjdyxUyaD793F7KfvRqX9lG87KVKb9fz0EXB8tmB+3CSuuYK84n5bvM+ev7Arz2MJ+Vlg/f +KbdczL8u7Eow29Y75YKFy+tdg4XDAAcPZb64/bZxjQz+Of8ivF9lLuLVrrPdfOa8fNdQPhrJdcLR +LEEAo1jPW/vMevYz0a4X13fYhI23354vVewwAVliY9Ys89IvJDa+ryxJ43oKmJzoyW8wPa008Fx5 +Xl7b674Cx67Oilm237jLlJ73c/pTNfO8vb6bS0GT50vgAofzWfa2/5Qp9cuC9ZQ0Bj4GP3xtd6qr +83S37PSZvlnfOsk15fPXtwT78niR4een5wqI0zl2J3e4jZ82mf0ddoPRXla32JVEbsv8bdN6Yypu +tSS/4tcsssIceZF8lUqH3Bk+3aBvGwPk8Lcs7SyznizKYjJ/zj3dtgvYZJ00xq/5qbg5vSw2Orb6 +oaPgeM4uts3Jb5pvrJEmOJtTMiVzuRkykak4WSZdME5KPt09KuNva6QzaxTShRtExpTdg5KvZn8l +fRTzbfLOGj4ny9iyQEmak+lRKDbf1s5MEJQIPM1R1l1bB7vv3CiPrR1hI1zboI9C30FgWX2TZRA4 +OcGxQVZlfSWdmSPveMxh23Mtm+FbQqdMPpk90kGdXylaAOf3QwxftMDGh+aqLFTxBBZ5AJg8CKwN +ulZCOQY4Nqw1Y+MTL6C6KNUE4AaFmGuZBCarzi62nLPJmSNTnHYNShpbVAeYbO2WY1c3LawlzRES +GQ9SWTNneGoyD4qk5IFO+6Tb4UEdjC8E5ASKpGcdx7wYIFmaSZrDoSHdEpOGKLckczyXFHbxhHyi +4MdlkMnjn1un6reUKV8eNIvbC1oZNP1Xzi4w1EwTZOXbYfH56Ga1OL2UAimG61IMaZ+cA80l/7l9 +NXvxlqs/PnE2G4pVwbI4yEoLoEItntmUjfJ+f9mv3QUoneIL6DBeho9dQdm4ze93lp5dhg8uaJlo +/2gFroCtdbvuENDM7PblQiKbrzUOH6biRHa5RpHXbg+LGXE7fZHfTTRnMwc3pabjaeVe6pztlrbX +k/JMfn95VnQYe2BXomFqyXDUk11yOPvylteWCodkrcZKz4vFp8Xpd7qCvbvyd+Z0b/HeW5BnX6jl +u7w5u3al65bElBK7zfMs1RR/hdo8FXcpzr9EbZ6KuxRnsjTdWGB37/OV5s4VGBX7n8UCC0ZgScIC +qa15Rn6f1QAmkrRkGsWbmTJXWbTgZHUFGuzJoZQtrhfuU6ZllQq2rKLaVdiVLF88aAeojZ91S+n6 +6V2W2S985+iqeW7mLthUjGQoXn3wpj52Ef/UtcLIloUdTvm35OIWRZAz/ruVObi6ngPyWf62wDYV +1/fgMXuE4FcY9uClVszVvm4IzuvIaZuIdpIvZvKaSd3n+m4QeF5tJC0CsEwFoMoBo8I20Z1sQ3q7 +s+wEy8Bf3eeSCVe3oMu2XnP1bl3KvybvgHnO7u1ik7TOYdTPDHNXqCnVR2b/s7LLPa8tneJzZrX2 +1WCQr+4TxhVEV2V5e+3gZmanPfM+be7+Kmr/J4BjpZ3aB+DYRofbvphWKYGszKXvNhJ9Tsvuludf +6QMT2ZVGqrOLIkh1WovF7U7n/UJYPbraIr2sMVtrz2jsgC3GvKq5Pd1v0L8BxG5nd7NCP8uwKxdd +09h9SAHfvHvMqGsHSfNBWfhO1TO6dV5e0pj93Zk1gHZqee1l9V22Rp6Ke4096ZGn4hZKuv0r3O3n +bO79fnoVDLunJ0ffqYPs59EyWHynr4JzDx6zn9zGtPWAyD1q8XF5bfrsONvQsmyuPn23ACw1e5Zn +5t4zhern9zzZDfWjoxaLj6+FhWLmbA8Y/M5ZguI5J2Xmde58vZ8l1nL66Pw+gz3zxMmn49ggxmRY +o6VOv87OIlLvbpJIQIBYOP2qjWLrNQr12icC1LvzGdeAAM7WQYo1ths8qBsHDXeP6DywE1o6W8+9 +3+WAzqWj58FunVb+zcOS3mTz+4t4Fd6mt7+3qpqxjQv9jPLSfqOmPuBBGcji7Sb/mpoWKTw39jtd +Zu9uZ9307BRW9ysvKcN3cczAUOXl3Y17gaonhleB271fyJRzJ6V86ryW3F49/qxbEsvCO+pKnd89 +v87ID7W7wkrrqJ9R040lS4fR/X/EOj9plomHAHa/0ny5gL6rNp1Kb5ltoZeGf84fHLTWcs+fWQHU +Cekkv1ddPoPfyqyuC+jDr+Te3otJsMQTM0pprX1beEkzb/Dntj4VXz1+W6sXXsrz305FhgiUO6U8 +P1cqPs3OnxefTjM9dFO/eE/+Lf4J+6fOoDtpF/oriNmGfLZMlBuslYDqDRVH0npiu5NU+5mzpfxr +NrmqtV2DrrLK9HFx8ea0B9oTWzMfHC5vHBzX8rUvdcUaGdaXSICYmL8CHPs8Whccjxbe0+/a47PR +hWZ7Cvu3Mw1UWXvc/s6ya8CO+NlCcjoluZfmaAd68upr5uAgsNGe9J1e4waaNErx4tMn0OLp3f59 +obo1L+YP9qZL6mn8o7jd3T/8IO1MDjOIRbn6zJykk+FqAeaQba+4cUOPT6Tfty9fL7K4yW27dqh3 +tbzzIC+CFMuIuw97Th1V33ilnq0UHovcReZs7SpuU4L1TVQT+f3uaROoW0rtxHfunzLNnYuK0x9F +u0K5T5AuVdtW3+8zDSDi/FHmvLz9bde89ZmlQXk9XMrI92u57dWr77p8xfNappxpDaAcJ35+Z8VF +6TbT3F36Brm/Xqx2bciyuSHxerfY3FAwydd7B5Zs7XkjiDQ7A3PQ3ral1tx19izekqbiyeZK2VSn +wIgqX259bq9vto8zF+mD9cLLgij5NbkEQbDYRWmYMdkRgnJ3tpjLPLzBn+RTMX96xHmN0l3ZbiXL +u0A0a+9usvBdqRkPsPdyl78HjUI8JjGLzXdro4AnH5Rz72Lv1HCHftXtfV9tCCAhzruF5SXp1a6c +w59k+yn7uH051+s5yPUZozyn+7cPtgUjE+bj1S/JAjVV2HVwHDOZUu+unn+d320oYmftikRi1rTH +03cPfJFQfO1NxYHlLM0Xc1l1CVW1Y9DrMp1C5fkuYd/Q6nY//zZ7fwPGR6JaqEqL6xlmc//LhbBr +2gVXze8fXVwDL91NAk7f7RDy0amSKAdAWXdzVMWqXh+/wrx3eqBbXj/n9zd4rvB48vKQfy03U1a3 +67v5py1iXIIgWN3X415gKtgMQD3+sik9q5mTVrWtHotP+7AlzXNQNQvljKyevzlp8YOqQfDp3VSw +EIqznxm+t5TPnDeP8oWX16cNr1GgkZBQT0CWMGeF6tW24qYxprtyS5zKoMgsXHtJCGmmeDSPe5DL +70+/Mj6jiLf9E/8uNi+EQkbcej0sJg52VJvlFECpdrTX98UP8RdBkXlmCtXKrZarb2wpMKWDlD1Y +lZz+NBsvgQrRTeb39lD/SWcbeW39cSZzenYL9AJaUfbILvTUzBcoB1dzuimhxyFvM6WX9msx32Cz +DLehZW0rtbkgxI1baXP1RHQZ8DYcs4lt6HvlLVMux69sm0xkJX1w8YFW51IfrUVAle2Pw+JTb/bV +0pSsWdvlCxkF0PT+Gd7ebQO6f2cHlI1y6RPgJMwB67n/LD62jtXCSzLjrwFIm+3aNaxqD+zKQJ2i +tDt7vqmArlebD2xXRjJk0WHQ3InntZRrZLRejbHVkyv+GjG5aOrgrs7ufOmOkDCSSoMIFOCRe8d2 +KUbxd77f1oiFwuyDEQomHlO3cdCvhNLKNlKFRvbj43Q7v1c76+X3E4ki0v7e9mV5r1LMNCoEaZYK +vfm9aWPk/T7RIlEbP/74dJJAGWismdPj2hbD7czWtte3hBXYl6dqMVf9Yu2sd7/f07Va8oYZtKRr +Wa3VquXV48eXfvH5kfsChX6Lj4C/xGtE4RBnPu/QSkgAn27PSr2D3kbxqZFKO0ahyJnvLsmrj8sl +ohC60YtfbPLAPoRKRlhYaKns1UE6o+x0e/TEwHm50lzfaTQB5J+1mtdrqMPctCqKvJXbRVSaAWAW +ZrbXz/hHQJv1GTPKbDHhTTDc2isYmLoEPGC8GaruIdmQpG9WLU7FSUtp83tpP1/NVT7zS/V0dfVo +mb8Dqpw3DXeDP5msyeRJ947DAKe3cvl5toNGGhDSI/MsfTNd0MZzH9spGxNmuNP55Y1MoSaBeMtc +5d+Eh0/A3962zZtHm5wsPBSSkgxSk1maobbRxv7tPjVnbJv90H9HuV/bW0CD7B4k0c1s9jO/8FG4 +rb7cevTYojIwcz7d0c9QOLoFw+2gXFxa3NknWrv1VMexNW11fs0Gu5dr7RxoY3N3p/y0dGC6LAmU +r0Fet5cz543WqnwB+GL4RAmwrthsI8mWd26V8kXmvHX4jP3BKDqtmqqfH+TNzenqizxL9IqJvcq6 +dHFaSwPxXaw4vagSmFTFWfTVbqEXbmFrHtnjO8hKqbLdzJ0d5R8+UllXc+Vk5yNjcpjbfFHZvPXu +Wzp4z55l5qSs0G1Kslxu16gl7vJGw8Yz6wuFan8G1Ilsrw9Nki377p/dz4LUzCqZk4OlKzxQUwf0 +Wei5xjN7eUL7JdtZyLQyrwk7oln9PB4UivkX4tj27OJle+3gpAeItnLtFvmb0hlomUfFhan4Try4 +u6Oc7BVEY/12L7nFGaj9udK6ZS3O6BxZBa2O53WHNfFl4m/oUwH5sn3I1ooF5XzX8rmsr/TzL8VE +eTohX9XLN4QYgP0nb6zpgRhZqmM/a9JVaovN8J0aXYupIs7RroBb7INuWRWrQlbarqbsa5U1Sf56 +nPuiGsLBVS67VqzEO8rJ7fQi8/qUPEof3X+LqPjuC12hdV3MPSytwGzOkrDw5z4g+9tynBX5O/ij +okQuHC2roFtnP4Aq2/3t763Fy/+3aZ6ucx58y5PbJCMc4EvcYSVHklnT6sTMApDDJxl6HlnGU3+n ++eITuXUm3/q9SQuVDORIB7x61Gq2qu+d1pdmvX9QN7L9fY6dRy5dGDQy1pXOWcfq9UuSAk71Gy/S +a+GKMOdMp/d7q/OZtaWAcKIUBqhyvaE5rq7yah58L5bPukIviPJ5j8O5ndIjxORWhi65861RN3Lt +Qs7tGl3QPcELrpo9vTsLhTjO69i/DwqR+yMyLy0jT2G4DSkHZVwYbxkl5jLVTuul0jus/KkZmSdC +JIS1IY+FscGrRJzzX2TQbAl8JoOu55Fz15z7mms1ayTxbw+viqi/1o3j1BGw0f9K1Q== + + + YM7iBJibvENJzXOLhk+UMPq07lSjh5k9K7G6GVWEqqyhG+/FG4VAwCGa+mOaX1KX8Xa5U//C0qVX +0fMcfXAlnO/ktW6v3tSvmRya5djePo6aDGe8e06TTv+0XhyOkA7NvNag9emIiFlEbrYatIGnNA8f +d2HwNjTXC0FXHgbRiEsEWrgVKDdxmEpPI9fENCt197VrAYRTHrjJ3eclAriLrkaAULZlUAeLV1yP +U7qynllkRvtS/wV3tNXsnSMGRdMZPPWUQAIeuCIoCF18ZKgdbbxT44I0KjfD8czAi36ndRSxatM7 +sXwr7GCu0qZFXOtB2YJuFhSh6Skwtz0rYTWIho07gKM2zTqze32nAKzENtlgfk7pDXhI1EnYBXb5 +HcAbw0rUvXctpl//EOsal0f9/q41Y11651SlGbMr/4hJsUoXf7aScoxL3lPk1q4e6dzZ2Z+tfqwN +ex8DuaXRjSRD0+7eKvUm3mljG2glBoOZrzZh/rFeC7uoarE6uQCnEmtU/sRCwZU2vZQQZWK3X33H +6e1hUKn+1rS6oaM1AUR9mF3r1Rq+3o31m59NQPNUZGlR7dTbwfcAmEwLCOBKe8GbqMK3lV6LXzdy +0YKauu4hDTWssoEZ0cbSgLe221ow/xYIDPS7aKJiXzQpV+pVmjXzei+wWeFHqiTlTHPS7MV1/dJR +C/H1Cbjku+8VTXix8+AlQu4uutqb7RJNez1u13VZ7UrTliftk3jXtN2ZYF5aJAYl3Rkjli53UKpQ ++dKrD5Qwh+eEBsmVwXhnqHN/4XG+nHcmocJvhSbgtwcQoLN+r3Wgddz1ueFJWQP+P3jpLDy5rrQ9 +J10erOQCT07fXgfmA/tbrQ+mpMMTcs2qoyNzDV8vwNCIaBkcBC+xOmkOXqmrz8x5j+zaoLdjDY8a +qE+FZs0sP1HpoY8Y8PkpC9peE0cwnk0RPLf/4pk+uLwpPsvLW5cvaSa9fJRc3nrv8fiJE9bPVnnz +wZn5iTxY47fKvWz+Vd353J0936jkX5mbTfMpt7xxLr1PL/K7G9PJ9ML5VHx6efNzfXrx+FadXnmv +w6Pn19T0cn+1NL1ydJ2fTjJHHJPeuEmQ4cXp3OKZ0OW6RzC5/KewdfK8yWcVXpFupa/b9eRzsUWi +ptZTZvdJy03FO53NjZfMSvt4f/tA7W4qu+tXqWLrVrgsdO5vmfxt8aZc3MhsVNmljNxk0ifaBZ6x +4Zj90/Mcs/ssprnn6d0TdmXh/dI+EWHlHD9l4bX7DIFY/nNT3Z37cE2gO/2wkOcWNmfyriapdFfZ +4bZmdx/h606Dqc3f5A14HnY7nbXuZee+oRwwaaFEQUDSOo1ulZ34Nb99lkjAi2wTp3JiQbnzkFva +TvGHSn95c2d63gIbGVRonZeafoM+AsQent5L1rCOQTeexe+lNuM56KN0e+o36O5s4yV9aw0KELMN +uz591529vDn1HvRsY2FzNXe37zXo8lpVWPcZVHyfii/NbQlH3msVbq6ZIrN05DnoTLEmzcnni8de +gzLF8lXeGhT2xT6sNBs/LWUyfoM+Mzuztxfeg+4ktxf2XlLXXoPCvtx/VCR92NOFBdeu8mu9Ro0M +Cij5UnDu6k3ngds/xkEXB/c0dSdsHOWWYVChNRUfQKXH9aLvoGLjZKbnN2il8zgfv/QadCoO7xar +UnNB4smw7kG7mQfeb9BdoXV30/IedH0m0V2Q5ztkUMQxx7Cd/jMbX0xs3T14Dbq8vnbut1Jpdva7 +fyt7DYocRri5Y4oH66eeAJ4pfqlx4Th/5jUoU2zV930HnT860XbIoFPxgbUKNxqzczZ7672rx1dM +/DN9WYJB5bZr0O7CzpMB3ptkwhp0Kk6GFb8/S+d0rYX7z6Jj0NtN5nBP5XHQpYGV7n5+y0J2S/Aa +lDn8etXIoMgtHcOSQZWjwuOL36CPzEnjpOQ96MHC7UEq1eq4BoVRyLClI172WisZ9HBHOBB8Br0T +mPJeadFn0H6vdLhzJ0/FPdd6yfTqvoOWteP0u9+ge8zl48Kma1AYhQ57qC5cJqaPtzwHvUpezvsO +epVJrM36DVpnblc2gPN7r/V4T/uYri4lPAd9eJk58h30c7WxsO8aFEehw95vMY+PGcF70JPlmfYS +sHfPQZ/564TvoDM3j0tpIpE91ro+Pd3pFE8/cdDlAaI54baXZ5T1Kgy6+u3mSX22eakP+qkukUF1 +uU+G/X6SvzpkUJD2iV0HgBdPl1dbvQIOujJIqeV0/KR+dA6DbnfdKy0ctxmgSjpsb2vZxQrjzNwT +JRruobe672QPZ0yhcFHEQVODjDA+vaAl5BsYtNgng4IUs1jhRjp5RQfdYg+SrkFnyvtlyh74rYvD +Q/ugXK85zeV6VRyUGVjpJX8/Ff+4zq8vwbD7024AdzqFZUOqnn65nk5z6t6r/1O+upe0ng5IseXN +jVbD921gvfMd36dMYb22YjwtNQc5zOH27p3x/HKAwR+el58Cntaeq/5Pj6Ybb+buez0X5lL+T0/6 +nx/+T0uXqmo9HYAYU3ovZP3fLp+3TnyfdnornCHUdm48ePLlhfxtPL93Expz+Zbr+z+9mjudC3gq +3ScsiHk8333P+z+9Fe+W/Z8+fCZOrKeDEHtMCNf+bz++PWq+T0G4b256PdUhxgqXyYr/2xup1wv/ +p1lVEPyfHm/yrQCIsSffq2u+T1fn260n36fT88s50Xj61BmA2PTc0ean8fzFzfumOSb/5Xzadllg +yGbOTSN0XreSNtuL623gT0dNnflUzrP6p+f9LdM62N0o5z/ZXDa9f5Wf1fZL+a3lUllJTs/34dPO +6Xa6t5ArXt8Xa5b1Bh3MLlhSzGYAz6brGy+LsI0zBeDoW+cO3teZ4RY2TpNU90I7x7bSzVl+Afre +/yKsFe2cG7s+lj5SmgtgBV/3UYwger2uew0KHH2V9R2U2Dk+g0qzU3G0dB6sYR2D3tz7DgqqbZv3 +HxTtHAcmO4dFS+fNGHSnYR90fXrRPqhQmrOD91TkbIPW5udnrUHBskD93xyWdwwqvqP23/AeVFh8 +8B90plhJOfQx57BE+/cZFOxB0P6ffQa9efIdFNYyszMn+a6VaP8+g4JqADpFxW/Qc2tQqvU5AHx8 +cOk/KOoUTlSaw6cr5qekri4tbaTdu+/Tks8xEXpknpdWM8HtdG5JlC2LX6ATSaDvDHquFgh0LLfM +prpzneMWtpg9BAvvdnhtrhSIfwz+Q//kkks501wHrsTPneFv5xY1AVDFxeVsq3tM5wCf8ug3KJCR +XYwJhr84ha/zcaLz95eMAagSrA9gm8/pfNtoUtq2+56A6TH7Yjxu/dlsJ2plXWMmvdh9StAcJrr9 +TRs5/Hpkytn0u5aP459ZEzpLXp45WMFdnq3MLeyaAOQsbw9OebMQ1/+sHLW8JuWYUrEbOKVZduWC +XcE/d7rOr/tc9Jmd2IC+lSgcBANd/1O5zltWtWt9IF9whfzc2sGhtULv9eGfsP1bmPHaP9x9xw4i +fV7ZbRqP9aHyOtT+6R4Srx1ktA/tchhg+SMDXoHQ/bwK6ywSsrfYwkN3xwvuU/FhMWstFYFyXHC3 +QcwJ+afOZCiHec2lDEweAVgu1lO431xysp6CxXoM2jfXP+Ru3Kx0HAA0J+wAIO7+aWqeKmWDsCug +Nb1ne9s9m6f+AvD2oxUTdp7xAEKVjwXuoZ898GbcnlRJ/XEeS0vOeC1tgCpDlra1enYUsDRKQ4vz +hIasiTi55c1K26SxoFXtHMzru++B7IX7fNK1IDvnj7wgNOfseG6SoQPP5/HPuS5fBpH8scC8sjM3 +wwPGBRZLSlPfhVNOZxM62mwcpY2lU6eOd2fZW3XfR+TrXU3F/Ttz0V1lZmfZSXdFt8j3o7qpUJHx +wvWD6S5dn11dIX90HkgiIw600DEZJvo0E76hcbqhNu/3AG4UB3iguS/k+Taj9S7SAzN74Rc9EbYy +c8T5LjL93lresHQwC2IBW0I1RceW7IRpYQ7WQ/VkT+YDzWs77FL2o+itEJjKoq/G6JBin0ovWDBF +2F/SGCb/2PcSSzCKh/4UqD3tuPn0ILCW7GJXj4t5Tkqb8ZOV2+ZsIk0JFTpfWXlybjKAEOFB9i9Y +oQvV+W3NP9X4iPvnjFhRYF0mJ4YMl1ThIdbr+J2lg+c1NVRnzCQhxk4OYtwkIcaPBzFdLOuItjJo +uL7tMrWFSiHYKpmKoh1z2euaJ+fwUmj9+Fhvazqygu1NlW+7Tkt8HKrsbc0NaSiTeKwnjmWve/Fx +oIOzmXfNxlsfC4YOo1WeLiKaCue+a3kKoeRIE3EYeKhdhE7FYyIhhOuaiJduCVNx6ZYjTcRGqXqM +L8Q2rMz0djxE1C5xXUdAFdQtdUxf9jhmpPe4lch3gMTvcrbZPnTfelFxkeownm4NgM7Hnq9x7W1a +GwTiAiCs5aH77Svjvexh/yn5MgDT3o/IAEBXCBHLXgzAR4d56CXmJ7M+fuuyfET3ZSygA8jfQyWy +G2t9dPk9EtQbcX3201Bkhczrwvf1EP4MH5sccL9nuRUNy2J0YAkRkGEqIrAikbg3MgCBO+JiW+x+ +10Xi/Jza7ocbaSHeJeIh+dp3kvgIvgR+bjUx5zubqfgwRsW+2yXr7QgYcMl6cf6vfacGP9rShIS1 +NAdV+jk4vCbiFsuB7g1zLS50Z/f7TpNypAWp37xLg/X20gX6ffZJcDeC32cqHgKY19XEbQQfSLC/ +BnUYgE6Ax8aLFTg8DU5VOj2oSrcPEGJ2ZTp0AB9Vmt+6WJ4NoZdwpGofBMSkQsWgw6O4tXq2EMFv +66UJDy5tdXx6aR8QGRgVz70lMkwlzkZZVRCeH1hyz4TYSAtyizw/BjAV9/dwwjZNO8NoozAAAIs0 +FY8AmHBd9mBA0Plh8mwUXRaDVc7zG2f0t0Cqm4pMd8iEl0fECJvfEnMAhGDeF1XaYVer3Sj0EsHf +ip1t9MbmydelEYMUrl3DKM8QQs+3H3ek0NnLVDxyPxEp0KsX42wP7WfsSAXpZVDumTkjQ0g+vbNc +6i6qECVyP8AtjmHehEvfxN9SwZTjclThWnz8XtgZMxlxgzj2oS2FCUJ3jM8XlKWmFyg99sWugAZy +tMvWIEeD3zw4moljQ2gSSBvuKF4wR/OMVucGDlWMztGgq8P+VDycDUXhaPDgdHpsTen6YhyOZtE+ +7NsEOBr2MsjRvHAstJ+hOZqpKbn6GZ+jYS8GRzP9lvbQy5kVx/HWBZwbFmRB08Ch6Rv31lLadlJ5 +XlweVOivLyMEYCOeudq5aY9jRhunCGBDQzhj1OACduUOl/rE98PZLHbGR2UzxmlbL3Iu3N/7Gz4R +iflS1y4m0Y/TpTXYy1TEfoY8AuHlhyH9RDKpQ2fjffDIFuENUsndnQ3nyFp2nh9zS8P770FpCL8N +bVV7W3zIx9LjWnw5YCPX/RCLL7o0DD9NMRVdGlZmXkYlH0u+XF9NQr+HXfOQhcNLMQ== + + + 7CdIv48qxaCfMfR7ey+GLAw8CxehH6d+7ycL/aI8djK8iiANg2WhM8b3vJj0kIbXUY8j+cpCS1N6 +6gRIQ/s5rAi6wDU66nYdkUT7zOzAtAjSz2ORg0Ff/DVKi7axDGAodUNn7xEI0p+27V4F6OzT34s+ +DNu+dhG4C2JDGZdPnUg6r3lKzdPnhMSQCnBdD3Eyj9iVMKkAlTVc1XSLpZeuSyyRUV66k3H3oknp +6YjUtT7X2bXQLXnpBjgBB4mL+pR8keVmgqdtobPRojee89piDw4n4yF56UbyJxs7iaP4nELEvUxH +OnxLOvNRMfA8ARPgg3VghHe4wjUlX4wg52FCyYsSrk4WuBGHsrdl4ciWk1/vXuX8bfGyNBXfTvey +h4XO48bTODl0wRl0rtsbRs6hC86goxHe8XPogjPoSH7lBHLogjPonNmCo+fQBWfQTcUnk0MXnEE3 +kC04Yg5dcAYdcMuJ5NAFZ9ANZguOlkMXnEHnOEUwRg5dcAadM5Kofxohhy40Xjl+Dp3rQPKgvDbO +wC9lNtrhZq9dr/PPwLpJ7rim5JRioZMyppQLzieadbB3ue1zimDzdL47mcOwHp7ecDj52LZ5t7R3 +bp3hhYsEp1LwOTM3nHxi4phZ5hT0g0eLYDbRkvBKTWeMbxx8CjuHRdcXnjMSlDkXdX3Up5Qf8FwN +AXTXlLwO9zkjI5GBHuK5CqSXYZLm/NRmT3QdOG0Lfe+5k2SG9fo9Flys1SO7Nuqh6JvkdNTY3FSI +2xiWdhMhlShkaVPxoQ6D+CW7hQT+pyImu4V5jCN4ejHZbWxX1c1KO1Dnjw4Y/4BDsBnihcl5/wM3 +EWwa5xGsJV2DdSgRlWKYTR6JPRRdRq+HhySa2UumFDXFdCo0yfSF+w5SkiI5ziztAoAVcDAgiuPM +GUQTbN57kyd/Kp3JqBOwqms3x7ZnCw6XB+ahdvnubmgen/PqghFZK8njU0PyXxB1ExFS05wnHV1n +4IdILsQpzfpOydo61/755vE5PZhBVzOE7B96MANz3iPTZ20nOCeG6pZDdBZ8C4JPV17nk7Gz4FsQ +hpkXypSJQSwwY2ZYiAWEQoaHmIujDbdIl+O3t/lNzvQ6smey14/DKY7edNXbtKVke2cMWcTu00VY +tpyrA4+4WG/L8y4Rexen1yz5E8Kds9ffc86o6MjG3m6wsWdEE4JcqLvuGKa/qe/XweApgoCd9k0L +C0mwITukx/j88KQbkCfuVGm8KQwT3MJpPxwckUy4gCiPK0suXLz5xSTedoEqQ+l8KaIe6RHr/Ngj +WmRgjpVTj/TP9AnTMyxMDkk/CkmPc3KdAQXSvH0uUfCX58PpYw+9uJs8bPrYUBS/F4HinfEXXzj1 +lhfGgZOVOTYVH869M1pm3FR8qEkN55Exp+Tw9OqTGsojEzAl950qY8ApkkfGx0pyemT4OfUz7fTI +7A/lkTFvnPbM+ZoZ123xtW+zLEZIz7HvAXswH813ESE9Z26VXRhxaZZd+bU/tkcG09A8HQ/D3ae0 +P6JHxpWRimlo43pkSHae0yPjd8ddGGDEoZJzpuJ+h132g9NzhkrOwbWsnvbceahbF/GQ0zRRlGXQ +5WbHz0k8iHqSwXbmys9qaR+MfW+YKZFXzxLjp6H5HdkjHsWIGLp6Nh3p6MIgftpPDuOeRz4MHJRX +N3Bo1lO7CM2rG/bs+qCVhICJlEISehYDYSNHwuSIx9YTHnHUUvh9fdFiZVHz4ULu65tQPhyNJbkz +4iadDzc8jo2SD+d1QhUz2SabDzfOCdXo+XBBGamTy4dDi28SmeDB+XBObunX2bj5cOatGhFTNUbL +h/M5Az/hfLhBSzz0SN8I+XDhmfWRwjq5gfuKR80XG+NMpEu3xOSzSZ2JvLDM6HFo/7IVVX8POtML +bGh5RHXC1QtWMhrzWgvST3AG1lT0fsbIsTfsF+wnYigv9C5SklznIELXbVrDn3i+aQ+SIfzmJEKv +UwTRyHCYMw2+N05j+tEkjiaTrnCUSZHhpdfR5GG1cYT3iGa0I48PpPjK+GSIvbiIcBTrlfYzTCKk +XyYX9jPuVRekl3A/TDTVnnbmF3b1u4kiwC+94HElMKZ4HYao0q47h30zUu+/J5KRys6EXKISPSOV +nXHbjWNkpLIzQlQjNCgjtTKjRUi6CVYXriaUkXo1oYzUqwllpF5NJCP1yusaaJvFFyF/zblhrmug +HQcWPA4ZDWRzuMjQ4xpozMW6CBZgUU/bTjYVjq5l10eKTSoVboS7oEdIhTPrV3p2NqlUOOK3DLfe +x0yF87QrJ54K5+VVmHwqHJWVTtUwPBUummJoXSLsmVs93I3wqBOH3AjvdRtwQJbYiBeqee0LdDah +whOYvYbXGE5Eh8ml5EixpAicGMP9IXcC+V4TbMtGvwkUesMJB5ySDSOcJyKGOYNqUS/WjPNEZ30H +aLVfrvs2nWyePU2vXD4WppMZ/nE6ua8WsJx5Dj/dTK+8f5Txz/b0cjW1P72SP8/hHyypqc6Z2znv +mrD+6akzQ7Q+I7mny8Y7dqp1ZCgJM9yq6p13tj4zH1QuLpUMyLBbXufeznwGlWZnL9qNO79kt9uA +DLvuTPEjKMPu9bjkO+g8u/9U9Ru05sywc2djZUu2QV3JbrPvmsUU3Qlgm99zX+ZK3Rl2wuKN76AA +4A3/DDumqDLHPoOSenznX9yjX95ZYIZdV/AfdGfl+dIadLAen5aQ3/3q8aWCBj1c8B0U6KV7sTnt +u9bp7Ydk2bGrmmoMTz7pG7GYu619+bYjtG+0fOx/NUN7lGa/HwvXJ6HtxHcd78x7ejHp6D7jUkWN +EE5i8ErDYt+/SpLXkduBu9ScGqxHjOguH3bt/6C89qtjdbpQtM9x9KJfRA8e4syVf2qPUwUOPXM1 +iUpyXtqvLZY0oUpymx515Eb1wuWjH5EMPg+DddGWfE0uj3N9wXXfJlZEzvfwtKmNR04ZXAutqDK4 +Pq/zyVisLbjWQPQppV1x5JGBHuEoZVR6WQuto+JxotkMp+la3wSz6dwzRL/z2H6YgWw6LzvAsCwm +l03n5fBy1OKcSDadl8vZ4+bJMbPpvA6AuM8ojp9N55VL53fXzejZdNG91uNk03l0xY53Q4hXNp1X +Ll3wGcVRsum84jTUaz3JbDovu9kpKyeRTWcDlslGvWKv42XTeeXS+eWMjJ5NZ1nV9vvHJp1N57W7 +lr0/qWw6r1y6gWjC2Nl0Xrl0hMNMNJvOa/8IvUw0my5EU5pQNp1XV74R3pGz6by6Cq8pPGw23cQg +FqoTDgOx0bLpfCA24Ww6r1y6yDlWkbPpvPji1MSz6bxy6aZCyzgOm03nnzMyyWw6r9wvm/U6oWy6 +kFtnJ5RN57VDpgY7sWy6iHblmNl0AZH3CWbTeVF54B1EPkopTkkcaocMPdl5opJ76L6knAbg3pBX +N/laSdB3c3oIhuOb+FRwJ86GaBcj1KvzUniCtIvR6tX5aBeh9eqiwmnBd0q2WFIUOIUrFp4oMFi/ +8qH7HtlPETIlkxV43WkfhpfOKUUhZltmStCkwjSAkCkZHAYmFZmcw6Z0KNxH5DB2lum0iDZ6bosI +k6rC4pXR3GDjlbnTIRZc6G4YldyzzF1InRE/8A9Z5s6nWpaz0N2ISY8WCY9+PnmYMncB55OtQndj +pCnRMndjexQjlbmbinQMZdwyd+ZZOP0dz0J3Yx/2oFrfgdtvMAIyrJ75O8GGzLPgty7kCMmvbpXb +My524HsEeJilLQacVRgikc6peY901hr2XBv2Gn6vNDp3jG/EAnVRMmBDstIOfI8dDnWIjOj8mGY4 +RIWtsHyiytOCy1CmtdIWg1cdTdBheqAP1Q11Ov30a4KnoaCzSZ2GOv2KeBoqOM2j8hSlNmSEzMfF +sZN7cySbY3Fp7H4YUucohFtG7GdlxNm46iQuRqlOFuFkF3aVisQtIybWLg7KvevyBG8FhM4i5ptM +Rcg4KUdkZnbZ5QSlY19q81ykOjk2QzIwkcG8itk+Cvy6Ghzei+b627l03VM7WmYKiLeQNYedunF2 +Fqm0bLQKht1P/2OskasWue89HjnzcQh1wv9U58UkgruklwncEkD6GTKRwet0B+nHu7jWCIkMS5k1 +dw2IsFSGEDIcPFeBmXi5doj9EpEMwyrcRcuvHLfCnTv3LRLlDF3hblRtfLgKd4GZj6OToaMXzK2e +RD9h+URRK+WNl09kVcrzJ8PxK9x5cpiIFayjV7gb4VZzzH46j3A5Rhgfu5pcYu0VUXMc9DJ6Yu1V +sFUdtdbz/fc491PZMh+TE0ishV68vFlDnrmi/QztwRzwjdN+xk+shV4C74UbLr8dy+X5B6L1ozX0 +pErENKanziAZwm/hfq2peAQyhFXd+RZaj5LE5JRiq4mI16ZHSGJ66rj3ZeSL50hn4Wb7VETD/akT +yU3t67d0QkyajF0JO3mZHMKu9GFc10MlMemjBE5q/Iv0bVbSApe9vkm6c1zdFx2PpBjqlfIml+N6 +45XhalkWw+a4Zq8/gw/N2iI2+r7457i6T22MdDWVfs8VdNaLoJlF0GFuvDJcR66UF7XcY+DtDViR +biLlHo2M1EnkuFoKOx6vPex6niHR9UhMVJpeOlhjSZIepvWVpleeauXppXJGwk+nem7fwZPIpK8/ +ZV3wbLQ+7ZMzvEtW5hRmC65PJ/yLvymnacYOT2eZu4W5Vtsu6Bx12BIvc+efdkvcmZp2H1Rx7jHp +OyhTzEonXoNOxWmhuya/9uSXhvcYMOjOtOg/6M5O58bmuXKn4c1+S/17v9S0gHw45Wz73DaomZoG +ECNZjmuNC780PPF9aftqqe2XhOef+QfgfWMcUsyd+/ew65dwKM3GP9OXL36DVrwGJZn1BMDMqtda +9STSt/1Z30Gn72elCz/wrpBBbRnczrXuzbt2FUkzSYYnn4wUzH4tQrupeFc5mdWi9DhzsjEdoV2n +//QZt/lPKCYPqJ0G6cLbKwmX6Awyn07OPaSdq6KBS1s9nf9yxYMGfKdjVDFrD3lkyD/7x361mmcV +s6hVvkIrxhiBLhrl8U9tGupola+mS+4bnw85YBrVkwRwOvU8gOZ5EjIQTguhtRsiZ6UNd7QqIAFs +OSwrbQh8WlsJXl/Usz2Y4uZzZDPC+hw5VjCp1PBA956S48SH68a24YDOTIpevM5pmYzrwvtsrItZ +3aw0B2qmEC/zBHzMNyvu/JcRfLCFoZxbwbWfHguTiVvT7NqZCDZryNIC77KJ6B+7WWmP49cyaqQW +7vNRgruhFfW8Pcs2bhktC3CkS2idshIAM6krG7Er85SWhx8makluswLl4F1xRdeRac9odSQOU5m5 +7k/IRi5O5pZF4ufHlDv/U3PDOQKKXlfh26vLRXDaOcNty4MHCGo7XrcuuPz8UbPbFP8qvZHuiLAd +PnZ7K0dPJBu8f2yM9CNf5c1+j6LlwwvITuxt7fsJtQjauHNSDn4fkgoYmAg4F56/Hw== + + + OZWzGZJDpfvGI6Vy+iTqREAGdwb3zrKzsvFYKYqmA9W/vtgwnd0E1+8eDmJhuTxDQSwkcjnMInWO +NhmIab48Ytsef6Gd+euHPlmAUY1ZQi8jZwFGzQGMdKuGXxeRK+qZ9ZFHygIczp88ahagOV5IDqCz +AvuwWYBRcwCn4uNkAUbNAZwaKwswKjyJRB45CzBqDqDbRh4uCzBAWfSNvgVnAeqzGVxVhKJ87ioA +v6YonxOTQ7K2Ri7K57AsfllRPk8v3MSL8oXVeZ9MUT5yQ3u+5zRNJ16Uz9cLN9GifJ45IxMvyjeR ++pWhRflc940HTSpAd6azCb0bauy6fsFV/SaQyTWxu6HC6/pFvxtqnLp+1tImcDeUb12/YK+QW08e +ta5fcFW/ke6G8qjrF+wu88uvHLauX3BVvyiYHOnIYmBVP89bmkeo6zduJtckTivqmVwTSkTyq+o3 +XP1K/7p+Q/gtx6jr59zziNUZhq7rN/wJ1VHq+nmlI4afhRu2rl8YJk+mrl+woJsKCa1FresXIStt +AnX9jPwt76p+bj//qHX9hsexUer6eaUjTiLn3VnXL7iX8Hp845ayNerxTaKuX3DiuxmxGrOuX/Ax +N+9baIav6xdsqQ2etR6trp83RRtV/cLzXqPV9QsGpRVJHK+uX/CB66kBM2W0un7DZKVNKu/BXdXP +V7ccsq7fOLQfva5fYJrksi0jdax+gm/xGKIe3wTqWGlj1vWzevEKW5lW0ph1/YKr+lHaH7+uX7Cv +YCo+mbp+fshOq/oFZgwNUdcvON7sycdGqOs3zCmC0ev62U9QD1b1G70e3zDFNYPq8Y1BhrZekAjH +vL3BrOsX4P+y5Euwah+hrt9wN+qMWtcv2KA2OcyYdf3M/C3PBBO79RrVJe1V1y9YzSHnLSdQ1y+4 +qt9k6vGFZeFGrcc3njfLqsc3Xl0/oxfvLNyhzlx51PWLlgzv6Rsfoa5fcDI8rZc0fl0/H8mtV/Xz +42PD1vULrupni7yPVdcv2Gz33pfh6/oFV/Ubw2/phFi0k5Bj1vXzynnyz0kcta6f55RM6zvstvmo +df0GFUN7VT/fXNEh6/p5bKyNFUzFfU/X2UEZWtcvOCHWpY+NXNfPKxfNch8HehSHqOsXnl07ibp+ +wcEF+70949T1M+nTs6qf33nLYev6BWGEzTsaWPR18AriHPz25p/VTQnXPPFh45Yu1y7j4dq9C3Lt +Bhy8p35LZ+Ji0XVKOGf3YT3HGw6yR5XNPENMGbMOgkULLMQWO21ZEHXZopj7tqskp+f7havs1TT8 +VmrrTZ60XKezwWU3Lx5uEtPxpixML6wyxemlVulsmlstHS2vNVazy5sbHTzPf3HwvsAUjts8U1QL +20zx4WGX2VnpnzOHcvaOOby7rTJHS90UU1pbEJnS01aWufh4qTGXC8135vKQ/WYu2/tzzNXWS555 +OPk8YB56qWvmaS/ZZJ6XzuPM8/rjIuZXHicXOt3Mg9Tptub3Ov3V3l13tp19TfGHSl/P7HxrnW5K +C9NHF9k4JycqC9rp7OVteXOu2UkX5znh6XjhubSqzJT3q8nlcvF0YfNsXZOWzUTAqfjCrnZfSMqH +8x+wJctFTHtLTnfqD+n4Sf3onKj7HmRvzy5drDfU6eWGcOYoAXnYJVUEl9fXk6sgxbyARcABC55n +no8SZ8ErXV6rCvAus7XJFMtXRWZntnXa6SpXNZJJamakCovl5Y10klSjnKE5iYXCR7rTvW+t4W+z +LoWdUolFPpsb7bjNs0qiALq39VB12C9ekFh6KPaxNuY1LZ+5cnR1PZ1IVmYwxXYf/6xhSc3T6WR6 +/hHBtom1Nu+xkKaKk7O4/bxxOl3rbStktzJfrcNu5uDq6nE5vxLvFxO7e3tggX7dF58W7w7+//au +tCuZHQn/Av4DKChrk/TeqKiALL64Igq4srSIICjL3Llf5rdPJeklQLtzz5kPc7yXt9NJVyeVSlWl +niQNY7quEI8jSDQMTLgf1hNs5pRWbiYkmbQ0sVLcdK7I1xnS+dmARIPIZ3WKUbbvFyx2nCTjVjIr +CCQpOA8mYweXtSKpzY20e/mayfaaSYySaTmcPxCPSIX/RNxqEq/PmDb3tsqBMcmKcS2Il2NtJyPB +Z9xpppPhvu8WLE13337fCXbZQj2l0AAlCztR9y6OZvGWVbyQjXMZzWB2x84oCWRzZBR4dxMjzIqA +Bn2eQcY5pklptxqA5Ole1BdySNxTkwh385TfURg+ZoaKDVGAOpEYHYbPyRiKnCTJ0XJxuk4SklVK +NioFjZcpJK+l5FGlL8GzF7FYen17nbZlPQYvEF5Qsl5OOC99sN/yAFxWG4lcsrm9keoON6v57QP5 +2bULlu4u1M74wJEdPXLQBJBqqOMwuxqKlJ64mV7L2fQih76QfmbohfzepnmRK3Wsna3Qqhq2heVC +dDtejAzu1w/a/TcDijRlp+FNeMvUsDqsdZIgDIoDU7UhJKtJC3mH6xrCrXIpAlfXmNn4ZOtOTBsl +Efqq1ZTsq45MSVhd2z+nFBPUAYNkLWk9279G9tUd5nq/Ba5YOW3Vp9+RuIy7gHTPRuXD0VvIakv/ +RaWWRsrokr5l3kUes09q/iQz0Nd1To2Q4WjtSmMNcn9Y1MEOFKDktCY4L21bojK9Q7iA98Jw1cT2 +VUd0y4GiOIf2TZ9lyxvn66NML/PRSHpLu0ysHeUfjkIGNdXSxv1EQ4eFmAJ9dataY7GG1jnHYd5T +AFaeZp0onFhO8Wj2F/Vm5LgRBkW5CXpzlqKHFBQD8cjuhYfeDHJ+8gbTm6zLduphqhRh0OyH6ZCz +VVjl1SrSfCMrOOswczqVCbPCRNXdT23RJNqSLAQ3n80Y1cnFCNvm/Lj5RjbOFOGnPhII7U1xcy9w +SzueqMw4nbaDl71dSvZqU4HFIXrxVIzaHNBjB4feMSVQqcd/FnqfZFXhLRpok7QWcTr01hoC6Z0Y +d6+5VgKTmM5SmQ4TF7GfGawN865WpW35Ax6edlnMPvT3O7weL6QiRDaOSNdpIFk6ZlwsVMM69Fr3 +BJ49ZsYBF7oy4dixwJLF4F4yd7g9QkDlBDE9FuF1dqEq0o6An9jwc//PEfZwir2ZJT0wC24A8XSY +X5d8pmJB/T9krilJ18bTeyH5OHeGOqFhDgqPY7wfTAls71Ysi8xIlG7iwjyJp3T1PkpmoOdT8hXt +6txpEcQXEifrnN+20RAPOf+WOSrbJ+wbdozE2TKJ2RyJ4kaRZ5FcYcceUJaDI34sknMUQbrjxRi5 +Epx7SToXY3dBBOIVohHCY6apUFhoLIwmdmREaDvwwH3/mXxP3Dms4wZETi5ABhbmESv21WDSIDlC +DrMAR5F9g3vr5Rwl8/cB+1PT4JktH1thHylA+yUT+eP4rcVbYe25Sh1W8PrIB7+p40/rEwnvXg+4 +yQI9TJJyTNJO+tbZD+IMuy4i+JYnRyh5Yq4tffja/t4gPSEEmHA9llo2E1LYZQL5hvOdzQRh7ggS +9n08xoI7ngVi98xhQYOywDm7A+qztBXlIyaMZ83tY5cF0vUA64ufqXFeSmTMOknl9otMEFzZrwVG +yQPGgnGmfv2uHMyvInjYm9mCPQu4TAjIk+sNhwm1D+SA4fKMizcuAXjLnCh9SIJiij+RRXu+b52K +uFSLb9SBnufmTYD0y1dI0AjYj4cU3c3x9MveOL15/Vim2VyswZNYkOnT+3eGxVdZeWpOXG35bjOi +QY7EbvZtNEdiFPi8DnUY+x/UYrxmk6i/uCRQ8aje5svVbxz5rXMd756Y48rY6csvZawy/LWMmdPf +1IHK2CDwSxm7HP5axuqjr6redwi0xo6MfSAijY+a8fQVVn4sY/3Z7ySifs+GK+PYu5z4kETry5rP +8wQqQsIc/6436k8TV6QYx74rVPX+9wQb2rJEYjj7ZTPGiyPD4tg3mjFb+34d5vYmpBvr65+NT3Fy +45IIbF4+VXgCrZanDSAW+aucaJlvP6yDoy1bT78UqlZ/8ltt2RpOf2OH6FkEb78c4q1ZgE+219fm +khvr873fjgT5ZP/pbS7ZH88lh5O55Nt0LjmdzbdlsD5XlcHGXFUGkfW5ZHyuIoPkXDWnw7mKTN8m +870/nU7t+EMxzPzkx1TY4EIL4euoTI45rAXib6/lQPyodsJcW3iCizeS84SS1kRqpy47bWHHIIox +NgHmgon5+3s7PHk6sqMFlVcc73bTcHX5ZsWj+mt05h9ksT6YXCVpkgC1LDZBIlfPZtQKLdB4qxta +oMlUOMFqy5JQUUbisZqaWtElpYTc6T8qtko1GofAcTR84Ob7UT7Amg21nABrnM+o4o6TIfAZ3R37 +feky9z43dEDGSyEVoTNQ1AmHU/akfy/GRV4P7lLbdkbeDW3e0TUNcK9sx94KJ4iETWNWnNQOHdC1 +PU4s8DQbo7FVKxByWkrYE/dZ1OrQ07LAwq/kU+KQPEdkRoThp0OSNUZW2r0Ysr4SI0Eh4kQU6yUa +343xvV8/Eb4azeNieYvRHhd9A4rnydVQtOlVkUvPF1KrO6nsfnVj6yH7pP153b/YH16xaG3mOnrH +opWRdq1nd/yF5ITcH/jQUKsc50KyLOjYOqfxrzhdb5mLsMhsc+2SxWiB6ZUou8o0pCIJZNVpVIxe +WV3b6ios/MpC+P2qQNaeYeg1fZNmOBG8BLyFC933myIXec00qrt2Rle2R2VDcdrSknar+eIXgt1W +tMcOd5OVkuxnMdy9zcvi9DpJ6kikbT/Krg5uDmPsiqv1tCvRe+SUgHrsYKE+auOlOMg9hiYXe9u7 +NZmFWtPKrQJO9RlTGtJGL7RBx6INplrQAw1E2kHOwxd7VxqoqwhTYc21Q9pDMbsQaKrORlwgaFGY +Q4scgMcKOio4TL+OAz87YPcVjbaPLBGsyLYeA031ZiukvQQ9SpOoq0YsHb8c27FMbZvF+kB7XXsu +NHi827uxsCvnh2Tg+OZTkumxCK+VjGnMA1VKMECJBiVBcdlByXRe4BRX0OgPWGA0ESw92bJ/HLHi +yYy3hfKaIOYS1zGqx9zAKDB9b0RVGIOMWGSdaC+l9YfgzcfIiomqZZc2O1oXt+5CCQd53/9P2qcZ +MvbTn+T5bGCOT8a9bm/oj/u2fMn9EsbVYWeUH5vmhfnvaW7Unr2Yw6k/5U/uV7Klkq7kzPaoY/rp +jl3lQeOOJ2DqwFIg0nuB+C3QftNM7tEo9Ivr5zvN3COqpxfD9JuvF28kTF/0hUjsPUTs6nUgLuYr +gXBxEifJOvNdaBubwUAeF7KdDHq8D5CjRscqLu5tH7638n+xIr7Q+1WJSMUdgg6cE2BgOxAy8R9S +swpJ5u06vIYWl01wgL+9OoA/z5AGuNJqKDvLNfJmLbfemR1kbwvnNfU421nbS063D/eSk85W3ljv +nx5c7Ul3W43yEKa6l7Wb/aIaaNHxZIe8aOizEsaxvrZJY271O1sMjoYujOgqWpjpDQ== + + + mCq1sdu6NWwcXMKyjIqwaV/hMD3YlZo/8hZuZBIQQNmJM3AiU7smwzgr2A/mkw7Igfixs/nkeDaL +A63J+RI/QXG5jNds18nAXEYh80Z8oWOw8vzdathxVo55Z6XQlR1nhWAQYB4JBoGYsism8gRVPcbW +QNw9J8mz6Bw23erGCG/PLECjHdRSlq2NH42YCmgndkis9yxJ49G4vVsibDuzyLbPqpSsRLFbhtwW +78chy5dIyAnKsYsEj3Lu7m054n6eGQjd6P5p+7Gc+1MKVFyBdM7szc4vUAzNL2jNiJFifpt5xSuj +eFbecQekMj0NmoXbht71hfYrs2DvoNE5JQuELrArv2DW7/ZsD+lOcuBdmWt4bldzROWK6Wcxd5Yl +X2+9Stpif4XonOiWfNvuCtuW6oquXxqRK8m5khmJg60XsqqlYVG8b9OObzirHhrIucJ874sP4p3j +9DQkrqIPuX7Qxm6fFceXUJm6QpGgjsRBJXQQNyIwrNFlMMat9LXG/nnM+rYvZ84sO2etvgSzzrnY +0kbkhDD1Fn7qV8Qc32LnSuTLHXVlck92awNj367PWf7hsp7NxfRIPn9wdKnbGNqLgsxWSqWuhxTc +3n4gfl/js8Uw1gLMDHVVnD1oNtTLo2S72mZqYyTKB1eZt0vQltFczFDkbVtvvu5CxtFhbtY8PYGM +nd28ETzvZG8P14vpt+BL2V44QFaJe/kxq/ZiFrSl5ces2ouZ633Hj1m1F+MLefkxq/ZifCEvP2Zh +qd/88twNftHiMnbLT23oXBumNs5q5JVht17IrSXJK8RuvZBbik2vFLv1Qm59oVVjt17IrR3XXR12 +64Xc+kKrxm69kFva+yvFbr2ii+Qtq8VuvZBbEqNeLXbrhdwS7GC12O13sIOfY7deyC2PHawGu/0i +dvBL7NYLuf02dvApdvs5drAK7NYrYg7zyhVjtx+i+SvDbr2Q2x/K2AfY7Vdl7HfYrRdy+30Z+wy7 +/YKMrQC7fQ+fWi12+7GMrQq79eLDF/Gpb2C376H5q8VuvYwIw6ZXid16Ibfvofk/x269RsaHaP6P +sFsv5PZDi/wj7PY7a9J+jt16Ibfz2nIV2O0XteUvsVsv5NbTT/4VduuF3DoaZmXYrRdyO6+TV4Hd +eiG3tp+8OuzWAsrmkFtfaNXYrRdyy1aJ/xy7ddGkhXXeLvqY3olxOxFueWQpnXUB1VseD0uXknzI +4J1NNAtbaOAt/8QmmoUtNEQn/wObaBa20HAcW+UmmoUtNKT3/4FNNAtbaFzUeKWbaBa20JB++Qc2 +0SxsoXFG5Wo30SxsobHR/BVvolmoDbTl+5toyCTc3fRAY0GWzrLA74gd5DwdOXhurR+zt/vdTZim +6q2dbjiaamIrF4F9Mtfaq6bIERb/ZFE/JRXDxeAzUXrFuBsshScuEdNjdGvxHjnzVaAIOC7cCeQU +vGLynWMTisgBFza4ozfSyh+2PsddkkIXpFhrbBZXo7B7VSww3MjZpTKn0crIjlEuIkiqbO9SidLt +OdY+FGj6zb7V8aDH2D0GkxHtRXUWMOuZhVKLiTxm4JFL20WQnG2k/0n7wLIQiPb+YNjh4VlfKAR3 +KuZ09koKKPcZs9sblpt/m2Mf9rM/BH/kVzP8WNT9oqJAQiF3yy1f+GTYGw0rT82xGfGXhz7k3z/w +he6T++NprteeQl5z/Lc/RW7VjsrVUs6f8s89s+UPQ8XQPTwAuRECD99jfzIzGg1ITiV/5T/49+to +PPXTWvkvRv5spfJ5ucvepNcamHPlgQn3pIbwf+0vcmH6ZvDPiQ/5kdVM8ldr+pDVbij4NyQO4eIZ +bv3lx8h/5L++Rf4OIXLuS0gqEnRJkURRU1VF1v2SiA1B1rGINUM2VNH/4lVIlrCgKLqKkSJqmuxP +QKagKZphYFGUFCihImmOTEKT5QUii0XavoSuqIIBSV3TkaJi7EHHUDRBN0SkK7KKoQZ+SVEUQYaK +GEjEigiVwUjUBWRoIpBTNKxBfTVd0KDSOtJlBEWy8CpDg1uGouqSJiJSSJJ1QTIUIKEYpFAZCqlY +QCqwBMmyKEkiFDKwoKu6LMoGENP8CR2pAtYkWdGgbXABL1vgoEfTF4tA01VJFiQNioGEYg0pHnSU +JTqSaAiGpENlsPFOkcX+zJJXiZ8UgqbL0BXzhZAsLRYS9c/Ep/wVGSv7HmG87r/6kKBBFxoaVkUo +D6wlgiwA00XVQBrWgb+GTu4ouqhgCYEgytB95A5SdB1ETzRkjDUN7iAFQRfBoxj6WJU8ysBISYif +8uLFo5BoSCpUFcuiCoKHgPGyKoKkKIqEQDoMBftFDWmfiMFSERADkF1NAKJAW1VlrHjQweJc1yge +tVkqstQq8qqlQgoSBeArAsbJmij6l2sjaTDyPxHuxSLwqiXuLNNZ7oil2nzeV20QJG/1/UkakwGf +PDeboI6bvVTqYDDovU7MVKpo9rpPU0thv1foqteZPrEyUFNQjRgUmAgCKOme5bNgu8xx3TEDpeF0 +oURp2Jv2moOzWbMzbg6t9yNPYuejaZM0ZX/YHZgLlmX+rYNRu/9Xb2J+RO20Z1amzfGUo6ZhA1Sc +KquaBjpQVj5oUu0T0mCtOcJbrEC59y8TzOkrKdIcN18mLJd/OOJPVoc9sgCrMh33ht2lB4vNYWdg +jo+bL+/Qnjehr8s28/+m8P+m8H/EFCYweKofq+8Xr0KIWArQOWA7NSwbREBAhrAIb5IQaF3NL0L5 +z4zSYpE245JqYKyABtBkXfWgo8Aw0DSQMqgEFiVSRJdgYEBFiFwZBjGRMFI0SVIMXVMMUQK7BeyA +lkE3g2WGItAhCggVmGykgQ+AEWG1gQRFJW8H4wFlgIsqNFwF8YXHwCtQNdIfGki5jDAyMAixPwGv +FGTwI3Qdgf2Ad0noc1FcLEJHoSKIhgj/GToGX8KDjrFEB2ohwKiBIaka7xTxEEV9Sco8BAijOYFV +yChUlgqBSvhYfMpfkbHye8Y0LAkYnAFDArVs6+NMZr8NkzLbGHHqtuoz/OGIv3blK2fYLA2sAJ3l +JBIwgTttds2LcbMH2tvXnTT/ZfqbwyGhYr5Cjr87NifT0dj0T55Gf5E78IhdHGZ/J3nffwFO02W8 + + + diff --git a/desktop/setup.py b/desktop/setup.py new file mode 100644 index 00000000..95cad942 --- /dev/null +++ b/desktop/setup.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" +import setuptools + +version = "2.4" + +setuptools.setup( + name="onionshare", + version=version, + description=( + "OnionShare lets you securely and anonymously send and receive files. It works by starting a web " + "server, making it accessible as a Tor onion service, and generating an unguessable web address so " + "others can download files from you, or upload files to you. It does _not_ require setting up a " + "separate server or using a third party file-sharing service." + ), + author="Micah Lee", + author_email="micah@micahflee.com", + maintainer="Micah Lee", + maintainer_email="micah@micahflee.com", + url="https://onionshare.org", + license="GPLv3", + keywords="onion, share, onionshare, tor, anonymous, web server", + classifiers=[ + "Programming Language :: Python :: 3", + "Framework :: Flask", + "Topic :: Communications :: File Sharing", + "Topic :: Security :: Cryptography", + "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", + "Intended Audience :: End Users/Desktop", + "Operating System :: OS Independent", + "Environment :: Web Environment", + ], + packages=[ + "onionshare", + "onionshare.tab", + "onionshare.tab.mode", + "onionshare.tab.mode.share_mode", + "onionshare.tab.mode.receive_mode", + "onionshare.tab.mode.website_mode", + "onionshare.tab.mode.chat_mode", + ], + package_data={ + "onionshare": [ + "resources/*", + "resources/images/*", + "resources/locale/*", + ] + }, + entry_points={ + "console_scripts": [ + "onionshare = onionshare:main", + ], + }, +) diff --git a/desktop/src/org.onionshare.OnionShare.appdata.xml b/desktop/src/org.onionshare.OnionShare.appdata.xml deleted file mode 100644 index 1bdac5f8..00000000 --- a/desktop/src/org.onionshare.OnionShare.appdata.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - org.onionshare.OnionShare - CC0-1.0 - GPL-3.0 - OnionShare - Securely and anonymously share files, host websites, and chat with friends - -

- OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network. -

-
- org.onionshare.OnionShare.desktop - - - https://docs.onionshare.org/2.4/en/_images/tabs.png - Types of services that OnionShare supports - - - https://github.com/onionshare/onionshare/issues/ - https://onionshare.org/ - https://onionshare.org/ - Micah Lee - micah@micahflee.com - - - - -
diff --git a/desktop/src/org.onionshare.OnionShare.desktop b/desktop/src/org.onionshare.OnionShare.desktop deleted file mode 100644 index 479dd395..00000000 --- a/desktop/src/org.onionshare.OnionShare.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=OnionShare -Exec=onionshare -Terminal=false -Type=Application -Icon=org.onionshare.OnionShare -Categories=Network;FileTransfer; -Keywords=tor;anonymity;privacy;onion service;file sharing;file hosting; -StartupNotify=true -StartupWMClass=onionshare diff --git a/desktop/src/org.onionshare.OnionShare.svg b/desktop/src/org.onionshare.OnionShare.svg deleted file mode 100644 index 502da0d8..00000000 --- a/desktop/src/org.onionshare.OnionShare.svg +++ /dev/null @@ -1,2154 +0,0 @@ - - - - - - - - - - -]> - - - - - - - - - - - - - - - - - - - eJzsvfuSHEd25vkE8Q65f8ise226FOGX8IjesTWrq7bX1FJbtzQj2dgYDSKhFkYkQAPB1vQ+/X6/ -73hkRlZlAaDIJns0qCBAVIZnXNyPn+t3zvmL/+M3v/vF9Rdv/unlL/LVeBj+4i9u37588e7N218e -/OnhV19++e03797y0c9++/PD1K5GDbr+1fJZH/hfXr795tWb1788JF3gatLJB779s7sXr1//8XD3 -7ddfvvyfPz/87Oc68Xev3n35Uqe+fPP7N1ff/OH3P99up+/fvXinU+kv619O62H9ZZ0Pv/k1p1+8 -/sOLb7559f/p5DTnJeuzmzffvv7i1evf37z5n788/GJKtR1SG9vhFymnQ245acz/8+q3L795MnC+ -WnLNKbV5rtVfuirLlKa2lnVOvsBuRFm42rQfoivfvfn8269evn73m7dvPn/5zTe3b7588/abXx5u -//ji9eHXL36vMy8O//jyyy/f/Nvh5ssXn//roMmqnz28+vKl5uWrF+8OU2YKr381pc9uvn315Rd/ -8+1X//RSM1aLP86f+ZJ//42upcvybz5un/3qK33yu5fv3umNdEOW4bd/dbN/DH3o42f/7bcvf//K -q6aZ/e8/75d9++brr168/ddvfrC54Kp/9/Krr7/U2nmOUx2vqr7q/+1/6WM1CX0tppTO77+eX/zw -i7ws+/uvh1zPHzGueVqOl3949fLffnn4mzevX8acX79997sgnFLGMf6OM7/99suXb//+9at3mouZ -j9aY9F+/+eLllxp//P7Dly881z6m098x4O9evP39y3citDdffvvOe2DZ7qBF/esXf3wJZUxxg7/9 -+uXrv3vzX/yMv0hzmq7mluuyLlNu66GUMl3lrF+WlEtdDuOVJq6uVTS/lDavIpt1PkzjNB2mxQ+h -QVMaj882Hf/uj8ANud32HE0E8xuR0N++ffX7V69/OXmSawni+qu3r7440daUdO15+5/vcFWnlZ9l -XNNcp/KRn7TqT9axzJmN+hGfxHRp5t+9e/m6T5/2yu2vd7Q/Xv36d3qd+9df3L75iuX/Br4gon+t -/SD2EueO//YZff3br2Nq/PtnopTfvH31mmsOf+Mzy2e/+fJbnfqrt2++/fpXr//5zfCz4IL/5eXn -YnUipi8Of/tP/0O/iKN5Px7+7u2Lz3UB/X4cc/Xi1dc/f+/l9HJvXx7ipL7pX7f/f/jbdy//WZzk -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 -dcuLY5p+87ef3xz5XW9tzT8H354c+Wu/ODv85n8f/ey/yc3it18dHZzc8KvfHb/+5suj88Oj04u1 -9rc948vzox+Pj36yR5y8ndj0q7Of3t46bmsvYW99fPR29Q6kOEOaBukssd9be/C3Y+vzfx6/vPi+ -PoakKtX7BIzE8v4f/s+j4+++v7jrBV8cvbr4xlbEH87PTu9s/LezN1faXlkJv3/2q8//1H7z+9OX -9Zd8znz+5i9np1/aUr6w1by355efH31nd1v74tlf3vBN7988P3/39vvxPr/+y9FPi/phMTS/edYs -Prf//8dPz5TT8e5ZWHz+5pkKsvW///jZPvwv++P/2aWfFmnx58X/+b/N4iW/+erZHkHUhf7zevkB -TlFg315whQ9U9dx62X7yYv0+L56d8iq8w1fPAIyE5ybZQU38j2JhcuNJMU7CEiJfhOATuXMgEqlw -fF+kVLFLKo3LtGnXUdjNWFUy4HriyaLZr5XnNfmkXfzj85t74F1VGXu+1LGvr7QfPIHuavt6ubZf -fRG7fRksry/fZrx87f5QoZLAeOX+4+Vr9xcVeLx2//Ey7f/u68YW2qVVM2kxhSmLKbx3MVGhTIKv -3hqU5uW71suEIAlXv6g9y7dcG3/+4ua7bt8iS/vYlGu9UcejaLKHq51sVXqd1i57z+GL9AVQTK1Z -rIajVdotJvWlIcprawrORm4oc7+/9vh6WY9Hh8R0W13mnVilmXeK2bNQL10ETjwJDO3S5dWEXHkP -yrMp3r3yHuNlfw98nsN6a+5NWcdAVi96C7Rgly5efo/l5dvfA+V+3DNr71Ev+3tk9P31yz5I2uX6 -C6qdyxcvvcfq8pX3iCsxub4fVpfH27y4chmGyKBlEWXjp/oeQWO01g+/9sWVTvvVDxAIfz89PXh9 -9HKhq4iGRXtdKtx6uoTm/ccLZmJRxSm7ae3wuPbFeAEkiH7tgLnt+urg8Re0f/5rO4SDCUkt1Z4s -c4AYMinYywuZIGpX9wll430IHTytpbveqK6q6/fKAiZzWNR0270uNxp3ytVm7DpKMZ1+8vWNz7vc -5ta38sLpDpLe2N32Vpcb3fpWUEoVnghq0G2vdbkR92JFvm+BkaVUzF5/fXWFjV+c3Lxum0vzcnOj -a3f6/tl/2hr9/56NWuIWLlMBF1AjAstF/55leqlRnS6KvUlmGCdR9QfFmhEmvu1eVw== - - - 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 - - - diff --git a/desktop/src/setup.py b/desktop/src/setup.py deleted file mode 100644 index 95cad942..00000000 --- a/desktop/src/setup.py +++ /dev/null @@ -1,72 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" -import setuptools - -version = "2.4" - -setuptools.setup( - name="onionshare", - version=version, - description=( - "OnionShare lets you securely and anonymously send and receive files. It works by starting a web " - "server, making it accessible as a Tor onion service, and generating an unguessable web address so " - "others can download files from you, or upload files to you. It does _not_ require setting up a " - "separate server or using a third party file-sharing service." - ), - author="Micah Lee", - author_email="micah@micahflee.com", - maintainer="Micah Lee", - maintainer_email="micah@micahflee.com", - url="https://onionshare.org", - license="GPLv3", - keywords="onion, share, onionshare, tor, anonymous, web server", - classifiers=[ - "Programming Language :: Python :: 3", - "Framework :: Flask", - "Topic :: Communications :: File Sharing", - "Topic :: Security :: Cryptography", - "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", - "Intended Audience :: End Users/Desktop", - "Operating System :: OS Independent", - "Environment :: Web Environment", - ], - packages=[ - "onionshare", - "onionshare.tab", - "onionshare.tab.mode", - "onionshare.tab.mode.share_mode", - "onionshare.tab.mode.receive_mode", - "onionshare.tab.mode.website_mode", - "onionshare.tab.mode.chat_mode", - ], - package_data={ - "onionshare": [ - "resources/*", - "resources/images/*", - "resources/locale/*", - ] - }, - entry_points={ - "console_scripts": [ - "onionshare = onionshare:main", - ], - }, -) -- cgit v1.2.3-54-g00ecf From 1d537125443fbea771f298c24f33a5ffde8e7ef7 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:33:11 -0800 Subject: Continue switching from briefcase to poetry --- .circleci/config.yml | 9 +- desktop/README.md | 102 +++++--------------- desktop/poetry.lock | 173 +++++++++++++++++++++++++++++++++- desktop/pyproject.toml | 3 + desktop/scripts/build-meek-client.py | 6 +- desktop/scripts/check_lacked_trans.py | 154 ------------------------------ desktop/scripts/dev.bat | 3 - desktop/scripts/dev.sh | 9 -- desktop/scripts/get-tor-linux.py | 2 +- desktop/scripts/get-tor-osx.py | 2 +- desktop/scripts/get-tor-windows.py | 2 +- desktop/scripts/rebuild-cli.py | 45 --------- 12 files changed, 204 insertions(+), 306 deletions(-) delete mode 100755 desktop/scripts/check_lacked_trans.py delete mode 100644 desktop/scripts/dev.bat delete mode 100755 desktop/scripts/dev.sh delete mode 100755 desktop/scripts/rebuild-cli.py diff --git a/.circleci/config.yml b/.circleci/config.yml index b9938c28..59eafc34 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -50,16 +50,11 @@ jobs: sudo apt-get update sudo apt-get install -y tor obfs4proxy gcc python3-dev python3-pyside2.qtcore python3-pyside2.qtwidgets python3-pyside2.qtgui sudo apt-get install -y xvfb x11-utils libxkbcommon-x11-0 libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev libxcb-render-util0 libxcb-icccm4 libxcb-keysyms1 libxcb-image0 - cd ~/repo/cli - poetry install - poetry build - cp dist/onionshare_cli-*.whl ~/repo/desktop cd ~/repo/desktop - pip install briefcase pytest pytest-briefcase pytest-faulthandler pytest-qt pytest-xvfb - pip install $(python -c 'import toml; print(" ".join(toml.loads(open("pyproject.toml").read())["tool"]["briefcase"]["app"]["onionshare"]["requires"]))') + poetry install - run: name: Run tests command: | cd ~/repo/desktop - ./tests/run.sh + poetry run ./tests/run.sh diff --git a/desktop/README.md b/desktop/README.md index 9c55f343..06ca9067 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -9,58 +9,44 @@ git clone https://github.com/onionshare/onionshare.git cd onionshare/desktop ``` +Make sure you have Python 3 installed. If you're using Windows or macOS, install version 3.10.1 [from python.org](https://www.python.org/downloads/release/python-3101/). For Windows, make sure to install the 32-bit (x86) version, and to check the box to add python to the path on the first page of the installer. + +Make sure you have [poetry installed](https://python-poetry.org/docs/#installation), and then install the dependencies: + +```sh +poetry install +``` + ### Install platform-specific dependencies #### Linux In Ubuntu 20.04 you need the `libxcb-xinerama0` package installed. -Install python dependencies: - -```sh -pip3 install --user poetry requests -``` - Download Tor Browser and extract the binaries: ```sh -./scripts/get-tor-linux.py +poetry run ./scripts/get-tor-linux.py ``` #### macOS -Download and install Python 3.8.6 from https://www.python.org/downloads/release/python-386/. I downloaded `python-3.8.6-macosx10.9.pkg`. (You may need to also run `/Applications/Python\ 3.8/Install\ Certificates.command`.) - -Install python dependencies: - -```sh -pip3 install --user poetry requests -``` - Download Tor Browser and extract the binaries: ```sh -./scripts/get-tor-osx.py +poetry run ./scripts/get-tor-osx.py ``` #### Windows These instructions include adding folders to the path in Windows. To do this, go to Start and type "advanced system settings", and open "View advanced system settings" in the Control Panel. Click Environment Variables. Under "System variables" double-click on Path. From there you can add and remove folders that are available in the PATH. -Download Python 3.8.6, 32-bit (x86) from https://www.python.org/downloads/release/python-386/. I downloaded `python-3.8.6.exe`. When installing it, make sure to check the "Add Python 3.8 to PATH" checkbox on the first page of the installer. - Download and install 7-Zip from https://7-zip.org/download.html. I downloaded `7z1900.exe`. Add `C:\Program Files (x86)\7-Zip` to your path. -Install python dependencies: - -``` -pip install poetry requests -``` - Download Tor Browser and extract the binaries: -``` -python scripts\get-tor-windows.py +```sh +poetry run python scripts\get-tor-windows.py ``` ### Compile dependencies @@ -69,75 +55,31 @@ Install Go. The simplest way to make sure everything works is to install Go by f Download and compile `meek-client`: -``` -./scripts/build-meek-client.py -``` - -### Prepare the virtual environment - -OnionShare uses [Briefcase](https://briefcase.readthedocs.io/en/latest/). - -Install Briefcase dependencies by following [these instructions](https://docs.beeware.org/en/latest/tutorial/tutorial-0.html#install-dependencies). - -Now create and/or activate a virtual environment. - -* Linux and macOS - ``` - python3 -m venv venv - . venv/bin/activate - ``` -* Windows - ``` - python -m venv venv - venv\Scripts\activate.bat - ``` - -While your virtual environment is active, install briefcase from pip. - -``` -pip install briefcase -``` - -In order to work with the desktop app, you'll need to build a wheel of the CLI package first, and copy it into the `desktop` folder. You'll need to re-run this script each time you change the CLI code. - ```sh -python scripts/rebuild-cli.py +./scripts/build-meek-client.py ``` ### Running OnionShare from the source code tree -Inside the virtual environment, run OnionShare like this to install all of the dependencies: +To run OnionShare from the source tree: -``` -briefcase dev -d -``` - -Once you have the dependencies installed, you can run it using the `dev.sh` script, which lets you use command line arguments, such as to `--verbose` or `--local-only`: - -``` -./scripts/dev.sh --help -./scripts/dev.sh -v -./scripts/dev.sh -v --local-only +```sh +poetry run onionshare +poetry run onionshare --help +poetry run onionshare -v +poetry run onionshare -v --local-only ``` -Windows uses `scripts\dev.bat` instead. - ## Running tests -Install these packages inside your virtual environment: - -```sh -pip install pytest pytest-briefcase pytest-faulthandler pytest-qt -``` - -Then run the tests: +Run the tests: ```sh -./tests/run.sh +poetry run ./tests/run.sh ``` If you want to run tests while hiding the GUI, you must have the `xvfb` package installed, and then: ```sh -xvfb-run ./tests/run.sh +xvfb-run poetry run ./tests/run.sh ``` diff --git a/desktop/poetry.lock b/desktop/poetry.lock index c3aaabe0..164c455b 100644 --- a/desktop/poetry.lock +++ b/desktop/poetry.lock @@ -1,3 +1,25 @@ +[[package]] +name = "atomicwrites" +version = "1.4.0" +description = "Atomic file writes." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "attrs" +version = "21.2.0" +description = "Classes Without Boilerplate" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] + [[package]] name = "bidict" version = "0.21.4" @@ -197,6 +219,14 @@ docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] perf = ["ipython"] testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +[[package]] +name = "iniconfig" +version = "1.1.1" +description = "iniconfig: brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "itsdangerous" version = "1.1.0" @@ -262,6 +292,17 @@ urllib3 = "*" type = "directory" url = "../cli" +[[package]] +name = "packaging" +version = "21.3" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" + [[package]] name = "pathspec" version = "0.9.0" @@ -282,6 +323,18 @@ python-versions = ">=3.6" docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + [[package]] name = "psutil" version = "5.8.0" @@ -293,6 +346,14 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] +[[package]] +name = "py" +version = "1.11.0" +description = "library with cross-python path, ini-parsing, io, code, log facilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + [[package]] name = "pycparser" version = "2.21" @@ -317,6 +378,17 @@ six = "*" docs = ["sphinx (>=1.6.5)", "sphinx-rtd-theme"] tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] +[[package]] +name = "pyparsing" +version = "3.0.6" +description = "Python parsing module" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] + [[package]] name = "pyside2" version = "5.15.2" @@ -336,6 +408,53 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pytest" +version = "6.2.5" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +py = ">=1.8.2" +toml = "*" + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] + +[[package]] +name = "pytest-faulthandler" +version = "2.0.1" +description = "py.test plugin that activates the fault handler module for tests (dummy package)" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +pytest = ">=5.0" + +[[package]] +name = "pytest-qt" +version = "4.0.2" +description = "pytest support for PyQt and PySide applications" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +pytest = ">=3.0.0" + +[package.extras] +dev = ["pre-commit", "tox"] +doc = ["sphinx", "sphinx-rtd-theme"] + [[package]] name = "python-engineio" version = "4.3.0" @@ -417,6 +536,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "toml" +version = "0.10.2" +description = "Python Library for Tom's Obvious, Minimal Language" +category = "dev" +optional = false +python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" + [[package]] name = "tomli" version = "1.2.3" @@ -481,9 +608,17 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = ">=3.9,<3.10" -content-hash = "fef2babd1d9cc50bdb8c183a72619123e66ea02c88b20257653ad31ac2c9b7ee" +content-hash = "1248f936dce04a72a33d9d6cc5b3e2222662f0a95712443fe8709bef82a06c8a" [metadata.files] +atomicwrites = [ + {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, + {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, +] +attrs = [ + {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, + {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, +] bidict = [ {file = "bidict-0.21.4-py3-none-any.whl", hash = "sha256:3ac67daa353ecf853a1df9d3e924f005e729227a60a8dbada31a4c31aba7f654"}, {file = "bidict-0.21.4.tar.gz", hash = "sha256:42c84ffbe6f8de898af6073b4be9ea7ccedcd78d3474aa844c54e49d5a079f6f"}, @@ -667,6 +802,10 @@ importlib-metadata = [ {file = "importlib_metadata-4.9.0-py3-none-any.whl", hash = "sha256:e8b45564028bc25f8c99f546616112a6df5de6655893d7eb74c9a99680dc9751"}, {file = "importlib_metadata-4.9.0.tar.gz", hash = "sha256:ee50794eccb0ec340adbc838344ebb9a6ff2bcba78f752d31fc716497e2149d6"}, ] +iniconfig = [ + {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, + {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, +] itsdangerous = [ {file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"}, {file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"}, @@ -736,6 +875,10 @@ mypy-extensions = [ {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] onionshare-cli = [] +packaging = [ + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, +] pathspec = [ {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, @@ -744,6 +887,10 @@ platformdirs = [ {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, ] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] psutil = [ {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, {file = "psutil-5.8.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ae6f386d8d297177fd288be6e8d1afc05966878704dad9847719650e44fc49c"}, @@ -774,6 +921,10 @@ psutil = [ {file = "psutil-5.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:f4634b033faf0d968bb9220dd1c793b897ab7f1189956e1aa9eae752527127d3"}, {file = "psutil-5.8.0.tar.gz", hash = "sha256:0c9ccb99ab76025f2f0bbecf341d4656e9c1351db8cc8a03ccd62e318ab4b5c6"}, ] +py = [ + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, +] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, @@ -798,6 +949,10 @@ pynacl = [ {file = "PyNaCl-1.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:7c6092102219f59ff29788860ccb021e80fffd953920c4a8653889c029b2d420"}, {file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"}, ] +pyparsing = [ + {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, + {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, +] pyside2 = [ {file = "PySide2-5.15.2-5.15.2-cp27-cp27m-macosx_10_13_intel.whl", hash = "sha256:4f17a0161995678110447711d685fcd7b15b762810e8f00f6dc239bffb70a32e"}, {file = "PySide2-5.15.2-5.15.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:0558ced3bcd7f9da638fa8b7709dba5dae82a38728e481aac8b9058ea22fcdd9"}, @@ -811,6 +966,18 @@ pysocks = [ {file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"}, {file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"}, ] +pytest = [ + {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, + {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, +] +pytest-faulthandler = [ + {file = "pytest-faulthandler-2.0.1.tar.gz", hash = "sha256:ed72bbce87ac344da81eb7d882196a457d4a1026a3da4a57154dacd85cd71ae5"}, + {file = "pytest_faulthandler-2.0.1-py2.py3-none-any.whl", hash = "sha256:236430ba962fd1c910d670922be55fe5b25ea9bc3fc6561a0cafbb8759e7504d"}, +] +pytest-qt = [ + {file = "pytest-qt-4.0.2.tar.gz", hash = "sha256:dfc5240dec7eb43b76bcb5f9a87eecae6ef83592af49f3af5f1d5d093acaa93e"}, + {file = "pytest_qt-4.0.2-py2.py3-none-any.whl", hash = "sha256:e03847ac02a890ccaac0fde1748855b9dce425aceba62005c6cfced6cf7d5456"}, +] python-engineio = [ {file = "python-engineio-4.3.0.tar.gz", hash = "sha256:fed35eeacfa21f53f1fc05ef0cadd65a50780364da3a2be7650eb92f928fdb11"}, {file = "python_engineio-4.3.0-py3-none-any.whl", hash = "sha256:ad06a975f7e14cb3bb7137cbf70fd883804484d29acd58004d1db1e2a7fc0ad3"}, @@ -838,6 +1005,10 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +toml = [ + {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, + {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, +] tomli = [ {file = "tomli-1.2.3-py3-none-any.whl", hash = "sha256:e3069e4be3ead9668e21cb9b074cd948f7b3113fd9c8bba083f48247aab8b11c"}, {file = "tomli-1.2.3.tar.gz", hash = "sha256:05b6166bff487dc068d322585c7ea4ef78deed501cc124060e0f238e89a9231f"}, diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml index 580994a6..977554f9 100644 --- a/desktop/pyproject.toml +++ b/desktop/pyproject.toml @@ -14,6 +14,9 @@ cx_freeze = {version = "*", platform = "win32"} [tool.poetry.dev-dependencies] black = "*" +pytest = "*" +pytest-faulthandler = "*" +pytest-qt = "*" [build-system] requires = ["poetry-core>=1.0.0"] diff --git a/desktop/scripts/build-meek-client.py b/desktop/scripts/build-meek-client.py index ee4d28ee..563e9a01 100755 --- a/desktop/scripts/build-meek-client.py +++ b/desktop/scripts/build-meek-client.py @@ -48,12 +48,10 @@ def main(): os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) ) if platform.system() == "Windows": - dist_path = os.path.join( - root_path, "src", "onionshare", "resources", "tor", "Tor" - ) + dist_path = os.path.join(root_path, "onionshare", "resources", "tor", "Tor") bin_filename = "meek-client.exe" else: - dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor") + dist_path = os.path.join(root_path, "onionshare", "resources", "tor") bin_filename = "meek-client" bin_path = os.path.join(os.path.expanduser("~"), "go", "bin", bin_filename) diff --git a/desktop/scripts/check_lacked_trans.py b/desktop/scripts/check_lacked_trans.py deleted file mode 100755 index 2456c995..00000000 --- a/desktop/scripts/check_lacked_trans.py +++ /dev/null @@ -1,154 +0,0 @@ -#!/usr/bin/env python3 -# -*- coding: utf-8 -*- - -""" -Check translation lacked or disused. - -Example: -in OnionShare directory -$ check_lacked_trans.py -de disused choose_file -de disused gui_starting_server -de lacked gui_canceled -de lacked gui_starting_server1 -de lacked gui_starting_server2 -de lacked gui_starting_server3 -en disused choose_file -es disused choose_file -es disused gui_starting_server -... - - -1. search `{{strings.translation_key}}` and `strings._('translation_key')` - from .py or .html files. -2. load translation key from locale/*.json. -3. compare these. - -""" - - -import argparse -import re -import os -import codecs -import json -import sys - - -def arg_parser(): - desc = __doc__.strip().splitlines()[0] - p = argparse.ArgumentParser(description=desc) - p.add_argument( - "-d", - default=".", - help="onionshare directory", - metavar="ONIONSHARE_DIR", - dest="onionshare_dir", - ) - p.add_argument( - "--show-all-keys", - action="store_true", - help="show translation key in source and exit", - ), - p.add_argument( - "-l", - default="all", - help="language code (default: all)", - metavar="LANG_CODE", - dest="lang_code", - ) - return p - - -def files_in(*dirs): - dir = os.path.join(*dirs) - files = os.listdir(dir) - return [os.path.join(dir, f) for f in files] - - -def main(): - parser = arg_parser() - args = parser.parse_args() - - dir = args.onionshare_dir - - src = ( - 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") - ) - filenames = [p for p in src if p.endswith(".py")] - - lang_code = args.lang_code - - translate_keys = set() - 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 - if src[quote_i] == "'": - quote = "'" - break - 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): - print(k) - sys.exit() - - if lang_code == "all": - locale_files = [f for f in files_in(dir, "share/locale") if f.endswith(".json")] - else: - locale_files = [ - f - for f in files_in(dir, "share/locale") - if f.endswith("%s.json" % lang_code) - ] - for locale_file in locale_files: - with codecs.open(locale_file, "r", encoding="utf-8") as f: - trans = json.load(f) - # trans -> {"key1": "translate-text1", "key2": "translate-text2", ...} - locale_keys = set(trans.keys()) - - disused = locale_keys - translate_keys - lacked = translate_keys - locale_keys - - locale, ext = os.path.splitext(os.path.basename(locale_file)) - for k in sorted(disused): - print(locale, "disused", k) - - for k in sorted(lacked): - print(locale, "lacked", k) - - -if __name__ == "__main__": - main() diff --git a/desktop/scripts/dev.bat b/desktop/scripts/dev.bat deleted file mode 100644 index 9b537a90..00000000 --- a/desktop/scripts/dev.bat +++ /dev/null @@ -1,3 +0,0 @@ -cd src -python -c "import onionshare; onionshare.main()" %* -cd .. \ No newline at end of file diff --git a/desktop/scripts/dev.sh b/desktop/scripts/dev.sh deleted file mode 100755 index 18fade68..00000000 --- a/desktop/scripts/dev.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash - -# Run OnionShare desktop, allowing you to use command-line arguments - -SCRIPTS_DIR=$( cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd ) -cd "$SCRIPTS_DIR" - -cd ../src -python -c "import onionshare; onionshare.main()" $@ diff --git a/desktop/scripts/get-tor-linux.py b/desktop/scripts/get-tor-linux.py index 1f5e36fd..a911713d 100755 --- a/desktop/scripts/get-tor-linux.py +++ b/desktop/scripts/get-tor-linux.py @@ -47,7 +47,7 @@ def main(): ) working_path = os.path.join(root_path, "build", "tor") tarball_path = os.path.join(working_path, tarball_filename) - dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor") + dist_path = os.path.join(root_path, "onionshare", "resources", "tor") # Make sure dirs exist if not os.path.exists(working_path): diff --git a/desktop/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py index c5c01836..2f2d2959 100755 --- a/desktop/scripts/get-tor-osx.py +++ b/desktop/scripts/get-tor-osx.py @@ -51,7 +51,7 @@ def main(): "/Volumes", "Tor Browser", "Tor Browser.app", "Contents" ) dmg_path = os.path.join(working_path, dmg_filename) - dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor") + dist_path = os.path.join(root_path, "onionshare", "resources", "tor") if not os.path.exists(dist_path): os.makedirs(dist_path, exist_ok=True) diff --git a/desktop/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py index 69c98a1b..4bd89ec4 100644 --- a/desktop/scripts/get-tor-windows.py +++ b/desktop/scripts/get-tor-windows.py @@ -46,7 +46,7 @@ def main(): ) working_path = os.path.join(root_path, "build", "tor") exe_path = os.path.join(working_path, exe_filename) - dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor") + dist_path = os.path.join(root_path, "onionshare", "resources", "tor") # Make sure the working folder exists if not os.path.exists(working_path): diff --git a/desktop/scripts/rebuild-cli.py b/desktop/scripts/rebuild-cli.py deleted file mode 100755 index f9a43554..00000000 --- a/desktop/scripts/rebuild-cli.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python3 -""" -This script builds the CLI python wheel, copies it to the desktop folder, -and installs it in the virtual environment. -""" - -import inspect -import os -import glob -import subprocess -import shutil - - -def main(): - # Build paths - root_path = os.path.dirname( - os.path.dirname( - os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) - ) - ) - cli_path = os.path.join(root_path, "cli") - desktop_path = os.path.join(root_path, "desktop") - - # Delete old wheels - for filename in glob.glob(os.path.join(cli_path, "dist", "*.whl")): - os.remove(filename) - - # Build new wheel - subprocess.call(["poetry", "install"], cwd=cli_path) - subprocess.call(["poetry", "build"], cwd=cli_path) - wheel_filename = glob.glob(os.path.join(cli_path, "dist", "*.whl"))[0] - wheel_basename = os.path.basename(wheel_filename) - shutil.copyfile( - wheel_filename, - os.path.join(desktop_path, wheel_basename), - ) - - # Reinstall the new wheel - subprocess.call(["pip", "uninstall", "onionshare-cli", "-y"]) - subprocess.call(["pip", "install", os.path.join(desktop_path, wheel_basename)]) - subprocess.call(["pip", "install", "typing-extensions"]) - - -if __name__ == "__main__": - main() -- cgit v1.2.3-54-g00ecf From b03a9bf610b9170a5394ade6278f2f34655938d1 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:36:45 -0800 Subject: Update snapcraft --- snap/snapcraft.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index b07faab9..e64b4af1 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -38,7 +38,7 @@ apps: parts: onionshare: - source: ./desktop/src + source: ./desktop plugin: python python-version: python3 python-packages: -- cgit v1.2.3-54-g00ecf From 868b1fa2b6847fda625e571a92729e497194f6fc Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 19 Dec 2021 17:42:11 -0800 Subject: Update release docs, and remove appimage script that didn't work --- RELEASE.md | 43 +++++------------------------- desktop/package/linux/build-appimage.py | 46 --------------------------------- 2 files changed, 7 insertions(+), 82 deletions(-) delete mode 100755 desktop/package/linux/build-appimage.py diff --git a/RELEASE.md b/RELEASE.md index 7021b362..4dcd1770 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -9,9 +9,9 @@ Before making a release, you must update the version in these places: - [ ] `cli/pyproject.toml` - [ ] `cli/setup.py` - [ ] `cli/onionshare_cli/resources/version.txt` -- [ ] `desktop/pyproject.toml` (under `version` and **don't forget** the `./onionshare_cli-$VERSION-py3-none-any.whl` dependency) -- [ ] `desktop/src/setup.py` -- [ ] `desktop/src/org.onionshare.OnionShare.appdata.xml` +- [ ] `desktop/pyproject.toml` +- [ ] `desktop/setup.py` +- [ ] `desktop/org.onionshare.OnionShare.appdata.xml` - [ ] `docs/source/conf.py` (`version` at the top, and the `versions` list too) - [ ] `snap/snapcraft.yaml` @@ -19,6 +19,7 @@ If you update `flask-socketio`, ensure that you also update the [socket.io.min.j Use tor binaries from the latest Tor Browser: +- [ ] `desktop/scripts/get-tor-linux.py` - [ ] `desktop/scripts/get-tor-osx.py` - [ ] `desktop/scripts/get-tor-windows.py` @@ -42,7 +43,7 @@ Finalize localization: You also must edit these files: -- [ ] `desktop/src/org.onionshare.OnionShare.appdata.xml` should have the correct release date, and links to correct screenshots +- [ ] `desktop/org.onionshare.OnionShare.appdata.xml` should have the correct release date, and links to correct screenshots - [ ] `CHANGELOG.md` should be updated to include a list of all major changes since the last release Make sure snapcraft packaging works. In `snap/snapcraft.yaml`: @@ -97,38 +98,14 @@ snapcraft login snapcraft upload --release=stable onionshare_$VERSION_amd64.snap ``` -## Linux AppImage release - -_Note: AppImage packages are currently broken due to [this briefcase bug](https://github.com/beeware/briefcase/issues/504). Until it's fixed, OnionShare for Linux will only be available in Flatpak and Snapcraft._ - -Set up the development environment described in `README.md`. - -Make sure your virtual environment is active: - -```sh -. venv/bin/activate -``` - -Run the AppImage build script: - -```sh -./package/linux/build-appimage.py -``` - ## Windows Set up the development environment described in `README.md`. And install the [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) and add `C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86` to your path. -Make sure your virtual environment is active: - -``` -venv\Scripts\activate.bat -``` - Run the Windows build script: ``` -python package\windows\build.py +poetry run python .\package\windows\build.py ``` This will create `desktop/windows/OnionShare-$VERSION.msi`, signed. @@ -141,16 +118,10 @@ Set up the development environment described in `README.md`. And install `create brew install create-dmg ``` -Make sure your virtual environment is active: - -```sh -. venv/bin/activate -``` - Run the macOS build script: ```sh -./package/macos/build.py --with-codesign +poetry run ./package/macos/build.py --with-codesign ``` Now, notarize the release. You must have an app-specific Apple ID password saved in the login keychain called `onionshare-notarize`. diff --git a/desktop/package/linux/build-appimage.py b/desktop/package/linux/build-appimage.py deleted file mode 100755 index dfaba1b4..00000000 --- a/desktop/package/linux/build-appimage.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env python3 -import os -import inspect -import subprocess -import shutil -import glob - -root = os.path.dirname( - os.path.dirname( - os.path.dirname( - os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) - ) - ) -) - - -def run(cmd, cwd=None): - subprocess.run(cmd, cwd=cwd, check=True) - - -def main(): - cli_dir = os.path.join(root, "cli") - desktop_dir = os.path.join(root, "desktop") - - print("○ Clean up from last build") - if os.path.exists(os.path.join(cli_dir, "dist")): - shutil.rmtree(os.path.join(cli_dir, "dist")) - if os.path.exists(os.path.join(desktop_dir, "linux")): - shutil.rmtree(os.path.join(desktop_dir, "linux")) - - print("○ Building onionshare-cli") - run(["poetry", "install"], cli_dir) - run(["poetry", "build"], cli_dir) - whl_filename = glob.glob(os.path.join(cli_dir, "dist", "*.whl"))[0] - whl_basename = os.path.basename(whl_filename) - shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename)) - - print("○ Create the binary") - run(["briefcase", "create"], desktop_dir) - - print("○ Create the AppImage") - run(["briefcase", "build"], desktop_dir) - - -if __name__ == "__main__": - main() -- cgit v1.2.3-54-g00ecf From a335e9738cac0157db681fc2c6cdaf1ffbaea628 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Tue, 21 Dec 2021 14:11:22 +1100 Subject: Connect to the emitted TorConnectionDialog success to trigger tab update (fixes persistent tab update) --- desktop/src/onionshare/main_window.py | 1 + desktop/src/onionshare/tor_connection.py | 1 + 2 files changed, 2 insertions(+) diff --git a/desktop/src/onionshare/main_window.py b/desktop/src/onionshare/main_window.py index 546592a1..6e5cd61d 100644 --- a/desktop/src/onionshare/main_window.py +++ b/desktop/src/onionshare/main_window.py @@ -163,6 +163,7 @@ class MainWindow(QtWidgets.QMainWindow): # Start the "Connecting to Tor" dialog, which calls onion.connect() tor_con = TorConnectionDialog(self.common) tor_con.canceled.connect(self.tor_connection_canceled) + tor_con.success.connect(self.tabs.tor_is_connected) tor_con.open_tor_settings.connect(self.tor_connection_open_tor_settings) if not self.common.gui.local_only: tor_con.start() diff --git a/desktop/src/onionshare/tor_connection.py b/desktop/src/onionshare/tor_connection.py index 2cc599c4..d17ea7cb 100644 --- a/desktop/src/onionshare/tor_connection.py +++ b/desktop/src/onionshare/tor_connection.py @@ -119,6 +119,7 @@ class TorConnectionDialog(QtWidgets.QProgressDialog): self.active = False # Close the dialog after connecting self.setValue(self.maximum()) + self.success.emit() def _canceled_connecting_to_tor(self): self.common.log("TorConnectionDialog", "_canceled_connecting_to_tor") -- cgit v1.2.3-54-g00ecf From bd12949652b577ae993f26db278531dd4223ce7b Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 14:15:20 -0800 Subject: Update python dependencies --- cli/poetry.lock | 62 ++++++++++++++++++++++++++++++++++---------------- desktop/poetry.lock | 32 +++++++++++++++++++++----- desktop/pyproject.toml | 5 ++-- 3 files changed, 72 insertions(+), 27 deletions(-) diff --git a/cli/poetry.lock b/cli/poetry.lock index 966aea84..bd74381e 100644 --- a/cli/poetry.lock +++ b/cli/poetry.lock @@ -57,7 +57,7 @@ pycparser = "*" [[package]] name = "charset-normalizer" -version = "2.0.7" +version = "2.0.9" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -99,7 +99,7 @@ trio = ["trio (>=0.14.0)", "sniffio (>=1.1)"] [[package]] name = "eventlet" -version = "0.32.0" +version = "0.33.0" description = "Highly concurrent networking library" category = "main" optional = false @@ -162,7 +162,7 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.8.2" +version = "4.8.3" description = "Read metadata from Python packages" category = "dev" optional = false @@ -217,14 +217,14 @@ python-versions = ">=3.6" [[package]] name = "packaging" -version = "21.2" +version = "21.3" description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -pyparsing = ">=2.0.2,<3" +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pluggy" @@ -286,11 +286,14 @@ tests = ["pytest (>=3.2.1,!=3.3.0)", "hypothesis (>=3.27.0)"] [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.6" description = "Python parsing module" category = "dev" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pysocks" @@ -387,7 +390,7 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "typing-extensions" -version = "4.0.0" +version = "4.0.1" description = "Backported and Experimental Type Hints for Python 3.6+" category = "dev" optional = false @@ -516,8 +519,8 @@ cffi = [ {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"}, - {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"}, + {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, + {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -532,8 +535,8 @@ dnspython = [ {file = "dnspython-2.1.0.zip", hash = "sha256:e4a87f0b573201a0f3727fa18a516b055fd1107e0e5477cded4a2de497df1dd4"}, ] eventlet = [ - {file = "eventlet-0.32.0-py2.py3-none-any.whl", hash = "sha256:a3a67b02f336e97a1894b277bc33b695831525758781eb024f4da00e75ce5e25"}, - {file = "eventlet-0.32.0.tar.gz", hash = "sha256:2f0bb8ed0dc0ab21d683975d5d8ab3c054d588ce61def9faf7a465ee363e839b"}, + {file = "eventlet-0.33.0-py2.py3-none-any.whl", hash = "sha256:d10a8fcc9e33381905d9873303fde96ebe3541c03fb795055d2c7347dce0639c"}, + {file = "eventlet-0.33.0.tar.gz", hash = "sha256:80144f489c1bb273a51b6f96ff9785a382d2866b9bab1f5bd748385019f4141f"}, ] flask = [ {file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"}, @@ -555,6 +558,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, + {file = "greenlet-1.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965"}, {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, @@ -567,6 +571,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, + {file = "greenlet-1.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f"}, {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, @@ -575,6 +580,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, + {file = "greenlet-1.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe"}, {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, @@ -583,6 +589,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, + {file = "greenlet-1.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2"}, {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, @@ -591,6 +598,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, + {file = "greenlet-1.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3"}, {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, @@ -600,8 +608,8 @@ idna = [ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.8.2-py3-none-any.whl", hash = "sha256:53ccfd5c134223e497627b9815d5030edf77d2ed573922f7a0b8f8bb81a1c100"}, - {file = "importlib_metadata-4.8.2.tar.gz", hash = "sha256:75bdec14c397f528724c1bfd9709d660b33a4d2e77387a3358f20b848bb5e5fb"}, + {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, + {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -621,6 +629,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, @@ -632,6 +643,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, @@ -643,6 +657,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, @@ -655,6 +672,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, @@ -667,13 +687,16 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] packaging = [ - {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"}, - {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -738,8 +761,8 @@ pynacl = [ {file = "PyNaCl-1.4.0.tar.gz", hash = "sha256:54e9a2c849c742006516ad56a88f5c74bf2ce92c9f67435187c3c5953b346505"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, + {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, ] pysocks = [ {file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"}, @@ -771,7 +794,8 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] typing-extensions = [ - {file = "typing_extensions-4.0.0-py3-none-any.whl", hash = "sha256:829704698b22e13ec9eaf959122315eabb370b0884400e9818334d8b677023d9"}, + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ] unidecode = [ {file = "Unidecode-1.3.2-py3-none-any.whl", hash = "sha256:215fe33c9d1c889fa823ccb66df91b02524eb8cc8c9c80f9c5b8129754d27829"}, diff --git a/desktop/poetry.lock b/desktop/poetry.lock index 164c455b..163c6bf7 100644 --- a/desktop/poetry.lock +++ b/desktop/poetry.lock @@ -205,7 +205,7 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.9.0" +version = "4.10.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -217,7 +217,7 @@ zipp = ">=0.5" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] [[package]] name = "iniconfig" @@ -272,7 +272,7 @@ description = "OnionShare lets you securely and anonymously send and receive fil category = "main" optional = false python-versions = "^3.6" -develop = false +develop = true [package.dependencies] cepa = "1.8.3" @@ -608,7 +608,7 @@ testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytes [metadata] lock-version = "1.1" python-versions = ">=3.9,<3.10" -content-hash = "1248f936dce04a72a33d9d6cc5b3e2222662f0a95712443fe8709bef82a06c8a" +content-hash = "279d5af1fc6f163903bd24cf0a3e5bcaae4903be4f717298ff19ef096a530c86" [metadata.files] atomicwrites = [ @@ -754,6 +754,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e5306482182170ade15c4b0d8386ded995a07d7cc2ca8f27958d34d6736497"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e6a36bb9474218c7a5b27ae476035497a6990e21d04c279884eb10d9b290f1b1"}, {file = "greenlet-1.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:abb7a75ed8b968f3061327c433a0fbd17b729947b400747c334a9c29a9af6c58"}, + {file = "greenlet-1.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b336501a05e13b616ef81ce329c0e09ac5ed8c732d9ba7e3e983fcc1a9e86965"}, {file = "greenlet-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:14d4f3cd4e8b524ae9b8aa567858beed70c392fdec26dbdb0a8a418392e71708"}, {file = "greenlet-1.1.2-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:17ff94e7a83aa8671a25bf5b59326ec26da379ace2ebc4411d690d80a7fbcf23"}, {file = "greenlet-1.1.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9f3cba480d3deb69f6ee2c1825060177a22c7826431458c697df88e6aeb3caee"}, @@ -766,6 +767,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d29ca8a77117315101425ec7ec2a47a22ccf59f5593378fc4077ac5b754fce"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21915eb821a6b3d9d8eefdaf57d6c345b970ad722f856cd71739493ce003ad08"}, {file = "greenlet-1.1.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eff9d20417ff9dcb0d25e2defc2574d10b491bf2e693b4e491914738b7908168"}, + {file = "greenlet-1.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b8c008de9d0daba7b6666aa5bbfdc23dcd78cafc33997c9b7741ff6353bafb7f"}, {file = "greenlet-1.1.2-cp36-cp36m-win32.whl", hash = "sha256:32ca72bbc673adbcfecb935bb3fb1b74e663d10a4b241aaa2f5a75fe1d1f90aa"}, {file = "greenlet-1.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:f0214eb2a23b85528310dad848ad2ac58e735612929c8072f6093f3585fd342d"}, {file = "greenlet-1.1.2-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b92e29e58bef6d9cfd340c72b04d74c4b4e9f70c9fa7c78b674d1fec18896dc4"}, @@ -774,6 +776,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e12bdc622676ce47ae9abbf455c189e442afdde8818d9da983085df6312e7a1"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c790abda465726cfb8bb08bd4ca9a5d0a7bd77c7ac1ca1b839ad823b948ea28"}, {file = "greenlet-1.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f276df9830dba7a333544bd41070e8175762a7ac20350786b322b714b0e654f5"}, + {file = "greenlet-1.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c5d5b35f789a030ebb95bff352f1d27a93d81069f2adb3182d99882e095cefe"}, {file = "greenlet-1.1.2-cp37-cp37m-win32.whl", hash = "sha256:64e6175c2e53195278d7388c454e0b30997573f3f4bd63697f88d855f7a6a1fc"}, {file = "greenlet-1.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:b11548073a2213d950c3f671aa88e6f83cda6e2fb97a8b6317b1b5b33d850e06"}, {file = "greenlet-1.1.2-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:9633b3034d3d901f0a46b7939f8c4d64427dfba6bbc5a36b1a67364cf148a1b0"}, @@ -782,6 +785,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e859fcb4cbe93504ea18008d1df98dee4f7766db66c435e4882ab35cf70cac43"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:00e44c8afdbe5467e4f7b5851be223be68adb4272f44696ee71fe46b7036a711"}, {file = "greenlet-1.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec8c433b3ab0419100bd45b47c9c8551248a5aee30ca5e9d399a0b57ac04651b"}, + {file = "greenlet-1.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2bde6792f313f4e918caabc46532aa64aa27a0db05d75b20edfc5c6f46479de2"}, {file = "greenlet-1.1.2-cp38-cp38-win32.whl", hash = "sha256:288c6a76705dc54fba69fbcb59904ae4ad768b4c768839b8ca5fdadec6dd8cfd"}, {file = "greenlet-1.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:8d2f1fb53a421b410751887eb4ff21386d119ef9cde3797bf5e7ed49fb51a3b3"}, {file = "greenlet-1.1.2-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:166eac03e48784a6a6e0e5f041cfebb1ab400b394db188c48b3a84737f505b67"}, @@ -790,6 +794,7 @@ greenlet = [ {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1692f7d6bc45e3200844be0dba153612103db241691088626a33ff1f24a0d88"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7227b47e73dedaa513cdebb98469705ef0d66eb5a1250144468e9c3097d6b59b"}, {file = "greenlet-1.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ff61ff178250f9bb3cd89752df0f1dd0e27316a8bd1465351652b1b4a4cdfd3"}, + {file = "greenlet-1.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0051c6f1f27cb756ffc0ffbac7d2cd48cb0362ac1736871399a739b2885134d3"}, {file = "greenlet-1.1.2-cp39-cp39-win32.whl", hash = "sha256:f70a9e237bb792c7cc7e44c531fd48f5897961701cdaa06cf22fc14965c496cf"}, {file = "greenlet-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:013d61294b6cd8fe3242932c1c5e36e5d1db2c8afb58606c5a67efce62c1f5fd"}, {file = "greenlet-1.1.2.tar.gz", hash = "sha256:e30f5ea4ae2346e62cedde8794a56858a67b878dd79f7df76a0767e356b1744a"}, @@ -799,8 +804,8 @@ idna = [ {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.9.0-py3-none-any.whl", hash = "sha256:e8b45564028bc25f8c99f546616112a6df5de6655893d7eb74c9a99680dc9751"}, - {file = "importlib_metadata-4.9.0.tar.gz", hash = "sha256:ee50794eccb0ec340adbc838344ebb9a6ff2bcba78f752d31fc716497e2149d6"}, + {file = "importlib_metadata-4.10.0-py3-none-any.whl", hash = "sha256:b7cf7d3fef75f1e4c80a96ca660efbd51473d7e8f39b5ab9210febc7809012a4"}, + {file = "importlib_metadata-4.10.0.tar.gz", hash = "sha256:92a8b58ce734b2a4494878e0ecf7d79ccd7a128b5fc6014c401e0b61f006f0f6"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, @@ -820,6 +825,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, @@ -831,6 +839,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, @@ -842,6 +853,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, @@ -854,6 +868,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, @@ -866,6 +883,9 @@ markupsafe = [ {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml index 977554f9..6e0d471d 100644 --- a/desktop/pyproject.toml +++ b/desktop/pyproject.toml @@ -7,7 +7,7 @@ license = "GPLv3+" [tool.poetry.dependencies] python = ">=3.9,<3.10" -onionshare_cli = {path = "../cli", develop = false} +onionshare_cli = {path = "../cli", develop = true} PySide2 = "5.15.2" qrcode = "*" cx_freeze = {version = "*", platform = "win32"} @@ -23,4 +23,5 @@ requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.poetry.scripts] -onionshare = 'onionshare:main' \ No newline at end of file +onionshare = 'onionshare:main' +onionshare-cli = 'onionshare_cli:main' -- cgit v1.2.3-54-g00ecf From f4fb212dbc7d0a027080c5f8c325c32ee2362072 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 14:15:52 -0800 Subject: Fix finding tor binary paths in Windows --- cli/onionshare_cli/common.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/cli/onionshare_cli/common.py b/cli/onionshare_cli/common.py index a8e32411..d7f3fdac 100644 --- a/cli/onionshare_cli/common.py +++ b/cli/onionshare_cli/common.py @@ -329,8 +329,19 @@ class Common: tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") elif self.platform == "Windows": + # In Windows, the Tor binaries are in the onionshare package, not the onionshare_cli package base_path = self.get_resource_path("tor") + base_path = base_path.replace("onionshare_cli", "onionshare") tor_path = os.path.join(base_path, "Tor", "tor.exe") + + # If tor.exe isn't there, mayber we're running from the source tree + if not os.path.exists(tor_path): + base_path = os.path.join(os.getcwd(), "onionshare", "resources", "tor") + tor_path = os.path.join(base_path, "Tor", "tor.exe") + + if not os.path.exists(tor_path): + print("Error: Cannot find tor.exe") + obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe") snowflake_file_path = os.path.join(base_path, "Tor", "snowflake-client.exe") meek_client_file_path = os.path.join(base_path, "Tor", "meek-client.exe") -- cgit v1.2.3-54-g00ecf From f0d40beb77a9c27176077c0e42991f156930a63e Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 14:16:10 -0800 Subject: Start implementing cx_Freeze --- desktop/README.md | 4 +- desktop/package/onionshare-cli.py | 3 + desktop/package/onionshare.py | 3 + desktop/setup-freeze.py | 121 ++++++++++++++++++++++++++++++++++++++ desktop/setup.py | 30 ++-------- 5 files changed, 133 insertions(+), 28 deletions(-) create mode 100644 desktop/package/onionshare-cli.py create mode 100644 desktop/package/onionshare.py create mode 100644 desktop/setup-freeze.py diff --git a/desktop/README.md b/desktop/README.md index 06ca9067..92412146 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -9,7 +9,7 @@ git clone https://github.com/onionshare/onionshare.git cd onionshare/desktop ``` -Make sure you have Python 3 installed. If you're using Windows or macOS, install version 3.10.1 [from python.org](https://www.python.org/downloads/release/python-3101/). For Windows, make sure to install the 32-bit (x86) version, and to check the box to add python to the path on the first page of the installer. +Make sure you have Python 3 installed. If you're using Windows or macOS, install version 3.9.9 [from python.org](https://www.python.org/downloads/release/python-399/). For Windows, make sure to install the 32-bit (x86) version, and to check the box to add python to the path on the first page of the installer. Make sure you have [poetry installed](https://python-poetry.org/docs/#installation), and then install the dependencies: @@ -51,7 +51,7 @@ poetry run python scripts\get-tor-windows.py ### Compile dependencies -Install Go. The simplest way to make sure everything works is to install Go by following [these instructions](https://golang.org/doc/install). (In Windows, make sure to install the 32-bit version of Go, such as `go1.17.3.windows-386.msi`.) +Install Go. The simplest way to make sure everything works is to install Go by following [these instructions](https://golang.org/doc/install). (In Windows, make sure to install the 32-bit version of Go, such as `go1.17.5.windows-386.msi`.) Download and compile `meek-client`: diff --git a/desktop/package/onionshare-cli.py b/desktop/package/onionshare-cli.py new file mode 100644 index 00000000..3cb03d59 --- /dev/null +++ b/desktop/package/onionshare-cli.py @@ -0,0 +1,3 @@ +import onionshare_cli + +onionshare_cli.main() diff --git a/desktop/package/onionshare.py b/desktop/package/onionshare.py new file mode 100644 index 00000000..f9b7c4c8 --- /dev/null +++ b/desktop/package/onionshare.py @@ -0,0 +1,3 @@ +import onionshare + +onionshare.main() diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py new file mode 100644 index 00000000..d05cc18b --- /dev/null +++ b/desktop/setup-freeze.py @@ -0,0 +1,121 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +OnionShare | https://onionshare.org/ + +Copyright (C) 2014-2021 Micah Lee, et al. + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" +import os +from cx_Freeze import setup, Executable + +with open(os.path.join("..", "cli", "onionshare_cli", "resources", "version.txt")) as f: + version = f.read().strip() + +setup( + name="onionshare", + version=version, + description="Securely and anonymously share files, host websites, and chat with friends using the Tor network", + options={ + "build_exe": { + "packages": [ + "cffi", # required + "engineio", # required + "engineio.async_drivers.gevent", # required + "engineio.async_drivers.gevent_uwsgi", # required + "eventlet", # required + "eventlet.wsgi", # required + "jinja2.ext", # required + "onionshare", # required + "onionshare_cli", # required + # "engineio.async_drivers.aiohttp", + # "engineio.async_drivers.sanic", + # "engineio.async_drivers.threading", + # "engineio.async_drivers.tornado", + # "engineio.asyncio_client", + # "eventlet.green.OpenSSL.SSL", + # "eventlet.green.OpenSSL.crypto", + # "eventlet.green.OpenSSL.tsafe", + # "eventlet.green.OpenSSL.version", + # "eventlet.green.thread", + # "eventlet.greenio.base", + # "eventlet.hubs.hub", + # "eventlet.hubs.pyevent", + # "eventlet.queue", + # "eventlet.support.pylib", + # "eventlet.support.stacklesspypys", + # "eventlet.support.stacklesss", + # "eventlet.websocket", + # "eventlet.zipkin._thrift.zipkinCore.constants", + # "eventlet.zipkin._thrift.zipkinCore.ttypes", + # "eventlet.zipkin.client", + # "flask.cli", + # "flask.signals", + # "flask_socketio", + # "itsdangerous._json", + # "jinja2._compat", + # "jinja2.utils", + # "requests.compat", + # "requests.packages", + # "requests.utils", + # "six", + # "socketio.asyncio_aiopika_manager", + # "socketio.asyncio_redis_manager", + # "socketio.kafka_manager", + # "socketio.kombu_manager", + # "socketio.msgpack_packet", + # "socketio.redis_manager", + # "urllib.request", + # "urllib3._collections", + # "urllib3.connection", + # "urllib3.connectionpool", + # "urllib3.contrib.pyopenssl", + # "urllib3.exceptions", + # "urllib3.packages.six", + # "urllib3.packages.ssl_match_hostname", + # "urllib3.poolmanager", + # "urllib3.request", + # "urllib3.response", + # "urllib3.util.queue", + # "urllib3.util.request", + # "urllib3.util.response", + # "werkzeug._compat", + # "werkzeug._reloader", + # "werkzeug.debug.tbtools", + # "werkzeug.http", + # "werkzeug.serving", + # "werkzeug.test", + # "werkzeug.utils", + # "werkzeug.wrappers.json", + ], + "excludes": ["test", "tkinter"], + "include_files": [("..\LICENSE", "LICENSE")], + "include_msvcr": True, + } + }, + executables=[ + Executable( + "package/onionshare.py", + # base="Win32GUI", + base=None, + icon=os.path.join("onionshare", "resources", "onionshare.ico"), + ), + Executable( + "package/onionshare-cli.py", + base=None, + icon=os.path.join("onionshare", "resources", "onionshare.ico"), + ), + ], +) diff --git a/desktop/setup.py b/desktop/setup.py index 95cad942..3052e25e 100644 --- a/desktop/setup.py +++ b/desktop/setup.py @@ -1,36 +1,14 @@ #!/usr/bin/env python3 -# -*- coding: utf-8 -*- -""" -OnionShare | https://onionshare.org/ - -Copyright (C) 2014-2021 Micah Lee, et al. - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" import setuptools +import os -version = "2.4" +with open(os.path.join("..", "cli", "onionshare_cli", "resources", "version.txt")) as f: + version = f.read().strip() setuptools.setup( name="onionshare", version=version, - description=( - "OnionShare lets you securely and anonymously send and receive files. It works by starting a web " - "server, making it accessible as a Tor onion service, and generating an unguessable web address so " - "others can download files from you, or upload files to you. It does _not_ require setting up a " - "separate server or using a third party file-sharing service." - ), + description="Securely and anonymously share files, host websites, and chat with friends using the Tor network", author="Micah Lee", author_email="micah@micahflee.com", maintainer="Micah Lee", -- cgit v1.2.3-54-g00ecf From 7e55e8e816e86a9e85b8308e9705c4e403f3bb37 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 14:28:23 -0800 Subject: Fix permission denied error in Windows, which was introduced using tempfile.NamedTemporaryFile, by using a TemporaryDirectory instead --- cli/onionshare_cli/web/share_mode.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py index 38f3f78d..9be3a89b 100644 --- a/cli/onionshare_cli/web/share_mode.py +++ b/cli/onionshare_cli/web/share_mode.py @@ -189,7 +189,7 @@ class ShareModeWeb(SendBaseModeWeb): # and serve that use_gzip = self.should_use_gzip() if use_gzip: - file_to_download = self.gzip_file.name + file_to_download = self.gzip_filename self.filesize = self.gzip_filesize etag = self.gzip_etag else: @@ -492,20 +492,21 @@ class ShareModeWeb(SendBaseModeWeb): self.download_etag = make_etag(f) # Compress the file with gzip now, so we don't have to do it on each request - self.gzip_file = tempfile.NamedTemporaryFile( - "wb+", dir=self.common.build_tmp_dir() + self.gzip_tmp_dir = tempfile.TemporaryDirectory( + dir=self.common.build_tmp_dir() ) + self.gzip_filename = os.path.join(self.gzip_tmp_dir.name, "file.gz") self._gzip_compress( - self.download_filename, self.gzip_file.name, 6, processed_size_callback + self.download_filename, self.gzip_filename, 6, processed_size_callback ) - self.gzip_filesize = os.path.getsize(self.gzip_file.name) - with open(self.gzip_file.name, "rb") as f: + self.gzip_filesize = os.path.getsize(self.gzip_filename) + with open(self.gzip_filename, "rb") as f: self.gzip_etag = make_etag(f) self.is_zipped = False # Cleanup this tempfile - self.web.cleanup_tempfiles.append(self.gzip_file) + self.web.cleanup_tempdirs.append(self.gzip_tmp_dir) else: # Zip up the files and folders -- cgit v1.2.3-54-g00ecf From 3da0b7a3eafc78d27a357ffdcc2c1bdab79e87ec Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 15:01:35 -0800 Subject: Enable websocket logs in verbose mode --- cli/onionshare_cli/web/web.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py index 4f0625a0..fc5f86fe 100644 --- a/cli/onionshare_cli/web/web.py +++ b/cli/onionshare_cli/web/web.py @@ -89,7 +89,7 @@ class Web: # # It's probably #notourbug but we can fix it by forcing the mimetype. # https://github.com/onionshare/onionshare/issues/1443 - mimetypes.add_type('text/javascript', '.js') + mimetypes.add_type("text/javascript", ".js") # The flask app self.app = Flask( @@ -162,7 +162,10 @@ class Web: elif self.mode == "website": self.website_mode = WebsiteModeWeb(self.common, self) elif self.mode == "chat": - self.socketio = SocketIO() + if self.common.verbose: + self.socketio = SocketIO(logger=True, engineio_logger=True) + else: + self.socketio = SocketIO() self.socketio.init_app(self.app) self.chat_mode = ChatModeWeb(self.common, self) -- cgit v1.2.3-54-g00ecf From ec7fa4ef16c9e1ba6028ee927c23f76c399a17a6 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Tue, 21 Dec 2021 16:55:59 -0800 Subject: Solve obnoxious cx_Freeze issue that broke websockets by enforcing async_mode=gevent, and including the correct modules in the build --- cli/onionshare_cli/web/web.py | 6 +- cli/poetry.lock | 155 +++++++++++++++++++++++++++++++++++++++++- cli/pyproject.toml | 1 + desktop/poetry.lock | 154 +++++++++++++++++++++++++++++++++++++++++ desktop/setup-freeze.py | 76 +++------------------ 5 files changed, 321 insertions(+), 71 deletions(-) diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py index fc5f86fe..0fc55eb4 100644 --- a/cli/onionshare_cli/web/web.py +++ b/cli/onionshare_cli/web/web.py @@ -163,9 +163,11 @@ class Web: self.website_mode = WebsiteModeWeb(self.common, self) elif self.mode == "chat": if self.common.verbose: - self.socketio = SocketIO(logger=True, engineio_logger=True) + self.socketio = SocketIO( + async_mode="gevent", logger=True, engineio_logger=True + ) else: - self.socketio = SocketIO() + self.socketio = SocketIO(async_mode="gevent") self.socketio.init_app(self.app) self.chat_mode = ChatModeWeb(self.common, self) diff --git a/cli/poetry.lock b/cli/poetry.lock index bd74381e..f57e0b14 100644 --- a/cli/poetry.lock +++ b/cli/poetry.lock @@ -141,6 +141,38 @@ python-versions = "*" Flask = ">=0.9" python-socketio = ">=5.0.2" +[[package]] +name = "gevent" +version = "21.12.0" +description = "Coroutine-based network library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5" + +[package.dependencies] +cffi = {version = ">=1.12.2", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} +greenlet = {version = ">=1.1.0,<2.0", markers = "platform_python_implementation == \"CPython\""} +"zope.event" = "*" +"zope.interface" = "*" + +[package.extras] +dnspython = ["dnspython (>=1.16.0,<2.0)", "idna"] +docs = ["repoze.sphinx.autointerface", "sphinxcontrib-programoutput", "zope.schema"] +monitor = ["psutil (>=5.7.0)"] +recommended = ["cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "selectors2", "backports.socketpair", "psutil (>=5.7.0)"] +test = ["requests", "objgraph", "cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "selectors2", "futures", "mock", "backports.socketpair", "contextvars (==2.4)", "coverage (>=5.0)", "coveralls (>=1.7.0)", "psutil (>=5.7.0)"] + +[[package]] +name = "gevent-websocket" +version = "0.10.1" +description = "Websocket handler for the gevent pywsgi server, a Python network library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +gevent = "*" + [[package]] name = "greenlet" version = "1.1.2" @@ -441,10 +473,35 @@ python-versions = ">=3.6" docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +[[package]] +name = "zope.event" +version = "4.5.0" +description = "Very basic event publishing system" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +docs = ["sphinx"] +test = ["zope.testrunner"] + +[[package]] +name = "zope.interface" +version = "5.4.0" +description = "Interfaces for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +docs = ["sphinx", "repoze.sphinx.autointerface"] +test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] + [metadata] lock-version = "1.1" python-versions = "^3.6" -content-hash = "b6700c9652a3292f2ab3153544c46ed78c75fc9b65c15fcf4e3c243f841565dd" +content-hash = "53661539ae01732f6ff6983cf741121e19eb9f142ed3e8bc43845af7695a2c06" [metadata.files] atomicwrites = [ @@ -546,6 +603,45 @@ flask-socketio = [ {file = "Flask-SocketIO-5.0.1.tar.gz", hash = "sha256:5c4319f5214ada20807857dc8fdf3dc7d2afe8d6dd38f5c516c72e2be47d2227"}, {file = "Flask_SocketIO-5.0.1-py2.py3-none-any.whl", hash = "sha256:5d9a4438bafd806c5a3b832e74b69758781a8ee26fb6c9b1dbdda9b4fced432e"}, ] +gevent = [ + {file = "gevent-21.12.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:2afa3f3ad528155433f6ac8bd64fa5cc303855b97004416ec719a6b1ca179481"}, + {file = "gevent-21.12.0-cp27-cp27m-win32.whl", hash = "sha256:177f93a3a90f46a5009e0841fef561601e5c637ba4332ab8572edd96af650101"}, + {file = "gevent-21.12.0-cp27-cp27m-win_amd64.whl", hash = "sha256:a5ad4ed8afa0a71e1927623589f06a9b5e8b5e77810be3125cb4d93050d3fd1f"}, + {file = "gevent-21.12.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:eae3c46f9484eaacd67ffcdf4eaf6ca830f587edd543613b0f5c4eb3c11d052d"}, + {file = "gevent-21.12.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1899b921219fc8959ff9afb94dae36be82e0769ed13d330a393594d478a0b3a"}, + {file = "gevent-21.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c21cb5c9f4e14d75b3fe0b143ec875d7dbd1495fad6d49704b00e57e781ee0f"}, + {file = "gevent-21.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:542ae891e2aa217d2cf6d8446538fcd2f3263a40eec123b970b899bac391c47a"}, + {file = "gevent-21.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0082d8a5d23c35812ce0e716a91ede597f6dd2c5ff508a02a998f73598c59397"}, + {file = "gevent-21.12.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da8d2d51a49b2a5beb02ad619ca9ddbef806ef4870ba04e5ac7b8b41a5b61db3"}, + {file = "gevent-21.12.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfff82f05f14b7f5d9ed53ccb7a609ae8604df522bb05c971bca78ec9d8b2b9"}, + {file = "gevent-21.12.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7909780f0cf18a1fc32aafd8c8e130cdd93c6e285b11263f7f2d1a0f3678bc50"}, + {file = "gevent-21.12.0-cp36-cp36m-win32.whl", hash = "sha256:bb5cb8db753469c7a9a0b8a972d2660fe851aa06eee699a1ca42988afb0aaa02"}, + {file = "gevent-21.12.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c43f081cbca41d27fd8fef9c6a32cf83cb979345b20abc07bf68df165cdadb24"}, + {file = "gevent-21.12.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:74fc1ef16b86616cfddcc74f7292642b0f72dde4dd95aebf4c45bb236744be54"}, + {file = "gevent-21.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc2fef0f98ee180704cf95ec84f2bc2d86c6c3711bb6b6740d74e0afe708b62c"}, + {file = "gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08b4c17064e28f4eb85604486abc89f442c7407d2aed249cf54544ce5c9baee6"}, + {file = "gevent-21.12.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:973749bacb7bc4f4181a8fb2a7e0e2ff44038de56d08e856dd54a5ac1d7331b4"}, + {file = "gevent-21.12.0-cp37-cp37m-win32.whl", hash = "sha256:6a02a88723ed3f0fd92cbf1df3c4cd2fbd87d82b0a4bac3e36a8875923115214"}, + {file = "gevent-21.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f289fae643a3f1c3b909d6b033e6921b05234a4907e9c9c8c3f1fe403e6ac452"}, + {file = "gevent-21.12.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:3baeeccc4791ba3f8db27179dff11855a8f9210ddd754f6c9b48e0d2561c2aea"}, + {file = "gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692"}, + {file = "gevent-21.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d86438ede1cbe0fde6ef4cc3f72bf2f1ecc9630d8b633ff344a3aeeca272cdd"}, + {file = "gevent-21.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01928770972181ad8866ee37ea3504f1824587b188fcab782ef1619ce7538766"}, + {file = "gevent-21.12.0-cp38-cp38-win32.whl", hash = "sha256:3c012c73e6c61f13c75e3a4869dbe6a2ffa025f103421a6de9c85e627e7477b1"}, + {file = "gevent-21.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:b7709c64afa8bb3000c28bb91ec42c79594a7cb0f322e20427d57f9762366a5b"}, + {file = "gevent-21.12.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ec21f9eaaa6a7b1e62da786132d6788675b314f25f98d9541f1bf00584ed4749"}, + {file = "gevent-21.12.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22ce1f38fdfe2149ffe8ec2131ca45281791c1e464db34b3b4321ae9d8d2efbb"}, + {file = "gevent-21.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ccffcf708094564e442ac6fde46f0ae9e40015cb69d995f4b39cc29a7643881"}, + {file = "gevent-21.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24d3550fbaeef5fddd794819c2853bca45a86c3d64a056a2c268d981518220d1"}, + {file = "gevent-21.12.0-cp39-cp39-win32.whl", hash = "sha256:2bcec9f80196c751fdcf389ca9f7141e7b0db960d8465ed79be5e685bfcad682"}, + {file = "gevent-21.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:3dad62f55fad839d498c801e139481348991cee6e1c7706041b5fe096cb6a279"}, + {file = "gevent-21.12.0-pp27-pypy_73-win_amd64.whl", hash = "sha256:9f9652d1e4062d4b5b5a0a49ff679fa890430b5f76969d35dccb2df114c55e0f"}, + {file = "gevent-21.12.0.tar.gz", hash = "sha256:f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e"}, +] +gevent-websocket = [ + {file = "gevent-websocket-0.10.1.tar.gz", hash = "sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0"}, + {file = "gevent_websocket-0.10.1-py3-none-any.whl", hash = "sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242"}, +] greenlet = [ {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, @@ -813,3 +909,60 @@ zipp = [ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, ] +"zope.event" = [ + {file = "zope.event-4.5.0-py2.py3-none-any.whl", hash = "sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42"}, + {file = "zope.event-4.5.0.tar.gz", hash = "sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330"}, +] +"zope.interface" = [ + {file = "zope.interface-5.4.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531"}, + {file = "zope.interface-5.4.0-cp27-cp27m-win32.whl", hash = "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325"}, + {file = "zope.interface-5.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117"}, + {file = "zope.interface-5.4.0-cp35-cp35m-win32.whl", hash = "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8"}, + {file = "zope.interface-5.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63"}, + {file = "zope.interface-5.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2"}, + {file = "zope.interface-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78"}, + {file = "zope.interface-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1"}, + {file = "zope.interface-5.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf"}, + {file = "zope.interface-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7"}, + {file = "zope.interface-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94"}, + {file = "zope.interface-5.4.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4"}, + {file = "zope.interface-5.4.0-cp38-cp38-win32.whl", hash = "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb"}, + {file = "zope.interface-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54"}, + {file = "zope.interface-5.4.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c"}, + {file = "zope.interface-5.4.0-cp39-cp39-win32.whl", hash = "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e"}, + {file = "zope.interface-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09"}, + {file = "zope.interface-5.4.0.tar.gz", hash = "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e"}, +] diff --git a/cli/pyproject.toml b/cli/pyproject.toml index 372d9aa4..9b664d72 100644 --- a/cli/pyproject.toml +++ b/cli/pyproject.toml @@ -30,6 +30,7 @@ setuptools = "*" pynacl = "^1.4.0" colorama = "*" cepa = "1.8.3" +gevent-websocket = "^0.10.1" [tool.poetry.dev-dependencies] pytest = "*" diff --git a/desktop/poetry.lock b/desktop/poetry.lock index 163c6bf7..e20279fa 100644 --- a/desktop/poetry.lock +++ b/desktop/poetry.lock @@ -184,6 +184,38 @@ python-versions = "*" Flask = ">=0.9" python-socketio = ">=5.0.2" +[[package]] +name = "gevent" +version = "21.12.0" +description = "Coroutine-based network library" +category = "main" +optional = false +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5" + +[package.dependencies] +cffi = {version = ">=1.12.2", markers = "platform_python_implementation == \"CPython\" and sys_platform == \"win32\""} +greenlet = {version = ">=1.1.0,<2.0", markers = "platform_python_implementation == \"CPython\""} +"zope.event" = "*" +"zope.interface" = "*" + +[package.extras] +dnspython = ["dnspython (>=1.16.0,<2.0)", "idna"] +docs = ["repoze.sphinx.autointerface", "sphinxcontrib-programoutput", "zope.schema"] +monitor = ["psutil (>=5.7.0)"] +recommended = ["cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "selectors2", "backports.socketpair", "psutil (>=5.7.0)"] +test = ["requests", "objgraph", "cffi (>=1.12.2)", "dnspython (>=1.16.0,<2.0)", "idna", "selectors2", "futures", "mock", "backports.socketpair", "contextvars (==2.4)", "coverage (>=5.0)", "coveralls (>=1.7.0)", "psutil (>=5.7.0)"] + +[[package]] +name = "gevent-websocket" +version = "0.10.1" +description = "Websocket handler for the gevent pywsgi server, a Python network library" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +gevent = "*" + [[package]] name = "greenlet" version = "1.1.2" @@ -281,6 +313,7 @@ colorama = "*" eventlet = "*" flask = "1.1.4" flask-socketio = "5.0.1" +gevent-websocket = "^0.10.1" psutil = "*" pynacl = "^1.4.0" pysocks = "*" @@ -605,6 +638,31 @@ python-versions = ">=3.6" docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +[[package]] +name = "zope.event" +version = "4.5.0" +description = "Very basic event publishing system" +category = "main" +optional = false +python-versions = "*" + +[package.extras] +docs = ["sphinx"] +test = ["zope.testrunner"] + +[[package]] +name = "zope.interface" +version = "5.4.0" +description = "Interfaces for Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[package.extras] +docs = ["sphinx", "repoze.sphinx.autointerface"] +test = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] +testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] + [metadata] lock-version = "1.1" python-versions = ">=3.9,<3.10" @@ -742,6 +800,45 @@ flask-socketio = [ {file = "Flask-SocketIO-5.0.1.tar.gz", hash = "sha256:5c4319f5214ada20807857dc8fdf3dc7d2afe8d6dd38f5c516c72e2be47d2227"}, {file = "Flask_SocketIO-5.0.1-py2.py3-none-any.whl", hash = "sha256:5d9a4438bafd806c5a3b832e74b69758781a8ee26fb6c9b1dbdda9b4fced432e"}, ] +gevent = [ + {file = "gevent-21.12.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:2afa3f3ad528155433f6ac8bd64fa5cc303855b97004416ec719a6b1ca179481"}, + {file = "gevent-21.12.0-cp27-cp27m-win32.whl", hash = "sha256:177f93a3a90f46a5009e0841fef561601e5c637ba4332ab8572edd96af650101"}, + {file = "gevent-21.12.0-cp27-cp27m-win_amd64.whl", hash = "sha256:a5ad4ed8afa0a71e1927623589f06a9b5e8b5e77810be3125cb4d93050d3fd1f"}, + {file = "gevent-21.12.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:eae3c46f9484eaacd67ffcdf4eaf6ca830f587edd543613b0f5c4eb3c11d052d"}, + {file = "gevent-21.12.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e1899b921219fc8959ff9afb94dae36be82e0769ed13d330a393594d478a0b3a"}, + {file = "gevent-21.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c21cb5c9f4e14d75b3fe0b143ec875d7dbd1495fad6d49704b00e57e781ee0f"}, + {file = "gevent-21.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:542ae891e2aa217d2cf6d8446538fcd2f3263a40eec123b970b899bac391c47a"}, + {file = "gevent-21.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:0082d8a5d23c35812ce0e716a91ede597f6dd2c5ff508a02a998f73598c59397"}, + {file = "gevent-21.12.0-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da8d2d51a49b2a5beb02ad619ca9ddbef806ef4870ba04e5ac7b8b41a5b61db3"}, + {file = "gevent-21.12.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cfff82f05f14b7f5d9ed53ccb7a609ae8604df522bb05c971bca78ec9d8b2b9"}, + {file = "gevent-21.12.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:7909780f0cf18a1fc32aafd8c8e130cdd93c6e285b11263f7f2d1a0f3678bc50"}, + {file = "gevent-21.12.0-cp36-cp36m-win32.whl", hash = "sha256:bb5cb8db753469c7a9a0b8a972d2660fe851aa06eee699a1ca42988afb0aaa02"}, + {file = "gevent-21.12.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c43f081cbca41d27fd8fef9c6a32cf83cb979345b20abc07bf68df165cdadb24"}, + {file = "gevent-21.12.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:74fc1ef16b86616cfddcc74f7292642b0f72dde4dd95aebf4c45bb236744be54"}, + {file = "gevent-21.12.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cc2fef0f98ee180704cf95ec84f2bc2d86c6c3711bb6b6740d74e0afe708b62c"}, + {file = "gevent-21.12.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08b4c17064e28f4eb85604486abc89f442c7407d2aed249cf54544ce5c9baee6"}, + {file = "gevent-21.12.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:973749bacb7bc4f4181a8fb2a7e0e2ff44038de56d08e856dd54a5ac1d7331b4"}, + {file = "gevent-21.12.0-cp37-cp37m-win32.whl", hash = "sha256:6a02a88723ed3f0fd92cbf1df3c4cd2fbd87d82b0a4bac3e36a8875923115214"}, + {file = "gevent-21.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f289fae643a3f1c3b909d6b033e6921b05234a4907e9c9c8c3f1fe403e6ac452"}, + {file = "gevent-21.12.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:3baeeccc4791ba3f8db27179dff11855a8f9210ddd754f6c9b48e0d2561c2aea"}, + {file = "gevent-21.12.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692"}, + {file = "gevent-21.12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d86438ede1cbe0fde6ef4cc3f72bf2f1ecc9630d8b633ff344a3aeeca272cdd"}, + {file = "gevent-21.12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:01928770972181ad8866ee37ea3504f1824587b188fcab782ef1619ce7538766"}, + {file = "gevent-21.12.0-cp38-cp38-win32.whl", hash = "sha256:3c012c73e6c61f13c75e3a4869dbe6a2ffa025f103421a6de9c85e627e7477b1"}, + {file = "gevent-21.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:b7709c64afa8bb3000c28bb91ec42c79594a7cb0f322e20427d57f9762366a5b"}, + {file = "gevent-21.12.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:ec21f9eaaa6a7b1e62da786132d6788675b314f25f98d9541f1bf00584ed4749"}, + {file = "gevent-21.12.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22ce1f38fdfe2149ffe8ec2131ca45281791c1e464db34b3b4321ae9d8d2efbb"}, + {file = "gevent-21.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ccffcf708094564e442ac6fde46f0ae9e40015cb69d995f4b39cc29a7643881"}, + {file = "gevent-21.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24d3550fbaeef5fddd794819c2853bca45a86c3d64a056a2c268d981518220d1"}, + {file = "gevent-21.12.0-cp39-cp39-win32.whl", hash = "sha256:2bcec9f80196c751fdcf389ca9f7141e7b0db960d8465ed79be5e685bfcad682"}, + {file = "gevent-21.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:3dad62f55fad839d498c801e139481348991cee6e1c7706041b5fe096cb6a279"}, + {file = "gevent-21.12.0-pp27-pypy_73-win_amd64.whl", hash = "sha256:9f9652d1e4062d4b5b5a0a49ff679fa890430b5f76969d35dccb2df114c55e0f"}, + {file = "gevent-21.12.0.tar.gz", hash = "sha256:f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e"}, +] +gevent-websocket = [ + {file = "gevent-websocket-0.10.1.tar.gz", hash = "sha256:7eaef32968290c9121f7c35b973e2cc302ffb076d018c9068d2f5ca8b2d85fb0"}, + {file = "gevent_websocket-0.10.1-py3-none-any.whl", hash = "sha256:17b67d91282f8f4c973eba0551183fc84f56f1c90c8f6b6b30256f31f66f5242"}, +] greenlet = [ {file = "greenlet-1.1.2-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:58df5c2a0e293bf665a51f8a100d3e9956febfbf1d9aaf8c0677cf70218910c6"}, {file = "greenlet-1.1.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:aec52725173bd3a7b56fe91bc56eccb26fbdff1386ef123abb63c84c5b43b63a"}, @@ -1053,3 +1150,60 @@ zipp = [ {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, ] +"zope.event" = [ + {file = "zope.event-4.5.0-py2.py3-none-any.whl", hash = "sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42"}, + {file = "zope.event-4.5.0.tar.gz", hash = "sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330"}, +] +"zope.interface" = [ + {file = "zope.interface-5.4.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a"}, + {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531"}, + {file = "zope.interface-5.4.0-cp27-cp27m-win32.whl", hash = "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325"}, + {file = "zope.interface-5.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e"}, + {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004"}, + {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117"}, + {file = "zope.interface-5.4.0-cp35-cp35m-win32.whl", hash = "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8"}, + {file = "zope.interface-5.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63"}, + {file = "zope.interface-5.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9"}, + {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2"}, + {file = "zope.interface-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78"}, + {file = "zope.interface-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1"}, + {file = "zope.interface-5.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8"}, + {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf"}, + {file = "zope.interface-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7"}, + {file = "zope.interface-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94"}, + {file = "zope.interface-5.4.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48"}, + {file = "zope.interface-5.4.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4"}, + {file = "zope.interface-5.4.0-cp38-cp38-win32.whl", hash = "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb"}, + {file = "zope.interface-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54"}, + {file = "zope.interface-5.4.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1"}, + {file = "zope.interface-5.4.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c"}, + {file = "zope.interface-5.4.0-cp39-cp39-win32.whl", hash = "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e"}, + {file = "zope.interface-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09"}, + {file = "zope.interface-5.4.0.tar.gz", hash = "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e"}, +] diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index d05cc18b..352c71dd 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -31,74 +31,14 @@ setup( options={ "build_exe": { "packages": [ - "cffi", # required - "engineio", # required - "engineio.async_drivers.gevent", # required - "engineio.async_drivers.gevent_uwsgi", # required - "eventlet", # required - "eventlet.wsgi", # required - "jinja2.ext", # required - "onionshare", # required - "onionshare_cli", # required - # "engineio.async_drivers.aiohttp", - # "engineio.async_drivers.sanic", - # "engineio.async_drivers.threading", - # "engineio.async_drivers.tornado", - # "engineio.asyncio_client", - # "eventlet.green.OpenSSL.SSL", - # "eventlet.green.OpenSSL.crypto", - # "eventlet.green.OpenSSL.tsafe", - # "eventlet.green.OpenSSL.version", - # "eventlet.green.thread", - # "eventlet.greenio.base", - # "eventlet.hubs.hub", - # "eventlet.hubs.pyevent", - # "eventlet.queue", - # "eventlet.support.pylib", - # "eventlet.support.stacklesspypys", - # "eventlet.support.stacklesss", - # "eventlet.websocket", - # "eventlet.zipkin._thrift.zipkinCore.constants", - # "eventlet.zipkin._thrift.zipkinCore.ttypes", - # "eventlet.zipkin.client", - # "flask.cli", - # "flask.signals", - # "flask_socketio", - # "itsdangerous._json", - # "jinja2._compat", - # "jinja2.utils", - # "requests.compat", - # "requests.packages", - # "requests.utils", - # "six", - # "socketio.asyncio_aiopika_manager", - # "socketio.asyncio_redis_manager", - # "socketio.kafka_manager", - # "socketio.kombu_manager", - # "socketio.msgpack_packet", - # "socketio.redis_manager", - # "urllib.request", - # "urllib3._collections", - # "urllib3.connection", - # "urllib3.connectionpool", - # "urllib3.contrib.pyopenssl", - # "urllib3.exceptions", - # "urllib3.packages.six", - # "urllib3.packages.ssl_match_hostname", - # "urllib3.poolmanager", - # "urllib3.request", - # "urllib3.response", - # "urllib3.util.queue", - # "urllib3.util.request", - # "urllib3.util.response", - # "werkzeug._compat", - # "werkzeug._reloader", - # "werkzeug.debug.tbtools", - # "werkzeug.http", - # "werkzeug.serving", - # "werkzeug.test", - # "werkzeug.utils", - # "werkzeug.wrappers.json", + "cffi", + "engineio", + "engineio.async_drivers.gevent", + "engineio.async_drivers.gevent_uwsgi", + "gevent", + "jinja2.ext", + "onionshare", + "onionshare_cli", ], "excludes": ["test", "tkinter"], "include_files": [("..\LICENSE", "LICENSE")], -- cgit v1.2.3-54-g00ecf From ba5a746e93f3cffe0b0f690b0d7835a9aeb5260e Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 22 Dec 2021 12:04:44 -0800 Subject: Support cx_Freeze in macOS --- desktop/poetry.lock | 2 +- desktop/pyproject.toml | 2 +- desktop/setup-freeze.py | 163 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 160 insertions(+), 7 deletions(-) diff --git a/desktop/poetry.lock b/desktop/poetry.lock index e20279fa..336fb36d 100644 --- a/desktop/poetry.lock +++ b/desktop/poetry.lock @@ -666,7 +666,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = ">=3.9,<3.10" -content-hash = "279d5af1fc6f163903bd24cf0a3e5bcaae4903be4f717298ff19ef096a530c86" +content-hash = "a13c1965ecb244469752adb4f03e284c9e7c91fc0247efee74fa902b5e18a9da" [metadata.files] atomicwrites = [ diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml index 6e0d471d..7410c04b 100644 --- a/desktop/pyproject.toml +++ b/desktop/pyproject.toml @@ -10,7 +10,7 @@ python = ">=3.9,<3.10" onionshare_cli = {path = "../cli", develop = true} PySide2 = "5.15.2" qrcode = "*" -cx_freeze = {version = "*", platform = "win32"} +cx_freeze = "*" [tool.poetry.dev-dependencies] black = "*" diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index 352c71dd..e4e31389 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -19,11 +19,119 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os +import platform +import cx_Freeze from cx_Freeze import setup, Executable +# There's an obscure cx_Freeze bug that I'm hitting that's preventing the macOS +# package from getting built. This is some monkeypatching to fix it. + +if platform.system() == "Darwin": + import importlib_metadata + import shutil + import pathlib + from pathlib import Path + from tempfile import TemporaryDirectory + + class CustomPackagePath(pathlib.PurePosixPath): + def __init__(self, filename): + self.long_filename = str(filename) + self.short_filename = "/".join(filename.as_posix().split("/")[-2:]) + super(CustomPackagePath, self).__init__() + + def read_text(self, encoding="utf-8"): + with self.locate().open(encoding=encoding) as stream: + return stream.read() + + def read_binary(self): + with self.locate().open("rb") as stream: + return stream.read() + + def locate(self): + return Path(self.long_filename) + + def as_posix(self): + return self.short_filename + + class DistributionCache(importlib_metadata.PathDistribution): + _cachedir = TemporaryDirectory(prefix="cxfreeze-") + + @staticmethod + def at(path): + return DistributionCache(Path(path)) + + at.__doc__ = importlib_metadata.PathDistribution.at.__doc__ + + @classmethod + def from_name(cls, name): + distribution = super().from_name(name) + temp_dir = Path(cls._cachedir.name) + dist_dir = None + files = distribution.files or [] + prep = importlib_metadata.Prepared(distribution.name) + normalized = prep.normalized + legacy_normalized = prep.legacy_normalized + for file in files: + # patch: the onionshare and onionshare_cli files are using absolute paths, which break everything + if name in ["onionshare", "onionshare_cli"]: + if ".dist-info" not in file.as_posix(): + continue + + file = CustomPackagePath(file) + + if ( + not file.match(f"{name}-*.dist-info/*") + and not file.match(f"{distribution.name}-*.dist-info/*") + and not file.match(f"{normalized}-*.dist-info/*") + and not file.match(f"{legacy_normalized}-*.dist-info/*") + ): + continue + src_path = file.locate() + if not src_path.exists(): + continue + dst_path = temp_dir / file.as_posix() + if dist_dir is None: + dist_dir = dst_path.parent + dist_dir.mkdir(exist_ok=True) + shutil.copy2(src_path, dst_path) + if dist_dir is None: + raise importlib_metadata.PackageNotFoundError(name) + return cls.at(dist_dir) + + from_name.__doc__ = importlib_metadata.PathDistribution.from_name.__doc__ + + cx_Freeze.module.DistributionCache = DistributionCache + + +# Discover the version with open(os.path.join("..", "cli", "onionshare_cli", "resources", "version.txt")) as f: version = f.read().strip() + +# Build +include_files = [(os.path.join("..", "LICENSE"), "LICENSE")] + +if platform.system() == "Windows": + include_msvcr = True + gui_base = "Win32GUI" + +elif platform.system() == "Darwin": + import PySide2 + import shiboken2 + + include_msvcr = False + gui_base = None + include_files += [ + ( + os.path.join(PySide2.__path__[0], "libpyside2.abi3.5.15.dylib"), + "libpyside2.abi3.5.15.dylib", + ), + ( + os.path.join(shiboken2.__path__[0], "libshiboken2.abi3.5.15.dylib"), + "libshiboken2.abi3.5.15.dylib", + ), + ] + setup( name="onionshare", version=version, @@ -39,17 +147,62 @@ setup( "jinja2.ext", "onionshare", "onionshare_cli", + "PySide2", + "PySide2.QtCore", + "PySide2.QtGui", + "PySide2.QtWidgets", + ], + "excludes": [ + "test", + "tkinter", + "PySide2.Qt3DAnimation", + "PySide2.Qt3DCore", + "PySide2.Qt3DExtras", + "PySide2.Qt3DInput", + "PySide2.Qt3DLogic", + "PySide2.Qt3DRender", + "PySide2.QtCharts", + "PySide2.QtConcurrent", + "PySide2.QtDataVisualization", + "PySide2.QtHelp", + "PySide2.QtLocation", + "PySide2.QtMultimedia", + "PySide2.QtMultimediaWidgets", + "PySide2.QtNetwork", + "PySide2.QtOpenGL", + "PySide2.QtOpenGLFunctions", + "PySide2.QtPositioning", + "PySide2.QtPrintSupport", + "PySide2.QtQml", + "PySide2.QtQuick", + "PySide2.QtQuickControls2", + "PySide2.QtQuickWidgets", + "PySide2.QtRemoteObjects", + "PySide2.QtScript", + "PySide2.QtScriptTools", + "PySide2.QtScxml", + "PySide2.QtSensors", + "PySide2.QtSerialPort", + "PySide2.QtSql", + "PySide2.QtTest", + "PySide2.QtTextToSpeech", + "PySide2.QtUiTools", + "PySide2.QtWebChannel", + "PySide2.QtWebEngine", + "PySide2.QtWebEngineCore", + "PySide2.QtWebEngineWidgets", + "PySide2.QtWebSockets", + "PySide2.QtXml", + "PySide2.QtXmlPatterns", ], - "excludes": ["test", "tkinter"], - "include_files": [("..\LICENSE", "LICENSE")], - "include_msvcr": True, + "include_files": include_files, + "include_msvcr": include_msvcr, } }, executables=[ Executable( "package/onionshare.py", - # base="Win32GUI", - base=None, + base=gui_base, icon=os.path.join("onionshare", "resources", "onionshare.ico"), ), Executable( -- cgit v1.2.3-54-g00ecf From 40b4d8f84cf2ccdabc24eda81f4aa5166d268b05 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 22 Dec 2021 13:08:01 -0800 Subject: Allow onionshare-cli binary made by cx_Freeze find tor binaries in macOS --- cli/onionshare_cli/common.py | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/cli/onionshare_cli/common.py b/cli/onionshare_cli/common.py index d7f3fdac..272d2860 100644 --- a/cli/onionshare_cli/common.py +++ b/cli/onionshare_cli/common.py @@ -337,26 +337,41 @@ class Common: # If tor.exe isn't there, mayber we're running from the source tree if not os.path.exists(tor_path): base_path = os.path.join(os.getcwd(), "onionshare", "resources", "tor") - tor_path = os.path.join(base_path, "Tor", "tor.exe") + tor_path = os.path.join(base_path, "Tor", "tor.exe") if not os.path.exists(tor_path): - print("Error: Cannot find tor.exe") + raise CannotFindTor() obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe") snowflake_file_path = os.path.join(base_path, "Tor", "snowflake-client.exe") meek_client_file_path = os.path.join(base_path, "Tor", "meek-client.exe") tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip") tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6") + elif self.platform == "Darwin": - tor_path = shutil.which("tor") - if not tor_path: - raise CannotFindTor() - obfs4proxy_file_path = shutil.which("obfs4proxy") - snowflake_file_path = shutil.which("snowflake-client") - meek_client_file_path = shutil.which("meek-client") - prefix = os.path.dirname(os.path.dirname(tor_path)) - tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") - tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") + # Let's see if we have tor binaries in the onionshare GUI package + base_path = self.get_resource_path("tor") + base_path = base_path.replace("onionshare_cli", "onionshare") + tor_path = os.path.join(base_path, "tor") + if os.path.exists(tor_path): + obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy") + snowflake_file_path = os.path.join(base_path, "snowflake-client") + meek_client_file_path = os.path.join(base_path, "meek-client") + tor_geo_ip_file_path = os.path.join(base_path, "geoip") + tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6") + else: + # Fallback to looking in the path + tor_path = shutil.which("tor") + if not os.path.exists(tor_path): + raise CannotFindTor() + + obfs4proxy_file_path = shutil.which("obfs4proxy") + snowflake_file_path = shutil.which("snowflake-client") + meek_client_file_path = shutil.which("meek-client") + prefix = os.path.dirname(os.path.dirname(tor_path)) + tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip") + tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6") + elif self.platform == "BSD": tor_path = "/usr/local/bin/tor" tor_geo_ip_file_path = "/usr/local/share/tor/geoip" -- cgit v1.2.3-54-g00ecf From 8a04472022a7ddc37d40acc2b71247aed08ebc8f Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 22 Dec 2021 14:04:34 -0800 Subject: Use cx_freeze for making macOS dmg --- RELEASE.md | 18 +-- desktop/package/Entitlements.plist | 43 +++++ desktop/package/macos/Entitlements.plist | 43 ----- desktop/package/macos/build.py | 262 ------------------------------- desktop/package/windows/build.py | 234 --------------------------- desktop/setup-freeze.py | 22 ++- 6 files changed, 70 insertions(+), 552 deletions(-) create mode 100644 desktop/package/Entitlements.plist delete mode 100644 desktop/package/macos/Entitlements.plist delete mode 100755 desktop/package/macos/build.py delete mode 100644 desktop/package/windows/build.py diff --git a/RELEASE.md b/RELEASE.md index 4dcd1770..19fc40dd 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -112,25 +112,23 @@ This will create `desktop/windows/OnionShare-$VERSION.msi`, signed. ## macOS -Set up the development environment described in `README.md`. And install `create-dmg`: +Set up the development environment described in `README.md`. -```sh -brew install create-dmg -``` - -Run the macOS build script: +Then build an executable, make it a macOS app bundle, and package it in a dmg: ```sh -poetry run ./package/macos/build.py --with-codesign +poetry run python setup-freeze.py bdist_dmg ``` +The will create `build/OnionShare.dmg`. + Now, notarize the release. You must have an app-specific Apple ID password saved in the login keychain called `onionshare-notarize`. -- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "com.micahflee.onionshare" -u "micah@micahflee.com" -p "@keychain:onionshare-notarize" --file macOS/OnionShare.dmg` +- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "com.micahflee.onionshare" -u "micah@micahflee.com" -p "@keychain:onionshare-notarize" --file build/OnionShare.dmg` - Wait for it to get approved, check status with: `xcrun altool --notarization-history 0 -u "micah@micahflee.com" -p "@keychain:onionshare-notarize"` -- After it's approved, staple the ticket: `xcrun stapler staple macOS/OnionShare.dmg` +- After it's approved, staple the ticket: `xcrun stapler staple build/OnionShare.dmg` -This will create `desktop/macOS/OnionShare.dmg`, signed and notarized. +This will create `desktop/build/OnionShare.dmg`, signed and notarized. ## Source package diff --git a/desktop/package/Entitlements.plist b/desktop/package/Entitlements.plist new file mode 100644 index 00000000..8c5c4268 --- /dev/null +++ b/desktop/package/Entitlements.plist @@ -0,0 +1,43 @@ + + + + + + com.apple.security.app-sandbox + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + + com.apple.security.network.server + + com.apple.security.network.client + + + + com.apple.security.files.user-selected.read-write + + + + com.apple.security.temporary-exception.files.absolute-path.read-only + + /private/etc/apache2/mime.types + + + + com.apple.security.temporary-exception.files.home-relative-path.read-only + + /Library/Application Support/TorBrowser-Data/Tor/control_auth_cookie + + + + com.apple.security.temporary-exception.files.home-relative-path.read-write + + /OnionShare/ + + + diff --git a/desktop/package/macos/Entitlements.plist b/desktop/package/macos/Entitlements.plist deleted file mode 100644 index 8c5c4268..00000000 --- a/desktop/package/macos/Entitlements.plist +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - com.apple.security.app-sandbox - - - - com.apple.security.cs.allow-unsigned-executable-memory - - - - com.apple.security.network.server - - com.apple.security.network.client - - - - com.apple.security.files.user-selected.read-write - - - - com.apple.security.temporary-exception.files.absolute-path.read-only - - /private/etc/apache2/mime.types - - - - com.apple.security.temporary-exception.files.home-relative-path.read-only - - /Library/Application Support/TorBrowser-Data/Tor/control_auth_cookie - - - - com.apple.security.temporary-exception.files.home-relative-path.read-write - - /OnionShare/ - - - diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py deleted file mode 100755 index 2bfea3ad..00000000 --- a/desktop/package/macos/build.py +++ /dev/null @@ -1,262 +0,0 @@ -#!/usr/bin/env python3 -import os -import inspect -import subprocess -import argparse -import shutil -import glob -import itertools - -root = os.path.dirname( - os.path.dirname( - os.path.dirname( - os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) - ) - ) -) - - -def codesign(path, entitlements, identity): - run( - [ - "codesign", - "--sign", - identity, - "--entitlements", - str(entitlements), - "--timestamp", - "--deep", - str(path), - "--force", - "--options", - "runtime", - ] - ) - - -def run(cmd, cwd=None): - subprocess.run(cmd, cwd=cwd, check=True) - - -def main(): - # Parse arguments - parser = argparse.ArgumentParser() - parser.add_argument( - "--with-codesign", - action="store_true", - dest="with_codesign", - help="Codesign the app bundle", - ) - args = parser.parse_args() - - cli_dir = os.path.join(root, "cli") - desktop_dir = os.path.join(root, "desktop") - - print("○ Clean up from last build") - if os.path.exists(os.path.join(cli_dir, "dist")): - shutil.rmtree(os.path.join(cli_dir, "dist")) - if os.path.exists(os.path.join(desktop_dir, "macOS")): - shutil.rmtree(os.path.join(desktop_dir, "macOS")) - - print("○ Build onionshare-cli") - run(["poetry", "install"], cli_dir) - run(["poetry", "build"], cli_dir) - whl_filename = glob.glob(os.path.join(cli_dir, "dist", "*.whl"))[0] - whl_basename = os.path.basename(whl_filename) - shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename)) - - print("○ Create app bundle") - run(["briefcase", "create"], desktop_dir) - app_path = os.path.join(desktop_dir, "macOS", "app", "OnionShare", "OnionShare.app") - - print("○ Delete unused Qt5 frameworks from app bundle") - for framework in [ - "Qt3DAnimation", - "Qt3DCore", - "Qt3DExtras", - "Qt3DInput", - "Qt3DLogic", - "Qt3DQuick", - "Qt3DQuickAnimation", - "Qt3DQuickExtras", - "Qt3DQuickInput", - "Qt3DQuickRender", - "Qt3DQuickScene2D", - "Qt3DRender", - "QtBluetooth", - "QtBodymovin", - "QtCharts", - "QtConcurrent", - "QtDataVisualization", - "QtDesigner", - "QtDesignerComponents", - "QtGamepad", - "QtHelp", - "QtLocation", - "QtMultimedia", - "QtMultimediaQuick", - "QtMultimediaWidgets", - "QtNfc", - "QtOpenGL", - "QtPdf", - "QtPdfWidgets", - "QtPositioning", - "QtPositioningQuick", - "QtPurchasing", - "QtQuick", - "QtQuick3D", - "QtQuick3DAssetImport", - "QtQuick3DRender", - "QtQuick3DRuntimeRender", - "QtQuick3DUtils", - "QtQuickControls2", - "QtQuickParticles", - "QtQuickShapes", - "QtQuickTemplates2", - "QtQuickTest", - "QtQuickWidgets", - "QtRemoteObjects", - "QtRepParser", - "QtScript", - "QtScriptTools", - "QtScxml", - "QtSensors", - "QtSerialBus", - "QtSerialPort", - "QtSql", - "QtSvg", - "QtTest", - "QtTextToSpeech", - "QtUiPlugin", - "QtVirtualKeyboard", - "QtWebChannel", - "QtWebEngine", - "QtWebEngineCore", - "QtWebEngineWidgets", - "QtWebSockets", - "QtWebView", - "QtXml", - "QtXmlPatterns", - ]: - shutil.rmtree( - os.path.join( - app_path, - "Contents", - "Resources", - "app_packages", - "PySide2", - "Qt", - "lib", - f"{framework}.framework", - ) - ) - try: - os.remove( - os.path.join( - app_path, - "Contents", - "Resources", - "app_packages", - "PySide2", - f"{framework}.abi3.so", - ) - ) - os.remove( - os.path.join( - app_path, - "Contents", - "Resources", - "app_packages", - "PySide2", - f"{framework}.pyi", - ) - ) - except FileNotFoundError: - pass - shutil.rmtree( - os.path.join( - app_path, - "Contents", - "Resources", - "app_packages", - "PySide2", - "Designer.app", - ) - ) - - print(f"○ Unsigned app bundle: {app_path}") - - if args.with_codesign: - identity_name_application = "Developer ID Application: Micah Lee (N9B95FDWH4)" - entitlements_plist_path = os.path.join( - desktop_dir, "package", "macos", "Entitlements.plist" - ) - - print("○ Code sign app bundle") - for path in itertools.chain( - glob.glob( - f"{app_path}/Contents/Resources/app_packages/**/*.dylib", recursive=True - ), - glob.glob( - f"{app_path}/Contents/Resources/app_packages/**/*.so", recursive=True - ), - glob.glob( - f"{app_path}/Contents/Resources/Support/**/*.dylib", recursive=True - ), - glob.glob(f"{app_path}/Contents/Resources/Support/**/*.so", recursive=True), - glob.glob( - f"{app_path}/Contents/Resources/app_packages/PySide2/Qt/lib/**/Versions/5/*", - recursive=True, - ), - [ - f"{app_path}/Contents/Resources/app_packages/PySide2/pyside2-lupdate", - f"{app_path}/Contents/Resources/app_packages/PySide2/rcc", - f"{app_path}/Contents/Resources/app_packages/PySide2/uic", - app_path, - ], - ): - codesign(path, entitlements_plist_path, identity_name_application) - codesign(app_path, entitlements_plist_path, identity_name_application) - print(f"○ Signed app bundle: {app_path}") - - if not os.path.exists("/usr/local/bin/create-dmg"): - print("○ Error: create-dmg is not installed") - return - - print("○ Create DMG") - dmg_path = os.path.join(desktop_dir, "macOS", "OnionShare.dmg") - run( - [ - "create-dmg", - "--volname", - "OnionShare", - "--volicon", - os.path.join( - desktop_dir, "src", "onionshare", "resources", "onionshare.icns" - ), - "--window-size", - "400", - "200", - "--icon-size", - "100", - "--icon", - "OnionShare.app", - "100", - "70", - "--hide-extension", - "OnionShare.app", - "--app-drop-link", - "300", - "70", - dmg_path, - app_path, - "--identity", - identity_name_application, - ] - ) - - print(f"○ Finished building DMG: {dmg_path}") - - -if __name__ == "__main__": - main() diff --git a/desktop/package/windows/build.py b/desktop/package/windows/build.py deleted file mode 100644 index bbccbe46..00000000 --- a/desktop/package/windows/build.py +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/env python3 -import os -import inspect -import subprocess -import shutil -import glob - -root = os.path.dirname( - os.path.dirname( - os.path.dirname( - os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) - ) - ) -) - - -def run(cmd, cwd=None): - subprocess.run(cmd, cwd=cwd, check=True) - - -def main(): - cli_dir = os.path.join(root, "cli") - desktop_dir = os.path.join(root, "desktop") - - print("○ Clean up from last build") - if os.path.exists(os.path.join(cli_dir, "dist")): - shutil.rmtree(os.path.join(cli_dir, "dist")) - if os.path.exists(os.path.join(desktop_dir, "windows")): - shutil.rmtree(os.path.join(desktop_dir, "windows")) - - print("○ Building onionshare-cli") - run(["poetry", "install"], cli_dir) - run(["poetry", "build"], cli_dir) - whl_filename = glob.glob(os.path.join(cli_dir, "dist", "*.whl"))[0] - whl_basename = os.path.basename(whl_filename) - shutil.copyfile(whl_filename, os.path.join(desktop_dir, whl_basename)) - - print("○ Create the binary") - run(["briefcase", "create"], desktop_dir) - - print("○ Delete unused Qt5 DLLs to save space") - for filename in [ - "plugins/assetimporters/assimp.dll", - "plugins/assetimporters/uip.dll", - "plugins/audio/qtaudio_wasapi.dll", - "plugins/audio/qtaudio_windows.dll", - "plugins/bearer/qgenericbearer.dll", - "plugins/canbus/qtpassthrucanbus.dll", - "plugins/canbus/qtpeakcanbus.dll", - "plugins/canbus/qtsysteccanbus.dll", - "plugins/canbus/qttinycanbus.dll", - "plugins/canbus/qtvectorcanbus.dll", - "plugins/canbus/qtvirtualcanbus.dll", - "plugins/gamepads/xinputgamepad.dll", - "plugins/generic/qtuiotouchplugin.dll", - "plugins/geometryloaders/defaultgeometryloader.dll", - "plugins/geometryloaders/gltfgeometryloader.dll", - "plugins/geoservices/qtgeoservices_esri.dll", - "plugins/geoservices/qtgeoservices_itemsoverlay.dll", - "plugins/geoservices/qtgeoservices_mapbox.dll", - "plugins/geoservices/qtgeoservices_nokia.dll", - "plugins/geoservices/qtgeoservices_osm.dll", - "plugins/mediaservice/dsengine.dll", - "plugins/mediaservice/qtmedia_audioengine.dll", - "plugins/mediaservice/wmfengine.dll", - "plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll", - "plugins/platformthemes/qxdgdesktopportal.dll", - "plugins/playlistformats/qtmultimedia_m3u.dll", - "plugins/position/qtposition_positionpoll.dll", - "plugins/position/qtposition_serialnmea.dll", - "plugins/position/qtposition_winrt.dll", - "plugins/printsupport/windowsprintersupport.dll", - "plugins/qmltooling/qmldbg_debugger.dll", - "plugins/qmltooling/qmldbg_inspector.dll", - "plugins/qmltooling/qmldbg_local.dll", - "plugins/qmltooling/qmldbg_messages.dll", - "plugins/qmltooling/qmldbg_native.dll", - "plugins/qmltooling/qmldbg_nativedebugger.dll", - "plugins/qmltooling/qmldbg_preview.dll", - "plugins/qmltooling/qmldbg_profiler.dll", - "plugins/qmltooling/qmldbg_quickprofiler.dll", - "plugins/qmltooling/qmldbg_server.dll", - "plugins/qmltooling/qmldbg_tcp.dll", - "plugins/renderers/openglrenderer.dll", - "plugins/renderplugins/scene2d.dll", - "plugins/scenegraph/qsgd3d12backend.dll", - "plugins/sceneparsers/assimpsceneimport.dll", - "plugins/sceneparsers/gltfsceneexport.dll", - "plugins/sceneparsers/gltfsceneimport.dll", - "plugins/sensorgestures/qtsensorgestures_plugin.dll", - "plugins/sensorgestures/qtsensorgestures_shakeplugin.dll", - "plugins/sensors/qtsensors_generic.dll", - "plugins/sqldrivers/qsqlite.dll", - "plugins/sqldrivers/qsqlodbc.dll", - "plugins/sqldrivers/qsqlpsql.dll", - "plugins/texttospeech/qtexttospeech_sapi.dll", - "plugins/virtualkeyboard/qtvirtualkeyboard_hangul.dll", - "plugins/virtualkeyboard/qtvirtualkeyboard_openwnn.dll", - "plugins/virtualkeyboard/qtvirtualkeyboard_pinyin.dll", - "plugins/virtualkeyboard/qtvirtualkeyboard_tcime.dll", - "plugins/virtualkeyboard/qtvirtualkeyboard_thai.dll", - "plugins/webview/qtwebview_webengine.dll", - "qml/Qt/labs/animation/labsanimationplugin.dll", - "qml/Qt/labs/calendar/qtlabscalendarplugin.dll", - "qml/Qt/labs/folderlistmodel/qmlfolderlistmodelplugin.dll", - "qml/Qt/labs/location/locationlabsplugin.dll", - "qml/Qt/labs/lottieqt/lottieqtplugin.dll", - "qml/Qt/labs/platform/qtlabsplatformplugin.dll", - "qml/Qt/labs/qmlmodels/labsmodelsplugin.dll", - "qml/Qt/labs/settings/qmlsettingsplugin.dll", - "qml/Qt/labs/sharedimage/sharedimageplugin.dll", - "qml/Qt/labs/wavefrontmesh/qmlwavefrontmeshplugin.dll", - "qml/Qt3D/Animation/quick3danimationplugin.dll", - "qml/Qt3D/Core/quick3dcoreplugin.dll", - "qml/Qt3D/Extras/quick3dextrasplugin.dll", - "qml/Qt3D/Input/quick3dinputplugin.dll", - "qml/Qt3D/Logic/quick3dlogicplugin.dll", - "qml/Qt3D/Render/quick3drenderplugin.dll", - "qml/QtBluetooth/declarative_bluetooth.dll", - "qml/QtCharts/qtchartsqml2.dll", - "qml/QtDataVisualization/datavisualizationqml2.dll", - "qml/QtGamepad/declarative_gamepad.dll", - "qml/QtGraphicalEffects/private/qtgraphicaleffectsprivate.dll", - "qml/QtGraphicalEffects/qtgraphicaleffectsplugin.dll", - "qml/QtLocation/declarative_location.dll", - "qml/QtMultimedia/declarative_multimedia.dll", - "qml/QtNfc/declarative_nfc.dll", - "qml/QtPositioning/declarative_positioning.dll", - "qml/QtPurchasing/declarative_purchasing.dll", - "qml/QtQml/Models.2/modelsplugin.dll", - "qml/QtQml/qmlplugin.dll", - "qml/QtQml/RemoteObjects/qtqmlremoteobjects.dll", - "qml/QtQml/StateMachine/qtqmlstatemachine.dll", - "qml/QtQml/WorkerScript.2/workerscriptplugin.dll", - "qml/QtQuick/Controls/qtquickcontrolsplugin.dll", - "qml/QtQuick/Controls/Styles/Flat/qtquickextrasflatplugin.dll", - "qml/QtQuick/Controls.2/Fusion/qtquickcontrols2fusionstyleplugin.dll", - "qml/QtQuick/Controls.2/Imagine/qtquickcontrols2imaginestyleplugin.dll", - "qml/QtQuick/Controls.2/Material/qtquickcontrols2materialstyleplugin.dll", - "qml/QtQuick/Controls.2/qtquickcontrols2plugin.dll", - "qml/QtQuick/Controls.2/Universal/qtquickcontrols2universalstyleplugin.dll", - "qml/QtQuick/Dialogs/dialogplugin.dll", - "qml/QtQuick/Dialogs/Private/dialogsprivateplugin.dll", - "qml/QtQuick/Extras/qtquickextrasplugin.dll", - "qml/QtQuick/Layouts/qquicklayoutsplugin.dll", - "qml/QtQuick/LocalStorage/qmllocalstorageplugin.dll", - "qml/QtQuick/Particles.2/particlesplugin.dll", - "qml/QtQuick/Pdf/pdfplugin.dll", - "qml/QtQuick/PrivateWidgets/widgetsplugin.dll", - "qml/QtQuick/Scene2D/qtquickscene2dplugin.dll", - "qml/QtQuick/Scene3D/qtquickscene3dplugin.dll", - "qml/QtQuick/Shapes/qmlshapesplugin.dll", - "qml/QtQuick/Templates.2/qtquicktemplates2plugin.dll", - "qml/QtQuick/Timeline/qtquicktimelineplugin.dll", - "qml/QtQuick/VirtualKeyboard/qtquickvirtualkeyboardplugin.dll", - "qml/QtQuick/VirtualKeyboard/Settings/qtquickvirtualkeyboardsettingsplugin.dll", - "qml/QtQuick/VirtualKeyboard/Styles/qtquickvirtualkeyboardstylesplugin.dll", - "qml/QtQuick/Window.2/windowplugin.dll", - "qml/QtQuick/XmlListModel/qmlxmllistmodelplugin.dll", - "qml/QtQuick.2/qtquick2plugin.dll", - "qml/QtQuick3D/Effects/qtquick3deffectplugin.dll", - "qml/QtQuick3D/Helpers/qtquick3dhelpersplugin.dll", - "qml/QtQuick3D/Materials/qtquick3dmaterialplugin.dll", - "qml/QtQuick3D/qquick3dplugin.dll", - "qml/QtRemoteObjects/qtremoteobjects.dll", - "qml/QtScxml/declarative_scxml.dll", - "qml/QtSensors/declarative_sensors.dll", - "qml/QtTest/qmltestplugin.dll", - "qml/QtWebChannel/declarative_webchannel.dll", - "qml/QtWebEngine/qtwebengineplugin.dll", - "qml/QtWebSockets/declarative_qmlwebsockets.dll", - "qml/QtWebView/declarative_webview.dll", - "Qt5DBus.dll", - "Qt5PrintSupport.dll", - "Qt5Script.dll", - "Qt5ScriptTools.dll", - "Qt5Scxml.dll", - "Qt5Sensors.dll", - "Qt5SerialBus.dll", - "Qt5SerialPort.dll", - "Qt5Sql.dll", - "Qt5Svg.dll", - "Qt5Test.dll", - "Qt5TextToSpeech.dll", - "Qt5VirtualKeyboard.dll", - "Qt5WebChannel.dll", - "Qt5WebEngine.dll", - "Qt5WebEngineCore.dll", - "Qt5WebEngineWidgets.dll", - "Qt5WebSockets.dll", - "Qt5WebView.dll", - "Qt5Xml.dll", - "Qt5XmlPatterns.dll", - ]: - os.remove( - os.path.join( - desktop_dir, - "windows", - "msi", - "OnionShare", - "src", - "app_packages", - "PySide2", - filename.replace("/", "\\"), - ) - ) - - print("○ Create the installer") - run(["briefcase", "package"], desktop_dir) - msi_filename = glob.glob(os.path.join(desktop_dir, "windows", "OnionShare-*.msi"))[ - 0 - ] - print(f"○ Created unsigned installer: {msi_filename}") - - print("○ Signing installer") - run( - [ - "signtool.exe", - "sign", - "/v", - "/d", - "OnionShare", - "/a", - "/tr", - "http://time.certum.pl/", - msi_filename, - ], - desktop_dir, - ) - print(f"○ Signed installer: {msi_filename}") - - -if __name__ == "__main__": - main() diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index e4e31389..0a26620b 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -114,6 +114,7 @@ include_files = [(os.path.join("..", "LICENSE"), "LICENSE")] if platform.system() == "Windows": include_msvcr = True gui_base = "Win32GUI" + exec_icon = os.path.join("onionshare", "resources", "onionshare.ico") elif platform.system() == "Darwin": import PySide2 @@ -121,6 +122,7 @@ elif platform.system() == "Darwin": include_msvcr = False gui_base = None + exec_icon = None include_files += [ ( os.path.join(PySide2.__path__[0], "libpyside2.abi3.5.15.dylib"), @@ -137,6 +139,7 @@ setup( version=version, description="Securely and anonymously share files, host websites, and chat with friends using the Tor network", options={ + # build_exe, for Windows and macOS "build_exe": { "packages": [ "cffi", @@ -197,18 +200,31 @@ setup( ], "include_files": include_files, "include_msvcr": include_msvcr, - } + }, + # bdist_mac, making the macOS app bundle + "bdist_mac": { + "iconfile": os.path.join("onionshare", "resources", "onionshare.icns"), + "bundle_name": "OnionShare", + "codesign_identity": "Developer ID Application: Micah Lee (N9B95FDWH4)", + "codesign_entitlements": os.path.join("package", "Entitlements.plist"), + "codesign_deep": True, + }, + # bdist_dmg, packaging the macOS app bundle in a dmg + "bdist_dmg": { + "volume_label": f"OnionShare-{version}", + "applications_shortcut": True, + }, }, executables=[ Executable( "package/onionshare.py", base=gui_base, - icon=os.path.join("onionshare", "resources", "onionshare.ico"), + icon=exec_icon, ), Executable( "package/onionshare-cli.py", base=None, - icon=os.path.join("onionshare", "resources", "onionshare.ico"), + icon=exec_icon, ), ], ) -- cgit v1.2.3-54-g00ecf From 07665a01090c63dc93becb6e89d6d0719cc59981 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 23 Dec 2021 11:49:43 -0800 Subject: Delete unused Qt5 files after Windows build --- cli/README.md | 8 -- desktop/README.md | 6 + desktop/package/build-windows.py | 296 +++++++++++++++++++++++++++++++++++++++ desktop/setup-freeze.py | 8 +- 4 files changed, 304 insertions(+), 14 deletions(-) create mode 100644 desktop/package/build-windows.py diff --git a/cli/README.md b/cli/README.md index bfc287be..12a157e3 100644 --- a/cli/README.md +++ b/cli/README.md @@ -97,11 +97,3 @@ To run tests: ```sh poetry run pytest -v ./tests ``` - -## Build a wheel package - -```sh -poetry build -``` - -This will create `dist/onionshare_cli-$VERSION-py3-none-any.whl`. diff --git a/desktop/README.md b/desktop/README.md index 92412146..1578f956 100644 --- a/desktop/README.md +++ b/desktop/README.md @@ -70,6 +70,12 @@ poetry run onionshare -v poetry run onionshare -v --local-only ``` +You can also run `onionshare-cli` from the source tree, and it will look for Tor binaries in `desktop/onionshare/resources/tor`. + +```sh +poetry run onionshare-cli --help +``` + ## Running tests Run the tests: diff --git a/desktop/package/build-windows.py b/desktop/package/build-windows.py new file mode 100644 index 00000000..045b5a2d --- /dev/null +++ b/desktop/package/build-windows.py @@ -0,0 +1,296 @@ +#!/usr/bin/env python3 +import os +import inspect +import subprocess +import shutil + + +root = os.path.dirname( + os.path.dirname( + os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + ) +) + + +def run(cmd, cwd=None): + print(cmd) + subprocess.run(cmd, cwd=cwd, check=True) + + +def get_size(dir): + size = 0 + for path, dirs, files in os.walk(dir): + for f in files: + fp = os.path.join(path, f) + size += os.path.getsize(fp) + return size + + +def main(): + desktop_dir = os.path.join(root, "desktop") + + print("○ Clean up from last build") + if os.path.exists(os.path.join(desktop_dir, "build")): + shutil.rmtree(os.path.join(desktop_dir, "build")) + + print("○ Building binaires") + run( + [ + shutil.which("python"), + "setup-freeze.py", + "build", + ], + desktop_dir, + ) + before_size = get_size(os.path.join(desktop_dir, "build", "exe.win32-3.9")) + + print("○ Delete unused PySide2 stuff to save space") + for dirname in ["examples", "qml"]: + shutil.rmtree( + os.path.join( + desktop_dir, "build", "exe.win32-3.9", "lib", "PySide2", dirname + ) + ) + for filename in [ + "lconvert.exe", + "linguist.exe", + "lrelease.exe", + "lupdate.exe", + "plugins/assetimporters/assimp.dll", + "plugins/assetimporters/uip.dll", + "plugins/audio/qtaudio_wasapi.dll", + "plugins/audio/qtaudio_windows.dll", + "plugins/bearer/qgenericbearer.dll", + "plugins/canbus/qtpassthrucanbus.dll", + "plugins/canbus/qtpeakcanbus.dll", + "plugins/canbus/qtsysteccanbus.dll", + "plugins/canbus/qttinycanbus.dll", + "plugins/canbus/qtvectorcanbus.dll", + "plugins/canbus/qtvirtualcanbus.dll", + "plugins/gamepads/xinputgamepad.dll", + "plugins/generic/qtuiotouchplugin.dll", + "plugins/geometryloaders/defaultgeometryloader.dll", + "plugins/geometryloaders/gltfgeometryloader.dll", + "plugins/geoservices/qtgeoservices_esri.dll", + "plugins/geoservices/qtgeoservices_itemsoverlay.dll", + "plugins/geoservices/qtgeoservices_mapbox.dll", + "plugins/geoservices/qtgeoservices_nokia.dll", + "plugins/geoservices/qtgeoservices_osm.dll", + "plugins/mediaservice/dsengine.dll", + "plugins/mediaservice/qtmedia_audioengine.dll", + "plugins/mediaservice/wmfengine.dll", + "plugins/platforminputcontexts/qtvirtualkeyboardplugin.dll", + "plugins/platforms/qdirect2d.dll", + "plugins/platforms/qoffscreen.dll", + "plugins/platforms/qwebgl.dll", + "plugins/platformthemes/qxdgdesktopportal.dll", + "plugins/playlistformats/qtmultimedia_m3u.dll", + "plugins/position/qtposition_positionpoll.dll", + "plugins/position/qtposition_serialnmea.dll", + "plugins/position/qtposition_winrt.dll", + "plugins/printsupport/windowsprintersupport.dll", + "plugins/qmltooling/qmldbg_debugger.dll", + "plugins/qmltooling/qmldbg_inspector.dll", + "plugins/qmltooling/qmldbg_local.dll", + "plugins/qmltooling/qmldbg_messages.dll", + "plugins/qmltooling/qmldbg_native.dll", + "plugins/qmltooling/qmldbg_nativedebugger.dll", + "plugins/qmltooling/qmldbg_preview.dll", + "plugins/qmltooling/qmldbg_profiler.dll", + "plugins/qmltooling/qmldbg_quickprofiler.dll", + "plugins/qmltooling/qmldbg_server.dll", + "plugins/qmltooling/qmldbg_tcp.dll", + "plugins/renderers/openglrenderer.dll", + "plugins/renderplugins/scene2d.dll", + "plugins/scenegraph/qsgd3d12backend.dll", + "plugins/sceneparsers/gltfsceneexport.dll", + "plugins/sceneparsers/gltfsceneimport.dll", + "plugins/sensorgestures/qtsensorgestures_plugin.dll", + "plugins/sensorgestures/qtsensorgestures_shakeplugin.dll", + "plugins/sensors/qtsensors_generic.dll", + "plugins/sqldrivers/qsqlite.dll", + "plugins/sqldrivers/qsqlodbc.dll", + "plugins/sqldrivers/qsqlpsql.dll", + "plugins/styles/qwindowsvistastyle.dll", + "plugins/texttospeech/qtexttospeech_sapi.dll", + "plugins/virtualkeyboard/qtvirtualkeyboard_hangul.dll", + "plugins/virtualkeyboard/qtvirtualkeyboard_openwnn.dll", + "plugins/virtualkeyboard/qtvirtualkeyboard_pinyin.dll", + "plugins/virtualkeyboard/qtvirtualkeyboard_tcime.dll", + "plugins/virtualkeyboard/qtvirtualkeyboard_thai.dll", + "plugins/webview/qtwebview_webengine.dll", + "pyside2-lupdate.exe", + "Qt3DAnimation.pyd", + "Qt3DAnimation.pyi", + "Qt3DCore.pyd", + "Qt3DCore.pyi", + "Qt3DExtras.pyd", + "Qt3DExtras.pyi", + "Qt3DInput.pyd", + "Qt3DInput.pyi", + "Qt3DLogic.pyd", + "Qt3DLogic.pyi", + "Qt3DRender.pyd", + "Qt3DRender.pyi", + "Qt53DAnimation.dll", + "Qt53DCore.dll", + "Qt53DExtras.dll", + "Qt53DInput.dll", + "Qt53DLogic.dll", + "Qt53DQuick.dll", + "Qt53DQuickAnimation.dll", + "Qt53DQuickExtras.dll", + "Qt53DQuickInput.dll", + "Qt53DQuickRender.dll", + "Qt53DQuickScene2D.dll", + "Qt53DRender.dll", + "Qt5Bluetooth.dll", + "Qt5Bodymovin.dll", + "Qt5Charts.dll", + "Qt5Concurrent.dll", + "Qt5DataVisualization.dll", + "Qt5DBus.dll", + "Qt5Designer.dll", + "Qt5DesignerComponents.dll", + "Qt5Gamepad.dll", + "Qt5Help.dll", + "Qt5Location.dll", + "Qt5Multimedia.dll", + "Qt5MultimediaQuick.dll", + "Qt5MultimediaWidgets.dll", + "Qt5Nfc.dll", + "Qt5OpenGL.dll", + "Qt5Pdf.dll", + "Qt5PdfWidgets.dll", + "Qt5Positioning.dll", + "Qt5PositioningQuick.dll", + "Qt5PrintSupport.dll", + "Qt5Purchasing.dll", + "Qt5Quick.dll", + "Qt5Quick3D.dll", + "Qt5Quick3DAssetImport.dll", + "Qt5Quick3DRender.dll", + "Qt5Quick3DRuntimeRender.dll", + "Qt5Quick3DUtils.dll", + "Qt5QuickControls2.dll", + "Qt5QuickParticles.dll", + "Qt5QuickShapes.dll", + "Qt5QuickTemplates2.dll", + "Qt5QuickTest.dll", + "Qt5QuickWidgets.dll", + "Qt5RemoteObjects.dll", + "Qt5Script.dll", + "Qt5ScriptTools.dll", + "Qt5Scxml.dll", + "Qt5Sensors.dll", + "Qt5SerialBus.dll", + "Qt5SerialPort.dll", + "Qt5Sql.dll", + "Qt5Svg.dll", + "Qt5Test.dll", + "Qt5TextToSpeech.dll", + "Qt5VirtualKeyboard.dll", + "Qt5WebChannel.dll", + "Qt5WebEngine.dll", + "Qt5WebEngineCore.dll", + "Qt5WebEngineWidgets.dll", + "Qt5WebSockets.dll", + "Qt5WebView.dll", + "Qt5Xml.dll", + "Qt5XmlPatterns.dll", + "QtAxContainer.pyd", + "QtAxContainer.pyi", + "QtCharts.pyd", + "QtCharts.pyi", + "QtConcurrent.pyd", + "QtConcurrent.pyi", + "QtDataVisualization.pyd", + "QtDataVisualization.pyi", + "qtdiag.exe", + "QtHelp.pyd", + "QtHelp.pyi", + "QtLocation.pyd", + "QtLocation.pyi", + "QtMultimedia.pyd", + "QtMultimedia.pyi", + "QtMultimediaWidgets.pyd", + "QtMultimediaWidgets.pyi", + "QtNetwork.pyd", + "QtNetwork.pyi", + "QtOpenGL.pyd", + "QtOpenGL.pyi", + "QtOpenGLFunctions.pyd", + "QtOpenGLFunctions.pyi", + "QtPositioning.pyd", + "QtPositioning.pyi", + "QtPrintSupport.pyd", + "QtPrintSupport.pyi", + "QtQml.pyd", + "QtQml.pyi", + "QtQuick.pyd", + "QtQuick.pyi", + "QtQuickControls2.pyd", + "QtQuickControls2.pyi", + "QtQuickWidgets.pyd", + "QtQuickWidgets.pyi", + "QtRemoteObjects.pyd", + "QtRemoteObjects.pyi", + "QtScript.pyd", + "QtScript.pyi", + "QtScriptTools.pyd", + "QtScriptTools.pyi", + "QtScxml.pyd", + "QtScxml.pyi", + "QtSensors.pyd", + "QtSensors.pyi", + "QtSerialPort.pyd", + "QtSerialPort.pyi", + "QtSql.pyd", + "QtSql.pyi", + "QtSvg.pyd", + "QtSvg.pyi", + "QtTest.pyd", + "QtTest.pyi", + "QtTextToSpeech.pyd", + "QtTextToSpeech.pyi", + "QtUiTools.pyd", + "QtUiTools.pyi", + "QtWebChannel.pyd", + "QtWebChannel.pyi", + "QtWebEngine.pyd", + "QtWebEngine.pyi", + "QtWebEngineCore.pyd", + "QtWebEngineCore.pyi", + "QtWebEngineProcess.exe", + "QtWebEngineWidgets.pyd", + "QtWebEngineWidgets.pyi", + "QtWebSockets.pyd", + "QtWebSockets.pyi", + "QtWinExtras.pyd", + "QtWinExtras.pyi", + "QtXml.pyd", + "QtXml.pyi", + "QtXmlPatterns.pyd", + "QtXmlPatterns.pyi", + "rcc.exe", + "uic.exe", + ]: + os.remove( + os.path.join( + desktop_dir, + "build", + "exe.win32-3.9", + "lib", + "PySide2", + filename.replace("/", "\\"), + ) + ) + + after_size = get_size(os.path.join(desktop_dir, "build", "exe.win32-3.9")) + freed_bytes = before_size - after_size + freed_mb = freed_bytes / 1024 / 1024 + print(f"○ Freed {freed_mb} mb") + + +if __name__ == "__main__": + main() diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index 0a26620b..36f81bd7 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -113,7 +113,8 @@ include_files = [(os.path.join("..", "LICENSE"), "LICENSE")] if platform.system() == "Windows": include_msvcr = True - gui_base = "Win32GUI" + # gui_base = "Win32GUI" + gui_base = None exec_icon = os.path.join("onionshare", "resources", "onionshare.ico") elif platform.system() == "Darwin": @@ -209,11 +210,6 @@ setup( "codesign_entitlements": os.path.join("package", "Entitlements.plist"), "codesign_deep": True, }, - # bdist_dmg, packaging the macOS app bundle in a dmg - "bdist_dmg": { - "volume_label": f"OnionShare-{version}", - "applications_shortcut": True, - }, }, executables=[ Executable( -- cgit v1.2.3-54-g00ecf From 159540f06b3cf4697bb7defac5610275aa5618ff Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 23 Dec 2021 11:58:07 -0800 Subject: Start adding cx_Freeze linux support --- desktop/setup-freeze.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index 0a26620b..5dc1728f 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -19,16 +19,17 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . """ import os +import sys import platform +import shutil import cx_Freeze from cx_Freeze import setup, Executable # There's an obscure cx_Freeze bug that I'm hitting that's preventing the macOS # package from getting built. This is some monkeypatching to fix it. -if platform.system() == "Darwin": +if platform.system() == "Darwin" or platform.system() == "Linux": import importlib_metadata - import shutil import pathlib from pathlib import Path from tempfile import TemporaryDirectory @@ -134,6 +135,15 @@ elif platform.system() == "Darwin": ), ] +elif platform.system() == "Linux": + include_msvcr = False + gui_base = None + exec_icon = None + + if not shutil.which("patchelf"): + print("Install the patchelf package") + sys.exit() + setup( name="onionshare", version=version, -- cgit v1.2.3-54-g00ecf From f6f4af06ce2b520786538c87072985e402fa378b Mon Sep 17 00:00:00 2001 From: Saptak S Date: Sun, 26 Dec 2021 17:28:18 +0530 Subject: Updates python image to 3.9 in circleci to match pyproject requirement --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 59eafc34..ca95b987 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ workflows: jobs: test-cli: docker: - - image: circleci/python:3.8-buster + - image: circleci/python:3.9-buster working_directory: ~/repo @@ -37,7 +37,7 @@ jobs: test-gui: docker: - - image: circleci/python:3.8-buster + - image: circleci/python:3.9-buster working_directory: ~/repo -- cgit v1.2.3-54-g00ecf From c5761953bca566f93f955ec30e9db15a302c1d81 Mon Sep 17 00:00:00 2001 From: Saptak S Date: Sun, 26 Dec 2021 18:07:56 +0530 Subject: Use xvfb to run the GUI tests --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ca95b987..6c911cb3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -57,4 +57,4 @@ jobs: name: Run tests command: | cd ~/repo/desktop - poetry run ./tests/run.sh + xvfb-run poetry run ./tests/run.sh -- cgit v1.2.3-54-g00ecf From 4f1e33fecc2205fd41910894cd149c46f1bb43c8 Mon Sep 17 00:00:00 2001 From: Saptak S Date: Thu, 30 Dec 2021 13:19:53 +0530 Subject: Try bullseye image instead of buster --- .circleci/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 6c911cb3..47d6340f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -9,7 +9,7 @@ workflows: jobs: test-cli: docker: - - image: circleci/python:3.9-buster + - image: circleci/python:3.9-bullseye working_directory: ~/repo @@ -37,7 +37,7 @@ jobs: test-gui: docker: - - image: circleci/python:3.9-buster + - image: circleci/python:3.9-bullseye working_directory: ~/repo -- cgit v1.2.3-54-g00ecf From c76bec368a144f2881e1c3a3c7d803c40a9320d2 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 11 Jan 2022 06:54:46 +0100 Subject: Translated using Weblate (Japanese) Currently translated at 100.0% (17 of 17 strings) Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Co-authored-by: AO Localisation Lab Co-authored-by: Hosted Weblate Co-authored-by: Taro Tanaka Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/ja/ Translation: OnionShare/Doc - Advanced --- desktop/src/onionshare/resources/locale/fr.json | 50 ++++++++++++------------- docs/source/locale/ja/LC_MESSAGES/advanced.po | 28 ++++++++++---- 2 files changed, 45 insertions(+), 33 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json index 2441c821..21bd0bf4 100644 --- a/desktop/src/onionshare/resources/locale/fr.json +++ b/desktop/src/onionshare/resources/locale/fr.json @@ -80,7 +80,7 @@ "gui_settings_connection_type_test_button": "Tester la connexion à Tor", "gui_settings_control_port_label": "Port de contrôle", "gui_settings_authenticate_label": "Paramètres d’authentification de Tor", - "gui_settings_tor_bridges": "Se connecter en utilisant un pont Tor ?", + "gui_settings_tor_bridges": "Se connecter en utilisant un pont Tor ?", "gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés", "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur https://bridges.torproject.org", "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne. Vérifiez-les de nouveau ou ajoutez-en d’autres.", @@ -153,7 +153,7 @@ "gui_settings_stealth_option": "Utiliser l’autorisation du client", "timeout_upload_still_running": "En attente de la fin de l'envoi", "gui_settings_autoupdate_check_button": "Vérifier la présence d’une nouvelle version", - "settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services onion éphémères : {}.\nPrend en charge l’authentification client : {}.\nPrend en charge la nouvelle génération d’adresses .onion : {}.", + "settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services oignon éphémères : {}.\nPrend en charge l’authentification client : {}.\nPrend en charge la nouvelle génération d’adresses .onion : {}.", "update_error_check_error": "Impossible de vérifier l’existence d’une mise à jour : peut-être n’êtes-vous pas connecté à Tor ou le site Web d’OnionShare est-il hors service ?", "update_error_invalid_latest_version": "Impossible de vérifier la présence d’une mise à jour : le site Web d’OnionShare indique que la version la plus récente est la « {} » qui n’est pas reconnue…", "gui_tor_connection_ask": "Ouvrir les paramètres pour résoudre le problème de connexion à Tor ?", @@ -172,7 +172,7 @@ "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-azure 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_meek_lite_expensive_warning": "Avertissement : L’exploitation de ponts meek_azure 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_autostop_timer_checkbox": "Utiliser une 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. Veuillez 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. Veuillez la modifier pour commencer le partage.", @@ -252,7 +252,7 @@ "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans", "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)", "mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)", - "mode_settings_public_checkbox": "Ceci est un service OnionShare public (sans clé privée)", + "mode_settings_public_checkbox": "Ce service OnionShare est public (il désactive la clé privée)", "mode_settings_persistent_checkbox": "Enregistrer cet onglet et l’ouvrir automatiquement quand j’ouvre OnionShare", "mode_settings_advanced_toggle_hide": "Cacher les paramètres avancés", "mode_settings_advanced_toggle_show": "Afficher les paramètres avancés", @@ -297,49 +297,49 @@ "gui_status_indicator_chat_scheduled": "Planifié…", "gui_status_indicator_chat_working": "Démarrage…", "gui_status_indicator_chat_stopped": "Prêt à dialoguer", - "gui_copied_client_auth_title": "Clé privée copiée", + "gui_copied_client_auth_title": "La clé privée a été copiée", "gui_please_wait_no_button": "Démarrage…", - "gui_copied_client_auth": "Clé privée copiée dans le presse-papiers", - "gui_qr_label_url_title": "Adresse OnionShare", + "gui_copied_client_auth": "La clé privée a été copiée dans le presse-papiers", + "gui_qr_label_url_title": "Adresse OnionShare", "gui_hide": "Cacher", "gui_qr_label_auth_string_title": "Clé privée", "gui_copy_client_auth": "Copier la clé privée", "gui_share_url_public_description": "Quiconque disposant de cette adresse OnionShare peut télécharger vos fichiers en utilisant le Navigateur Tor : ", - "gui_url_instructions": "Tout d'abord, envoyez l'adresse OnionShare ci-dessous :", + "gui_url_instructions": "Envoyez d’abord l’adresse OnionShare ci-dessous :", "gui_settings_theme_light": "Clair", - "gui_reveal": "Montrer", + "gui_reveal": "Révéler", "gui_chat_url_public_description": "Quiconque disposant de cette adresse OnionShare peut se joindre à ce salon de discussion en utilisant le Navigateur Tor : ", - "gui_url_instructions_public_mode": "Envoyez l'adresse OnionShare ci-dessous :", + "gui_url_instructions_public_mode": "Envoyez l’adresse OnionShare ci-dessous :", "gui_settings_theme_label": "Thème", "gui_settings_theme_auto": "Automatique", "gui_settings_theme_dark": "Sombre", "gui_website_url_public_description": "Quiconque disposant de cette adresse OnionShare peut visiter votre site Web en utilisant le Navigateur Tor : ", - "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge la fonctionnalité \"stealth\" (le client d'authentification). Veuillez essayer avec une version plus récente de Tor, ou utilisez le mode 'public' s'il n'a pas besoin d'être privé.", + "gui_server_doesnt_support_stealth": "Désolé, cette version de Tor ne prend pas en charge l’authentification client. Veuillez essayer avec une version plus récente de Tor ou utilisez le mode « public » si la confidentialité n’est pas nécessaire.", "gui_receive_url_public_description": "Quiconque disposant de cette adresse OnionShare peut téléverser des fichiers vers votre ordinateur en utilisant le Navigateur Tor : ", - "gui_client_auth_instructions": "Ensuite, envoyez la clé privée pour autoriser l'accès à votre service OnionShare :", + "gui_client_auth_instructions": "Envoyez ensuite la clé privée pour accorder l’accès à votre service OnionShare :", "gui_dragdrop_sandbox_flatpak": "Afin de rendre la sandbox Flatpak plus sécurisée, le glisser-coller n'est pas pris en charge. Utilisez les boutons Ajouter des fichiers et Ajouter des dossiers pour chercher vos fichiers à la place.", - "moat_solution_empty_error": "Vous devez saisir les caractères apparaissant sur l'image", - "gui_settings_stop_active_tabs_label": "Il y a des services en cours d'éxécution dans certains de vos onglets.\nVous devez arrêter tout les services pour changer vos paramètres Tor.", + "moat_solution_empty_error": "Vous devez saisir les caractères présentés par l’image", + "gui_settings_stop_active_tabs_label": "Des services sont en cours d’exécution dans certains de vos onglets.\nVous devez arrêter tous les services pour changer vos paramètres de Tor.", "moat_captcha_label": "Résolvez le CAPTCHA pour demander un pont.", - "gui_tor_settings_window_title": "Paramètres Tor", - "gui_settings_controller_extras_label": "Paramètres Tor", - "gui_settings_tor_bridges_label": "Les ponts vous aident à accéder au réseau Tor dans les lieux où Tor est bloqué. Selon l'endroit où vous êtes, un pont peut marcher mieux qu'un autre.", + "gui_tor_settings_window_title": "Paramètres de Tor", + "gui_settings_controller_extras_label": "Paramètres de Tor", + "gui_settings_tor_bridges_label": "Les ponts vous aident à accéder au réseau Tor où Tor est bloqué. Selon l’endroit où vous êtes, un pont pourrait fonctionner mieux qu’un autre.", "gui_settings_bridge_use_checkbox": "Utiliser un pont", - "gui_settings_bridge_radio_builtin": "Choisir un pont pré-configuré", + "gui_settings_bridge_radio_builtin": "Choisir un pont intégré", "gui_settings_bridge_none_radio_option": "Ne pas utiliser de pont", - "gui_settings_bridge_moat_radio_option": "Demander un pont depuis torproject.org", + "gui_settings_bridge_moat_radio_option": "Demander un pont à torproject.org", "gui_settings_bridge_moat_button": "Demander un nouveau pont", - "gui_settings_bridge_custom_radio_option": "Fournir un pont que vous avez appris par une source sure", + "gui_settings_bridge_custom_radio_option": "Fournir un pont dont vous avez connaissance de source sûre", "gui_settings_bridge_custom_placeholder": "écrire address:port (une par ligne)", "gui_settings_moat_bridges_invalid": "Vous n'avez pas encore demandé un pont depuis torprohect.com.", "gui_settings_version_label": "Vous utilisez OnionShare {}", - "gui_settings_help_label": "Besoin d'aide ? Allez voir docs.onionshare.org", + "gui_settings_help_label": "Besoin d’aide ? Consultez docs.onionshare.org", "mode_settings_website_custom_csp_checkbox": "Envoyer en-tête de Politique de sécurité de contenu personnalisé", - "moat_contact_label": "Entrain de contacter BridgeDB...", - "moat_captcha_placeholder": "Saisissez les caractères apparaissant sur l'image", + "moat_contact_label": "Contact de BridgeDB…", + "moat_captcha_placeholder": "Saisissez les caractères de l’image", "moat_captcha_submit": "Envoyer", "moat_captcha_reload": "Recharger", - "moat_bridgedb_error": "Erreur en tentant de contacter BridgeDB.", + "moat_bridgedb_error": "Erreur lors du contact de BridgeDB.", "moat_captcha_error": "La solution est erronée. Veuillez réessayer.", - "mode_tor_not_connected_label": "OnionShare n'est pas connecté au réseau Tor" + "mode_tor_not_connected_label": "OnionShare n’est pas connecté au réseau Tor" } diff --git a/docs/source/locale/ja/LC_MESSAGES/advanced.po b/docs/source/locale/ja/LC_MESSAGES/advanced.po index 99e1201f..31b78cde 100644 --- a/docs/source/locale/ja/LC_MESSAGES/advanced.po +++ b/docs/source/locale/ja/LC_MESSAGES/advanced.po @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: OnionShare 2.3\n" "Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n" "POT-Creation-Date: 2020-11-15 14:42-0800\n" -"PO-Revision-Date: 2021-12-18 05:52+0000\n" +"PO-Revision-Date: 2022-01-11 05:54+0000\n" "Last-Translator: Taro Tanaka \n" "Language-Team: LANGUAGE \n" "Language: ja\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Weblate 4.10\n" +"X-Generator: Weblate 4.10.1\n" "Generated-By: Babel 2.9.0\n" #: ../../source/advanced.rst:2 @@ -102,6 +102,9 @@ msgid "" "scheduled time\", \"Stop onion service at scheduled time\", or both, and " "set the respective desired dates and times." msgstr "" +"OnionShareでは、サービスの開始・停止する時間を予定することができます。サーバーを起動する前に、そのタブに「詳細設定を表示」をクリックして、「 " +"指定の日時にonionサービスを起動する 」または「 指定の日時にonionサービスを停止する " +"」それとも両方のボックスをチェックして、希望日時を入力する。" #: ../../source/advanced.rst:43 msgid "" @@ -110,6 +113,9 @@ msgid "" "starts. If you scheduled it to stop in the future, after it's started you" " will see a timer counting down to when it will stop automatically." msgstr "" +"サービスを将来に起動するよう設定した場合、「 共有を開始 " +"」ボタンをクリックすると開始時間までの減算カウンターが表示されます。将来に停止するよう設定した場合、「 共有を開始 " +"」ボタンをクリックすると普通に開始して、停止する時間までの減算カウンターは表示されます。" #: ../../source/advanced.rst:46 msgid "" @@ -118,6 +124,8 @@ msgid "" "time in the future if anything happens to you. If nothing happens to you," " you can cancel the service before it's scheduled to start." msgstr "" +"**自動的な起動を予定することで、OnionShareのサービスを「デッドマン装置」として使えます。** " +"最悪の事態が起きた場合、特定時間にサービスは自動的に立ち上がります。何も起きなかったら、立ち上がる時点の前に停止できます。" #: ../../source/advanced.rst:51 msgid "" @@ -129,29 +137,31 @@ msgstr "" #: ../../source/advanced.rst:56 msgid "Command-line Interface" -msgstr "" +msgstr "コマンドライン・インターフェース" #: ../../source/advanced.rst:58 msgid "" "In addition to its graphical interface, OnionShare has a command-line " "interface." -msgstr "" +msgstr "グラフィカル・インターフェースに加えて、OnionShareにはコマンドライン・インターフェースがあります。" #: ../../source/advanced.rst:60 msgid "" "You can install just the command-line version of OnionShare using " "``pip3``::" -msgstr "" +msgstr "``pip3``:: を利用して、OnionShareのコマンドライン版のみをインストールできます。" #: ../../source/advanced.rst:64 msgid "" "Note that you will also need the ``tor`` package installed. In macOS, " "install it with: ``brew install tor``" msgstr "" +"``tor`` パッケージもインストールする必要があるとご了承ください。macOSの場合は ``brew install tor`` " +"でインストールできます" #: ../../source/advanced.rst:66 msgid "Then run it like this::" -msgstr "" +msgstr "そして以下のコマンドで実行できます ::" #: ../../source/advanced.rst:70 msgid "" @@ -159,16 +169,18 @@ msgid "" "also just run ``onionshare.cli`` to access the command-line interface " "version." msgstr "" +"LinuxのSnapcraftパッケージでOnionShareをインストールした場合、``onionshare.cli`` " +"を実行するだけでコマンドライン・インターフェイスをアクセスできます。" #: ../../source/advanced.rst:73 msgid "Usage" -msgstr "" +msgstr "使用方法" #: ../../source/advanced.rst:75 msgid "" "You can browse the command-line documentation by running ``onionshare " "--help``::" -msgstr "" +msgstr "コマンドラインのドキュメンテーションを閲覧するには、 ``onionshare --help``::" #: ../../source/advanced.rst:132 msgid "Legacy Addresses" -- cgit v1.2.3-54-g00ecf From 0427572521c6b2a662ebfd1f7288dc3d293e9b95 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 12 Jan 2022 19:58:40 -0800 Subject: Add code signing and MSI packaging for Windows --- RELEASE.md | 10 +- desktop/package/build-windows.py | 299 ++++++++++++++++++++++++++++++++++++++- desktop/package/license.rtf | 136 ++++++++++++++++++ desktop/setup-freeze.py | 3 +- 4 files changed, 439 insertions(+), 9 deletions(-) create mode 100644 desktop/package/license.rtf diff --git a/RELEASE.md b/RELEASE.md index 19fc40dd..209b611b 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -100,15 +100,19 @@ snapcraft upload --release=stable onionshare_$VERSION_amd64.snap ## Windows -Set up the development environment described in `README.md`. And install the [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) and add `C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x86` to your path. +Set up the development environment described in desktop `README.md`. + +- To get `signtool.exe`, install the [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk) and add `C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x86` to your path. +- Go to https://dotnet.microsoft.com/download/dotnet-framework and download and install .NET Framework 3.5 SP1 Runtime. I downloaded `dotnetfx35.exe`. +- Go to https://wixtoolset.org/releases/ and download and install WiX toolset. I downloaded `wix311.exe`. Add `C:\Program Files (x86)\WiX Toolset v3.11\bin` to the path. Run the Windows build script: ``` -poetry run python .\package\windows\build.py +poetry run python .\package\build-windows.py ``` -This will create `desktop/windows/OnionShare-$VERSION.msi`, signed. +This will create `desktop/dist/OnionShare-$VERSION.msi`, signed. ## macOS diff --git a/desktop/package/build-windows.py b/desktop/package/build-windows.py index 045b5a2d..c56d731d 100644 --- a/desktop/package/build-windows.py +++ b/desktop/package/build-windows.py @@ -3,6 +3,8 @@ import os import inspect import subprocess import shutil +import uuid +import xml.etree.ElementTree as ET root = os.path.dirname( @@ -12,9 +14,35 @@ root = os.path.dirname( ) -def run(cmd, cwd=None): +def run(cmd, cwd=None, error_ok=False): print(cmd) - subprocess.run(cmd, cwd=cwd, check=True) + try: + subprocess.run(cmd, cwd=cwd, check=True) + except subprocess.CalledProcessError as e: + if not error_ok: + raise subprocess.CalledProcessError(e) + + +def sign(filename, cwd=None): + run( + [ + shutil.which("signtool"), + "sign", + "/v", + "/d", + "OnionShare", + "/sha1", + "bb1d265ab02272e8fc742f149dcf8751cac63f50", + "/fd", + "SHA256", + "/td", + "SHA256", + "/tr", + "http://timestamp.digicert.com", + filename, + ], + cwd, + ) def get_size(dir): @@ -26,14 +54,121 @@ def get_size(dir): return size +def wix_build_data(dirname, dir_prefix, id_, name): + data = { + "id": id_, + "name": name, + "files": [], + "dirs": [], + } + + for basename in os.listdir(dirname): + filename = os.path.join(dirname, basename) + if os.path.isfile(filename): + data["files"].append(os.path.join(dir_prefix, basename)) + elif os.path.isdir(filename): + if id_ == "INSTALLDIR": + id_prefix = "Folder" + else: + id_prefix = id_ + + # Skip lib/Pyside2/Examples folder + if "\\build\\exe.win32-3.9\\lib\\PySide2\\examples" in dirname: + continue + + id_value = f"{id_prefix}{basename.capitalize().replace('-', '_')}" + data["dirs"].append( + wix_build_data( + os.path.join(dirname, basename), + os.path.join(dir_prefix, basename), + id_value, + basename, + ) + ) + + if len(data["files"]) > 0: + if id_ == "INSTALLDIR": + data["component_id"] = "ApplicationFiles" + else: + data["component_id"] = "FolderComponent" + id_[len("Folder") :] + data["component_guid"] = str(uuid.uuid4()) + + return data + + +def wix_build_dir_xml(root, data): + attrs = {} + if "id" in data: + attrs["Id"] = data["id"] + if "name" in data: + attrs["Name"] = data["name"] + el = ET.SubElement(root, "Directory", attrs) + for subdata in data["dirs"]: + wix_build_dir_xml(el, subdata) + + # If this is the ProgramMenuFolder, add the menu component + if "id" in data and data["id"] == "ProgramMenuFolder": + component_el = ET.SubElement( + el, + "Component", + Id="ApplicationShortcuts", + Guid="539e7de8-a124-4c09-aa55-0dd516aad7bc", + ) + ET.SubElement( + component_el, + "Shortcut", + Id="ApplicationShortcut1", + Name="OnionShare", + Description="OnionShare", + Target="[INSTALLDIR]onionshare.exe", + WorkingDirectory="INSTALLDIR", + ) + ET.SubElement( + component_el, + "RegistryValue", + Root="HKCU", + Key="Software\OnionShare", + Name="installed", + Type="integer", + Value="1", + KeyPath="yes", + ) + + +def wix_build_components_xml(root, data): + component_ids = [] + if "component_id" in data: + component_ids.append(data["component_id"]) + + for subdata in data["dirs"]: + if "component_guid" in subdata: + dir_ref_el = ET.SubElement(root, "DirectoryRef", Id=subdata["id"]) + component_el = ET.SubElement( + dir_ref_el, + "Component", + Id=subdata["component_id"], + Guid=subdata["component_guid"], + ) + for filename in subdata["files"]: + file_el = ET.SubElement( + component_el, "File", Source=filename, Id="file_" + uuid.uuid4().hex + ) + + component_ids += wix_build_components_xml(root, subdata) + + return component_ids + + def main(): desktop_dir = os.path.join(root, "desktop") print("○ Clean up from last build") if os.path.exists(os.path.join(desktop_dir, "build")): shutil.rmtree(os.path.join(desktop_dir, "build")) + if os.path.exists(os.path.join(desktop_dir, "dist")): + shutil.rmtree(os.path.join(desktop_dir, "dist")) - print("○ Building binaires") + print("○ Building binaries") run( [ shutil.which("python"), @@ -288,9 +423,165 @@ def main(): after_size = get_size(os.path.join(desktop_dir, "build", "exe.win32-3.9")) freed_bytes = before_size - after_size - freed_mb = freed_bytes / 1024 / 1024 + freed_mb = int(freed_bytes / 1024 / 1024) print(f"○ Freed {freed_mb} mb") + print(f"○ Signing onionshare.exe") + sign(os.path.join("build", "exe.win32-3.9", "onionshare.exe"), desktop_dir) + + print(f"○ Signing onionshare-cli.exe") + sign(os.path.join("build", "exe.win32-3.9", "onionshare-cli.exe"), desktop_dir) + + print(f"○ Build the WiX file") + version_filename = os.path.join( + root, "cli", "onionshare_cli", "resources", "version.txt" + ) + with open(version_filename) as f: + version = f.read().strip() + + dist_dir = os.path.join( + root, + "desktop", + "build", + "exe.win32-3.9", + ) + + data = { + "id": "TARGETDIR", + "name": "SourceDir", + "dirs": [ + { + "id": "ProgramFilesFolder", + "dirs": [], + }, + { + "id": "ProgramMenuFolder", + "dirs": [], + }, + ], + } + + data["dirs"][0]["dirs"].append( + wix_build_data( + dist_dir, + "exe.win32-3.9", + "INSTALLDIR", + "OnionShare", + ) + ) + + root_el = ET.Element("Wix", xmlns="http://schemas.microsoft.com/wix/2006/wi") + product_el = ET.SubElement( + root_el, + "Product", + Name="OnionShare", + Manufacturer="Micah Lee, et al.", + Id="*", + UpgradeCode="$(var.ProductUpgradeCode)", + Language="1033", + Codepage="1252", + Version="$(var.ProductVersion)", + ) + ET.SubElement( + product_el, + "Package", + Id="*", + Keywords="Installer", + Description="OnionShare $(var.ProductVersion) Installer", + Manufacturer="Micah Lee, et al.", + InstallerVersion="100", + Languages="1033", + Compressed="yes", + SummaryCodepage="1252", + ) + ET.SubElement(product_el, "Media", Id="1", Cabinet="product.cab", EmbedCab="yes") + ET.SubElement( + product_el, + "Icon", + Id="ProductIcon", + SourceFile="..\\onionshare\\resources\\onionshare.ico", + ) + ET.SubElement(product_el, "Property", Id="ARPPRODUCTICON", Value="ProductIcon") + ET.SubElement( + product_el, + "Property", + Id="ARPHELPLINK", + Value="https://docs.onionshare.org", + ) + ET.SubElement( + product_el, + "Property", + Id="ARPURLINFOABOUT", + Value="https://onionshare.org", + ) + ET.SubElement(product_el, "UIRef", Id="WixUI_Minimal") + ET.SubElement(product_el, "UIRef", Id="WixUI_ErrorProgressText") + ET.SubElement( + product_el, + "WixVariable", + Id="WixUILicenseRtf", + Value="..\\package\\license.rtf", + ) + # ET.SubElement( + # product_el, + # "WixVariable", + # Id="WixUIDialogBmp", + # Value="..\\package\\dialog.bmp", + # ) + ET.SubElement( + product_el, + "MajorUpgrade", + AllowSameVersionUpgrades="yes", + DowngradeErrorMessage="A newer version of [ProductName] is already installed. If you are sure you want to downgrade, remove the existing installation via Programs and Features.", + ) + + wix_build_dir_xml(product_el, data) + component_ids = wix_build_components_xml(product_el, data) + + feature_el = ET.SubElement(product_el, "Feature", Id="DefaultFeature", Level="1") + for component_id in component_ids: + ET.SubElement(feature_el, "ComponentRef", Id=component_id) + ET.SubElement(feature_el, "ComponentRef", Id="ApplicationShortcuts") + + with open(os.path.join(root, "desktop", "build", "OnionShare.wxs"), "w") as f: + f.write('\n') + f.write(f'\n') + f.write( + '\n' + ) + + ET.indent(root_el) + f.write(ET.tostring(root_el).decode()) + + print(f"○ Build the MSI") + run( + [shutil.which("candle.exe"), "OnionShare.wxs"], + os.path.join(desktop_dir, "build"), + ) + run( + [shutil.which("light.exe"), "-ext", "WixUIExtension", "OnionShare.wixobj"], + os.path.join(desktop_dir, "build"), + ) + + print(f"○ Prepare OnionShare.msi for signing") + run( + [ + shutil.which("insignia.exe"), + "-im", + os.path.join(desktop_dir, "build", "OnionShare.msi"), + ], + error_ok=True, + ) + sign(os.path.join(desktop_dir, "build", "OnionShare.msi")) + + final_msi_filename = os.path.join(desktop_dir, "dist", f"OnionShare-{version}.msi") + print(f"○ Final MSI: {final_msi_filename}") + os.makedirs(os.path.join(desktop_dir, "dist"), exist_ok=True) + os.rename( + os.path.join(desktop_dir, "build", "OnionShare.msi"), + final_msi_filename, + ) + if __name__ == "__main__": main() diff --git a/desktop/package/license.rtf b/desktop/package/license.rtf new file mode 100644 index 00000000..88139265 --- /dev/null +++ b/desktop/package/license.rtf @@ -0,0 +1,136 @@ +{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fswiss\fcharset0 Helvetica;}{\f1\fswiss Helvetica;}{\f2\fnil Courier;}} +{\colortbl ;\red0\green0\blue255;} +{\*\generator Riched20 10.0.19041}\viewkind4\uc1 +\pard\sa180\b\f0\fs28\lang1033 OnionShare is free and open source software and developed by Micah Lee.\f1\lang9\par +GNU GENERAL PUBLIC LICENSE\par +\b0\fs24 Version 3, 29 June 2007\par +Copyright \f0\'a9 2007 Free Software Foundation, Inc. <{{\field{\*\fldinst{HYPERLINK "https://fsf.org/"}}{\fldrslt{https://fsf.org/\ul0\cf0}}}}\f0\fs24 >\par +\f1 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par +\b\fs28 Preamble\par +\b0\fs24 The GNU General Public License is a free, copyleft license for software and other kinds of works.\par +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.\par +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things.\par +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others.\par +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.\par +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it.\par +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions.\par +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users.\par +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free.\par +The precise terms and conditions for copying, distribution and modification follow.\par +\b\fs28 TERMS AND CONDITIONS\par +\fs24 0. Definitions.\par +\b0\ldblquote This License\rdblquote refers to version 3 of the GNU General Public License.\par +\ldblquote Copyright\rdblquote also means copyright-like laws that apply to other kinds of works, such as semiconductor masks.\par +\ldblquote The Program\rdblquote refers to any copyrightable work licensed under this License. Each licensee is addressed as \ldblquote you\rdblquote . \ldblquote Licensees\rdblquote and \ldblquote recipients\rdblquote may be individuals or organizations.\par +To \ldblquote modify\rdblquote a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a \ldblquote modified version\rdblquote of the earlier work or a work \ldblquote based on\rdblquote the earlier work.\par +A \ldblquote covered work\rdblquote means either the unmodified Program or a work based on the Program.\par +To \ldblquote propagate\rdblquote a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well.\par +To \ldblquote convey\rdblquote a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying.\par +An interactive user interface displays \ldblquote Appropriate Legal Notices\rdblquote to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion.\par +\b 1. Source Code.\par +\b0 The \ldblquote source code\rdblquote for a work means the preferred form of the work for making modifications to it. \ldblquote Object code\rdblquote means any non-source form of a work.\par +A \ldblquote Standard Interface\rdblquote means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language.\par +The \ldblquote System Libraries\rdblquote of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A \ldblquote Major Component\rdblquote , in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it.\par +The \ldblquote Corresponding Source\rdblquote for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work.\par +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source.\par +The Corresponding Source for a work in source code form is that same work.\par +\b 2. Basic Permissions.\par +\b0 All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law.\par +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you.\par +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary.\par +\b 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\par +\b0 No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures.\par +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures.\par +\b 4. Conveying Verbatim Copies.\par +\b0 You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program.\par +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee.\par +\b 5. Conveying Modified Source Versions.\par +\b0 You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions:\par + +\pard\fi-360\li360\tx360\bullet\tab a) The work must carry prominent notices stating that you modified it, and giving a relevant date.\par +\bullet\tab b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to \ldblquote keep intact all notices\rdblquote .\par +\bullet\tab c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it.\par + +\pard\fi-360\li360\sa180\tx360\bullet\tab d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so.\par + +\pard\sa180 A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an \ldblquote aggregate\rdblquote if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate.\par +\b 6. Conveying Non-Source Forms.\par +\b0 You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways:\par + +\pard\fi-360\li360\tx360\bullet\tab a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange.\par +\bullet\tab b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge.\par +\bullet\tab c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b.\par +\bullet\tab d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements.\par + +\pard\fi-360\li360\sa180\tx360\bullet\tab e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d.\par + +\pard\sa180 A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work.\par +A \ldblquote User Product\rdblquote is either (1) a \ldblquote consumer product\rdblquote , which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, \ldblquote normally used\rdblquote refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product.\par +\ldblquote Installation Information\rdblquote for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made.\par +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM).\par +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network.\par +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying.\par +\b 7. Additional Terms.\par +\b0\ldblquote Additional permissions\rdblquote are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions.\par +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission.\par +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms:\par + +\pard\fi-360\li360\tx360\bullet\tab a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or\par +\bullet\tab b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or\par +\bullet\tab c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or\par +\bullet\tab d) Limiting the use for publicity purposes of names of licensors or authors of the material; or\par +\bullet\tab e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or\par + +\pard\fi-360\li360\sa180\tx360\bullet\tab f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors.\par + +\pard\sa180 All other non-permissive additional terms are considered \ldblquote further restrictions\rdblquote within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying.\par +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms.\par +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way.\par +\b 8. Termination.\par +\b0 You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11).\par +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.\par +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.\par +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10.\par +\b 9. Acceptance Not Required for Having Copies.\par +\b0 You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so.\par +\b 10. Automatic Licensing of Downstream Recipients.\par +\b0 Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License.\par +An \ldblquote entity transaction\rdblquote is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts.\par +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it.\par +\b 11. Patents.\par +\b0 A \ldblquote contributor\rdblquote is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's \ldblquote contributor version\rdblquote .\par +A contributor's \ldblquote essential patent claims\rdblquote are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, \ldblquote control\rdblquote includes the right to grant patent sublicenses in a manner consistent with the requirements of this License.\par +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version.\par +In the following three paragraphs, a \ldblquote patent license\rdblquote is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To \ldblquote grant\rdblquote such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party.\par +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. \ldblquote Knowingly relying\rdblquote means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid.\par +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it.\par +A patent license is \ldblquote discriminatory\rdblquote if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007.\par +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law.\par +\b 12. No Surrender of Others' Freedom.\par +\b0 If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program.\par +\b 13. Use with the GNU Affero General Public License.\par +\b0 Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such.\par +\b 14. Revised Versions of this License.\par +\b0 The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.\par +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License \ldblquote or any later version\rdblquote applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation.\par +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program.\par +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version.\par +\b 15. Disclaimer of Warranty.\par +\b0 THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \ldblquote AS IS\rdblquote WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\par +\b 16. Limitation of Liability.\par +\b0 IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\par +\b 17. Interpretation of Sections 15 and 16.\par +\b0 If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee.\par +END OF TERMS AND CONDITIONS\par +\b\fs28 How to Apply These Terms to Your New Programs\par +\b0\fs24 If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.\par +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the \ldblquote copyright\rdblquote line and a pointer to where the full notice is found.\par +\f2 \line Copyright (C) \line\line This program is free software: you can redistribute it and/or modify\line it under the terms of the GNU General Public License as published by\line the Free Software Foundation, either version 3 of the License, or\line (at your option) any later version.\line\line This program is distributed in the hope that it will be useful,\line but WITHOUT ANY WARRANTY; without even the implied warranty of\line MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\line GNU General Public License for more details.\line\line You should have received a copy of the GNU General Public License\line along with this program. If not, see <{{\field{\*\fldinst{HYPERLINK "https://www.gnu.org/licenses/"}}{\fldrslt{https://www.gnu.org/licenses/\ul0\cf0}}}}\f2\fs24 >.\par +\f1 Also add information on how to contact you by electronic and paper mail.\par +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode:\par +\f2 Copyright (C) \line This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\line This is free software, and you are welcome to redistribute it\line under certain conditions; type `show c' for details.\par +\f1 The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an \ldblquote about box\rdblquote .\par +You should also get your employer (if you work as a programmer) or school, if any, to sign a \ldblquote copyright disclaimer\rdblquote for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <{{\field{\*\fldinst{HYPERLINK "https://www.gnu.org/licenses/"}}{\fldrslt{https://www.gnu.org/licenses/\ul0\cf0}}}}\f1\fs24 >.\par +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <{{\field{\*\fldinst{HYPERLINK "https://www.gnu.org/licenses/why-not-lgpl.html"}}{\fldrslt{https://www.gnu.org/licenses/why-not-lgpl.html\ul0\cf0}}}}\f1\fs24 >.\par +} + \ No newline at end of file diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index b264af80..14b05a7e 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -114,8 +114,7 @@ include_files = [(os.path.join("..", "LICENSE"), "LICENSE")] if platform.system() == "Windows": include_msvcr = True - # gui_base = "Win32GUI" - gui_base = None + gui_base = "Win32GUI" exec_icon = os.path.join("onionshare", "resources", "onionshare.ico") elif platform.system() == "Darwin": -- cgit v1.2.3-54-g00ecf From 4950dfc2464d0e2f1fb2573ace1dfe8c6745f7d1 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 13 Jan 2022 10:18:56 -0800 Subject: Change text in Windows installer license, add background image to installer --- desktop/package/build-windows.py | 12 ++++++------ desktop/package/dialog.bmp | Bin 0 -> 615402 bytes desktop/package/license.rtf | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 desktop/package/dialog.bmp diff --git a/desktop/package/build-windows.py b/desktop/package/build-windows.py index c56d731d..9984dd4f 100644 --- a/desktop/package/build-windows.py +++ b/desktop/package/build-windows.py @@ -522,12 +522,12 @@ def main(): Id="WixUILicenseRtf", Value="..\\package\\license.rtf", ) - # ET.SubElement( - # product_el, - # "WixVariable", - # Id="WixUIDialogBmp", - # Value="..\\package\\dialog.bmp", - # ) + ET.SubElement( + product_el, + "WixVariable", + Id="WixUIDialogBmp", + Value="..\\package\\dialog.bmp", + ) ET.SubElement( product_el, "MajorUpgrade", diff --git a/desktop/package/dialog.bmp b/desktop/package/dialog.bmp new file mode 100644 index 00000000..02576827 Binary files /dev/null and b/desktop/package/dialog.bmp differ diff --git a/desktop/package/license.rtf b/desktop/package/license.rtf index 88139265..3238a64c 100644 --- a/desktop/package/license.rtf +++ b/desktop/package/license.rtf @@ -1,8 +1,8 @@ -{\rtf1\ansi\deff0\nouicompat{\fonttbl{\f0\fswiss\fcharset0 Helvetica;}{\f1\fswiss Helvetica;}{\f2\fnil Courier;}} +{\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fswiss\fcharset0 Helvetica;}{\f1\fswiss Helvetica;}{\f2\fnil Courier;}} {\colortbl ;\red0\green0\blue255;} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 -\pard\sa180\b\f0\fs28\lang1033 OnionShare is free and open source software and developed by Micah Lee.\f1\lang9\par -GNU GENERAL PUBLIC LICENSE\par +\pard\sa180\b\f0\fs24\lang1033 OnionShare is free and open source software and developed by Micah Lee, et al. and licensed GPLv3.\f1\lang9\par +\fs28 GNU GENERAL PUBLIC LICENSE\par \b0\fs24 Version 3, 29 June 2007\par Copyright \f0\'a9 2007 Free Software Foundation, Inc. <{{\field{\*\fldinst{HYPERLINK "https://fsf.org/"}}{\fldrslt{https://fsf.org/\ul0\cf0}}}}\f0\fs24 >\par \f1 Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.\par -- cgit v1.2.3-54-g00ecf From 78e8c4fa3651cc60bdcb2660e8c5b5b4509b4767 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 13 Jan 2022 10:24:37 -0800 Subject: One more license tweak --- desktop/package/license.rtf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/package/license.rtf b/desktop/package/license.rtf index 3238a64c..d9385a66 100644 --- a/desktop/package/license.rtf +++ b/desktop/package/license.rtf @@ -1,7 +1,7 @@ {\rtf1\ansi\ansicpg1252\deff0\nouicompat{\fonttbl{\f0\fswiss\fcharset0 Helvetica;}{\f1\fswiss Helvetica;}{\f2\fnil Courier;}} {\colortbl ;\red0\green0\blue255;} {\*\generator Riched20 10.0.19041}\viewkind4\uc1 -\pard\sa180\b\f0\fs24\lang1033 OnionShare is free and open source software and developed by Micah Lee, et al. and licensed GPLv3.\f1\lang9\par +\pard\sa180\b\f0\fs24\lang1033 OnionShare is free and open source software and is developed by Micah Lee, et al.\f1\lang9\par \fs28 GNU GENERAL PUBLIC LICENSE\par \b0\fs24 Version 3, 29 June 2007\par Copyright \f0\'a9 2007 Free Software Foundation, Inc. <{{\field{\*\fldinst{HYPERLINK "https://fsf.org/"}}{\fldrslt{https://fsf.org/\ul0\cf0}}}}\f0\fs24 >\par -- cgit v1.2.3-54-g00ecf From fde9ac5628db0f809f1de9e27e58b4400d517b30 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 13 Jan 2022 15:13:03 -0800 Subject: Finish packaging and code signing for Mac --- RELEASE.md | 10 +- desktop/package/build-mac.py | 291 +++++++++++++++++++++++++++++++++++++++++++ desktop/setup-freeze.py | 5 +- 3 files changed, 297 insertions(+), 9 deletions(-) create mode 100755 desktop/package/build-mac.py diff --git a/RELEASE.md b/RELEASE.md index 209b611b..23e033f0 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -121,18 +121,18 @@ Set up the development environment described in `README.md`. Then build an executable, make it a macOS app bundle, and package it in a dmg: ```sh -poetry run python setup-freeze.py bdist_dmg +poetry run ./package/build-mac.py ``` -The will create `build/OnionShare.dmg`. +The will create `dist/OnionShare-$VERSION.dmg`. Now, notarize the release. You must have an app-specific Apple ID password saved in the login keychain called `onionshare-notarize`. -- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "com.micahflee.onionshare" -u "micah@micahflee.com" -p "@keychain:onionshare-notarize" --file build/OnionShare.dmg` +- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "com.micahflee.onionshare" -u "micah@micahflee.com" -p "@keychain:onionshare-notarize" --file dist/OnionShare-$VERSION.dmg` - Wait for it to get approved, check status with: `xcrun altool --notarization-history 0 -u "micah@micahflee.com" -p "@keychain:onionshare-notarize"` -- After it's approved, staple the ticket: `xcrun stapler staple build/OnionShare.dmg` +- After it's approved, staple the ticket: `xcrun stapler staple dist/OnionShare-$VERSION.dmg` -This will create `desktop/build/OnionShare.dmg`, signed and notarized. +This will create `desktop/dist/OnionShare-$VERSION.dmg`, signed and notarized. ## Source package diff --git a/desktop/package/build-mac.py b/desktop/package/build-mac.py new file mode 100755 index 00000000..7d08e9b3 --- /dev/null +++ b/desktop/package/build-mac.py @@ -0,0 +1,291 @@ +#!/usr/bin/env python3 +import os +import inspect +import subprocess +import shutil +import itertools +import glob + +root = os.path.dirname( + os.path.dirname( + os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) + ) +) + + +def run(cmd, cwd=None, error_ok=False): + print(cmd) + subprocess.run(cmd, cwd=cwd, check=True) + + +def get_size(dir): + size = 0 + for path, dirs, files in os.walk(dir): + for f in files: + fp = os.path.join(path, f) + size += os.path.getsize(fp) + return size + + +def codesign(path, entitlements, identity): + run( + [ + "codesign", + "--sign", + identity, + "--entitlements", + str(entitlements), + "--timestamp", + "--deep", + str(path), + "--force", + "--options", + "runtime,library", + ] + ) + + +def main(): + desktop_dir = os.path.join(root, "desktop") + + print("○ Clean up from last build") + if os.path.exists(os.path.join(desktop_dir, "build")): + shutil.rmtree(os.path.join(desktop_dir, "build")) + if os.path.exists(os.path.join(desktop_dir, "dist")): + shutil.rmtree(os.path.join(desktop_dir, "dist")) + + print("○ Building binaries") + run( + [ + shutil.which("python"), + "setup-freeze.py", + "bdist_mac", + ], + desktop_dir, + ) + before_size = get_size( + os.path.join(desktop_dir, "build", "OnionShare.app") + ) + + print("○ Delete unused PySide2 stuff to save space") + for dirname in [ + "PySide2/Designer.app", + "PySide2/examples", + "PySide2/glue", + "PySide2/Qt/qml", + "shiboken2/files.dir", + ]: + shutil.rmtree( + os.path.join( + desktop_dir, + "build", + "OnionShare.app", + "Contents", + "MacOS", + "lib", + dirname, + ) + ) + shutil.rmtree( + os.path.join( + desktop_dir, + "build", + "OnionShare.app", + "Contents", + "MacOS", + "lib", + "shiboken2", + "docs", + ) + ) + for framework in [ + "Qt3DAnimation", + "Qt3DCore", + "Qt3DExtras", + "Qt3DInput", + "Qt3DLogic", + "Qt3DQuick", + "Qt3DQuickAnimation", + "Qt3DQuickExtras", + "Qt3DQuickInput", + "Qt3DQuickRender", + "Qt3DQuickScene2D", + "Qt3DRender", + "QtBluetooth", + "QtBodymovin", + "QtCharts", + "QtConcurrent", + "QtDataVisualization", + "QtDesigner", + "QtDesignerComponents", + "QtGamepad", + "QtHelp", + "QtLocation", + "QtMultimedia", + "QtMultimediaQuick", + "QtMultimediaWidgets", + "QtNfc", + "QtOpenGL", + "QtPdf", + "QtPdfWidgets", + "QtPositioning", + "QtPositioningQuick", + "QtPurchasing", + "QtQml", + "QtQuick", + "QtQuick3D", + "QtQuick3DAssetImport", + "QtQuick3DRender", + "QtQuick3DRuntimeRender", + "QtQuick3DUtils", + "QtQuickControls2", + "QtQuickParticles", + "QtQuickShapes", + "QtQuickTemplates2", + "QtQuickTest", + "QtQuickWidgets", + "QtRemoteObjects", + "QtRepParser", + "QtScript", + "QtScriptTools", + "QtScxml", + "QtSensors", + "QtSerialBus", + "QtSerialPort", + "QtSql", + "QtSvg", + "QtTest", + "QtTextToSpeech", + "QtUiPlugin", + "QtVirtualKeyboard", + "QtWebChannel", + "QtWebEngine", + "QtWebEngineCore", + "QtWebEngineWidgets", + "QtWebSockets", + "QtWebView", + "QtXml", + "QtXmlPatterns", + ]: + shutil.rmtree( + os.path.join( + desktop_dir, + "build", + "OnionShare.app", + "Contents", + "MacOS", + "lib", + "PySide2", + "Qt", + "lib", + f"{framework}.framework", + ) + ) + try: + os.remove( + os.path.join( + desktop_dir, + "build", + "OnionShare.app", + "Contents", + "MacOS", + "lib", + "PySide2", + f"{framework}.abi3.so", + ) + ) + os.remove( + os.path.join( + desktop_dir, + "build", + "OnionShare.app", + "Contents", + "MacOS", + "lib", + "PySide2", + f"{framework}.pyi", + ) + ) + except FileNotFoundError: + pass + + after_size = get_size( + os.path.join(desktop_dir, "build", "OnionShare.app") + ) + freed_bytes = before_size - after_size + freed_mb = int(freed_bytes / 1024 / 1024) + print(f"○ Freed {freed_mb} mb") + + print("○ Sign app bundle") + identity_name_application = "Developer ID Application: Micah Lee (N9B95FDWH4)" + entitlements_plist_path = os.path.join(desktop_dir, "package", "Entitlements.plist") + + for path in itertools.chain( + glob.glob( + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/**/*.dylib", + recursive=True, + ), + glob.glob( + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/**/*.so", recursive=True + ), + [ + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/pyside2-lupdate", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/rcc", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/uic", + ], + ): + codesign(path, entitlements_plist_path, identity_name_application) + codesign( + f"{desktop_dir}/build/OnionShare.app", + entitlements_plist_path, + identity_name_application, + ) + print(f"○ Signed app bundle: {desktop_dir}/build/OnionShare.app") + + if not os.path.exists("/usr/local/bin/create-dmg"): + print("○ Error: create-dmg is not installed") + return + + print("○ Create DMG") + version_filename = os.path.join( + root, "cli", "onionshare_cli", "resources", "version.txt" + ) + with open(version_filename) as f: + version = f.read().strip() + + os.makedirs(os.path.join(desktop_dir, "dist"), exist_ok=True) + dmg_path = os.path.join(desktop_dir, "dist", f"OnionShare-{version}.dmg") + run( + [ + "create-dmg", + "--volname", + "OnionShare", + "--volicon", + os.path.join( + desktop_dir, "onionshare", "resources", "onionshare.icns" + ), + "--window-size", + "400", + "200", + "--icon-size", + "100", + "--icon", + "OnionShare.app", + "100", + "70", + "--hide-extension", + "OnionShare.app", + "--app-drop-link", + "300", + "70", + dmg_path, + f"{desktop_dir}/build/OnionShare.app", + "--identity", + identity_name_application, + ] + ) + + print(f"○ Finished building DMG: {dmg_path}") + +if __name__ == "__main__": + main() diff --git a/desktop/setup-freeze.py b/desktop/setup-freeze.py index 14b05a7e..6026a9cd 100644 --- a/desktop/setup-freeze.py +++ b/desktop/setup-freeze.py @@ -214,10 +214,7 @@ setup( # bdist_mac, making the macOS app bundle "bdist_mac": { "iconfile": os.path.join("onionshare", "resources", "onionshare.icns"), - "bundle_name": "OnionShare", - "codesign_identity": "Developer ID Application: Micah Lee (N9B95FDWH4)", - "codesign_entitlements": os.path.join("package", "Entitlements.plist"), - "codesign_deep": True, + "bundle_name": "OnionShare" }, }, executables=[ -- cgit v1.2.3-54-g00ecf From 7b975b86fbc310728227fcb771ae0b9f618befe4 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Thu, 13 Jan 2022 16:07:26 -0800 Subject: Closer, but notarization fails --- desktop/package/build-mac.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/desktop/package/build-mac.py b/desktop/package/build-mac.py index 7d08e9b3..430f5cb6 100755 --- a/desktop/package/build-mac.py +++ b/desktop/package/build-mac.py @@ -40,7 +40,7 @@ def codesign(path, entitlements, identity): str(path), "--force", "--options", - "runtime,library", + "runtime", ] ) @@ -124,14 +124,19 @@ def main(): "QtMultimedia", "QtMultimediaQuick", "QtMultimediaWidgets", + "QtNetwork", + "QtNetworkAuth", "QtNfc", "QtOpenGL", "QtPdf", "QtPdfWidgets", "QtPositioning", "QtPositioningQuick", + "QtPrintSupport", "QtPurchasing", "QtQml", + "QtQmlModels", + "QtQmlWorkerScript", "QtQuick", "QtQuick3D", "QtQuick3DAssetImport", @@ -229,6 +234,13 @@ def main(): f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/**/*.so", recursive=True ), [ + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/onionshare", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/onionshare-cli", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtCore.framework/Versions/5/QtCore", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtDBus.framework/Versions/5/QtDBus", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtGui.framework/Versions/5/QtGui", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras", + f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtWidgets.framework/Versions/5/QtWidgets", f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/pyside2-lupdate", f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/rcc", f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/uic", -- cgit v1.2.3-54-g00ecf From eed494814ab8080384fe71fb76fcaa0e757732f1 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 16 Jan 2022 11:25:15 -0800 Subject: Completely rework the Mac app bundle so that it can get notarized --- desktop/package/build-mac.py | 225 ++++++++++++++++++++++--------------------- 1 file changed, 115 insertions(+), 110 deletions(-) diff --git a/desktop/package/build-mac.py b/desktop/package/build-mac.py index 430f5cb6..eefbd77b 100755 --- a/desktop/package/build-mac.py +++ b/desktop/package/build-mac.py @@ -14,7 +14,7 @@ root = os.path.dirname( def run(cmd, cwd=None, error_ok=False): - print(cmd) + print(f"{cmd} # cwd={cwd}") subprocess.run(cmd, cwd=cwd, check=True) @@ -37,22 +37,23 @@ def codesign(path, entitlements, identity): str(entitlements), "--timestamp", "--deep", - str(path), "--force", "--options", - "runtime", + "runtime,library", + str(path), ] ) def main(): - desktop_dir = os.path.join(root, "desktop") + desktop_dir = f"{root}/desktop" + app_dir = f"{desktop_dir}/build/OnionShare.app" print("○ Clean up from last build") - if os.path.exists(os.path.join(desktop_dir, "build")): - shutil.rmtree(os.path.join(desktop_dir, "build")) - if os.path.exists(os.path.join(desktop_dir, "dist")): - shutil.rmtree(os.path.join(desktop_dir, "dist")) + if os.path.exists(f"{desktop_dir}/build"): + shutil.rmtree(f"{desktop_dir}/build") + if os.path.exists(f"{desktop_dir}/dist"): + shutil.rmtree(f"{desktop_dir}/dist") print("○ Building binaries") run( @@ -63,41 +64,9 @@ def main(): ], desktop_dir, ) - before_size = get_size( - os.path.join(desktop_dir, "build", "OnionShare.app") - ) + before_size = get_size(f"{app_dir}") - print("○ Delete unused PySide2 stuff to save space") - for dirname in [ - "PySide2/Designer.app", - "PySide2/examples", - "PySide2/glue", - "PySide2/Qt/qml", - "shiboken2/files.dir", - ]: - shutil.rmtree( - os.path.join( - desktop_dir, - "build", - "OnionShare.app", - "Contents", - "MacOS", - "lib", - dirname, - ) - ) - shutil.rmtree( - os.path.join( - desktop_dir, - "build", - "OnionShare.app", - "Contents", - "MacOS", - "lib", - "shiboken2", - "docs", - ) - ) + print("○ Delete unused Qt Frameworks") for framework in [ "Qt3DAnimation", "Qt3DCore", @@ -173,109 +142,144 @@ def main(): "QtXmlPatterns", ]: shutil.rmtree( - os.path.join( - desktop_dir, - "build", - "OnionShare.app", - "Contents", - "MacOS", - "lib", - "PySide2", - "Qt", - "lib", - f"{framework}.framework", - ) + f"{app_dir}/Contents/MacOS/lib/PySide2/Qt/lib/{framework}.framework" ) try: os.remove( - os.path.join( - desktop_dir, - "build", - "OnionShare.app", - "Contents", - "MacOS", - "lib", - "PySide2", - f"{framework}.abi3.so", - ) + f"{app_dir}/Contents/MacOS/lib/PySide2/{framework}.abi3.so" ) os.remove( - os.path.join( - desktop_dir, - "build", - "OnionShare.app", - "Contents", - "MacOS", - "lib", - "PySide2", - f"{framework}.pyi", - ) + f"{app_dir}/Contents/MacOS/lib/PySide2/{framework}.pyi" ) except FileNotFoundError: pass - after_size = get_size( - os.path.join(desktop_dir, "build", "OnionShare.app") + print("○ Move files around so Apple will notarize") + # https://github.com/marcelotduarte/cx_Freeze/issues/594 + # https://gist.github.com/TechnicalPirate/259a9c24878fcad948452cb148af2a2c#file-custom_bdist_mac-py-L415 + + # Move lib from MacOS into Resources + os.rename( + f"{app_dir}/Contents/MacOS/lib", + f"{app_dir}/Contents/Resources/lib", + ) + run( + ["ln", "-s", "../Resources/lib"], + cwd=f"{app_dir}/Contents/MacOS", ) + + # Move frameworks from Resources/lib into Frameworks + os.makedirs(f"{app_dir}/Contents/Frameworks", exist_ok=True) + for framework_filename in glob.glob( + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/lib/Qt*.framework" + ): + basename = os.path.basename(framework_filename) + + os.rename(framework_filename, f"{app_dir}/Contents/Frameworks/{basename}") + run( + ["ln", "-s", f"../../../../../Frameworks/{basename}"], + cwd=f"{app_dir}/Contents/Resources/lib/PySide2/Qt/lib", + ) + if os.path.exists(f"{app_dir}/Contents/Frameworks/{basename}/Resources"): + os.rename( + f"{app_dir}/Contents/Frameworks/{basename}/Resources", + f"{app_dir}/Contents/Frameworks/{basename}/Versions/5/Resources" + ) + run( + ["ln", "-s", "Versions/5/Resources"], + cwd=f"{app_dir}/Contents/Frameworks/{basename}", + ) + + run( + ["ln", "-s", "5", "Current"], + cwd=f"{app_dir}/Contents/Frameworks/{basename}/Versions", + ) + + # Move Qt plugins + os.rename( + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/plugins", + f"{app_dir}/Contents/Frameworks/plugins", + ) + run( + ["ln", "-s", "../../../../Frameworks/plugins"], + cwd=f"{app_dir}/Contents/Resources/lib/PySide2/Qt", + ) + + print("○ Delete more unused PySide2 stuff to save space") + for filename in [ + "PySide2/Designer.app", + "PySide2/examples", + "PySide2/glue", + "PySide2/include", + "PySide2/pyside2-lupdate", + "PySide2/Qt/qml", + "PySide2/libpyside2.abi3.5.15.dylib", + "PySide2/Qt/lib/QtRepParser.framework", + "PySide2/Qt/lib/QtUiPlugin.framework", + "PySide2/Qt/lib/QtWebEngineCore.framework/Helpers", + "shiboken2/libshiboken2.abi3.5.15.dylib", + "shiboken2/docs", + "PySide2/rcc", + "PySide2/uic", + ]: + if os.path.isdir(filename): + shutil.rmtree( + f"{app_dir}/Contents/Resources/lib/{filename}" + ) + elif os.path.isfile(filename): + os.remove( + f"{app_dir}/Contents/Resources/lib/{filename}" + ) + + after_size = get_size(f"{app_dir}") freed_bytes = before_size - after_size freed_mb = int(freed_bytes / 1024 / 1024) print(f"○ Freed {freed_mb} mb") print("○ Sign app bundle") identity_name_application = "Developer ID Application: Micah Lee (N9B95FDWH4)" - entitlements_plist_path = os.path.join(desktop_dir, "package", "Entitlements.plist") + entitlements_plist_path = f"{desktop_dir}/package/Entitlements.plist" for path in itertools.chain( - glob.glob( - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/**/*.dylib", - recursive=True, - ), - glob.glob( - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/**/*.so", recursive=True - ), + glob.glob(f"{app_dir}/Contents/Resources/lib/**/*.so", recursive=True), [ - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/onionshare", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/onionshare-cli", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtCore.framework/Versions/5/QtCore", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtDBus.framework/Versions/5/QtDBus", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtGui.framework/Versions/5/QtGui", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/Qt/lib/QtWidgets.framework/Versions/5/QtWidgets", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/pyside2-lupdate", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/rcc", - f"{desktop_dir}/build/OnionShare.app/Contents/MacOS/lib/PySide2/uic", + f"{app_dir}/Contents/Frameworks/QtCore.framework/Versions/5/QtCore", + f"{app_dir}/Contents/Frameworks/QtDBus.framework/Versions/5/QtDBus", + f"{app_dir}/Contents/Frameworks/QtGui.framework/Versions/5/QtGui", + f"{app_dir}/Contents/Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras", + f"{app_dir}/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets", + f"{app_dir}/Contents/Resources/lib/Python", + f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/meek-client", + f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/obfs4proxy", + f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/snowflake-client", + f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/tor", + f"{app_dir}/Contents/MacOS/onionshare", + f"{app_dir}/Contents/MacOS/onionshare-cli", + f"{app_dir}", ], ): codesign(path, entitlements_plist_path, identity_name_application) - codesign( - f"{desktop_dir}/build/OnionShare.app", - entitlements_plist_path, - identity_name_application, - ) - print(f"○ Signed app bundle: {desktop_dir}/build/OnionShare.app") + + print(f"○ Signed app bundle: {app_dir}") if not os.path.exists("/usr/local/bin/create-dmg"): print("○ Error: create-dmg is not installed") return print("○ Create DMG") - version_filename = os.path.join( - root, "cli", "onionshare_cli", "resources", "version.txt" - ) + version_filename = f"{root}/cli/onionshare_cli/resources/version.txt" with open(version_filename) as f: version = f.read().strip() - - os.makedirs(os.path.join(desktop_dir, "dist"), exist_ok=True) - dmg_path = os.path.join(desktop_dir, "dist", f"OnionShare-{version}.dmg") + + os.makedirs(f"{desktop_dir}/dist", exist_ok=True) + dmg_path = f"{desktop_dir}/dist/OnionShare-{version}.dmg" run( [ "create-dmg", "--volname", "OnionShare", "--volicon", - os.path.join( - desktop_dir, "onionshare", "resources", "onionshare.icns" - ), + f"{desktop_dir}/onionshare/resources/onionshare.icns", "--window-size", "400", "200", @@ -291,7 +295,7 @@ def main(): "300", "70", dmg_path, - f"{desktop_dir}/build/OnionShare.app", + f"{app_dir}", "--identity", identity_name_application, ] @@ -299,5 +303,6 @@ def main(): print(f"○ Finished building DMG: {dmg_path}") + if __name__ == "__main__": main() -- cgit v1.2.3-54-g00ecf From c8745cd8dcfb04728efd22b856df9da429f7f988 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 16 Jan 2022 11:44:30 -0800 Subject: Also codesign libevent-2.1.7.dylib --- cli/onionshare_cli/onion.py | 4 ++++ desktop/package/build-mac.py | 1 + 2 files changed, 5 insertions(+) diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py index ba9e2e77..76deea80 100644 --- a/cli/onionshare_cli/onion.py +++ b/cli/onionshare_cli/onion.py @@ -414,6 +414,10 @@ class Onion(object): self.common.log("Onion", "connect", f"tor pid: {self.tor_proc.pid}") time.sleep(2) + return_code = self.tor_proc.poll() + if return_code != None: + self.common.log("Onion", "connect", f"tor process has terminated early: {return_code}") + # Connect to the controller self.common.log("Onion", "connect", "authenticating to tor controller") try: diff --git a/desktop/package/build-mac.py b/desktop/package/build-mac.py index eefbd77b..49deda68 100755 --- a/desktop/package/build-mac.py +++ b/desktop/package/build-mac.py @@ -253,6 +253,7 @@ def main(): f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/obfs4proxy", f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/snowflake-client", f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/tor", + f"{app_dir}/Contents/Resources/lib/onionshare/resources/tor/libevent-2.1.7.dylib", f"{app_dir}/Contents/MacOS/onionshare", f"{app_dir}/Contents/MacOS/onionshare-cli", f"{app_dir}", -- cgit v1.2.3-54-g00ecf From c8385a3416e37b3555aa29777c7f9df06b53ad71 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 16 Jan 2022 13:25:05 -0800 Subject: Codesign .dylib files too, and properly delete unused PySide2 files --- desktop/package/build-mac.py | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/desktop/package/build-mac.py b/desktop/package/build-mac.py index 49deda68..9d2a0dfd 100755 --- a/desktop/package/build-mac.py +++ b/desktop/package/build-mac.py @@ -207,29 +207,27 @@ def main(): print("○ Delete more unused PySide2 stuff to save space") for filename in [ - "PySide2/Designer.app", - "PySide2/examples", - "PySide2/glue", - "PySide2/include", - "PySide2/pyside2-lupdate", - "PySide2/Qt/qml", - "PySide2/libpyside2.abi3.5.15.dylib", - "PySide2/Qt/lib/QtRepParser.framework", - "PySide2/Qt/lib/QtUiPlugin.framework", - "PySide2/Qt/lib/QtWebEngineCore.framework/Helpers", - "shiboken2/libshiboken2.abi3.5.15.dylib", - "shiboken2/docs", - "PySide2/rcc", - "PySide2/uic", + f"{app_dir}/Contents/Resources/lib/PySide2/Designer.app", + f"{app_dir}/Contents/Resources/lib/PySide2/examples", + f"{app_dir}/Contents/Resources/lib/PySide2/glue", + f"{app_dir}/Contents/Resources/lib/PySide2/include", + f"{app_dir}/Contents/Resources/lib/PySide2/pyside2-lupdate", + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/qml", + f"{app_dir}/Contents/Resources/lib/PySide2/libpyside2.abi3.5.15.dylib", + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/lib/QtRepParser.framework", + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/lib/QtUiPlugin.framework", + f"{app_dir}/Contents/Resources/lib/PySide2/Qt/lib/QtWebEngineCore.framework/Helpers", + f"{app_dir}/Contents/Resources/lib/shiboken2/libshiboken2.abi3.5.15.dylib", + f"{app_dir}/Contents/Resources/lib/shiboken2/docs", + f"{app_dir}/Contents/Resources/lib/PySide2/rcc", + f"{app_dir}/Contents/Resources/lib/PySide2/uic", ]: if os.path.isdir(filename): - shutil.rmtree( - f"{app_dir}/Contents/Resources/lib/{filename}" - ) + shutil.rmtree(filename) elif os.path.isfile(filename): - os.remove( - f"{app_dir}/Contents/Resources/lib/{filename}" - ) + os.remove(filename) + else: + print(f"Cannot delete, filename not found: {filename}") after_size = get_size(f"{app_dir}") freed_bytes = before_size - after_size @@ -242,6 +240,7 @@ def main(): for path in itertools.chain( glob.glob(f"{app_dir}/Contents/Resources/lib/**/*.so", recursive=True), + glob.glob(f"{app_dir}/Contents/Resources/lib/**/*.dylib", recursive=True), [ f"{app_dir}/Contents/Frameworks/QtCore.framework/Versions/5/QtCore", f"{app_dir}/Contents/Frameworks/QtDBus.framework/Versions/5/QtDBus", -- cgit v1.2.3-54-g00ecf From 81fc7d67f592ea7047bd495a76b08341a2e0a06f Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Sun, 16 Jan 2022 14:19:30 -0800 Subject: Update docs poetry deps --- docs/poetry.lock | 407 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 243 insertions(+), 164 deletions(-) diff --git a/docs/poetry.lock b/docs/poetry.lock index 3bc4f44a..50625b81 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -16,7 +16,7 @@ python-versions = ">=3.5" [[package]] name = "babel" -version = "2.9.0" +version = "2.9.1" description = "Internationalization utilities" category = "main" optional = false @@ -27,27 +27,34 @@ pytz = ">=2015.7" [[package]] name = "certifi" -version = "2020.11.8" +version = "2021.10.8" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = "*" [[package]] -name = "chardet" -version = "3.0.4" -description = "Universal encoding detector for Python 2 and 3" +name = "charset-normalizer" +version = "2.0.10" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.5.0" + +[package.extras] +unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "7.1.2" +version = "8.0.3" description = "Composable command line interface toolkit" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [[package]] name = "colorama" @@ -101,7 +108,7 @@ http2 = ["h2 (>=3,<5)"] [[package]] name = "httpx" -version = "0.18.1" +version = "0.18.2" description = "The next generation HTTP client." category = "main" optional = false @@ -110,7 +117,7 @@ python-versions = ">=3.6" [package.dependencies] async-generator = {version = "*", markers = "python_version < \"3.7\""} certifi = "*" -httpcore = ">=0.13.0,<0.14.0" +httpcore = ">=0.13.3,<0.14.0" rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]} sniffio = "*" @@ -120,15 +127,15 @@ http2 = ["h2 (>=3.0.0,<4.0.0)"] [[package]] name = "idna" -version = "2.10" +version = "3.3" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.5" [[package]] name = "imagesize" -version = "1.2.0" +version = "1.3.0" description = "Getting image size from png/jpeg/jpeg2000/gif file" category = "main" optional = false @@ -136,52 +143,71 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "immutables" -version = "0.15" +version = "0.16" description = "Immutable Collections" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.8\""} [package.extras] -test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)"] +test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)", "mypy (>=0.910)", "pytest (>=6.2.4,<6.3.0)"] + +[[package]] +name = "importlib-metadata" +version = "4.8.3" +description = "Read metadata from Python packages" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +perf = ["ipython"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] [[package]] name = "jinja2" -version = "2.11.2" +version = "3.0.3" description = "A very fast and expressive template engine." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" [package.dependencies] -MarkupSafe = ">=0.23" +MarkupSafe = ">=2.0" [package.extras] -i18n = ["Babel (>=0.8)"] +i18n = ["Babel (>=2.7)"] [[package]] name = "markupsafe" -version = "1.1.1" +version = "2.0.1" description = "Safely add untrusted strings to HTML/XML markup." category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" +python-versions = ">=3.6" [[package]] name = "packaging" -version = "20.4" +version = "21.3" description = "Core utilities for Python packages" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [package.dependencies] -pyparsing = ">=2.0.2" -six = "*" +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "pygments" -version = "2.7.2" +version = "2.11.2" description = "Pygments is a syntax highlighting package written in Python." category = "main" optional = false @@ -189,15 +215,18 @@ python-versions = ">=3.5" [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.6" description = "Python parsing module" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytz" -version = "2020.4" +version = "2021.3" description = "World timezone definitions, modern and historical" category = "main" optional = false @@ -205,21 +234,21 @@ python-versions = "*" [[package]] name = "requests" -version = "2.25.0" +version = "2.27.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" [package.dependencies] certifi = ">=2017.4.17" -chardet = ">=3.0.2,<4" -idna = ">=2.5,<3" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} urllib3 = ">=1.21.1,<1.27" [package.extras] -security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"] socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] [[package]] name = "rfc3986" @@ -235,14 +264,6 @@ idna = {version = "*", optional = true, markers = "extra == \"idna2008\""} [package.extras] idna2008 = ["idna"] -[[package]] -name = "six" -version = "1.15.0" -description = "Python 2 and 3 compatibility utilities" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" - [[package]] name = "sniffio" version = "1.2.0" @@ -256,15 +277,15 @@ contextvars = {version = ">=2.1", markers = "python_version < \"3.7\""} [[package]] name = "snowballstemmer" -version = "2.0.0" -description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms." +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." category = "main" optional = false python-versions = "*" [[package]] name = "sphinx" -version = "3.3.1" +version = "3.5.4" description = "Python documentation generator" category = "main" optional = false @@ -274,7 +295,7 @@ python-versions = ">=3.5" alabaster = ">=0.7,<0.8" babel = ">=1.3" colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.12" +docutils = ">=0.12,<0.17" imagesize = "*" Jinja2 = ">=2.3" packaging = "*" @@ -290,8 +311,8 @@ sphinxcontrib-serializinghtml = "*" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.790)", "docutils-stubs"] -test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"] +lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.800)", "docutils-stubs"] +test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] [[package]] name = "sphinx-intl" @@ -312,13 +333,14 @@ transifex = ["transifex_client (>=0.11)"] [[package]] name = "sphinx-rtd-theme" -version = "0.5.0" +version = "0.5.2" description = "Read the Docs theme for Sphinx" category = "main" optional = false python-versions = "*" [package.dependencies] +docutils = "<0.17" sphinx = "*" [package.extras] @@ -350,11 +372,11 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "1.0.3" +version = "2.0.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.extras] lint = ["flake8", "mypy", "docutils-stubs"] @@ -385,7 +407,7 @@ test = ["pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.4" +version = "1.1.5" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." category = "main" optional = false @@ -395,9 +417,17 @@ python-versions = ">=3.5" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] +[[package]] +name = "typing-extensions" +version = "4.0.1" +description = "Backported and Experimental Type Hints for Python 3.6+" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "urllib3" -version = "1.26.2" +version = "1.26.8" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false @@ -408,6 +438,18 @@ brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "zipp" +version = "3.6.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] + [metadata] lock-version = "1.1" python-versions = "^3.6" @@ -423,20 +465,20 @@ async-generator = [ {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, ] babel = [ - {file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"}, - {file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"}, + {file = "Babel-2.9.1-py2.py3-none-any.whl", hash = "sha256:ab49e12b91d937cd11f0b67cb259a57ab4ad2b59ac7a3b41d6c06c0ac5b0def9"}, + {file = "Babel-2.9.1.tar.gz", hash = "sha256:bc0c176f9f6a994582230df350aa6e05ba2ebe4b3ac317eab29d9be5d2768da0"}, ] certifi = [ - {file = "certifi-2020.11.8-py2.py3-none-any.whl", hash = "sha256:1f422849db327d534e3d0c5f02a263458c3955ec0aae4ff09b95f195c59f4edd"}, - {file = "certifi-2020.11.8.tar.gz", hash = "sha256:f05def092c44fbf25834a51509ef6e631dc19765ab8a57b4e7ab85531f0a9cf4"}, + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] -chardet = [ - {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"}, - {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"}, +charset-normalizer = [ + {file = "charset-normalizer-2.0.10.tar.gz", hash = "sha256:876d180e9d7432c5d1dfd4c5d26b72f099d503e8fcc0feb7532c9289be60fcbd"}, + {file = "charset_normalizer-2.0.10-py3-none-any.whl", hash = "sha256:cb957888737fc0bbcd78e3df769addb41fd1ff8cf950dc9e7ad7793f1bf44455"}, ] click = [ - {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, - {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, + {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, + {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, ] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, @@ -458,139 +500,168 @@ httpcore = [ {file = "httpcore-0.13.3.tar.gz", hash = "sha256:5d674b57a11275904d4fd0819ca02f960c538e4472533620f322fc7db1ea0edc"}, ] httpx = [ - {file = "httpx-0.18.1-py3-none-any.whl", hash = "sha256:ad2e3db847be736edc4b272c4d5788790a7e5789ef132fc6b5fef8aeb9e9f6e0"}, - {file = "httpx-0.18.1.tar.gz", hash = "sha256:0a2651dd2b9d7662c70d12ada5c290abcf57373b9633515fe4baa9f62566086f"}, + {file = "httpx-0.18.2-py3-none-any.whl", hash = "sha256:979afafecb7d22a1d10340bafb403cf2cb75aff214426ff206521fc79d26408c"}, + {file = "httpx-0.18.2.tar.gz", hash = "sha256:9f99c15d33642d38bce8405df088c1c4cfd940284b4290cacbfb02e64f4877c6"}, ] idna = [ - {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"}, - {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"}, + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] imagesize = [ - {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, - {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"}, + {file = "imagesize-1.3.0-py2.py3-none-any.whl", hash = "sha256:1db2f82529e53c3e929e8926a1fa9235aa82d0bd0c580359c67ec31b2fddaa8c"}, + {file = "imagesize-1.3.0.tar.gz", hash = "sha256:cd1750d452385ca327479d45b64d9c7729ecf0b3969a58148298c77092261f9d"}, ] immutables = [ - {file = "immutables-0.15-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:6728f4392e3e8e64b593a5a0cd910a1278f07f879795517e09f308daed138631"}, - {file = "immutables-0.15-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f0836cd3bdc37c8a77b192bbe5f41dbcc3ce654db048ebbba89bdfe6db7a1c7a"}, - {file = "immutables-0.15-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8703d8abfd8687932f2a05f38e7de270c3a6ca3bd1c1efb3c938656b3f2f985a"}, - {file = "immutables-0.15-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b8ad986f9b532c026f19585289384b0769188fcb68b37c7f0bd0df9092a6ca54"}, - {file = "immutables-0.15-cp36-cp36m-win_amd64.whl", hash = "sha256:6f117d9206165b9dab8fd81c5129db757d1a044953f438654236ed9a7a4224ae"}, - {file = "immutables-0.15-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b75ade826920c4e490b1bb14cf967ac14e61eb7c5562161c5d7337d61962c226"}, - {file = "immutables-0.15-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b7e13c061785e34f73c4f659861f1b3e4a5fd918e4395c84b21c4e3d449ebe27"}, - {file = "immutables-0.15-cp37-cp37m-win_amd64.whl", hash = "sha256:3035849accee4f4e510ed7c94366a40e0f5fef9069fbe04a35f4787b13610a4a"}, - {file = "immutables-0.15-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b04fa69174e0c8f815f9c55f2a43fc9e5a68452fab459a08e904a74e8471639f"}, - {file = "immutables-0.15-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:141c2e9ea515a3a815007a429f0b47a578ebeb42c831edaec882a245a35fffca"}, - {file = "immutables-0.15-cp38-cp38-win_amd64.whl", hash = "sha256:cbe8c64640637faa5535d539421b293327f119c31507c33ca880bd4f16035eb6"}, - {file = "immutables-0.15-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a0a4e4417d5ef4812d7f99470cd39347b58cb927365dd2b8da9161040d260db0"}, - {file = "immutables-0.15-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3b15c08c71c59e5b7c2470ef949d49ff9f4263bb77f488422eaa157da84d6999"}, - {file = "immutables-0.15-cp39-cp39-win_amd64.whl", hash = "sha256:2283a93c151566e6830aee0e5bee55fc273455503b43aa004356b50f9182092b"}, - {file = "immutables-0.15.tar.gz", hash = "sha256:3713ab1ebbb6946b7ce1387bb9d1d7f5e09c45add58c2a2ee65f963c171e746b"}, + {file = "immutables-0.16-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:acbfa79d44228d96296279068441f980dc63dbed52522d9227ff9f4d96c6627e"}, + {file = "immutables-0.16-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c9ed003eacb92e630ef200e31f47236c2139b39476894f7963b32bd39bafa3"}, + {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0a396314b9024fa55bf83a27813fd76cf9f27dce51f53b0f19b51de035146251"}, + {file = "immutables-0.16-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4a2a71678348fb95b13ca108d447f559a754c41b47bd1e7e4fb23974e735682d"}, + {file = "immutables-0.16-cp36-cp36m-win32.whl", hash = "sha256:064001638ab5d36f6aa05b6101446f4a5793fb71e522bc81b8fc65a1894266ff"}, + {file = "immutables-0.16-cp36-cp36m-win_amd64.whl", hash = "sha256:1de393f1b188740ca7b38f946f2bbc7edf3910d2048f03bbb8d01f17a038d67c"}, + {file = "immutables-0.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fcf678a3074613119385a02a07c469ec5130559f5ea843c85a0840c80b5b71c6"}, + {file = "immutables-0.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a307eb0984eb43e815dcacea3ac50c11d00a936ecf694c46991cd5a23bcb0ec0"}, + {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7a58825ff2254e2612c5a932174398a4ea8fbddd8a64a02c880cc32ee28b8820"}, + {file = "immutables-0.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:798b095381eb42cf40db6876339e7bed84093e5868018a9e73d8e1f7ab4bb21e"}, + {file = "immutables-0.16-cp37-cp37m-win32.whl", hash = "sha256:19bdede174847c2ef1292df0f23868ab3918b560febb09fcac6eec621bd4812b"}, + {file = "immutables-0.16-cp37-cp37m-win_amd64.whl", hash = "sha256:9ccf4c0e3e2e3237012b516c74c49de8872ccdf9129739f7a0b9d7444a8c4862"}, + {file = "immutables-0.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d59beef203a3765db72b1d0943547425c8318ecf7d64c451fd1e130b653c2fbb"}, + {file = "immutables-0.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0020aaa4010b136056c20a46ce53204e1407a9e4464246cb2cf95b90808d9161"}, + {file = "immutables-0.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edd9f67671555af1eb99ad3c7550238487dd7ac0ac5205b40204ed61c9a922ac"}, + {file = "immutables-0.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:298a301f85f307b4c056a0825eb30f060e64d73605e783289f3df37dd762bab8"}, + {file = "immutables-0.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b779617f5b94486bfd0f22162cd72eb5f2beb0214a14b75fdafb7b2c908ed0cb"}, + {file = "immutables-0.16-cp38-cp38-win32.whl", hash = "sha256:511c93d8b1bbbf103ff3f1f120c5a68a9866ce03dea6ac406537f93ca9b19139"}, + {file = "immutables-0.16-cp38-cp38-win_amd64.whl", hash = "sha256:b651b61c1af6cda2ee201450f2ffe048a5959bc88e43e6c312f4c93e69c9e929"}, + {file = "immutables-0.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:aa7bf572ae1e006104c584be70dc634849cf0dc62f42f4ee194774f97e7fd17d"}, + {file = "immutables-0.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:50793a44ba0d228ed8cad4d0925e00dfd62ea32f44ddee8854f8066447272d05"}, + {file = "immutables-0.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:799621dcdcdcbb2516546a40123b87bf88de75fe7459f7bd8144f079ace6ec3e"}, + {file = "immutables-0.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7bcf52aeb983bd803b7c6106eae1b2d9a0c7ab1241bc6b45e2174ba2b7283031"}, + {file = "immutables-0.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:734c269e82e5f307fb6e17945953b67659d1731e65309787b8f7ba267d1468f2"}, + {file = "immutables-0.16-cp39-cp39-win32.whl", hash = "sha256:a454d5d3fee4b7cc627345791eb2ca4b27fa3bbb062ccf362ecaaa51679a07ed"}, + {file = "immutables-0.16-cp39-cp39-win_amd64.whl", hash = "sha256:2505d93395d3f8ae4223e21465994c3bc6952015a38dc4f03cb3e07a2b8d8325"}, + {file = "immutables-0.16.tar.gz", hash = "sha256:d67e86859598eed0d926562da33325dac7767b7b1eff84e232c22abea19f4360"}, +] +importlib-metadata = [ + {file = "importlib_metadata-4.8.3-py3-none-any.whl", hash = "sha256:65a9576a5b2d58ca44d133c42a241905cc45e34d2c06fd5ba2bafa221e5d7b5e"}, + {file = "importlib_metadata-4.8.3.tar.gz", hash = "sha256:766abffff765960fcc18003801f7044eb6755ffae4521c8e8ce8e83b9c9b0668"}, ] jinja2 = [ - {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"}, - {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"}, + {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, + {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, ] markupsafe = [ - {file = "MarkupSafe-1.1.1-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:09027a7803a62ca78792ad89403b1b7a73a01c8cb65909cd876f7fcebd79b161"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e249096428b3ae81b08327a63a485ad0878de3fb939049038579ac0ef61e17e7"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:500d4957e52ddc3351cabf489e79c91c17f6e0899158447047588650b5e69183"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win32.whl", hash = "sha256:b2051432115498d3562c084a49bba65d97cf251f5a331c64a12ee7e04dacc51b"}, - {file = "MarkupSafe-1.1.1-cp27-cp27m-win_amd64.whl", hash = "sha256:98c7086708b163d425c67c7a91bad6e466bb99d797aa64f965e9d25c12111a5e"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:cd5df75523866410809ca100dc9681e301e3c27567cf498077e8551b6d20e42f"}, - {file = "MarkupSafe-1.1.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:43a55c2930bbc139570ac2452adf3d70cdbb3cfe5912c71cdce1c2c6bbd9c5d1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-macosx_10_6_intel.whl", hash = "sha256:1027c282dad077d0bae18be6794e6b6b8c91d58ed8a8d89a89d59693b9131db5"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_i686.whl", hash = "sha256:62fe6c95e3ec8a7fad637b7f3d372c15ec1caa01ab47926cfdf7a75b40e0eac1"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-manylinux1_x86_64.whl", hash = "sha256:88e5fcfb52ee7b911e8bb6d6aa2fd21fbecc674eadd44118a9cc3863f938e735"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win32.whl", hash = "sha256:ade5e387d2ad0d7ebf59146cc00c8044acbd863725f887353a10df825fc8ae21"}, - {file = "MarkupSafe-1.1.1-cp34-cp34m-win_amd64.whl", hash = "sha256:09c4b7f37d6c648cb13f9230d847adf22f8171b1ccc4d5682398e77f40309235"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:79855e1c5b8da654cf486b830bd42c06e8780cea587384cf6545b7d9ac013a0b"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:c8716a48d94b06bb3b2524c2b77e055fb313aeb4ea620c8dd03a105574ba704f"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:7c1699dfe0cf8ff607dbdcc1e9b9af1755371f92a68f706051cc8c37d447c905"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"}, - {file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"}, - {file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"}, - {file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"}, - {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"}, - {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"}, - {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, + {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, + {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, + {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, + {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, + {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, + {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, ] packaging = [ - {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"}, - {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] pygments = [ - {file = "Pygments-2.7.2-py3-none-any.whl", hash = "sha256:88a0bbcd659fcb9573703957c6b9cff9fab7295e6e76db54c9d00ae42df32773"}, - {file = "Pygments-2.7.2.tar.gz", hash = "sha256:381985fcc551eb9d37c52088a32914e00517e57f4a21609f48141ba08e193fa0"}, + {file = "Pygments-2.11.2-py3-none-any.whl", hash = "sha256:44238f1b60a76d78fc8ca0528ee429702aae011c265fe6a8dd8b63049ae41c65"}, + {file = "Pygments-2.11.2.tar.gz", hash = "sha256:4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, + {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, ] pytz = [ - {file = "pytz-2020.4-py2.py3-none-any.whl", hash = "sha256:5c55e189b682d420be27c6995ba6edce0c0a77dd67bfbe2ae6607134d5851ffd"}, - {file = "pytz-2020.4.tar.gz", hash = "sha256:3e6b7dd2d1e0a59084bcee14a17af60c5c562cdc16d828e8eba2e683d3a7e268"}, + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] requests = [ - {file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"}, - {file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"}, + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, ] rfc3986 = [ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"}, {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"}, ] -six = [ - {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"}, - {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"}, -] sniffio = [ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"}, {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"}, ] snowballstemmer = [ - {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"}, - {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"}, + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, ] sphinx = [ - {file = "Sphinx-3.3.1-py3-none-any.whl", hash = "sha256:d4e59ad4ea55efbb3c05cde3bfc83bfc14f0c95aa95c3d75346fcce186a47960"}, - {file = "Sphinx-3.3.1.tar.gz", hash = "sha256:1e8d592225447104d1172be415bc2972bd1357e3e12fdc76edf2261105db4300"}, + {file = "Sphinx-3.5.4-py3-none-any.whl", hash = "sha256:2320d4e994a191f4b4be27da514e46b3d6b420f2ff895d064f52415d342461e8"}, + {file = "Sphinx-3.5.4.tar.gz", hash = "sha256:19010b7b9fa0dc7756a6e105b2aacd3a80f798af3c25c273be64d7beeb482cb1"}, ] sphinx-intl = [ {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"}, {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"}, ] sphinx-rtd-theme = [ - {file = "sphinx_rtd_theme-0.5.0-py2.py3-none-any.whl", hash = "sha256:373413d0f82425aaa28fb288009bf0d0964711d347763af2f1b65cafcb028c82"}, - {file = "sphinx_rtd_theme-0.5.0.tar.gz", hash = "sha256:22c795ba2832a169ca301cd0a083f7a434e09c538c70beb42782c073651b707d"}, + {file = "sphinx_rtd_theme-0.5.2-py2.py3-none-any.whl", hash = "sha256:4a05bdbe8b1446d77a01e20a23ebc6777c74f43237035e76be89699308987d6f"}, + {file = "sphinx_rtd_theme-0.5.2.tar.gz", hash = "sha256:32bd3b5d13dc8186d7a42fc816a23d32e83a4827d7d9882948e7b837c232da5a"}, ] sphinxcontrib-applehelp = [ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, @@ -601,8 +672,8 @@ sphinxcontrib-devhelp = [ {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, ] sphinxcontrib-htmlhelp = [ - {file = "sphinxcontrib-htmlhelp-1.0.3.tar.gz", hash = "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"}, - {file = "sphinxcontrib_htmlhelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f"}, + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, ] sphinxcontrib-jsmath = [ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, @@ -613,10 +684,18 @@ sphinxcontrib-qthelp = [ {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, ] sphinxcontrib-serializinghtml = [ - {file = "sphinxcontrib-serializinghtml-1.1.4.tar.gz", hash = "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc"}, - {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"}, + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +typing-extensions = [ + {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, + {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, ] urllib3 = [ - {file = "urllib3-1.26.2-py2.py3-none-any.whl", hash = "sha256:d8ff90d979214d7b4f8ce956e80f4028fc6860e4431f731ea4a8c08f23f99473"}, - {file = "urllib3-1.26.2.tar.gz", hash = "sha256:19188f96923873c92ccb987120ec4acaa12f0461fa9ce5d3d0772bc965a39e08"}, + {file = "urllib3-1.26.8-py2.py3-none-any.whl", hash = "sha256:000ca7f471a233c2251c6c7023ee85305721bfdf18621ebff4fd17a8653427ed"}, + {file = "urllib3-1.26.8.tar.gz", hash = "sha256:0e7c33d9a63e7ddfcb86780aac87befc2fbddf46c58dbb487e0855f7ceec283c"}, +] +zipp = [ + {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, + {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, ] -- cgit v1.2.3-54-g00ecf