summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2021-08-20 14:43:21 -0700
committerGitHub <noreply@github.com>2021-08-20 14:43:21 -0700
commitb66e742bc20ae977232fc53f22d485c10173ac2f (patch)
treec6eb66c340c34b45bac5525350c5eb5c43fe33a6
parent76104671c3eacbef53ad96fffd8a57512ab2d093 (diff)
parent02254b13bb4818745193092f2144fd83726d79e7 (diff)
downloadonionshare-b66e742bc20ae977232fc53f22d485c10173ac2f.tar.gz
onionshare-b66e742bc20ae977232fc53f22d485c10173ac2f.zip
Merge pull request #1395 from onionshare/developv2.3.3
Version 2.3.3, merge develop into stable
-rw-r--r--.github/workflows/codeql-analysis.yml67
-rw-r--r--CHANGELOG.md17
-rw-r--r--LICENSE2
-rw-r--r--README.md4
-rw-r--r--RELEASE.md155
-rwxr-xr-xbuild-source.sh2
-rw-r--r--cli/README.md39
-rw-r--r--cli/onionshare_cli/__init__.py142
-rw-r--r--cli/onionshare_cli/common.py248
-rw-r--r--cli/onionshare_cli/mode_settings.py10
-rw-r--r--cli/onionshare_cli/onion.py62
-rw-r--r--cli/onionshare_cli/onionshare.py24
-rw-r--r--cli/onionshare_cli/resources/static/css/style.css8
-rw-r--r--cli/onionshare_cli/resources/static/js/chat.js11
-rw-r--r--cli/onionshare_cli/resources/static/js/receive.js65
-rw-r--r--cli/onionshare_cli/resources/templates/500.html21
-rw-r--r--cli/onionshare_cli/resources/templates/chat.html7
-rw-r--r--cli/onionshare_cli/resources/templates/listing.html47
-rw-r--r--cli/onionshare_cli/resources/templates/receive.html102
-rw-r--r--cli/onionshare_cli/resources/templates/send.html17
-rw-r--r--cli/onionshare_cli/resources/templates/thankyou.html6
-rw-r--r--cli/onionshare_cli/resources/torrc_template-obfs437
-rw-r--r--cli/onionshare_cli/resources/version.txt2
-rw-r--r--cli/onionshare_cli/settings.py22
-rw-r--r--cli/onionshare_cli/web/chat_mode.py55
-rw-r--r--cli/onionshare_cli/web/receive_mode.py284
-rw-r--r--cli/onionshare_cli/web/send_base_mode.py49
-rw-r--r--cli/onionshare_cli/web/share_mode.py369
-rw-r--r--cli/onionshare_cli/web/web.py118
-rw-r--r--cli/onionshare_cli/web/website_mode.py10
-rw-r--r--cli/poetry.lock575
-rw-r--r--cli/pyproject.toml9
-rw-r--r--cli/setup.py14
-rw-r--r--cli/tests/conftest.py39
-rw-r--r--cli/tests/test_cli.py9
-rw-r--r--cli/tests/test_cli_common.py18
-rw-r--r--cli/tests/test_cli_settings.py1
-rw-r--r--cli/tests/test_cli_web.py475
-rw-r--r--cli/tests/test_range_request.py38
-rw-r--r--desktop/README.md4
-rwxr-xr-xdesktop/package/linux/build-appimage.py3
-rwxr-xr-xdesktop/package/macos/build.py3
-rw-r--r--desktop/package/windows/build.py4
-rw-r--r--desktop/pyproject.toml4
-rwxr-xr-xdesktop/scripts/check_lacked_trans.py5
-rwxr-xr-xdesktop/scripts/get-tor-osx.py9
-rw-r--r--desktop/scripts/get-tor-windows.py11
-rwxr-xr-xdesktop/scripts/rebuild-cli.py1
-rw-r--r--desktop/src/onionshare/__init__.py49
-rw-r--r--desktop/src/onionshare/gui_common.py58
-rw-r--r--desktop/src/onionshare/main_window.py2
-rw-r--r--desktop/src/onionshare/resources/images/open_message.pngbin0 -> 5403 bytes
-rw-r--r--desktop/src/onionshare/resources/locale/bn.json13
-rw-r--r--desktop/src/onionshare/resources/locale/da.json12
-rw-r--r--desktop/src/onionshare/resources/locale/de.json15
-rw-r--r--desktop/src/onionshare/resources/locale/el.json124
-rw-r--r--desktop/src/onionshare/resources/locale/en.json17
-rw-r--r--desktop/src/onionshare/resources/locale/es.json13
-rw-r--r--desktop/src/onionshare/resources/locale/fr.json15
-rw-r--r--desktop/src/onionshare/resources/locale/gl.json12
-rw-r--r--desktop/src/onionshare/resources/locale/hi.json41
-rw-r--r--desktop/src/onionshare/resources/locale/hr.json57
-rw-r--r--desktop/src/onionshare/resources/locale/id.json215
-rw-r--r--desktop/src/onionshare/resources/locale/is.json12
-rw-r--r--desktop/src/onionshare/resources/locale/it.json10
-rw-r--r--desktop/src/onionshare/resources/locale/lt.json218
-rw-r--r--desktop/src/onionshare/resources/locale/nb_NO.json9
-rw-r--r--desktop/src/onionshare/resources/locale/nl.json32
-rw-r--r--desktop/src/onionshare/resources/locale/pl.json9
-rw-r--r--desktop/src/onionshare/resources/locale/pt_BR.json12
-rw-r--r--desktop/src/onionshare/resources/locale/ru.json13
-rw-r--r--desktop/src/onionshare/resources/locale/si.json195
-rw-r--r--desktop/src/onionshare/resources/locale/sr_Latn.json57
-rw-r--r--desktop/src/onionshare/resources/locale/sv.json38
-rw-r--r--desktop/src/onionshare/resources/locale/tr.json29
-rw-r--r--desktop/src/onionshare/resources/locale/uk.json19
-rw-r--r--desktop/src/onionshare/resources/locale/yo.json37
-rw-r--r--desktop/src/onionshare/resources/locale/zh_Hans.json12
-rw-r--r--desktop/src/onionshare/settings_dialog.py39
-rw-r--r--desktop/src/onionshare/strings.py1
-rw-r--r--desktop/src/onionshare/tab/mode/__init__.py52
-rw-r--r--desktop/src/onionshare/tab/mode/chat_mode/__init__.py22
-rw-r--r--desktop/src/onionshare/tab/mode/file_selection.py4
-rw-r--r--desktop/src/onionshare/tab/mode/history.py88
-rw-r--r--desktop/src/onionshare/tab/mode/mode_settings_widget.py50
-rw-r--r--desktop/src/onionshare/tab/mode/receive_mode/__init__.py116
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/__init__.py12
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/threads.py5
-rw-r--r--desktop/src/onionshare/tab/mode/website_mode/__init__.py14
-rw-r--r--desktop/src/onionshare/tab/server_status.py18
-rw-r--r--desktop/src/onionshare/tab/tab.py15
-rw-r--r--desktop/src/onionshare/tab_widget.py12
-rw-r--r--desktop/src/onionshare/threads.py6
-rw-r--r--desktop/src/onionshare/tor_connection_dialog.py2
-rw-r--r--desktop/src/onionshare/update_checker.py8
-rw-r--r--desktop/src/onionshare/widgets.py9
-rw-r--r--desktop/src/org.onionshare.OnionShare.appdata.xml6
-rw-r--r--desktop/src/setup.py14
-rw-r--r--desktop/tests/conftest.py28
-rw-r--r--desktop/tests/gui_base_test.py34
-rwxr-xr-xdesktop/tests/run.sh3
-rw-r--r--desktop/tests/test_gui_chat.py98
-rw-r--r--desktop/tests/test_gui_receive.py73
-rw-r--r--desktop/tests/test_gui_share.py18
-rw-r--r--desktop/tests/test_gui_tabs.py31
-rw-r--r--desktop/tests/test_gui_website.py22
-rw-r--r--docs/README.md72
-rwxr-xr-xdocs/build.sh2
-rwxr-xr-xdocs/check-weblate.py153
-rw-r--r--docs/gettext/.doctrees/advanced.doctreebin27303 -> 30413 bytes
-rw-r--r--docs/gettext/.doctrees/develop.doctreebin35678 -> 37742 bytes
-rw-r--r--docs/gettext/.doctrees/environment.picklebin37430 -> 38056 bytes
-rw-r--r--docs/gettext/.doctrees/features.doctreebin42216 -> 47169 bytes
-rw-r--r--docs/gettext/.doctrees/help.doctreebin7679 -> 7687 bytes
-rw-r--r--docs/gettext/.doctrees/index.doctreebin3439 -> 3439 bytes
-rw-r--r--docs/gettext/.doctrees/install.doctreebin20613 -> 20613 bytes
-rw-r--r--docs/gettext/.doctrees/security.doctreebin13526 -> 13526 bytes
-rw-r--r--docs/gettext/.doctrees/tor.doctreebin30114 -> 30114 bytes
-rw-r--r--docs/gettext/advanced.pot54
-rw-r--r--docs/gettext/develop.pot36
-rw-r--r--docs/gettext/features.pot100
-rw-r--r--docs/gettext/help.pot8
-rw-r--r--docs/gettext/index.pot4
-rw-r--r--docs/gettext/install.pot4
-rw-r--r--docs/gettext/security.pot4
-rw-r--r--docs/gettext/sphinx.pot4
-rw-r--r--docs/gettext/tor.pot4
-rw-r--r--docs/poetry.lock162
-rw-r--r--docs/pyproject.toml1
-rw-r--r--docs/source/_static/screenshots/receive-sharing.pngbin86355 -> 136760 bytes
-rw-r--r--docs/source/_static/screenshots/receive-torbrowser.pngbin57471 -> 123409 bytes
-rw-r--r--docs/source/_static/screenshots/receive.pngbin79554 -> 139538 bytes
-rw-r--r--docs/source/advanced.rst77
-rw-r--r--docs/source/conf.py13
-rw-r--r--docs/source/develop.rst203
-rw-r--r--docs/source/features.rst27
-rw-r--r--docs/source/help.rst4
-rw-r--r--docs/source/locale/bn/LC_MESSAGES/index.po30
-rw-r--r--docs/source/locale/bn/LC_MESSAGES/security.po63
-rw-r--r--docs/source/locale/bn/LC_MESSAGES/tor.po142
-rw-r--r--docs/source/locale/de/LC_MESSAGES/advanced.po162
-rw-r--r--docs/source/locale/de/LC_MESSAGES/develop.po167
-rw-r--r--docs/source/locale/de/LC_MESSAGES/features.po453
-rw-r--r--docs/source/locale/de/LC_MESSAGES/help.po59
-rw-r--r--docs/source/locale/el/LC_MESSAGES/advanced.po185
-rw-r--r--docs/source/locale/el/LC_MESSAGES/develop.po164
-rw-r--r--docs/source/locale/el/LC_MESSAGES/features.po478
-rw-r--r--docs/source/locale/el/LC_MESSAGES/help.po53
-rw-r--r--docs/source/locale/el/LC_MESSAGES/install.po18
-rw-r--r--docs/source/locale/en/LC_MESSAGES/advanced.po57
-rw-r--r--docs/source/locale/en/LC_MESSAGES/develop.po65
-rw-r--r--docs/source/locale/en/LC_MESSAGES/features.po172
-rw-r--r--docs/source/locale/en/LC_MESSAGES/help.po31
-rw-r--r--docs/source/locale/es/LC_MESSAGES/advanced.po173
-rw-r--r--docs/source/locale/es/LC_MESSAGES/develop.po153
-rw-r--r--docs/source/locale/es/LC_MESSAGES/features.po462
-rw-r--r--docs/source/locale/es/LC_MESSAGES/help.po57
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/index.po13
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/security.po70
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/tor.po34
-rw-r--r--docs/source/locale/hr/LC_MESSAGES/advanced.po23
-rw-r--r--docs/source/locale/hr/LC_MESSAGES/help.po21
-rw-r--r--docs/source/locale/hr/LC_MESSAGES/index.po6
-rw-r--r--docs/source/locale/id/LC_MESSAGES/index.po30
-rw-r--r--docs/source/locale/id/LC_MESSAGES/install.po105
-rw-r--r--docs/source/locale/it/LC_MESSAGES/install.po5
-rw-r--r--docs/source/locale/it/LC_MESSAGES/security.po45
-rw-r--r--docs/source/locale/it/LC_MESSAGES/tor.po32
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/security.po40
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/help.po35
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/index.po16
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/install.po77
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/security.po65
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/sphinx.po15
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/install.po75
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/advanced.po184
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/develop.po173
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/features.po405
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/help.po73
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/index.po13
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/install.po100
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/security.po73
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/tor.po97
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/index.po14
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po16
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/advanced.po206
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/develop.po146
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/features.po456
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/help.po59
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/advanced.po134
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/develop.po162
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/features.po442
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/help.po61
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/install.po32
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/security.po31
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/tor.po23
-rw-r--r--snap/snapcraft.yaml19
197 files changed, 8982 insertions, 4089 deletions
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
new file mode 100644
index 00000000..f1d47856
--- /dev/null
+++ b/.github/workflows/codeql-analysis.yml
@@ -0,0 +1,67 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ develop, stable ]
+ pull_request:
+ # The branches below must be a subset of the branches above
+ branches: [ develop ]
+ schedule:
+ - cron: '22 11 * * 5'
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ 'python' ]
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
+ # Learn more:
+ # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2
+
+ # Initializes the CodeQL tools for scanning.
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v1
+ with:
+ languages: ${{ matrix.language }}
+ # If you wish to specify custom queries, you can do so here or in a config file.
+ # By default, queries listed here will override any specified in a config file.
+ # 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).
+ # If this step fails, then you should remove it and run the build manually (see below)
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v1
+
+ # ℹ️ Command-line programs to run using the OS shell.
+ # 📚 https://git.io/JvXDl
+
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
+ # and modify them (or add more) to build your code if your project
+ # uses a compiled language
+
+ #- run: |
+ # make bootstrap
+ # make release
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v1
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 475fc552..0db797bb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,22 @@
# OnionShare Changelog
+## 2.3.3
+
+* New feature: Setting for light or dark theme
+* Updated Tor to 0.4.6.7 for Linux, 0.4.5.10 for Windows and macOS
+* Various bug fixes
+
+## 2.3.2
+
+* New feature: Custom titles can be set for OnionShare's various modes
+* New feature: Receive mode supports notification webhooks
+* New feature: Receive mode supports submitting messages as well as files
+* New feature: New ASCII art banner and prettier verbose output
+* New feature: Partial support for range requests (pausing and resuming in HTTP)
+* Updated Tor to 0.4.5.7
+* Updated built-in obfs4 bridges
+* Various bug fixes
+
## 2.3.1
* Bugfix: Fix chat mode
diff --git a/LICENSE b/LICENSE
index c2dde1d3..ed4e5238 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-(Note: Third-party licenses can be found under install/licenses/.)
+(Note: Third-party licenses can be found under licenses/.)
OnionShare
Copyright (C) 2014-2021 Micah Lee, et al. <micah@micahflee.com>
diff --git a/README.md b/README.md
index ede93aa8..1c010e22 100644
--- a/README.md
+++ b/README.md
@@ -11,7 +11,7 @@ You can download OnionShare for Windows and macOS from the [OnionShare website](
For macOS you can also use [Homebrew](https://brew.sh/):
```
-brew cask install onionshare
+brew install --cask onionshare
```
See [these instructions](https://docs.onionshare.org/2.3/en/install.html#install-in-linux) to install OnionShare in Linux with Flatpak.
@@ -22,4 +22,4 @@ To learn how OnionShare works, what its security properties are, how to use it,
---
-Test status: [![CircleCI](https://circleci.com/gh/micahflee/onionshare.svg?style=svg)](https://circleci.com/gh/micahflee/onionshare) \ No newline at end of file
+Test status: [![CircleCI](https://circleci.com/gh/micahflee/onionshare.svg?style=svg)](https://circleci.com/gh/micahflee/onionshare)
diff --git a/RELEASE.md b/RELEASE.md
index 78fc8e4b..3409cf5c 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -11,19 +11,27 @@ Before making a release, you must update the version in these places:
- [ ] `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`
-- [ ] `docs/source/conf.py`
+- [ ] `docs/source/conf.py` (`version` at the top, and the `versions` list too)
- [ ] `snap/snapcraft.yaml`
+If you update `flask-socketio`, ensure that you also update the [socket.io.min.js](https://github.com/micahflee/onionshare/blob/develop/cli/onionshare_cli/resources/static/js/socket.io.min.js) file to a version that is [supported](https://flask-socketio.readthedocs.io/en/latest/#version-compatibility) by the updated version of `flask-socketio`.
+
+Use tor binaries from the latest Tor Browser:
+
+- [ ] `desktop/scripts/get-tor-osx.py`
+- [ ] `desktop/scripts/get-tor-windows.py`
+
Update the documentation:
- [ ] Update all of the documentation in `docs` to cover new features, including taking new screenshots if necessary
-- [ ] Edit `docs/source/conf.py`, make sure `versions` includes the latest version
Finalize localization:
- [ ] Merge all the translations from weblate
+- [ ] In `docs` run `poetry run ./check-weblate.py [API_KEY]` to see which translations are >90% in the app and docs
- [ ] Edit `cli/onionshare_cli/settings.py`, make sure `self.available_locales` lists only locales that are >90% translated
- [ ] Edit `docs/source/conf.py`, make sure `languages` lists only languages that are >90% translated
+- [ ] Edit `docs/build.sh` and make sure `LOCALES=` lists the same languages as above, in `docs/source/conf.py`
- [ ] Make sure the latest documentation is built and committed:
```
cd docs
@@ -42,34 +50,6 @@ Make sure snapcraft packaging works. In `snap/snapcraft.yaml`:
- [ ] All python packages should be updated to match `cli/pyproject.toml` and `desktop/pyproject.toml`
- [ ] Test the snap package, ensure it works
-Make sure Flatpak packaging works. In `flatpak/org.onionshare.OnionShare.yaml`:
-
-- [ ] Update `tor`, `libevent`, and `obfs4` dependencies, if necessary
-- [ ] Built the latest python dependencies using [this tool](https://github.com/flatpak/flatpak-builder-tools/blob/master/pip/flatpak-pip-generator) (see below)
-- [ ] Test the Flatpak package, ensure it works
-
-```
-# you may need to install toml
-pip3 install --user toml
-
-# clone flatpak-build-tools
-git clone https://github.com/flatpak/flatpak-builder-tools.git
-cd flatpak-builder-tools/pip
-
-# get onionshare-cli dependencies
-./flatpak-pip-generator $(python3 -c 'import toml; print("\n".join([x for x in toml.loads(open("../../onionshare/cli/pyproject.toml").read())["tool"]["poetry"]["dependencies"]]))' |grep -v "^python$" |tr "\n" " ")
-mv python3-modules.json onionshare-cli.json
-
-# get onionshare dependencies
-./flatpak-pip-generator $(python3 -c 'import toml; print("\n".join(toml.loads(open("../../onionshare/desktop/pyproject.toml").read())["tool"]["briefcase"]["app"]["onionshare"]["requires"]))' |grep -v "./onionshare_cli" |grep -v -i "pyside2" |tr "\n" " ")
-mv python3-modules.json onionshare.json
-
-# use something like https://www.json2yaml.com/ to convert to yaml and update the manifest
-# add all of the modules in both onionshare-cli and onionshare to the submodules of "onionshare"
-# - onionshare-cli.json
-# - onionshare.json
-```
-
Finally:
- [ ] There must be a PGP-signed git tag for the version, e.g. for OnionShare 2.1, the tag must be `v2.1`
@@ -89,25 +69,6 @@ If the tag verifies successfully, check it out:
git checkout v$VERSION
```
-## Linux Flatpak release
-
-You must have `flatpak` and `flatpak-builder` installed, with flathub remote added (`flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo`).
-
-Build and test the Flatpak package before publishing:
-
-```sh
-flatpak-builder build --force-clean --install-deps-from=flathub --install --user flatpak/org.onionshare.OnionShare.yaml
-flatpak run org.onionshare.OnionShare
-```
-
-Once you confirm it works, create a single-file bundle:
-
-```sh
-flatpak build-bundle ~/.local/share/flatpak/repo OnionShare.flatpak org.onionshare.OnionShare
-```
-
-This will create `OnionShare.flatpak`.
-
## Linux Snapcraft release
You must have `snap` and `snapcraft` (`snap install snapcraft --classic`) installed.
@@ -207,9 +168,10 @@ This will create `dist/onionshare-$VERSION.tar.gz`.
## Publishing the release
+### PGP signatures
+
After following all of the previous steps, gather these files:
-- `OnionShare.flatpak` (rename it to `OnionShare-$VERSION.flatpak`)
- `onionshare_$VERSION_amd64.snap`
- `OnionShare-$VERSION.msi`
- `OnionShare.dmg` (rename it to `OnionShare-$VERSION.dmg`)
@@ -218,41 +180,96 @@ After following all of the previous steps, gather these files:
Create a PGP signature for each of these files, e.g:
```sh
-gpg -a --detach-sign OnionShare-$VERSION.flatpak
+gpg -a --detach-sign OnionShare-$VERSION.tar.gz
gpg -a --detach-sign [... and so on]
```
-Create a release on GitHub:
+### Create a release on GitHub:
- Match it to the version tag, put the changelog in description of the release
-- Upload all 10 files (binary and source packages and their `.asc` signatures)
+- Upload all 8 files (binary and source packages and their `.asc` signatures)
-Update onionshare.org:
+### Update onionshare-cli on PyPi
-- Upload all 10 files to https://onionshare.org/dist/$VERSION/
-- Update the [onionshare-website](https://github.com/micahflee/onionshare-website) repo:
- - Edit `latest-version.txt` to match the latest version
- - Update the version number and download links
- - Deploy to https://onionshare.org/
+```sh
+cd cli
+poetry install
+poetry publish --build
+```
-Update docs.onionshare.org:
+### Update Flathub
-- Upload everything from `docs/build/docs` to https://docs.onionshare.org/
+After there's a new release tag, make the Flathub package work here: https://github.com/flathub/org.onionshare.OnionShare
-Update Homebrew:
+You must have `flatpak` and `flatpak-builder` installed, with flathub remote added (`flatpak remote-add --if-not-exists --user flathub https://flathub.org/repo/flathub.flatpakrepo`).
-- Make a PR to [homebrew-cask](https://github.com/homebrew/homebrew-cask) to update the macOS version
+- [ ] Change the tag (for both `onionshare` and `onionshare-cli`) to match the new git tag
+- [ ] Update `tor`, `libevent`, and `obfs4` dependencies, if necessary
+- [ ] Built the latest python dependencies using [this tool](https://github.com/flatpak/flatpak-builder-tools/blob/master/pip/flatpak-pip-generator) (see below)
+- [ ] Test the Flatpak package, ensure it works
+
+```
+# you may need to install toml
+pip3 install --user toml
+
+# clone flatpak-build-tools
+git clone https://github.com/flatpak/flatpak-builder-tools.git
-Update onionshare-cli on PyPi:
+# get onionshare-cli dependencies
+cd poetry
+./flatpak-poetry-generator.py ../../onionshare/cli/poetry.lock
+cd ..
+
+# get onionshare dependencies
+cd pip
+./flatpak-pip-generator $(python3 -c 'import toml; print("\n".join(toml.loads(open("../../onionshare/desktop/pyproject.toml").read())["tool"]["briefcase"]["app"]["onionshare"]["requires"]))' |grep -v "./onionshare_cli" |grep -v -i "pyside2" |tr "\n" " ")
+mv python3-modules.json onionshare.json
+
+# use something like https://www.json2yaml.com/ to convert to yaml and update the manifest
+# add all of the modules in both onionshare-cli and onionshare to the submodules of "onionshare"
+# - poetry/generated-poetry-sources.json (onionshare-cli)
+# - pip/python3-modules.json (onionshare)
+```
+
+Build and test the Flatpak package before publishing:
```sh
-cd cli
-poetry install
-poetry publish --build
+flatpak-builder build --force-clean --install-deps-from=flathub --install --user org.onionshare.OnionShare.yaml
+flatpak run org.onionshare.OnionShare
```
-Update the community:
+Create a [single-file bundle](https://docs.flatpak.org/en/latest/single-file-bundles.html):
+
+```sh
+flatpak build-bundle ~/.local/share/flatpak/repo OnionShare-$VERSION.flatpak org.onionshare.OnionShare --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
+```
+
+Create a PGP signature for the flatpak single-file bundle:
+
+```sh
+gpg -a --detach-sign OnionShare-$VERSION.flatpak
+```
+
+Upload this `.flatpak` and its sig to the GitHub release as well.
+
+### Update Homebrew
+
+- Make a PR to [homebrew-cask](https://github.com/homebrew/homebrew-cask) to update the macOS version
+
+### Update onionshare.org
+
+- Upload all 10 files to https://onionshare.org/dist/$VERSION/
+- Update the [onionshare-website](https://github.com/micahflee/onionshare-website) repo:
+ - Edit `latest-version.txt` to match the latest version
+ - Update the version number and download links
+ - Deploy to https://onionshare.org/
+
+### Update docs.onionshare.org
+
+- Upload everything from `docs/build/docs` to https://docs.onionshare.org/
+
+### Update the community
- Upload all 10 files to the OnionShare team Keybase filesystem
- Email the [onionshare-dev](https://lists.riseup.net/www/subscribe/onionshare-dev) mailing list announcing the release
-- Tweet, toot, etc.
+- Blog, tweet, toot, etc.
diff --git a/build-source.sh b/build-source.sh
index b7bd700a..add57583 100755
--- a/build-source.sh
+++ b/build-source.sh
@@ -36,7 +36,7 @@ fi
mkdir -p build/source
mkdir -p dist
cd build/source
-git clone https://github.com/micahflee/onionshare.git
+git clone https://github.com/onionshare/onionshare.git
cd onionshare
# Verify tag
diff --git a/cli/README.md b/cli/README.md
index 06bb18cf..744ece4d 100644
--- a/cli/README.md
+++ b/cli/README.md
@@ -1,24 +1,23 @@
```
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
+╭───────────────────────────────────────────╮
+│ * ▄▄█████▄▄ * │
+│ ▄████▀▀▀████▄ * │
+│ ▀▀█▀ ▀██▄ │
+│ * ▄█▄ ▀██▄ │
+│ ▄█████▄ ███ -+- │
+│ ███ ▀█████▀ │
+│ ▀██▄ ▀█▀ │
+│ * ▀██▄ ▄█▄▄ * │
+│ * ▀████▄▄▄████▀ │
+│ ▀▀█████▀▀ │
+│ -+- * │
+│ ▄▀▄ ▄▀▀ █ │
+│ █ █ ▀ ▀▄ █ │
+│ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+│ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+│ │
+│ https://onionshare.org/ │
+╰───────────────────────────────────────────╯
```
## Installing OnionShare CLI
diff --git a/cli/onionshare_cli/__init__.py b/cli/onionshare_cli/__init__.py
index 092e716a..c046e472 100644
--- a/cli/onionshare_cli/__init__.py
+++ b/cli/onionshare_cli/__init__.py
@@ -18,13 +18,22 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import os, sys, time, argparse, threading
+import os
+import sys
+import time
+import argparse
+import threading
from datetime import datetime
from datetime import timedelta
from .common import Common, CannotFindTor
from .web import Web
-from .onion import *
+from .onion import (
+ TorErrorProtocolError,
+ TorTooOldEphemeral,
+ TorTooOldStealth,
+ Onion,
+)
from .onionshare import OnionShare
from .mode_settings import ModeSettings
@@ -43,57 +52,7 @@ def main(cwd=None):
onionshare uses.
"""
common = Common()
-
- # Display OnionShare banner
- print(f"OnionShare {common.version} | https://onionshare.org/")
- reset = "\033[0m"
- purple = "\33[95m"
- print(purple)
- print(" @@@@@@@@@ ")
- print(" @@@@@@@@@@@@@@@@@@@ ")
- print(" @@@@@@@@@@@@@@@@@@@@@@@@@ ")
- print(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ")
- print(
- " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _ "
- )
- print(
- " @@@@@@ @@@@@@@@@@@@@ / _ \\ (_) "
- )
- print(
- " @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __ "
- )
- print(
- " @@@@@@@@ @@@@@@@@@@ | | | | '_ \\| |/ _ \\| '_ \\ "
- )
- print(
- " @@@@@@@@@@@@ @@@@@@@@@@ \\ \\_/ / | | | | (_) | | | | "
- )
- print(
- " @@@@@@@@@@@@@@@@ @@@@@@@@@ \\___/|_| |_|_|\\___/|_| |_| "
- )
- print(
- " @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _ "
- )
- print(
- " @@@@@@@@@@ @@@@@@@@@@@@ / ___| | "
- )
- print(
- " @@@@@@@@@@ @@@@@@@@ \\ `--.| |__ __ _ _ __ ___ "
- )
- print(
- " @@@@@@@@@@@ @ @@@@ `--. \\ '_ \\ / _` | '__/ _ \\"
- )
- print(
- " @@@@@@@@@@@@@ @@@@@@ /\\__/ / | | | (_| | | | __/"
- )
- print(
- " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \\____/|_| |_|\\__,_|_| \\___|"
- )
- print(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ")
- print(" @@@@@@@@@@@@@@@@@@@@@@@@@ ")
- print(" @@@@@@@@@@@@@@@@@@@ ")
- print(" @@@@@@@@@ ")
- print(reset)
+ common.display_banner()
# OnionShare CLI in OSX needs to change current working directory (#132)
if common.platform == "Darwin":
@@ -144,6 +103,12 @@ def main(cwd=None):
)
# General args
parser.add_argument(
+ "--title",
+ metavar="TITLE",
+ default=None,
+ help="Set a title",
+ )
+ parser.add_argument(
"--public",
action="store_true",
dest="public",
@@ -193,6 +158,24 @@ def main(cwd=None):
default=None,
help="Receive files: Save files received to this directory",
)
+ parser.add_argument(
+ "--webhook-url",
+ metavar="webhook_url",
+ default=None,
+ help="Receive files: URL to receive webhook notifications",
+ )
+ parser.add_argument(
+ "--disable-text",
+ action="store_true",
+ dest="disable_text",
+ help="Receive files: Disable receiving text messages",
+ )
+ parser.add_argument(
+ "--disable-files",
+ action="store_true",
+ dest="disable_files",
+ help="Receive files: Disable receiving files",
+ )
# Website args
parser.add_argument(
"--disable_csp",
@@ -228,6 +211,7 @@ def main(cwd=None):
connect_timeout = int(args.connect_timeout)
config_filename = args.config
persistent_filename = args.persistent
+ title = args.title
public = bool(args.public)
autostart_timer = int(args.autostart_timer)
autostop_timer = int(args.autostop_timer)
@@ -235,6 +219,9 @@ def main(cwd=None):
client_auth = bool(args.client_auth)
autostop_sharing = not bool(args.no_autostop_sharing)
data_dir = args.data_dir
+ webhook_url = args.webhook_url
+ disable_text = args.disable_text
+ disable_files = args.disable_files
disable_csp = bool(args.disable_csp)
verbose = bool(args.verbose)
@@ -273,6 +260,7 @@ def main(cwd=None):
if mode_settings.just_created:
# This means the mode settings were just created, not loaded from disk
+ mode_settings.set("general", "title", title)
mode_settings.set("general", "public", public)
mode_settings.set("general", "autostart_timer", autostart_timer)
mode_settings.set("general", "autostop_timer", autostop_timer)
@@ -283,6 +271,10 @@ def main(cwd=None):
if mode == "receive":
if data_dir:
mode_settings.set("receive", "data_dir", data_dir)
+ if webhook_url:
+ mode_settings.set("receive", "webhook_url", webhook_url)
+ mode_settings.set("receive", "disable_text", disable_text)
+ mode_settings.set("receive", "disable_files", disable_files)
if mode == "website":
mode_settings.set("website", "disable_csp", disable_csp)
else:
@@ -325,6 +317,11 @@ def main(cwd=None):
if persistent_filename:
mode_settings.set(mode, "filenames", filenames)
+ # In receive mode, you must allows either text, files, or both
+ if mode == "receive" and disable_text and disable_files:
+ print("You cannot disable both text and files")
+ sys.exit()
+
# Create the Web object
web = Web(common, False, mode_settings, mode)
@@ -348,16 +345,29 @@ def main(cwd=None):
except KeyboardInterrupt:
print("")
sys.exit()
- except Exception as e:
+ except Exception:
sys.exit()
# Start the onionshare app
try:
common.settings.load()
- if not mode_settings.get("general", "public"):
- web.generate_password(mode_settings.get("onion", "password"))
- else:
+
+ if mode_settings.get("general", "public"):
web.password = None
+ else:
+ web.generate_password(mode_settings.get("onion", "password"))
+
+ # Receive mode needs to know the tor proxy details for webhooks
+ if mode == "receive":
+ if local_only:
+ web.proxies = None
+ else:
+ (socks_address, socks_port) = onion.get_tor_socks_port()
+ web.proxies = {
+ "http": f"socks5h://{socks_address}:{socks_port}",
+ "https": f"socks5h://{socks_address}:{socks_port}",
+ }
+
app = OnionShare(common, onion, local_only, autostop_timer)
app.choose_port()
@@ -370,7 +380,7 @@ def main(cwd=None):
)
sys.exit()
- app.start_onion_service(mode, mode_settings, False, True)
+ app.start_onion_service(mode, mode_settings, False)
url = build_url(mode_settings, app, web)
schedule = datetime.now() + timedelta(seconds=autostart_timer)
if mode == "receive":
@@ -379,7 +389,9 @@ def main(cwd=None):
)
print("")
print(
- "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."
+ "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."
)
print("")
if mode_settings.get("general", "client_auth"):
@@ -412,7 +424,7 @@ def main(cwd=None):
except KeyboardInterrupt:
print("")
sys.exit()
- except (TorTooOld, TorErrorProtocolError) as e:
+ except (TorTooOldEphemeral, TorTooOldStealth, TorErrorProtocolError) as e:
print("")
print(e.args[0])
sys.exit()
@@ -430,7 +442,6 @@ def main(cwd=None):
print("Compressing files.")
try:
web.share_mode.set_file_info(filenames)
- app.cleanup_filenames += web.share_mode.cleanup_filenames
except OSError as e:
print(e.strerror)
sys.exit(1)
@@ -473,7 +484,9 @@ def main(cwd=None):
)
print("")
print(
- "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."
+ "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."
)
print("")
@@ -514,8 +527,7 @@ def main(cwd=None):
print("Stopped because auto-stop timer ran out")
web.stop(app.port)
break
- else:
- web.receive_mode.can_upload = False
+ web.receive_mode.can_upload = False
# Allow KeyboardInterrupt exception to be handled with threads
# https://stackoverflow.com/questions/3788208/python-threading-ignores-keyboardinterrupt-exception
time.sleep(0.2)
@@ -523,7 +535,7 @@ def main(cwd=None):
web.stop(app.port)
finally:
# Shutdown
- app.cleanup()
+ web.cleanup()
onion.cleanup()
diff --git a/cli/onionshare_cli/common.py b/cli/onionshare_cli/common.py
index 6e36dbd6..dd92eb0b 100644
--- a/cli/onionshare_cli/common.py
+++ b/cli/onionshare_cli/common.py
@@ -19,18 +19,19 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import base64
import hashlib
-import inspect
import os
import platform
import random
import socket
import sys
-import tempfile
import threading
import time
import shutil
from pkg_resources import resource_filename
+import colorama
+from colorama import Fore, Back, Style
+
from .settings import Settings
@@ -48,6 +49,8 @@ class Common:
def __init__(self, verbose=False):
self.verbose = verbose
+ colorama.init(autoreset=True)
+
# The platform OnionShare is running on
self.platform = platform.system()
if self.platform.endswith("BSD") or self.platform == "DragonFly":
@@ -57,6 +60,224 @@ class Common:
with open(self.get_resource_path("version.txt")) as f:
self.version = f.read().strip()
+ def display_banner(self):
+ """
+ Raw ASCII art example:
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.1 │
+ │ │
+ │ https://onionshare.org/ │
+ ╰───────────────────────────────────────────╯
+ """
+
+ if self.platform == "Windows":
+ pass
+ else:
+ pass
+
+ print(
+ Back.MAGENTA + Fore.WHITE + "╭───────────────────────────────────────────╮"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "▄▄█████▄▄"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▄████▀▀▀████▄"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▀▀█▀ ▀██▄ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "▄█▄ ▀██▄ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▄█████▄ ███"
+ + Fore.LIGHTMAGENTA_EX
+ + " -+- "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ███ ▀█████▀ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▀██▄ ▀█▀ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "▀██▄ ▄█▄▄"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.LIGHTMAGENTA_EX
+ + " * "
+ + Fore.WHITE
+ + "▀████▄▄▄████▀ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▀▀█████▀▀ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.LIGHTMAGENTA_EX
+ + " -+- * "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▄▀▄ ▄▀▀ █ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " █ █ ▀ ▀▄ █ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA + Fore.WHITE + "│ │"
+ )
+ left_spaces = (43 - len(self.version) - 1) // 2
+ right_spaces = left_spaces
+ if left_spaces + len(self.version) + 1 + right_spaces < 43:
+ right_spaces += 1
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + f"{' '*left_spaces}v{self.version}{' '*right_spaces}"
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA + Fore.WHITE + "│ │"
+ )
+ print(
+ Back.MAGENTA
+ + Fore.WHITE
+ + "│"
+ + Fore.WHITE
+ + " https://onionshare.org/ "
+ + Fore.WHITE
+ + "│"
+ )
+ print(
+ Back.MAGENTA + Fore.WHITE + "╰───────────────────────────────────────────╯"
+ )
+ print()
+
def load_settings(self, config=None):
"""
Loading settings, optionally from a custom config json file.
@@ -70,10 +291,11 @@ class Common:
"""
if self.verbose:
timestamp = time.strftime("%b %d %Y %X")
-
- final_msg = f"[{timestamp}] {module}.{func}"
+ final_msg = f"{Fore.LIGHTBLACK_EX + Style.DIM}[{timestamp}]{Style.RESET_ALL} {Fore.WHITE + Style.DIM}{module}.{func}{Style.RESET_ALL}"
if msg:
- final_msg = f"{final_msg}: {msg}"
+ final_msg = (
+ f"{final_msg}{Fore.WHITE + Style.DIM}: {msg}{Style.RESET_ALL}"
+ )
print(final_msg)
def get_resource_path(self, filename):
@@ -129,16 +351,24 @@ class Common:
try:
appdata = os.environ["APPDATA"]
onionshare_data_dir = f"{appdata}\\OnionShare"
- except:
+ except Exception:
# If for some reason we don't have the 'APPDATA' environment variable
# (like running tests in Linux while pretending to be in Windows)
- onionshare_data_dir = os.path.expanduser("~/.config/onionshare")
+ try:
+ xdg_config_home = os.environ["XDG_CONFIG_HOME"]
+ onionshare_data_dir = f"{xdg_config_home}/onionshare"
+ except Exception:
+ onionshare_data_dir = os.path.expanduser("~/.config/onionshare")
elif self.platform == "Darwin":
onionshare_data_dir = os.path.expanduser(
"~/Library/Application Support/OnionShare"
)
else:
- onionshare_data_dir = os.path.expanduser("~/.config/onionshare")
+ try:
+ xdg_config_home = os.environ["XDG_CONFIG_HOME"]
+ onionshare_data_dir = f"{xdg_config_home}/onionshare"
+ except Exception:
+ onionshare_data_dir = os.path.expanduser("~/.config/onionshare")
# Modify the data dir if running tests
if getattr(sys, "onionshare_test_mode", False):
@@ -256,7 +486,7 @@ class Common:
try:
tmpsock.bind(("127.0.0.1", random.randint(min_port, max_port)))
break
- except OSError as e:
+ except OSError:
pass
_, port = tmpsock.getsockname()
return port
diff --git a/cli/onionshare_cli/mode_settings.py b/cli/onionshare_cli/mode_settings.py
index 4f105653..47900997 100644
--- a/cli/onionshare_cli/mode_settings.py
+++ b/cli/onionshare_cli/mode_settings.py
@@ -42,6 +42,7 @@ class ModeSettings:
},
"persistent": {"mode": None, "enabled": False},
"general": {
+ "title": None,
"public": False,
"autostart_timer": False,
"autostop_timer": False,
@@ -50,7 +51,12 @@ class ModeSettings:
"service_id": None,
},
"share": {"autostop_sharing": True, "filenames": []},
- "receive": {"data_dir": self.build_default_receive_data_dir()},
+ "receive": {
+ "data_dir": self.build_default_receive_data_dir(),
+ "webhook_url": None,
+ "disable_text": False,
+ "disable_files": False,
+ },
"website": {"disable_csp": False, "filenames": []},
"chat": {"room": "default"},
}
@@ -123,7 +129,7 @@ class ModeSettings:
self.fill_in_defaults()
self.common.log("ModeSettings", "load", f"loaded {self.filename}")
return
- except:
+ except Exception:
pass
# If loading settings didn't work, create the settings file
diff --git a/cli/onionshare_cli/onion.py b/cli/onionshare_cli/onion.py
index aab2e1ff..f9c7177e 100644
--- a/cli/onionshare_cli/onion.py
+++ b/cli/onionshare_cli/onion.py
@@ -28,11 +28,9 @@ import tempfile
import subprocess
import time
import shlex
-import getpass
import psutil
from distutils.version import LooseVersion as Version
-from .settings import Settings
class TorErrorAutomatic(Exception):
@@ -224,7 +222,7 @@ class Onion(object):
)
try:
self.tor_socks_port = self.common.get_available_port(1000, 65535)
- except:
+ except Exception:
print("OnionShare port not available")
raise PortNotAvailable()
self.tor_torrc = os.path.join(self.tor_data_directory_name, "torrc")
@@ -246,7 +244,7 @@ class Onion(object):
proc.terminate()
proc.wait()
break
- except:
+ except Exception:
pass
if self.common.platform == "Windows" or self.common.platform == "Darwin":
@@ -257,7 +255,7 @@ class Onion(object):
torrc_template += "ControlPort {{control_port}}\n"
try:
self.tor_control_port = self.common.get_available_port(1000, 65535)
- except:
+ except Exception:
print("OnionShare port not available")
raise PortNotAvailable()
self.tor_control_socket = None
@@ -430,7 +428,7 @@ class Onion(object):
try:
self.c = Controller.from_port(port=int(env_port))
found_tor = True
- except:
+ except Exception:
pass
else:
@@ -440,7 +438,7 @@ class Onion(object):
for port in ports:
self.c = Controller.from_port(port=port)
found_tor = True
- except:
+ except Exception:
pass
# If this still didn't work, try guessing the default socket file path
@@ -454,7 +452,7 @@ class Onion(object):
self.c = Controller.from_socket_file(path=socket_file_path)
found_tor = True
- except:
+ except Exception:
pass
# If connecting to default control ports failed, so let's try
@@ -476,14 +474,14 @@ class Onion(object):
self.c = Controller.from_socket_file(path=socket_file_path)
- except:
+ except Exception:
print(automatic_error)
raise TorErrorAutomatic()
# Try authenticating
try:
self.c.authenticate()
- except:
+ except Exception:
print(automatic_error)
raise TorErrorAutomatic()
@@ -506,7 +504,7 @@ class Onion(object):
print(invalid_settings_error)
raise TorErrorInvalidSetting()
- except:
+ except Exception:
if self.settings.get("connection_type") == "control_port":
print(
"Can't connect to the Tor controller at {}:{}.".format(
@@ -518,13 +516,12 @@ class Onion(object):
self.settings.get("control_port_address"),
self.settings.get("control_port_port"),
)
- else:
- print(
- "Can't connect to the Tor controller using socket file {}.".format(
- self.settings.get("socket_file_path")
- )
+ print(
+ "Can't connect to the Tor controller using socket file {}.".format(
+ self.settings.get("socket_file_path")
)
- raise TorErrorSocketFile(self.settings.get("socket_file_path"))
+ )
+ raise TorErrorSocketFile(self.settings.get("socket_file_path"))
# Try authenticating
try:
@@ -585,7 +582,7 @@ class Onion(object):
tmp_service_id = res.service_id
self.c.remove_ephemeral_hidden_service(tmp_service_id)
self.supports_stealth = True
- except:
+ except Exception:
# ephemeral stealth onion services are not supported
self.supports_stealth = False
@@ -654,7 +651,7 @@ class Onion(object):
key_content = "RSA1024"
# v3 onions don't yet support basic auth. Our ticket:
- # https://github.com/micahflee/onionshare/issues/697
+ # https://github.com/onionshare/onionshare/issues/697
if (
key_type == "NEW"
and key_content == "ED25519-V3"
@@ -711,7 +708,7 @@ class Onion(object):
self.c.remove_ephemeral_hidden_service(
mode_settings.get("general", "service_id")
)
- except:
+ except Exception:
self.common.log(
"Onion", "stop_onion_service", f"failed to remove {onion_host}"
)
@@ -732,12 +729,12 @@ class Onion(object):
"Onion", "cleanup", f"trying to remove onion {onion_host}"
)
self.c.remove_ephemeral_hidden_service(service_id)
- except:
+ except Exception:
self.common.log(
"Onion", "cleanup", f"failed to remove onion {onion_host}"
)
pass
- except:
+ except Exception:
pass
if stop_tor:
@@ -747,21 +744,21 @@ class Onion(object):
# Wait for Tor rendezvous circuits to close
# Catch exceptions to prevent crash on Ctrl-C
try:
- rendevouz_circuit_ids = []
+ rendezvous_circuit_ids = []
for c in self.c.get_circuits():
if (
c.purpose == "HS_SERVICE_REND"
and c.rend_query in self.graceful_close_onions
):
- rendevouz_circuit_ids.append(c.id)
+ rendezvous_circuit_ids.append(c.id)
- symbols = [c for c in "\\|/-"]
+ symbols = list("\\|/-")
symbols_i = 0
while True:
num_rend_circuits = 0
for c in self.c.get_circuits():
- if c.id in rendevouz_circuit_ids:
+ if c.id in rendezvous_circuit_ids:
num_rend_circuits += 1
if num_rend_circuits == 0:
@@ -780,7 +777,7 @@ class Onion(object):
)
symbols_i = (symbols_i + 1) % len(symbols)
time.sleep(1)
- except:
+ except Exception:
pass
self.tor_proc.terminate()
@@ -800,7 +797,7 @@ class Onion(object):
"cleanup",
"Tried to kill tor process but it's still running",
)
- except:
+ except Exception:
self.common.log(
"Onion", "cleanup", "Exception while killing tor process"
)
@@ -813,7 +810,7 @@ class Onion(object):
# Delete the temporary tor data directory
if self.use_tmp_dir:
self.tor_data_directory.cleanup()
- except:
+ except Exception:
pass
def get_tor_socks_port(self):
@@ -837,9 +834,6 @@ class Onion(object):
# Import the key
key = RSA.importKey(base64.b64decode(key))
# Is this a v2 Onion key? (1024 bits) If so, we should keep using it.
- if key.n.bit_length() == 1024:
- return True
- else:
- return False
- except:
+ return key.n.bit_length() == 1024
+ except Exception:
return False
diff --git a/cli/onionshare_cli/onionshare.py b/cli/onionshare_cli/onionshare.py
index 30eae3f3..bd94100f 100644
--- a/cli/onionshare_cli/onionshare.py
+++ b/cli/onionshare_cli/onionshare.py
@@ -18,9 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import os, shutil
-
-from . import common
+import os
from .common import AutoStopTimer
@@ -59,7 +57,7 @@ class OnionShare(object):
"""
try:
self.port = self.common.get_available_port(17600, 17650)
- except:
+ except Exception:
raise OSError("Cannot find an available OnionShare port")
def start_onion_service(self, mode, mode_settings, await_publication=True):
@@ -90,21 +88,3 @@ class OnionShare(object):
Stop the onion service
"""
self.onion.stop_onion_service(mode_settings)
-
- def cleanup(self):
- """
- Shut everything down and clean up temporary files, etc.
- """
- self.common.log("OnionShare", "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:
- # Don't crash if file is still in use
- pass
- self.cleanup_filenames = []
diff --git a/cli/onionshare_cli/resources/static/css/style.css b/cli/onionshare_cli/resources/static/css/style.css
index 88d9cb79..7cec9738 100644
--- a/cli/onionshare_cli/resources/static/css/style.css
+++ b/cli/onionshare_cli/resources/static/css/style.css
@@ -229,6 +229,7 @@ ul.breadcrumbs li a:link, ul.breadcrumbs li a:visited {
display: block;
}
.chat-wrapper .message {
+ word-break: break-word;
font-weight: normal;
display: block;
margin-bottom: 0.3em;
@@ -285,6 +286,13 @@ ul.breadcrumbs li a:link, ul.breadcrumbs li a:visited {
margin: 0 0 20px 0;
}
+.upload-wrapper textarea {
+ max-width: 95%;
+ width: 600px;
+ height: 150px;
+ padding: 10px;
+}
+
div#uploads {
width: 800px;
max-width: 90%;
diff --git a/cli/onionshare_cli/resources/static/js/chat.js b/cli/onionshare_cli/resources/static/js/chat.js
index 258b020b..de64c094 100644
--- a/cli/onionshare_cli/resources/static/js/chat.js
+++ b/cli/onionshare_cli/resources/static/js/chat.js
@@ -88,7 +88,7 @@ var emitMessage = function (socket) {
var updateUsername = function (socket) {
var username = $('#username').val();
- if (!checkUsernameExists(username)) {
+ if (!checkUsernameExists(username) && !checkUsernameTooLong(username)) {
$.ajax({
method: 'POST',
url: `http://${document.domain}:${location.port}/update-session-username`,
@@ -133,6 +133,15 @@ var checkUsernameExists = function (username) {
return false;
}
+var checkUsernameTooLong = function (username) {
+ $('#username-error').text('');
+ if (username.length > 128) {
+ $('#username-error').text('Please choose a shorter username.');
+ return true;
+ }
+ return false;
+}
+
var getScrollDiffBefore = function () {
return $('#chat').scrollTop() - ($('#chat')[0].scrollHeight - $('#chat')[0].offsetHeight);
}
diff --git a/cli/onionshare_cli/resources/static/js/receive.js b/cli/onionshare_cli/resources/static/js/receive.js
index eac67412..487b8e1d 100644
--- a/cli/onionshare_cli/resources/static/js/receive.js
+++ b/cli/onionshare_cli/resources/static/js/receive.js
@@ -1,24 +1,35 @@
-$(function(){
+$(function () {
// Add a flash message
- var flash = function(category, message) {
+ var flash = function (category, message) {
$('#flashes').append($('<li>').addClass(category).text(message));
};
var scriptSrc = document.getElementById('receive-script').src;
- var staticImgPath = scriptSrc.substr(0, scriptSrc.lastIndexOf( '/' )+1).replace('js', 'img');
+ var staticImgPath = scriptSrc.substr(0, scriptSrc.lastIndexOf('/') + 1).replace('js', 'img');
// Intercept submitting the form
- $('#send').submit(function(event){
+ $('#send').submit(function (event) {
event.preventDefault();
- // Create form data, and list of filenames
- var files = $('#file-select').get(0).files;
- var filenames = [];
+ // Build the form data
var formData = new FormData();
- for(var i = 0; i < files.length; i++) {
- var file = files[i];
- filenames.push(file.name);
- formData.append('file[]', file, file.name);
+
+ // Files
+ var filenames = [];
+ var $fileSelect = $('#file-select');
+ if ($fileSelect.length > 0) {
+ var files = $fileSelect.get(0).files;
+ for (var i = 0; i < files.length; i++) {
+ var file = files[i];
+ filenames.push(file.name);
+ formData.append('file[]', file, file.name);
+ }
+ }
+
+ // Text message
+ var $text = $('#text');
+ if ($text.length > 0) {
+ formData.append("text", $text.val())
}
// Reset the upload form
@@ -28,9 +39,9 @@ $(function(){
// have access to the the XMLHttpRequest object
var ajax = new XMLHttpRequest();
- ajax.upload.addEventListener('progress', function(event){
+ ajax.upload.addEventListener('progress', function (event) {
// Update progress bar for this specific upload
- if(event.lengthComputable) {
+ if (event.lengthComputable) {
$('progress', ajax.$upload_div).attr({
value: event.loaded,
max: event.total,
@@ -39,13 +50,13 @@ $(function(){
// If it's finished sending all data to the first Tor node, remove cancel button
// and update the status
- if(event.loaded == event.total) {
+ if (event.loaded == event.total) {
$('.cancel', ajax.$upload_div).remove();
$('.upload-status', ajax.$upload_div).html('<img src="' + staticImgPath + '/ajax.gif" alt="" /> Waiting for data to finish traversing Tor network ...');
}
}, false);
- ajax.addEventListener('load', function(event){
+ ajax.addEventListener('load', function (event) {
// Remove the upload div
ajax.$upload_div.remove();
@@ -54,38 +65,38 @@ $(function(){
var response = JSON.parse(ajax.response);
// The 'new_body' response replaces the whole HTML document and ends
- if('new_body' in response) {
+ if ('new_body' in response) {
$('body').html(response['new_body']);
return;
}
// Show error flashes
- if('error_flashes' in response) {
- for(var i=0; i<response['error_flashes'].length; i++) {
+ if ('error_flashes' in response) {
+ for (var i = 0; i < response['error_flashes'].length; i++) {
flash('error', response['error_flashes'][i]);
}
}
// Show info flashes
- if('info_flashes' in response) {
- for(var i=0; i<response['info_flashes'].length; i++) {
+ if ('info_flashes' in response) {
+ for (var i = 0; i < response['info_flashes'].length; i++) {
flash('info', response['info_flashes'][i]);
}
}
- } catch(e) {
- flash('error', 'Invalid response from server: '+data);
+ } catch (e) {
+ flash('error', 'Invalid response from server: ' + data);
}
}, false);
- ajax.addEventListener('error', function(event){
- flash('error', 'Error uploading: '+filenames.join(', '));
+ ajax.addEventListener('error', function (event) {
+ flash('error', 'Error uploading: ' + filenames.join(', '));
// Remove the upload div
ajax.$upload_div.remove()
}, false);
- ajax.addEventListener('abort', function(event){
- flash('error', 'Upload aborted: '+filenames.join(', '));
+ ajax.addEventListener('abort', function (event) {
+ flash('error', 'Upload aborted: ' + filenames.join(', '));
}, false);
// Make the upload div
@@ -114,7 +125,7 @@ $(function(){
)
.append($progress);
- $cancel_button.click(function(){
+ $cancel_button.click(function () {
// Abort the upload, and remove the upload div
ajax.abort();
$upload_div.remove()
diff --git a/cli/onionshare_cli/resources/templates/500.html b/cli/onionshare_cli/resources/templates/500.html
new file mode 100644
index 00000000..9f6727d2
--- /dev/null
+++ b/cli/onionshare_cli/resources/templates/500.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>OnionShare: An error occurred</title>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
+ <link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
+</head>
+
+<body>
+ <div class="info-wrapper">
+ <div class="info">
+ <p><img class="logo" src="{{ static_url_path }}/img/logo_large.png" title="OnionShare"></p>
+ <p class="info-header">Sorry, an unexpected error seems to have occurred, and your request didn't succeed.</p>
+ </div>
+ </div>
+</body>
+
+</html>
diff --git a/cli/onionshare_cli/resources/templates/chat.html b/cli/onionshare_cli/resources/templates/chat.html
index b4443c09..48434d99 100644
--- a/cli/onionshare_cli/resources/templates/chat.html
+++ b/cli/onionshare_cli/resources/templates/chat.html
@@ -2,7 +2,7 @@
<html>
<head>
- <title>OnionShare</title>
+ <title>{% if title %}{{ title }}{% else %}OnionShare Chat{% endif %}</title>
<link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
<link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
</head>
@@ -11,7 +11,7 @@
<header class="clearfix">
<img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
+ <h1>{% if title %}{{ title }}{% else %}OnionShare Chat{% endif %}</h1>
</header>
<noscript>
<p>
@@ -23,6 +23,7 @@
<div class="chat-container no-js">
<div class="chat-users">
<div class="editable-username">
+ <label for="username">Your username:</label>
<input id="username" value="{{ username }}" />
<p id="username-error"></p>
</div>
@@ -43,4 +44,4 @@
<script async src="{{ static_url_path }}/js/chat.js"></script>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/cli/onionshare_cli/resources/templates/listing.html b/cli/onionshare_cli/resources/templates/listing.html
index e1dd6d9f..8e0dedf7 100644
--- a/cli/onionshare_cli/resources/templates/listing.html
+++ b/cli/onionshare_cli/resources/templates/listing.html
@@ -2,7 +2,7 @@
<html>
<head>
- <title>OnionShare</title>
+ <title>{% if title %}{{ title }}{% else %}OnionShare{% endif %}</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon" />
@@ -11,9 +11,11 @@
<body>
- <header class="clearfix">
- <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
+ <header class="d-flex">
+ <div class="logo-container">
+ <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
+ <h1>{% if title %}{{ title }}{% else %}OnionShare{% endif %}</h1>
+ </div>
</header>
{% if breadcrumbs %}
@@ -23,37 +25,36 @@
</ul>
{% endif %}
- <table class="file-list" id="file-list">
- <tr>
- <th id="filename-header">Filename</th>
- <th id="size-header">Size</th>
- <th></th>
- </tr>
+ <div class="file-list" id="file-list">
+ <div class="d-flex">
+ <div id="filename-header" class="heading">Filename</div>
+ <div id="size-header" class="heading">Size</div>
+ </div>
{% for info in dirs %}
- <tr>
- <td>
+ <div class="d-flex">
+ <div>
<img width="30" height="30" title="" alt="" src="{{ static_url_path }}/img/web_folder.png" />
<a href="{{ info.link }}">
- {{ info.basename }}
+ <span>{{ info.basename }}</span>
</a>
- </td>
- <td>&mdash;</td>
- </tr>
+ </div>
+ <div>&mdash;</div>
+ </div>
{% endfor %}
{% for info in files %}
- <tr>
- <td>
+ <div class="d-flex">
+ <div>
<img width="30" height="30" title="" alt="" src="{{ static_url_path }}/img/web_file.png" />
<a href="{{ info.link }}">
- {{ info.basename }}
+ <span>{{ info.basename }}</span>
</a>
- </td>
- <td>{{ info.size_human }}</td>
- </tr>
+ </div>
+ <div>{{ info.size_human }}</div>
+ </div>
{% endfor %}
- </table>
+ </div>
</body>
</html> \ No newline at end of file
diff --git a/cli/onionshare_cli/resources/templates/receive.html b/cli/onionshare_cli/resources/templates/receive.html
index 20f4bb7e..159bfac5 100644
--- a/cli/onionshare_cli/resources/templates/receive.html
+++ b/cli/onionshare_cli/resources/templates/receive.html
@@ -1,46 +1,66 @@
<!DOCTYPE html>
<html>
- <head>
- <title>OnionShare</title>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
- <link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
- </head>
- <body>
-
- <header class="clearfix">
- <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
- </header>
-
- <div class="upload-wrapper">
- <p><img class="logo" src="{{ static_url_path }}/img/logo_large.png" title="OnionShare"></p>
-
- <p class="upload-header">Send Files</p>
- <p class="upload-description">Select the files you want to send, then click "Send Files"...</p>
-
- <div id="uploads"></div>
-
- <div>
- <ul id="flashes" class="flashes">
- {% with messages = get_flashed_messages(with_categories=true) %}
- {% if messages %}
- {% for category, message in messages %}
- <li class="{{ category }}">{{ message }}</li>
- {% endfor %}
- {% endif %}
- {% endwith %}
- </ul>
- </div>
-
- <form id="send" method="post" enctype="multipart/form-data" action="/upload">
- <p><input type="file" id="file-select" name="file[]" multiple /></p>
- <p><button type="submit" id="send-button" class="button">Send Files</button></p>
- </form>
+<head>
+ <title>{% if title %}{{ title }}{% else %}OnionShare Dropbox{% endif %}</title>
+ <meta charset="utf-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
+ <link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
+</head>
+
+<body>
+
+ <header class="clearfix">
+ <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
+ <h1>{% if title %}{{ title }}{% else %}OnionShare Dropbox{% endif %}</h1>
+ </header>
+
+ <div class="upload-wrapper">
+ <p><img class="logo" src="{{ static_url_path }}/img/logo_large.png" title="OnionShare"></p>
+
+ {% if not disable_text and not disable_files %}
+ <p class="upload-header">Submit Files or Messages</p>
+ <p class="upload-description">You can submit files, a message, or both.</p>
+ <p class="upload-description">Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.</p>
+ {% endif %}
+ {% if not disable_text and disable_files %}
+ <p class="upload-header">Submit Messages</p>
+ <p class="upload-description">You can submit a message.</p>
+ <p class="upload-description">Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.</p>
+ {% endif %}
+ {% if disable_text and not disable_files %}
+ <p class="upload-header">Submit Files</p>
+ <p class="upload-description">You can submit files</p>
+ {% endif %}
+
+ <div id="uploads"></div>
+
+ <div>
+ <ul id="flashes" class="flashes">
+ {% with messages = get_flashed_messages(with_categories=true) %}
+ {% if messages %}
+ {% for category, message in messages %}
+ <li class="{{ category }}">{{ message }}</li>
+ {% endfor %}
+ {% endif %}
+ {% endwith %}
+ </ul>
</div>
- <script src="{{ static_url_path }}/js/jquery-3.5.1.min.js"></script>
- <script async src="{{ static_url_path }}/js/receive.js" id="receive-script"></script>
- </body>
+
+ <form id="send" method="post" enctype="multipart/form-data" action="/upload">
+ {% if not disable_files %}
+ <p><input type="file" id="file-select" name="file[]" multiple /></p>
+ {% endif %}
+ {% if not disable_text %}
+ <p><textarea id="text" name="text" placeholder="Write a message"></textarea></p>
+ {% endif %}
+ <p><button type="submit" id="send-button" class="button">Submit</button></p>
+ </form>
+
+ </div>
+ <script src="{{ static_url_path }}/js/jquery-3.5.1.min.js"></script>
+ <script async src="{{ static_url_path }}/js/receive.js" id="receive-script"></script>
+</body>
+
</html>
diff --git a/cli/onionshare_cli/resources/templates/send.html b/cli/onionshare_cli/resources/templates/send.html
index dd30bfdd..bd9bd631 100644
--- a/cli/onionshare_cli/resources/templates/send.html
+++ b/cli/onionshare_cli/resources/templates/send.html
@@ -2,9 +2,9 @@
<html>
<head>
- <title>OnionShare</title>
+ <title>{% if title %}{{ title }}{% else %}OnionShare{% endif %}</title>
<meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
<link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
<meta name="onionshare-filename" content="{{ filename }}">
@@ -16,7 +16,7 @@
<header class="d-flex">
<div class="logo-container">
<img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
+ <h1>{% if title %}{{ title }}{% else %}OnionShare{% endif %}</h1>
</div>
<div class="information d-flex">
<div>Total size: <strong>{{ filesize_human }}</strong> {% if is_zipped %} (compressed){% endif %}</div>
@@ -25,10 +25,11 @@
</header>
{% if breadcrumbs %}
- <ul class="breadcrumbs">
- {% for breadcrumb in breadcrumbs %}<li><a href="{{ breadcrumb[1] }}">{{ breadcrumb[0] }}</a> <span class="sep">&#8227;</span></li>{% endfor %}<li>{{ breadcrumbs_leaf }}</li>
- </ul>
- {% endif %}
+ <ul class="breadcrumbs">
+ {% for breadcrumb in breadcrumbs %}<li><a href="{{ breadcrumb[1] }}">{{ breadcrumb[0] }}</a> <span
+ class="sep">&#8227;</span></li>{% endfor %}<li>{{ breadcrumbs_leaf }}</li>
+ </ul>
+ {% endif %}
<div class="file-list" id="file-list">
<div class="d-flex">
@@ -66,4 +67,4 @@
<script async src="{{ static_url_path }}/js/send.js" charset="utf-8"></script>
</body>
-</html>
+</html> \ No newline at end of file
diff --git a/cli/onionshare_cli/resources/templates/thankyou.html b/cli/onionshare_cli/resources/templates/thankyou.html
index aa0bc553..8e92386d 100644
--- a/cli/onionshare_cli/resources/templates/thankyou.html
+++ b/cli/onionshare_cli/resources/templates/thankyou.html
@@ -4,7 +4,7 @@
<head>
<title>OnionShare is closed</title>
<meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="viewport" content="width=device-width, initial-scale=1">
<link href="{{ static_url_path }}/img/favicon.ico" rel="icon" type="image/x-icon">
<link rel="stylesheet" rel="subresource" type="text/css" href="{{ static_url_path }}/css/style.css" media="all">
</head>
@@ -12,7 +12,7 @@
<body>
<header class="clearfix">
<img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
+ <h1>{% if title %}{{ title }}{% else %}OnionShare{% endif %}</h1>
</header>
<div class="info-wrapper">
@@ -24,4 +24,4 @@
</div>
</body>
-</html>
+</html> \ No newline at end of file
diff --git a/cli/onionshare_cli/resources/torrc_template-obfs4 b/cli/onionshare_cli/resources/torrc_template-obfs4
index 306c456c..8c52a011 100644
--- a/cli/onionshare_cli/resources/torrc_template-obfs4
+++ b/cli/onionshare_cli/resources/torrc_template-obfs4
@@ -1,27 +1,16 @@
-Bridge obfs4 154.35.22.10:80 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0
-Bridge obfs4 83.212.101.3:50002 A09D536DD1752D542E1FBB3C9CE4449D51298239 cert=lPRQ/MXdD1t5SRZ9MquYQNT9m5DV757jtdXdlePmRCudUU9CFUOX1Tm7/meFSyPOsud7Cw iat-mode=0
-Bridge obfs4 109.105.109.165:10527 8DFCD8FB3285E855F5A55EDDA35696C743ABFC4E cert=Bvg/itxeL4TWKLP6N1MaQzSOC6tcRIBv6q57DYAZc3b2AzuM+/TfB7mqTFEfXILCjEwzVA iat-mode=1
-Bridge obfs4 154.35.22.11:80 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0
-Bridge obfs4 37.218.245.14:38224 D9A82D2F9C2F65A18407B1D2B764F130847F8B5D cert=bjRaMrr1BRiAW8IE9U5z27fQaYgOhX1UCmOpg2pFpoMvo6ZgQMzLsaTzzQNTlm7hNcb+Sg iat-mode=0
-Bridge obfs4 154.35.22.9:443 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0
-Bridge obfs4 154.35.22.11:443 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0
-Bridge obfs4 154.35.22.13:443 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0
-Bridge obfs4 154.35.22.10:443 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0
-Bridge obfs4 154.35.22.9:80 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0
-Bridge obfs4 192.99.11.54:443 7B126FAB960E5AC6A629C729434FF84FB5074EC2 cert=VW5f8+IBUWpPFxF+rsiVy2wXkyTQG7vEd+rHeN2jV5LIDNu8wMNEOqZXPwHdwMVEBdqXEw iat-mode=0
-Bridge obfs4 154.35.22.13:16815 FE7840FE1E21FE0A0639ED176EDA00A3ECA1E34D cert=fKnzxr+m+jWXXQGCaXe4f2gGoPXMzbL+bTBbXMYXuK0tMotd+nXyS33y2mONZWU29l81CA iat-mode=0
-Bridge obfs4 85.31.186.26:443 91A6354697E6B02A386312F68D82CF86824D3606 cert=PBwr+S8JTVZo6MPdHnkTwXJPILWADLqfMGoVvhZClMq/Urndyd42BwX9YFJHZnBB3H0XCw iat-mode=0
-Bridge obfs4 38.229.33.83:80 0BAC39417268B96B9F514E7F63FA6FBA1A788955 cert=VwEFpk9F/UN9JED7XpG1XOjm/O8ZCXK80oPecgWnNDZDv5pdkhq1OpbAH0wNqOT6H6BmRQ iat-mode=1
-Bridge obfs4 154.35.22.11:16488 A832D176ECD5C7C6B58825AE22FC4C90FA249637 cert=YPbQqXPiqTUBfjGFLpm9JYEFTBvnzEJDKJxXG5Sxzrr/v2qrhGU4Jls9lHjLAhqpXaEfZw iat-mode=0
-Bridge obfs4 154.35.22.9:12166 C73ADBAC8ADFDBF0FC0F3F4E8091C0107D093716 cert=gEGKc5WN/bSjFa6UkG9hOcft1tuK+cV8hbZ0H6cqXiMPLqSbCh2Q3PHe5OOr6oMVORhoJA iat-mode=0
-Bridge obfs4 109.105.109.147:13764 BBB28DF0F201E706BE564EFE690FE9577DD8386D cert=KfMQN/tNMFdda61hMgpiMI7pbwU1T+wxjTulYnfw+4sgvG0zSH7N7fwT10BI8MUdAD7iJA iat-mode=2
-Bridge obfs4 38.229.1.78:80 C8CBDB2464FC9804A69531437BCF2BE31FDD2EE4 cert=Hmyfd2ev46gGY7NoVxA9ngrPF2zCZtzskRTzoWXbxNkzeVnGFPWmrTtILRyqCTjHR+s9dg iat-mode=1
-Bridge obfs4 [2001:470:b381:bfff:216:3eff:fe23:d6c3]:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1
-Bridge obfs4 85.17.30.79:443 FC259A04A328A07FED1413E9FC6526530D9FD87A cert=RutxZlu8BtyP+y0NX7bAVD41+J/qXNhHUrKjFkRSdiBAhIHIQLhKQ2HxESAKZprn/lR3KA iat-mode=0
-Bridge obfs4 154.35.22.10:15937 8FB9F4319E89E5C6223052AA525A192AFBC85D55 cert=GGGS1TX4R81m3r0HBl79wKy1OtPPNR2CZUIrHjkRg65Vc2VR8fOyo64f9kmT1UAFG7j0HQ iat-mode=0
-Bridge obfs4 37.218.240.34:40035 88CD36D45A35271963EF82E511C8827A24730913 cert=eGXYfWODcgqIdPJ+rRupg4GGvVGfh25FWaIXZkit206OSngsp7GAIiGIXOJJROMxEqFKJg iat-mode=1
Bridge obfs4 192.95.36.142:443 CDF2E852BF539B82BD10E27E9115A31734E378C2 cert=qUVQ0srL1JI/vO6V6m/24anYXiJD3QP2HgzUKQtQ7GRqqUvs7P+tG43RtAqdhLOALP7DJQ iat-mode=1
-Bridge obfs4 154.35.22.12:80 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg iat-mode=0
+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 154.35.22.12:4304 00DC6C4FA49A65BD1472993CF6730D54F11E0DBB cert=N86E9hKXXXVz6G7w2z8wFfhIDztDAzZ/3poxVePHEYjbKDWzjkRDccFMAnhK75fc65pYSg 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/version.txt b/cli/onionshare_cli/resources/version.txt
index a6254504..45674f16 100644
--- a/cli/onionshare_cli/resources/version.txt
+++ b/cli/onionshare_cli/resources/version.txt
@@ -1 +1 @@
-2.3.1 \ No newline at end of file
+2.3.3 \ No newline at end of file
diff --git a/cli/onionshare_cli/settings.py b/cli/onionshare_cli/settings.py
index a655d46c..137b690e 100644
--- a/cli/onionshare_cli/settings.py
+++ b/cli/onionshare_cli/settings.py
@@ -20,15 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import json
import os
-import platform
import locale
-try:
- # We only need pwd module in macOS, and it's not available in Windows
- import pwd
-except:
- pass
-
class Settings(object):
"""
@@ -71,25 +64,27 @@ class Settings(object):
"da": "Dansk", # Danish
"nl": "Nederlands", # Dutch
"en": "English", # English
- "fi": "Suomi", # Finnish
+ # "fi": "Suomi", # Finnish
"fr": "Français", # French
"gl": "Galego", # Galician
"de": "Deutsch", # German
"el": "Ελληνικά", # Greek
"is": "Íslenska", # Icelandic
+ "id": "Bahasa Indonesia", # Indonesian
# "ga": "Gaeilge", # Irish
"it": "Italiano", # Italian
"ja": "日本語", # Japanese
"ckb": "Soranî", # Kurdish (Central)
+ "lt": "Lietuvių Kalba", # Lithuanian
"nb_NO": "Norsk Bokmål", # Norwegian Bokmål
# "fa": "فارسی", # Persian
"pl": "Polski", # Polish
"pt_BR": "Português (Brasil)", # Portuguese Brazil
"pt_PT": "Português (Portugal)", # Portuguese Portugal
- "sk": "Slovenčina", # Slovak
# "ro": "Română", # Romanian
"ru": "Русский", # Russian
- # "sr_Latn": "Srpska (latinica)", # Serbian (latin)
+ "sr_Latn": "Srpska (latinica)", # Serbian (latin)
+ "sk": "Slovenčina", # Slovak
"es": "Español", # Spanish
"sv": "Svenska", # Swedish
# "te": "తెలుగు", # Telugu
@@ -116,6 +111,7 @@ class Settings(object):
"tor_bridges_use_custom_bridges": "",
"persistent_tabs": [],
"locale": None, # this gets defined in fill_in_defaults()
+ "theme": 0,
}
self._settings = {}
self.fill_in_defaults()
@@ -167,13 +163,13 @@ class Settings(object):
with open(self.filename, "r") as f:
self._settings = json.load(f)
self.fill_in_defaults()
- except:
+ except Exception:
pass
# Make sure data_dir exists
try:
os.makedirs(self.get("data_dir"), exist_ok=True)
- except:
+ except Exception:
pass
def save(self):
@@ -192,7 +188,7 @@ class Settings(object):
if key == "control_port_port" or key == "socks_port":
try:
val = int(val)
- except:
+ except Exception:
if key == "control_port_port":
val = self.default_settings["control_port_port"]
elif key == "socks_port":
diff --git a/cli/onionshare_cli/web/chat_mode.py b/cli/onionshare_cli/web/chat_mode.py
index d4c57438..f6dc2d1a 100644
--- a/cli/onionshare_cli/web/chat_mode.py
+++ b/cli/onionshare_cli/web/chat_mode.py
@@ -18,16 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-from flask import (
- Request,
- request,
- render_template,
- make_response,
- jsonify,
- redirect,
- session,
-)
-from werkzeug.utils import secure_filename
+from flask import request, render_template, make_response, jsonify, session
from flask_socketio import emit, join_room, leave_room
@@ -48,6 +39,12 @@ class ChatModeWeb:
# This tracks the history id
self.cur_history_id = 0
+ # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED
+ # and maybe other events when requests come in to this mode
+ # Chat mode has no concept of individual file requests that
+ # turn into history widgets in the GUI, so set it to False
+ self.supports_file_requests = False
+
self.define_routes()
def define_routes(self):
@@ -55,7 +52,7 @@ class ChatModeWeb:
The web app routes for chatting
"""
- @self.web.app.route("/")
+ @self.web.app.route("/", methods=["GET"], provide_automatic_options=False)
def index():
history_id = self.cur_history_id
self.cur_history_id += 1
@@ -76,31 +73,45 @@ class ChatModeWeb:
"chat.html",
static_url_path=self.web.static_url_path,
username=session.get("name"),
+ title=self.web.settings.get("general", "title"),
)
)
return self.web.add_security_headers(r)
- @self.web.app.route("/update-session-username", methods=["POST"])
+ @self.web.app.route("/update-session-username", methods=["POST"], provide_automatic_options=False)
def update_session_username():
history_id = self.cur_history_id
data = request.get_json()
if (
data.get("username", "")
and data.get("username", "") not in self.connected_users
+ and len(data.get("username", "")) < 128
):
session["name"] = data.get("username", session.get("name"))
- self.web.add_request(
- request.path,
- {"id": history_id, "status_code": 200},
- )
+ self.web.add_request(
+ request.path,
+ {"id": history_id, "status_code": 200},
+ )
- self.web.add_request(self.web.REQUEST_LOAD, request.path)
- r = make_response(
- jsonify(
- username=session.get("name"),
- success=True,
+ self.web.add_request(self.web.REQUEST_LOAD, request.path)
+ r = make_response(
+ jsonify(
+ username=session.get("name"),
+ success=True,
+ )
+ )
+ else:
+ self.web.add_request(
+ request.path,
+ {"id": history_id, "status_code": 403},
+ )
+
+ r = make_response(
+ jsonify(
+ username=session.get("name"),
+ success=False,
+ )
)
- )
return self.web.add_security_headers(r)
@self.web.socketio.on("joined", namespace="/chat")
diff --git a/cli/onionshare_cli/web/receive_mode.py b/cli/onionshare_cli/web/receive_mode.py
index 62415578..76abb0a8 100644
--- a/cli/onionshare_cli/web/receive_mode.py
+++ b/cli/onionshare_cli/web/receive_mode.py
@@ -21,10 +21,31 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
import tempfile
import json
+import requests
from datetime import datetime
from flask import Request, request, render_template, make_response, flash, redirect
from werkzeug.utils import secure_filename
+# Receive mode uses a special flask requests object, ReceiveModeRequest, in
+# order to keep track of upload progress. Here's what happens when someone
+# uploads files:
+# - new ReceiveModeRequest object is created
+# - ReceiveModeRequest.__init__
+# - creates a directory based on the timestamp
+# - creates empty self.progress = dict, which will map uploaded files to their upload progress
+# - ReceiveModeRequest._get_file_stream
+# - called for each file that gets upload
+# - the first time, send REQUEST_STARTED to GUI, and append to self.web.receive_mode.uploads_in_progress
+# - updates self.progress[self.filename] for the current file
+# - uses custom ReceiveModeFile to save file to disk
+# - ReceiveModeRequest.file_write_func called on each write
+# - Display progress in CLI, and send REQUEST_PROGRESS to GUI
+# - ReceiveModeRequest.file_close_func called when each file closes
+# - self.progress[filename]["complete"] = True
+# - ReceiveModeRequest.close
+# - send either REQUEST_UPLOAD_CANCELED or REQUEST_UPLOAD_FINISHED to GUI
+# - remove from self.web.receive_mode.uploads_in_progress
+
class ReceiveModeWeb:
"""
@@ -43,6 +64,10 @@ class ReceiveModeWeb:
# This tracks the history id
self.cur_history_id = 0
+ # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED
+ # and maybe other events when requests come in to this mode
+ self.supports_file_requests = True
+
self.define_routes()
def define_routes(self):
@@ -50,7 +75,7 @@ class ReceiveModeWeb:
The web app routes for receiving files
"""
- @self.web.app.route("/")
+ @self.web.app.route("/", methods=["GET"], provide_automatic_options=False)
def index():
history_id = self.cur_history_id
self.cur_history_id += 1
@@ -63,43 +88,73 @@ class ReceiveModeWeb:
self.web.add_request(self.web.REQUEST_LOAD, request.path)
r = make_response(
render_template(
- "receive.html", static_url_path=self.web.static_url_path
+ "receive.html",
+ static_url_path=self.web.static_url_path,
+ disable_text=self.web.settings.get("receive", "disable_text"),
+ disable_files=self.web.settings.get("receive", "disable_files"),
+ title=self.web.settings.get("general", "title"),
)
)
return self.web.add_security_headers(r)
- @self.web.app.route("/upload", methods=["POST"])
+ @self.web.app.route("/upload", methods=["POST"], provide_automatic_options=False)
def upload(ajax=False):
"""
Handle the upload files POST request, though at this point, the files have
already been uploaded and saved to their correct locations.
"""
- files = request.files.getlist("file[]")
- filenames = []
- for f in files:
- if f.filename != "":
- filename = secure_filename(f.filename)
- filenames.append(filename)
- local_path = os.path.join(request.receive_mode_dir, filename)
- basename = os.path.basename(local_path)
-
- # Tell the GUI the receive mode directory for this file
- self.web.add_request(
- self.web.REQUEST_UPLOAD_SET_DIR,
- request.path,
- {
- "id": request.history_id,
- "filename": basename,
- "dir": request.receive_mode_dir,
- },
- )
-
- self.common.log(
- "ReceiveModeWeb",
- "define_routes",
- f"/upload, uploaded {f.filename}, saving to {local_path}",
- )
- print(f"\nReceived: {local_path}")
+ message_received = request.includes_message
+
+ files_received = 0
+ if not self.web.settings.get("receive", "disable_files"):
+ files = request.files.getlist("file[]")
+
+ filenames = []
+ for f in files:
+ if f.filename != "":
+ filename = secure_filename(f.filename)
+ filenames.append(filename)
+ local_path = os.path.join(request.receive_mode_dir, filename)
+ basename = os.path.basename(local_path)
+
+ # Tell the GUI the receive mode directory for this file
+ self.web.add_request(
+ self.web.REQUEST_UPLOAD_SET_DIR,
+ request.path,
+ {
+ "id": request.history_id,
+ "filename": basename,
+ "dir": request.receive_mode_dir,
+ },
+ )
+
+ self.common.log(
+ "ReceiveModeWeb",
+ "define_routes",
+ f"/upload, uploaded {f.filename}, saving to {local_path}",
+ )
+ print(f"Received: {local_path}")
+
+ files_received = len(filenames)
+
+ # Send webhook if configured
+ if (
+ self.web.settings.get("receive", "webhook_url") is not None
+ and not request.upload_error
+ and (message_received or files_received)
+ ):
+ msg = ""
+ if files_received > 0:
+ if files_received == 1:
+ msg += "1 file"
+ else:
+ msg += f"{files_received} files"
+ if message_received:
+ if msg == "":
+ msg = "A text message"
+ else:
+ msg += " and a text message"
+ self.send_webhook_notification(f"{msg} submitted to OnionShare")
if request.upload_error:
self.common.log(
@@ -127,21 +182,27 @@ class ReceiveModeWeb:
if ajax:
info_flashes = []
- if len(filenames) == 0:
- msg = "No files uploaded"
- if ajax:
- info_flashes.append(msg)
+ if files_received > 0:
+ files_msg = ""
+ for filename in filenames:
+ files_msg += f"{filename}, "
+ files_msg = files_msg.rstrip(", ")
+
+ if message_received:
+ if files_received > 0:
+ msg = f"Message submitted, uploaded {files_msg}"
else:
- flash(msg, "info")
+ msg = "Message submitted"
else:
- msg = "Sent "
- for filename in filenames:
- msg += f"{filename}, "
- msg = msg.rstrip(", ")
- if ajax:
- info_flashes.append(msg)
+ if files_received > 0:
+ msg = f"Uploaded {files_msg}"
else:
- flash(msg, "info")
+ msg = "Nothing submitted"
+
+ if ajax:
+ info_flashes.append(msg)
+ else:
+ flash(msg, "info")
if self.can_upload:
if ajax:
@@ -155,6 +216,7 @@ class ReceiveModeWeb:
"new_body": render_template(
"thankyou.html",
static_url_path=self.web.static_url_path,
+ title=self.web.settings.get("general", "title"),
)
}
)
@@ -163,15 +225,28 @@ class ReceiveModeWeb:
r = make_response(
render_template("thankyou.html"),
static_url_path=self.web.static_url_path,
+ title=self.web.settings.get("general", "title"),
)
return self.web.add_security_headers(r)
- @self.web.app.route("/upload-ajax", methods=["POST"])
+ @self.web.app.route("/upload-ajax", methods=["POST"], provide_automatic_options=False)
def upload_ajax_public():
if not self.can_upload:
return self.web.error403()
return upload(ajax=True)
+ def send_webhook_notification(self, data):
+ self.common.log("ReceiveModeWeb", "send_webhook_notification", data)
+ try:
+ requests.post(
+ self.web.settings.get("receive", "webhook_url"),
+ data=data,
+ timeout=5,
+ proxies=self.web.proxies,
+ )
+ except Exception as e:
+ print(f"Webhook notification failed: {e}")
+
class ReceiveModeWSGIMiddleware(object):
"""
@@ -209,7 +284,7 @@ class ReceiveModeFile(object):
self.upload_error = False
try:
self.f = open(self.filename_in_progress, "wb+")
- except:
+ except Exception:
# This will only happen if someone is messing with the data dir while
# OnionShare is running, but if it does make sure to throw an error
self.upload_error = True
@@ -257,7 +332,7 @@ class ReceiveModeFile(object):
bytes_written = self.f.write(b)
self.onionshare_write_func(self.onionshare_filename, bytes_written)
- except:
+ except Exception:
self.upload_error = True
def close(self):
@@ -271,7 +346,7 @@ class ReceiveModeFile(object):
# Rename the in progress file to the final filename
os.rename(self.filename_in_progress, self.filename)
- except:
+ except Exception:
self.upload_error = True
self.onionshare_close_func(self.onionshare_filename, self.upload_error)
@@ -287,8 +362,7 @@ class ReceiveModeRequest(Request):
super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow)
self.web = environ["web"]
self.stop_q = environ["stop_q"]
-
- self.web.common.log("ReceiveModeRequest", "__init__")
+ self.filename = None
# Prevent running the close() method more than once
self.closed = False
@@ -300,13 +374,15 @@ class ReceiveModeRequest(Request):
self.upload_request = True
if self.upload_request:
+ self.web.common.log("ReceiveModeRequest", "__init__")
+
# No errors yet
self.upload_error = False
# Figure out what files should be saved
now = datetime.now()
date_dir = now.strftime("%Y-%m-%d")
- time_dir = now.strftime("%H.%M.%S")
+ time_dir = now.strftime("%H%M%S")
self.receive_mode_dir = os.path.join(
self.web.settings.get("receive", "data_dir"), date_dir, time_dir
)
@@ -354,6 +430,9 @@ class ReceiveModeRequest(Request):
)
self.upload_error = True
+ # Figure out the message filename, in case there is a message
+ self.message_filename = f"{self.receive_mode_dir}-message.txt"
+
# If there's an error so far, finish early
if self.upload_error:
return
@@ -371,7 +450,7 @@ class ReceiveModeRequest(Request):
# Figure out the content length
try:
self.content_length = int(self.headers["Content-Length"])
- except:
+ except Exception:
self.content_length = 0
date_str = datetime.now().strftime("%b %d, %I:%M%p")
@@ -383,6 +462,60 @@ class ReceiveModeRequest(Request):
self.previous_file = None
+ # Is there a text message?
+ self.includes_message = False
+ if not self.web.settings.get("receive", "disable_text"):
+ text_message = self.form.get("text")
+ if text_message:
+ if text_message.strip() != "":
+ self.includes_message = True
+
+ with open(self.message_filename, "w") as f:
+ f.write(text_message)
+
+ self.web.common.log(
+ "ReceiveModeRequest",
+ "__init__",
+ f"saved message to {self.message_filename}",
+ )
+ print(f"Received: {self.message_filename}")
+
+ # Tell the GUI about the message
+ self.tell_gui_request_started()
+ self.web.common.log(
+ "ReceiveModeRequest",
+ "__init__",
+ "sending REQUEST_UPLOAD_INCLUDES_MESSAGE to GUI",
+ )
+ self.web.add_request(
+ self.web.REQUEST_UPLOAD_INCLUDES_MESSAGE,
+ self.path,
+ {
+ "id": self.history_id,
+ "filename": self.message_filename,
+ },
+ )
+
+ def tell_gui_request_started(self):
+ # Tell the GUI about the request
+ if not self.told_gui_about_request:
+ self.web.common.log(
+ "ReceiveModeRequest",
+ "tell_gui_request_started",
+ "sending REQUEST_STARTED to GUI",
+ )
+ self.web.add_request(
+ self.web.REQUEST_STARTED,
+ self.path,
+ {
+ "id": self.history_id,
+ "content_length": self.content_length,
+ },
+ )
+ self.web.receive_mode.uploads_in_progress.append(self.history_id)
+
+ self.told_gui_about_request = True
+
def _get_file_stream(
self, total_content_length, content_type, filename=None, content_length=None
):
@@ -391,16 +524,7 @@ class ReceiveModeRequest(Request):
writable stream.
"""
if self.upload_request:
- if not self.told_gui_about_request:
- # Tell the GUI about the request
- self.web.add_request(
- self.web.REQUEST_STARTED,
- self.path,
- {"id": self.history_id, "content_length": self.content_length},
- )
- self.web.receive_mode.uploads_in_progress.append(self.history_id)
-
- self.told_gui_about_request = True
+ self.tell_gui_request_started()
self.filename = secure_filename(filename)
@@ -427,29 +551,47 @@ class ReceiveModeRequest(Request):
return
self.closed = True
- self.web.common.log("ReceiveModeRequest", "close")
+ if self.upload_request:
+ self.web.common.log("ReceiveModeRequest", "close")
- try:
if self.told_gui_about_request:
history_id = self.history_id
- if (
- not self.web.stop_q.empty()
- or not self.progress[self.filename]["complete"]
+ if not self.web.stop_q.empty() or (
+ self.filename in self.progress
+ and not self.progress[self.filename]["complete"]
):
# Inform the GUI that the upload has canceled
+ self.web.common.log(
+ "ReceiveModeRequest",
+ "close",
+ "sending REQUEST_UPLOAD_CANCELED to GUI",
+ )
self.web.add_request(
- self.web.REQUEST_UPLOAD_CANCELED, self.path, {"id": history_id}
+ self.web.REQUEST_UPLOAD_CANCELED,
+ self.path,
+ {"id": history_id},
)
else:
# Inform the GUI that the upload has finished
+ self.web.common.log(
+ "ReceiveModeRequest",
+ "close",
+ "sending REQUEST_UPLOAD_FINISHED to GUI",
+ )
self.web.add_request(
- self.web.REQUEST_UPLOAD_FINISHED, self.path, {"id": history_id}
+ self.web.REQUEST_UPLOAD_FINISHED,
+ self.path,
+ {"id": history_id},
)
self.web.receive_mode.uploads_in_progress.remove(history_id)
- except AttributeError:
- pass
+ # If no files were written to self.receive_mode_dir, delete it
+ try:
+ if len(os.listdir(self.receive_mode_dir)) == 0:
+ os.rmdir(self.receive_mode_dir)
+ except Exception:
+ pass
def file_write_func(self, filename, length):
"""
@@ -467,7 +609,11 @@ class ReceiveModeRequest(Request):
size_str = self.web.common.human_readable_filesize(
self.progress[filename]["uploaded_bytes"]
)
- print(f"\r=> {size_str} {filename} ", end="")
+
+ if self.web.common.verbose:
+ print(f"=> {size_str} {filename}")
+ else:
+ print(f"\r=> {size_str} {filename} ", end="")
# Update the GUI on the upload progress
if self.told_gui_about_request:
diff --git a/cli/onionshare_cli/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py
index b09fc4c6..e448d2dd 100644
--- a/cli/onionshare_cli/web/send_base_mode.py
+++ b/cli/onionshare_cli/web/send_base_mode.py
@@ -23,7 +23,7 @@ import sys
import tempfile
import mimetypes
import gzip
-from flask import Response, request, render_template, make_response
+from flask import Response, request
from unidecode import unidecode
from werkzeug.urls import url_quote
@@ -52,9 +52,22 @@ class SendBaseModeWeb:
# This tracks the history id
self.cur_history_id = 0
+ # Whether or not we can send REQUEST_INDIVIDUAL_FILE_STARTED
+ # and maybe other events when requests come in to this mode
+ self.supports_file_requests = True
+
self.define_routes()
self.init()
+ def fix_windows_paths(self, path):
+ """
+ If on Windows, replace backslashes with slashes
+ """
+ if self.common.platform == "Windows":
+ return path.replace("\\", "/")
+
+ return path
+
def set_file_info(self, filenames, processed_size_callback=None):
"""
Build a data structure that describes the list of files
@@ -70,40 +83,48 @@ class SendBaseModeWeb:
self.root_files = (
{}
) # This is only the root files and dirs, as opposed to all of them
- self.cleanup_filenames = []
self.cur_history_id = 0
self.file_info = {"files": [], "dirs": []}
self.gzip_individual_files = {}
self.init()
+ # Windows paths use backslashes, but website paths use forward slashes. We have to
+ # make sure we're stripping the correct type of slash
+ if self.common.platform == "Windows":
+ slash = "\\"
+ else:
+ slash = "/"
+
# Build the file list
for filename in filenames:
- basename = os.path.basename(filename.rstrip("/"))
+ basename = os.path.basename(filename.rstrip(slash))
# If it's a filename, add it
if os.path.isfile(filename):
- self.files[basename] = filename
- self.root_files[basename] = filename
+ self.files[self.fix_windows_paths(basename)] = filename
+ self.root_files[self.fix_windows_paths(basename)] = filename
# If it's a directory, add it recursively
elif os.path.isdir(filename):
- self.root_files[basename] = filename
+ self.root_files[self.fix_windows_paths(basename)] = filename
for root, _, nested_filenames in os.walk(filename):
# Normalize the root path. So if the directory name is "/home/user/Documents/some_folder",
# and it has a nested folder foobar, the root is "/home/user/Documents/some_folder/foobar".
# The normalized_root should be "some_folder/foobar"
normalized_root = os.path.join(
- basename, root[len(filename) :].lstrip("/")
- ).rstrip("/")
+ basename, root[len(filename) :].lstrip(slash)
+ ).rstrip(slash)
# Add the dir itself
- self.files[normalized_root] = root
+ self.files[self.fix_windows_paths(normalized_root)] = root
# Add the files in this dir
for nested_filename in nested_filenames:
self.files[
- os.path.join(normalized_root, nested_filename)
+ self.fix_windows_paths(
+ os.path.join(normalized_root, nested_filename)
+ )
] = os.path.join(root, nested_filename)
self.set_file_info_custom(filenames, processed_size_callback)
@@ -177,7 +198,7 @@ class SendBaseModeWeb:
self.gzip_individual_files[filesystem_path] = gzip_filename
# Make sure the gzip file gets cleaned up when onionshare stops
- self.cleanup_filenames.append(gzip_filename)
+ self.web.cleanup_filenames.append(gzip_filename)
file_to_download = self.gzip_individual_files[filesystem_path]
filesize = os.path.getsize(self.gzip_individual_files[filesystem_path])
@@ -191,10 +212,6 @@ class SendBaseModeWeb:
history_id = self.cur_history_id
self.cur_history_id += 1
- # Only GET requests are allowed, any other method should fail
- if request.method != "GET":
- return self.web.error405(history_id)
-
self.web.add_request(
self.web.REQUEST_INDIVIDUAL_FILE_STARTED,
path,
@@ -242,7 +259,7 @@ class SendBaseModeWeb:
},
)
done = False
- except:
+ except Exception:
# Looks like the download was canceled
done = True
diff --git a/cli/onionshare_cli/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py
index 72ba8c64..51ddd674 100644
--- a/cli/onionshare_cli/web/share_mode.py
+++ b/cli/onionshare_cli/web/share_mode.py
@@ -18,18 +18,100 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
+import binascii
+import hashlib
import os
import sys
import tempfile
import zipfile
import mimetypes
-from flask import Response, request, render_template, make_response
+from datetime import datetime
+from flask import Response, request, render_template, make_response, abort
from unidecode import unidecode
+from werkzeug.http import parse_date, http_date
from werkzeug.urls import url_quote
from .send_base_mode import SendBaseModeWeb
+def make_etag(data):
+ hasher = hashlib.sha256()
+
+ while True:
+ read_bytes = data.read(4096)
+ if read_bytes:
+ hasher.update(read_bytes)
+ else:
+ break
+
+ hash_value = binascii.hexlify(hasher.digest()).decode("utf-8")
+ return '"sha256:{}"'.format(hash_value)
+
+
+def parse_range_header(range_header: str, target_size: int) -> list:
+ end_index = target_size - 1
+ if range_header is None:
+ return [(0, end_index)]
+
+ bytes_ = "bytes="
+ if not range_header.startswith(bytes_):
+ abort(416)
+
+ ranges = []
+ for range_ in range_header[len(bytes_) :].split(","):
+ split = range_.split("-")
+ if len(split) == 1:
+ try:
+ start = int(split[0])
+ end = end_index
+ except ValueError:
+ abort(416)
+ elif len(split) == 2:
+ start, end = split[0], split[1]
+ if not start:
+ # parse ranges of the form "bytes=-100" (i.e., last 100 bytes)
+ end = end_index
+ try:
+ start = end - int(split[1]) + 1
+ except ValueError:
+ abort(416)
+ else:
+ # parse ranges of the form "bytes=100-200"
+ try:
+ start = int(start)
+ if not end:
+ end = target_size
+ else:
+ end = int(end)
+ except ValueError:
+ abort(416)
+
+ if end < start:
+ abort(416)
+
+ end = min(end, end_index)
+ else:
+ abort(416)
+
+ ranges.append((start, end))
+
+ # merge the ranges
+ merged = []
+ ranges = sorted(ranges, key=lambda x: x[0])
+ for range_ in ranges:
+ # initial case
+ if not merged:
+ merged.append(range_)
+ else:
+ # merge ranges that are adjacent or overlapping
+ if range_[0] <= merged[-1][1] + 1:
+ merged[-1] = (merged[-1][0], max(range_[1], merged[-1][1]))
+ else:
+ merged.append(range_)
+
+ return merged
+
+
class ShareModeWeb(SendBaseModeWeb):
"""
All of the web logic for share mode
@@ -43,13 +125,17 @@ class ShareModeWeb(SendBaseModeWeb):
"share", "autostop_sharing"
)
+ self.download_etag = None
+ self.gzip_etag = None
+ self.last_modified = datetime.utcnow()
+
def define_routes(self):
"""
The web app routes for sharing files
"""
- @self.web.app.route("/", defaults={"path": ""})
- @self.web.app.route("/<path:path>")
+ @self.web.app.route("/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False)
+ @self.web.app.route("/<path:path>", methods=["GET"], provide_automatic_options=False)
def index(path):
"""
Render the template for the onionshare landing page.
@@ -74,7 +160,7 @@ class ShareModeWeb(SendBaseModeWeb):
return self.render_logic(path)
- @self.web.app.route("/download")
+ @self.web.app.route("/download", methods=["GET"], provide_automatic_options=False)
def download():
"""
Download the zip file.
@@ -92,7 +178,7 @@ class ShareModeWeb(SendBaseModeWeb):
# Prepare some variables to use inside generate() function below
# which is outside of the request context
shutdown_func = request.environ.get("werkzeug.server.shutdown")
- path = request.path
+ request_path = request.path
# If this is a zipped file, then serve as-is. If it's not zipped, then,
# if the http client supports gzip compression, gzip the file first
@@ -101,104 +187,46 @@ class ShareModeWeb(SendBaseModeWeb):
if use_gzip:
file_to_download = self.gzip_filename
self.filesize = self.gzip_filesize
+ etag = self.gzip_etag
else:
file_to_download = self.download_filename
self.filesize = self.download_filesize
+ etag = self.download_etag
+
+ # for range requests
+ range_, status_code = self.get_range_and_status_code(
+ self.filesize, etag, self.last_modified
+ )
# Tell GUI the download started
history_id = self.cur_history_id
self.cur_history_id += 1
self.web.add_request(
- self.web.REQUEST_STARTED, path, {"id": history_id, "use_gzip": use_gzip}
+ self.web.REQUEST_STARTED,
+ request_path,
+ {"id": history_id, "use_gzip": use_gzip},
)
basename = os.path.basename(self.download_filename)
- def generate():
- # Starting a new download
- if self.web.settings.get("share", "autostop_sharing"):
- self.download_in_progress = True
-
- chunk_size = 102400 # 100kb
-
- fp = open(file_to_download, "rb")
- self.web.done = False
- canceled = False
- while not self.web.done:
- # The user has canceled the download, so stop serving the file
- if not self.web.stop_q.empty():
- self.web.add_request(
- self.web.REQUEST_CANCELED, path, {"id": history_id}
- )
- break
-
- chunk = fp.read(chunk_size)
- if chunk == b"":
- self.web.done = True
- else:
- try:
- yield chunk
-
- # tell GUI the progress
- downloaded_bytes = fp.tell()
- percent = (1.0 * downloaded_bytes / self.filesize) * 100
-
- # only output to stdout if running onionshare in CLI mode, or if using Linux (#203, #304)
- if (
- not self.web.is_gui
- or self.common.platform == "Linux"
- or self.common.platform == "BSD"
- ):
- sys.stdout.write(
- "\r{0:s}, {1:.2f}% ".format(
- self.common.human_readable_filesize(
- downloaded_bytes
- ),
- percent,
- )
- )
- sys.stdout.flush()
-
- self.web.add_request(
- self.web.REQUEST_PROGRESS,
- path,
- {"id": history_id, "bytes": downloaded_bytes},
- )
- self.web.done = False
- except:
- # looks like the download was canceled
- self.web.done = True
- canceled = True
-
- # tell the GUI the download has canceled
- self.web.add_request(
- self.web.REQUEST_CANCELED, path, {"id": history_id}
- )
-
- fp.close()
-
- if self.common.platform != "Darwin":
- sys.stdout.write("\n")
-
- # Download is finished
- if self.web.settings.get("share", "autostop_sharing"):
- self.download_in_progress = False
-
- # Close the server, if necessary
- if self.web.settings.get("share", "autostop_sharing") and not canceled:
- print("Stopped because transfer is complete")
- self.web.running = False
- try:
- if shutdown_func is None:
- raise RuntimeError("Not running with the Werkzeug Server")
- shutdown_func()
- except:
- pass
+ if status_code == 304:
+ r = Response()
+ else:
+ r = Response(
+ self.generate(
+ shutdown_func,
+ range_,
+ file_to_download,
+ request_path,
+ history_id,
+ self.filesize,
+ )
+ )
- r = Response(generate())
if use_gzip:
r.headers.set("Content-Encoding", "gzip")
- r.headers.set("Content-Length", self.filesize)
+
+ r.headers.set("Content-Length", range_[1] - range_[0] + 1)
filename_dict = {
"filename": unidecode(basename),
"filename*": "UTF-8''%s" % url_quote(basename),
@@ -209,8 +237,158 @@ class ShareModeWeb(SendBaseModeWeb):
(content_type, _) = mimetypes.guess_type(basename, strict=False)
if content_type is not None:
r.headers.set("Content-Type", content_type)
+ r.headers.set("Accept-Ranges", "bytes")
+ r.headers.set("ETag", etag)
+ r.headers.set("Last-Modified", http_date(self.last_modified))
+ # we need to set this for range requests
+ r.headers.set("Vary", "Accept-Encoding")
+
+ if status_code == 206:
+ r.headers.set(
+ "Content-Range",
+ "bytes {}-{}/{}".format(range_[0], range_[1], self.filesize),
+ )
+
+ r.status_code = status_code
+
return r
+ @classmethod
+ def get_range_and_status_code(cls, dl_size, etag, last_modified):
+ use_default_range = True
+ status_code = 200
+ range_header = request.headers.get("Range")
+
+ # range requests are only allowed for get
+ if request.method == "GET":
+ ranges = parse_range_header(range_header, dl_size)
+ if not (
+ len(ranges) == 1 and ranges[0][0] == 0 and ranges[0][1] == dl_size - 1
+ ):
+ use_default_range = False
+ status_code = 206
+
+ if range_header:
+ if_range = request.headers.get("If-Range")
+ if if_range and if_range != etag:
+ use_default_range = True
+ status_code = 200
+
+ if use_default_range:
+ ranges = [(0, dl_size - 1)]
+
+ if len(ranges) > 1:
+ abort(416) # We don't support multipart range requests yet
+ range_ = ranges[0]
+
+ etag_header = request.headers.get("ETag")
+ if etag_header is not None and etag_header != etag:
+ abort(412)
+
+ if_unmod = request.headers.get("If-Unmodified-Since")
+ if if_unmod:
+ if_date = parse_date(if_unmod)
+ if if_date and if_date > last_modified:
+ abort(412)
+ elif range_header is None:
+ status_code = 304
+
+ return range_, status_code
+
+ def generate(
+ self, shutdown_func, range_, file_to_download, path, history_id, filesize
+ ):
+ # The user hasn't canceled the download
+ self.client_cancel = False
+
+ # Starting a new download
+ if self.web.settings.get("share", "autostop_sharing"):
+ self.download_in_progress = True
+
+ start, end = range_
+
+ chunk_size = 102400 # 100kb
+
+ fp = open(file_to_download, "rb")
+ fp.seek(start)
+ self.web.done = False
+ canceled = False
+ bytes_left = end - start + 1
+ while not self.web.done:
+ # The user has canceled the download, so stop serving the file
+ if not self.web.stop_q.empty():
+ self.web.add_request(
+ self.web.REQUEST_CANCELED, path, {"id": history_id}
+ )
+ break
+
+ read_size = min(chunk_size, bytes_left)
+ chunk = fp.read(read_size)
+ if chunk == b"":
+ self.web.done = True
+ else:
+ try:
+ yield chunk
+
+ # tell GUI the progress
+ downloaded_bytes = fp.tell()
+ percent = (1.0 * downloaded_bytes / filesize) * 100
+ bytes_left -= read_size
+
+ # only output to stdout if running onionshare in CLI mode, or if using Linux (#203, #304)
+ if (
+ not self.web.is_gui
+ or self.common.platform == "Linux"
+ or self.common.platform == "BSD"
+ ):
+ sys.stdout.write(
+ "\r{0:s}, {1:.2f}% ".format(
+ self.common.human_readable_filesize(downloaded_bytes),
+ percent,
+ )
+ )
+ sys.stdout.flush()
+
+ self.web.add_request(
+ self.web.REQUEST_PROGRESS,
+ path,
+ {
+ "id": history_id,
+ "bytes": downloaded_bytes,
+ "total_bytes": filesize,
+ },
+ )
+ self.web.done = False
+ except Exception:
+ # looks like the download was canceled
+ self.web.done = True
+ canceled = True
+
+ # tell the GUI the download has canceled
+ self.web.add_request(
+ self.web.REQUEST_CANCELED, path, {"id": history_id}
+ )
+
+ fp.close()
+
+ if self.common.platform != "Darwin":
+ sys.stdout.write("\n")
+
+ # Download is finished
+ if self.web.settings.get("share", "autostop_sharing"):
+ self.download_in_progress = False
+
+ # Close the server, if necessary
+ if self.web.settings.get("share", "autostop_sharing") and not canceled:
+ print("Stopped because transfer is complete")
+ self.web.running = False
+ try:
+ if shutdown_func is None:
+ raise RuntimeError("Not running with the Werkzeug Server")
+ shutdown_func()
+ except Exception:
+ pass
+
def directory_listing_template(
self, path, files, dirs, breadcrumbs, breadcrumbs_leaf
):
@@ -230,6 +408,7 @@ class ShareModeWeb(SendBaseModeWeb):
is_zipped=self.is_zipped,
static_url_path=self.web.static_url_path,
download_individual_files=self.download_individual_files,
+ title=self.web.settings.get("general", "title"),
)
)
@@ -305,6 +484,8 @@ class ShareModeWeb(SendBaseModeWeb):
if len(self.file_info["files"]) == 1 and len(self.file_info["dirs"]) == 0:
self.download_filename = self.file_info["files"][0]["filename"]
self.download_filesize = self.file_info["files"][0]["size"]
+ with open(self.download_filename, "rb") as f:
+ 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]
@@ -312,9 +493,11 @@ class ShareModeWeb(SendBaseModeWeb):
self.download_filename, self.gzip_filename, 6, processed_size_callback
)
self.gzip_filesize = os.path.getsize(self.gzip_filename)
+ with open(self.gzip_filename, "rb") as f:
+ self.gzip_etag = make_etag(f)
# Make sure the gzip file gets cleaned up when onionshare stops
- self.cleanup_filenames.append(self.gzip_filename)
+ self.web.cleanup_filenames.append(self.gzip_filename)
self.is_zipped = False
@@ -337,9 +520,12 @@ class ShareModeWeb(SendBaseModeWeb):
self.zip_writer.close()
self.download_filesize = os.path.getsize(self.download_filename)
+ 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.cleanup_filenames.append(self.zip_writer.zip_filename)
+ 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
@@ -360,8 +546,9 @@ class ZipWriter(object):
if zip_filename:
self.zip_filename = zip_filename
else:
+ self.zip_temp_dir = tempfile.mkdtemp()
self.zip_filename = (
- f"{tempfile.mkdtemp()}/onionshare_{self.common.random_string(4, 6)}.zip"
+ f"{self.zip_temp_dir}/onionshare_{self.common.random_string(4, 6)}.zip"
)
self.z = zipfile.ZipFile(self.zip_filename, "w", allowZip64=True)
diff --git a/cli/onionshare_cli/web/web.py b/cli/onionshare_cli/web/web.py
index 6f4986e7..04919185 100644
--- a/cli/onionshare_cli/web/web.py
+++ b/cli/onionshare_cli/web/web.py
@@ -17,17 +17,12 @@ 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 <http://www.gnu.org/licenses/>.
"""
-
-import hmac
import logging
import os
import queue
-import socket
-import sys
-import tempfile
import requests
+import shutil
from distutils.version import LooseVersion as Version
-from urllib.request import urlopen
import flask
from flask import (
@@ -47,6 +42,7 @@ from .receive_mode import ReceiveModeWeb, ReceiveModeWSGIMiddleware, ReceiveMode
from .website_mode import WebsiteModeWeb
from .chat_mode import ChatModeWeb
+
# Stub out flask's show_server_banner function, to avoiding showing warnings that
# are not applicable to OnionShare
def stubbed_show_server_banner(env, debug, app_import_path, eager_loading):
@@ -55,7 +51,7 @@ def stubbed_show_server_banner(env, debug, app_import_path, eager_loading):
try:
flask.cli.show_server_banner = stubbed_show_server_banner
-except:
+except Exception:
pass
@@ -69,16 +65,17 @@ class Web:
REQUEST_PROGRESS = 2
REQUEST_CANCELED = 3
REQUEST_RATE_LIMIT = 4
- REQUEST_UPLOAD_FILE_RENAMED = 5
- REQUEST_UPLOAD_SET_DIR = 6
- REQUEST_UPLOAD_FINISHED = 7
- REQUEST_UPLOAD_CANCELED = 8
- REQUEST_INDIVIDUAL_FILE_STARTED = 9
- REQUEST_INDIVIDUAL_FILE_PROGRESS = 10
- REQUEST_INDIVIDUAL_FILE_CANCELED = 11
- REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 12
- REQUEST_OTHER = 13
- REQUEST_INVALID_PASSWORD = 14
+ REQUEST_UPLOAD_INCLUDES_MESSAGE = 5
+ REQUEST_UPLOAD_FILE_RENAMED = 6
+ REQUEST_UPLOAD_SET_DIR = 7
+ REQUEST_UPLOAD_FINISHED = 8
+ REQUEST_UPLOAD_CANCELED = 9
+ REQUEST_INDIVIDUAL_FILE_STARTED = 10
+ REQUEST_INDIVIDUAL_FILE_PROGRESS = 11
+ REQUEST_INDIVIDUAL_FILE_CANCELED = 12
+ REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 13
+ REQUEST_OTHER = 14
+ REQUEST_INVALID_PASSWORD = 15
def __init__(self, common, is_gui, mode_settings, mode="share"):
self.common = common
@@ -166,6 +163,8 @@ class Web:
self.socketio.init_app(self.app)
self.chat_mode = ChatModeWeb(self.common, self)
+ self.cleanup_filenames = []
+
def get_mode(self):
if self.mode == "share":
return self.share_mode
@@ -192,7 +191,6 @@ class Web:
self.app.static_url_path = self.static_url_path
self.app.add_url_rule(
self.static_url_path + "/<path:filename>",
- endpoint="static",
view_func=self.app.send_static_file,
)
@@ -230,6 +228,20 @@ class Web:
mode.cur_history_id += 1
return self.error404(history_id)
+ @self.app.errorhandler(405)
+ def method_not_allowed(e):
+ mode = self.get_mode()
+ history_id = mode.cur_history_id
+ mode.cur_history_id += 1
+ return self.error405(history_id)
+
+ @self.app.errorhandler(500)
+ def method_not_allowed(e):
+ mode = self.get_mode()
+ history_id = mode.cur_history_id
+ mode.cur_history_id += 1
+ return self.error500(history_id)
+
@self.app.route("/<password_candidate>/shutdown")
def shutdown(password_candidate):
"""
@@ -281,11 +293,13 @@ class Web:
return self.add_security_headers(r)
def error404(self, history_id):
- self.add_request(
- self.REQUEST_INDIVIDUAL_FILE_STARTED,
- request.path,
- {"id": history_id, "status_code": 404},
- )
+ mode = self.get_mode()
+ if mode.supports_file_requests:
+ self.add_request(
+ self.REQUEST_INDIVIDUAL_FILE_STARTED,
+ request.path,
+ {"id": history_id, "status_code": 404},
+ )
self.add_request(Web.REQUEST_OTHER, request.path)
r = make_response(
@@ -294,11 +308,13 @@ class Web:
return self.add_security_headers(r)
def error405(self, history_id):
- self.add_request(
- self.REQUEST_INDIVIDUAL_FILE_STARTED,
- request.path,
- {"id": history_id, "status_code": 405},
- )
+ mode = self.get_mode()
+ if mode.supports_file_requests:
+ self.add_request(
+ self.REQUEST_INDIVIDUAL_FILE_STARTED,
+ request.path,
+ {"id": history_id, "status_code": 405},
+ )
self.add_request(Web.REQUEST_OTHER, request.path)
r = make_response(
@@ -306,6 +322,21 @@ class Web:
)
return self.add_security_headers(r)
+ def error500(self, history_id):
+ mode = self.get_mode()
+ if mode.supports_file_requests:
+ self.add_request(
+ self.REQUEST_INDIVIDUAL_FILE_STARTED,
+ request.path,
+ {"id": history_id, "status_code": 500},
+ )
+
+ self.add_request(Web.REQUEST_OTHER, request.path)
+ r = make_response(
+ render_template("500.html", static_url_path=self.static_url_path), 500
+ )
+ return self.add_security_headers(r)
+
def add_security_headers(self, r):
"""
Add security headers to a request
@@ -316,7 +347,7 @@ class Web:
if not self.settings.get("website", "disable_csp") or self.mode != "website":
r.headers.set(
"Content-Security-Policy",
- "default-src 'self'; style-src 'self'; script-src 'self'; img-src 'self' data:;",
+ "default-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self'; img-src 'self' data:;",
)
return r
@@ -333,7 +364,7 @@ class Web:
def generate_password(self, saved_password=None):
self.common.log("Web", "generate_password", f"saved_password={saved_password}")
- if saved_password != None and saved_password != "":
+ if saved_password is not None and saved_password != "":
self.password = saved_password
self.common.log(
"Web",
@@ -366,13 +397,18 @@ class Web:
# Shutdown the flask service
try:
func = request.environ.get("werkzeug.server.shutdown")
- if func is None:
+ if func is None and self.mode != "chat":
raise RuntimeError("Not running with the Werkzeug Server")
func()
- except:
+ except Exception:
pass
+
self.running = False
+ # If chat, shutdown the socket server
+ if self.mode == "chat":
+ self.socketio.stop()
+
def start(self, port):
"""
Start the flask web server.
@@ -422,3 +458,21 @@ class Web:
# Reset any password that was in use
self.password = None
+
+ def cleanup(self):
+ """
+ Shut everything down and clean up temporary files, etc.
+ """
+ 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 = []
diff --git a/cli/onionshare_cli/web/website_mode.py b/cli/onionshare_cli/web/website_mode.py
index fa8b53bd..5ab1b184 100644
--- a/cli/onionshare_cli/web/website_mode.py
+++ b/cli/onionshare_cli/web/website_mode.py
@@ -19,10 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
-import sys
-import tempfile
-import mimetypes
-from flask import Response, request, render_template, make_response
+from flask import render_template, make_response
from .send_base_mode import SendBaseModeWeb
@@ -40,8 +37,8 @@ class WebsiteModeWeb(SendBaseModeWeb):
The web app routes for sharing a website
"""
- @self.web.app.route("/", defaults={"path": ""})
- @self.web.app.route("/<path:path>")
+ @self.web.app.route("/", defaults={"path": ""}, methods=["GET"], provide_automatic_options=False)
+ @self.web.app.route("/<path:path>", methods=["GET"], provide_automatic_options=False)
def path_public(path):
return path_logic(path)
@@ -63,6 +60,7 @@ class WebsiteModeWeb(SendBaseModeWeb):
breadcrumbs=breadcrumbs,
breadcrumbs_leaf=breadcrumbs_leaf,
static_url_path=self.web.static_url_path,
+ title=self.web.settings.get("general", "title"),
)
)
diff --git a/cli/poetry.lock b/cli/poetry.lock
index e1672272..a9a030ad 100644
--- a/cli/poetry.lock
+++ b/cli/poetry.lock
@@ -1,33 +1,32 @@
[[package]]
-category = "dev"
-description = "Atomic file writes."
-marker = "sys_platform == \"win32\""
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.*"
-version = "1.4.0"
[[package]]
-category = "dev"
-description = "Classes Without Boilerplate"
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.*"
-version = "20.3.0"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[package.extras]
-dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "furo", "sphinx", "pre-commit"]
-docs = ["furo", "sphinx", "zope.interface"]
-tests = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
-tests_no_zope = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six"]
+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]]
-category = "main"
-description = "The bidirectional mapping library for Python."
name = "bidict"
+version = "0.21.2"
+description = "The bidirectional mapping library for Python."
+category = "main"
optional = false
python-versions = ">=3.6"
-version = "0.21.2"
[package.extras]
coverage = ["coverage (<6)", "pytest-cov (<3)"]
@@ -37,57 +36,56 @@ precommit = ["pre-commit (<3)"]
test = ["hypothesis (<6)", "py (<2)", "pytest (<7)", "pytest-benchmark (>=3.2.0,<4)", "sortedcollections (<2)", "sortedcontainers (<3)", "Sphinx (<4)", "sphinx-autodoc-typehints (<2)"]
[[package]]
-category = "main"
-description = "Python package for providing Mozilla's CA Bundle."
name = "certifi"
+version = "2021.5.30"
+description = "Python package for providing Mozilla's CA Bundle."
+category = "main"
optional = false
python-versions = "*"
-version = "2020.12.5"
[[package]]
-category = "main"
-description = "Universal encoding detector for Python 2 and 3"
name = "chardet"
+version = "4.0.0"
+description = "Universal encoding detector for Python 2 and 3"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-version = "4.0.0"
[[package]]
-category = "main"
-description = "Composable command line interface toolkit"
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.*"
-version = "7.1.2"
[[package]]
-category = "dev"
-description = "Cross-platform colored terminal text."
-marker = "sys_platform == \"win32\""
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.*"
-version = "0.4.4"
[[package]]
-category = "main"
-description = "DNS toolkit"
name = "dnspython"
+version = "1.16.0"
+description = "DNS toolkit"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "1.16.0"
[package.extras]
DNSSEC = ["pycryptodome", "ecdsa (>=0.13)"]
IDNA = ["idna (>=2.1)"]
[[package]]
-category = "main"
-description = "Highly concurrent networking library"
name = "eventlet"
+version = "0.31.0"
+description = "Highly concurrent networking library"
+category = "main"
optional = false
python-versions = "*"
-version = "0.30.0"
[package.dependencies]
dnspython = ">=1.15.0,<2.0.0"
@@ -95,18 +93,18 @@ greenlet = ">=0.3"
six = ">=1.10.0"
[[package]]
-category = "main"
-description = "A simple framework for building complex web applications."
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.*"
-version = "1.1.2"
[package.dependencies]
-Jinja2 = ">=2.10.1"
-Werkzeug = ">=0.15"
-click = ">=5.1"
-itsdangerous = ">=0.24"
+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"]
@@ -114,90 +112,86 @@ docs = ["sphinx", "pallets-sphinx-themes", "sphinxcontrib-log-cabinet", "sphinx-
dotenv = ["python-dotenv"]
[[package]]
-category = "main"
-description = "Basic and Digest HTTP authentication for Flask routes"
name = "flask-httpauth"
+version = "4.4.0"
+description = "Basic and Digest HTTP authentication for Flask routes"
+category = "main"
optional = false
python-versions = "*"
-version = "4.2.0"
[package.dependencies]
Flask = "*"
[[package]]
-category = "main"
-description = "Socket.IO integration for Flask applications"
name = "flask-socketio"
+version = "5.0.1"
+description = "Socket.IO integration for Flask applications"
+category = "main"
optional = false
python-versions = "*"
-version = "5.0.1"
[package.dependencies]
Flask = ">=0.9"
python-socketio = ">=5.0.2"
[[package]]
-category = "main"
-description = "Lightweight in-process concurrent programming"
name = "greenlet"
+version = "1.1.0"
+description = "Lightweight in-process concurrent programming"
+category = "main"
optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
-version = "1.0.0"
[package.extras]
docs = ["sphinx"]
[[package]]
-category = "main"
-description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
+version = "2.10"
+description = "Internationalized Domain Names in Applications (IDNA)"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "2.10"
[[package]]
-category = "dev"
-description = "Read metadata from Python packages"
-marker = "python_version < \"3.8\""
name = "importlib-metadata"
+version = "4.4.0"
+description = "Read metadata from Python packages"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "3.4.0"
[package.dependencies]
+typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
-[package.dependencies.typing-extensions]
-python = "<3.8"
-version = ">=3.6.4"
-
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"]
[[package]]
-category = "dev"
-description = "iniconfig: brain-dead simple config-ini parsing"
name = "iniconfig"
+version = "1.1.1"
+description = "iniconfig: brain-dead simple config-ini parsing"
+category = "dev"
optional = false
python-versions = "*"
-version = "1.1.1"
[[package]]
-category = "main"
-description = "Various helpers to pass data to untrusted environments and back."
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.*"
-version = "1.1.0"
[[package]]
-category = "main"
-description = "A very fast and expressive template engine."
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.*"
-version = "2.11.2"
[package.dependencies]
MarkupSafe = ">=0.23"
@@ -206,236 +200,231 @@ MarkupSafe = ">=0.23"
i18n = ["Babel (>=0.8)"]
[[package]]
-category = "main"
-description = "Safely add untrusted strings to HTML/XML markup."
name = "markupsafe"
+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.*"
-version = "1.1.1"
+python-versions = ">=3.6"
[[package]]
-category = "dev"
-description = "Core utilities for Python packages"
name = "packaging"
+version = "20.9"
+description = "Core utilities for Python packages"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "20.9"
[package.dependencies]
pyparsing = ">=2.0.2"
[[package]]
-category = "dev"
-description = "plugin and hook calling mechanisms for python"
name = "pluggy"
+version = "0.13.1"
+description = "plugin and hook calling mechanisms for python"
+category = "dev"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "0.13.1"
[package.dependencies]
-[package.dependencies.importlib-metadata]
-python = "<3.8"
-version = ">=0.12"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
[package.extras]
dev = ["pre-commit", "tox"]
[[package]]
-category = "main"
-description = "Cross-platform lib for process and system monitoring in Python."
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.*"
-version = "5.8.0"
[package.extras]
test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"]
[[package]]
-category = "dev"
-description = "library with cross-python path, ini-parsing, io, code, log facilities"
name = "py"
+version = "1.10.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.*"
-version = "1.10.0"
[[package]]
-category = "main"
-description = "Cryptographic library for Python"
name = "pycryptodome"
+version = "3.10.1"
+description = "Cryptographic library for Python"
+category = "main"
optional = false
-python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "3.9.9"
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
-category = "dev"
-description = "Python parsing module"
name = "pyparsing"
+version = "2.4.7"
+description = "Python parsing module"
+category = "dev"
optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
-version = "2.4.7"
[[package]]
-category = "main"
-description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
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.*"
-version = "1.7.1"
[[package]]
-category = "dev"
-description = "pytest: simple powerful testing with Python"
name = "pytest"
+version = "6.2.4"
+description = "pytest: simple powerful testing with Python"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "6.2.2"
[package.dependencies]
-atomicwrites = ">=1.0"
+atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""}
attrs = ">=19.2.0"
-colorama = "*"
+colorama = {version = "*", markers = "sys_platform == \"win32\""}
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<1.0.0a1"
py = ">=1.8.2"
toml = "*"
-[package.dependencies.importlib-metadata]
-python = "<3.8"
-version = ">=0.12"
-
[package.extras]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
-category = "main"
-description = "Engine.IO server"
name = "python-engineio"
+version = "4.2.0"
+description = "Engine.IO server"
+category = "main"
optional = false
python-versions = "*"
-version = "4.0.0"
[package.extras]
asyncio_client = ["aiohttp (>=3.4)"]
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
-category = "main"
-description = "Socket.IO server"
name = "python-socketio"
+version = "5.3.0"
+description = "Socket.IO server"
+category = "main"
optional = false
python-versions = "*"
-version = "5.0.4"
[package.dependencies]
bidict = ">=0.21.0"
-python-engineio = ">=4"
+python-engineio = ">=4.1.0"
[package.extras]
asyncio_client = ["aiohttp (>=3.4)", "websockets (>=7.0)"]
client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
-category = "main"
-description = "Python HTTP for Humans."
name = "requests"
+version = "2.25.1"
+description = "Python HTTP for Humans."
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-version = "2.25.1"
[package.dependencies]
certifi = ">=2017.4.17"
chardet = ">=3.0.2,<5"
idna = ">=2.5,<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]
security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
-socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
+socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
[[package]]
-category = "main"
-description = "Python 2 and 3 compatibility utilities"
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.*"
-version = "1.15.0"
[[package]]
-category = "main"
-description = "Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/)."
name = "stem"
+version = "1.8.0"
+description = "Stem is a Python controller library that allows applications to interact with Tor (https://www.torproject.org/)."
+category = "main"
optional = false
python-versions = "*"
-version = "1.8.0"
[[package]]
-category = "dev"
-description = "Python Library for Tom's Obvious, Minimal Language"
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.*"
-version = "0.10.2"
[[package]]
-category = "dev"
-description = "Backported and Experimental Type Hints for Python 3.5+"
-marker = "python_version < \"3.8\""
name = "typing-extensions"
+version = "3.10.0.0"
+description = "Backported and Experimental Type Hints for Python 3.5+"
+category = "dev"
optional = false
python-versions = "*"
-version = "3.7.4.3"
[[package]]
-category = "main"
-description = "ASCII transliterations of Unicode text"
name = "unidecode"
+version = "1.2.0"
+description = "ASCII transliterations of Unicode text"
+category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "1.1.2"
[[package]]
-category = "main"
-description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
+version = "1.26.5"
+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"
-version = "1.26.3"
[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 || >1.5.7,<2.0)"]
+socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[[package]]
-category = "main"
-description = "The comprehensive WSGI web application library."
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.*"
-version = "1.0.1"
[package.extras]
dev = ["pytest", "pytest-timeout", "coverage", "tox", "sphinx", "pallets-sphinx-themes", "sphinx-issues"]
watchdog = ["watchdog"]
[[package]]
-category = "dev"
-description = "Backport of pathlib-compatible object wrapper for zip files"
-marker = "python_version < \"3.8\""
name = "zipp"
+version = "3.4.1"
+description = "Backport of pathlib-compatible object wrapper for zip files"
+category = "dev"
optional = false
python-versions = ">=3.6"
-version = "3.4.0"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
-testing = ["pytest (>=3.5,<3.7.3 || >3.7.3)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "jaraco.test (>=3.2.0)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
+docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"]
+testing = ["pytest (>=4.6)", "pytest-checkdocs (>=1.2.3)", "pytest-flake8", "pytest-cov", "pytest-enabler", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"]
[metadata]
-content-hash = "f69ea4d5b4e409cfe082f8b14503967609add515991cc778b3f2ec4e311dcd1c"
+lock-version = "1.1"
python-versions = "^3.6"
+content-hash = "b33fc47db907e6db7cb254b5cac34b0d9558547418e8074280063159b291766a"
[metadata.files]
atomicwrites = [
@@ -443,16 +432,16 @@ atomicwrites = [
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-20.3.0-py2.py3-none-any.whl", hash = "sha256:31b2eced602aa8423c2aea9c76a724617ed67cf9513173fd3a4f03e3a929c7e6"},
- {file = "attrs-20.3.0.tar.gz", hash = "sha256:832aa3cde19744e49938b91fea06d69ecb9e649c93ba974535d08ad92164f700"},
+ {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.2-py2.py3-none-any.whl", hash = "sha256:929d056e8d0d9b17ceda20ba5b24ac388e2a4d39802b87f9f4d3f45ecba070bf"},
{file = "bidict-0.21.2.tar.gz", hash = "sha256:4fa46f7ff96dc244abfc437383d987404ae861df797e2fd5b190e233c302be09"},
]
certifi = [
- {file = "certifi-2020.12.5-py2.py3-none-any.whl", hash = "sha256:719a74fb9e33b9bd44cc7f3a8d94bc35e4049deebe19ba7d8e108280cfd59830"},
- {file = "certifi-2020.12.5.tar.gz", hash = "sha256:1a4995114262bffbc2413b159f2a1a480c969de6e6eb13ee966d470af86af59c"},
+ {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"},
+ {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"},
]
chardet = [
{file = "chardet-4.0.0-py2.py3-none-any.whl", hash = "sha256:f864054d66fd9118f2e67044ac8981a54775ec5b67aed0441892edb553d21da5"},
@@ -471,73 +460,79 @@ dnspython = [
{file = "dnspython-1.16.0.zip", hash = "sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01"},
]
eventlet = [
- {file = "eventlet-0.30.0-py2.py3-none-any.whl", hash = "sha256:b33f31ae8d87eb2838dcb8467449211852374ee6dea97113c158fc84d9acff9b"},
- {file = "eventlet-0.30.0.tar.gz", hash = "sha256:19d6f3aa9525221ba60d0ec31b570508021af7ad5497fb77f77501fe9a7c34d3"},
+ {file = "eventlet-0.31.0-py2.py3-none-any.whl", hash = "sha256:27ae41fad9deed9bbf4166f3e3b65acc15d524d42210a518e5877da85a6b8c5d"},
+ {file = "eventlet-0.31.0.tar.gz", hash = "sha256:b36ec2ecc003de87fc87b93197d77fea528aa0f9204a34fdf3b2f8d0f01e017b"},
]
flask = [
- {file = "Flask-1.1.2-py2.py3-none-any.whl", hash = "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"},
- {file = "Flask-1.1.2.tar.gz", hash = "sha256:4efa1ae2d7c9865af48986de8aeb8504bf32c7f3d6fdc9353d34b21f4b127060"},
+ {file = "Flask-1.1.4-py2.py3-none-any.whl", hash = "sha256:c34f04500f2cbbea882b1acb02002ad6fe6b7ffa64a6164577995657f50aed22"},
+ {file = "Flask-1.1.4.tar.gz", hash = "sha256:0fbeb6180d383a9186d0d6ed954e0042ad9f18e0e8de088b2b419d526927d196"},
]
flask-httpauth = [
- {file = "Flask-HTTPAuth-4.2.0.tar.gz", hash = "sha256:8c7e49e53ce7dc14e66fe39b9334e4b7ceb8d0b99a6ba1c3562bb528ef9da84a"},
- {file = "Flask_HTTPAuth-4.2.0-py2.py3-none-any.whl", hash = "sha256:3fcedb99a03985915335a38c35bfee6765cbd66d7f46440fa3b42ae94a90fac7"},
+ {file = "Flask-HTTPAuth-4.4.0.tar.gz", hash = "sha256:bcaaa7a35a3cba0b2eafd4f113b3016bf70eb78087456d96484c3c18928b813a"},
+ {file = "Flask_HTTPAuth-4.4.0-py2.py3-none-any.whl", hash = "sha256:d9131122cdc5709dda63790f6e9b3142d8101447d424b0b95ffd4ee279f49539"},
]
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.0.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:1d1d4473ecb1c1d31ce8fd8d91e4da1b1f64d425c1dc965edc4ed2a63cfa67b2"},
- {file = "greenlet-1.0.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:cfd06e0f0cc8db2a854137bd79154b61ecd940dce96fad0cba23fe31de0b793c"},
- {file = "greenlet-1.0.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:eb333b90036358a0e2c57373f72e7648d7207b76ef0bd00a4f7daad1f79f5203"},
- {file = "greenlet-1.0.0-cp27-cp27m-win32.whl", hash = "sha256:1a1ada42a1fd2607d232ae11a7b3195735edaa49ea787a6d9e6a53afaf6f3476"},
- {file = "greenlet-1.0.0-cp27-cp27m-win_amd64.whl", hash = "sha256:f6f65bf54215e4ebf6b01e4bb94c49180a589573df643735107056f7a910275b"},
- {file = "greenlet-1.0.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:f59eded163d9752fd49978e0bab7a1ff21b1b8d25c05f0995d140cc08ac83379"},
- {file = "greenlet-1.0.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:875d4c60a6299f55df1c3bb870ebe6dcb7db28c165ab9ea6cdc5d5af36bb33ce"},
- {file = "greenlet-1.0.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:1bb80c71de788b36cefb0c3bb6bfab306ba75073dbde2829c858dc3ad70f867c"},
- {file = "greenlet-1.0.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b5f1b333015d53d4b381745f5de842f19fe59728b65f0fbb662dafbe2018c3a5"},
- {file = "greenlet-1.0.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:5352c15c1d91d22902582e891f27728d8dac3bd5e0ee565b6a9f575355e6d92f"},
- {file = "greenlet-1.0.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:2c65320774a8cd5fdb6e117c13afa91c4707548282464a18cf80243cf976b3e6"},
- {file = "greenlet-1.0.0-cp35-cp35m-manylinux2014_ppc64le.whl", hash = "sha256:111cfd92d78f2af0bc7317452bd93a477128af6327332ebf3c2be7df99566683"},
- {file = "greenlet-1.0.0-cp35-cp35m-win32.whl", hash = "sha256:cdb90267650c1edb54459cdb51dab865f6c6594c3a47ebd441bc493360c7af70"},
- {file = "greenlet-1.0.0-cp35-cp35m-win_amd64.whl", hash = "sha256:eac8803c9ad1817ce3d8d15d1bb82c2da3feda6bee1153eec5c58fa6e5d3f770"},
- {file = "greenlet-1.0.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:c93d1a71c3fe222308939b2e516c07f35a849c5047f0197442a4d6fbcb4128ee"},
- {file = "greenlet-1.0.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:122c63ba795fdba4fc19c744df6277d9cfd913ed53d1a286f12189a0265316dd"},
- {file = "greenlet-1.0.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:c5b22b31c947ad8b6964d4ed66776bcae986f73669ba50620162ba7c832a6b6a"},
- {file = "greenlet-1.0.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:4365eccd68e72564c776418c53ce3c5af402bc526fe0653722bc89efd85bf12d"},
- {file = "greenlet-1.0.0-cp36-cp36m-manylinux2014_ppc64le.whl", hash = "sha256:da7d09ad0f24270b20f77d56934e196e982af0d0a2446120cb772be4e060e1a2"},
- {file = "greenlet-1.0.0-cp36-cp36m-win32.whl", hash = "sha256:647ba1df86d025f5a34043451d7c4a9f05f240bee06277a524daad11f997d1e7"},
- {file = "greenlet-1.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:e6e9fdaf6c90d02b95e6b0709aeb1aba5affbbb9ccaea5502f8638e4323206be"},
- {file = "greenlet-1.0.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:62afad6e5fd70f34d773ffcbb7c22657e1d46d7fd7c95a43361de979f0a45aef"},
- {file = "greenlet-1.0.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:d3789c1c394944084b5e57c192889985a9f23bd985f6d15728c745d380318128"},
- {file = "greenlet-1.0.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:f5e2d36c86c7b03c94b8459c3bd2c9fe2c7dab4b258b8885617d44a22e453fb7"},
- {file = "greenlet-1.0.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:292e801fcb3a0b3a12d8c603c7cf340659ea27fd73c98683e75800d9fd8f704c"},
- {file = "greenlet-1.0.0-cp37-cp37m-manylinux2014_ppc64le.whl", hash = "sha256:f3dc68272990849132d6698f7dc6df2ab62a88b0d36e54702a8fd16c0490e44f"},
- {file = "greenlet-1.0.0-cp37-cp37m-win32.whl", hash = "sha256:7cd5a237f241f2764324396e06298b5dee0df580cf06ef4ada0ff9bff851286c"},
- {file = "greenlet-1.0.0-cp37-cp37m-win_amd64.whl", hash = "sha256:0ddd77586553e3daf439aa88b6642c5f252f7ef79a39271c25b1d4bf1b7cbb85"},
- {file = "greenlet-1.0.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:90b6a25841488cf2cb1c8623a53e6879573010a669455046df5f029d93db51b7"},
- {file = "greenlet-1.0.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ed1d1351f05e795a527abc04a0d82e9aecd3bdf9f46662c36ff47b0b00ecaf06"},
- {file = "greenlet-1.0.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:94620ed996a7632723a424bccb84b07e7b861ab7bb06a5aeb041c111dd723d36"},
- {file = "greenlet-1.0.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f97d83049715fd9dec7911860ecf0e17b48d8725de01e45de07d8ac0bd5bc378"},
- {file = "greenlet-1.0.0-cp38-cp38-manylinux2014_ppc64le.whl", hash = "sha256:0a77691f0080c9da8dfc81e23f4e3cffa5accf0f5b56478951016d7cfead9196"},
- {file = "greenlet-1.0.0-cp38-cp38-win32.whl", hash = "sha256:e1128e022d8dce375362e063754e129750323b67454cac5600008aad9f54139e"},
- {file = "greenlet-1.0.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d4030b04061fdf4cbc446008e238e44936d77a04b2b32f804688ad64197953c"},
- {file = "greenlet-1.0.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:f8450d5ef759dbe59f84f2c9f77491bb3d3c44bc1a573746daf086e70b14c243"},
- {file = "greenlet-1.0.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:df8053867c831b2643b2c489fe1d62049a98566b1646b194cc815f13e27b90df"},
- {file = "greenlet-1.0.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:df3e83323268594fa9755480a442cabfe8d82b21aba815a71acf1bb6c1776218"},
- {file = "greenlet-1.0.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:181300f826625b7fd1182205b830642926f52bd8cdb08b34574c9d5b2b1813f7"},
- {file = "greenlet-1.0.0-cp39-cp39-manylinux2014_ppc64le.whl", hash = "sha256:58ca0f078d1c135ecf1879d50711f925ee238fe773dfe44e206d7d126f5bc664"},
- {file = "greenlet-1.0.0-cp39-cp39-win32.whl", hash = "sha256:5f297cb343114b33a13755032ecf7109b07b9a0020e841d1c3cedff6602cc139"},
- {file = "greenlet-1.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:5d69bbd9547d3bc49f8a545db7a0bd69f407badd2ff0f6e1a163680b5841d2b0"},
- {file = "greenlet-1.0.0.tar.gz", hash = "sha256:719e169c79255816cdcf6dccd9ed2d089a72a9f6c42273aae12d55e8d35bdcf8"},
+ {file = "greenlet-1.1.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:60848099b76467ef09b62b0f4512e7e6f0a2c977357a036de602b653667f5f4c"},
+ {file = "greenlet-1.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:f42ad188466d946f1b3afc0a9e1a266ac8926461ee0786c06baac6bd71f8a6f3"},
+ {file = "greenlet-1.1.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:76ed710b4e953fc31c663b079d317c18f40235ba2e3d55f70ff80794f7b57922"},
+ {file = "greenlet-1.1.0-cp27-cp27m-win32.whl", hash = "sha256:b33b51ab057f8a20b497ffafdb1e79256db0c03ef4f5e3d52e7497200e11f821"},
+ {file = "greenlet-1.1.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ed1377feed808c9c1139bdb6a61bcbf030c236dd288d6fca71ac26906ab03ba6"},
+ {file = "greenlet-1.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:da862b8f7de577bc421323714f63276acb2f759ab8c5e33335509f0b89e06b8f"},
+ {file = "greenlet-1.1.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:5f75e7f237428755d00e7460239a2482fa7e3970db56c8935bd60da3f0733e56"},
+ {file = "greenlet-1.1.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:258f9612aba0d06785143ee1cbf2d7361801c95489c0bd10c69d163ec5254a16"},
+ {file = "greenlet-1.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d928e2e3c3906e0a29b43dc26d9b3d6e36921eee276786c4e7ad9ff5665c78a"},
+ {file = "greenlet-1.1.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cc407b68e0a874e7ece60f6639df46309376882152345508be94da608cc0b831"},
+ {file = "greenlet-1.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c557c809eeee215b87e8a7cbfb2d783fb5598a78342c29ade561440abae7d22"},
+ {file = "greenlet-1.1.0-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:3d13da093d44dee7535b91049e44dd2b5540c2a0e15df168404d3dd2626e0ec5"},
+ {file = "greenlet-1.1.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:b3090631fecdf7e983d183d0fad7ea72cfb12fa9212461a9b708ff7907ffff47"},
+ {file = "greenlet-1.1.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:06ecb43b04480e6bafc45cb1b4b67c785e183ce12c079473359e04a709333b08"},
+ {file = "greenlet-1.1.0-cp35-cp35m-win32.whl", hash = "sha256:944fbdd540712d5377a8795c840a97ff71e7f3221d3fddc98769a15a87b36131"},
+ {file = "greenlet-1.1.0-cp35-cp35m-win_amd64.whl", hash = "sha256:c767458511a59f6f597bfb0032a1c82a52c29ae228c2c0a6865cfeaeaac4c5f5"},
+ {file = "greenlet-1.1.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:2325123ff3a8ecc10ca76f062445efef13b6cf5a23389e2df3c02a4a527b89bc"},
+ {file = "greenlet-1.1.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:598bcfd841e0b1d88e32e6a5ea48348a2c726461b05ff057c1b8692be9443c6e"},
+ {file = "greenlet-1.1.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:be9768e56f92d1d7cd94185bab5856f3c5589a50d221c166cc2ad5eb134bd1dc"},
+ {file = "greenlet-1.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfe7eac0d253915116ed0cd160a15a88981a1d194c1ef151e862a5c7d2f853d3"},
+ {file = "greenlet-1.1.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a6b035aa2c5fcf3dbbf0e3a8a5bc75286fc2d4e6f9cfa738788b433ec894919"},
+ {file = "greenlet-1.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca1c4a569232c063615f9e70ff9a1e2fee8c66a6fb5caf0f5e8b21a396deec3e"},
+ {file = "greenlet-1.1.0-cp36-cp36m-win32.whl", hash = "sha256:3096286a6072553b5dbd5efbefc22297e9d06a05ac14ba017233fedaed7584a8"},
+ {file = "greenlet-1.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c35872b2916ab5a240d52a94314c963476c989814ba9b519bc842e5b61b464bb"},
+ {file = "greenlet-1.1.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b97c9a144bbeec7039cca44df117efcbeed7209543f5695201cacf05ba3b5857"},
+ {file = "greenlet-1.1.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:16183fa53bc1a037c38d75fdc59d6208181fa28024a12a7f64bb0884434c91ea"},
+ {file = "greenlet-1.1.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6b1d08f2e7f2048d77343279c4d4faa7aef168b3e36039cba1917fffb781a8ed"},
+ {file = "greenlet-1.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14927b15c953f8f2d2a8dffa224aa78d7759ef95284d4c39e1745cf36e8cdd2c"},
+ {file = "greenlet-1.1.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9bdcff4b9051fb1aa4bba4fceff6a5f770c6be436408efd99b76fc827f2a9319"},
+ {file = "greenlet-1.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70c7dd733a4c56838d1f1781e769081a25fade879510c5b5f0df76956abfa05"},
+ {file = "greenlet-1.1.0-cp37-cp37m-win32.whl", hash = "sha256:0de64d419b1cb1bfd4ea544bedea4b535ef3ae1e150b0f2609da14bbf48a4a5f"},
+ {file = "greenlet-1.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:8833e27949ea32d27f7e96930fa29404dd4f2feb13cce483daf52e8842ec246a"},
+ {file = "greenlet-1.1.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:c1580087ab493c6b43e66f2bdd165d9e3c1e86ef83f6c2c44a29f2869d2c5bd5"},
+ {file = "greenlet-1.1.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ad80bb338cf9f8129c049837a42a43451fc7c8b57ad56f8e6d32e7697b115505"},
+ {file = "greenlet-1.1.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:a9017ff5fc2522e45562882ff481128631bf35da444775bc2776ac5c61d8bcae"},
+ {file = "greenlet-1.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7920e3eccd26b7f4c661b746002f5ec5f0928076bd738d38d894bb359ce51927"},
+ {file = "greenlet-1.1.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:408071b64e52192869129a205e5b463abda36eff0cebb19d6e63369440e4dc99"},
+ {file = "greenlet-1.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be13a18cec649ebaab835dff269e914679ef329204704869f2f167b2c163a9da"},
+ {file = "greenlet-1.1.0-cp38-cp38-win32.whl", hash = "sha256:22002259e5b7828b05600a762579fa2f8b33373ad95a0ee57b4d6109d0e589ad"},
+ {file = "greenlet-1.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:206295d270f702bc27dbdbd7651e8ebe42d319139e0d90217b2074309a200da8"},
+ {file = "greenlet-1.1.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:096cb0217d1505826ba3d723e8981096f2622cde1eb91af9ed89a17c10aa1f3e"},
+ {file = "greenlet-1.1.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:03f28a5ea20201e70ab70518d151116ce939b412961c33827519ce620957d44c"},
+ {file = "greenlet-1.1.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7db68f15486d412b8e2cfcd584bf3b3a000911d25779d081cbbae76d71bd1a7e"},
+ {file = "greenlet-1.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70bd1bb271e9429e2793902dfd194b653221904a07cbf207c3139e2672d17959"},
+ {file = "greenlet-1.1.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f92731609d6625e1cc26ff5757db4d32b6b810d2a3363b0ff94ff573e5901f6f"},
+ {file = "greenlet-1.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06d7ac89e6094a0a8f8dc46aa61898e9e1aec79b0f8b47b2400dd51a44dbc832"},
+ {file = "greenlet-1.1.0-cp39-cp39-win32.whl", hash = "sha256:adb94a28225005890d4cf73648b5131e885c7b4b17bc762779f061844aabcc11"},
+ {file = "greenlet-1.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:aa4230234d02e6f32f189fd40b59d5a968fe77e80f59c9c933384fe8ba535535"},
+ {file = "greenlet-1.1.0.tar.gz", hash = "sha256:c87df8ae3f01ffb4483c796fe1b15232ce2b219f0b18126948616224d3f658ee"},
]
idna = [
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
{file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
]
importlib-metadata = [
- {file = "importlib_metadata-3.4.0-py3-none-any.whl", hash = "sha256:ace61d5fc652dc280e7b6b4ff732a9c2d40db2c0f92bc6cb74e07b73d53a1771"},
- {file = "importlib_metadata-3.4.0.tar.gz", hash = "sha256:fa5daa4477a7414ae34e95942e4dd07f62adf589143c875c133c1e53c4eff38d"},
+ {file = "importlib_metadata-4.4.0-py3-none-any.whl", hash = "sha256:960d52ba7c21377c990412aca380bf3642d734c2eaab78a2c39319f67c6a5786"},
+ {file = "importlib_metadata-4.4.0.tar.gz", hash = "sha256:e592faad8de1bda9fe920cf41e15261e7131bcf266c30306eec00e8e225c1dd5"},
]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
@@ -548,43 +543,44 @@ itsdangerous = [
{file = "itsdangerous-1.1.0.tar.gz", hash = "sha256:321b033d07f2a4136d3ec762eac9f16a10ccd60f53c0c91af90217ace7ba1f19"},
]
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-2.11.3-py2.py3-none-any.whl", hash = "sha256:03e47ad063331dd6a3f04a43eddca8a966a26ba0c5b7207a9a9e4e08f1b29419"},
+ {file = "Jinja2-2.11.3.tar.gz", hash = "sha256:a6d58433de0ae800347cab1fa3043cebbabe8baa9d29e668f1c768cb87a333c6"},
]
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-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-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-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-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-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
- {file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
- {file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
+ {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-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-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_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-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-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.9-py2.py3-none-any.whl", hash = "sha256:67714da7f7bc052e064859c05c595155bd1ee9f69f76557e21f051443c20947a"},
@@ -629,41 +625,36 @@ py = [
{file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"},
]
pycryptodome = [
- {file = "pycryptodome-3.9.9-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:5598dc6c9dbfe882904e54584322893eff185b98960bbe2cdaaa20e8a437b6e5"},
- {file = "pycryptodome-3.9.9-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1cfdb92dca388e27e732caa72a1cc624520fe93752a665c3b6cd8f1a91b34916"},
- {file = "pycryptodome-3.9.9-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5f19e6ef750f677d924d9c7141f54bade3cd56695bbfd8a9ef15d0378557dfe4"},
- {file = "pycryptodome-3.9.9-cp27-cp27m-win32.whl", hash = "sha256:a3d8a9efa213be8232c59cdc6b65600276508e375e0a119d710826248fd18d37"},
- {file = "pycryptodome-3.9.9-cp27-cp27m-win_amd64.whl", hash = "sha256:50826b49fbca348a61529693b0031cdb782c39060fb9dca5ac5dff858159dc5a"},
- {file = "pycryptodome-3.9.9-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:19cb674df6c74a14b8b408aa30ba8a89bd1c01e23505100fb45f930fbf0ed0d9"},
- {file = "pycryptodome-3.9.9-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:28f75e58d02019a7edc7d4135203d2501dfc47256d175c72c9798f9a129a49a7"},
- {file = "pycryptodome-3.9.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:6d3baaf82681cfb1a842f1c8f77beac791ceedd99af911e4f5fabec32bae2259"},
- {file = "pycryptodome-3.9.9-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:946399d15eccebafc8ce0257fc4caffe383c75e6b0633509bd011e357368306c"},
- {file = "pycryptodome-3.9.9-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:eb01f9997e4d6a8ec8a1ad1f676ba5a362781ff64e8189fe2985258ba9cb9706"},
- {file = "pycryptodome-3.9.9-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:411745c6dce4eff918906eebcde78771d44795d747e194462abb120d2e537cd9"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:8f9f84059039b672a5a705b3c5aa21747867bacc30a72e28bf0d147cc8ef85ed"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:7798e73225a699651888489fbb1dbc565e03a509942a8ce6194bbe6fb582a41f"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:46e96aeb8a9ca8b1edf9b1fd0af4bf6afcf3f1ca7fa35529f5d60b98f3e4e959"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:843e5f10ecdf9d307032b8b91afe9da1d6ed5bb89d0bbec5c8dcb4ba44008e11"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-win32.whl", hash = "sha256:b68794fba45bdb367eeb71249c26d23e61167510a1d0c3d6cf0f2f14636e62ee"},
- {file = "pycryptodome-3.9.9-cp36-cp36m-win_amd64.whl", hash = "sha256:60febcf5baf70c566d9d9351c47fbd8321da9a4edf2eff45c4c31c86164ca794"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:4ed27951b0a17afd287299e2206a339b5b6d12de9321e1a1575261ef9c4a851b"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9000877383e2189dafd1b2fc68c6c726eca9a3cfb6d68148fbb72ccf651959b6"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:faa682c404c218e8788c3126c9a4b8fbcc54dc245b5b6e8ea5b46f3b63bd0c84"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:62c488a21c253dadc9f731a32f0ac61e4e436d81a1ea6f7d1d9146ed4d20d6bd"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-win32.whl", hash = "sha256:834b790bbb6bd18956f625af4004d9c15eed12d5186d8e57851454ae76d52215"},
- {file = "pycryptodome-3.9.9-cp37-cp37m-win_amd64.whl", hash = "sha256:70d807d11d508433daf96244ec1c64e55039e8a35931fc5ea9eee94dbe3cb6b5"},
- {file = "pycryptodome-3.9.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:27397aee992af69d07502126561d851ba3845aa808f0e55c71ad0efa264dd7d4"},
- {file = "pycryptodome-3.9.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:d7ec2bd8f57c559dd24e71891c51c25266a8deb66fc5f02cc97c7fb593d1780a"},
- {file = "pycryptodome-3.9.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:e15bde67ccb7d4417f627dd16ffe2f5a4c2941ce5278444e884cb26d73ecbc61"},
- {file = "pycryptodome-3.9.9-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:5c3c4865730dfb0263f822b966d6d58429d8b1e560d1ddae37685fd9e7c63161"},
- {file = "pycryptodome-3.9.9-cp38-cp38-win32.whl", hash = "sha256:76b1a34d74bb2c91bce460cdc74d1347592045627a955e9a252554481c17c52f"},
- {file = "pycryptodome-3.9.9-cp38-cp38-win_amd64.whl", hash = "sha256:6e4227849e4231a3f5b35ea5bdedf9a82b3883500e5624f00a19156e9a9ef861"},
- {file = "pycryptodome-3.9.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:2a68df525b387201a43b27b879ce8c08948a430e883a756d6c9e3acdaa7d7bd8"},
- {file = "pycryptodome-3.9.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:a4599c0ca0fc027c780c1c45ed996d5bef03e571470b7b1c7171ec1e1a90914c"},
- {file = "pycryptodome-3.9.9-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:b4e6b269a8ddaede774e5c3adbef6bf452ee144e6db8a716d23694953348cd86"},
- {file = "pycryptodome-3.9.9-cp39-cp39-win32.whl", hash = "sha256:a199e9ca46fc6e999e5f47fce342af4b56c7de85fae893c69ab6aa17531fb1e1"},
- {file = "pycryptodome-3.9.9-cp39-cp39-win_amd64.whl", hash = "sha256:6e89bb3826e6f84501e8e3b205c22595d0c5492c2f271cbb9ee1c48eb1866645"},
- {file = "pycryptodome-3.9.9.tar.gz", hash = "sha256:910e202a557e1131b1c1b3f17a63914d57aac55cf9fb9b51644962841c3995c4"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:1c5e1ca507de2ad93474be5cfe2bfa76b7cf039a1a32fc196f40935944871a06"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:6260e24d41149268122dd39d4ebd5941e9d107f49463f7e071fd397e29923b0c"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:3f840c49d38986f6e17dbc0673d37947c88bc9d2d9dba1c01b979b36f8447db1"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:2dea65df54349cdfa43d6b2e8edb83f5f8d6861e5cf7b1fbc3e34c5694c85e27"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:e61e363d9a5d7916f3a4ce984a929514c0df3daf3b1b2eb5e6edbb131ee771cf"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:2603c98ae04aac675fefcf71a6c87dc4bb74a75e9071ae3923bbc91a59f08d35"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-win32.whl", hash = "sha256:38661348ecb71476037f1e1f553159b80d256c00f6c0b00502acac891f7116d9"},
+ {file = "pycryptodome-3.10.1-cp27-cp27m-win_amd64.whl", hash = "sha256:1723ebee5561628ce96748501cdaa7afaa67329d753933296321f0be55358dce"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:77997519d8eb8a4adcd9a47b9cec18f9b323e296986528186c0e9a7a15d6a07e"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:99b2f3fc51d308286071d0953f92055504a6ffe829a832a9fc7a04318a7683dd"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e0a4d5933a88a2c98bbe19c0c722f5483dc628d7a38338ac2cb64a7dbd34064b"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d3d6958d53ad307df5e8469cc44474a75393a434addf20ecd451f38a72fe29b8"},
+ {file = "pycryptodome-3.10.1-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:a8eb8b6ea09ec1c2535bf39914377bc8abcab2c7d30fa9225eb4fe412024e427"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:31c1df17b3dc5f39600a4057d7db53ac372f492c955b9b75dd439f5d8b460129"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_i686.whl", hash = "sha256:a3105a0eb63eacf98c2ecb0eb4aa03f77f40fbac2bdde22020bb8a536b226bb8"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:a92d5c414e8ee1249e850789052608f582416e82422502dc0ac8c577808a9067"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:60386d1d4cfaad299803b45a5bc2089696eaf6cdd56f9fc17479a6f89595cfc8"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:501ab36aae360e31d0ec370cf5ce8ace6cb4112060d099b993bc02b36ac83fb6"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:fc7489a50323a0df02378bc2fff86eb69d94cc5639914346c736be981c6a02e7"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-win32.whl", hash = "sha256:9b6f711b25e01931f1c61ce0115245a23cdc8b80bf8539ac0363bdcf27d649b6"},
+ {file = "pycryptodome-3.10.1-cp35-abi3-win_amd64.whl", hash = "sha256:7fd519b89585abf57bf47d90166903ec7b43af4fe23c92273ea09e6336af5c07"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:09c1555a3fa450e7eaca41ea11cd00afe7c91fef52353488e65663777d8524e0"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:758949ca62690b1540dfb24ad773c6da9cd0e425189e83e39c038bbd52b8e438"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:e3bf558c6aeb49afa9f0c06cee7fb5947ee5a1ff3bd794b653d39926b49077fa"},
+ {file = "pycryptodome-3.10.1-pp27-pypy_73-win32.whl", hash = "sha256:f977cdf725b20f6b8229b0c87acb98c7717e742ef9f46b113985303ae12a99da"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:6d2df5223b12437e644ce0a3be7809471ffa71de44ccd28b02180401982594a6"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:98213ac2b18dc1969a47bc65a79a8fca02a414249d0c8635abb081c7f38c91b6"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:12222a5edc9ca4a29de15fbd5339099c4c26c56e13c2ceddf0b920794f26165d"},
+ {file = "pycryptodome-3.10.1-pp36-pypy36_pp73-win32.whl", hash = "sha256:6bbf7fee7b7948b29d7e71fcacf48bac0c57fb41332007061a933f2d996f9713"},
+ {file = "pycryptodome-3.10.1.tar.gz", hash = "sha256:3e2e3a06580c5f190df843cdb90ea28d61099cf4924334d5297a995de68e4673"},
]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
@@ -675,24 +666,24 @@ pysocks = [
{file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
]
pytest = [
- {file = "pytest-6.2.2-py3-none-any.whl", hash = "sha256:b574b57423e818210672e07ca1fa90aaf194a4f63f3ab909a2c67ebb22913839"},
- {file = "pytest-6.2.2.tar.gz", hash = "sha256:9d1edf9e7d0b84d72ea3dbcdfd22b35fb543a5e8f2a60092dd578936bf63d7f9"},
+ {file = "pytest-6.2.4-py3-none-any.whl", hash = "sha256:91ef2131a9bd6be8f76f1f08eac5c5317221d6ad1e143ae03894b862e8976890"},
+ {file = "pytest-6.2.4.tar.gz", hash = "sha256:50bcad0a0b9c5a72c8e4e7c9855a3ad496ca6a881a3641b4260605450772c54b"},
]
python-engineio = [
- {file = "python-engineio-4.0.0.tar.gz", hash = "sha256:9f34afa4170f5ba6e3d9ff158752ccf8fbb2145f16554b2f0fc84646675be99a"},
- {file = "python_engineio-4.0.0-py2.py3-none-any.whl", hash = "sha256:33f7a214be5db35c867e97027bfe63676cb003d82aa17a607612b25ba5d84e5b"},
+ {file = "python-engineio-4.2.0.tar.gz", hash = "sha256:4e97c1189c23923858f5bb6dc47cfcd915005383c3c039ff01c89f2c00d62077"},
+ {file = "python_engineio-4.2.0-py2.py3-none-any.whl", hash = "sha256:c6c119c2039fcb6f64d260211ca92c0c61b2b888a28678732a961f2aaebcc848"},
]
python-socketio = [
- {file = "python-socketio-5.0.4.tar.gz", hash = "sha256:f53fd0d5bd9f75a70492062f4ae6195ab5d34d67a29024d740f25e468392893e"},
- {file = "python_socketio-5.0.4-py2.py3-none-any.whl", hash = "sha256:870f8b00a63ef7c9a1f85fd70028624867bf246115e82625f28ef79def8847bb"},
+ {file = "python-socketio-5.3.0.tar.gz", hash = "sha256:3dcc9785aaeef3a9eeb36c3818095662342744bdcdabd050fe697cdb826a1c2b"},
+ {file = "python_socketio-5.3.0-py2.py3-none-any.whl", hash = "sha256:d74314fd4241342c8a55c4f66d5cfea8f1a8fffd157af216c67e1c3a649a2444"},
]
requests = [
{file = "requests-2.25.1-py2.py3-none-any.whl", hash = "sha256:c210084e36a42ae6b9219e00e48287def368a26d03a048ddad7bfee44f75871e"},
{file = "requests-2.25.1.tar.gz", hash = "sha256:27973dd4a904a4f13b263a19c866c13b92a39ed1c964655f025f3f8d3d75b804"},
]
six = [
- {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
- {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
+ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
+ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
]
stem = [
{file = "stem-1.8.0.tar.gz", hash = "sha256:a0b48ea6224e95f22aa34c0bc3415f0eb4667ddeae3dfb5e32a6920c185568c2"},
@@ -702,23 +693,23 @@ toml = [
{file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"},
]
typing-extensions = [
- {file = "typing_extensions-3.7.4.3-py2-none-any.whl", hash = "sha256:dafc7639cde7f1b6e1acc0f457842a83e722ccca8eef5270af2d74792619a89f"},
- {file = "typing_extensions-3.7.4.3-py3-none-any.whl", hash = "sha256:7cb407020f00f7bfc3cb3e7881628838e69d8f3fcab2f64742a5e76b2f841918"},
- {file = "typing_extensions-3.7.4.3.tar.gz", hash = "sha256:99d4073b617d30288f569d3f13d2bd7548c3a7e4c8de87db09a9d29bb3a4a60c"},
+ {file = "typing_extensions-3.10.0.0-py2-none-any.whl", hash = "sha256:0ac0f89795dd19de6b97debb0c6af1c70987fd80a2d62d1958f7e56fcc31b497"},
+ {file = "typing_extensions-3.10.0.0-py3-none-any.whl", hash = "sha256:779383f6086d90c99ae41cf0ff39aac8a7937a9283ce0a414e5dd782f4c94a84"},
+ {file = "typing_extensions-3.10.0.0.tar.gz", hash = "sha256:50b6f157849174217d0656f99dc82fe932884fb250826c18350e159ec6cdf342"},
]
unidecode = [
- {file = "Unidecode-1.1.2-py2.py3-none-any.whl", hash = "sha256:4c9d15d2f73eb0d2649a151c566901f80a030da1ccb0a2043352e1dbf647586b"},
- {file = "Unidecode-1.1.2.tar.gz", hash = "sha256:a039f89014245e0cad8858976293e23501accc9ff5a7bdbc739a14a2b7b85cdc"},
+ {file = "Unidecode-1.2.0-py2.py3-none-any.whl", hash = "sha256:12435ef2fc4cdfd9cf1035a1db7e98b6b047fe591892e81f34e94959591fad00"},
+ {file = "Unidecode-1.2.0.tar.gz", hash = "sha256:8d73a97d387a956922344f6b74243c2c6771594659778744b2dbdaad8f6b727d"},
]
urllib3 = [
- {file = "urllib3-1.26.3-py2.py3-none-any.whl", hash = "sha256:1b465e494e3e0d8939b50680403e3aedaa2bc434b7d5af64dfd3c958d7f5ae80"},
- {file = "urllib3-1.26.3.tar.gz", hash = "sha256:de3eedaad74a2683334e282005cd8d7f22f4d55fa690a2a1020a416cb0a47e73"},
+ {file = "urllib3-1.26.5-py2.py3-none-any.whl", hash = "sha256:753a0374df26658f99d826cfe40394a686d05985786d946fbe4165b5148f5a7c"},
+ {file = "urllib3-1.26.5.tar.gz", hash = "sha256:a7acd0977125325f516bda9735fa7142b909a8d01e8b2e4c8108d0984e6e0098"},
]
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.4.0-py3-none-any.whl", hash = "sha256:102c24ef8f171fd729d46599845e95c7ab894a4cf45f5de11a44cc7444fb1108"},
- {file = "zipp-3.4.0.tar.gz", hash = "sha256:ed5eee1974372595f9e416cc7bbeeb12335201d8081ca8a0743c954d4446e5cb"},
+ {file = "zipp-3.4.1-py3-none-any.whl", hash = "sha256:51cb66cc54621609dd593d1787f286ee42a5c0adbb4b29abea5a63edc3e03098"},
+ {file = "zipp-3.4.1.tar.gz", hash = "sha256:3607921face881ba3e026887d8150cca609d517579abe052ac81fc5aeffdbd76"},
]
diff --git a/cli/pyproject.toml b/cli/pyproject.toml
index e393a8c5..51405d3d 100644
--- a/cli/pyproject.toml
+++ b/cli/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "onionshare_cli"
-version = "2.3.1"
+version = "2.3.3"
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 <micah@micahflee.com>"]
license = "GPLv3+"
@@ -18,18 +18,19 @@ classifiers = [
[tool.poetry.dependencies]
python = "^3.6"
click = "*"
-flask = "*"
+flask = "1.1.4"
flask-httpauth = "*"
-flask-socketio = "*"
+flask-socketio = "5.0.1"
psutil = "*"
pycryptodome = "*"
pysocks = "*"
-requests = "*"
+requests = {extras = ["socks"], version = "*"}
stem = "*"
unidecode = "*"
urllib3 = "*"
eventlet = "*"
setuptools = "*"
+colorama = "*"
[tool.poetry.dev-dependencies]
pytest = "*"
diff --git a/cli/setup.py b/cli/setup.py
index 90f7ddbc..ce5e229f 100644
--- a/cli/setup.py
+++ b/cli/setup.py
@@ -18,19 +18,19 @@ 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 <http://www.gnu.org/licenses/>.
"""
-
-# snap and flatpak packaging uses setup.py
-# PyPi publishing, developing, and testing uses poetry
-
-import os
import setuptools
-version = "2.3.1"
+version = "2.3.3"
setuptools.setup(
name="onionshare-cli",
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=(
+ "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",
diff --git a/cli/tests/conftest.py b/cli/tests/conftest.py
index 04d4112a..37b929ec 100644
--- a/cli/tests/conftest.py
+++ b/cli/tests/conftest.py
@@ -1,11 +1,4 @@
import sys
-
-# Force tests to look for resources in the source code tree
-sys.onionshare_dev_mode = True
-
-# Let OnionShare know the tests are running, to avoid colliding with settings files
-sys.onionshare_test_mode = True
-
import os
import shutil
import tempfile
@@ -14,6 +7,11 @@ import pytest
from onionshare_cli import common, web
+# Force tests to look for resources in the source code tree
+sys.onionshare_dev_mode = True
+
+# Let OnionShare know the tests are running, to avoid colliding with settings files
+sys.onionshare_test_mode = True
# The temporary directory for CLI tests
test_temp_dir = None
@@ -45,7 +43,7 @@ def temp_dir():
@pytest.fixture
def temp_dir_1024(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes).
"""
@@ -56,10 +54,9 @@ def temp_dir_1024(temp_dir):
return new_temp_dir
-# pytest > 2.9 only needs @pytest.fixture
-@pytest.yield_fixture
+@pytest.fixture
def temp_dir_1024_delete(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes). The temporary directory (including
the file inside) will be deleted after fixture usage.
"""
@@ -73,15 +70,14 @@ def temp_dir_1024_delete(temp_dir):
@pytest.fixture
def temp_file_1024(temp_dir):
- """ Create a temporary file of a particular size (1024 bytes). """
+ """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
-# pytest > 2.9 only needs @pytest.fixture
-@pytest.yield_fixture
+@pytest.fixture
def temp_file_1024_delete(temp_dir):
"""
Create a temporary file of a particular size (1024 bytes).
@@ -95,8 +91,7 @@ def temp_file_1024_delete(temp_dir):
yield tmp_file.name
-# pytest > 2.9 only needs @pytest.fixture
-@pytest.yield_fixture(scope="session")
+@pytest.fixture(scope="session")
def custom_zw():
zw = web.share_mode.ZipWriter(
common.Common(),
@@ -108,8 +103,7 @@ def custom_zw():
os.remove(zw.zip_filename)
-# pytest > 2.9 only needs @pytest.fixture
-@pytest.yield_fixture(scope="session")
+@pytest.fixture(scope="session")
def default_zw():
zw = web.share_mode.ZipWriter(common.Common())
yield zw
@@ -117,7 +111,7 @@ def default_zw():
tmp_dir = os.path.dirname(zw.zip_filename)
try:
shutil.rmtree(tmp_dir, ignore_errors=True)
- except:
+ except Exception:
pass
@@ -189,10 +183,3 @@ def time_strftime(monkeypatch):
@pytest.fixture
def common_obj():
return common.Common()
-
-
-@pytest.fixture
-def settings_obj(sys_onionshare_dev_mode, platform_linux):
- _common = common.Common()
- _common.version = "DUMMY_VERSION_1.2.3"
- return settings.Settings(_common)
diff --git a/cli/tests/test_cli.py b/cli/tests/test_cli.py
index be71240b..d838f712 100644
--- a/cli/tests/test_cli.py
+++ b/cli/tests/test_cli.py
@@ -36,7 +36,6 @@ class TestOnionShare:
def test_init(self, onionshare_obj):
assert onionshare_obj.hidserv_dir is None
assert onionshare_obj.onion_host is None
- assert onionshare_obj.cleanup_filenames == []
assert onionshare_obj.local_only is False
def test_start_onion_service(self, onionshare_obj, mode_settings_obj):
@@ -48,11 +47,3 @@ class TestOnionShare:
onionshare_obj.local_only = True
onionshare_obj.start_onion_service("share", mode_settings_obj)
assert onionshare_obj.onion_host == "127.0.0.1:{}".format(onionshare_obj.port)
-
- def test_cleanup(self, onionshare_obj, temp_dir_1024, temp_file_1024):
- onionshare_obj.cleanup_filenames = [temp_dir_1024, temp_file_1024]
- onionshare_obj.cleanup()
-
- assert os.path.exists(temp_dir_1024) is False
- assert os.path.exists(temp_dir_1024) is False
- assert onionshare_obj.cleanup_filenames == []
diff --git a/cli/tests/test_cli_common.py b/cli/tests/test_cli_common.py
index e95ba03e..3288e52b 100644
--- a/cli/tests/test_cli_common.py
+++ b/cli/tests/test_cli_common.py
@@ -1,12 +1,10 @@
import contextlib
-import inspect
import io
import os
import random
import re
import socket
import sys
-import zipfile
import pytest
@@ -133,7 +131,7 @@ class TestGetAvailablePort:
((random.randint(1024, 1500), random.randint(1800, 2048)) for _ in range(50)),
)
def test_returns_an_open_port(self, common_obj, port_min, port_max):
- """ get_available_port() should return an open port within the range """
+ """get_available_port() should return an open port within the range"""
port = common_obj.get_available_port(port_min, port_max)
assert port_min <= port <= port_max
@@ -193,7 +191,9 @@ class TestGetTorPaths:
@pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
def test_get_tor_paths_windows(self, platform_windows, common_obj, sys_frozen):
base_path = os.path.join(
- os.path.dirname(os.path.dirname(common_obj.get_resource_path(""))), "tor"
+ os.path.dirname(os.path.dirname(common_obj.get_resource_path(""))),
+ "resources",
+ "tor",
)
tor_path = os.path.join(os.path.join(base_path, "Tor"), "tor.exe")
obfs4proxy_file_path = os.path.join(
@@ -243,5 +243,11 @@ class TestLog:
output = buf.getvalue()
line_one, line_two, _ = output.split("\n")
- assert line_one == "[Jun 06 2013 11:05:00] TestModule.dummy_func"
- assert line_two == "[Jun 06 2013 11:05:00] TestModule.dummy_func: TEST_MSG"
+ assert (
+ "[Jun 06 2013 11:05:00]" in line_one and "TestModule.dummy_func" in line_one
+ )
+ assert (
+ "[Jun 06 2013 11:05:00]" in line_two
+ and "TestModule.dummy_func" in line_two
+ and "TEST_MSG" in line_two
+ )
diff --git a/cli/tests/test_cli_settings.py b/cli/tests/test_cli_settings.py
index 62f97267..4c012901 100644
--- a/cli/tests/test_cli_settings.py
+++ b/cli/tests/test_cli_settings.py
@@ -34,6 +34,7 @@ class TestSettings:
"tor_bridges_use_meek_lite_azure": False,
"tor_bridges_use_custom_bridges": "",
"persistent_tabs": [],
+ "theme":0
}
for key in settings_obj._settings:
# Skip locale, it will not always default to the same thing
diff --git a/cli/tests/test_cli_web.py b/cli/tests/test_cli_web.py
index 063bd43c..f8c96f9c 100644
--- a/cli/tests/test_cli_web.py
+++ b/cli/tests/test_cli_web.py
@@ -1,35 +1,57 @@
-import contextlib
-import inspect
-import io
import os
import random
import re
import socket
-import sys
+import subprocess
+import time
import zipfile
import tempfile
import base64
+import shutil
+import sys
+from io import BytesIO
import pytest
+from contextlib import contextmanager
+from multiprocessing import Process
+from urllib.request import urlopen, Request
from werkzeug.datastructures import Headers
+from werkzeug.exceptions import RequestedRangeNotSatisfiable
from onionshare_cli.common import Common
from onionshare_cli.web import Web
+from onionshare_cli.web.share_mode import parse_range_header
from onionshare_cli.settings import Settings
from onionshare_cli.mode_settings import ModeSettings
+import onionshare_cli.web.receive_mode
+
+# Stub requests.post, for receive mode webhook tests
+webhook_url = None
+webhook_data = None
+
+
+def requests_post_stub(url, data, timeout, proxies):
+ global webhook_url, webhook_data
+ webhook_url = url
+ webhook_data = data
+
+
+onionshare_cli.web.receive_mode.requests.post = requests_post_stub
+
DEFAULT_ZW_FILENAME_REGEX = re.compile(r"^onionshare_[a-z2-7]{6}.zip$")
RANDOM_STR_REGEX = re.compile(r"^[a-z2-7]+$")
def web_obj(temp_dir, common_obj, mode, num_files=0):
- """ Creates a Web object, in either share mode or receive mode, ready for testing """
+ """Creates a Web object, in either share mode or receive mode, ready for testing"""
common_obj.settings = Settings(common_obj)
mode_settings = ModeSettings(common_obj)
web = Web(common_obj, False, mode_settings, mode)
web.generate_password()
web.running = True
+ web.cleanup_filenames == []
web.app.testing = True
# Share mode
@@ -81,7 +103,7 @@ class TestWeb:
web = web_obj(temp_dir, common_obj, "share", 3)
web.settings.set("share", "autostop_sharing", True)
- assert web.running == True
+ assert web.running is True
with web.app.test_client() as c:
# Download the first time
@@ -93,7 +115,7 @@ class TestWeb:
or res.mimetype == "application/x-zip-compressed"
)
- assert web.running == False
+ assert web.running is False
def test_share_mode_autostop_sharing_off(
self, temp_dir, common_obj, temp_file_1024
@@ -101,7 +123,7 @@ class TestWeb:
web = web_obj(temp_dir, common_obj, "share", 3)
web.settings.set("share", "autostop_sharing", False)
- assert web.running == True
+ assert web.running is True
with web.app.test_client() as c:
# Download the first time
@@ -112,7 +134,7 @@ class TestWeb:
res.mimetype == "application/zip"
or res.mimetype == "application/x-zip-compressed"
)
- assert web.running == True
+ assert web.running is True
def test_receive_mode(self, temp_dir, common_obj):
web = web_obj(temp_dir, common_obj, "receive")
@@ -134,6 +156,166 @@ class TestWeb:
res.get_data()
assert res.status_code == 200
+ def test_receive_mode_webhook(self, temp_dir, common_obj):
+ global webhook_url, webhook_data
+ webhook_url = None
+ webhook_data = None
+
+ web = web_obj(temp_dir, common_obj, "receive")
+ assert web.mode == "receive"
+ web.settings.set("receive", "webhook_url", "http://127.0.0.1:1337/example")
+ web.proxies = None
+ assert (
+ web.settings.get("receive", "webhook_url")
+ == "http://127.0.0.1:1337/example"
+ )
+
+ with web.app.test_client() as c:
+ res = c.get("/", headers=self._make_auth_headers(web.password))
+ res.get_data()
+ assert res.status_code == 200
+
+ res = c.post(
+ "/upload-ajax",
+ buffered=True,
+ content_type="multipart/form-data",
+ data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")},
+ headers=self._make_auth_headers(web.password),
+ )
+ res.get_data()
+ assert res.status_code == 200
+
+ assert webhook_url == "http://127.0.0.1:1337/example"
+ assert webhook_data == "1 file submitted to OnionShare"
+
+ 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")
+ os.makedirs(data_dir, exist_ok=True)
+
+ web.settings.set("receive", "data_dir", data_dir)
+
+ with web.app.test_client() as c:
+ res = c.post(
+ "/upload-ajax",
+ buffered=True,
+ content_type="multipart/form-data",
+ data={"text": "you know just sending an anonymous message"},
+ headers=self._make_auth_headers(web.password),
+ )
+ content = res.get_data()
+ assert res.status_code == 200
+ assert b"Message submitted" in content
+
+ # ~/OnionShare should have a folder for the date
+ filenames = os.listdir(data_dir)
+ assert len(filenames) == 1
+ data_dir_date = os.path.join(data_dir, filenames[0])
+
+ # The date folder should have a single message txt file, no folders
+ filenames = os.listdir(data_dir_date)
+ assert len(filenames) == 1
+ assert filenames[0].endswith("-message.txt")
+
+ shutil.rmtree(data_dir)
+
+ 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")
+ os.makedirs(data_dir, exist_ok=True)
+
+ web.settings.set("receive", "data_dir", data_dir)
+
+ with web.app.test_client() as c:
+ res = c.post(
+ "/upload-ajax",
+ buffered=True,
+ content_type="multipart/form-data",
+ data={
+ "file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg"),
+ "text": "you know just sending an anonymous message",
+ },
+ headers=self._make_auth_headers(web.password),
+ )
+ content = res.get_data()
+ assert res.status_code == 200
+ assert b"Message submitted, uploaded new_york.jpg" in content
+
+ # Date folder should have a time folder with new_york.jpg, and a text message file
+ data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0])
+ filenames = os.listdir(data_dir_date)
+ assert len(filenames) == 2
+ time_str = filenames[0][0:6]
+ assert time_str in filenames
+ assert f"{time_str}-message.txt" in filenames
+ data_dir_time = os.path.join(data_dir_date, time_str)
+ assert os.path.isdir(data_dir_time)
+ assert os.path.exists(os.path.join(data_dir_time, "new_york.jpg"))
+
+ shutil.rmtree(data_dir)
+
+ 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")
+ os.makedirs(data_dir, exist_ok=True)
+
+ web.settings.set("receive", "data_dir", data_dir)
+
+ with web.app.test_client() as c:
+ res = c.post(
+ "/upload-ajax",
+ buffered=True,
+ content_type="multipart/form-data",
+ data={"file[]": (BytesIO(b"THIS IS A TEST FILE"), "new_york.jpg")},
+ headers=self._make_auth_headers(web.password),
+ )
+ content = res.get_data()
+ assert res.status_code == 200
+ assert b"Uploaded new_york.jpg" in content
+
+ # Date folder should have just a time folder with new_york.jpg
+ data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0])
+ filenames = os.listdir(data_dir_date)
+ assert len(filenames) == 1
+ time_str = filenames[0][0:6]
+ assert time_str in filenames
+ assert f"{time_str}-message.txt" not in filenames
+ data_dir_time = os.path.join(data_dir_date, time_str)
+ assert os.path.isdir(data_dir_time)
+ assert os.path.exists(os.path.join(data_dir_time, "new_york.jpg"))
+
+ shutil.rmtree(data_dir)
+
+ 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")
+ os.makedirs(data_dir, exist_ok=True)
+
+ web.settings.set("receive", "data_dir", data_dir)
+
+ with web.app.test_client() as c:
+ res = c.post(
+ "/upload-ajax",
+ buffered=True,
+ content_type="multipart/form-data",
+ data={},
+ headers=self._make_auth_headers(web.password),
+ )
+ content = res.get_data()
+ assert res.status_code == 200
+ assert b"Nothing submitted" in content
+
+ # Date folder should be empty
+ data_dir_date = os.path.join(data_dir, os.listdir(data_dir)[0])
+ filenames = os.listdir(data_dir_date)
+ assert len(filenames) == 0
+
+ shutil.rmtree(data_dir)
+
def test_public_mode_on(self, temp_dir, common_obj):
web = web_obj(temp_dir, common_obj, "receive")
web.settings.set("general", "public", True)
@@ -141,7 +323,7 @@ class TestWeb:
with web.app.test_client() as c:
# Loading / should work without auth
res = c.get("/")
- data1 = res.get_data()
+ res.get_data()
assert res.status_code == 200
def test_public_mode_off(self, temp_dir, common_obj):
@@ -164,6 +346,16 @@ class TestWeb:
res.get_data()
assert res.status_code == 200
+ def test_cleanup(self, common_obj, temp_dir_1024, temp_file_1024):
+ web = web_obj(temp_dir_1024, common_obj, "share", 3)
+
+ web.cleanup_filenames = [temp_dir_1024, temp_file_1024]
+ web.cleanup()
+
+ assert os.path.exists(temp_file_1024) is False
+ assert os.path.exists(temp_dir_1024) is False
+ assert web.cleanup_filenames == []
+
def _make_auth_headers(self, password):
auth = base64.b64encode(b"onionshare:" + password.encode()).decode()
h = Headers()
@@ -229,3 +421,266 @@ class TestZipWriterCustom:
def test_custom_callback(self, custom_zw):
assert custom_zw.processed_size_callback(None) == "custom_callback"
+
+
+def check_unsupported(cmd: str, args: list):
+ cmd_args = [cmd]
+ cmd_args.extend(args)
+ skip = False
+
+ try:
+ subprocess.check_call(cmd_args)
+ except Exception:
+ skip = True
+
+ return pytest.mark.skipif(skip, reason="Command {!r} not supported".format(cmd))
+
+
+@contextmanager
+def live_server(web):
+ s = socket.socket()
+ s.bind(("localhost", 0))
+ port = s.getsockname()[1]
+ s.close()
+
+ def run():
+ web.app.run(host="127.0.0.1", port=port, debug=False)
+
+ proc = Process(target=run)
+ proc.start()
+
+ url = "http://127.0.0.1:{}".format(port)
+ auth = base64.b64encode(b"onionshare:" + web.password.encode()).decode()
+ req = Request(url, headers={"Authorization": "Basic {}".format(auth)})
+
+ attempts = 20
+ while True:
+ try:
+ urlopen(req)
+ break
+ except Exception:
+ attempts -= 1
+ if attempts > 0:
+ time.sleep(0.5)
+ else:
+ raise
+
+ yield url + "/download"
+
+ proc.terminate()
+
+
+class TestRangeRequests:
+
+ VALID_RANGES = [
+ (None, 500, [(0, 499)]),
+ ("bytes=0", 500, [(0, 499)]),
+ ("bytes=100", 500, [(100, 499)]),
+ ("bytes=100-", 500, [(100, 499)]), # not in the RFC, but how curl sends
+ ("bytes=0-99", 500, [(0, 99)]),
+ ("bytes=0-599", 500, [(0, 499)]),
+ ("bytes=0-0", 500, [(0, 0)]),
+ ("bytes=-100", 500, [(400, 499)]),
+ ("bytes=0-99,100-199", 500, [(0, 199)]),
+ ("bytes=0-100,100-199", 500, [(0, 199)]),
+ ("bytes=0-99,101-199", 500, [(0, 99), (101, 199)]),
+ ("bytes=0-199,100-299", 500, [(0, 299)]),
+ ("bytes=0-99,200-299", 500, [(0, 99), (200, 299)]),
+ ]
+
+ INVALID_RANGES = [
+ "bytes=200-100",
+ "bytes=0-100,300-200",
+ ]
+
+ def test_parse_ranges(self):
+ for case in self.VALID_RANGES:
+ (header, target_size, expected) = case
+ parsed = parse_range_header(header, target_size)
+ assert parsed == expected, case
+
+ for invalid in self.INVALID_RANGES:
+ with pytest.raises(RequestedRangeNotSatisfiable):
+ parse_range_header(invalid, 500)
+
+ def test_headers(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+
+ with web.app.test_client() as client:
+ resp = client.get(url, headers=self._make_auth_headers(web.password))
+ assert resp.headers["ETag"].startswith('"sha256:')
+ assert resp.headers["Accept-Ranges"] == "bytes"
+ assert resp.headers.get("Last-Modified") is not None
+ assert resp.headers.get("Content-Length") is not None
+ assert "Accept-Encoding" in resp.headers["Vary"]
+
+ def test_basic(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+ with open(web.share_mode.download_filename, "rb") as f:
+ contents = f.read()
+
+ with web.app.test_client() as client:
+ resp = client.get(url, headers=self._make_auth_headers(web.password))
+ assert resp.status_code == 200
+ assert resp.data == contents
+
+ def test_reassemble(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+ with open(web.share_mode.download_filename, "rb") as f:
+ contents = f.read()
+
+ with web.app.test_client() as client:
+ headers = self._make_auth_headers(web.password)
+ headers.extend({"Range": "bytes=0-10"})
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 206
+ content_range = resp.headers["Content-Range"]
+ assert content_range == "bytes {}-{}/{}".format(
+ 0, 10, web.share_mode.download_filesize
+ )
+ bytes_out = resp.data
+
+ headers.update({"Range": "bytes=11-100000"})
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 206
+ content_range = resp.headers["Content-Range"]
+ assert content_range == "bytes {}-{}/{}".format(
+ 11,
+ web.share_mode.download_filesize - 1,
+ web.share_mode.download_filesize,
+ )
+ bytes_out += resp.data
+
+ assert bytes_out == contents
+
+ def test_mismatched_etags(self, temp_dir, common_obj):
+ """RFC 7233 Section 3.2
+ The "If-Range" header field allows a client to "short-circuit" the second request.
+ Informally, its meaning is as follows: if the representation is unchanged, send me the
+ part(s) that I am requesting in Range; otherwise, send me the entire representation.
+ """
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+ with open(web.share_mode.download_filename, "rb") as f:
+ contents = f.read()
+
+ with web.app.test_client() as client:
+ headers = self._make_auth_headers(web.password)
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 200
+
+ headers.extend({"If-Range": "mismatched etag", "Range": "bytes=10-100"})
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 200
+ assert resp.data == contents
+
+ def test_if_unmodified_since(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+
+ with web.app.test_client() as client:
+ headers = self._make_auth_headers(web.password)
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 200
+ last_mod = resp.headers["Last-Modified"]
+
+ headers.extend({"If-Unmodified-Since": last_mod})
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 304
+
+ def test_firefox_like_behavior(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+ url = "/download"
+
+ with web.app.test_client() as client:
+ headers = self._make_auth_headers(web.password)
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 200
+
+ # Firefox sends these with all range requests
+ etag = resp.headers["ETag"]
+ last_mod = resp.headers["Last-Modified"]
+
+ # make a request that uses the full header set
+ headers.extend(
+ {
+ "Range": "bytes=0-10",
+ "If-Unmodified-Since": last_mod,
+ "If-Range": etag,
+ }
+ )
+ resp = client.get(url, headers=headers)
+ assert resp.status_code == 206
+
+ def _make_auth_headers(self, password):
+ auth = base64.b64encode(b"onionshare:" + password.encode()).decode()
+ h = Headers()
+ h.add("Authorization", "Basic " + auth)
+ return h
+
+ @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
+ @check_unsupported("curl", ["--version"])
+ def test_curl(self, temp_dir, tmpdir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+
+ download = tmpdir.join("download")
+
+ with live_server(web) as url:
+ # Debugging help from `man curl`, on error 33
+ # 33 HTTP range error. The range "command" didn't work.
+ auth_header = self._make_auth_headers(web.password)
+ subprocess.check_call(
+ [
+ "curl",
+ "-H",
+ str(auth_header).strip(),
+ "--output",
+ str(download),
+ "--continue-at",
+ "10",
+ url,
+ ]
+ )
+
+ @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
+ @check_unsupported("wget", ["--version"])
+ def test_wget(self, temp_dir, tmpdir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+
+ # wget needs a file to exist to continue
+ download = tmpdir.join("download")
+ download.write("x" * 10)
+
+ with live_server(web) as url:
+ auth_header = self._make_auth_headers(web.password)
+ subprocess.check_call(
+ [
+ "wget",
+ "--header",
+ str(auth_header).strip(),
+ "--continue",
+ "-O",
+ str(download),
+ url,
+ ]
+ )
+
+ @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
+ @check_unsupported("http", ["--version"])
+ def test_httpie(self, temp_dir, common_obj):
+ web = web_obj(temp_dir, common_obj, "share", 3)
+ web.settings.set("share", "autostop_sharing", False)
+
+ with live_server(web) as url:
+ subprocess.check_call(["http", url, "Range: bytes=10"])
diff --git a/cli/tests/test_range_request.py b/cli/tests/test_range_request.py
new file mode 100644
index 00000000..83bc9c9f
--- /dev/null
+++ b/cli/tests/test_range_request.py
@@ -0,0 +1,38 @@
+import pytest
+from werkzeug.exceptions import RequestedRangeNotSatisfiable
+
+from onionshare_cli.web.share_mode import parse_range_header
+
+
+VALID_RANGES = [
+ (None, 500, [(0, 499)]),
+ ("bytes=0", 500, [(0, 499)]),
+ ("bytes=100", 500, [(100, 499)]),
+ ("bytes=100-", 500, [(100, 499)]), # not in the RFC, but how curl sends
+ ("bytes=0-99", 500, [(0, 99)]),
+ ("bytes=0-599", 500, [(0, 499)]),
+ ("bytes=0-0", 500, [(0, 0)]),
+ ("bytes=-100", 500, [(400, 499)]),
+ ("bytes=0-99,100-199", 500, [(0, 199)]),
+ ("bytes=0-100,100-199", 500, [(0, 199)]),
+ ("bytes=0-99,101-199", 500, [(0, 99), (101, 199)]),
+ ("bytes=0-199,100-299", 500, [(0, 299)]),
+ ("bytes=0-99,200-299", 500, [(0, 99), (200, 299)]),
+]
+
+
+INVALID_RANGES = [
+ "bytes=200-100",
+ "bytes=0-100,300-200",
+]
+
+
+def test_parse_ranges():
+ for case in VALID_RANGES:
+ (header, target_size, expected) = case
+ parsed = parse_range_header(header, target_size)
+ assert parsed == expected, case
+
+ for invalid in INVALID_RANGES:
+ with pytest.raises(RequestedRangeNotSatisfiable):
+ parse_range_header(invalid, 500)
diff --git a/desktop/README.md b/desktop/README.md
index 97d0fd30..4a59fe03 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -5,7 +5,7 @@
Start by getting the source code and changing to the `desktop` folder:
```sh
-git clone https://github.com/micahflee/onionshare.git
+git clone https://github.com/onionshare/onionshare.git
cd onionshare/desktop
```
@@ -15,6 +15,8 @@ cd onionshare/desktop
If you're using Linux, install `tor` and `obfs4proxy` from either the [official Debian repository](https://support.torproject.org/apt/tor-deb-repo/), or from your package manager.
+In Ubuntu 20.04 you also need the `libxcb-xinerama0` package installed.
+
#### 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`.)
diff --git a/desktop/package/linux/build-appimage.py b/desktop/package/linux/build-appimage.py
index 73164b55..dfaba1b4 100755
--- a/desktop/package/linux/build-appimage.py
+++ b/desktop/package/linux/build-appimage.py
@@ -2,7 +2,6 @@
import os
import inspect
import subprocess
-import argparse
import shutil
import glob
@@ -44,4 +43,4 @@ def main():
if __name__ == "__main__":
- main() \ No newline at end of file
+ main()
diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py
index ea1e90c9..2bfea3ad 100755
--- a/desktop/package/macos/build.py
+++ b/desktop/package/macos/build.py
@@ -67,7 +67,7 @@ def main():
print("○ Create app bundle")
run(["briefcase", "create"], desktop_dir)
- app_path = os.path.join(desktop_dir, "macOS", "OnionShare", "OnionShare.app")
+ app_path = os.path.join(desktop_dir, "macOS", "app", "OnionShare", "OnionShare.app")
print("○ Delete unused Qt5 frameworks from app bundle")
for framework in [
@@ -212,7 +212,6 @@ def main():
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",
- f"{app_path}/Contents/Resources/Support/bin/python3",
app_path,
],
):
diff --git a/desktop/package/windows/build.py b/desktop/package/windows/build.py
index 59929070..bbccbe46 100644
--- a/desktop/package/windows/build.py
+++ b/desktop/package/windows/build.py
@@ -2,7 +2,6 @@
import os
import inspect
import subprocess
-import argparse
import shutil
import glob
@@ -197,6 +196,7 @@ def main():
os.path.join(
desktop_dir,
"windows",
+ "msi",
"OnionShare",
"src",
"app_packages",
@@ -212,7 +212,7 @@ def main():
]
print(f"○ Created unsigned installer: {msi_filename}")
- print(f"○ Signing installer")
+ print("○ Signing installer")
run(
[
"signtool.exe",
diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml
index de52b2cd..fdb820b4 100644
--- a/desktop/pyproject.toml
+++ b/desktop/pyproject.toml
@@ -1,7 +1,7 @@
[tool.briefcase]
project_name = "OnionShare"
bundle = "org.onionshare"
-version = "2.3.1"
+version = "2.3.3"
url = "https://onionshare.org"
license = "GPLv3"
author = 'Micah Lee'
@@ -13,7 +13,7 @@ description = "Securely and anonymously share files, host websites, and chat wit
icon = "src/onionshare/resources/onionshare"
sources = ['src/onionshare']
requires = [
- "./onionshare_cli-2.3.1-py3-none-any.whl",
+ "./onionshare_cli-2.3.3-py3-none-any.whl",
"pyside2==5.15.1",
"qrcode"
]
diff --git a/desktop/scripts/check_lacked_trans.py b/desktop/scripts/check_lacked_trans.py
index 965b103b..2456c995 100755
--- a/desktop/scripts/check_lacked_trans.py
+++ b/desktop/scripts/check_lacked_trans.py
@@ -105,11 +105,10 @@ def main():
if src[quote_i] == '"':
quote = '"'
break
- elif src[quote_i] == "'":
+ if src[quote_i] == "'":
quote = "'"
break
- else:
- inc += 1
+ inc += 1
# find the starting quote
starting_i = src.find(quote, starting_i)
diff --git a/desktop/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py
index bf0cb5bc..a62703c8 100755
--- a/desktop/scripts/get-tor-osx.py
+++ b/desktop/scripts/get-tor-osx.py
@@ -24,23 +24,20 @@ This script downloads a pre-built tor binary to bundle with OnionShare.
In order to avoid a Mac gnupg dependency, I manually verify the signature
and hard-code the sha256 hash.
"""
-
import inspect
import os
import sys
import hashlib
-import zipfile
-import io
import shutil
import subprocess
import requests
def main():
- dmg_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0.10/TorBrowser-10.0.10-osx64_en-US.dmg"
- dmg_filename = "TorBrowser-10.0.10-osx64_en-US.dmg"
+ dmg_url = "https://dist.torproject.org/torbrowser/10.5.5/TorBrowser-10.5.5-osx64_en-US.dmg"
+ dmg_filename = "TorBrowser-10.0.18-osx64_en-US.dmg"
expected_dmg_sha256 = (
- "7ed73e94ccdfab76b8d96ddbac7828d3a7c77dd73b54c34e55666f3b6274d12a"
+ "f93d2174c58309d1d563deb3616fc3aec689b6eb0af4d70661b1695c26fc2af7"
)
# Build paths
diff --git a/desktop/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py
index 9cb8898c..92dfb540 100644
--- a/desktop/scripts/get-tor-windows.py
+++ b/desktop/scripts/get-tor-windows.py
@@ -23,7 +23,6 @@ This script downloads a pre-built tor binary to bundle with OnionShare.
In order to avoid a Windows gnupg dependency, I manually verify the signature
and hard-code the sha256 hash.
"""
-
import inspect
import os
import sys
@@ -34,10 +33,10 @@ import requests
def main():
- exe_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0.10/torbrowser-install-10.0.10_en-US.exe"
- exe_filename = "torbrowser-install-10.0.10_en-US.exe"
+ exe_url = "https://dist.torproject.org/torbrowser/10.5.5/torbrowser-install-10.5.5_en-US.exe"
+ exe_filename = "torbrowser-install-10.5.5_en-US.exe"
expected_exe_sha256 = (
- "6cbd14a7232e4ae7f2718d9b7f377e1a7bb96506da21f1ac6f689a22fc5e53fe"
+ "5a0248f6be61e94467fd6f951eb85d653138dea5a8793de42c6edad1507f1ae7"
)
# Build paths
root_path = os.path.dirname(
@@ -75,7 +74,7 @@ def main():
"e",
"-y",
exe_path,
- "Browser\TorBrowser\Tor",
+ "Browser\\TorBrowser\\Tor",
"-o%s" % os.path.join(working_path, "Tor"),
]
).wait()
@@ -85,7 +84,7 @@ def main():
"e",
"-y",
exe_path,
- "Browser\TorBrowser\Data\Tor\geoip*",
+ "Browser\\TorBrowser\\Data\\Tor\\geoip*",
"-o%s" % os.path.join(working_path, "Data"),
]
).wait()
diff --git a/desktop/scripts/rebuild-cli.py b/desktop/scripts/rebuild-cli.py
index c13461bc..66582cf1 100755
--- a/desktop/scripts/rebuild-cli.py
+++ b/desktop/scripts/rebuild-cli.py
@@ -6,7 +6,6 @@ and installs it in the virtual environment.
import inspect
import os
-import sys
import glob
import subprocess
import shutil
diff --git a/desktop/src/onionshare/__init__.py b/desktop/src/onionshare/__init__.py
index 744f6979..9d8d8981 100644
--- a/desktop/src/onionshare/__init__.py
+++ b/desktop/src/onionshare/__init__.py
@@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import division
import os
import sys
-import platform
import argparse
import signal
import json
@@ -29,7 +28,11 @@ 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
@@ -48,7 +51,12 @@ class Application(QtWidgets.QApplication):
QtWidgets.QApplication.__init__(self, sys.argv)
# Check color mode on starting the app
- self.color_mode = self.get_color_mode()
+ self.color_mode = self.get_color_mode(common)
+
+ # Enable Dark Theme
+ if self.color_mode == "dark":
+ self.setDarkMode()
+
self.installEventFilter(self)
def eventFilter(self, obj, event):
@@ -66,23 +74,48 @@ class Application(QtWidgets.QApplication):
return False
return True
- def get_color_mode(self):
- return "dark" if self.is_dark_mode() else "light"
-
+ def setDarkMode(self):
+ self.setStyle("Fusion")
+ 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"
- # Display OnionShare banner
- print(f"OnionShare {common.version} | https://onionshare.org/")
-
# Start the Qt app
global qtapp
qtapp = Application(common)
diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py
index cd576ea2..182d63f2 100644
--- a/desktop/src/onionshare/gui_common.py
+++ b/desktop/src/onionshare/gui_common.py
@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
-import inspect
import shutil
from pkg_resources import resource_filename
@@ -85,10 +84,25 @@ class GuiCommon:
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"
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"
return {
# OnionShareGui styles
@@ -188,9 +202,17 @@ class GuiCommon:
border: 0;
border-radius: 5px;
}""",
+ "downloads_uploads_not_empty": """
+ QWidget{
+ background-color: """
+ + history_background_color
+ +""";
+ }""",
"downloads_uploads_empty": """
QWidget {
- background-color: #ffffff;
+ background-color: """
+ + history_background_color
+ +""";
border: 1px solid #999999;
}
QWidget QLabel {
@@ -228,7 +250,7 @@ class GuiCommon:
"downloads_uploads_progress_bar": """
QProgressBar {
border: 1px solid """
- + header_color
+ + downloads_uploads_progress_bar_border_color
+ """;
background-color: #ffffff !important;
text-align: center;
@@ -237,10 +259,16 @@ class GuiCommon:
}
QProgressBar::chunk {
background-color: """
- + header_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;
@@ -262,11 +290,17 @@ class GuiCommon:
""",
"new_tab_button_text": """
QLabel {
- border: 1px solid #efeff0;
+ border: 1px solid """
+ + new_tab_button_border
+ + """;
border-radius: 4px;
- background-color: #ffffff;
+ background-color: """
+ + new_tab_button_background
+ + """;
text-align: center;
- color: #4e0d4e;
+ color: """
+ + new_tab_button_text_color
+ + """;
}
""",
"new_tab_title_text": """
@@ -287,7 +321,7 @@ class GuiCommon:
"share_zip_progess_bar": """
QProgressBar {
border: 1px solid """
- + header_color
+ + share_zip_progess_bar_border_color
+ """;
background-color: #ffffff !important;
text-align: center;
@@ -296,7 +330,7 @@ class GuiCommon:
QProgressBar::chunk {
border: 0px;
background-color: """
- + header_color
+ + share_zip_progess_bar_chunk_color
+ """;
width: 10px;
}""",
@@ -354,6 +388,10 @@ class GuiCommon:
color: #666666;
font-size: 11px;
}""",
+ "receive_message_button": """
+ QPushButton {
+ padding: 5px 10px;
+ }""",
# Settings dialog
"settings_version": """
QLabel {
@@ -391,7 +429,7 @@ class GuiCommon:
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.exe")
+ obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy")
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":
diff --git a/desktop/src/onionshare/main_window.py b/desktop/src/onionshare/main_window.py
index 2f6e91d0..d87092b6 100644
--- a/desktop/src/onionshare/main_window.py
+++ b/desktop/src/onionshare/main_window.py
@@ -21,8 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import time
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.web import Web
-
from . import strings
from .tor_connection_dialog import TorConnectionDialog
from .settings_dialog import SettingsDialog
diff --git a/desktop/src/onionshare/resources/images/open_message.png b/desktop/src/onionshare/resources/images/open_message.png
new file mode 100644
index 00000000..6712ecf9
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/open_message.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/locale/bn.json b/desktop/src/onionshare/resources/locale/bn.json
index 98728896..519ed878 100644
--- a/desktop/src/onionshare/resources/locale/bn.json
+++ b/desktop/src/onionshare/resources/locale/bn.json
@@ -279,11 +279,20 @@
"gui_receive_flatpak_data_dir": "যেহেতু অনিওনশেয়ার ফ্ল্যাটপ্যাক দিয়ে ইন্সটল করেছো, তাই তোমাকে ~/OnionShare এ ফাইল সংরক্ষণ করতে হবে।",
"gui_rendezvous_cleanup": "তোমার ফাইলগুলি সফলভাবে স্থানান্তরিত হয়েছে তা নিশ্চিত হয়ে টর সার্কিট বন্ধের অপেক্ষা করা হচ্ছে।\n\nএটি কয়েক মিনিট সময় নিতে পারে।",
"gui_open_folder_error": "xdg-open দিয়ে ফোল্ডার খুলতে ব্যর্থ হয়েছে। ফাইলটি এখানে: {}",
- "gui_chat_url_description": "এই পেঁয়াজশেয়ার ঠিকানা দিয়ে <b>যে কেউ</b> <b>টর ব্রাউজার</b>: <img src='{}' /> ব্যবহার করে এই <b>চ্যাট রুমটিতে যোগ দিতে পারে</b>",
+ "gui_chat_url_description": "এই অনিওনশেয়ার ঠিকানা দিয়ে <b>যে কেউ</b> <b>টর ব্রাউজার</b>: <img src='{}' /> ব্যবহার করে এই <b>চ্যাট রুমটিতে যোগ দিতে পারে</b>",
"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 পুনরারম্ভ করুন।"
+ "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": "চ্যাট করতে প্রস্তুত"
}
diff --git a/desktop/src/onionshare/resources/locale/da.json b/desktop/src/onionshare/resources/locale/da.json
index 383b3d33..4bbdc94e 100644
--- a/desktop/src/onionshare/resources/locale/da.json
+++ b/desktop/src/onionshare/resources/locale/da.json
@@ -291,5 +291,15 @@
"gui_chat_url_description": "<b>Alle</b> med denne OnionShare-adresse kan <b>deltage i chatrummet</b> med <b>Tor Browser</b>: <img src='{}' />",
"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"
+ "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
index 4f4a3c32..4f04dd5b 100644
--- a/desktop/src/onionshare/resources/locale/de.json
+++ b/desktop/src/onionshare/resources/locale/de.json
@@ -5,7 +5,7 @@
"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 sehr lange dauern",
+ "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",
@@ -295,5 +295,14 @@
"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": "Starte OnionShare neu, damit der neue Farbmodus übernommen wird."
-}
+ "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"
+} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json
index 20ae6323..173982a4 100644
--- a/desktop/src/onionshare/resources/locale/el.json
+++ b/desktop/src/onionshare/resources/locale/el.json
@@ -10,7 +10,7 @@
"not_a_readable_file": "Το {0:s} δεν είναι αναγνώσιμο αρχείο.",
"no_available_port": "Δεν βρέθηκε διαθέσιμη θύρα για να ξεκινήσει η υπηρεσία onion",
"other_page_loaded": "Η διεύθυνση φορτώθηκε",
- "close_on_autostop_timer": "Τερματίστηκε λόγω της αυτόματης διακοπής",
+ "close_on_autostop_timer": "Τερματίστηκε λόγω αυτόματης διακοπής",
"closing_automatically": "Τερματίστηκε λόγω ολοκλήρωσης της λήψης",
"timeout_download_still_running": "Αναμονή ολοκλήρωσης της λήψης",
"large_filesize": "Προειδοποίηση: Η αποστολή μεγάλου όγκου δεδομένων μπορεί να διαρκέσει ώρες",
@@ -39,8 +39,8 @@
"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_start_server": "Εκκίνηση λειτουργίας λήψης",
+ "gui_receive_stop_server": "Τερματισμός λειτουργίας λήψης",
"gui_receive_stop_server_autostop_timer": "Διακοπή λειτουργίας λήψης (απομένουν {})",
"gui_receive_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}",
"gui_copy_url": "Αντιγραφή διεύθυνσης",
@@ -49,9 +49,9 @@
"gui_no_downloads": "Καμία λήψη ως τώρα",
"gui_canceled": "Ακυρώθηκε",
"gui_copied_url_title": "Η διεύθυνση OnionShare αντιγράφτηκε",
- "gui_copied_url": "Η διεύθυνση OnionShare αντιγράφτηκε στον πίνακα",
+ "gui_copied_url": "Η διεύθυνση OnionShare αντιγράφτηκε στο πρόχειρο",
"gui_copied_hidservauth_title": "Το HidServAuth αντιγράφτηκε",
- "gui_copied_hidservauth": "Το HidServAuth αντιγράφτηκε στον πίνακα",
+ "gui_copied_hidservauth": "Το HidServAuth αντιγράφτηκε στο πρόχειρο",
"gui_please_wait": "Ξεκινάμε... Κάντε κλικ για ακύρωση.",
"gui_download_upload_progress_complete": "%p%, {0:s} πέρασαν.",
"gui_download_upload_progress_starting": "{0:s}, %p% (υπολογισμός)",
@@ -62,8 +62,8 @@
"gui_receive_quit_warning": "Αυτή τη στιγμή παραλαμβάνονται αρχείων. Είστε σίγουρος/η πώς θέλετε να κλείσετε το OnionShare;",
"gui_quit_warning_quit": "Έξοδος",
"gui_quit_warning_dont_quit": "Ακύρωση",
- "error_rate_limit": "Κάποιος/α έκανε πολλαπλές αποτυχημένες προσπάθειες να μαντέψει τον κωδικό σας. Γι' αυτό, το OnionShare σταμάτησε τον server. Ξεκινήστε πάλι το διαμοιρασμό και στείλτε στον/ην παραλήπτη/τρια μια νέα διεύθυνση για διαμοιρασμό.",
- "zip_progress_bar_format": "Συμπίεση: %p%",
+ "error_rate_limit": "Κάποιος/α προσπάθησε να μαντέψει τον κωδικό σας πολλές φορές. Για αυτό, το OnionShare τερματίστηκε αυτόματα. Πρέπει να ξεκινήσετε πάλι τον διαμοιρασμό και να στείλετε στον/ην παραλήπτη/τρια μια νέα διεύθυνση για να διαμοιραστούν αρχεία και μηνύματα μαζί σας.",
+ "zip_progress_bar_format": "Γίνεται συμπίεση: %p%",
"error_stealth_not_supported": "Για τη χρήση εξουσιοδότησης πελάτη, χρειάζεστε τουλάχιστον το Tor 0.2.9.1-alpha (ή τον Tor Browser 6.5) και το python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
"gui_settings_window_title": "Ρυθμίσεις",
@@ -71,7 +71,7 @@
"gui_settings_stealth_option": "Χρήση εξουσιοδότησης πελάτη",
"gui_settings_stealth_hidservauth_string": "Έχοντας αποθηκεύσει το ιδιωτικό σας κλειδί για επαναχρησιμοποίηση, μπορείτε πλέον να επιλέξετε την αντιγραφή του HidServAuth σας.",
"gui_settings_autoupdate_label": "Έλεγχος για νέα έκδοση",
- "gui_settings_autoupdate_option": "Ενημερώστε με όταν είναι διαθέσιμη μια νέα έκδοση",
+ "gui_settings_autoupdate_option": "Ενημερώστε με μόλις γίνει διαθέσιμη μια νέα έκδοση",
"gui_settings_autoupdate_timestamp": "Τελευταίος έλεγχος: {}",
"gui_settings_autoupdate_timestamp_never": "Ποτέ",
"gui_settings_autoupdate_check_button": "Έλεγχος για νέα έκδοση",
@@ -86,20 +86,20 @@
"gui_settings_connection_type_test_button": "Έλεγχος σύνδεσης με το Tor",
"gui_settings_control_port_label": "Πύλη ελέγχου",
"gui_settings_socket_file_label": "Αρχείο μετάβασης",
- "gui_settings_socks_label": "πύλη SOCKS",
+ "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": "Υποστήριξη γεφυρών 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_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_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 στη λειτουργία. <br><br> Χρησιμοποιήστε τα μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών bridges.",
- "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων bridges",
- "gui_settings_tor_bridges_custom_label": "Αποκτήστε bridges στο <a href=\"https://bridges.torproject.org/options?lang=el\"> https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων γεφυρών",
+ "gui_settings_tor_bridges_custom_label": "Αποκτήστε γέφυρες στο <a href=\"https://bridges.torproject.org/options?lang=el\"> https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Δεν λειτούργησε κάποιο από τα bridges που προσθέσατε.\nΞαναελέγξτε τα ή προσθέστε άλλα.",
"gui_settings_button_save": "Αποθήκευση",
"gui_settings_button_cancel": "Άκυρο",
@@ -107,30 +107,30 @@
"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_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_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_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: {}",
+ "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. <a href='{}'>Κάντε κλικ εδώ</a> για να το λάβετε.<br><br>Χρησιμοποιείτε {} και το πιό πρόσφατο είναι το {}.",
- "update_error_check_error": "Δεν μπόρεσε να γίνει έλεγχος για νέα έκδοση: ίσως δεν είστε συνδεδεμένοι στο Tor ή ο ιστότοπος OnionShare είναι εκτός λειτουργίας;",
- "update_error_invalid_latest_version": "Δεν μπορεί να γίνει έλεγχος για νέα έκδοση: η ιστοσελίδα OnionShare αναφέρει ότι η τελευταία έκδοση είναι η μη αναγνωρίσιμη \"{}\"…",
- "update_not_available": "Έχετε την πιό πρόσφατη έκδοση του OnionShare.",
- "gui_tor_connection_ask": "Άνοιγμα των ρυθμίσεων για να επιλύσετε την σύνδεση με το Tor;",
+ "update_available": "Υπάρχει διαθέσιμη ενημέρωση. <a href='{}'>Κάντε κλικ εδώ</a> για να την αποκτήσετε.<br><br>Χρησιμοποιείτε την έκδοση {}, ενώ η πιο πρόσφατη είναι η {}.",
+ "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_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",
@@ -138,15 +138,15 @@
"gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης",
"gui_share_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί να <b>κατεβάσει</b> τα αρχεία σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare, μπορεί να <b>ανεβάσει</b> αρχεία στον υπολογιστή σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
- "gui_url_label_persistent": "Αυτός ο διαμοιρασμός δεν θα λήξει αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
- "gui_url_label_stay_open": "Αυτός ο διαμοιρασμός δε λήγει αυτόματα.",
+ "gui_url_label_persistent": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.<br><br>Όσοι μοιράζονται αρχεία μαζί σας θα μπορέσουν να ξαναχρησιμοποιήσουν αυτή τη διεύθυνση αργότερα. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "gui_url_label_stay_open": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.",
"gui_url_label_onetime": "Αυτός ο διαμοιρασμός θα σταματήσει μετά την πρώτη λήψη.",
- "gui_url_label_onetime_and_persistent": "Αυτός ο διαμοιρασμός δεν θα λήξει αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
- "gui_status_indicator_share_stopped": "Ετοιμο για διαμοιρασμό",
- "gui_status_indicator_share_working": "Ξεκινάει…",
- "gui_status_indicator_share_started": "Διαμοιράζει",
+ "gui_url_label_onetime_and_persistent": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "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_working": "Γίνεται εκκίνηση…",
"gui_status_indicator_receive_started": "Γίνεται λήψη",
"gui_file_info": "{} αρχεία, {}",
"gui_file_info_single": "{} αρχείο, {}",
@@ -186,7 +186,7 @@
"gui_add_files": "Προσθήκη αρχείων",
"gui_add_folder": "Προσθήκη φακέλου",
"gui_connect_to_tor_for_onion_settings": "Συνδεθείτε στο Tor για να δείτε τις ρυθμίσεις της υπηρεσίας onion",
- "error_cannot_create_data_dir": "Δεν μπόρεσε να δημιουργηθεί φάκελος δεδομένων OnionShare: {}",
+ "error_cannot_create_data_dir": "Δεν ήταν δυνατή η δημιουργία φακέλου δεδομένων OnionShare: {}",
"receive_mode_data_dir": "Τα αρχεία που στάλθηκαν σε εσας εμφανίζοντε στον φάκελο: {}",
"gui_settings_data_dir_label": "Αποθήκευση αρχείων σε",
"gui_settings_data_dir_browse_button": "Περιήγηση",
@@ -207,7 +207,7 @@
"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_no_files": "Δεν έχουν αποσταλεί ακόμα αρχεία",
"gui_share_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της αποστολής",
"gui_receive_mode_no_files": "Δεν έχει γίνει λήψη αρχείων ακόμα",
"gui_receive_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της λήψης",
@@ -216,27 +216,27 @@
"gui_all_modes_transfer_canceled": "Ακυρώθηκε {}",
"gui_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματης διακοπής λήγει σε {}",
"gui_start_server_autostart_timer_tooltip": "Το χρονόμετρο αυτόματης εκκίνησης λήγει σε {}",
- "gui_waiting_to_start": "Προγραμματισμένο να ξεκινήσει σε {}. Πατήστε για ακύρωση.",
+ "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_share_scheduled": "Δρομολόγηση…",
"gui_status_indicator_receive_scheduled": "Προγραμματισμένο…",
"days_first_letter": "ημ",
"hours_first_letter": "ώ",
"minutes_first_letter": "λ",
"seconds_first_letter": "δ",
- "gui_website_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί <b>να επισκεφτεί</b> την ιστοσελία χρησιμοποιώντας τον <b>Tor Browser</b>: <img src='{}' />",
+ "gui_website_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί <b>να επισκεφτεί</b> την ιστοσελίδα χρησιμοποιώντας τον <b>Tor Browser</b>: <img src='{}' />",
"gui_mode_website_button": "Δημοσίευση ιστοσελίδας",
- "gui_website_mode_no_files": "Η ιστοσελίδα δεν έχει μοιραστεί ακόμα",
- "incorrect_password": "Λάθος κωδικός πρόσβασης",
+ "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_receive_flatpak_data_dir": "Επειδή έχετε εγκαταστήσει το OnionShare μέσω Flatpak, θα πρέπει να αποθηκεύσετε τα αρχεία μέσα σε έναν φάκελο στο ~/OnionShare.",
"gui_chat_stop_server": "Τερματισμός διακομιστή συνομιλίας",
"gui_chat_start_server": "Έναρξη διακομιστή συνομιλίας",
"mode_settings_website_disable_csp_checkbox": "Μην στέλνετε κεφαλίδα με περιεχόμενο από την πολιτικής ασφάλειας σας (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)",
@@ -248,19 +248,19 @@
"mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός",
"mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση",
"mode_settings_public_checkbox": "Χωρίς χρήση κωδικού πρόσβασης",
- "mode_settings_persistent_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_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_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": "Λήψη",
@@ -270,9 +270,9 @@
"gui_main_page_receive_button": "Έναρξη λήψης",
"gui_main_page_share_button": "Έναρξη διαμοιρασμού",
"gui_new_tab_chat_button": "Συνομιλήστε ανώνυμα",
- "gui_new_tab_website_button": "Φιλοξενήστε έναν ιστότοπο",
+ "gui_new_tab_website_button": "Φιλοξενία ιστότοπου",
"gui_new_tab_receive_button": "Λήψη αρχείων",
- "gui_new_tab_share_button": "Διαμοιράστε αρχεία",
+ "gui_new_tab_share_button": "Διαμοιρασμός αρχείων",
"gui_new_tab_tooltip": "Άνοιγμα νέας καρτέλας",
"gui_new_tab": "Νέα καρτέλα",
"gui_qr_code_dialog_title": "Κώδικας QR OnionShare",
@@ -282,5 +282,15 @@
"error_port_not_available": "Η θύρα OnionShare δεν είναι διαθέσιμη",
"gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος",
"gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.",
- "gui_chat_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση του OnionShare μπορεί <b>να συμμετέχει στο chat</b> με χρήση του <b>Tor Browser</b>: <img src='{}' />"
-}
+ "gui_chat_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση του OnionShare μπορεί <b>να συμμετέχει στο δωμάτιο συνομιλίας</b> με χρήση του <b>Tor Browser</b>: <img src='{}' />",
+ "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": "Έτοιμο για συνομιλία"
+} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json
index f7b8f7bb..3a5c2ecd 100644
--- a/desktop/src/onionshare/resources/locale/en.json
+++ b/desktop/src/onionshare/resources/locale/en.json
@@ -33,6 +33,7 @@
"gui_show_url_qr_code": "Show QR Code",
"gui_qr_code_dialog_title": "OnionShare QR Code",
"gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.",
+ "gui_please_wait_no_button": "Starting…",
"gui_please_wait": "Starting… Click to cancel.",
"error_rate_limit": "Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.",
"zip_progress_bar_format": "Compressing: %p%",
@@ -101,6 +102,10 @@
"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",
@@ -110,6 +115,10 @@
"gui_receive_mode_warning": "Receive mode lets people upload files to your computer.<br><br><b>Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.</b>",
"gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}",
"gui_settings_language_label": "Preferred 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",
@@ -165,6 +174,7 @@
"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": "Don't use a password",
"mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time",
@@ -174,6 +184,9 @@
"mode_settings_share_autostop_sharing_checkbox": "Stop sharing after files have been sent (uncheck to allow downloading individual files)",
"mode_settings_receive_data_dir_label": "Save files to",
"mode_settings_receive_data_dir_browse_button": "Browse",
+ "mode_settings_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 Content Security Policy header (allows your website to use third-party resources)",
"gui_all_modes_transfer_finished_range": "Transferred {} - {}",
"gui_all_modes_transfer_finished": "Transferred {}",
@@ -191,5 +204,7 @@
"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"
+ "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: {}"
} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json
index 59f07406..bc30af46 100644
--- a/desktop/src/onionshare/resources/locale/es.json
+++ b/desktop/src/onionshare/resources/locale/es.json
@@ -296,9 +296,18 @@
"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": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>puede unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
+ "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>unirse a esta sala de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
"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."
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json
index b9b5cdcb..8c4bf20a 100644
--- a/desktop/src/onionshare/resources/locale/fr.json
+++ b/desktop/src/onionshare/resources/locale/fr.json
@@ -93,9 +93,9 @@
"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": "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_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 mal réglée.",
+ "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",
@@ -295,5 +295,14 @@
"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é."
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json
index 11848ca3..67b095cc 100644
--- a/desktop/src/onionshare/resources/locale/gl.json
+++ b/desktop/src/onionshare/resources/locale/gl.json
@@ -191,5 +191,15 @@
"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."
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/hi.json b/desktop/src/onionshare/resources/locale/hi.json
index 9cfc310d..8efb9301 100644
--- a/desktop/src/onionshare/resources/locale/hi.json
+++ b/desktop/src/onionshare/resources/locale/hi.json
@@ -21,7 +21,7 @@
"help_verbose": "",
"help_filename": "",
"help_config": "",
- "gui_drag_and_drop": "साझा शुरू करने के लिए\nफाइलों एवं फोल्डरों को ड्रैग और ड्रॉप करें",
+ "gui_drag_and_drop": "साझा शुरू करने के लिए फाइलों एवं फोल्डरों को ड्रैग और ड्रॉप करें",
"gui_add": "जोड़ें",
"gui_add_files": "फाइल जोड़ें",
"gui_add_folder": "फोल्डर जोड़ें",
@@ -67,24 +67,24 @@
"gui_settings_sharing_label": "साझा सेटिंग्स",
"gui_settings_close_after_first_download_option": "इस फाइल को भेजने के बाद साझा बंद कर दें",
"gui_settings_connection_type_label": "OnionShare को Tor से कैसे जुड़ना चाहिए?",
- "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_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": "",
- "gui_settings_authenticate_label": "",
- "gui_settings_authenticate_no_auth_option": "",
+ "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": "",
- "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_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": "",
"gui_settings_tor_bridges_custom_radio_option": "",
"gui_settings_tor_bridges_custom_label": "",
@@ -186,5 +186,12 @@
"gui_waiting_to_start": "{} में शुरू होने के लिए शेडयूल है। रद्द करने के लिए क्लिक करें।",
"incorrect_password": "पासवर्ड गलत है",
"gui_settings_individual_downloads_label": "विशिष्ट फाइलों के डाउनलोड को मंजूरी देने के लिए अचिन्हित करें",
- "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें"
+ "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें",
+ "gui_show_url_qr_code": "क्यूआर कोड दिखाएं",
+ "gui_chat_stop_server": "चैट सर्वर बंद करें",
+ "gui_chat_start_server": "चैट सर्वर शुरू करें",
+ "gui_file_selection_remove_all": "सभी हटाएं",
+ "gui_remove": "हटाएं",
+ "gui_qr_code_dialog_title": "OnionShare क्यूआर कोड",
+ "gui_receive_flatpak_data_dir": "चूँकि आपने फ़्लैटपैक का उपयोग करके OnionShare स्थापित किया है, इसलिए आपको फ़ाइलों को ~/OnionShare फ़ोल्डर में सहेजना होगा।"
}
diff --git a/desktop/src/onionshare/resources/locale/hr.json b/desktop/src/onionshare/resources/locale/hr.json
index 6c399c89..29252c1d 100644
--- a/desktop/src/onionshare/resources/locale/hr.json
+++ b/desktop/src/onionshare/resources/locale/hr.json
@@ -4,8 +4,8 @@
"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": "Zaustavljeno, jer je vrijeme timera za automatsko zaustavljanje isteklo",
- "closing_automatically": "Zaustavljeno, jer je prijenos završen",
+ "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",
@@ -14,13 +14,13 @@
"gui_delete": "Izbriši",
"gui_choose_items": "Odaberi",
"gui_share_start_server": "Pokreni dijeljenje",
- "gui_share_stop_server": "Zaustavi dijeljenje",
- "gui_share_stop_server_autostop_timer": "Zaustavi dijeljenje ({})",
- "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko zaustavljanje završava pri {}",
+ "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": "Zaustavi modus primanja",
- "gui_receive_stop_server_autostop_timer": "Zaustavi modus primanja ({} preostalo)",
+ "gui_receive_stop_server": "Prekini modus primanja",
+ "gui_receive_stop_server_autostop_timer": "Prekini modus primanja ({} preostalo)",
"gui_copy_url": "Kopiraj adresu",
"gui_copy_hidservauth": "Kopiraj HidServAuth",
"gui_canceled": "Prekinuto",
@@ -95,7 +95,7 @@
"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": "Greška s Torom: {}",
+ "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. <a href='{}'>Pritisni ovdje</a> za preuzimanje.<br><br>Trenutačno koristiš verziju {}, a najnovija verzija je {}.",
@@ -108,10 +108,10 @@
"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 zaustavljanje je isteklo prije nego što je poslužitelj započeo. Izradi novo dijeljenje.",
- "gui_server_autostop_timer_expired": "Vrijeme timera za automatsko zaustavljanje je već isteklo. Za pokretanje dijeljenja, podesi vrijeme.",
+ "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 zaustavljanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. 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_use_legacy_v2_onions_checkbox": "Koristi stare adrese",
@@ -119,10 +119,10 @@
"gui_share_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>preuzeti</b> tvoje datoteke koristeći <b>Tor preglednik</b>: <img src='{}' />",
"gui_website_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>posjetiti</b> tvoju web-stranicu koristeći <b>Tor preglednik</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>prenijeti</b> datoteke na tvoje računalo koristeći <b>Tor preglednik</b>: <img src='{}' />",
- "gui_url_label_persistent": "Ovo se dijeljenje neće automatski zaustaviti.<br><br>Svako naredno dijeljenje ponovo koristi 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 zaustaviti.",
- "gui_url_label_onetime": "Ovo će se dijeljenje zaustaviti nakon prvog završavanja.",
- "gui_url_label_onetime_and_persistent": "Ovo se dijeljenje neće automatski zaustaviti.<br><br>Svako naredno dijeljenje ponovo će koristiti istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)",
+ "gui_url_label_persistent": "Ovo se dijeljenje neće automatski prekinuti.<br><br>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.<br><br>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 …",
@@ -183,10 +183,10 @@
"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": "Zaustavi dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)",
+ "mode_settings_share_autostop_sharing_checkbox": "Prekini dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)",
"mode_settings_client_auth_checkbox": "Koristi autorizaciju klijenta",
"mode_settings_legacy_checkbox": "Koristi stare adrese (v2 onion usluge, ne preporučuje se)",
- "mode_settings_autostop_timer_checkbox": "Zaustavi onion uslugu u planirano vrijeme",
+ "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": "Nemoj koristiti lozinku",
"mode_settings_persistent_checkbox": "Spremi ovu karticu i automatski je otvori kad otvorim OnionShare",
@@ -212,10 +212,10 @@
"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": "Chat",
- "gui_new_tab_chat_button": "Anonimni chat",
- "gui_chat_start_server": "Pokreni poslužitelja za chat",
- "gui_chat_stop_server": "Zaustavi poslužitelja za chat",
+ "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: {}",
@@ -225,13 +225,22 @@
"gui_show_url_qr_code": "Prikaži QR-kod",
"gui_file_selection_remove_all": "Ukloni sve",
"gui_remove": "Ukloni",
- "gui_main_page_chat_button": "Pokreni chat",
+ "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": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za chat</b> koristeći <b>Tor preglednik</b>: <img src='{}' />",
+ "gui_chat_url_description": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za razgovor</b> koristeći <b>Tor preglednik</b>: <img src='{}' />",
"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 ."
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/id.json b/desktop/src/onionshare/resources/locale/id.json
index 44adac8b..f4c299c5 100644
--- a/desktop/src/onionshare/resources/locale/id.json
+++ b/desktop/src/onionshare/resources/locale/id.json
@@ -10,7 +10,7 @@
"not_a_readable_file": "{0:s} bukan berkas yang bisa dibaca.",
"no_available_port": "Tidak dapat menemukan porta yang tersedia untuk memulai layanan onion",
"other_page_loaded": "Alamat dimuat",
- "close_on_autostop_timer": "",
+ "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",
@@ -31,7 +31,7 @@
"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\nuntuk mulai berbagi",
+ "gui_drag_and_drop": "Seret dan lepas berkas dan folder untuk mulai berbagi",
"gui_add": "Tambahkan",
"gui_delete": "Hapus",
"gui_choose_items": "Pilih",
@@ -62,7 +62,7 @@
"gui_receive_quit_warning": "Anda sedang dalam proses menerima berkas. Apakah Anda yakin ingin menghentikan OnionShare?",
"gui_quit_warning_quit": "Keluar",
"gui_quit_warning_dont_quit": "Batal",
- "error_rate_limit": "",
+ "error_rate_limit": "Seseorang berusaha berulang kali untuk menebak kata sandi Anda, jadi OnionShare telah menghentikan server. Mulailah berbagi lagi dan kirim penerima alamat baru untuk dibagikan.",
"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.",
@@ -79,10 +79,10 @@
"gui_settings_sharing_label": "Pengaturan berbagi",
"gui_settings_close_after_first_download_option": "Berhenti berbagi setelah berkas telah terkirim",
"gui_settings_connection_type_label": "Bagaimana seharusnya OnionShare terhubung ke Tor?",
- "gui_settings_connection_type_bundled_option": "",
+ "gui_settings_connection_type_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": "",
+ "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",
@@ -91,73 +91,73 @@
"gui_settings_authenticate_no_auth_option": "Tidak ada otentikasi, atau otentikasi kuki",
"gui_settings_authenticate_password_option": "Sandi",
"gui_settings_password_label": "Sandi",
- "gui_settings_tor_bridges": "",
- "gui_settings_tor_bridges_no_bridges_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option": "",
- "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_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. <br><br>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 <a href=\"https://bridges.torproject.org/options\"> https://bridges.torproject.org </a>",
+ "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": "",
+ "gui_settings_button_help": "Bantuan",
"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": "",
+ "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": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
+ "connecting_to_tor": "Menghubungkan ke jaringan Tor",
+ "update_available": "OnionShare Baru tersedia. <a href='{}'>klik di sini</a> untuk mendapatkannya. <br><br>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": "",
- "gui_tor_connection_canceled": "",
- "gui_tor_connection_lost": "",
- "gui_server_started_after_autostop_timer": "",
- "gui_server_autostop_timer_expired": "",
- "share_via_onionshare": "",
+ "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_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
- "gui_status_indicator_share_working": "",
- "gui_status_indicator_share_started": "",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
- "gui_status_indicator_receive_started": "",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
+ "gui_share_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunduh</b> berkas Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_receive_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunggah</b> berkas ke komputer Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.<br><br>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.<br><br>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": "",
+ "gui_receive_mode_warning": "Mode menerima membiarkan orang mengunggah berkas ke komputer Anda.<br><br><b>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.</b>",
"receive_mode_upload_starting": "",
"receive_mode_received_file": "",
"gui_mode_share_button": "",
@@ -169,7 +169,7 @@
"gui_settings_public_mode_checkbox": "",
"systray_close_server_title": "",
"systray_close_server_message": "",
- "systray_page_loaded_title": "",
+ "systray_page_loaded_title": "Halaman dimuat",
"systray_download_page_loaded_message": "",
"systray_upload_page_loaded_message": "",
"gui_uploads": "",
@@ -180,13 +180,106 @@
"gui_upload_finished": "",
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "",
- "gui_settings_language_label": "",
- "gui_settings_language_changed_notice": "",
+ "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_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_client_auth_checkbox": "Gunakan otorisasi klien",
+ "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_url_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": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>bergabung di ruang obrolan ini</b> menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_website_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunjungi</b> situs web Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json
index 039b12f7..bdbc0e6b 100644
--- a/desktop/src/onionshare/resources/locale/is.json
+++ b/desktop/src/onionshare/resources/locale/is.json
@@ -288,5 +288,15 @@
"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."
+ "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…"
}
diff --git a/desktop/src/onionshare/resources/locale/it.json b/desktop/src/onionshare/resources/locale/it.json
index f04bf3ef..1adee18b 100644
--- a/desktop/src/onionshare/resources/locale/it.json
+++ b/desktop/src/onionshare/resources/locale/it.json
@@ -70,7 +70,7 @@
"help_receive": "Ricevi le condivisioni invece di inviarle",
"gui_settings_stealth_option": "Usa l'autorizzazione client (legacy)",
"gui_settings_stealth_hidservauth_string": "Avendo salvato la tua chiave privata per il riutilizzo, puoi cliccare per copiare il tuo HidServAuth.",
- "gui_settings_autoupdate_label": "Controlla se c'è una nuova versione",
+ "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",
@@ -213,7 +213,7 @@
"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 auto-stop terminerà alle {}",
+ "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",
@@ -263,7 +263,7 @@
"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 attivamente un sito web. Sei sicuro di voler chiudere questa scheda?",
+ "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_client_auth_checkbox": "Usa l'autorizzazione del client",
@@ -280,5 +280,7 @@
"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 essere sicuri che i file siano stati trasferiti con successo.\n\nQuesto potrebbe richiedere alcuni minuti."
+ "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/lt.json b/desktop/src/onionshare/resources/locale/lt.json
index b34bb52a..f3e76e9b 100644
--- a/desktop/src/onionshare/resources/locale/lt.json
+++ b/desktop/src/onionshare/resources/locale/lt.json
@@ -4,10 +4,10 @@
"no_available_port": "",
"other_page_loaded": "Adresas įkeltas",
"incorrect_password": "Neteisingas slaptažodis",
- "close_on_autostop_timer": "",
+ "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,\ntempkite čia failus ir aplankus",
+ "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ą",
@@ -16,8 +16,8 @@
"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": "",
- "gui_start_server_autostart_timer_tooltip": "",
+ "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 {})",
@@ -28,9 +28,9 @@
"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": "",
+ "gui_waiting_to_start": "Planuojama pradėti {}. Spustelėkite , jei norite atšaukti.",
"gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.",
- "error_rate_limit": "",
+ "error_rate_limit": "Kažkas padarė per daug klaidingų bandymų atspėti jūsų slaptažodį, todėl „OnionShare“ sustabdė serverį. Vėl pradėkite bendrinti ir nusiųskite gavėjui naują bendrinimo adresą.",
"zip_progress_bar_format": "Glaudinama: %p%",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
@@ -40,7 +40,7 @@
"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": "",
+ "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",
@@ -50,25 +50,25 @@
"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": "",
- "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_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": "",
- "gui_settings_authenticate_no_auth_option": "",
+ "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": "",
- "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": "„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: <br><br>Meek_lite tiltai labai brangiai kainuoja „Tor“ projektui.<br><br>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š <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nei vienas iš jūsų pridėtų tinklų tiltų neveikia.\nPatikrinkite juos dar kartą arba pridėkite kitus.",
@@ -79,60 +79,60 @@
"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_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": "",
- "error_tor_protocol_error": "",
+ "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": "",
- "update_error_invalid_latest_version": "",
- "update_error_check_error": "",
+ "update_available": "Išleistas naujas „OnionShare“. <a href='{}'>Paspauskite čia</a>, kad jį gautumėte.<br><br>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": "",
+ "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": "",
- "gui_server_autostop_timer_expired": "",
- "gui_server_autostart_timer_expired": "",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
+ "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_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "<b>Visi</b>, turintys šį OnionShare adresą gali <b>atsisiųsti</b> jūsų failus, naudodamiesi <b>Tor Naršykle</b>: <img src='{}' />",
- "gui_website_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_website_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>apsilankyti</b> jūsų svetainėje naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>įkelti</b> failus į jūsų kompiuterį naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.<br><br>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.<br><br>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": "",
- "gui_status_indicator_share_started": "",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
- "gui_status_indicator_receive_scheduled": "",
+ "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": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
- "history_requests_tooltip": "",
+ "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": "",
+ "gui_receive_mode_warning": "Gavimo režimas leidžia žmonėms nusiųsti failus į jūsų kompiuterį. <br><br><b>Kai kurie failai gali perimti kompiuterio valdymą, jei juos atidarysite. Atidarykite failus tik iš žmonių, kuriais pasitikite, arba jei žinote, ką darote.</b>",
"gui_mode_share_button": "",
"gui_mode_receive_button": "",
"gui_mode_website_button": "",
@@ -147,67 +147,93 @@
"systray_menu_exit": "Išeiti",
"systray_page_loaded_title": "Puslapis įkeltas",
"systray_page_loaded_message": "OnionShare adresas įkeltas",
- "systray_share_started_title": "",
+ "systray_share_started_title": "Pradėtas dalijimasis",
"systray_share_started_message": "Pradedama kažkam siųsti failus",
- "systray_share_completed_title": "",
+ "systray_share_completed_title": "Dalijimasis baigtas",
"systray_share_completed_message": "Failų siuntimas užbaigtas",
- "systray_share_canceled_title": "",
- "systray_share_canceled_message": "",
- "systray_receive_started_title": "",
+ "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": "",
- "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_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": "",
+ "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": "",
- "gui_website_mode_no_files": "",
+ "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": "",
- "days_first_letter": "d.",
- "hours_first_letter": "",
- "minutes_first_letter": "",
- "seconds_first_letter": "",
+ "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": "",
+ "gui_new_tab_share_button": "Dalytis failais",
"gui_new_tab_share_description": "",
- "gui_new_tab_receive_button": "",
+ "gui_new_tab_receive_button": "Gauti failus",
"gui_new_tab_receive_description": "",
- "gui_new_tab_website_button": "",
+ "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": "",
- "gui_close_tab_warning_share_description": "",
- "gui_close_tab_warning_receive_description": "",
- "gui_close_tab_warning_website_description": "",
+ "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": "",
+ "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": "",
+ "mode_settings_persistent_checkbox": "Išsaugoti šį skirtuką ir automatiškai jį atidaryti, kai atidarysiu „OnionShare“",
"mode_settings_public_checkbox": "Nenaudoti slaptažodžio",
- "mode_settings_autostart_timer_checkbox": "",
- "mode_settings_autostop_timer_checkbox": "",
- "mode_settings_legacy_checkbox": "",
- "mode_settings_client_auth_checkbox": "",
- "mode_settings_share_autostop_sharing_checkbox": "",
+ "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_client_auth_checkbox": "Naudoti kliento autorizavimą",
+ "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": "",
+ "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_url_qr_code": "Rodyti QR kodą",
- "gui_open_folder_error": "Nepavyko atverti aplanko naudojant xdg-open. Failas yra čia: {}"
+ "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": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>prisijungti prie šio pokalbių kambario</b> naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />"
}
diff --git a/desktop/src/onionshare/resources/locale/nb_NO.json b/desktop/src/onionshare/resources/locale/nb_NO.json
index 54db60df..f2ee1477 100644
--- a/desktop/src/onionshare/resources/locale/nb_NO.json
+++ b/desktop/src/onionshare/resources/locale/nb_NO.json
@@ -118,7 +118,7 @@
"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": "Feil med Tor: {}",
+ "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",
@@ -296,5 +296,10 @@
"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."
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/nl.json b/desktop/src/onionshare/resources/locale/nl.json
index 2b5ced73..32e8f204 100644
--- a/desktop/src/onionshare/resources/locale/nl.json
+++ b/desktop/src/onionshare/resources/locale/nl.json
@@ -26,7 +26,7 @@
"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 en zet\nbestanden hier neer om het delen te starten",
+ "gui_drag_and_drop": "Sleep bestanden hier naar toe om het delen te starten",
"gui_add": "Toevoegen",
"gui_delete": "Verwijder",
"gui_choose_items": "Kies",
@@ -75,7 +75,7 @@
"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_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 {}.",
@@ -88,9 +88,9 @@
"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. <a href='{}'>Klik hier</a> om hem te krijgen.<br><br>Jij gebruikt {} and de laatste is {}.",
- "update_error_check_error": "Kon niet controleren op een nieuwe versie: de OnionShare website meldt dat de laatste versie de onherkenbare is '{}' is…",
- "update_error_invalid_latest_version": "Kon niet controleren op een nieuwe versie: Wellicht ben je niet met Tor verbonden, of de OnionShare website is niet beschikbaar?",
+ "update_available": "Nieuwe OnionShare is uitgekomen. <a href='{}'>Klik hier</a> om hem te krijgen.<br><br>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",
@@ -139,7 +139,7 @@
"gui_use_legacy_v2_onions_checkbox": "Gebruik ouderwetse adressen",
"gui_save_private_key_checkbox": "Gebruik een vast adres",
"gui_share_url_description": "<b>1Iedereen</b>2 met dit OnionShare-adres kan je bestanden <b>3binnenhalen</b>4 met de <b>5Tor Browser</b>6: <img src='{}' />",
- "gui_receive_url_description": "<b>1Iedereen</b>2 met dit OnionShare adres kan bestanden op je computer <b>3plaatsen</b>4 met de <b>5Tor Browser</b>6: <img src='{}' />7",
+ "gui_receive_url_description": "<b>Iedereen</b> met dit OnionShare adres kan bestanden op je computer <b>plaatsen</b> met de <b>Tor Browser</b>: <img src='{}' />",
"gui_url_label_persistent": "Deze share stopt niet vanzelf. <br><br>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.",
@@ -262,10 +262,10 @@
"mode_settings_client_auth_checkbox": "Gebruik client authorisatie",
"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",
+ "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 is pertinent. Als je het sluit, verlies je het onion adres dat wordt gebruikt. Weet u zeker dat u het 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",
@@ -286,5 +286,19 @@
"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_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": "<b>Iedereen</b> met dit OnionShare adres kan<b>in deze chatkamer aansluiten </b> met de <b>Tor Browser</b>: <img src='{}' />",
+ "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/pl.json b/desktop/src/onionshare/resources/locale/pl.json
index b44e5e13..2ef34565 100644
--- a/desktop/src/onionshare/resources/locale/pl.json
+++ b/desktop/src/onionshare/resources/locale/pl.json
@@ -7,10 +7,10 @@
"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": "{0:s} nie jest plikiem do odczytu.",
+ "not_a_readable_file": "Nie można odczytać {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": "Zatrzymano, ponieważ czasomierz automatycznego zatrzymania wygasł",
+ "close_on_autostop_timer": "Zatrzymano, ponieważ upłynął czas automatycznego zatrzymania",
"closing_automatically": "Zatrzymano, ponieważ transfer został zakończony",
"timeout_download_still_running": "Czekam na ukończenie pobierania",
"large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć kilka godzin",
@@ -283,5 +283,8 @@
"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 cebulowy, 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": "<b>Każdy</b> z tym adresem OnionShare może <b>dołączyć do tego pokoju</b> używając <b>Przeglądarki Tor</b>: <img src='{}' />"
+ "gui_chat_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b>dołączyć do tego pokoju</b> używając <b>Przeglądarki Tor</b>: <img src='{}' />",
+ "mode_settings_receive_disable_files_checkbox": "Wyłącz wysyłanie plików",
+ "gui_status_indicator_chat_scheduled": "Zaplanowane…",
+ "gui_status_indicator_chat_working": "Uruchamianie…"
}
diff --git a/desktop/src/onionshare/resources/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json
index 5ea5c5ce..bc7fe0c7 100644
--- a/desktop/src/onionshare/resources/locale/pt_BR.json
+++ b/desktop/src/onionshare/resources/locale/pt_BR.json
@@ -286,5 +286,15 @@
"error_port_not_available": "Porta OnionShare não disponível",
"gui_chat_url_description": "<b>Qualquer um</b> com este endereço OnionShare pode <b>entrar nesta sala de chat</b> usando o <b>Tor Browser</b>: <img src='{}' />",
"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_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"
}
diff --git a/desktop/src/onionshare/resources/locale/ru.json b/desktop/src/onionshare/resources/locale/ru.json
index 6205acca..47e7e4d1 100644
--- a/desktop/src/onionshare/resources/locale/ru.json
+++ b/desktop/src/onionshare/resources/locale/ru.json
@@ -126,7 +126,7 @@
"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": "Была обнаружена ошибка Tor: {}",
"error_tor_protocol_error_unknown": "Неизвестная ошибка Tor",
"error_invalid_private_key": "Этот приватный ключ не поддерживается",
"connecting_to_tor": "Подключение к сети Tor",
@@ -283,5 +283,14 @@
"gui_rendezvous_cleanup_quit_early": "Выйти Раньше",
"gui_rendezvous_cleanup": "Ожидается завершение соединений с сетью Tor для подтверждения успешной отправки ваших файлов.\n\nЭто может занять несколько минут.",
"gui_color_mode_changed_notice": "Перезапустите OnionShare чтобы изменения цветовой гаммы вступили в силу.",
- "gui_chat_url_description": "<b>Каждый</b> у кого есть этот адрес OnionShare может <b>присоединиться к этому чату</b> при помощи <b>Tor Browser</b>: <img src='{}' />"
+ "gui_chat_url_description": "<b>Каждый</b> у кого есть этот адрес OnionShare может <b>присоединиться к этому чату</b> при помощи <b>Tor Browser</b>: <img src='{}' />",
+ "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": "Готов начать чат"
}
diff --git a/desktop/src/onionshare/resources/locale/si.json b/desktop/src/onionshare/resources/locale/si.json
new file mode 100644
index 00000000..b55cde27
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/si.json
@@ -0,0 +1,195 @@
+{
+ "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_hidservauth": "",
+ "gui_canceled": "",
+ "gui_copied_url_title": "",
+ "gui_copied_url": "",
+ "gui_copied_hidservauth_title": "",
+ "gui_copied_hidservauth": "",
+ "gui_show_url_qr_code": "",
+ "gui_qr_code_dialog_title": "",
+ "gui_waiting_to_start": "",
+ "gui_please_wait": "",
+ "error_rate_limit": "",
+ "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_client_auth_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/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json
index 18dfad44..d94fe024 100644
--- a/desktop/src/onionshare/resources/locale/sr_Latn.json
+++ b/desktop/src/onionshare/resources/locale/sr_Latn.json
@@ -7,7 +7,7 @@
"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\nda bi započeo deljenje",
+ "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",
@@ -99,8 +99,8 @@
"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. <a href='{}'>Klikni ovde</a> da bi ga dobio.<br><br>Trenutno koristiš {} a najnoviji je {}.",
- "update_error_check_error": "Nije moguće proveriti novu verziju: na sajtu OnionShare piše da je najnovija verzija neprepoznatljiva ' {} '…",
- "update_error_invalid_latest_version": "Nije moguće proveriti novu verziju: možda niste povezani sa Torom ili je sajt OnionShare oboren?",
+ "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",
@@ -179,5 +179,54 @@
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
- "seconds_first_letter": "s"
+ "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_client_auth_checkbox": "Koristi klijentsku autorizaciju",
+ "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": "<b>Bilo ko</b> sa ovom OnionShare adresom može <b>pristupiti ovoj sobi za ćaskawe</b> koristeći <b>Tor pregledač</b>: <img src='{}' />",
+ "gui_qr_code_dialog_title": "OnionShare QR kod",
+ "gui_show_url_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"
}
diff --git a/desktop/src/onionshare/resources/locale/sv.json b/desktop/src/onionshare/resources/locale/sv.json
index 1e2b951f..a3c97704 100644
--- a/desktop/src/onionshare/resources/locale/sv.json
+++ b/desktop/src/onionshare/resources/locale/sv.json
@@ -118,7 +118,7 @@
"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 fanns ett fel med Tor: {}",
+ "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",
@@ -126,7 +126,7 @@
"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 sortera ut anslutning till Tor?",
+ "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.",
@@ -219,7 +219,7 @@
"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_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",
@@ -242,17 +242,17 @@
"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": "Den här fliken ä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?",
+ "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_client_auth_checkbox": "Använd klientauktorisering",
- "mode_settings_legacy_checkbox": "Använd en äldre adress (v2 oniontjänst, rekommenderas inte)",
+ "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": "Använd inte ett lösenord",
- "mode_settings_persistent_checkbox": "Spara den här fliken och öppna den automatiskt när jag öppnar OnionShare",
+ "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",
@@ -260,9 +260,9 @@
"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 den här fliken?",
- "gui_close_tab_warning_receive_description": "Du håller på att ta emot filer. Är du säker på att du vill stänga den här fliken?",
- "gui_close_tab_warning_share_description": "Du håller på att skicka filer. Är du säker på att du vill stänga den här fliken?",
+ "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",
@@ -280,18 +280,28 @@
"gui_chat_start_server": "Starta chattservern",
"gui_file_selection_remove_all": "Ta bort alla",
"gui_remove": "Ta bort",
- "gui_main_page_share_button": "Börja dela",
+ "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": "Chatta",
+ "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": "Börja ta emot",
+ "gui_main_page_receive_button": "Starta mottagning",
"gui_new_tab_chat_button": "Chatta anonymt",
- "gui_open_folder_error": "Misslyckades att öppna mappen med xdg-open. Filen finns här: {}",
- "gui_chat_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>gå med i detta chattrum</b> med <b>Tor Browser</b>: <img src='{}' />"
+ "gui_open_folder_error": "Det gick inte att öppna mappen med xdg-open. Filen finns här: {}",
+ "gui_chat_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>gå med i detta chattrum</b> med <b>Tor Browser</b>: <img src='{}' />",
+ "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…"
}
diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json
index d3d09298..e00c3aba 100644
--- a/desktop/src/onionshare/resources/locale/tr.json
+++ b/desktop/src/onionshare/resources/locale/tr.json
@@ -5,17 +5,17 @@
"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şma göndermek saatler sürebilir",
+ "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şmaya başlamak için dosya ve klasörleri sürükleyip bırakın",
+ "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şmaya başla",
- "gui_share_stop_server": "Paylaşmayı durdur",
+ "gui_share_stop_server": "Paylaşımı durdur",
"gui_copy_url": "Adresi Kopyala",
"gui_downloads": "İndirilenler:",
"gui_canceled": "İptal edilen",
@@ -33,9 +33,9 @@
"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şmayı Durdur ({})",
+ "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 Modunu Başlat",
"gui_receive_stop_server": "Alma Modunu Durdur",
@@ -106,7 +106,7 @@
"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 sorun çıktı: {}",
+ "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",
@@ -237,8 +237,8 @@
"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 sunucusu başlat",
+ "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'i Flatpak kullanarak kurduğunuz için, dosyaları ~/OnionShare içindeki bir klasöre kaydetmelisiniz.",
"gui_show_url_qr_code": "QR Kodu Göster",
@@ -258,5 +258,14 @@
"error_port_not_available": "OnionShare bağlantı noktası kullanılamıyor",
"gui_rendezvous_cleanup_quit_early": "Erken Çık",
"gui_rendezvous_cleanup": "Dosyalarınızın başarıyla aktarıldığından emin olmak için Tor devrelerinin kapanması bekleniyor.\n\nBu, birkaç dakika sürebilir.",
- "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın."
+ "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın.",
+ "history_receive_read_message_button": "Mesajı Oku",
+ "mode_settings_receive_webhook_url_checkbox": "Bildirim web kancası kullan",
+ "mode_settings_receive_disable_files_checkbox": "Dosya yüklemeyi devre dışı bırak",
+ "mode_settings_receive_disable_text_checkbox": "Metin göndermeyi devre dışı bırak",
+ "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"
}
diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json
index 0cd71586..cf971be0 100644
--- a/desktop/src/onionshare/resources/locale/uk.json
+++ b/desktop/src/onionshare/resources/locale/uk.json
@@ -60,7 +60,7 @@
"gui_settings_control_port_label": "Порт керування",
"gui_settings_socket_file_label": "Файл сокета",
"gui_settings_socks_label": "SOCKS порт",
- "gui_settings_authenticate_label": "Параметри автентифікації Tor",
+ "gui_settings_authenticate_label": "Налаштування автентифікації Tor",
"gui_settings_authenticate_no_auth_option": "Без автентифікації або автентифікація через cookie",
"gui_settings_authenticate_password_option": "Пароль",
"gui_settings_password_label": "Пароль",
@@ -92,14 +92,14 @@
"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": "Сталася помилка Tor: {}",
"error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor",
"connecting_to_tor": "З'єднання з мережею Tor",
"update_available": "Випущено новий OnionShare. <a href='{}'>Натисніть тут,</a> щоб його отримати.<br><br>Ваша версія {}, а найновіша {}.",
"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": "Відкрити налаштування для перевірки з'єднання з Tor?",
"gui_tor_connection_ask_open_settings": "Так",
"gui_tor_connection_ask_quit": "Вийти",
"gui_tor_connection_error_settings": "Спробуйте змінити в параметрах, як OnionShare з'єднується з мережею Tor.",
@@ -132,7 +132,7 @@
"history_in_progress_tooltip": "{} в процесі",
"history_completed_tooltip": "{} завершено",
"error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}",
- "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо впевнені в своїх діях.</b>",
+ "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо ви впевнені у своїх діях.</b>",
"gui_mode_share_button": "Поділитися файлами",
"gui_mode_receive_button": "Отримання Файлів",
"gui_settings_receiving_label": "Параметри отримання",
@@ -233,5 +233,14 @@
"error_port_not_available": "Порт OnionShare недоступний",
"gui_rendezvous_cleanup_quit_early": "Вийти раніше",
"gui_rendezvous_cleanup": "Очікування закриття схем Tor, щоб переконатися, що файли успішно передано.\n\nЦе може тривати кілька хвилин.",
- "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим."
+ "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": "Готовий до спілкування"
}
diff --git a/desktop/src/onionshare/resources/locale/yo.json b/desktop/src/onionshare/resources/locale/yo.json
index 96b5a0d1..fdd6dbea 100644
--- a/desktop/src/onionshare/resources/locale/yo.json
+++ b/desktop/src/onionshare/resources/locale/yo.json
@@ -7,14 +7,14 @@
"give_this_url_receive_stealth": "",
"ctrlc_to_stop": "",
"not_a_file": "",
- "not_a_readable_file": "",
+ "not_a_readable_file": "{0:s} je oun ti a ko le ka.",
"no_available_port": "",
- "other_page_loaded": "",
- "close_on_autostop_timer": "",
- "closing_automatically": "",
+ "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": "",
+ "large_filesize": "Ikilo: Fi fi nkan repete ranse le gba aimoye wakati",
"systray_menu_exit": "",
"systray_download_started_title": "",
"systray_download_started_message": "",
@@ -32,16 +32,16 @@
"help_verbose": "",
"help_filename": "",
"help_config": "",
- "gui_drag_and_drop": "",
- "gui_add": "",
+ "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": "",
- "gui_share_start_server": "",
- "gui_share_stop_server": "",
- "gui_share_stop_server_autostop_timer": "",
+ "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": "",
- "gui_receive_stop_server": "",
+ "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": "",
@@ -181,5 +181,14 @@
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "",
"gui_settings_language_label": "",
- "gui_settings_language_changed_notice": ""
+ "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
index a37d0c58..d14b5754 100644
--- a/desktop/src/onionshare/resources/locale/zh_Hans.json
+++ b/desktop/src/onionshare/resources/locale/zh_Hans.json
@@ -285,5 +285,15 @@
"gui_chat_url_description": "<b>任何</b>有这个OnionShare地址的人均可 <b>加入这个聊天室</b>,方法是使用<b>Tor浏览器</b>:<img src='{}' />",
"gui_rendezvous_cleanup_quit_early": "提前退出",
"gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文件传输成功。\n\n这可能需要几分钟。",
- "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。"
+ "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": "启动中…"
}
diff --git a/desktop/src/onionshare/settings_dialog.py b/desktop/src/onionshare/settings_dialog.py
index 3f913bcd..e8d2752c 100644
--- a/desktop/src/onionshare/settings_dialog.py
+++ b/desktop/src/onionshare/settings_dialog.py
@@ -19,13 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2.QtCore import Slot,Qt
+from PySide2.QtGui import QPalette, QColor
import sys
import platform
import datetime
import re
import os
-
-from onionshare_cli import common
from onionshare_cli.settings import Settings
from onionshare_cli.onion import (
Onion,
@@ -47,11 +47,7 @@ from onionshare_cli.onion import (
from . import strings
from .widgets import Alert
from .update_checker import (
- UpdateCheckerCheckError,
- UpdateCheckerInvalidLatestVersion,
- UpdateChecker,
- UpdateThread,
-)
+ UpdateThread)
from .tor_connection_dialog import TorConnectionDialog
from .gui_common import GuiCommon
@@ -129,6 +125,20 @@ class SettingsDialog(QtWidgets.QDialog):
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.addWidget(theme_label)
+ theme_layout.addWidget(self.theme_combobox)
+ theme_layout.addStretch()
+
# Connection type: either automatic, control port, or socket file
# Bundled Tor
@@ -457,6 +467,8 @@ class SettingsDialog(QtWidgets.QDialog):
layout.addSpacing(20)
layout.addLayout(language_layout)
layout.addSpacing(20)
+ layout.addLayout(theme_layout)
+ layout.addSpacing(20)
layout.addStretch()
layout.addLayout(buttons_layout)
@@ -483,6 +495,9 @@ class SettingsDialog(QtWidgets.QDialog):
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)
+
connection_type = self.old_settings.get("connection_type")
if connection_type == "bundled":
if self.connection_type_bundled_radio.isEnabled():
@@ -828,6 +843,12 @@ class SettingsDialog(QtWidgets.QDialog):
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()
@@ -937,6 +958,10 @@ class SettingsDialog(QtWidgets.QDialog):
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)
diff --git a/desktop/src/onionshare/strings.py b/desktop/src/onionshare/strings.py
index a3db202c..c4192a33 100644
--- a/desktop/src/onionshare/strings.py
+++ b/desktop/src/onionshare/strings.py
@@ -18,7 +18,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import json
-import locale
import os
strings = {}
diff --git a/desktop/src/onionshare/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py
index 0cbccc51..aeecaf66 100644
--- a/desktop/src/onionshare/tab/mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/__init__.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets
from onionshare_cli.common import AutoStopTimer
@@ -158,9 +158,16 @@ class Mode(QtWidgets.QWidget):
)
)
else:
- self.server_status.server_button.setText(
- strings._("gui_please_wait")
- )
+ 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:
@@ -354,14 +361,19 @@ class Mode(QtWidgets.QWidget):
self.app.onion.scheduled_key = None
self.app.onion.scheduled_auth_cookie = None
self.startup_thread.quit()
- if self.onion_thread:
- self.common.log("Mode", "cancel_server: quitting onion thread")
- 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()
+
+ # 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):
@@ -379,10 +391,10 @@ class Mode(QtWidgets.QWidget):
if self.server_status.status != ServerStatus.STATUS_STOPPED:
try:
self.web.stop(self.app.port)
- except:
+ except Exception:
# Probably we had no port to begin with (Onion service didn't start)
pass
- self.app.cleanup()
+ self.web.cleanup()
self.stop_server_custom()
@@ -447,12 +459,24 @@ class Mode(QtWidgets.QWidget):
"""
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.
diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
index 2312a64e..fe3e69f1 100644
--- a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
@@ -18,19 +18,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import os
-import random
-import string
-
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
-from onionshare_cli.common import Common
from onionshare_cli.web import Web
from .. import Mode
from .... import strings
-from ....widgets import MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -68,6 +62,11 @@ class ChatMode(Mode):
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)
@@ -83,17 +82,16 @@ class ChatMode(Mode):
# Top bar
top_bar_layout = QtWidgets.QHBoxLayout()
- top_bar_layout.addStretch()
+ # 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.addStretch()
self.main_layout.addWidget(header_label)
- self.main_layout.addWidget(self.primary_action)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addStretch()
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/mode/file_selection.py b/desktop/src/onionshare/tab/mode/file_selection.py
index e9604ec5..302f07b9 100644
--- a/desktop/src/onionshare/tab/mode/file_selection.py
+++ b/desktop/src/onionshare/tab/mode/file_selection.py
@@ -72,8 +72,8 @@ class DropHereWidget(QtWidgets.QWidget):
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, 310, w, h - 380)
- self.text_label.setGeometry(0, 360, w, h - 400)
+ self.header_label.setGeometry(0, 290, w, h - 360)
+ self.text_label.setGeometry(0, 340, w, h - 380)
class DropCountLabel(QtWidgets.QLabel):
diff --git a/desktop/src/onionshare/tab/mode/history.py b/desktop/src/onionshare/tab/mode/history.py
index 45e37c75..091905f7 100644
--- a/desktop/src/onionshare/tab/mode/history.py
+++ b/desktop/src/onionshare/tab/mode/history.py
@@ -148,6 +148,7 @@ class ShareHistoryItem(HistoryItem):
# 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:
@@ -253,7 +254,7 @@ class ReceiveHistoryItemFile(QtWidgets.QWidget):
try:
# If nautilus is available, open it
subprocess.Popen(["xdg-open", self.dir])
- except:
+ except Exception:
Alert(
self.common,
strings._("gui_open_folder_error").format(abs_filename),
@@ -268,6 +269,60 @@ class ReceiveHistoryItemFile(QtWidgets.QWidget):
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__()
@@ -277,6 +332,12 @@ class ReceiveHistoryItem(HistoryItem):
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(
@@ -295,6 +356,9 @@ class ReceiveHistoryItem(HistoryItem):
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)
@@ -305,6 +369,7 @@ class ReceiveHistoryItem(HistoryItem):
# Layout
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.label)
+ layout.addWidget(self.message)
layout.addWidget(self.progress_bar)
layout.addWidget(files_widget)
layout.addStretch()
@@ -313,6 +378,9 @@ class ReceiveHistoryItem(HistoryItem):
# 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
@@ -372,6 +440,7 @@ class ReceiveHistoryItem(HistoryItem):
# 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
@@ -412,6 +481,7 @@ class IndividualFileHistoryItem(HistoryItem):
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
@@ -560,6 +630,13 @@ class HistoryItemList(QtWidgets.QScrollArea):
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.
@@ -637,6 +714,7 @@ class History(QtWidgets.QWidget):
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
@@ -653,7 +731,7 @@ class History(QtWidgets.QWidget):
"""
Add a new item.
"""
- self.common.log("History", "add", f"id: {id}, item: {item}")
+ self.common.log("History", "add", f"id: {id}")
# Hide empty, show not empty
self.empty.hide()
@@ -674,6 +752,12 @@ class History(QtWidgets.QWidget):
"""
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.
diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
index a3a315c9..9f55dbaf 100644
--- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py
+++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
@@ -23,7 +23,7 @@ from PySide2 import QtCore, QtWidgets
from ... import strings
-class ModeSettingsWidget(QtWidgets.QWidget):
+class ModeSettingsWidget(QtWidgets.QScrollArea):
"""
All of the common settings for each mode are in this widget
"""
@@ -57,6 +57,16 @@ class ModeSettingsWidget(QtWidgets.QWidget):
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(
@@ -152,6 +162,7 @@ class ModeSettingsWidget(QtWidgets.QWidget):
# 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)
advanced_layout.addWidget(self.legacy_checkbox)
@@ -166,7 +177,15 @@ class ModeSettingsWidget(QtWidgets.QWidget):
layout.addWidget(self.public_checkbox)
layout.addWidget(self.advanced_widget)
layout.addWidget(self.toggle_advanced_button)
- self.setLayout(layout)
+ 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()
@@ -203,6 +222,33 @@ class ModeSettingsWidget(QtWidgets.QWidget):
self.legacy_checkbox.hide()
self.client_auth_checkbox.hide()
+ 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)
diff --git a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
index 8a848128..d07b5ffc 100644
--- a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
@@ -26,7 +26,7 @@ from onionshare_cli.web import Web
from ..history import History, ToggleHistory, ReceiveHistoryItem
from .. import Mode
from .... import strings
-from ....widgets import MinimumWidthWidget, Alert
+from ....widgets import MinimumSizeWidget, Alert
from ....gui_common import GuiCommon
@@ -60,6 +60,8 @@ class ReceiveMode(Mode):
self.image.setLayout(image_layout)
# Settings
+
+ # Data dir
data_dir_label = QtWidgets.QLabel(
strings._("mode_settings_receive_data_dir_label")
)
@@ -74,9 +76,60 @@ class ReceiveMode(Mode):
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)
@@ -129,8 +182,8 @@ class ReceiveMode(Mode):
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addWidget(header_label)
self.main_layout.addWidget(receive_warning)
- self.main_layout.addWidget(self.primary_action)
- self.main_layout.addWidget(MinimumWidthWidget(525))
+ self.main_layout.addWidget(self.primary_action, stretch=1)
+ self.main_layout.addWidget(MinimumSizeWidget(525, 0))
# Row layout
content_row = QtWidgets.QHBoxLayout()
@@ -138,10 +191,8 @@ class ReceiveMode(Mode):
content_row.addWidget(self.image)
row_layout = QtWidgets.QVBoxLayout()
row_layout.addLayout(top_bar_layout)
- row_layout.addStretch()
- row_layout.addLayout(content_row)
+ row_layout.addLayout(content_row, stretch=1)
row_layout.addWidget(self.server_status)
- row_layout.addStretch()
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
@@ -183,6 +234,36 @@ class ReceiveMode(Mode):
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
@@ -220,6 +301,16 @@ class ReceiveMode(Mode):
# 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.
@@ -248,8 +339,11 @@ class ReceiveMode(Mode):
Handle REQUEST_STARTED event.
"""
item = ReceiveHistoryItem(
- self.common, event["data"]["id"], event["data"]["content_length"]
+ 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
@@ -269,6 +363,12 @@ class ReceiveMode(Mode):
{"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.
diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
index 74a4e2c2..4056d92e 100644
--- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
@@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
from onionshare_cli.common import Common
from onionshare_cli.web import Web
@@ -30,7 +29,7 @@ from .. import Mode
from ..file_selection import FileSelection
from ..history import History, ToggleHistory, ShareHistoryItem
from .... import strings
-from ....widgets import Alert, MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -77,6 +76,11 @@ class ShareMode(Mode):
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)
@@ -156,9 +160,9 @@ class ShareMode(Mode):
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)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/mode/share_mode/threads.py b/desktop/src/onionshare/tab/mode/share_mode/threads.py
index 6f5c44ea..839d30ea 100644
--- a/desktop/src/onionshare/tab/mode/share_mode/threads.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/threads.py
@@ -36,7 +36,7 @@ class CompressThread(QtCore.QThread):
# prepare files to share
def set_processed_size(self, x):
- if self.mode._zip_progress_bar != None:
+ if self.mode._zip_progress_bar is not None:
self.mode._zip_progress_bar.update_processed_size_signal.emit(x)
def run(self):
@@ -47,9 +47,6 @@ class CompressThread(QtCore.QThread):
self.mode.filenames, processed_size_callback=self.set_processed_size
)
self.success.emit()
- self.mode.app.cleanup_filenames += (
- self.mode.web.share_mode.cleanup_filenames
- )
except OSError as e:
self.error.emit(e.strerror)
diff --git a/desktop/src/onionshare/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
index 6aa83de0..577ea28e 100644
--- a/desktop/src/onionshare/tab/mode/website_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
@@ -19,12 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
-import random
-import string
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
from onionshare_cli.common import Common
from onionshare_cli.web import Web
@@ -32,7 +29,7 @@ from .. import Mode
from ..file_selection import FileSelection
from ..history import History, ToggleHistory
from .... import strings
-from ....widgets import Alert, MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -77,6 +74,11 @@ class WebsiteMode(Mode):
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)
@@ -156,9 +158,9 @@ class WebsiteMode(Mode):
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)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/server_status.py b/desktop/src/onionshare/tab/server_status.py
index 8c1c9655..ba5ff165 100644
--- a/desktop/src/onionshare/tab/server_status.py
+++ b/desktop/src/onionshare/tab/server_status.py
@@ -17,8 +17,6 @@ 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 <http://www.gnu.org/licenses/>.
"""
-
-import platform
import textwrap
from PySide2 import QtCore, QtWidgets, QtGui
from PySide2.QtCore import Qt
@@ -163,7 +161,7 @@ class ServerStatus(QtWidgets.QWidget):
self.url.setText(wrapped_onion_url)
else:
self.url.setText(self.get_url())
- except:
+ except Exception:
pass
def show_url(self):
@@ -308,13 +306,18 @@ class ServerStatus(QtWidgets.QWidget):
)
)
else:
- self.server_button.setText(strings._("gui_please_wait"))
+ 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"))
+ self.server_button.setText(strings._("gui_please_wait_no_button"))
def server_button_clicked(self):
"""
@@ -381,7 +384,10 @@ class ServerStatus(QtWidgets.QWidget):
self.start_server()
elif self.status == self.STATUS_STARTED:
self.stop_server()
- elif self.status == self.STATUS_WORKING:
+ 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()
diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py
index 2d4e164c..09982de9 100644
--- a/desktop/src/onionshare/tab/tab.py
+++ b/desktop/src/onionshare/tab/tab.py
@@ -452,20 +452,20 @@ class Tab(QtWidgets.QWidget):
# Chat mode
if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED:
self.set_server_status_indicator_stopped(
- strings._("gui_status_indicator_receive_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_receive_scheduled")
+ strings._("gui_status_indicator_chat_scheduled")
)
else:
self.set_server_status_indicator_working(
- strings._("gui_status_indicator_receive_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_receive_started")
+ strings._("gui_status_indicator_chat_started")
)
def set_server_status_indicator_stopped(self, label_text):
@@ -540,6 +540,9 @@ class Tab(QtWidgets.QWidget):
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)
@@ -665,7 +668,7 @@ class Tab(QtWidgets.QWidget):
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.app.cleanup()
+ self.get_mode().web.cleanup()
return True
# Cancel
else:
@@ -678,4 +681,4 @@ class Tab(QtWidgets.QWidget):
self.get_mode().web.stop(self.get_mode().app.port)
self.get_mode().web_thread.quit()
self.get_mode().web_thread.wait()
- self.app.cleanup()
+ self.get_mode().web.cleanup()
diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py
index b9a70011..a955ea53 100644
--- a/desktop/src/onionshare/tab_widget.py
+++ b/desktop/src/onionshare/tab_widget.py
@@ -176,6 +176,11 @@ class TabWidget(QtWidgets.QTabWidget):
)
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"))
@@ -183,8 +188,13 @@ class TabWidget(QtWidgets.QTabWidget):
self.bring_to_front.emit()
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, title)
+ self.setTabText(index, shortened_title)
+ self.setTabToolTip(index, title)
def change_icon(self, tab_id, icon_path):
index = self.indexOf(self.tabs[tab_id])
diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py
index 214344f7..c9a3dba4 100644
--- a/desktop/src/onionshare/threads.py
+++ b/desktop/src/onionshare/threads.py
@@ -158,14 +158,14 @@ class AutoStartTimer(QtCore.QThread):
)
try:
# Sleep until scheduled time
- while autostart_timer_datetime_delta > 0 and self.canceled == False:
+ 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 == False:
+ if self.canceled is False:
self.mode.server_status.server_button.setText(
strings._("gui_please_wait")
)
@@ -252,7 +252,7 @@ class EventHandlerThread(QtCore.QThread):
"EventHandler", "run", f"invalid event type: {obj}"
)
- except:
+ except Exception:
pass
if self.should_quit:
diff --git a/desktop/src/onionshare/tor_connection_dialog.py b/desktop/src/onionshare/tor_connection_dialog.py
index c3644f8b..b5c2f61c 100644
--- a/desktop/src/onionshare/tor_connection_dialog.py
+++ b/desktop/src/onionshare/tor_connection_dialog.py
@@ -166,7 +166,7 @@ class TorConnectionThread(QtCore.QThread):
else:
self.canceled_connecting_to_tor.emit()
- except BundledTorCanceled as e:
+ except BundledTorCanceled:
self.common.log(
"TorConnectionThread", "run", "caught exception: BundledTorCanceled"
)
diff --git a/desktop/src/onionshare/update_checker.py b/desktop/src/onionshare/update_checker.py
index 1d8e8b07..e9dbc060 100644
--- a/desktop/src/onionshare/update_checker.py
+++ b/desktop/src/onionshare/update_checker.py
@@ -19,14 +19,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from PySide2 import QtCore
-import datetime, time, socket, re, platform
+import datetime
+import re
import socks
from distutils.version import LooseVersion as Version
from onionshare_cli.settings import Settings
-from onionshare_cli.onion import Onion
-
-from . import strings
class UpdateCheckerCheckError(Exception):
@@ -170,7 +168,7 @@ class UpdateChecker(QtCore.QObject):
settings.save()
# Do we need to update?
- update_url = f"https://github.com/micahflee/onionshare/releases/tag/v{latest_version}"
+ update_url = "https://onionshare.org"
installed_version = self.common.version
if installed_version < latest_version:
self.update_available.emit(
diff --git a/desktop/src/onionshare/widgets.py b/desktop/src/onionshare/widgets.py
index a1880a2e..c239d03a 100644
--- a/desktop/src/onionshare/widgets.py
+++ b/desktop/src/onionshare/widgets.py
@@ -84,14 +84,15 @@ class AddFileDialog(QtWidgets.QFileDialog):
QtWidgets.QDialog.accept(self)
-class MinimumWidthWidget(QtWidgets.QWidget):
+class MinimumSizeWidget(QtWidgets.QWidget):
"""
- An empty widget with a minimum width, just to force layouts to behave
+ An empty widget with a minimum width and height, just to force layouts to behave
"""
- def __init__(self, width):
- super(MinimumWidthWidget, self).__init__()
+ def __init__(self, width, height):
+ super(MinimumSizeWidget, self).__init__()
self.setMinimumWidth(width)
+ self.setMinimumHeight(height)
class Image(qrcode.image.base.BaseImage):
diff --git a/desktop/src/org.onionshare.OnionShare.appdata.xml b/desktop/src/org.onionshare.OnionShare.appdata.xml
index 3cee6454..a53bc930 100644
--- a/desktop/src/org.onionshare.OnionShare.appdata.xml
+++ b/desktop/src/org.onionshare.OnionShare.appdata.xml
@@ -13,17 +13,17 @@
<launchable type="desktop-id">org.onionshare.OnionShare.desktop</launchable>
<screenshots>
<screenshot type="default">
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/docs/source/_static/screenshots/tabs.png</image>
+ <image>https://docs.onionshare.org/2.3.3/en/_images/tabs.png</image>
<caption>Types of services that OnionShare supports</caption>
</screenshot>
</screenshots>
- <url type="bugtracker">https://github.com/micahflee/onionshare/issues/</url>
+ <url type="bugtracker">https://github.com/onionshare/onionshare/issues/</url>
<url type="help">https://onionshare.org/</url>
<url type="homepage">https://onionshare.org/</url>
<developer_name>Micah Lee</developer_name>
<update_contact>micah@micahflee.com</update_contact>
<content_rating type="oars-1.1" />
<releases>
- <release type="development" date="2021-02-22" version="2.3.1" />
+ <release type="development" date="2021-08-20" version="2.3.3" />
</releases>
</component>
diff --git a/desktop/src/setup.py b/desktop/src/setup.py
index 83aeeba1..cd3c21f6 100644
--- a/desktop/src/setup.py
+++ b/desktop/src/setup.py
@@ -18,19 +18,19 @@ 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 <http://www.gnu.org/licenses/>.
"""
-
-# This setup.py file is used for snap and flatpak packaging. For other packaging,
-# OnionShare uses briefcase.
-
-import os
import setuptools
-version = "2.3.1"
+version = "2.3.3"
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=(
+ "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",
diff --git a/desktop/tests/conftest.py b/desktop/tests/conftest.py
index 65d13fa6..b17aa45c 100644
--- a/desktop/tests/conftest.py
+++ b/desktop/tests/conftest.py
@@ -1,19 +1,20 @@
import sys
-
-# Force tests to look for resources in the source code tree
-sys.onionshare_dev_mode = True
-
-# Let OnionShare know the tests are running, to avoid colliding with settings files
-sys.onionshare_test_mode = True
-
import os
import shutil
import tempfile
from datetime import datetime, timedelta
import pytest
+from PySide2 import QtTest
+
+from onionshare_cli import common, web, settings
-from PySide2 import QtTest, QtGui
+
+# Force tests to look for resources in the source code tree
+sys.onionshare_dev_mode = True
+
+# Let OnionShare know the tests are running, to avoid colliding with settings files
+sys.onionshare_test_mode = True
@staticmethod
@@ -36,9 +37,6 @@ sys.path.insert(
),
)
-from onionshare_cli import common, web, settings
-
-
# The temporary directory for CLI tests
test_temp_dir = None
@@ -69,7 +67,7 @@ def temp_dir():
@pytest.fixture
def temp_dir_1024(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes).
"""
@@ -83,7 +81,7 @@ def temp_dir_1024(temp_dir):
# pytest > 2.9 only needs @pytest.fixture
@pytest.yield_fixture
def temp_dir_1024_delete(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes). The temporary directory (including
the file inside) will be deleted after fixture usage.
"""
@@ -97,7 +95,7 @@ def temp_dir_1024_delete(temp_dir):
@pytest.fixture
def temp_file_1024(temp_dir):
- """ Create a temporary file of a particular size (1024 bytes). """
+ """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)
@@ -141,7 +139,7 @@ def default_zw():
tmp_dir = os.path.dirname(zw.zip_filename)
try:
shutil.rmtree(tmp_dir, ignore_errors=True)
- except:
+ except Exception:
pass
diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py
index 214da945..acaa9739 100644
--- a/desktop/tests/gui_base_test.py
+++ b/desktop/tests/gui_base_test.py
@@ -1,11 +1,7 @@
-import pytest
import unittest
-
-import json
import os
import requests
import shutil
-import base64
import tempfile
import secrets
import platform
@@ -13,14 +9,12 @@ import platform
from PySide2 import QtCore, QtTest, QtWidgets
from onionshare_cli.common import Common
-from onionshare_cli.settings import Settings
-from onionshare_cli.onion import Onion
-from onionshare_cli.web import Web
from onionshare import Application, MainWindow, GuiCommon
from onionshare.tab.mode.share_mode import ShareMode
from onionshare.tab.mode.receive_mode import ReceiveMode
from onionshare.tab.mode.website_mode import WebsiteMode
+from onionshare.tab.mode.chat_mode import ChatMode
from onionshare import strings
@@ -140,6 +134,17 @@ class GuiBaseTest(unittest.TestCase):
return tab
+ def new_chat_tab(self):
+ tab = self.gui.tabs.widget(0)
+ self.verify_new_tab(tab)
+
+ # Chat
+ tab.chat_button.click()
+ self.assertFalse(tab.new_tab.isVisible())
+ self.assertTrue(tab.chat_mode.isVisible())
+
+ return tab
+
def close_all_tabs(self):
for _ in range(self.gui.tabs.count()):
tab = self.gui.tabs.widget(0)
@@ -368,6 +373,7 @@ class GuiBaseTest(unittest.TestCase):
and not tab.settings.get("share", "autostop_sharing")
)
or (type(tab.get_mode()) == WebsiteMode)
+ or (type(tab.get_mode()) == ChatMode)
):
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
@@ -459,6 +465,20 @@ class GuiBaseTest(unittest.TestCase):
# We should have timed out now
self.assertEqual(tab.get_mode().server_status.status, 0)
+ def hit_405(self, url, expected_resp, data = {}, methods = [] ):
+ """Test various HTTP methods and the response"""
+ for method in methods:
+ if method == "put":
+ r = requests.put(url, data = data)
+ if method == "post":
+ r = requests.post(url, data = data)
+ if method == "delete":
+ r = requests.delete(url)
+ if method == "options":
+ r = requests.options(url)
+ self.assertTrue(expected_resp in r.text)
+ self.assertFalse('Werkzeug' in r.headers)
+
# Grouped tests follow from here
def run_all_common_setup_tests(self):
diff --git a/desktop/tests/run.sh b/desktop/tests/run.sh
index 833c1516..0f019b05 100755
--- a/desktop/tests/run.sh
+++ b/desktop/tests/run.sh
@@ -2,4 +2,5 @@
pytest -v tests/test_gui_tabs.py && \
pytest -v tests/test_gui_share.py && \
pytest -v tests/test_gui_receive.py && \
-pytest -v tests/test_gui_website.py
+pytest -v tests/test_gui_website.py && \
+pytest -v tests/test_gui_chat.py
diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py
new file mode 100644
index 00000000..15ecaa44
--- /dev/null
+++ b/desktop/tests/test_gui_chat.py
@@ -0,0 +1,98 @@
+import requests
+
+from PySide2 import QtTest
+
+from .gui_base_test import GuiBaseTest
+
+
+class TestChat(GuiBaseTest):
+ # Shared test methods
+
+ def view_chat(self, tab):
+ """Test that we can view the chat room"""
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ if tab.settings.get("general", "public"):
+ r = requests.get(url)
+ else:
+ r = requests.get(
+ url,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ self.assertTrue("Chat <b>requires JavaScript</b>" in r.text)
+
+ cookies_dict = requests.utils.dict_from_cookiejar(r.cookies)
+ self.assertTrue("session" in cookies_dict.keys())
+
+ def change_username(self, tab):
+ """Test that we can change our username"""
+ url = f"http://127.0.0.1:{tab.app.port}/update-session-username"
+ data = {"username": "oniontest"}
+ if tab.settings.get("general", "public"):
+ r = requests.post(url, json=data)
+ else:
+ r = requests.post(
+ url,
+ json=data,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ jsonResponse = r.json()
+ self.assertTrue(jsonResponse["success"])
+ self.assertEqual(jsonResponse["username"], "oniontest")
+
+ def run_all_chat_mode_started_tests(self, tab):
+ """Tests in chat mode after starting a chat"""
+ self.server_working_on_start_button_pressed(tab)
+ self.server_status_indicator_says_starting(tab)
+ self.server_is_started(tab, startup_time=500)
+ self.web_server_is_running(tab)
+ self.have_a_password(tab)
+ self.url_description_shown(tab)
+ self.have_copy_url_button(tab)
+ self.have_show_qr_code_button(tab)
+ self.server_status_indicator_says_started(tab)
+
+ def run_all_chat_mode_stopping_tests(self, tab):
+ """Tests stopping a chat"""
+ self.server_is_stopped(tab)
+ self.web_server_is_stopped(tab)
+ self.server_status_indicator_says_closed(tab)
+
+ # Tests
+
+ def test_chat(self):
+ """
+ Test chat mode
+ """
+ tab = self.new_chat_tab()
+ self.run_all_chat_mode_started_tests(tab)
+ self.view_chat(tab)
+ self.change_username(tab)
+ self.run_all_chat_mode_stopping_tests(tab)
+ self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_chat_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_chat_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(
+ url,
+ expected_resp="OnionShare: 405 Method Not Allowed",
+ data={"foo": "bar"},
+ methods=["put", "post", "delete", "options"],
+ )
+ 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 848b2f11..b523b0fa 100644
--- a/desktop/tests/test_gui_receive.py
+++ b/desktop/tests/test_gui_receive.py
@@ -48,15 +48,15 @@ class TestReceive(GuiBaseTest):
QtTest.QTest.qWait(1000, self.gui.qtapp)
- # Make sure the file is within the last 10 seconds worth of fileames
+ # Make sure the file is within the last 10 seconds worth of filenames
exists = False
now = datetime.now()
for _ in range(10):
date_dir = now.strftime("%Y-%m-%d")
if identical_files_at_once:
- time_dir = now.strftime("%H.%M.%S-1")
+ time_dir = now.strftime("%H%M%S-1")
else:
- time_dir = now.strftime("%H.%M.%S")
+ time_dir = now.strftime("%H%M%S")
receive_mode_dir = os.path.join(
tab.settings.get("receive", "data_dir"), date_dir, time_dir
)
@@ -93,6 +93,47 @@ class TestReceive(GuiBaseTest):
QtCore.QTimer.singleShot(1000, accept_dialog)
self.assertTrue("Error uploading, please inform the OnionShare user" in r.text)
+ def submit_message(self, tab, message):
+ """Test that we can submit a message"""
+
+ # Wait 2 seconds to make sure the filename, based on timestamp, isn't accidentally reused
+ QtTest.QTest.qWait(2000, self.gui.qtapp)
+
+ url = f"http://127.0.0.1:{tab.app.port}/upload"
+ if tab.settings.get("general", "public"):
+ requests.post(url, data={"text": message})
+ else:
+ requests.post(
+ url,
+ data={"text": message},
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
+
+ # Make sure the file is within the last 10 seconds worth of filenames
+ exists = False
+ now = datetime.now()
+ for _ in range(10):
+ date_dir = now.strftime("%Y-%m-%d")
+ time_dir = now.strftime("%H%M%S")
+ expected_filename = os.path.join(
+ tab.settings.get("receive", "data_dir"),
+ date_dir,
+ f"{time_dir}-message.txt",
+ )
+ if os.path.exists(expected_filename):
+ with open(expected_filename) as f:
+ assert f.read() == message
+
+ exists = True
+ break
+ now = now - timedelta(seconds=1)
+
+ self.assertTrue(exists)
+
def try_without_auth_in_non_public_mode(self, tab):
r = requests.post(f"http://127.0.0.1:{tab.app.port}/upload")
self.assertEqual(r.status_code, 401)
@@ -115,10 +156,9 @@ class TestReceive(GuiBaseTest):
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)
self.server_status_indicator_says_started(tab)
- self.web_page(tab, "Select the files you want to send, then click")
def run_all_receive_mode_tests(self, tab):
- """Upload files in receive mode and stop the share"""
+ """Submit files and messages in receive mode and stop the share"""
self.run_all_receive_mode_setup_tests(tab)
if not tab.settings.get("general", "public"):
self.try_without_auth_in_non_public_mode(tab)
@@ -131,9 +171,11 @@ class TestReceive(GuiBaseTest):
self.counter_incremented(tab, 3)
self.upload_file(tab, self.tmpfile_test2, "test2.txt")
self.counter_incremented(tab, 4)
+ self.submit_message(tab, "onionshare is an interesting piece of software")
+ self.counter_incremented(tab, 5)
# Test uploading the same file twice at the same time, and make sure no collisions
self.upload_file(tab, self.tmpfile_test, "test.txt", True)
- self.counter_incremented(tab, 6)
+ self.counter_incremented(tab, 7)
self.history_indicator(tab, "2")
self.server_is_stopped(tab)
self.web_server_is_stopped(tab)
@@ -244,3 +286,22 @@ class TestReceive(GuiBaseTest):
self.run_all_upload_non_writable_dir_tests(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_receive_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_receive_mode_setup_tests(tab)
+ self.upload_file(tab, self.tmpfile_test, "test.txt")
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+
+ self.server_is_stopped(tab)
+ self.web_server_is_stopped(tab)
+ self.server_status_indicator_says_closed(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_share.py b/desktop/tests/test_gui_share.py
index 0e521d52..531e456f 100644
--- a/desktop/tests/test_gui_share.py
+++ b/desktop/tests/test_gui_share.py
@@ -1,4 +1,3 @@
-import pytest
import os
import requests
import tempfile
@@ -609,3 +608,20 @@ class TestShare(GuiBaseTest):
self.hit_401(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_share_tab()
+
+ tab.get_mode().autostop_sharing_checkbox.click()
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_share_mode_setup_tests(tab)
+ self.run_all_share_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+ self.history_widgets_present(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
index 4ebbdffb..09f38bb4 100644
--- a/desktop/tests/test_gui_tabs.py
+++ b/desktop/tests/test_gui_tabs.py
@@ -1,4 +1,3 @@
-import pytest
import os
from PySide2 import QtCore, QtTest, QtWidgets
@@ -154,11 +153,21 @@ class TestTabs(GuiBaseTest):
self.gui.status_bar.server_status_label.text(), "Ready to share"
)
+ # New tab, chat mode
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(4).chat_button.click()
+ self.assertFalse(self.gui.tabs.widget(4).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(4).chat_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to chat"
+ )
+
# Close tabs
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
def test_07_close_share_tab_while_server_started_should_warn(self):
"""Closing a share mode tab when the server is running should throw a warning"""
@@ -166,7 +175,7 @@ class TestTabs(GuiBaseTest):
self.close_tab_with_active_server(tab)
def test_08_close_receive_tab_while_server_started_should_warn(self):
- """Closing a recieve mode tab when the server is running should throw a warning"""
+ """Closing a receive mode tab when the server is running should throw a warning"""
tab = self.new_receive_tab()
self.close_tab_with_active_server(tab)
@@ -175,22 +184,32 @@ class TestTabs(GuiBaseTest):
tab = self.new_website_tab_with_files()
self.close_tab_with_active_server(tab)
- def test_10_close_persistent_share_tab_shows_warning(self):
+ def test_10_close_chat_tab_while_server_started_should_warn(self):
+ """Closing a chat mode tab when the server is running should throw a warning"""
+ tab = self.new_chat_tab()
+ self.close_tab_with_active_server(tab)
+
+ def test_11_close_persistent_share_tab_shows_warning(self):
"""Closing a share mode tab that's persistent should show a warning"""
tab = self.new_share_tab_with_files()
self.close_persistent_tab(tab)
- def test_11_close_persistent_receive_tab_shows_warning(self):
+ def test_12_close_persistent_receive_tab_shows_warning(self):
"""Closing a receive mode tab that's persistent should show a warning"""
tab = self.new_receive_tab()
self.close_persistent_tab(tab)
- def test_12_close_persistent_website_tab_shows_warning(self):
+ def test_13_close_persistent_website_tab_shows_warning(self):
"""Closing a website mode tab that's persistent should show a warning"""
tab = self.new_website_tab_with_files()
self.close_persistent_tab(tab)
- def test_13_quit_with_server_started_should_warn(self):
+ def test_14_close_persistent_chat_tab_shows_warning(self):
+ """Closing a chat mode tab that's persistent should show a warning"""
+ tab = self.new_chat_tab()
+ self.close_persistent_tab(tab)
+
+ def test_15_quit_with_server_started_should_warn(self):
"""Quitting OnionShare with any active servers should show a warning"""
tab = self.new_share_tab()
diff --git a/desktop/tests/test_gui_website.py b/desktop/tests/test_gui_website.py
index 164aa07d..f526756a 100644
--- a/desktop/tests/test_gui_website.py
+++ b/desktop/tests/test_gui_website.py
@@ -1,10 +1,6 @@
-import pytest
-import os
import requests
-import shutil
-from datetime import datetime, timedelta
-from PySide2 import QtCore, QtTest
+from PySide2 import QtTest
from .gui_base_test import GuiBaseTest
@@ -103,3 +99,19 @@ class TestWebsite(GuiBaseTest):
tab.get_mode().disable_csp_checkbox.click()
self.run_all_website_mode_download_tests(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_website_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_website_mode_setup_tests(tab)
+ self.run_all_website_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+
+ self.close_all_tabs()
diff --git a/docs/README.md b/docs/README.md
index fe026802..029217bb 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -36,3 +36,75 @@ sphinx-intl update -p build/gettext -l de
# Build German translated document
make -e SPHINXOPTS="-D language='de'" html
```
+
+## Discoving which translations are >90% complete
+
+Each OnionShare release should only include a language if >90% of the strings have been translated into it. The script `check-weblate.py` script can be used to make a few hundreds weblate API requests to determine this for you automatically. It requires using your weblate API key, which you can find in your [user profile](https://hosted.weblate.org/accounts/profile/#api).
+
+```
+$ poetry run ./check-weblate.py $WEBLATE_API_KEY
+GET https://hosted.weblate.org/api/projects/onionshare/languages/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/hr/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/eo/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/ja/
+<...snip...>
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/wo/ | error 404
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/ar/
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/it/
+
+App translations >= 100%
+=======================
+English (en), 100.0%
+
+App translations >= 90%
+=======================
+Arabic (ar), 95.0%
+Bengali (bn), 95.0%
+Catalan (ca), 93.5%
+Chinese (Simplified) (zh_Hans), 98.0%
+Chinese (Traditional) (zh_Hant), 95.0%
+Croatian (hr), 95.0%
+Danish (da), 94.5%
+Dutch (nl), 92.6%
+French (fr), 98.0%
+Galician (gl), 97.5%
+German (de), 95.0%
+Greek (el), 98.0%
+Icelandic (is), 98.0%
+Indonesian (id), 98.0%
+Italian (it), 94.5%
+Japanese (ja), 94.5%
+Kurdish (Central) (ckb), 94.5%
+Norwegian Bokmål (nb_NO), 98.0%
+Polish (pl), 95.0%
+Portuguese (Brazil) (pt_BR), 95.0%
+Portuguese (Portugal) (pt_PT), 92.6%
+Russian (ru), 95.0%
+Serbian (latin) (sr_Latn), 95.0%
+Slovak (sk), 94.5%
+Spanish (es), 98.0%
+Swedish (sv), 94.5%
+Turkish (tr), 98.0%
+Ukrainian (uk), 98.0%
+
+App translations >= 80%
+=======================
+Finnish (fi), 88.1%
+
+Docs translations >= 100%
+========================
+English (en), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Turkish (tr), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Ukrainian (uk), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+
+Docs translations >= 90%
+========================
+
+
+Docs translations >= 80%
+========================
+German (de), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Greek (el), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Russian (ru), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Spanish (es), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+```
diff --git a/docs/build.sh b/docs/build.sh
index c0acdcc1..53999f68 100755
--- a/docs/build.sh
+++ b/docs/build.sh
@@ -3,7 +3,7 @@
VERSION=`cat ../cli/onionshare_cli/resources/version.txt`
# Supported locales
-LOCALES="ar ca da de el en es fa fr ga it is ja nb_NO nl pl pt_BR pt_PT ro ru sr@latin sv te tr uk zh_CN zh_TW"
+LOCALES="en de el ru es tr uk"
# Generate English .po files
make gettext
diff --git a/docs/check-weblate.py b/docs/check-weblate.py
new file mode 100755
index 00000000..c3e1be03
--- /dev/null
+++ b/docs/check-weblate.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python3
+import sys
+import httpx
+import asyncio
+import time
+
+
+api_token = None
+languages = {}
+app_translations = {}
+docs_translations = {}
+
+
+async def api(path):
+ url = f"https://hosted.weblate.org{path}"
+
+ async with httpx.AsyncClient() as client:
+ r = await client.get(
+ url, headers={"Authorization": f"Token {api_token}"}, timeout=30.0
+ )
+
+ if r.status_code == 200:
+ print(f"GET {url}")
+ return r.json()
+ else:
+ print(f"GET {url} | error {r.status_code}")
+ return None
+
+
+async def get_app_translation(lang_code):
+ global app_translations
+ obj = await api(f"/api/translations/onionshare/translations/{lang_code}/")
+ if obj:
+ app_translations[lang_code] = obj["translated_percent"]
+
+
+async def get_docs_translation(component, lang_code):
+ global docs_translations
+ obj = await api(f"/api/translations/onionshare/{component}/{lang_code}/")
+ if obj:
+ if component not in docs_translations:
+ docs_translations[component] = {}
+ docs_translations[component][lang_code] = obj["translated_percent"]
+
+
+async def app_percent_output(percent_min, percent_max=101):
+ out = []
+ for lang_code in languages:
+ if (
+ app_translations[lang_code] >= percent_min
+ and app_translations[lang_code] < percent_max
+ ):
+ out.append(
+ f"{languages[lang_code]} ({lang_code}), {app_translations[lang_code]}%"
+ )
+
+ out.sort()
+
+ print(f"App translations >= {percent_min}%")
+ print("=======================")
+ print("\n".join(out))
+
+ print("")
+
+
+async def docs_percent_output(percent_min, exclude=[]):
+ out = []
+ for lang_code in languages:
+ include_language = True
+ percentages = []
+
+ for component in docs_translations:
+ if lang_code not in docs_translations[component]:
+ include_language = False
+ break
+
+ percentages.append(docs_translations[component][lang_code])
+
+ if docs_translations[component][lang_code] < percent_min:
+ include_language = False
+ break
+
+ if include_language:
+ percentages = [f"{p}%" for p in percentages]
+ percentages = ", ".join(percentages)
+ out.append(f"{languages[lang_code]} ({lang_code}), {percentages}")
+
+ excluded = []
+ for s in out:
+ if s not in exclude:
+ excluded.append(s)
+
+ excluded.sort()
+
+ print(f"Docs translations >= {percent_min}%")
+ print("========================")
+ print("\n".join(excluded))
+
+ print("")
+ return excluded
+
+
+async def main():
+ global api_token, languages, app_translations, docs_translations
+
+ if len(sys.argv) != 2:
+ print(f"Usage: {sys.argv[0]} API_KEY")
+ print(
+ "You can find your personal API key at: https://hosted.weblate.org/accounts/profile/#api"
+ )
+ return
+
+ api_token = sys.argv[1]
+
+ # Get the list of languages in the OnionShare project
+ res = await api("/api/projects/onionshare/languages/")
+ for obj in res:
+ 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])
+
+ # Get the documentation translations for each component for each language
+ for component in [
+ "doc-advanced",
+ "doc-develop",
+ "doc-features",
+ "doc-help",
+ "doc-index",
+ "doc-install",
+ "doc-security",
+ "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)
+
+ print("")
+
+ await app_percent_output(100)
+ await app_percent_output(90, 100)
+ await app_percent_output(80, 90)
+
+ out100 = await docs_percent_output(100)
+ out90 = await docs_percent_output(90, out100)
+ await docs_percent_output(80, out100 + out90)
+
+
+if __name__ == "__main__":
+ asyncio.run(main())
diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree
index 541f678b..57624bf4 100644
--- a/docs/gettext/.doctrees/advanced.doctree
+++ b/docs/gettext/.doctrees/advanced.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree
index cdfb3740..ccf586b1 100644
--- a/docs/gettext/.doctrees/develop.doctree
+++ b/docs/gettext/.doctrees/develop.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle
index 18925998..07e8717c 100644
--- a/docs/gettext/.doctrees/environment.pickle
+++ b/docs/gettext/.doctrees/environment.pickle
Binary files differ
diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree
index 00f3b7e3..dd8fab1b 100644
--- a/docs/gettext/.doctrees/features.doctree
+++ b/docs/gettext/.doctrees/features.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree
index 2d3824db..5acce6ad 100644
--- a/docs/gettext/.doctrees/help.doctree
+++ b/docs/gettext/.doctrees/help.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree
index 0d526d53..c70531b7 100644
--- a/docs/gettext/.doctrees/index.doctree
+++ b/docs/gettext/.doctrees/index.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree
index c0fd77ae..70a22595 100644
--- a/docs/gettext/.doctrees/install.doctree
+++ b/docs/gettext/.doctrees/install.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree
index cd1dea98..c5da8c14 100644
--- a/docs/gettext/.doctrees/security.doctree
+++ b/docs/gettext/.doctrees/security.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree
index 31cd3b36..21461bb6 100644
--- a/docs/gettext/.doctrees/tor.doctree
+++ b/docs/gettext/.doctrees/tor.doctree
Binary files differ
diff --git a/docs/gettext/advanced.pot b/docs/gettext/advanced.pot
index 53f27186..36c228ac 100644
--- a/docs/gettext/advanced.pot
+++ b/docs/gettext/advanced.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -56,78 +56,90 @@ msgstr ""
msgid "To turn off the password for any tab, just check the \"Don't use a password\" box before starting the server. Then the server will be public and won't have a password."
msgstr ""
-#: ../../source/advanced.rst:38
+#: ../../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:40
+#: ../../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:43
+#: ../../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:46
+#: ../../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:51
+#: ../../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:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr ""
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid "In addition to its graphical interface, OnionShare has a command-line interface."
msgstr ""
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid "You can install just the command-line version of OnionShare using ``pip3``::"
msgstr ""
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid "Note that you will also need the ``tor`` package installed. In macOS, install it with: ``brew install tor``"
msgstr ""
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr ""
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr ""
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid "You can browse the command-line documentation by running ``onionshare --help``::"
msgstr ""
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr ""
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid "OnionShare uses v3 Tor onion services by default. These are modern onion addresses that have 56 characters, for example::"
msgstr ""
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid "OnionShare still has support for v2 onion addresses, the old type of onion addresses that have 16 characters, for example::"
msgstr ""
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid "OnionShare calls v2 onion addresses \"legacy addresses\", and they are not recommended, as v3 onion addresses are more secure."
msgstr ""
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid "To use legacy addresses, before starting a server click \"Show advanced settings\" from its tab and check the \"Use a legacy address (v2 onion service, not recommended)\" box. In legacy mode you can optionally turn on Tor client authentication. Once you start a server in legacy mode you cannot remove legacy mode in that tab. Instead you must start a separate service in a separate tab."
msgstr ""
-#: ../../source/advanced.rst:150
+#: ../../source/advanced.rst:165
msgid "Tor Project plans to `completely deprecate v2 onion services <https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, 2021, and legacy onion services will be removed from OnionShare before then."
msgstr ""
diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot
index 0f2bdc5e..858b9f87 100644
--- a/docs/gettext/develop.pot
+++ b/docs/gettext/develop.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -37,11 +37,11 @@ msgid "Contributing Code"
msgstr ""
#: ../../source/develop.rst:17
-msgid "OnionShare source code is to be found in this Git repository: https://github.com/micahflee/onionshare"
+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 <https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if there are any you'd like to tackle."
+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 <https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if there are any you'd like to tackle."
msgstr ""
#: ../../source/develop.rst:22
@@ -53,7 +53,7 @@ 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/micahflee/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."
+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
@@ -72,54 +72,54 @@ msgstr ""
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
+#: ../../source/develop.rst:121
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
+#: ../../source/develop.rst:125
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
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr ""
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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:164
+#: ../../source/develop.rst:167
msgid "In this case, you load the URL ``http://onionshare:train-system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of using the Tor Browser."
msgstr ""
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr ""
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate <https://hosted.weblate.org/projects/onionshare/>`_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed."
msgstr ""
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr ""
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation."
msgstr ""
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr ""
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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/gettext/features.pot b/docs/gettext/features.pot
index 874d62b6..61d5a8b2 100644
--- a/docs/gettext/features.pot
+++ b/docs/gettext/features.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -53,7 +53,7 @@ msgid "You can use OnionShare to send files and folders to people securely and a
msgstr ""
#: ../../source/features.rst:27
-#: ../../source/features.rst:93
+#: ../../source/features.rst:104
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 ""
@@ -78,149 +78,165 @@ msgid "That person then must load the address in Tor Browser. After logging in w
msgstr ""
#: ../../source/features.rst:47
-msgid "Receive Files"
+msgid "Receive Files and Messages"
msgstr ""
#: ../../source/features.rst:49
-msgid "You can use OnionShare to let people anonymously upload files directly to your computer, essentially turning it into an anonymous dropbox. Open a \"Receive tab\", choose where you want to save the files and other settings, and then click \"Start Receive Mode\"."
+msgid "You can use OnionShare to let people anonymously submit files and messages directly to your computer, essentially turning it into an anonymous dropbox. Open a receive tab and choose the settings that you want."
msgstr ""
#: ../../source/features.rst:54
-msgid "This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to upload files to your computer."
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid "You can check \"Disable submitting text\" if want to only allow file uploads, and you can check \"Disable uploading files\" if you want to only allow submitting text messages, like for an anonymous contact form."
msgstr ""
#: ../../source/features.rst:58
+msgid "You can check \"Use notification webhook\" and then choose a webhook URL if you want to be notified when someone submits files or messages to your OnionShare service. If you use this feature, OnionShare will make an HTTP POST request to this URL whenever someone submits files or messages. For example, if you want to get an encrypted text messaging on the messaging app `Keybase <https://keybase.io/>`_, you can start a conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type ``!webhook create onionshare-alerts``, and it will respond with a URL. Use that as the notification webhook URL. If someone uploads a file to your receive mode service, @webhookbot will send you a message on Keybase letting you know as soon as it happens."
+msgstr ""
+
+#: ../../source/features.rst:63
+msgid "When you are ready, click \"Start Receive Mode\". This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to submit files and messages which get uploaded to your computer."
+msgstr ""
+
+#: ../../source/features.rst:67
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 ""
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
msgstr ""
-#: ../../source/features.rst:64
-msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded."
+#: ../../source/features.rst:73
+msgid "When someone submits files or messages to your receive service, by default they get saved to a folder called ``OnionShare`` in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded."
msgstr ""
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid "Setting up an OnionShare receiving service is useful for journalists and others needing to securely accept documents from anonymous sources. When used in this way, OnionShare is sort of like a lightweight, simpler, not quite as secure version of `SecureDrop <https://securedrop.org/>`_, the whistleblower submission system."
msgstr ""
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr ""
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid "Just like with malicious e-mail 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 ""
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that are safe to open using `Dangerzone <https://dangerzone.rocks/>`_. You can also protect yourself when opening untrusted documents by opening them in `Tails <https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ disposableVM."
msgstr ""
-#: ../../source/features.rst:76
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr ""
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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 ""
-#: ../../source/features.rst:80
-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_passwords`)."
+#: ../../source/features.rst:91
+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_passwords`). It's also a good idea to give it a custom title (see :ref:`custom_titles`)."
msgstr ""
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr ""
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid "To host a static HTML website with OnionShare, open a website tab, drag the files and folders that make up the static content there, and click \"Start sharing\" when you are ready."
msgstr ""
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid "If you add an ``index.html`` file, it will render when someone loads your website. You should also include any other HTML files, CSS files, JavaScript files, and images that make up the website. (Note that OnionShare only supports hosting *static* websites. It can't host websites that execute code or use databases. So you can't for example use WordPress.)"
msgstr ""
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 ""
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr ""
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid "By default OnionShare helps secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However, this prevents third-party content from loading inside the web page."
msgstr ""
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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 ""
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr ""
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid "If you want to host a long-term website using OnionShare (meaning not something to quickly show someone something), it's recommended you do it on a separate, dedicated computer 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:110
+#: ../../source/features.rst:121
msgid "If your website is intended for the public, you should run it as a public service (see :ref:`turn_off_passwords`)."
msgstr ""
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr ""
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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:119
+#: ../../source/features.rst:130
msgid "After you start the server, copy the OnionShare address and send it 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."
msgstr ""
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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:127
+#: ../../source/features.rst:138
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:133
+#: ../../source/features.rst:144
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:136
+#: ../../source/features.rst:147
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:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr ""
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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:143
+#: ../../source/features.rst:154
msgid "If you for example send a message to a Signal group, a copy of your message ends up on each device (the devices, 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:146
+#: ../../source/features.rst:157
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 e-mail address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
msgstr ""
-#: ../../source/features.rst:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr ""
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
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:154
+#: ../../source/features.rst:165
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 0bcb7c10..a113b697 100644
--- a/docs/gettext/help.pot
+++ b/docs/gettext/help.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -33,7 +33,7 @@ msgid "Check the GitHub Issues"
msgstr ""
#: ../../source/help.rst:12
-msgid "If it isn't on the website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution."
+msgid "If it isn't on the website, please check the `GitHub issues <https://github.com/onionshare/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution."
msgstr ""
#: ../../source/help.rst:15
@@ -41,7 +41,7 @@ msgid "Submit an Issue Yourself"
msgstr ""
#: ../../source/help.rst:17
-msgid "If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
+msgid "If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/onionshare/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
msgstr ""
#: ../../source/help.rst:20
diff --git a/docs/gettext/index.pot b/docs/gettext/index.pot
index f15290ec..2564494e 100644
--- a/docs/gettext/index.pot
+++ b/docs/gettext/index.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/docs/gettext/install.pot b/docs/gettext/install.pot
index d7496af0..b4798622 100644
--- a/docs/gettext/install.pot
+++ b/docs/gettext/install.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/docs/gettext/security.pot b/docs/gettext/security.pot
index 3a286e6d..b48c38d0 100644
--- a/docs/gettext/security.pot
+++ b/docs/gettext/security.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/docs/gettext/sphinx.pot b/docs/gettext/sphinx.pot
index cf0dfece..74db04e2 100644
--- a/docs/gettext/sphinx.pot
+++ b/docs/gettext/sphinx.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/docs/gettext/tor.pot b/docs/gettext/tor.pot
index b357ad06..917cf372 100644
--- a/docs/gettext/tor.pot
+++ b/docs/gettext/tor.pot
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: OnionShare 2.3.1\n"
+"Project-Id-Version: OnionShare 2.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"POT-Creation-Date: 2021-08-20 13:23-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
diff --git a/docs/poetry.lock b/docs/poetry.lock
index 1be892f9..3bc4f44a 100644
--- a/docs/poetry.lock
+++ b/docs/poetry.lock
@@ -7,6 +7,14 @@ optional = false
python-versions = "*"
[[package]]
+name = "async-generator"
+version = "1.10"
+description = "Async generators and context managers for Python 3.5+"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
name = "babel"
version = "2.9.0"
description = "Internationalization utilities"
@@ -50,6 +58,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
+name = "contextvars"
+version = "2.4"
+description = "PEP 567 Backport"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+immutables = ">=0.9"
+
+[[package]]
name = "docutils"
version = "0.16"
description = "Docutils -- Python Documentation Utilities"
@@ -58,6 +77,48 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
+name = "h11"
+version = "0.12.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "httpcore"
+version = "0.13.3"
+description = "A minimal low-level HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+h11 = ">=0.11,<0.13"
+sniffio = ">=1.0.0,<2.0.0"
+
+[package.extras]
+http2 = ["h2 (>=3,<5)"]
+
+[[package]]
+name = "httpx"
+version = "0.18.1"
+description = "The next generation HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+async-generator = {version = "*", markers = "python_version < \"3.7\""}
+certifi = "*"
+httpcore = ">=0.13.0,<0.14.0"
+rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotlicffi (>=1.0.0,<2.0.0)"]
+http2 = ["h2 (>=3.0.0,<4.0.0)"]
+
+[[package]]
name = "idna"
version = "2.10"
description = "Internationalized Domain Names in Applications (IDNA)"
@@ -74,6 +135,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
+name = "immutables"
+version = "0.15"
+description = "Immutable Collections"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)"]
+
+[[package]]
name = "jinja2"
version = "2.11.2"
description = "A very fast and expressive template engine."
@@ -150,6 +222,20 @@ security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
[[package]]
+name = "rfc3986"
+version = "1.5.0"
+description = "Validating URI References per RFC 3986"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+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"
@@ -158,6 +244,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
+name = "sniffio"
+version = "1.2.0"
+description = "Sniff out which async library your code is running under"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+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."
@@ -314,13 +411,17 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "c10cf732636ae0ea2c57b2a5698505a78b3d396c1656a9cd23f3f86ac825c762"
+content-hash = "d146005969ffef66c679fac3bac5aeb4e03b1ec2852e1afefdfe4087a5be789c"
[metadata.files]
alabaster = [
{file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"},
{file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"},
]
+async-generator = [
+ {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"},
+ {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"},
@@ -341,10 +442,25 @@ colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+contextvars = [
+ {file = "contextvars-2.4.tar.gz", hash = "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"},
+]
docutils = [
{file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"},
{file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
]
+h11 = [
+ {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
+ {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
+]
+httpcore = [
+ {file = "httpcore-0.13.3-py3-none-any.whl", hash = "sha256:ff614f0ef875b9e5fe0bdd459b31ea0eea282ff12dc82add83d68b3811ee94ad"},
+ {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"},
+]
idna = [
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
{file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
@@ -353,6 +469,23 @@ imagesize = [
{file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
{file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
]
+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"},
+]
jinja2 = [
{file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
{file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"},
@@ -376,20 +509,39 @@ markupsafe = [
{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"},
]
packaging = [
@@ -412,10 +564,18 @@ requests = [
{file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"},
{file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"},
]
+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"},
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
index 1b1cb289..fa1c3c55 100644
--- a/docs/pyproject.toml
+++ b/docs/pyproject.toml
@@ -9,6 +9,7 @@ python = "^3.6"
sphinx = "^3.2.1"
sphinx-rtd-theme = "^0.5.0"
sphinx-intl = "^2.0.1"
+httpx = "^0.18.1"
[tool.poetry.dev-dependencies]
diff --git a/docs/source/_static/screenshots/receive-sharing.png b/docs/source/_static/screenshots/receive-sharing.png
index c42ec2e0..ebf9c4b6 100644
--- a/docs/source/_static/screenshots/receive-sharing.png
+++ b/docs/source/_static/screenshots/receive-sharing.png
Binary files differ
diff --git a/docs/source/_static/screenshots/receive-torbrowser.png b/docs/source/_static/screenshots/receive-torbrowser.png
index e583e4d1..3082ab7e 100644
--- a/docs/source/_static/screenshots/receive-torbrowser.png
+++ b/docs/source/_static/screenshots/receive-torbrowser.png
Binary files differ
diff --git a/docs/source/_static/screenshots/receive.png b/docs/source/_static/screenshots/receive.png
index f914bcf9..a6ae02cb 100644
--- a/docs/source/_static/screenshots/receive.png
+++ b/docs/source/_static/screenshots/receive.png
Binary files differ
diff --git a/docs/source/advanced.rst b/docs/source/advanced.rst
index 02e05f62..5f3e6cd7 100644
--- a/docs/source/advanced.rst
+++ b/docs/source/advanced.rst
@@ -34,6 +34,15 @@ If you don't do this, someone can force your server to stop just by making 20 wr
To turn off the password for any tab, just check the "Don't use a password" box before starting the server. Then the server will be public and won't have a password.
+.. _custom_titles:
+
+Custom Titles
+-------------
+
+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".
+
+If you want to choose a custom title, set the "Custom title" setting before starting a server.
+
Scheduled Times
---------------
@@ -75,37 +84,37 @@ Usage
You can browse the command-line documentation by running ``onionshare --help``::
$ onionshare-cli --help
- OnionShare 2.3 | https://onionshare.org/
-
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
-
- usage: onionshare-cli [-h] [--receive] [--website] [--chat] [--local-only] [--connect-timeout SECONDS] [--config FILENAME] [--persistent FILENAME]
- [--public] [--auto-start-timer SECONDS] [--auto-stop-timer SECONDS] [--legacy] [--client-auth] [--autostop-sharing]
- [--data-dir data_dir] [--disable_csp] [-v]
- [filename [filename ...]]
-
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.3 │
+ │ │
+ │ 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] [--legacy] [--client-auth] [--no-autostop-sharing] [--data-dir data_dir]
+ [--webhook-url webhook_url] [--disable-text] [--disable-files] [--disable_csp] [-v]
+ [filename ...]
+
positional arguments:
filename List of files or folders to share
-
+
optional arguments:
-h, --help show this help message and exit
--receive Receive files
@@ -116,6 +125,7 @@ You can browse the command-line documentation by running ``onionshare --help``::
Give up connecting to Tor after a given amount of seconds (default: 120)
--config FILENAME Filename of custom global settings
--persistent FILENAME Filename of persistent session
+ --title TITLE Set a title
--public Don't use a password
--auto-start-timer SECONDS
Start onion service at scheduled time (N seconds from now)
@@ -123,9 +133,14 @@ You can browse the command-line documentation by running ``onionshare --help``::
Stop onion service at schedule time (N seconds from now)
--legacy Use legacy address (v2 onion service, not recommended)
--client-auth Use client authorization (requires --legacy)
- --autostop-sharing Share files: Stop sharing after files have been sent
+ --no-autostop-sharing Share files: Continue sharing after files have been sent (default is to stop sharing)
--data-dir data_dir Receive files: Save files received to this directory
- --disable_csp Publish website: Disable Content Security Policy header (allows your website to use third-party resources)
+ --webhook-url webhook_url
+ 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)
-v, --verbose Log OnionShare errors to stdout, and web errors to disk
Legacy Addresses
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 18a58d80..df11ed68 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -1,25 +1,22 @@
-import sphinx_rtd_theme
-import sphinx_intl
-
-
project = "OnionShare"
author = copyright = "Micah Lee, et al."
-version = release = "2.3.1"
+version = release = "2.3.3"
extensions = ["sphinx_rtd_theme"]
templates_path = ["_templates"]
exclude_patterns = []
languages = [
- ("Deutsch", "de"), # German
("English", "en"), # English
- ("Español", "es"), # Spanish
+ ("Deutsch", "de"), # German
("Ελληνικά", "el"), # Greek
+ ("Русский", "ru"), # Russian
+ ("Español", "es"), # Spanish
("Türkçe", "tr"), # Turkish
("Українська", "uk"), # Ukranian
]
-versions = ["2.3", "2.3.1"]
+versions = ["2.3", "2.3.1", "2.3.2", "2.3.3"]
html_theme = "sphinx_rtd_theme"
html_logo = "_static/logo.png"
diff --git a/docs/source/develop.rst b/docs/source/develop.rst
index ac8703d2..fc6f0c92 100644
--- a/docs/source/develop.rst
+++ b/docs/source/develop.rst
@@ -14,10 +14,10 @@ OnionShare also has a `mailing list <https://lists.riseup.net/www/subscribe/onio
Contributing Code
-----------------
-OnionShare source code is to be found in this Git repository: https://github.com/micahflee/onionshare
+OnionShare source code is to be found in this Git repository: https://github.com/onionshare/onionshare
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 <https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if there are any you'd like to tackle.
+You should also review all of the `open issues <https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if there are any you'd like to tackle.
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.
@@ -27,7 +27,7 @@ Starting Development
--------------------
OnionShare is developed in Python.
-To get started, clone the Git repository at https://github.com/micahflee/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.
+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.
Those files contain the necessary technical instructions and commands install dependencies for your platform, and to run OnionShare from the source tree.
@@ -41,79 +41,83 @@ When developing, it's convenient to run OnionShare from a terminal and add the `
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
- OnionShare 2.3 | https://onionshare.org/
-
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
-
- [Nov 10 2020 20:50:35] Settings.__init__
- [Nov 10 2020 20:50:35] Settings.load
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
- [Nov 10 2020 20:50:35] ModeSettings.load: creating /home/user/.config/onionshare/persistent/abstain-reprogram-elevate.json
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.public = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostart_timer = 0
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostop_timer = 0
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.legacy = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.client_auth = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: share.autostop_sharing = True
- [Nov 10 2020 20:50:35] Web.__init__: is_gui=False, mode=share
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
- [Nov 10 2020 20:50:35] Web.generate_static_url_path: new static_url_path is /static_qa7rlyxwnfodczrriv3tj5yeoq
- [Nov 10 2020 20:50:35] ShareModeWeb.init
- [Nov 10 2020 20:50:35] Onion.__init__
- [Nov 10 2020 20:50:35] Onion.connect
- [Nov 10 2020 20:50:35] Settings.__init__
- [Nov 10 2020 20:50:35] Settings.load
- [Nov 10 2020 20:50:35] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpz53ztq3m
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.3 │
+ │ │
+ │ https://onionshare.org/ │
+ ╰───────────────────────────────────────────╯
+
+ [May 10 2021 18:24:02] Settings.__init__
+ [May 10 2021 18:24:02] Settings.load
+ [May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
+ [May 10 2021 18:24:02] ModeSettings.load: creating /home/user/.config/onionshare/persistent/tattered-handgun-stress.json
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.title = None
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.public = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostart_timer = 0
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostop_timer = 0
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.legacy = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.client_auth = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: share.autostop_sharing = True
+ [May 10 2021 18:24:02] Web.__init__: is_gui=False, mode=share
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=static
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=templates
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
+ [May 10 2021 18:24:02] Web.generate_static_url_path: new static_url_path is /static_4yxrx2mzi5uzkblklpzd46mwke
+ [May 10 2021 18:24:02] ShareModeWeb.init
+ [May 10 2021 18:24:02] Onion.__init__
+ [May 10 2021 18:24:02] Onion.connect
+ [May 10 2021 18:24:02] Settings.__init__
+ [May 10 2021 18:24:02] Settings.load
+ [May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:02] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpw6u0nz8l
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
Connecting to the Tor network: 100% - Done
- [Nov 10 2020 20:50:42] Onion.connect: Connected to tor 0.4.4.5
- [Nov 10 2020 20:50:42] Settings.load
- [Nov 10 2020 20:50:42] Web.generate_password: saved_password=None
- [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt
- [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
- [Nov 10 2020 20:50:42] Web.generate_password: built random password: "pedometer-grower"
- [Nov 10 2020 20:50:42] OnionShare.__init__
- [Nov 10 2020 20:50:42] OnionShare.start_onion_service
- [Nov 10 2020 20:50:42] Onion.start_onion_service: port=17610
- [Nov 10 2020 20:50:42] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
- [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: general.service_id = x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad
- [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: onion.private_key = uIXJzY+88tGSAXAjQxdwkzb2L7jHv467RIX1WDieVkFEZjEA7st2p/6uVCM4KM3L9PdShTPScuUv2IEbVQammA==
+ [May 10 2021 18:24:10] Onion.connect: Connected to tor 0.4.5.7
+ [May 10 2021 18:24:10] Settings.load
+ [May 10 2021 18:24:10] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:10] Web.generate_password: saved_password=None
+ [May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt
+ [May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
+ [May 10 2021 18:24:10] Web.generate_password: built random password: "tipping-colonize"
+ [May 10 2021 18:24:10] OnionShare.__init__
+ [May 10 2021 18:24:10] OnionShare.start_onion_service
+ [May 10 2021 18:24:10] Onion.start_onion_service: port=17645
+ [May 10 2021 18:24:10] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
+ [May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: general.service_id = omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd
+ [May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: onion.private_key = 6PhomJCjlWicmOyAAe0wnQoEM3vcyHBivrRGDy0hzm900fW5ITDJ6iv2+tluLoueYj81MhmnYeTOHDm8UGOfhg==
Compressing files.
- [Nov 10 2020 20:50:46] ShareModeWeb.init
- [Nov 10 2020 20:50:46] ShareModeWeb.set_file_info_custom
- [Nov 10 2020 20:50:46] ShareModeWeb.build_zipfile_list
- [Nov 10 2020 20:50:46] Web.start: port=17610
- * Running on http://127.0.0.1:17610/ (Press CTRL+C to quit)
-
+ [May 10 2021 18:24:14] ShareModeWeb.init
+ [May 10 2021 18:24:14] ShareModeWeb.set_file_info_custom
+ [May 10 2021 18:24:14] ShareModeWeb.build_zipfile_list
+ [May 10 2021 18:24:14] Web.start: port=17645
+ * Running on http://127.0.0.1:17645/ (Press CTRL+C to quit)
+
Give this address to the recipient:
- http://onionshare:pedometer-grower@x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad.onion
-
+ http://onionshare:tipping-colonize@omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd.onion
+
Press Ctrl+C to stop the server
+
You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::
common.log('OnionShareGui', 'start_server', 'I ran here')
@@ -127,38 +131,37 @@ Tor is slow, and it's often convenient to skip starting onion services altogethe
You can do this with the ``--local-only`` flag. For example::
$ poetry run onionshare-cli --local-only --receive
- OnionShare 2.3 | https://onionshare.org/
-
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
-
- * Running on http://127.0.0.1:17635/ (Press CTRL+C to quit)
-
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.3 │
+ │ │
+ │ https://onionshare.org/ │
+ ╰───────────────────────────────────────────╯
+
+ * Running on http://127.0.0.1:17617/ (Press CTRL+C to quit)
+
Files sent to you appear in this folder: /home/user/OnionShare
-
+
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.
-
+
Give this address to the sender:
- http://onionshare:train-system@127.0.0.1:17635
-
+ http://onionshare:ended-blah@127.0.0.1:17617
+
Press Ctrl+C to stop the server
In this case, you load the URL ``http://onionshare:train-system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of using the Tor Browser.
diff --git a/docs/source/features.rst b/docs/source/features.rst
index 181a074d..7c3368f9 100644
--- a/docs/source/features.rst
+++ b/docs/source/features.rst
@@ -43,25 +43,34 @@ That person then must load the address in Tor Browser. After logging in with the
.. image:: _static/screenshots/share-torbrowser.png
-Receive Files
--------------
+Receive Files and Messages
+--------------------------
-You can use OnionShare to let people anonymously upload files directly to your computer, essentially turning it into an anonymous dropbox.
-Open a "Receive tab", choose where you want to save the files and other settings, and then click "Start Receive Mode".
+You can use OnionShare to let people anonymously submit files and messages directly to your computer, essentially turning it into an anonymous dropbox.
+Open a receive tab and choose the settings that you want.
.. image:: _static/screenshots/receive.png
-This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to upload files to your computer.
+You can browse for a folder to save messages and files that get submitted.
+
+You can check "Disable submitting text" if want to only allow file uploads, and you can check "Disable uploading files" if you want to only allow submitting text messages, like for an anonymous contact form.
+
+You can check "Use notification webhook" and then choose a webhook URL if you want to be notified when someone submits files or messages to your OnionShare service.
+If you use this feature, OnionShare will make an HTTP POST request to this URL whenever someone submits files or messages.
+For example, if you want to get an encrypted text messaging on the messaging app `Keybase <https://keybase.io/>`_, you can start a conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type ``!webhook create onionshare-alerts``, and it will respond with a URL. Use that as the notification webhook URL.
+If someone uploads a file to your receive mode service, @webhookbot will send you a message on Keybase letting you know as soon as it happens.
+
+When you are ready, click "Start Receive Mode". This starts the OnionShare service. Anyone loading this address in their Tor Browser will be able to submit files and messages which get uploaded to your computer.
.. image:: _static/screenshots/receive-sharing.png
You can also click the down "↓" icon in the top-right corner to show the history and progress of people sending files to you.
-Here is what it looks like for someone sending you files.
+Here is what it looks like for someone sending you files and messages.
.. image:: _static/screenshots/receive-torbrowser.png
-When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded.
+When someone submits files or messages to your receive service, by default they get saved to a folder called ``OnionShare`` in the home folder on your computer, automatically organized into separate subfolders based on the time that the files get uploaded.
Setting up an OnionShare receiving service is useful for journalists and others needing to securely accept documents from anonymous sources. When used in this way, OnionShare is sort of like a lightweight, simpler, not quite as secure version of `SecureDrop <https://securedrop.org/>`_, the whistleblower submission system.
@@ -72,12 +81,14 @@ Just like with malicious e-mail attachments, it's possible someone could try to
If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that are safe to open using `Dangerzone <https://dangerzone.rocks/>`_. You can also protect yourself when opening untrusted documents by opening them in `Tails <https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ disposableVM.
+However, it is always safe to open text messages sent through OnionShare.
+
Tips for running a receive service
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
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.
-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_passwords`).
+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_passwords`). It's also a good idea to give it a custom title (see :ref:`custom_titles`).
Host a Website
--------------
diff --git a/docs/source/help.rst b/docs/source/help.rst
index 8c04350a..ad7b76cd 100644
--- a/docs/source/help.rst
+++ b/docs/source/help.rst
@@ -9,12 +9,12 @@ You will find instructions on how to use OnionShare. Look through all of the sec
Check the GitHub Issues
-----------------------
-If it isn't on the website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution.
+If it isn't on the website, please check the `GitHub issues <https://github.com/onionshare/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution.
Submit an Issue Yourself
------------------------
-If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_.
+If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/onionshare/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_.
Join our Keybase Team
---------------------
diff --git a/docs/source/locale/bn/LC_MESSAGES/index.po b/docs/source/locale/bn/LC_MESSAGES/index.po
new file mode 100644
index 00000000..aede2300
--- /dev/null
+++ b/docs/source/locale/bn/LC_MESSAGES/index.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.1\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"PO-Revision-Date: 2021-04-24 23:31+0000\n"
+"Last-Translator: Oymate <dhruboadittya96@gmail.com>\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"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.7-dev\n"
+
+#: ../../source/index.rst:2
+msgid "OnionShare's documentation"
+msgstr "অনিওনশেয়ারের নির্দেশিকা"
+
+#: ../../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 ""
+"অনিওনশেয়ার একটি মুক্ত উৎসবিশিষ্ট যন্ত্র, যা তোমাকে নিরাপদে ও গোপনীয়ভাবে ফাইল "
+"ভাগ করা, ওয়েবসাইট উপস্থাপন, বন্ধুদের সাথে টর নেটওয়ার্কের সাথে কথা বলতে সাহায্"
+"য করে।"
diff --git a/docs/source/locale/bn/LC_MESSAGES/security.po b/docs/source/locale/bn/LC_MESSAGES/security.po
new file mode 100644
index 00000000..b7413c02
--- /dev/null
+++ b/docs/source/locale/bn/LC_MESSAGES/security.po
@@ -0,0 +1,63 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.1\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2021-02-22 13:40-0800\n"
+"PO-Revision-Date: 2021-06-27 06:32+0000\n"
+"Last-Translator: Oymate <dhruboadittya96@gmail.com>\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"
+"Plural-Forms: nplurals=2; plural=n > 1;\n"
+"X-Generator: Weblate 4.7.1-dev\n"
+
+#: ../../source/security.rst:2
+msgid "Security Design"
+msgstr "নিরাপত্তা নকশা"
+
+#: ../../source/security.rst:4
+msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works."
+msgstr ""
+
+#: ../../source/security.rst:6
+msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
+msgstr ""
+
+#: ../../source/security.rst:9
+msgid "What OnionShare protects against"
+msgstr "অনিয়নশেয়ার কিসের বিরুদ্ধে নিরাপত্তা দেয়"
+
+#: ../../source/security.rst:11
+msgid "**Third parties don't have access to anything that happens in OnionShare.** Using OnionShare means hosting services directly on your computer. When sharing files with OnionShare, they are not uploaded to any server. If you make an OnionShare chat room, your computer acts as a server for that too. This avoids the traditional model of having to trust the computers of others."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** The connection between the Tor onion service and Tor Browser is end-to-end encrypted. This means network attackers can't eavesdrop on anything except encrypted Tor traffic. Even if an eavesdropper is a malicious rendezvous node used to connect the Tor Browser with OnionShare's onion service, the traffic is encrypted using the onion service's private key."
+msgstr ""
+
+#: ../../source/security.rst:15
+msgid "**Anonymity of OnionShare users are protected by Tor.** OnionShare and Tor Browser protect the anonymity of the users. As long as the OnionShare user anonymously communicates the OnionShare address with the Tor Browser users, the Tor Browser users and eavesdroppers can't learn the identity of the OnionShare user."
+msgstr ""
+
+#: ../../source/security.rst:17
+msgid "**If an attacker learns about the onion service, it still can't access anything.** Prior attacks against the Tor network to enumerate onion services allowed the attacker to discover private .onion addresses. If an attack discovers a private OnionShare address, a password will be prevent them from accessing it (unless the OnionShare user chooses to turn it off and make it public). The password is generated by choosing two random words from a list of 6800 words, making 6800², or about 46 million possible passwords. Only 20 wrong guesses can be made before OnionShare stops the server, preventing brute force attacks against the password."
+msgstr ""
+
+#: ../../source/security.rst:20
+msgid "What OnionShare doesn't protect against"
+msgstr "অনিওনশেয়ার কিসের বিরুদ্ধে রক্ষা করে না"
+
+#: ../../source/security.rst:22
+msgid "**Communicating the OnionShare address might not be secure.** Communicating the OnionShare address to people is the responsibility of the OnionShare user. If sent insecurely (such as through an email message monitored by an attacker), an eavesdropper can tell that OnionShare is being used. If the eavesdropper loads the address in Tor Browser while the service is still up, they can access it. To avoid this, the address must be communicateed securely, via encrypted text message (probably with disappearing messages enabled), encrypted email, or in person. This isn't necessary when using OnionShare for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** Extra precautions must be taken to ensure the OnionShare address is communicated anonymously. A new email or chat account, only accessed over Tor, can be used to share the address. This isn't necessary unless anonymity is a goal."
+msgstr ""
diff --git a/docs/source/locale/bn/LC_MESSAGES/tor.po b/docs/source/locale/bn/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..90390bb3
--- /dev/null
+++ b/docs/source/locale/bn/LC_MESSAGES/tor.po
@@ -0,0 +1,142 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.1\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-02-22 13:40-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/tor.rst:2
+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."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use the ``tor`` bundled with 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 ""
+
+#: ../../source/tor.rst:14
+msgid "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."
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid "Attempt auto-configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:20
+msgid "If you have `downloaded the Tor Browser <https://www.torproject.org>`_ 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
+msgid "Using a system ``tor`` in Windows"
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/tor.rst:28
+msgid "Download the Tor Windows Expert Bundle `from <https://www.torproject.org/download/tor/>`_. 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
+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
+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
+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
+msgid "In your administrator command prompt, install ``tor`` as a service using the appropriate ``torrc`` file you just created (as described in `<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid "You are now running a system ``tor`` process in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:52
+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
+msgid "Using a system ``tor`` in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:63
+msgid "First, install `Homebrew <https://brew.sh/>`_ if you don't already have it, and then install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:67
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:74
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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
+msgid "If all goes well, you should see \"Connected to the Tor controller\"."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using a system ``tor`` in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 <https://support.torproject.org/apt/tor-deb-repo/>`_."
+msgstr ""
+
+#: ../../source/tor.rst:91
+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
+msgid "Add your user to the ``debian-tor`` group by running this command (replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:97
+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 <https://2019.www.torproject.org/docs/bridges.html.en>`_. 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 <https://bridges.torproject.org/>`_. If you need to use a bridge, try the built-in obfs4 ones first."
+msgstr ""
diff --git a/docs/source/locale/de/LC_MESSAGES/advanced.po b/docs/source/locale/de/LC_MESSAGES/advanced.po
index dc48132f..52266b78 100644
--- a/docs/source/locale/de/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/de/LC_MESSAGES/advanced.po
@@ -7,16 +7,16 @@ msgid ""
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-17 10:28+0000\n"
-"Last-Translator: mv87 <mv87@dismail.de>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Lukas <lukas@fuchtmann.net>\n"
"Language-Team: de <LL@li.org>\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -35,11 +35,12 @@ msgid ""
"useful if you want to host a website available from the same OnionShare "
"address even if you reboot your computer."
msgstr ""
-"In OnionShare ist standardmäßig alels nur temporär. Wenn du einen OnionShare-"
-"Reiter schließt, existiert seine Adresse nicht mehr kann nicht nochmals "
-"verwendet werden. Manchmal soll ein OnionShare-Service aber dauerhaft sein. "
-"Das ist hilfreich, wenn du eine Webseite unter derselben OnionShare-Adresse "
-"hosten möchtest, auch wenn du deinen Rechner neustartest."
+"In OnionShare ist standardmäßig alels nur temporär. Wenn du einen "
+"OnionShare-Reiter schließt, existiert seine Adresse nicht mehr kann nicht"
+" nochmals verwendet werden. Manchmal soll ein OnionShare-Service aber "
+"dauerhaft sein. Das ist hilfreich, wenn du eine Webseite unter derselben "
+"OnionShare-Adresse hosten möchtest, auch wenn du deinen Rechner "
+"neustartest."
#: ../../source/advanced.rst:13
msgid ""
@@ -47,8 +48,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 ""
-"Um einen beliebigen Reiter dauerhaft zu machen, setze den Haken bei „"
-"Speichere diesen Reiter und öffne ihn automatisch, wenn ich OnionShare "
+"Um einen beliebigen Reiter dauerhaft zu machen, setze den Haken bei "
+"„Speichere diesen Reiter und öffne ihn automatisch, wenn ich OnionShare "
"starte“, bevor du den Dienst startest. So gespeicherte Tabs erhalten ein "
"purpurfarbenen Stecknadelsymbol links dem Status des Dienstes."
@@ -60,8 +61,8 @@ msgid ""
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."
+"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,11 +84,11 @@ msgid ""
"wrong guesses at the password, your onion service is automatically "
"stopped to prevent a brute force attack against the OnionShare service."
msgstr ""
-"Standardmäßig sind alle OnionShare-Dienste mit dem Nutzernamen ``onionshare``"
-" und einem zufällig erzeugten Passwort geschützt. Falls jemand 20 falsche "
-"Versuche beim Erraten des Passworts macht, wird dein OnionShare-Service "
-"automatisch gestoppt, um eine Bruteforce-Attacke auf den Dienst zu "
-"verhindern."
+"Standardmäßig sind alle OnionShare-Dienste mit dem Nutzernamen "
+"``onionshare`` und einem zufällig erzeugten Passwort geschützt. Falls "
+"jemand 20 falsche Versuche beim Erraten des Passworts macht, wird dein "
+"OnionShare-Service automatisch gestoppt, um eine Bruteforce-Attacke auf "
+"den Dienst zu verhindern."
#: ../../source/advanced.rst:31
msgid ""
@@ -98,13 +99,13 @@ msgid ""
"can force your server to stop just by making 20 wrong guesses of your "
"password, even if they know the correct password."
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 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."
#: ../../source/advanced.rst:35
msgid ""
@@ -116,11 +117,34 @@ msgstr ""
"Haken bei „Kein Passwort verwenden“, bevor du den Dienst startest. Der "
"Dienst wird dann öffentlich sein und kein Passwort erfordern."
-#: ../../source/advanced.rst:38
+#: ../../source/advanced.rst:40
+msgid "Custom Titles"
+msgstr "Benutzerdefinierte Titel"
+
+#: ../../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 ""
+"Wenn jemand einen OnionShare-Dienst im Tor-Browser aufruft, sieht er "
+"standardmäßig den Standardtitel für den jeweiligen Service-Typ. Der Standard-"
+"Titel eines Chat-Dienstes ist beispielsweise \"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 ""
+"Wenn du einen benutzerdefinierten Titel wählen möchtest, kannst du ihn, "
+"bevor du den Service startest, mithilfe der Einstellung \"Benutzerdefinierter"
+" Titel\" ändern."
+
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Geplante Zeiten"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -128,26 +152,26 @@ msgid ""
"scheduled time\", \"Stop onion service at scheduled time\", or both, and "
"set the respective desired dates and times."
msgstr ""
-"OnionShare erlaubt eine genaue Zeitsteuerung, wann ein Dienst starten und "
-"stoppen soll. Bevor du den Dienst startest, klicke im jeweiligen Reiter auf „"
-"Erweiterte Einstellungen anzeigen“ und setze die Haken bei „Onion-Dienst zu "
-"einem festgelegten Zeitpunkt starten“, „Onion-Dienst zu einem festgelegten "
-"Zeitpunkt stoppen“ oder bei beiden, und lege das jeweilig gewünschte Datum "
-"samt Uhrzeit fest."
-
-#: ../../source/advanced.rst:43
+"OnionShare erlaubt eine genaue Zeitsteuerung, wann ein Dienst starten und"
+" stoppen soll. Bevor du den Dienst startest, klicke im jeweiligen Reiter "
+"auf „Erweiterte Einstellungen anzeigen“ und setze die Haken bei „Onion-"
+"Dienst zu einem festgelegten Zeitpunkt starten“, „Onion-Dienst zu einem "
+"festgelegten Zeitpunkt stoppen“ oder bei beiden, und lege das jeweilig "
+"gewünschte Datum samt Uhrzeit fest."
+
+#: ../../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 ""
-"Wenn einer geplanter Dienst in der Zukunft starten soll, siehst du nach dem "
-"Klick auf den Start-Button einen Timer, der bis zum Start abläuft. Wenn "
-"einer geplanter Dienst in der Zukunft stoppen soll, siehst du nach dem Start "
-"einen Timer, der bis zum Stopp abläuft."
+"Wenn einer geplanter Dienst in der Zukunft starten soll, siehst du nach "
+"dem Klick auf den Start-Button einen Timer, der bis zum Start abläuft. "
+"Wenn einer geplanter Dienst in der Zukunft stoppen soll, siehst du nach "
+"dem Start einen Timer, der bis zum Stopp abläuft."
-#: ../../source/advanced.rst:46
+#: ../../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 "
@@ -160,7 +184,7 @@ msgstr ""
"Falls dir nichts zustößt, kannst du den Dienst deaktvieren, bevor er "
"gemäß Zeitsteuerung starten würde."
-#: ../../source/advanced.rst:51
+#: ../../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 "
@@ -168,16 +192,16 @@ 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:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Kommandozeilen-Schnittstelle"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
@@ -185,7 +209,7 @@ msgstr ""
"Zusätzlich zur grafischen Oberfläche verfügt OnionShare auch über eine "
"Kommandozeilen-Schnittstelle."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
@@ -193,7 +217,7 @@ msgstr ""
"Du kannst eine Kommandozeilen-Version von OnionShare mit ``pip3`` "
"installieren::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid ""
"Note that you will also need the ``tor`` package installed. In macOS, "
"install it with: ``brew install tor``"
@@ -201,11 +225,11 @@ msgstr ""
"Beachte, dass du auch hierfür das ``tor``-Paket installiert haben musst. "
"Unter macOS kannst du dieses mit ``brew install tor`` installieren"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Führe es dann wiefolgt aus::"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
msgid ""
"If you installed OnionShare using the Linux Snapcraft package, you can "
"also just run ``onionshare.cli`` to access the command-line interface "
@@ -215,11 +239,11 @@ msgstr ""
"kannst du ``onionshare.cli`` ausführen, um zur Kommandozeilen-Version zu "
"gelangen."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Benutzung"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
@@ -227,11 +251,11 @@ msgstr ""
"Die Dokumentation zur Kommandozeile kann über den Befehl ``onionshare "
"--help`` abgerufen werden::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Veraltetes Adressformat"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
@@ -239,24 +263,24 @@ msgstr ""
"OnionShare nutzt standardmäßig Tor-OnionDienste der Version 3. Dies sind "
"moderne .onion-Adressen von 56 Zeichen Länge, z.B.::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
msgstr ""
-"OnionShare unterstützt immer noch .onion-Adressen der Version 2, die alte "
-"Version von .onion-Adressen mit 16 Zeichen Länge, z.B.::"
+"OnionShare unterstützt immer noch .onion-Adressen der Version 2, die alte"
+" Version von .onion-Adressen mit 16 Zeichen Länge, z.B.::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
"OnionShare bezeichnet .onion-Adressen der Version 2 als „veraltetes "
-"Adressformat“. Adressen der Version 3 sind sicherer, und eine Nutzung der "
-"veralteten Adressen wird nicht empfohlen."
+"Adressformat“. Adressen der Version 3 sind sicherer, und eine Nutzung der"
+" veralteten Adressen wird nicht empfohlen."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -269,20 +293,20 @@ msgstr ""
"entsprechenden Dienstes in seinem Reiter auf „Erweiterte Einstellungen "
"anzeigen“; setze dort den Haken bei „Benutze ein veraltetes Adressformat "
"(Onion-Dienste-Adressformat v2, nicht empfohlen)“. In diesem veralteten "
-"Modus kannst du die Client-Authorisierung aktivieren. Sobald ein Dienst in "
-"dem veralteten Modus gestartet wurde, kann man dies in dem entsprechenden "
-"Reiter nicht rückgängig machen; stattdessen müsstest du einen separaten "
-"Dienst in einem eigenem Reiter starten."
+"Modus kannst du die Client-Authorisierung aktivieren. Sobald ein Dienst "
+"in dem veralteten Modus gestartet wurde, kann man dies in dem "
+"entsprechenden Reiter nicht rückgängig machen; stattdessen müsstest du "
+"einen separaten Dienst in einem eigenem Reiter starten."
-#: ../../source/advanced.rst:150
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
"2021, and legacy onion services will be removed from OnionShare before "
"then."
msgstr ""
-"Das Tor-Projekt plant, .onion-Dienste der Version 2 zum 15. Oktober 2021 `"
-"vollständig zu entfernen <https://blog.torproject.org/v2-deprecation-"
+"Das Tor-Projekt plant, .onion-Dienste der Version 2 zum 15. Oktober 2021 "
+"`vollständig zu entfernen <https://blog.torproject.org/v2-deprecation-"
"timeline>`_, und die Unterstützung für diese Dienste wird davor aus "
"OnionShare entfernt werden."
diff --git a/docs/source/locale/de/LC_MESSAGES/develop.po b/docs/source/locale/de/LC_MESSAGES/develop.po
index be0a1059..f0eaf737 100644
--- a/docs/source/locale/de/LC_MESSAGES/develop.po
+++ b/docs/source/locale/de/LC_MESSAGES/develop.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: 2020-11-15 14:43-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2020-11-17 10:28+0000\n"
"Last-Translator: mv87 <mv87@dismail.de>\n"
-"Language-Team: de <LL@li.org>\n"
"Language: de\n"
+"Language-Team: de <LL@li.org>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -39,14 +38,15 @@ msgid ""
"click \"Join a Team\", and type \"onionshare\"."
msgstr ""
"OnionShare hat ein offenes Team auf Keybase, um über das Projekt zu "
-"diskutieren, Fragen zu stellen, Ideen und Designs zu teilen und um Pläne für "
-"die künftige Entwicklung zu schmieden. (Außerdem ist dies ein einfacher Weg, "
-"um Ende zu Ende verschlüsselte Nachrichten, z.B. OnionShare-Adressen, an "
-"andere Leute in der OnionShare-Community zu senden.) Um Keybase zu nutzen, "
-"lade die Keybase-App <https://keybase.io/download>`_ herunter, erstelle dir "
-"einen Account und `trete diesem Team bei <https://keybase.io/team/"
-"onionshare>`_. In der App, gehe auf „Teams“, klicke auf “Team beitreten“ und "
-"gib „onionshare“ ein."
+"diskutieren, Fragen zu stellen, Ideen und Designs zu teilen und um Pläne "
+"für die künftige Entwicklung zu schmieden. (Außerdem ist dies ein "
+"einfacher Weg, um Ende zu Ende verschlüsselte Nachrichten, z.B. "
+"OnionShare-Adressen, an andere Leute in der OnionShare-Community zu "
+"senden.) Um Keybase zu nutzen, lade die Keybase-App "
+"<https://keybase.io/download>`_ herunter, erstelle dir einen Account und "
+"`trete diesem Team bei <https://keybase.io/team/onionshare>`_. In der "
+"App, gehe auf „Teams“, klicke auf “Team beitreten“ und gib „onionshare“ "
+"ein."
#: ../../source/develop.rst:12
msgid ""
@@ -63,26 +63,29 @@ msgid "Contributing Code"
msgstr "Code beitragen"
#: ../../source/develop.rst:17
+#, fuzzy
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"https://github.com/onionshare/onionshare"
msgstr ""
-"OnionShares Quellcode findet sich in diesem git-Repository: https://github."
-"com/micahflee/onionshare"
+"OnionShares Quellcode findet sich in diesem git-Repository: "
+"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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
-"Wenn du Code zu OnionShare beitragen willst, solltest du dem Keybase-Team "
-"beitreten und dort zur Diskussion stellen, was du gerne beitragen möchtest. "
-"Du solltest auch einen Blick auf alle `offenen Issues <https://github.com/"
-"micahflee/onionshare/issues>`_ auf GitHub werfen, um zu sehen, ob dort etwas "
-"für dich dabei ist, das du in Angriff nehmen möchtest."
+"Wenn du Code zu OnionShare beitragen willst, solltest du dem Keybase-Team"
+" beitreten und dort zur Diskussion stellen, was du gerne beitragen "
+"möchtest. Du solltest auch einen Blick auf alle `offenen Issues "
+"<https://github.com/micahflee/onionshare/issues>`_ auf GitHub werfen, um "
+"zu sehen, ob dort etwas für dich dabei ist, das du in Angriff nehmen "
+"möchtest."
#: ../../source/develop.rst:22
msgid ""
@@ -90,10 +93,10 @@ 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 ""
-"Wenn du bereit bist, Code beizusteuern, lege einen Pull-Request im GitHub-"
-"Repository an und einer der Projektbetreuer wird einen Blick darüber werfen "
-"und ggfs. Fragen stellen, Änderungen anfragen, ihn zurückweisen oder ihn in "
-"das Projekt einpflegen."
+"Wenn du bereit bist, Code beizusteuern, lege einen Pull-Request im "
+"GitHub-Repository an und einer der Projektbetreuer wird einen Blick "
+"darüber werfen und ggfs. Fragen stellen, Änderungen anfragen, ihn "
+"zurückweisen oder ihn in das Projekt einpflegen."
#: ../../source/develop.rst:27
msgid "Starting Development"
@@ -102,17 +105,12 @@ msgstr "Mit der Entwicklung beginnen"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"OnionShare ist in Python geschrieben. Klone zunächst das git-Repository "
-"unter https://github.com/micahflee/onionshare/ und lies in der ``cli/README."
-"md``-Datei nach, wie du deine Entwicklungsumgebung für die Kommandozeilen-"
-"Version aufsetzt; lies in der ``desktop/README.md``-Datei nach, wie du deine "
-"Entwicklungsumgebung für die grafische Version aufsetzt."
#: ../../source/develop.rst:32
msgid ""
@@ -121,8 +119,8 @@ msgid ""
"source tree."
msgstr ""
"Diese Dateien enthalten die notwendigen technischen Instruktionen und "
-"Befehle, um die Abhängigkeiten für deine Plattform zu installieren,und um "
-"OnionShare aus dem Sourcetree auszuführen."
+"Befehle, um die Abhängigkeiten für deine Plattform zu installieren,und um"
+" OnionShare aus dem Sourcetree auszuführen."
#: ../../source/develop.rst:35
msgid "Debugging tips"
@@ -141,13 +139,14 @@ msgid ""
"reloaded), and other debug info. For example::"
msgstr ""
"Beim Entwickeln ist es hilfreich, OnionShare über die Kommandozeile "
-"auszuführen und dabei die ``--verbose``- (oder ``-v``-) Flagge zu setzen. "
-"Dadurch werden viele hilfreiche Nachrichten auf der Kommandozeile "
+"auszuführen und dabei die ``--verbose``- (oder ``-v``-) Flagge zu setzen."
+" Dadurch werden viele hilfreiche Nachrichten auf der Kommandozeile "
"ausgegeben, zum Bespiel wenn bestimmte Objekte initialisiert wurden oder "
-"wenn Ereignisse eintreten (Klicken von Buttons, Speichern oder Auffrischen "
-"von Einstellungen o.ä.), sowie andere Debug-Informationen. Zum Beispiel::"
+"wenn Ereignisse eintreten (Klicken von Buttons, Speichern oder "
+"Auffrischen von Einstellungen o.ä.), sowie andere Debug-Informationen. "
+"Zum Beispiel::"
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
@@ -156,21 +155,21 @@ msgstr ""
"``Common.log``-Methode aus ``onionshare/common.py`` ausführst. Zum "
"Beispiel::"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
"Das kann nützlich sein, wenn du die Abfolge von Events beim Benutzen der "
-"Anwendung oder den Wert bestimmter Variablen vor oder nach deren Änderung "
-"herausfinden möchtest."
+"Anwendung oder den Wert bestimmter Variablen vor oder nach deren Änderung"
+" herausfinden möchtest."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr "Nur lokal"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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`` "
@@ -180,20 +179,21 @@ msgstr ""
"Dienste zu starten. Dies kannst du mit der ``--local-only``-Flagge tun. "
"Zum Beispiel::"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
-"In diesem Fall lädst du die URL ``http://onionshare:eject-snack@127.0.0."
-"1:17614`` in einem normalen Webbrowser wie Firefox anstelle des Tor Browsers."
+"In diesem Fall lädst du die URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in einem normalen Webbrowser wie Firefox anstelle"
+" des Tor Browsers."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Übersetzungen beitragen"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -202,55 +202,57 @@ msgid ""
"needed."
msgstr ""
"Hilf mit, OnionShare für die Leute einfacher zu benutzen, vertrauter und "
-"einladender zu machen, indem du es auf `Hosted Weblate <https://hosted."
-"weblate.org/projects/onionshare/>`_ übersetzt. Halte „OnionShare“ immer in "
-"lateinischen Lettern und nutze „OnionShare (localname)“ bei Bedarf."
+"einladender zu machen, indem du es auf `Hosted Weblate "
+"<https://hosted.weblate.org/projects/onionshare/>`_ übersetzt. Halte "
+"„OnionShare“ immer in lateinischen Lettern und nutze „OnionShare "
+"(localname)“ bei Bedarf."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-"Um bei der Übersetzung mitzuhelfen, erstelle dir ein Benutzerkonto für ``"
-"Hosted Weblate``, und schon kann es losgehen."
+"Um bei der Übersetzung mitzuhelfen, erstelle dir ein Benutzerkonto für "
+"``Hosted Weblate``, und schon kann es losgehen."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
-msgstr ""
-"Vorschläge für die ursprüngliche englischsprache Zeichenketten („strings“)"
+msgstr "Vorschläge für die ursprüngliche englischsprache Zeichenketten („strings“)"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
msgstr ""
-"Manchmal sind die originalen englischsprachigen Zeichenketten falschen oder "
-"stimmen nicht zwischen Anwendung und dem Handbuch überein."
+"Manchmal sind die originalen englischsprachigen Zeichenketten falschen "
+"oder stimmen nicht zwischen Anwendung und dem Handbuch überein."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 ""
-"Verbesserungen an den originalen Zeichenketten können vorgeschlagen werden, "
-"indem du @kingu in deinem Weblate-Kommentar hinzufügst, oder indem du ein "
-"Issue oder einen Pull Request auf GitHub anlegst. Letzterer Weg stellt "
-"sicher, dass alle Hauptentwickler den Vorschlag sehen und die Zeichenkette "
-"gegebenenfalls im Rahmen des üblichen Code-Review-Vorgangs abändern können."
-
-#: ../../source/develop.rst:182
+"Verbesserungen an den originalen Zeichenketten können vorgeschlagen "
+"werden, indem du @kingu in deinem Weblate-Kommentar hinzufügst, oder "
+"indem du ein Issue oder einen Pull Request auf GitHub anlegst. Letzterer "
+"Weg stellt sicher, dass alle Hauptentwickler den Vorschlag sehen und die "
+"Zeichenkette gegebenenfalls im Rahmen des üblichen Code-Review-Vorgangs "
+"abändern können."
+
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Übersetzungsstatus"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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 ""
"Hier siehst du den aktuellen Stand der Übersetzungen. Wenn du eine "
-"Übersetzung in einer Sprache beginnen möchtest, die hier nicht gelistet ist, "
-"schreibe uns bitte auf der Mailinglist: onionshare-dev@lists.riseup.net"
+"Übersetzung in einer Sprache beginnen möchtest, die hier nicht gelistet "
+"ist, schreibe uns bitte auf der Mailinglist: onionshare-"
+"dev@lists.riseup.net"
#~ msgid ""
#~ "OnionShare is developed in Python. To"
@@ -456,3 +458,26 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr "Tu dasselbe für die anderen noch nicht übersetzten Zeilen."
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "OnionShare ist in Python geschrieben. "
+#~ "Klone zunächst das git-Repository unter"
+#~ " https://github.com/micahflee/onionshare/ und lies "
+#~ "in der ``cli/README.md``-Datei nach, wie "
+#~ "du deine Entwicklungsumgebung für die "
+#~ "Kommandozeilen-Version aufsetzt; lies in "
+#~ "der ``desktop/README.md``-Datei nach, wie du"
+#~ " deine Entwicklungsumgebung für die "
+#~ "grafische Version aufsetzt."
+
diff --git a/docs/source/locale/de/LC_MESSAGES/features.po b/docs/source/locale/de/LC_MESSAGES/features.po
index 88c19339..115a8973 100644
--- a/docs/source/locale/de/LC_MESSAGES/features.po
+++ b/docs/source/locale/de/LC_MESSAGES/features.po
@@ -7,16 +7,16 @@ msgid ""
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:43-0800\n"
-"PO-Revision-Date: 2020-11-17 10:28+0000\n"
-"Last-Translator: mv87 <mv87@dismail.de>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Lukas <lukas@fuchtmann.net>\n"
"Language-Team: de <LL@li.org>\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -29,8 +29,8 @@ msgid ""
"other people as `Tor <https://www.torproject.org/>`_ `onion services "
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
-"OnionShare startet Webserver lokal auf deinem Rechner und macht sie anderen "
-"Leuten als `Tor <https://www.torproject.org/>`_ `Onion-"
+"OnionShare startet Webserver lokal auf deinem Rechner und macht sie "
+"anderen Leuten als `Tor <https://www.torproject.org/>`_ `Onion-"
"Dienste<https://community.torproject.org/onion-services/>`_ zugänglich."
#: ../../source/features.rst:8
@@ -49,11 +49,11 @@ msgid ""
"something less secure like unencrypted e-mail, depending on your `threat "
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
-"Du musst diese URL über einen sicheren Kommunikationskanal deiner Wahl mit "
-"anderen teilen, beispielsweise über eine verschlüsselte Chatnachricht, oder "
-"über einen weniger sicheren Weg wie zum Beispiel einerTwitter- oder Facebook-"
-"Nachricht, abhängig von deiner persönlichen `Bedrohungsanalyse <https://ssd."
-"eff.org/en/module/your-security-plan>`_."
+"Du musst diese URL über einen sicheren Kommunikationskanal deiner Wahl "
+"mit anderen teilen, beispielsweise über eine verschlüsselte "
+"Chatnachricht, oder über einen weniger sicheren Weg wie zum Beispiel "
+"einerTwitter- oder Facebook-Nachricht, abhängig von deiner persönlichen "
+"`Bedrohungsanalyse <https://ssd.eff.org/en/module/your-security-plan>`_."
#: ../../source/features.rst:14
msgid ""
@@ -71,10 +71,10 @@ 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, bis dein "
-"Laptop wieder läuft und mit dem Internet verbunden ist. OnionShare "
+"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."
@@ -86,8 +86,8 @@ msgid ""
"Tor onion services too, it also protects your anonymity. See the "
":doc:`security design </security>` for more info."
msgstr ""
-"Weil dein eigener Rechner der Webserver ist, *hat kein Dritter Zugriff auf "
-"das, was ihr mit OnionShare tut*, nicht einmal die Entwickler von "
+"Weil dein eigener Rechner der Webserver ist, *hat kein Dritter Zugriff "
+"auf das, was ihr mit OnionShare tut*, nicht einmal die Entwickler von "
"OnionShare. Es ist vollständig geheim. Und weil OnionShare auch auf Tors "
"Onion-Diensten basiert, schützt es auch deine Anonymität. Für weitere "
"Informationen siehe :doc:`security design </security>`."
@@ -102,18 +102,19 @@ msgid ""
"anonymously. Open a share tab, drag in the files and folders you wish to "
"share, and click \"Start sharing\"."
msgstr ""
-"Du kannst OnionShare dazu verwenden, um Dateien und Ordner sicher und anonym "
-"an andere Leute zu schicken. Öffne einfach einen Freigabe-Reiter, ziehe die "
-"freizugebenden Dateien und Ordner dort hinein und klicke auf „Freigabe "
-"starten“."
+"Du kannst OnionShare dazu verwenden, um Dateien und Ordner sicher und "
+"anonym an andere Leute zu schicken. Öffne einfach einen Freigabe-Reiter, "
+"ziehe die freizugebenden Dateien und Ordner dort hinein und klicke auf "
+"„Freigabe starten“."
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
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 ""
-"Nachdem du Dateien hinzugefügt hast, werden dir Einstellungsmöglichkeiten "
-"angezeigt. Wähle die passenden Einstellungen, bevor du die Freigabe startest."
+"Nachdem du Dateien hinzugefügt hast, werden dir Einstellungsmöglichkeiten"
+" angezeigt. Wähle die passenden Einstellungen, bevor du die Freigabe "
+"startest."
#: ../../source/features.rst:31
msgid ""
@@ -123,11 +124,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 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)“."
#: ../../source/features.rst:34
msgid ""
@@ -135,8 +136,8 @@ msgid ""
"individual files you share rather than a single compressed version of all"
" the files."
msgstr ""
-"Wenn du diesen Haken entfernst, können Leute außerdem die Dateien einzeln "
-"herunterladen (anstelle einer einzigen komprimierten Datei, die alle "
+"Wenn du diesen Haken entfernst, können Leute außerdem die Dateien einzeln"
+" herunterladen (anstelle einer einzigen komprimierten Datei, die alle "
"Einzeldateien enthält)."
#: ../../source/features.rst:36
@@ -146,11 +147,12 @@ 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 ""
-"Wenn du bereit zum Freigeben bist, klicke auf den „Freigabe starten”-Button. "
-"Du kannst jederzeit auf “„Freigabe beenden” klicken oder OnionShare beenden, "
-"um die Webseite augenblicklich vom Internet zu nehmen. Du kannst außerdem "
-"auf den „Nach oben”-Pfeil in der oberen rechten Ecke klicken, um dir den "
-"Verlauf und den Fortschritt der Downloads anzeigen zu lassen."
+"Wenn du bereit zum Freigeben bist, klicke auf den „Freigabe "
+"starten”-Button. Du kannst jederzeit auf “„Freigabe beenden” klicken oder"
+" OnionShare beenden, um die Webseite augenblicklich vom Internet zu "
+"nehmen. Du kannst außerdem auf den „Nach oben”-Pfeil in der oberen "
+"rechten Ecke klicken, um dir den Verlauf und den Fortschritt der "
+"Downloads anzeigen zu lassen."
#: ../../source/features.rst:40
msgid ""
@@ -161,8 +163,8 @@ msgid ""
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 sonstwie einer Gefahr ausgesetzt ist, nutze "
-"einen verschlüsselten Messenger."
+"bleiben sollen oder die Person anderweitig irgendeiner Gefahr ausgesetzt "
+"ist, nutze einen verschlüsselten Messenger."
#: ../../source/features.rst:42
msgid ""
@@ -171,62 +173,110 @@ msgid ""
"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 „Dateien herunterladen”-Link in der Ecke herunterladen."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr "Dateien empfangen"
+msgid "Receive Files and Messages"
+msgstr "Dateien und Nachrichten empfangen"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
-"Du kannst OnionShare dazu benutzen, um anderen Personen das anonyme "
-"Hochladen von Dateien direkt auf deinen Rechner zu ermöglichen; hierdurch "
-"wird dein Rechner sozusagen zu einem anonymen Briefkasten. Öffne einen „"
-"Dateien Empfangen”-Reiter, wähle einen Speicherpfad und andere "
-"Einstellungen, und klicke dann auf „Empfangsmodus starten”."
+"Du kannst OnionShare verwenden, um anderen Personen zu ermöglichen, anonym "
+"Dateien und Nachrichten direkt an deinen Computer zu übertragen, wodurch er "
+"quasi zu einer Art anonymer Dropbox wird. Öffne dazu den Tab \"Empfangen\" "
+"und wähle die gewünschten Einstellungen."
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+"Du kannst ein Verzeichnis zum Speichern von Nachrichten und Dateien "
+"auswählen, die übermittelt werden."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
-"Damit wird der OnionShare-Service gestartet. Jeder der diese Adresse mit dem "
-"Tor Browser öffnet, kann Dateien auf deinen Rechner hochladen."
+"Du kannst die Option \"Übermittlung von Nachrichten deaktiveren\" anwählen, "
+"wenn du nur Datei-Uploads zulassen möchtest. Umgekehrt ist das genauso "
+"möglich, wenn du nur Nachrichten zulassen möchtest, indem du \"Hochladen von "
+"Dateien deaktivieren\" anwählst. So kannst du beispielsweise ein anonymes "
+"Kontaktformular errichten."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Du kannst die Option \"Benachrichtigungs-Webhook verwenden\" anwählen und "
+"eine Webhook-URL festlegen, wenn du über neu eingetroffene Dateien oder "
+"Nachrichten bei deinem OnionShare Service benachrichtigt werden willst. Wenn "
+"du dieses Feature benutzt, stellt OnionShare jedes Mal, wenn eine neue Datei "
+"oder Nachricht eingetroffen ist, eine HTTP POST Anfrage an die von dir "
+"festgelegte URL. Wenn du beispielsweise eine verschlüsselte Nachricht über "
+"die Messaging-App `Keybase <https://keybase.io/>`_ erhalten willst, starte "
+"eine Unterhaltung mit dem `@webhookbot <https://keybase.io/webhookbot>`_, "
+"schreibe ``!webhook create onionshare-alerts``und der Bot antwortet mit "
+"einer URL. Diese URL verwendest du als Webhook-URL. Wenn nun jemand eine "
+"Datei oder Nachricht an deinen OnionShare Service übermittelt, erhältst du "
+"eine Nachricht vom @webhookbot auf Keybase."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Wenn du bereit bist, klicke auf \"Empfangsmodus starten\". Jetzt startet der "
+"OnionShare Service. Jeder, der zu der angezeigte Adresse in seinem Tor "
+"Browser navigiert, hat die Möglichkeit, Dateien und Nachrichten direkt an "
+"deinen Computer zu übertragen."
+
+#: ../../source/features.rst:67
+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 ""
"Du kannst außerdem auf den „Nach unten”-Pfeil in der oberen rechten Ecke "
-"klicken, um dir den Verlauf und den Fortschritt der Uploads auf deinen "
-"rechner anzeigen zu lassen."
+"klicken, um dir den Verlauf und den Fortschritt der an deinen Computer "
+"übertragenen Dateien anzeigen zu lassen."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
-msgstr "So sieht es aus, wenn jemand Dateien bei dir hochlädt."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
+msgstr "So sieht es aus, wenn dir jemand Dateien und Nachrichten sendet."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-"Wenn jemand Dateien auf deinen Dienst im Empfangsmodus hochlädt, werden "
-"diese standardmäßig in einem Ordner namens ``OnionShare`` in deinem "
-"Benutzerverzeichnis abgelegt; die Dateien werden automatisch in Unterordner "
-"aufgeteilt, abhängig vom Hochladedatum."
+"Wenn jemand Dateien oder Nachrichten an deinen Empfangsdienst überträgt, "
+"werden sie standardmäßig in einem Ordner namens ``OnionShare`` in dem Home-"
+"Verzeichnis deines Computers abgelegt. Die empfangenen Dateien werden "
+"automatisch in Unterordnern anhand des Empfangszeitpunktes organisiert."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -235,28 +285,29 @@ msgid ""
"whistleblower submission system."
msgstr ""
"Ein solcher OnionShare-Empfangsdienst ist besonders für Journalisten und "
-"andere interessant, die Dokumente von anonymen Quellen erhalten. So genutzt, "
-"ist OnionShare sozusagen eine leichtgewichtige, einfachere und nicht ganz so "
-"sichere Variante von `SecureDrop <https://securedrop.org/>`_, einem "
-"Einsendesystem für Whistleblower."
+"andere interessant, die Dokumente von anonymen Quellen erhalten. So "
+"genutzt, ist OnionShare sozusagen eine leichtgewichtige, einfachere und "
+"nicht ganz so sichere Variante von `SecureDrop "
+"<https://securedrop.org/>`_, einem Einsendesystem für Whistleblower."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr "Nutzung auf eigene Gefahr"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail 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 ""
-"Ä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."
+"Ä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."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -265,44 +316,53 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
-"Wenn du ein Office- oder PDF-Dokument über OnionShare erhältst, kannst du "
-"diese in sichere PDF-Dateien überführen, indem du `Dangerzone "
-"<https://dangerzone.rocks/>`_ nutzt. Du kannst dich auch schützen, indem du "
-"nicht vertrauenswürdige Dokumente in `Tails <https://tails.boum.org/>`_ oder "
-"in einer `Qubes <https://qubes-os.org/>`_-Wegwerf-VM öffnest."
+"Wenn du ein Office- oder PDF-Dokument über OnionShare erhältst, kannst du"
+" diese in sichere PDF-Dateien überführen, indem du `Dangerzone "
+"<https://dangerzone.rocks/>`_ nutzt. Du kannst dich auch schützen, indem "
+"du nicht vertrauenswürdige Dokumente in `Tails "
+"<https://tails.boum.org/>`_ oder in einer `Qubes <https://qubes-"
+"os.org/>`_-Wegwerf-VM öffnest."
+
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Allerdings ist es stets unbedenklich, über OnionShare gesendete "
+"Textnachrichten zu öffnen."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr "Tipps für einen OnionShare-Empfangsdienst"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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 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."
-#: ../../source/features.rst:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). It's also a good idea to "
+"give it a custom title (see :ref:`custom_titles`)."
msgstr ""
-"Falls du deine OnionShare-Adresse auf deiner Webseite oder auf deinen "
-"Profilen in den sozialen Medien verbreiten möchtest, solltest du den Reiter "
-"speichern (siehe :ref:`save_tabs`) und den Dienst als öffentlichen Dienst "
-"betreiben (siehe :ref:`disable password`)."
+"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, einen "
+"benutzerdefinierten Titel festzulegen (siehe :ref:`custom_titles`)."
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr "Eine Webseite hosten"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
@@ -312,7 +372,7 @@ msgstr ""
"Webseiten-Reiter, ziehe die Dateien und Ordner hinein, aus denen die "
"statische Webseite besteht, und klicke auf „Webseite veröffentlichen\"."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -322,13 +382,13 @@ msgid ""
" WordPress.)"
msgstr ""
"Wenn du eine ``index.html``-Datei hinzufügst, wird sie beim Öffnen der "
-"Webseite dargestellt. Du solltest auch alle anderen HTML-Dateien sowie CSS- "
-"und JavaScript-Dateien und Bilder mit einbeziehen, aus denen die Webseite "
-"besteht. (Beachte, dass OnionShare nur *statische* Webseiten hosten kann. Es "
-"kann keine Webseiten hosten, die Code ausführen oder auf Datenbanken "
-"zugreifen. So kann man z.B. WordPress nicht verwenden.)"
+"Webseite dargestellt. Du solltest auch alle anderen HTML-Dateien sowie "
+"CSS- und JavaScript-Dateien und Bilder mit einbeziehen, aus denen die "
+"Webseite besteht. (Beachte, dass OnionShare nur *statische* Webseiten "
+"hosten kann. Es kann keine Webseiten hosten, die Code ausführen oder auf "
+"Datenbanken zugreifen. So kann man z.B. WordPress nicht verwenden.)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 "
@@ -338,11 +398,11 @@ msgstr ""
"Verzeichnisstruktur angezeigt; beim Aufruf können Personen die Dateien "
"durchsehen und herunterladen."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr "Content-Security-Policy"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -350,13 +410,13 @@ 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 <https://en.wikipedia.org/wiki/"
-"Content_Security_Policy>`_-Header setzt. Allerdings wird hierdurch "
-"verhindert, dass Inhalte von Drittanbietern innerhalb der Webseite geladen "
-"werden."
+"Standardmäßig wird OnionShare beim Absichern deiner Webseite helfen, "
+"indem es einen strikten `Content-Security-Policy "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_-Header setzt. "
+"Allerdings wird hierdurch verhindert, dass Inhalte von Drittanbietern "
+"innerhalb der Webseite geladen werden."
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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 "
@@ -365,15 +425,15 @@ msgid ""
msgstr ""
"Falls du auch Inhalte von Drittanbieter-Webseiten laden willst, wie z.B. "
"Inhalte oder JavaScript-Bibliotheken von CDNs, musst du einen Haken bei "
-"„Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen von "
-"Drittanbietern auf deiner Onion-Webseite einzubinden)“ setzen, bevor du den "
-"Dienst startest."
+"„Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen "
+"von Drittanbietern auf deiner Onion-Webseite einzubinden)“ setzen, bevor "
+"du den Dienst startest."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr "Tipps zum Betreiben eines Webseiten-Dienstes"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -382,15 +442,16 @@ 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 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."
+"Falls du eine Webseite längerfristig über OnionShare anbieten (und 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."
-#: ../../source/features.rst:110
+#: ../../source/features.rst:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
@@ -398,11 +459,11 @@ msgstr ""
"Falls du die Webseite öffentlich betreiben wilst, solltest du sie als "
"öffentlichen Dienst hosten (see :ref:`disable_passwords`)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr "Anonym chatten"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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\"."
@@ -411,19 +472,20 @@ msgstr ""
"aufsetzen, der nichts aufzeichnet. Öffne einfach einen Chat-Reiter und "
"klicke auf „Chat starten“."
-#: ../../source/features.rst:119
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it 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."
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 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."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 "
@@ -431,11 +493,11 @@ msgid ""
"\"Standard\" or \"Safer\", instead of \"Safest\"."
msgstr ""
"Man kann dem Chatroom beitreten, indem man die OnionShare-Adresse im Tor "
-"Browser aufruft. Der Chatroom setzt JavaScript voraus, d.h. jeder Teilnehmer "
-"muss im Tor Browser seinen Sicherheitslevel auf „Standard“ oder „Safer“ ("
-"anstelle von Safest) setzen."
+"Browser aufruft. Der Chatroom setzt JavaScript voraus, d.h. jeder "
+"Teilnehmer muss im Tor Browser seinen Sicherheitslevel auf „Standard“ "
+"oder „Safer“ (anstelle von Safest) setzen."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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 "
@@ -448,7 +510,7 @@ msgstr ""
"Chatverlauf wird nicht angezeigt, selbst wenn andere bereits zuvor im "
"Chatroot gechattet hatten, da der Chatverlauf nirgendwo gespeichert wird."
-#: ../../source/features.rst:133
+#: ../../source/features.rst:144
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."
@@ -456,7 +518,7 @@ msgstr ""
"In einem OnionShare-Chatroom ist jeder anonym. Jeder kann seinen Namen "
"beliebig ändern und die Identität der Nutzer kann nicht überprüft werden."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
msgid ""
"However, if you create an OnionShare chat room and securely send the "
"address only to a small group of trusted friends using encrypted "
@@ -464,15 +526,15 @@ msgid ""
"room are your friends."
msgstr ""
"Allerdings kannst du dir einigermaßen sicher sein, dass die Leute im "
-"Chatroom auch wirklich deine Freunde sind, wenn du die OnionShare-Adresse "
-"nur an eine kleine Anzahl vertrauenswürdiger Freunde über einen "
+"Chatroom auch wirklich deine Freunde sind, wenn du die OnionShare-Adresse"
+" nur an eine kleine Anzahl vertrauenswürdiger Freunde über einen "
"verschlüsselten Kanal geschickt hast."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr "Wozu soll das gut sein?"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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."
@@ -481,7 +543,7 @@ msgstr ""
"verschlüsselten Messenger benutzen solltest? Sie hinterlassen weniger "
"Spuren."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -492,16 +554,17 @@ msgid ""
"rooms don't store any messages anywhere, so the problem is reduced to a "
"minimum."
msgstr ""
-"Wenn du beispielsweise eine Nachricht an eine Gruppe in „Signal“ sendest, "
-"landet eine Kopie deiner Nachricht auf jedem Gerät (den Geräten und "
+"Wenn du beispielsweise eine Nachricht an eine Gruppe in „Signal“ sendest,"
+" landet eine Kopie deiner Nachricht auf jedem Gerät (den Geräten und "
"Computern, falls auch Signal Desktop verwendet wird). Selbst wenn "
"verschwindende Nachrichten aktiviert ist, lässt sich kaum mit Sicherheit "
-"sagen, dass alle Kopieren von allen Geräten entfernt wurden, und ggfs. auch "
-"von anderen Orten, an denen Kopien gelandet sein können (z.B. in einer "
-"Benachrichtigungs-Datenbank). OnionShare-Chatrooms speichern nirgendwo "
-"Nachrichten, so dass dieses Problem auf ein Minimum reduziert ist."
+"sagen, dass alle Kopieren von allen Geräten entfernt wurden, und ggfs. "
+"auch von anderen Orten, an denen Kopien gelandet sein können (z.B. in "
+"einer Benachrichtigungs-Datenbank). OnionShare-Chatrooms speichern "
+"nirgendwo Nachrichten, so dass dieses Problem auf ein Minimum reduziert "
+"ist."
-#: ../../source/features.rst:146
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -511,17 +574,17 @@ msgid ""
"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."
+"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."
-#: ../../source/features.rst:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr "Wie funktioniert die Verschlüsselung?"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -531,13 +594,14 @@ msgid ""
" connections."
msgstr ""
"Weil OnionShare auf Tors Onion-Dienste aufbaut, sind alle Verbindungen "
-"zwischen Tor Browser und OnionShare Ende zu Ende verschlüsselt (E2EE). Wenn "
-"jemand eine Nachricht in einem OnionShare-Chatroom absetzt, wird diese durch "
-"die E2EE-Onion-Verbindung an den Chatserver gesendet, welcher sie dann "
-"wiederum an alle anderen Mitglieder des Chatrooms über sog. WebSockets "
-"weiterschickt, wiederum durch deren eigene E2EE-Onion-Verbindungen."
+"zwischen Tor Browser und OnionShare Ende zu Ende verschlüsselt (E2EE). "
+"Wenn jemand eine Nachricht in einem OnionShare-Chatroom absetzt, wird "
+"diese durch die E2EE-Onion-Verbindung an den Chatserver gesendet, welcher"
+" sie dann wiederum an alle anderen Mitglieder des Chatrooms über sog. "
+"WebSockets weiterschickt, wiederum durch deren eigene E2EE-Onion-"
+"Verbindungen."
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
@@ -749,3 +813,54 @@ msgstr ""
#~ "OnionShare-Chatrooms speichern nirgendwo "
#~ "Nachrichten, so dass es hier kein "
#~ "vergleichbares Problem gibt."
+
+#~ msgid "Receive Files"
+#~ msgstr "Dateien empfangen"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "Du kannst OnionShare dazu benutzen, um"
+#~ " anderen Personen das anonyme Hochladen "
+#~ "von Dateien direkt auf deinen Rechner"
+#~ " zu ermöglichen; hierdurch wird dein "
+#~ "Rechner sozusagen zu einem anonymen "
+#~ "Briefkasten. Öffne einen „Dateien "
+#~ "Empfangen”-Reiter, wähle einen Speicherpfad "
+#~ "und andere Einstellungen, und klicke "
+#~ "dann auf „Empfangsmodus starten”."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Damit wird der OnionShare-Service "
+#~ "gestartet. Jeder der diese Adresse mit"
+#~ " dem Tor Browser öffnet, kann Dateien"
+#~ " auf deinen Rechner hochladen."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "Wenn jemand Dateien auf deinen Dienst"
+#~ " im Empfangsmodus hochlädt, werden diese"
+#~ " standardmäßig in einem Ordner namens "
+#~ "``OnionShare`` in deinem Benutzerverzeichnis "
+#~ "abgelegt; die Dateien werden automatisch "
+#~ "in Unterordner aufgeteilt, abhängig vom "
+#~ "Hochladedatum."
diff --git a/docs/source/locale/de/LC_MESSAGES/help.po b/docs/source/locale/de/LC_MESSAGES/help.po
index f8bae48b..4ecb3679 100644
--- a/docs/source/locale/de/LC_MESSAGES/help.po
+++ b/docs/source/locale/de/LC_MESSAGES/help.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: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2020-11-19 08:28+0000\n"
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
-"Language-Team: de <LL@li.org>\n"
"Language: de\n"
+"Language-Team: de <LL@li.org>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
@@ -32,26 +31,27 @@ 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 ""
-"Auf dieser Webseite finden sich zahlreiche Anleitungen, wie man OnionShare "
-"benutzt. Sieh dort zuerst alle Kapitel durch, ob sie alle deine Fragen "
-"beantworten."
+"Auf dieser Webseite finden sich zahlreiche Anleitungen, wie man "
+"OnionShare benutzt. Sieh dort zuerst alle Kapitel durch, ob sie alle "
+"deine Fragen beantworten."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
msgstr "Siehe die Problemsektion auf GitHub durch"
#: ../../source/help.rst:12
+#, fuzzy
msgid ""
"If it isn't on the website, please check the `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
-"Falls du auf dieser Webseite keine Lösung findest, siehe bitte die `GitHub "
-"issues <https://github.com/micahflee/onionshare/issues>`_ durch. "
-"Möglicherweise ist bereits jemand anderes auf das gleiche Problem gestoßen "
-"und hat es den Entwicklern gemeldet, und vielleicht wurde dort sogar schon "
-"eine Lösung gepostet."
+"Falls du auf dieser Webseite keine Lösung findest, siehe bitte die "
+"`GitHub issues <https://github.com/micahflee/onionshare/issues>`_ durch. "
+"Möglicherweise ist bereits jemand anderes auf das gleiche Problem "
+"gestoßen und hat es den Entwicklern gemeldet, und vielleicht wurde dort "
+"sogar schon eine Lösung gepostet."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
@@ -61,15 +61,10 @@ msgstr "Selber ein Problem melden"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Falls du keine Lösung zu deinem Problem findest, eine Frage stellen möchtest "
-"oder einen Vorschlag für ein Feature hast, `erstelle ein Ticket auf GitHub "
-"<https://github.com/micahflee/onionshare/issues/new>`_. Hierfür benötigt man`"
-"einen GitHub-Account <https://docs.github.com/de/free-pro-team@latest/github/"
-"getting-started-with-github/signing-up-for-a-new-github-account/>`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -85,3 +80,25 @@ msgstr ""
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr "Falls du Hilfe mit OnionShare benötigst, kannst du Folgendes tun."
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Falls du keine Lösung zu deinem "
+#~ "Problem findest, eine Frage stellen "
+#~ "möchtest oder einen Vorschlag für ein"
+#~ " Feature hast, `erstelle ein Ticket "
+#~ "auf GitHub "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. Hierfür"
+#~ " benötigt man`einen GitHub-Account "
+#~ "<https://docs.github.com/de/free-pro-team@latest/github"
+#~ "/getting-started-with-github/signing-up-"
+#~ "for-a-new-github-account/>`_."
+
diff --git a/docs/source/locale/el/LC_MESSAGES/advanced.po b/docs/source/locale/el/LC_MESSAGES/advanced.po
index 4cee28ea..86cf3b15 100644
--- a/docs/source/locale/el/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/el/LC_MESSAGES/advanced.po
@@ -7,16 +7,16 @@ msgid ""
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-12-01 17:29+0000\n"
-"Last-Translator: george k <norhorn@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Mr.Grin <grin-singularity@tutanota.com>\n"
+"Language-Team: el <LL@li.org>\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -35,12 +35,12 @@ 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 ακόμα και αν κάνετε "
-"επανεκκίνηση του υπολογιστή σας."
+"Από προεπιλογή, τα πάντα στο OnionShare είναι προσωρινά. Εάν κλείσετε μια"
+" καρτέλα OnionShare, η διεύθυνσή της δεν θα υπάρχει πλέον και δεν μπορεί "
+"να χρησιμοποιηθεί ξανά. Μερικές φορές ίσως χρειαστείτε μια ποιο μόνιμη "
+"υπηρεσία OnionShare. Είναι χρήσιμο εάν θέλετε να φιλοξενήσετε έναν "
+"ιστότοπο που θα είναι διαθέσιμος στην ίδια διεύθυνση OnionShare ακόμα και"
+" αν κάνετε επανεκκίνηση του υπολογιστή σας."
#: ../../source/advanced.rst:13
msgid ""
@@ -48,8 +48,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\" πριν ξεκινήσετε τον "
+"Για να διατηρήσετε οποιαδήποτε καρτέλα, επιλέξτε το \"Αποθήκευση αυτής "
+"της καρτέλας και αυτόματη έναρξη με το OnionShare\" πριν ξεκινήσετε τον "
"διακομιστή. Όταν αποθηκεύεται μια καρτέλα, εμφανίζεται ένα μώβ εικονίδιο "
"καρφίτσωσης στα αριστερά της κατάστασης του διακομιστή."
@@ -60,8 +60,8 @@ msgid ""
" they will start with the same OnionShare address and password."
msgstr ""
"Όταν κάνετε έξοδο από το OnionShare και άνοιγμα ξανά, οι αποθηκευμένες "
-"καρτέλες σας θα ξεκινήσουν ανοιχτές. Θα πρέπει να εκκινήσετε χειροκίνητα την "
-"κάθε υπηρεσία, αλλά θα ξεκινήσουν με την ίδια διεύθυνση και κωδικό "
+"καρτέλες σας θα ξεκινήσουν ανοιχτές. Θα πρέπει να εκκινήσετε χειροκίνητα "
+"την κάθε υπηρεσία, αλλά θα ξεκινήσουν με την ίδια διεύθυνση και κωδικό "
"OnionShare."
#: ../../source/advanced.rst:21
@@ -69,9 +69,9 @@ 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 ""
-"Εάν αποθηκεύσετε μια καρτέλα, ένα αντίγραφο κλειδιού της υπηρεσίας onion της "
-"καρτέλας, θα αποθηκευτεί στον υπολογιστή σύμφωνα με τις ρυθμίσεις του "
-"OnionShare."
+"Εάν αποθηκεύσετε μια καρτέλα, ένα αντίγραφο κλειδιού της υπηρεσίας onion "
+"της καρτέλας, θα αποθηκευτεί στον υπολογιστή σύμφωνα με τις ρυθμίσεις του"
+" OnionShare."
#: ../../source/advanced.rst:26
msgid "Turn Off Passwords"
@@ -84,10 +84,10 @@ msgid ""
"wrong guesses at the password, your onion service is automatically "
"stopped to prevent a brute force attack against the OnionShare service."
msgstr ""
-"Από προεπιλογή, οι υπηρεσίες OnionShare προστατεύονται με το όνομα χρήστη "
-"``onionshare`` και έναν τυχαίο κωδικό πρόσβασης. Με τη χρήση 20 λανθασμένων "
-"προσπαθειών, η υπηρεσία onion διακόπτεται αυτόματα για να αποφευχθεί μια "
-"επίθεση brute force κατά της υπηρεσίας OnionShare."
+"Από προεπιλογή, οι υπηρεσίες OnionShare προστατεύονται με το όνομα χρήστη"
+" ``onionshare`` και έναν τυχαίο κωδικό πρόσβασης. Με τη χρήση 20 "
+"λανθασμένων προσπαθειών, η υπηρεσία onion διακόπτεται αυτόματα για να "
+"αποφευχθεί μια επίθεση brute force κατά της υπηρεσίας OnionShare."
#: ../../source/advanced.rst:31
msgid ""
@@ -101,10 +101,10 @@ msgstr ""
"Μερικές φορές μπορεί να θέλετε η υπηρεσία OnionShare να είναι δημόσια "
"προσβάσιμη, ή να ρυθμίσετε την υπηρεσία λήψης OnionShare ώστε να μπορεί "
"κάποιος να σας στέλνει με ασφάλεια και ανώνυμα αρχεία. Σε αυτήν την "
-"περίπτωση, είναι καλύτερα να απενεργοποιήσετε εντελώς τον κωδικό πρόσβασης. "
-"Εάν δεν το κάνετε αυτό, κάποιος μπορεί να αναγκάσει τον διακομιστή σας να "
-"σταματήσει απλά κάνοντας 20 λανθασμένες δοκιμές για τον κωδικό πρόσβασής "
-"σας, ακόμη και αν γνωρίζουν τον σωστό."
+"περίπτωση, είναι καλύτερα να απενεργοποιήσετε εντελώς τον κωδικό "
+"πρόσβασης. Εάν δεν το κάνετε αυτό, κάποιος μπορεί να αναγκάσει τον "
+"διακομιστή σας να σταματήσει απλά κάνοντας 20 λανθασμένες δοκιμές για τον"
+" κωδικό πρόσβασής σας, ακόμη και αν γνωρίζουν τον σωστό."
#: ../../source/advanced.rst:35
msgid ""
@@ -112,15 +112,38 @@ msgid ""
"password\" box before starting the server. Then the server will be public"
" and won't have a password."
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 ""
+"Από προεπιλογή, όταν κάποιος φορτώσει μια υπηρεσία OnionShare στο Tor "
+"Browser, βλέπει τον προεπιλεγμένο τίτλο για τον τύπο της υπηρεσίας. Για "
+"παράδειγμα, ο προεπιλεγμένος τίτλος μιας υπηρεσίας συνομιλίας είναι "
+"\"OnionShare Συνομιλία\"."
+
+#: ../../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:38
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Προγραμματισμένες ώρες"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -130,51 +153,51 @@ msgid ""
msgstr ""
"Το OnionShare υποστηρίζει την προγραμματισμένη έναρξη και διακοπή υπηρεσιών "
"του. Πρίν την έναρξη του διακομιστή, κάντε κλικ στο \"Εμφάνιση προχωρημένων "
-"ρυθμίσεων\" της καρτέλας και επιλέξτε το \"Προγραμματισμένη εκκίνηση\", "
-"\"Προγραμματισμένος τερματισμός\" ή και τα δύο, ρυθμίζοντας ημερομηνία και "
-"ώρα αντίστοιχα."
+"ρυθμίσεων\" της καρτέλας και επιλέξτε την επιλογή \"Προγραμματισμένη "
+"εκκίνηση\", την επιλογή \"Προγραμματισμένος τερματισμός\" ή και τις δύο. "
+"Έπειτα, ρυθμίστε την ημερομηνία και ώρα όπως θέλετε."
-#: ../../source/advanced.rst:43
+#: ../../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:46
+#: ../../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 ""
-"**Ο προγραμματισμός ενεργοποίησης της υπηρεσίας διαμοιρασμού του OnionShare "
-"μπορεί να χρησιμοποιηθεί σε περίπτωση ανάγκης** όπου θα γίνει δηλαδή η "
-"ενεργοποίηση διαμοιρασμού αρχείων σας σε χρόνο που θα ορίσετε σε περίπτωση "
-"που σας συμβεί κάτι. Εάν δεν σας συμβεί τίποτα μπορείτε να ακυρώσετε την "
-"υπηρεσία πριν αυτή ξεκινήσει."
+"**Ο προγραμματισμός ενεργοποίησης της υπηρεσίας διαμοιρασμού του "
+"OnionShare μπορεί να χρησιμοποιηθεί σε περίπτωση ανάγκης** όπου θα γίνει "
+"δηλαδή η ενεργοποίηση διαμοιρασμού αρχείων σας σε χρόνο που θα ορίσετε σε"
+" περίπτωση που σας συμβεί κάτι. Εάν δεν σας συμβεί τίποτα μπορείτε να "
+"ακυρώσετε την υπηρεσία πριν αυτή ξεκινήσει."
-#: ../../source/advanced.rst:51
+#: ../../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 ""
-"**Η προγραμματισμένη διακοπή της υπηρεσίας διαμοιρασμού OnionShare, είναι "
-"χρήσιμη για τον περιορισμό της έκθεσής σας**, όπως εάν επιθυμείτε τον "
+"**Η προγραμματισμένη διακοπή της υπηρεσίας διαμοιρασμού OnionShare, είναι"
+" χρήσιμη για τον περιορισμό της έκθεσής σας**, όπως εάν επιθυμείτε τον "
"διαμοιρασμό κρυφών αρχείων στο Διαδίκτυο για συγκεκριμένο χρόνο."
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Περιβάλλον γραμμής εντολών"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
@@ -182,7 +205,7 @@ msgstr ""
"Σε μια εναλλακτική του γραφικού περιβάλοντος, το OnionShare διαθέτει "
"λειτουργία με γραμμή εντολών."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
@@ -190,45 +213,45 @@ msgstr ""
"Μπορείτε να εγκαταστήσετε την έκδοση με γραμμή εντολών του OnionShare με "
"χρήση του ``pip3``::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
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``"
+"Υπενθυμίζεται ότι πάντοτε χρειάζεται η εγκατάσταση των πακέτων του "
+"``tor``. Σε macOS, εγκαταστήστε το με: ``brew install tor``"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Και εκτελέστε όπως:"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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 ""
-"Εάν κάνετε εγκατάσταση του OnionShare με χρήση πακέτου του Linux Snapcraft, "
-"εκτελέστε την εντολή ``onionshare.cli`` για πρόσβαση στο περιβάλλον γραμμής "
-"εντολών."
+"Εάν κάνετε εγκατάσταση του OnionShare με χρήση πακέτου του Linux "
+"Snapcraft, εκτελέστε την εντολή ``onionshare.cli`` για πρόσβαση στο "
+"περιβάλλον γραμμής εντολών."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Χρήση"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-"Μπορείτε να περιηγηθείτε στην τεκμηρίωση της γραμμής εντολών με ``onionshare "
-"--help``::"
+"Μπορείτε να περιηγηθείτε στην τεκμηρίωση της γραμμής εντολών με "
+"``onionshare --help``::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Διευθύνσεις παλαιού τύπου"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
@@ -236,7 +259,7 @@ msgstr ""
"Το OnionShare χρησιμοποιεί απο προεπιλογή υπηρεσίες onion Tor v3. Τη "
"μοντέρνα εκδοχή διευθύνσεων 56 χαρακτήρων, για παράδειγμα::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
@@ -244,15 +267,15 @@ msgstr ""
"Το OnionShare υποστηρίζει ακόμη τις διευθύνσεις onion v2, παλαιού τύπου "
"διευθύνσεις των 16 χαρακτήρων, για παράδειγμα::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
-"Το OnionShare αποκαλεί τις διευθύνσεις onion v2 \"παλαιές διευθύνσεις\" και "
-"δεν τις προτείνει, καθώς οι διευθύνσεις onion v3 είναι ποιο ασφαλείς."
+"Το OnionShare αποκαλεί τις διευθύνσεις onion v2 \"παλαιές διευθύνσεις\" "
+"και δεν τις προτείνει, καθώς οι διευθύνσεις onion v3 είναι ποιο ασφαλείς."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -261,23 +284,23 @@ msgid ""
"cannot remove legacy mode in that tab. Instead you must start a separate "
"service in a separate tab."
msgstr ""
-"Για χρήση των παλαιών διευθύνσεων, πριν την έναρξη του διακομιστή κάντε κλικ "
-"\"Εμφάνιση προχωρημένων ρυθμίσεων\" από την καρτέλα του και επιλέξτε το "
-"\"Χρήση παλαιών διευθύνσεων (υπηρεσία onion v2, μη προτεινόμενη)\". Σε "
-"παλαιή κατάσταση μπορείτε να ενεργοποιήσετε την αυθεντικοποίηση πελάτη. Μετά "
-"την έναρξη του διακομιστή, δεν μπορείτε να αφαιρέσετε την παλαιά κατάσταση. "
-"Θα πρέπει να εκκινήσετε νέα υπηρεσία σε νέα καρτέλα."
-
-#: ../../source/advanced.rst:150
+"Για χρήση των παλαιών διευθύνσεων, πριν την έναρξη του διακομιστή κάντε "
+"κλικ \"Εμφάνιση προχωρημένων ρυθμίσεων\" από την καρτέλα του και επιλέξτε"
+" το \"Χρήση παλαιών διευθύνσεων (υπηρεσία onion v2, μη προτεινόμενη)\". "
+"Σε παλαιή κατάσταση μπορείτε να ενεργοποιήσετε την αυθεντικοποίηση "
+"πελάτη. Μετά την έναρξη του διακομιστή, δεν μπορείτε να αφαιρέσετε την "
+"παλαιά κατάσταση. Θα πρέπει να εκκινήσετε νέα υπηρεσία σε νέα καρτέλα."
+
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
"2021, and legacy onion services will be removed from OnionShare before "
"then."
msgstr ""
-"Το Tor Project σχεδιάζει την `πλήρη απενεργοποίηση των υπηρεσιών onion v2 "
-"<https://blog.torproject.org/v2-deprecation-timeline>`_ στις 15 Οκτωβρίου "
-"2021 και την αφαίρεση των παλαιών onion υπηρεσιών νωρίτερα."
+"Το Tor Project σχεδιάζει την `πλήρη απενεργοποίηση των υπηρεσιών onion v2"
+" <https://blog.torproject.org/v2-deprecation-timeline>`_ στις 15 "
+"Οκτωβρίου 2021 και την αφαίρεση των παλαιών onion υπηρεσιών νωρίτερα."
#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
#~ msgstr ""
diff --git a/docs/source/locale/el/LC_MESSAGES/develop.po b/docs/source/locale/el/LC_MESSAGES/develop.po
index ef0f3238..c844e2e9 100644
--- a/docs/source/locale/el/LC_MESSAGES/develop.po
+++ b/docs/source/locale/el/LC_MESSAGES/develop.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: 2020-11-15 14:43-0800\n"
-"PO-Revision-Date: 2020-12-01 17:29+0000\n"
-"Last-Translator: george k <norhorn@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Panagiotis Vasilopoulos <hello@alwayslivid.com>\n"
"Language: el\n"
+"Language-Team: el <LL@li.org>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -38,15 +37,16 @@ msgid ""
"<https://keybase.io/team/onionshare>`_. Within the app, go to \"Teams\", "
"click \"Join a Team\", and type \"onionshare\"."
msgstr ""
-"Το OnionShare έχει μια ανοιχτή πιστοποιημένη (Keybase) ομάδα για να συζητά "
-"το έργο, να υποβάλει ερωτήσεις, να μοιραστεί ιδέες και σχέδια και να κάνει "
-"σχέδια για μελλοντική ανάπτυξη. (Είναι επίσης ένας εύκολος τρόπος για την "
-"αποστολή κρυπτογραφημένων μηνυμάτων στην κοινότητα του OnionShare, όπως οι "
-"διευθύνσεις OnionShare.) Για να χρησιμοποιήσετε το Keybase, κατεβάστε την `"
-"εφαρμογή Keybase <https://keybase.io/download>`_ , δημιουργήστε λογαριασμό "
-"και `εγγραφείτε στην ομάδα <https://keybase.io/team/onionshare>`_. Μέσα στην "
-"εφαρμογή, μεταβείτε στην ενότητα \"Ομάδες\", κάντε κλικ στην επιλογή "
-"\"Συμμετοχή σε ομάδα\" και πληκτρολογήστε το \"onionshare\"."
+"Το OnionShare έχει ένα κανάλι συζητήσεων στο Keybase για να μπορέσει ο "
+"καθένας να μιλήσει για αυτό, να υποβάλει ερωτήσεις, να μοιραστεί ιδέες "
+"και σχέδια και να κάνει μελλοντικά σχέδια πάνω σε αυτό. (Είναι επίσης "
+"ένας εύκολος τρόπος για την αποστολή κρυπτογραφημένων μηνυμάτων στην "
+"κοινότητα του OnionShare, όπως οι διευθύνσεις OnionShare.) Για να "
+"χρησιμοποιήσετε το Keybase, κατεβάστε την `εφαρμογή Keybase "
+"<https://keybase.io/download>`_ , δημιουργήστε λογαριασμό και `εγγραφείτε"
+" στην ομάδα <https://keybase.io/team/onionshare>`_. Μέσα στην εφαρμογή, "
+"μεταβείτε στην ενότητα \"Ομάδες\", κάντε κλικ στην επιλογή \"Συμμετοχή σε"
+" ομάδα\" και πληκτρολογήστε \"onionshare\"."
#: ../../source/develop.rst:12
msgid ""
@@ -54,35 +54,37 @@ msgid ""
"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
"and and designers to discuss the project."
msgstr ""
-"Το OnionShare διαθέτει `λίστα email <https://lists.riseup.net/www/subscribe/"
-"onionshare-dev>`_ για προγραμματιστές και σχεδιαστές με σκοό την ανταλλαγή "
-"απόψεων."
+"Το OnionShare διαθέτει `λίστα ηλεκτρονικού ταχυδρομίου "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ για "
+"προγραμματιστές και σχεδιαστές με σκοό την ανταλλαγή απόψεων."
#: ../../source/develop.rst:15
msgid "Contributing Code"
msgstr "Συνεισφορά κώδικα"
#: ../../source/develop.rst:17
+#, fuzzy
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
-"Εάν θέλετε να συνεισφέρετε με κώδικα στο OnionShare, θα πρέπει να εγγραφείτε "
-"στην ομάδα του Keybase για την υποβολή σχετικών ερωτήσεων. Θα πρέπει επίσης "
-"να έχετε διαβάσει όλα τα `ανοιχτά ζητήματα <https://github.com/micahflee/"
-"onionshare/issues>`_ στο GitHub για να δείτε αν υπάρχουν κάποια που θέλετε "
-"να συμμετέχετε."
+"Εάν θέλετε να συνεισφέρετε με κώδικα στο OnionShare, θα πρέπει να "
+"εγγραφείτε στην ομάδα του Keybase για την υποβολή σχετικών ερωτήσεων. Θα "
+"πρέπει επίσης να έχετε διαβάσει όλα τα `ανοιχτά ζητήματα "
+"<https://github.com/micahflee/onionshare/issues>`_ στο GitHub για να "
+"δείτε αν υπάρχουν κάποια που θέλετε να συμμετέχετε."
#: ../../source/develop.rst:22
msgid ""
@@ -90,10 +92,10 @@ 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 ""
-"Όταν είστε έτοιμοι να συνεισφέρετε κώδικα, ανοίξτε ένα αίτημα στο αποθετήριο "
-"του GitHub και ένας διαχειριστής του έργου θα το εξετάσει και πιθανώς θα "
-"υποβάλει ερωτήσεις, θα ζητήσει αλλαγές, θα τον απορρίψει ή θα τον "
-"συγχωνεύσει στο έργο."
+"Όταν είστε έτοιμοι να συνεισφέρετε κώδικα, ανοίξτε ένα αίτημα στο "
+"αποθετήριο του GitHub και ένας διαχειριστής του έργου θα το εξετάσει και "
+"πιθανώς θα υποβάλει ερωτήσεις, θα ζητήσει αλλαγές, θα τον απορρίψει ή θα "
+"τον συγχωνεύσει στο έργο."
#: ../../source/develop.rst:27
msgid "Starting Development"
@@ -102,17 +104,12 @@ msgstr "Έναρξη ανάπτυξης"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"Το OnionShare αναπτύσετε με το Python. Για να ξεκινήσετε, αντιγράψτε το "
-"αποθετήριο από https://github.com/micahflee/onionshare/ και συμβουλευτείτε "
-"το αρχείο ``cli/README.md`` για να μάθετε περισσότερα για τη ρύθμιση της "
-"έκδοσης περιβάλλοντος γραμμής εντολών και του αρχείου ``desktop/README.md`` "
-"για την έκδοση γραφικού περιβάλλοντος."
#: ../../source/develop.rst:32
msgid ""
@@ -120,8 +117,9 @@ msgid ""
"install dependencies for your platform, and to run OnionShare from the "
"source tree."
msgstr ""
-"Αυτά τα αρχεία περιέχουν τις απαραίτητες οδηγίες και εντολές για εγκατάσταση "
-"στην πλατφόρμα σας και την εκτέλεση του OnionShare από τον πηγαίο κώδικα."
+"Αυτά τα αρχεία περιέχουν τις απαραίτητες οδηγίες και εντολές για "
+"εγκατάσταση στην πλατφόρμα σας και την εκτέλεση του OnionShare από τον "
+"πηγαίο κώδικα."
#: ../../source/develop.rst:35
msgid "Debugging tips"
@@ -139,13 +137,14 @@ msgid ""
"initialized, when events occur (like buttons clicked, settings saved or "
"reloaded), and other debug info. For example::"
msgstr ""
-"Όταν προγραμματίζεται, προτείνεται η εκτέλεση του OnionShare από τερματικό "
-"και τη χρήση εντολής με ``--verbose`` (or ``-v``). Έτσι εμφανίζονται αρκετές "
-"πληροφορίες στο τερματικό όπως την επίδραση της εντολής στα διάφορα "
-"αντικείμενα, όπως τι σημβαίνει (κάνοντας κλικ στα κουμπιά, αποθήκευση "
-"ρυθμίσεων ή ανανέωση) και άλλων πληροφοριών. Για παράδειγμα::"
+"Όταν προγραμματίζεται, προτείνεται η εκτέλεση του OnionShare από "
+"τερματικό και τη χρήση εντολής με ``--verbose`` (or ``-v``). Έτσι "
+"εμφανίζονται αρκετές πληροφορίες στο τερματικό όπως την επίδραση της "
+"εντολής στα διάφορα αντικείμενα, όπως τι σημβαίνει (κάνοντας κλικ στα "
+"κουμπιά, αποθήκευση ρυθμίσεων ή ανανέωση) και άλλων πληροφοριών. Για "
+"παράδειγμα::"
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
@@ -154,45 +153,45 @@ msgstr ""
"εκτέλεση της μεθόδου ``Common.log`` από ``onionshare/common.py``. Για "
"παράδειγμα::"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
-"Αυτό είναι χρήσιμο όταν μαθένετ για την αλυσίδα των γεγονότων που συμβαίνουν "
-"κατά τη χρήση του OnionShare, ή την τιμή ορισμένων μεταβλητών πριν και μετά "
-"την επεξεργασία τους."
+"Αυτό είναι χρήσιμο όταν μαθένετ για την αλυσίδα των γεγονότων που "
+"συμβαίνουν κατά τη χρήση του OnionShare, ή την τιμή ορισμένων μεταβλητών "
+"πριν και μετά την επεξεργασία τους."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr "Μόνο τοπικά"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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 ""
"Το Tor είναι αργό και είναι συχνά χρήσιμο να παραλείψετε την έναρξη των "
-"υπηρεσιών onion κατά τη διάρκεια της ανάπτυξης. Μπορείτε να το κάνετε αυτό "
-"προσθέτοντας το ``--local-only``. Για παράδειγμα::"
+"υπηρεσιών onion κατά τη διάρκεια της ανάπτυξης. Μπορείτε να το κάνετε "
+"αυτό προσθέτοντας το ``--local-only``. Για παράδειγμα::"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
"Σε αυτή την περίπτωση, θα φορτώσει το URL ``http://onionshare:train-"
-"system@127.0.0.1:17635`` σε κανονικό περιηγητή όπως το Firefox αντί του Tor "
-"Browser."
+"system@127.0.0.1:17635`` σε κανονικό περιηγητή όπως το Firefox αντί του "
+"Tor Browser."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Συνεισφορά μεταφράσεων"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -203,20 +202,20 @@ msgstr ""
"Βοηθήστε το OnionShare να είναι ευκολότερο στη χρήση, πιο οικείο και "
"φιλόξενο για τους χρήστες, μεταφράζοντάς το στο `Hosted Weblate "
"<https://hosted.weblate.org/projects/onionshare/>`_. Διατηρείτε πάντα το "
-"\"OnionShare\" με λατινικά γράμματα και χρησιμοποιήστε το \"OnionShare ("
-"τοπικο όνομα)\" εάν χρειάζεται."
+"\"OnionShare\" με λατινικά γράμματα και χρησιμοποιήστε το \"OnionShare "
+"(τοπικο όνομα)\" εάν χρειάζεται."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-"Για να βοηθήσετε στη μετάφραση, δημιουργήστε ένα λογαριασμό στο Weblate και "
-"αρχίστε τη συνεισφορά σας."
+"Για να βοηθήσετε στη μετάφραση, δημιουργήστε ένα λογαριασμό στο Weblate "
+"και αρχίστε τη συνεισφορά σας."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr "Προτάσεις αυθεντικών Αγγλικών ορισμών"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
@@ -224,7 +223,7 @@ msgstr ""
"Κάποιες φορές οι πρωτότυποι Αγγλικοί ορισμοί είναι λάθος ή δεν συμφωνούν "
"μεταξύ της εφαρμογής και της τεκμηρίωσης."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 "
@@ -232,15 +231,15 @@ msgid ""
"the usual code review processes."
msgstr ""
"Για βελτιώσεις ορισμών του αρχείου προέλευσης, προσθέστε το @kingu στο "
-"σχόλιό σας στο Weblate ή ανοίξτε ένα ζήτημα στο GitHub. Έτσι διασφαλίζετε "
-"ότι όλοι οι προγραμματιστές θα δούν την πρόταση και μπορούν ενδεχομένως να "
-"προβούν σε τροποποίηση μέσω των συνήθων διαδικασιών ελέγχου κώδικα."
+"σχόλιό σας στο Weblate ή ανοίξτε ένα ζήτημα στο GitHub. Έτσι διασφαλίζετε"
+" ότι όλοι οι προγραμματιστές θα δούν την πρόταση και μπορούν ενδεχομένως "
+"να προβούν σε τροποποίηση μέσω των συνήθων διαδικασιών ελέγχου κώδικα."
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Κατάσταση μεταφράσεων"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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: "
@@ -465,3 +464,26 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "Το OnionShare αναπτύσετε με το Python."
+#~ " Για να ξεκινήσετε, αντιγράψτε το "
+#~ "αποθετήριο από https://github.com/micahflee/onionshare/"
+#~ " και συμβουλευτείτε το αρχείο "
+#~ "``cli/README.md`` για να μάθετε περισσότερα"
+#~ " για τη ρύθμιση της έκδοσης "
+#~ "περιβάλλοντος γραμμής εντολών και του "
+#~ "αρχείου ``desktop/README.md`` για την έκδοση"
+#~ " γραφικού περιβάλλοντος."
+
diff --git a/docs/source/locale/el/LC_MESSAGES/features.po b/docs/source/locale/el/LC_MESSAGES/features.po
index abece272..029d1215 100644
--- a/docs/source/locale/el/LC_MESSAGES/features.po
+++ b/docs/source/locale/el/LC_MESSAGES/features.po
@@ -7,16 +7,16 @@ msgid ""
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:43-0800\n"
-"PO-Revision-Date: 2020-12-02 19:29+0000\n"
-"Last-Translator: george k <norhorn@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Iris S. <iris.sousouni@protonmail.com>\n"
+"Language-Team: el <LL@li.org>\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -30,7 +30,7 @@ msgid ""
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
"Ο διακομιστής ιστού εκτελείται τοπικά στον υπολογιστή σας και είναι "
-"προσβάσιμος ως onion υπηρεσία `Tor<https://www.torproject.org/>`_` "
+"προσβάσιμος ως υπηρεσία \"onion\" του `Tor<https://www.torproject.org/>`_` "
"<https://community.torproject.org/onion-services/>`_."
#: ../../source/features.rst:8
@@ -39,7 +39,8 @@ msgid ""
"password. A typical OnionShare address might look something like this::"
msgstr ""
"Από προεπιλογή, οι διευθύνσεις ιστού του OnionShare προστατεύονται με ένα "
-"τυχαίο κωδικό πρόσβασης. Μια τυπική διεύθυνση OnionShare μοιάζει κάπως έτσι::"
+"τυχαίο κωδικό πρόσβασης. Μια διεύθυνση OnionShare μοιάζει συνήθως κάπως "
+"έτσι::"
#: ../../source/features.rst:12
msgid ""
@@ -48,18 +49,19 @@ msgid ""
"something less secure like unencrypted e-mail, depending on your `threat "
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
-"Είστε υπεύθυνοι για την ασφαλή κοινή χρήση της διεύθυνσης URL "
-"χρησιμοποιώντας ένα κανάλι επικοινωνίας της επιλογής σας, όπως με ένα "
-"κρυπτογραφημένο μήνυμα ή χρησιμοποιώντας κάτι λιγότερο ασφαλές, όπως μη "
-"κρυπτογραφημένο email, ανάλογα με το `μοντέλο απειλής σας <https://ssd.eff."
-"org/module/your-security-plan>`_."
+"Είστε υπεύθυνος για την ασφαλή κοινή χρήση της διεύθυνσης ιστού "
+"χρησιμοποιώντας ένα κανάλι επικοινωνίας της επιλογής σας, όπως ένα "
+"κρυπτογραφημένο μήνυμα ή και χρησιμοποιώντας σχετικά λιγότερο ασφαλή "
+"κανάλια, όπως μη κρυπτογραφημένα μηνύματα ηλεκτρονικού ταχυδρομείου, ανάλογα "
+"με το `αν βρίσκεστε σε ρίσκο <https://ssd.eff.org/module/your-security-"
+"plan>`_."
#: ../../source/features.rst:14
msgid ""
"The people you send the URL to then copy and paste it into their `Tor "
"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
msgstr ""
-"Οι αποδέκτες της διεύθυνσης URL πρέπει να την αντιγράψουν στο `Tor Browser "
+"Οι αποδέκτες πρέπει να αντιγράψουν την διεύθυνση ιστού στο `Tor Browser "
"<https://www.torproject.org/>`_ για να αποκτήσουν πρόσβαση στην υπηρεσία "
"OnionShare."
@@ -70,11 +72,11 @@ msgid ""
"until your laptop is unsuspended and on the Internet again. OnionShare "
"works best when working with people in real-time."
msgstr ""
-"Εάν εκτελέσετε Το OnionShare στο laptop σας για να στείλετε αρχεία και τεθεί "
-"σε αναστολή πριν την ολοκλήρωση της μεταφοράς, η υπηρεσία δεν θα είναι "
-"διαθέσιμη έως ότου ο φορητός υπολογιστής σας συνδεθεί ξανά στο Διαδίκτυο. Το "
-"OnionShare λειτουργεί καλύτερα όταν λειτουργεί με τους ανθρώπους σε "
-"πραγματικό χρόνο."
+"Εάν χρησιμοποιήσετε το OnionShare στον φορητό υπολογιστή σας για να στείλετε "
+"αρχεία και ο υπολογιστής αυτός κλείσει προτού ολοκληρωθεί η μεταφορά, δεν θα "
+"είναι δυνατή η ολοκλήρωση της έως ότου ο φορητός υπολογιστής σας συνδεθεί "
+"ξανά στο Διαδίκτυο. Το OnionShare λειτουργεί καλύτερα όταν συνεργάζεστε με "
+"τον παραλήπτη σε πραγματικό χρόνο."
#: ../../source/features.rst:18
msgid ""
@@ -84,11 +86,12 @@ msgid ""
"Tor onion services too, it also protects your anonymity. See the "
":doc:`security design </security>` for more info."
msgstr ""
-"Επειδή ο υπολογιστής σας είναι ο διακομιστής ιστού, *κανένας τρίτος δεν "
-"μπορεί να έχει πρόσβαση σε οτιδήποτε συμβαίνει στο OnionShare*, ούτε καν οι "
-"προγραμματιστές του OnionShare. Είναι εντελώς ιδιωτικό. Και επειδή το "
-"OnionShare βασίζεται σε υπηρεσίες Tor, προστατεύει και την ανωνυμία σας. "
-"Δείτε για περισσότερες πληροφορίες :doc:`σχεδίαση ασφαλείας </security>`."
+"Επειδή ο υπολογιστής σας είναι ο διακομιστής ιστού, *κανένας κακοπροαίρετος "
+"τρίτος δεν μπορεί να ξέρει τι γίνεται στο OnionShare*, ούτε καν οι "
+"προγραμματιστές του OnionShare. Μπορείτε να το δείτε μόνο εσείς. Ακόμα, "
+"επειδή το OnionShare βασίζεται πάνω στις υπηρεσίες του δικτύου Tor, η "
+"ανωνυμία σας προστατεύεται. Δείτε για περισσότερες πληροφορίες :doc:`"
+"σχεδίαση ασφαλείας </security>`."
#: ../../source/features.rst:21
msgid "Share Files"
@@ -101,17 +104,17 @@ msgid ""
"share, and click \"Start sharing\"."
msgstr ""
"Μπορείτε να χρησιμοποιήσετε το OnionShare για να στείλετε αρχεία και "
-"φακέλους σε άτομα με ασφάλεια και ανώνυμα. Ανοίξτε τη καρτέλα διαμοιρασμός "
+"φακέλους σε άτομα ανώνυμα και με ασφάλεια. Ανοίξτε μία καρτέλα διαμοιρασμού "
"αρχείων, μεταφέρετε και αποθέστε αρχεία και φακέλους που θέλετε να "
"μοιραστείτε και κάντε κλικ στην επιλογή \"Εκκίνηση διαμοιρασμού\"."
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
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 ""
"Μετά την προσθήκη αρχείων, σιγουρευτείτε ότι επιλέξατε τις σωστές ρυθμίσεις "
-"πριν την έναρξη του διαμοιρασμού."
+"πριν ξεκινήσετε τον διαμοιρασμό."
#: ../../source/features.rst:31
msgid ""
@@ -121,11 +124,11 @@ msgid ""
" files have been sent (uncheck to allow downloading individual files)\" "
"box."
msgstr ""
-"Με την ολοκλήρωση αποστολής των αρχείων σας, το OnionShare σταματά αυτόματα "
-"τον διακομιστή, αφαιρώντας την ιστοσελίδα από το Διαδίκτυο. Για να "
-"επιτρέψετε τη λήψη απο περισσότερους χρήστες, αποεπιλέξτε το \"Τερματισμός "
-"διαμοιρασμού με την ολοκλήρωση αποστολής (αποεπιλέξτε ώστε να επιτρέπεται η "
-"λήψη μεμονωμένων αρχείων)\"."
+"Με την ολοκλήρωση αποστολής των αρχείων σας, το OnionShare σταματά "
+"αυτόματα τον διακομιστή, αφαιρώντας την ιστοσελίδα από το Διαδίκτυο. Για "
+"να επιτρέψετε τη λήψη απο περισσότερους χρήστες, αποεπιλέξτε το "
+"\"Τερματισμός διαμοιρασμού με την ολοκλήρωση αποστολής (αποεπιλέξτε ώστε "
+"να επιτρέπεται η λήψη μεμονωμένων αρχείων)\"."
#: ../../source/features.rst:34
msgid ""
@@ -134,7 +137,8 @@ msgid ""
" the files."
msgstr ""
"Επίσης, με την κατάργηση της επιλογής, μπορεί να πραγματοποιηθεί λήψη "
-"μεμονωμένων αρχείων και όχι μόνο της συμπιεσμένης έκδοσης όλων των αρχείων."
+"μεμονωμένων αρχείων και όχι μόνο της συμπιεσμένης έκδοσης όλων των "
+"αρχείων."
#: ../../source/features.rst:36
msgid ""
@@ -143,10 +147,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 ""
-"Όταν είστε έτοιμοι, κάντε κλικ στο κουμπί \"Έναρξη διαμοιρασμού\". Πάντοτε "
-"μπορείτε να κάνετε κλικ στο \"Διακοπή διαμοιρασμού\" ή να κάνετε έξοδο από "
-"το OnionShare, με τον άμεσο τερματισμό της ιστοσελίδας. Μπορείτε επίσης να "
-"δείτε το ιστορικό και την πρόοδο λήψεων με κλικ στο εικονίδιο \"↑\"."
+"Όταν είστε έτοιμοι, κάντε κλικ στο κουμπί \"Έναρξη διαμοιρασμού\". "
+"Πάντοτε μπορείτε να κάνετε κλικ στο \"Διακοπή διαμοιρασμού\" ή να κάνετε "
+"έξοδο από το OnionShare, με τον άμεσο τερματισμό της ιστοσελίδας. "
+"Μπορείτε επίσης να δείτε το ιστορικό και την πρόοδο λήψεων με κλικ στο "
+"εικονίδιο \"↑\"."
#: ../../source/features.rst:40
msgid ""
@@ -155,9 +160,10 @@ msgid ""
"or the person is otherwise exposed to danger, use an encrypted messaging "
"app."
msgstr ""
-"Τώρα που αποκτήσατε το OnionShare, αντιγράψτε και στείλτε τη διεύθυνση λήψης "
-"των αρχείων σας. Εάν χρειάζεστε περισσότερη ασφάλεια ή ο αποδέκτης δεν είναι "
-"έμπιστος, χρησιμοποιήστε εφαρμογή αποστολής κρυπτογραφημένου μηνύματος."
+"Τώρα που αποκτήσατε το OnionShare, αντιγράψτε και στείλτε τη διεύθυνση "
+"λήψης των αρχείων σας. Εάν χρειάζεστε περισσότερη ασφάλεια ή ο αποδέκτης "
+"δεν είναι έμπιστος, χρησιμοποιήστε εφαρμογή αποστολής κρυπτογραφημένου "
+"μηνύματος."
#: ../../source/features.rst:42
msgid ""
@@ -166,59 +172,109 @@ msgid ""
"downloaded directly from your computer by clicking the \"Download Files\""
" link in the corner."
msgstr ""
-"Ο αποδέκτης θα πρέπει να αντιγράψει τη διεύθυνση στο Tor Browser. Μετά τη "
-"σύνδεση με τον τυχαίο κωδικό πρόσβασης, τα αρχεία μπορούν να ληφθούν "
+"Ο αποδέκτης θα πρέπει να αντιγράψει τη διεύθυνση στο Tor Browser. Μετά τη"
+" σύνδεση με τον τυχαίο κωδικό πρόσβασης, τα αρχεία μπορούν να ληφθούν "
"απευθείας από τον υπολογιστή σας με κλικ στον σύνδεσμο \"Λήψη αρχείων\"."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr "Λήψη αρχείων"
+msgid "Receive Files and Messages"
+msgstr "Λήψη αρχείων και μηνυμάτων"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
-"Μπορείτε να χρησιμοποιήσετε το OnionShare για να επιτρέψετε σε άλλους την "
-"αποστολή αρχείων στον υπολογιστή σας, μετατρέποντάς τον σε ένα ανώνυμο "
-"dropbox. Ανοίξτε μία \"Καρτέλα λήψης\", επιλέξτε τη διαδρομή αποθήκευσης "
-"αρχείων και κάντε κλικ στο \"Εκκίνηση κατάστασης λήψης\"."
+"Μπορείτε να χρησιμοποιήσετε το OnionShare για να επιτρέψετε σε άλλους να "
+"υποβάλουν ανώνυμα αρχεία και μηνύματα απευθείας στον υπολογιστή σας. Ανοίξτε "
+"την καρτέλα λήψεων και επιλέξτε τις ρυθμίσεις που θέλετε."
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+"Μπορείτε να επιλέξετε έναν φάκελο, μέσα στον οποίο θα αποθηκεύονται τα "
+"υποβληθέντα μηνύματα και αρχεία."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
-"Αυτό θα ξεκινήσει την υπηρεσία του OnionShare. Οποιοσδήποτε προσθέσει τη "
-"διεύθυνση στο Tor Browser του, θα μπορεί να ανεβάσει αρχεία στον υπολογιστή "
-"σας."
+"Μπορείτε να επιλέξετε \"Απενεργοποίηση υποβολής κειμένου\" εάν θέλετε να "
+"επιτρέπετε το ανέβασαμα μόνο αρχείων, και μπορείτε να επιλέξετε "
+"\"Απενεργοποίηση υποβολής αρχείων\" εάν θέλετε να επιτρέπετε την υποβολή "
+"ανώνυμων μηνυμάτων κειμένου, για παράδειγμα για μια ανώνυμη φόρμα "
+"επικοινωνίας."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Μπορείτε να επιλέξετε \"Χρήση ειδοποίησης webhook\" και έπειτα να επιλέξετε "
+"διεύθυνση webhook εάν θέλετε να ειδοποιηθείτε όταν κάποιος υποβάλλει αρχεία "
+"ή μηνύματα στην υπηρεσία OnionShare σας. Εάν χρησιμοποιήσετε αυτή τη "
+"λειτουργία, το OnionShare θα δώσει αίτημα HTTP POST σε αυτή τη διεύθυνση "
+"όποτε κάποιος υποβάλλει αρχεία ή μηνύματα. Για παράδειγμα, έαν θέλετε να "
+"λάβετε ένα κρυπτογραφημένο μήνυμα στην εφαρμογή μηνυμάτων `Keybase "
+"<https://keybase.io/>`_, μπορείτε να αρχίσετε μία συνομιλία με `@webhookbot "
+"<https://keybase.io/webhookbot>`_, να πληκτρολογήσετε ``!webhook create "
+"onionshare-alerts``, και θα ανταποκριθεί με μία διεύθυνση. Χρησιμοποιήστε "
+"την ως διεύθυνση ειδοποιήσεων webhook. Εάν κάποιος ανεβάσει ένα αρχείο στην "
+"υπηρεσία σας με λειτουργία λήψης το @webhookbot θα σας στείλει ένα μήνυμα "
+"στο Keybase για να σας ενημερώσει αμέσως."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Όταν είστε έτοιμος, πατήστε \"Έναρξη λειτουργίας λήψης\". Αυτό θα εκκινήσει "
+"την υπηρεσία OnionShare. Οποιοσδήποτε φορτώνει αυτή τη διεύθυνση στον Tor "
+"Browser θα μπορέσει να στείλει αρχεία και μηνύματα, τα οποία θα αποθηκευτούν "
+"στον υπολογιστή σας."
+
+#: ../../source/features.rst:67
+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 ""
"Μπορείτε επίσης κάνοντας κλικ στο εικονίδιο \"↓\" από την επάνω αριστερή "
"γωνία, να δείτε το ιστορικό και την πρόοδο των αρχείων που σας στέλνουν."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
-msgstr "Δείτε παρακάτω πως εμφανίζονται τα αρχεία που σας στέλνουν."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
+msgstr ""
+"Δείτε παρακάτω πως θα φανεί για το άτομο που θα σας στείλει μηνύματα και "
+"αρχεία."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-"Μόλις κάποιος προσθέσει αρχεία στην υπηρεσία λήψεώς σας, απο προεπιλογή θα "
-"αποθηκευτούν στο φάκελο ``OnionShare`` στον αρχικό φάκελο του υπολογιστή "
-"σας, με αυτόματο διαχωρισμό και οργάνωση σύμφωνα με το χρόνο προσθήκης."
+"Όταν κάποιος υποβάλλει αρχεία ή μηνύματα στην υπηρεσία λήψης αρχείων και "
+"μηνυμάτων, αυτά θα αποθηκευτούν σε έναν φάκελο με το όνομα ``OnionShare`` "
+"στον κύριο φάκελο του υπολογιστή σας από προεπιλογή. Αυτός ο φάκελος θα "
+"ταξινομείται ανάλογα με την ώρα που υποβλήθηκαν τα αρχεία."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -226,17 +282,18 @@ msgid ""
"quite as secure version of `SecureDrop <https://securedrop.org/>`_, the "
"whistleblower submission system."
msgstr ""
-"Η ρύθμιση μιας υπηρεσίας λήψεως OnionShare είναι χρήσιμη σε δημοσιογράφους "
-"και λοιπούς που χρειάζονται την ασφαλή ανταλλαγή εγγράφων από ανώνυμες "
-"πηγές. Όταν χρησιμοποιείται με αυτόν τον τρόπο, το OnionShare μοιάζει με μια "
-"ελαφριά, απλούστερη και όχι τόσο ασφαλή έκδοση του `SecureDrop "
-"<https://securedrop.org/>`_, το σύστημα υποβολής καταγγελλιών."
+"Η ρύθμιση μιας υπηρεσίας λήψεως OnionShare είναι χρήσιμη σε "
+"δημοσιογράφους και λοιπούς που χρειάζονται την ασφαλή ανταλλαγή εγγράφων "
+"από ανώνυμες πηγές. Όταν χρησιμοποιείται με αυτόν τον τρόπο, το "
+"OnionShare μοιάζει με μια ελαφριά, απλούστερη και όχι τόσο ασφαλή έκδοση "
+"του `SecureDrop <https://securedrop.org/>`_, το σύστημα υποβολής "
+"καταγγελλιών."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
-msgstr "Χρησιμοποιήστε το με δική σας ευθύνη"
+msgstr "Η χρήση του γίνεται με δική σας ευθύνη"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail attachments, it's possible someone could "
"try to attack your computer by uploading a malicious file to your "
@@ -244,11 +301,12 @@ msgid ""
"protect your system from malicious files."
msgstr ""
"Όπως και με τα κακόβουλα συνημμένα e-mail, είναι πιθανό κάποιος να "
-"προσπαθήσει να επιτεθεί στον υπολογιστή σας ανεβάζοντας ένα κακόβουλο αρχείο "
-"στην υπηρεσία του OnionShare σας. Το OnionShare δεν διαθέτει μηχανισμούς "
-"ασφαλείας για την προστασία του συστήματός σας από κακόβουλα αρχεία."
+"προσπαθήσει να επιτεθεί στον υπολογιστή σας ανεβάζοντας ένα κακόβουλο "
+"αρχείο στην υπηρεσία του OnionShare σας. Το OnionShare δεν διαθέτει "
+"μηχανισμούς ασφαλείας για την προστασία του συστήματός σας από κακόβουλα "
+"αρχεία."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -257,54 +315,62 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
-"Εάν λάβετε ένα έγγραφο του Office ή ένα PDF μέσω του OnionShare, μπορείτε να "
-"μετατρέψετε αυτά τα έγγραφα σε PDFs που είναι ασφαλή για άνοιγμα με το `"
-"Dangerzone <https://dangerzone.rocks/>`_. Μπορείτε επίσης να προστατευτείτε "
-"ανοίγοντας μη έμπιστα αρχεία με το `Tails <https://tails.boum.org/>`_ ή στο `"
-"Qubes <https://qubes-os.org/>`_."
+"Εάν λάβετε ένα έγγραφο του Office ή ένα PDF μέσω του OnionShare, μπορείτε"
+" να μετατρέψετε αυτά τα έγγραφα σε PDFs που είναι ασφαλή για άνοιγμα με "
+"το `Dangerzone <https://dangerzone.rocks/>`_. Μπορείτε επίσης να "
+"προστατευτείτε ανοίγοντας μη έμπιστα αρχεία με το `Tails "
+"<https://tails.boum.org/>`_ ή στο `Qubes <https://qubes-os.org/>`_."
+
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Ωστόσο, είναι πάντα ασφαλές να ανοίγετε μηνύματα κειμένου που αποστέλλονται "
+"σε εσάς μέσω του OnionShare."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr "Συμβουλές για τη λειτουργία υπηρεσίας λήψης"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). 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`)."
+"προφίλ κοινωνικών δικτύων σας, αποθηκεύστε την καρτέλα (δείτε "
+":ref:`save_tabs`) και ενεργοποιήστε την λειτουργία δημόσιας υπηρεσίας (δείτε "
+":ref:`turn_off_passwords`)."
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr "Φιλοξενήστε μια ιστοσελίδα"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
"\"Start sharing\" when you are ready."
msgstr ""
-"Για να φιλοξενήσετε μια στατική HTML ιστοσελίδα με το OnionShare, ανοίξτε "
-"μια καρτέλα ιστοσελίδας, σύρετε τα αρχεία και τους φακέλους που αποτελούν το "
-"στατικό περιεχόμενο και κάντε κλικ στο \"Εκκίνηση διαμοιρασμού\" όταν είστε "
-"έτοιμοι."
+"Για να φιλοξενήσετε μια στατική HTML ιστοσελίδα με το OnionShare, ανοίξτε"
+" μια καρτέλα ιστοσελίδας, σύρετε τα αρχεία και τους φακέλους που "
+"αποτελούν το στατικό περιεχόμενο και κάντε κλικ στο \"Εκκίνηση "
+"διαμοιρασμού\" όταν είστε έτοιμοι."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -313,28 +379,28 @@ msgid ""
"websites that execute code or use databases. So you can't for example use"
" WordPress.)"
msgstr ""
-"Εάν προσθέσετε αρχείο ``index.html``, θα φορτώνεται με κάθε επίσκεψη στον "
-"ιστότοπό σας. Θα πρέπει επίσης να συμπεριλάβετε και άλλα αρχεία HTML, αρχεία "
-"CSS, αρχεία JavaScript και εικόνες που θα αποτελούν την ιστοσελίδα. ("
+"Εάν προσθέσετε αρχείο ``index.html``, αυτό θα φορτώνεται με κάθε επίσκεψη "
+"στον ιστότοπό σας. Θα πρέπει επίσης να συμπεριλάβετε και άλλα αρχεία HTML, "
+"αρχεία CSS, αρχεία JavaScript και εικόνες που θα αποτελούν την ιστοσελίδα. ("
"Σημειώστε ότι το OnionShare υποστηρίζει μόνο φιλοξενία *στατικών* "
"ιστοσελίδων. Δεν μπορεί να φιλοξενήσει ιστότοπους που εκτελούν κώδικα ή "
"χρησιμοποιούν βάσεις δεδομένων. Επομένως, δεν μπορείτε, για παράδειγμα, να "
-"χρησιμοποιήσετε το WordPress)."
+"χρησιμοποιήσετε το WordPress.)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 ""
"Εάν δεν διαθέτετε αρχείο ``index.html``, θα εμφανιστεί μια λίστα καταλόγου "
-"οπού θα μπορεί να γίνει η λήψη τους."
+"οπού θα μπορεί να γίνει η λήψη του."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
-msgstr "Περιεχόμε πολιτικής ασφαλείας"
+msgstr "Πολιτική ασφάλειας περιεχομένου"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -343,11 +409,12 @@ msgid ""
"page."
msgstr ""
"Από προεπιλογή το OnionShare σας βοηθά στην ασφάλιση της ιστοσελίδας "
-"ορίζοντας την επικεφαλίδα `Περιεχόμενο πολιτικής ασφαλείας <https://en."
-"wikipedia.org/wiki/Content_Security_Policy>`_. Ωστόσο, αυτό εμποδίζει τη "
-"φόρτωση περιεχομένου τρίτων εντός της ιστοσελίδας."
+"ορίζοντας την επικεφαλίδα `Περιεχόμενο πολιτικής ασφαλείας "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_. Ωστόσο, αυτό "
+"εμποδίζει τη φόρτωση περιεχομένου τρίτων εντός της ιστοσελίδας."
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
+#, 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 "
@@ -355,15 +422,15 @@ msgid ""
"before starting the service."
msgstr ""
"Εάν θέλετε να φορτώσετε περιεχόμενο από ιστότοπους τρίτων, όπως στοιχεία ή "
-"βιβλιοθήκες JavaScript από CDN, επιλέξτε το πλαίσιο \"Μην στέλνετε την "
-"κεφαλίδα Πολιτικής ασφάλειας περιεχομένου (επιτρέπει στην ιστοσελίδα σας να "
-"χρησιμοποιεί πόρους τρίτων)\" πριν την εκκίνηση της υπηρεσία."
+"κώδικα JavaScript από CDN, επιλέξτε το πλαίσιο \"Μην στέλνετε την κεφαλίδα "
+"Πολιτικής Ασφαλείας Περιεχομένου (επιτρέπει στην ιστοσελίδα σας να "
+"χρησιμοποιεί πόρους τρίτων)\" πριν την εκκίνηση της υπηρεσίας."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr "Συμβουλές για εκτέλεση μιας υπηρεσίας ιστοσελίδας"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -372,14 +439,16 @@ 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."
-
-#: ../../source/features.rst:110
+"Εάν θέλετε να φιλοξενήσετε μια μακροσκελή ιστοσελίδα με το OnionShare "
+"(που σημαίνει πως χρειάζεται χρόνος για περιήγηση), συνιστάται να το "
+"κάνετε σε έναν ξεχωριστό, αυτόνομο υπολογιστή που είναι πάντα "
+"ενεργοποιημένος και συνδεδεμένος στο Διαδίκτυο και όχι σε αυτόν που "
+"χρησιμοποιείτε σε τακτική βάση. Αποθηκεύστε την καρτέλα (δείτε: "
+":ref:`save_tabs`) ώστε να μπορείτε να την ξανανοίξετε με την ίδια "
+"διεύθυνση εάν κλείσετε το OnionShare."
+
+#: ../../source/features.rst:121
+#, fuzzy
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
@@ -387,20 +456,20 @@ msgstr ""
"Εάν η ιστοσελίδα σας προορίζεται για δημόσια χρήση, πρέπει να δηλωθεί ως "
"δημόσια υπηρεσία (δείτε :ref:`turn_off_passwords`)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr "Συνομιλήστε ανώνυμα"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it to "
"the people you want in the anonymous chat room. If it's important to "
@@ -410,9 +479,9 @@ msgstr ""
"Μετά την εκκίνηση του διακομιστή, αντιγράψτε τη διεύθυνση OnionShare και "
"στείλτε την στα άτομα που θέλετε από ανώνυμο δωμάτιο συνομιλίας. Εάν είναι "
"σημαντικό να περιορίσετε ποιος μπορεί να συμμετάσχει, χρησιμοποιήστε μια "
-"κρυπτογραφημένη εφαρμογή ανταλλαγής μηνυμάτων."
+"εφαρμογή ανταλλαγής κρυπτογραφημένων μηνυμάτων."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 "
@@ -421,22 +490,23 @@ msgid ""
msgstr ""
"Οι χρήστες μπορούν να συμμετέχουν στο δωμάτιο επικοινωνίας με χρήση της "
"διεύθυνσης OnionShare με τον Tor Browser. Το δωμάτιο συνομιλίας απαιτεί τη "
-"χρήση JavasScript, έτσι οι συμμετέχοντες θα πρέπει να ρυθμίσουν την ασφάλεια "
-"του Tor Browser σε \"Βασικό\" ή \"Ασφαλέστερο\" εκτός από \"Ασφαλέστατο\"."
+"χρήση JavaScript, έτσι οι συμμετέχοντες θα πρέπει να ρυθμίσουν την ασφάλεια "
+"του Tor Browser σε \"Βασικό\" ή \"Ασφαλέστερο\" και όχι σε \"Ασφαλέστατο\"."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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:133
+#: ../../source/features.rst:144
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."
@@ -445,7 +515,7 @@ msgstr ""
"μπορεί να αλλάξει το όνομά του και δεν υπάρχει τρόπος επιβεβαίωσης της "
"ταυτότητάς του."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
msgid ""
"However, if you create an OnionShare chat room and securely send the "
"address only to a small group of trusted friends using encrypted "
@@ -454,22 +524,25 @@ msgid ""
msgstr ""
"Ωστόσο, με τη δημιουργία δωματίου συνομιλίας OnionShare και αποστολή με "
"ασφάλεια της διεύθυνση μόνο σε μια μικρή ομάδα αξιόπιστων φίλων "
-"χρησιμοποιώντας κρυπτογραφημένα μηνύματα, μπορείτε να είστε αρκετά σίγουροι "
-"ότι τα άτομα που συμμετέχουν στην αίθουσα συνομιλίας είναι φίλοι σας."
+"χρησιμοποιώντας κρυπτογραφημένα μηνύματα, μπορείτε να είστε αρκετά "
+"σίγουροι ότι τα άτομα που συμμετέχουν στην αίθουσα συνομιλίας είναι φίλοι"
+" σας."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
-msgstr "Πού χρησιμεύει;"
+msgstr "Σε τι χρησιμεύει;"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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 ""
"Εάν χρησιμοποιείτε ήδη μια κρυπτογραφημένη εφαρμογή ανταλλαγής μηνυμάτων, "
-"δεν υπάρχει λόγος του δωματίου συνομιλίας OnionShare; Αφήνει λιγότερα ίχνη."
+"τότε είστε σίγουρος πως πράγματι χρειάζεστε και ένα δωμάτιο συνομιλίας "
+"OnionShare; Τόσο λιγότερα μέσα επικοινωνίας χρησιμοποιείτε, τόσο λιγότερα "
+"ίχνη θα αφήσετε."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -480,15 +553,16 @@ msgid ""
"rooms don't store any messages anywhere, so the problem is reduced to a "
"minimum."
msgstr ""
-"Εάν, για παράδειγμα, στείλετε ένα μήνυμα σε μια ομάδα Signal, ένα αντίγραφο "
-"του μηνύματός σας καταλήγει σε κάθε συσκευή, κάθε μέλους της ομάδας. Ακόμα "
-"κι αν η ενεργοποιηθεί η διαγραφή μηνυμάτων, είναι δύσκολο να επιβεβαιωθεί "
-"ότι όλα τα μηνύματα έχουν πραγματικά διαγραφεί από όλες τις συσκευές και από "
-"οποιαδήποτε άλλη τοποθεσία (όπως βάσεις δεδομένων ειδοποιήσεων) στα οποία "
-"ενδέχεται να έχουν αποθηκευτεί. Τα δωμάτια συνομιλίας OnionShare δεν "
-"αποθηκεύουν μηνύματα πουθενά, οπότε το πρόβλημα μειώνεται στο ελάχιστο."
-
-#: ../../source/features.rst:146
+"Εάν, για παράδειγμα, στείλετε ένα μήνυμα σε μια ομάδα Signal, ένα "
+"αντίγραφο του μηνύματός σας καταλήγει σε κάθε συσκευή, κάθε μέλους της "
+"ομάδας. Ακόμα κι αν η ενεργοποιηθεί η διαγραφή μηνυμάτων, είναι δύσκολο "
+"να επιβεβαιωθεί ότι όλα τα μηνύματα έχουν πραγματικά διαγραφεί από όλες "
+"τις συσκευές και από οποιαδήποτε άλλη τοποθεσία (όπως βάσεις δεδομένων "
+"ειδοποιήσεων) στα οποία ενδέχεται να έχουν αποθηκευτεί. Τα δωμάτια "
+"συνομιλίας OnionShare δεν αποθηκεύουν μηνύματα πουθενά, οπότε το πρόβλημα"
+" μειώνεται στο ελάχιστο."
+
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -497,18 +571,18 @@ msgid ""
"journalist to join the chat room, all without compromosing their "
"anonymity."
msgstr ""
-"Τα δωμάτια συνομιλίας OnionShare είναι επίσης χρήσιμα για άτομα που θέλουν "
-"να συνομιλήσουν ανώνυμα και με ασφάλεια χωρίς να χρειάζεται να δημιουργήσουν "
-"λογαριασμό. Για παράδειγμα, μια πηγή μπορεί να στείλει μια διεύθυνση "
-"OnionShare σε έναν δημοσιογράφο χρησιμοποιώντας μια διεύθυνση e-mail μιας "
-"χρήσης και στη συνέχεια, να περιμένει τον δημοσιογράφο να συμμετάσχει στο "
-"δωμάτιο συνομιλίας, χωρίς να διακυβεύεται η ανωνυμία του."
-
-#: ../../source/features.rst:150
+"Τα δωμάτια συνομιλίας OnionShare είναι επίσης χρήσιμα για άτομα που "
+"θέλουν να συνομιλήσουν ανώνυμα και με ασφάλεια χωρίς να χρειάζεται να "
+"δημιουργήσουν λογαριασμό. Για παράδειγμα, μια πηγή μπορεί να στείλει μια "
+"διεύθυνση OnionShare σε έναν δημοσιογράφο χρησιμοποιώντας μια διεύθυνση "
+"e-mail μιας χρήσης και στη συνέχεια, να περιμένει τον δημοσιογράφο να "
+"συμμετάσχει στο δωμάτιο συνομιλίας, χωρίς να διακυβεύεται η ανωνυμία του."
+
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
-msgstr "Πως λειτουργεί η κρυπτογράφηση;"
+msgstr "Πως λειτουργεί η κρυπτογράφηση του OnionShare;"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -518,19 +592,19 @@ msgid ""
" connections."
msgstr ""
"Επειδή το OnionShare βασίζεται σε υπηρεσίες onion του Tor, οι συνδέσεις "
-"μεταξύ του Tor Browser και του OnionShare είναι κρυπτογραφημένες από άκρο σε "
-"άκρο (E2EE). Όταν κάποιος δημοσιεύει ένα μήνυμα σε ένα δωμάτιο συνομιλίας, "
-"το στέλνει στο διακομιστή μέσω της σύνδεσης onion E2EE, η οποία στη συνέχεια "
-"το στέλνει σε όλα τα μέλη της συνομιλίας χρησιμοποιώντας WebSockets, μέσω "
-"των συνδέσεων onion E2EE."
+"μεταξύ του Tor Browser και του OnionShare είναι κρυπτογραφημένες από άκρο"
+" σε άκρο (E2EE). Όταν κάποιος δημοσιεύει ένα μήνυμα σε ένα δωμάτιο "
+"συνομιλίας, το στέλνει στο διακομιστή μέσω της σύνδεσης onion E2EE, η "
+"οποία στη συνέχεια το στέλνει σε όλα τα μέλη της συνομιλίας "
+"χρησιμοποιώντας WebSockets, μέσω των συνδέσεων onion E2EE."
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
msgstr ""
-"Το OnionShare δεν εφαρμόζει καμία δική του κρυπτογράφηση συνομιλίας. "
-"Βασίζεται στην κρυπτογράφηση της υπηρεσίας onion του Tor."
+"Το OnionShare δεν κρυπτογραφεί τις συνομιλίες σας από μόνο του. Αντιθέτως "
+"βασίζεται στην κρυπτογράφηση υπηρεσιών \"onion\" του Tor."
#~ msgid "How OnionShare works"
#~ msgstr ""
@@ -919,3 +993,53 @@ msgstr ""
#~ "WebSockets, through their E2EE onion "
#~ "connections."
#~ msgstr ""
+
+#~ msgid "Receive Files"
+#~ msgstr "Λήψη αρχείων"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "Μπορείτε να χρησιμοποιήσετε το OnionShare "
+#~ "για να επιτρέψετε σε άλλους την "
+#~ "αποστολή αρχείων στον υπολογιστή σας, "
+#~ "μετατρέποντάς τον σε ένα ανώνυμο "
+#~ "dropbox. Ανοίξτε μία \"Καρτέλα λήψης\", "
+#~ "επιλέξτε τη διαδρομή αποθήκευσης αρχείων "
+#~ "και κάντε κλικ στο \"Εκκίνηση κατάστασης"
+#~ " λήψης\"."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Αυτό θα ξεκινήσει την υπηρεσία του "
+#~ "OnionShare. Οποιοσδήποτε προσθέσει τη "
+#~ "διεύθυνση στο Tor Browser του, θα "
+#~ "μπορεί να ανεβάσει αρχεία στον "
+#~ "υπολογιστή σας."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "Μόλις κάποιος προσθέσει αρχεία στην "
+#~ "υπηρεσία λήψεώς σας, απο προεπιλογή θα"
+#~ " αποθηκευτούν στο φάκελο ``OnionShare`` "
+#~ "στον αρχικό φάκελο του υπολογιστή σας,"
+#~ " με αυτόματο διαχωρισμό και οργάνωση "
+#~ "σύμφωνα με το χρόνο προσθήκης."
diff --git a/docs/source/locale/el/LC_MESSAGES/help.po b/docs/source/locale/el/LC_MESSAGES/help.po
index 62e20fd7..d411297d 100644
--- a/docs/source/locale/el/LC_MESSAGES/help.po
+++ b/docs/source/locale/el/LC_MESSAGES/help.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: 2020-11-15 14:43-0800\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 <norhorn@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: el\n"
+"Language-Team: el <LL@li.org>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
@@ -32,23 +31,24 @@ 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 ""
-"Θα βρείτε οδηγίες σχετικά με τη χρήση του OnionShare. Ερευνήστε πρώτα όλες "
-"τις ενότητες για να βρείτε σχετικές απαντήσεις."
+"Θα βρείτε οδηγίες σχετικά με τη χρήση του OnionShare. Ερευνήστε πρώτα "
+"όλες τις ενότητες για να βρείτε σχετικές απαντήσεις."
#: ../../source/help.rst:10
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 "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
"Εάν δεν υπάρχει στην ιστοσελίδα, παρακαλούμε ελέγξτε στο `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. Είναι πιθανό και κάποιος "
-"άλλος να αντιμετώπισε το ίδιο πρόβλημα και συνομίλησε με τους "
+"<https://github.com/micahflee/onionshare/issues>`_. Είναι πιθανό και "
+"κάποιος άλλος να αντιμετώπισε το ίδιο πρόβλημα και συνομίλησε με τους "
"προγραμματιστές ή να δημοσίευσε τη λύση."
#: ../../source/help.rst:15
@@ -59,15 +59,10 @@ msgstr "Υποβάλετε ένα ζήτημα"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Εάν δεν μπορείτε να βρείτε λύση ή επιθυμείτε να υποβάλετε ερώτημα ή πρόταση "
-"νέας λειτουργίας, παρακαλούμε για την `υποβολή ζητήματος <https://github.com/"
-"micahflee/onionshare/issues/new>`_. Απαιτείται η `δημιουργία λογαριασμού "
-"GitHub <https://help.github.com/articles/signing-up-for-a-new-github-account/"
-">`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -78,8 +73,8 @@ msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
-"Δείτε:ref:`collaborating` σχετικά με τον τρόπο συμμετοχής στην ομάδα Keybase "
-"για τη συζήτηση του έργου."
+"Δείτε:ref:`collaborating` σχετικά με τον τρόπο συμμετοχής στην ομάδα "
+"Keybase για τη συζήτηση του έργου."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr ""
@@ -132,3 +127,23 @@ msgstr ""
#~ "that we use to discuss the "
#~ "project."
#~ msgstr ""
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Εάν δεν μπορείτε να βρείτε λύση ή"
+#~ " επιθυμείτε να υποβάλετε ερώτημα ή "
+#~ "πρόταση νέας λειτουργίας, παρακαλούμε για "
+#~ "την `υποβολή ζητήματος "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. "
+#~ "Απαιτείται η `δημιουργία λογαριασμού GitHub"
+#~ " <https://help.github.com/articles/signing-up-for-a"
+#~ "-new-github-account/>`_."
+
diff --git a/docs/source/locale/el/LC_MESSAGES/install.po b/docs/source/locale/el/LC_MESSAGES/install.po
index bbb17007..0c001dc6 100644
--- a/docs/source/locale/el/LC_MESSAGES/install.po
+++ b/docs/source/locale/el/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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-12-31 19:29+0000\n"
-"Last-Translator: george k <norhorn@gmail.com>\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Panagiotis Vasilopoulos <hello@alwayslivid.com>\n"
"Language-Team: el <LL@li.org>\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.4.1-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/install.rst:2
@@ -47,11 +47,11 @@ msgid ""
"that you'll always use the newest version and run OnionShare inside of a "
"sandbox."
msgstr ""
-"Υπάρχουν αρκετοί τρόποι εγκατάστασης του OnionShare σε Linux, προτείνεται "
-"όμως να γίνει μέσω του `Flatpak <https://flatpak.org/>`_ ή του πακέτου `Snap "
-"<https://snapcraft.io/>`_. Τα Flatpak και Snap διασφαλίζουν ότι θα "
-"χρησιμοποιείτε πάντα τη νεότερη έκδοση και ότι θα εκτελείτε το OnionShare "
-"μέσα σε sandbox."
+"Υπάρχουν αρκετοί τρόποι εγκατάστασης του OnionShare σε Linux. Ο προτιμότερος "
+"είναι η εγκατάσταση μέσω του `Flatpak <https://flatpak.org/>`_ ή του πακέτου "
+"`Snap <https://snapcraft.io/>`_. Οι τεχνολογίες Flatpak και Snap "
+"διασφαλίζουν ότι θα χρησιμοποιείτε πάντα τη νεότερη έκδοση και ότι το "
+"OnionShare θα εκτελείται μέσα σε sandbox."
#: ../../source/install.rst:17
msgid ""
@@ -184,7 +184,7 @@ msgstr ""
"την ακεραιότητα του αρχείου (κακόβουλο ή άλλο) και δεν πρέπει να "
"εγκαταστήσετε το πακέτο. (Η ''ΠΡΟΕΙΔΟΠΟΙΗΣΗ:'' που φαίνεται παραπάνω, δεν "
"αποτελεί πρόβλημα με το πακέτο, σημαίνει μόνο ότι δεν έχετε ήδη ορίσει "
-"κανένα επίπεδο 'εμπιστοσύνης' του κλειδιού PGP του Micah)."
+"κανένα επίπεδο 'εμπιστοσύνης' του κλειδιού PGP του Micah.)"
#: ../../source/install.rst:71
msgid ""
diff --git a/docs/source/locale/en/LC_MESSAGES/advanced.po b/docs/source/locale/en/LC_MESSAGES/advanced.po
index 8b9457ea..995161fa 100644
--- a/docs/source/locale/en/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/en/LC_MESSAGES/advanced.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -83,11 +83,28 @@ msgid ""
" and won't have a password."
msgstr ""
-#: ../../source/advanced.rst:38
+#: ../../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:40
+#: ../../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 "
@@ -96,7 +113,7 @@ msgid ""
"set the respective desired dates and times."
msgstr ""
-#: ../../source/advanced.rst:43
+#: ../../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 "
@@ -104,7 +121,7 @@ msgid ""
" will see a timer counting down to when it will stop automatically."
msgstr ""
-#: ../../source/advanced.rst:46
+#: ../../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 "
@@ -112,7 +129,7 @@ msgid ""
" you can cancel the service before it's scheduled to start."
msgstr ""
-#: ../../source/advanced.rst:51
+#: ../../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 "
@@ -120,72 +137,72 @@ msgid ""
"days."
msgstr ""
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr ""
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
msgstr ""
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
msgstr ""
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid ""
"Note that you will also need the ``tor`` package installed. In macOS, "
"install it with: ``brew install tor``"
msgstr ""
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr ""
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr ""
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr ""
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
msgstr ""
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
msgstr ""
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -195,7 +212,7 @@ msgid ""
"service in a separate tab."
msgstr ""
-#: ../../source/advanced.rst:150
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
diff --git a/docs/source/locale/en/LC_MESSAGES/develop.po b/docs/source/locale/en/LC_MESSAGES/develop.po
index 0de31f00..981a5b2f 100644
--- a/docs/source/locale/en/LC_MESSAGES/develop.po
+++ b/docs/source/locale/en/LC_MESSAGES/develop.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-15 14:43-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -51,7 +51,7 @@ msgstr ""
#: ../../source/develop.rst:17
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"https://github.com/onionshare/onionshare"
msgstr ""
#: ../../source/develop.rst:19
@@ -59,7 +59,7 @@ 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 "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
@@ -77,7 +77,7 @@ msgstr ""
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 "
@@ -108,42 +108,42 @@ msgid ""
"reloaded), and other debug info. For example::"
msgstr ""
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
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
+#: ../../source/develop.rst:125
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
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr ""
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr ""
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -152,21 +152,21 @@ msgid ""
"needed."
msgstr ""
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr ""
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
msgstr ""
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 "
@@ -174,11 +174,11 @@ msgid ""
"the usual code review processes."
msgstr ""
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr ""
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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: "
@@ -401,3 +401,34 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr ""
+#~ msgid ""
+#~ "OnionShare source code is to be "
+#~ "found in this Git repository: "
+#~ "https://github.com/micahflee/onionshare"
+#~ msgstr ""
+
+#~ 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 "
+#~ "<https://github.com/micahflee/onionshare/issues>`_ on "
+#~ "GitHub to see if there are any "
+#~ "you'd like to tackle."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/features.po b/docs/source/locale/en/LC_MESSAGES/features.po
index 7932bbf7..abdc57de 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: 2020-11-15 14:43-0800\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -76,7 +76,7 @@ msgid ""
"share, and click \"Start sharing\"."
msgstr ""
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
msgid ""
"After you add files, you'll see some settings. Make sure you choose the "
"setting you're interested in before you start sharing."
@@ -123,42 +123,70 @@ msgid ""
msgstr ""
#: ../../source/features.rst:47
-msgid "Receive Files"
+msgid "Receive Files and Messages"
msgstr ""
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+
+#: ../../source/features.rst:67
+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 ""
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
msgstr ""
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -167,11 +195,11 @@ msgid ""
"whistleblower submission system."
msgstr ""
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr ""
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail attachments, it's possible someone could "
"try to attack your computer by uploading a malicious file to your "
@@ -179,7 +207,7 @@ msgid ""
"protect your system from malicious files."
msgstr ""
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -189,11 +217,15 @@ msgid ""
"disposableVM."
msgstr ""
-#: ../../source/features.rst:76
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr ""
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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"
@@ -201,25 +233,26 @@ msgid ""
"basis."
msgstr ""
-#: ../../source/features.rst:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). It's also a good idea to "
+"give it a custom title (see :ref:`custom_titles`)."
msgstr ""
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr ""
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
"\"Start sharing\" when you are ready."
msgstr ""
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -229,18 +262,18 @@ msgid ""
" WordPress.)"
msgstr ""
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 ""
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr ""
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -249,7 +282,7 @@ msgid ""
"page."
msgstr ""
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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 "
@@ -257,11 +290,11 @@ msgid ""
"before starting the service."
msgstr ""
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr ""
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -271,23 +304,23 @@ msgid ""
"address if you close OnionShare and re-open it later."
msgstr ""
-#: ../../source/features.rst:110
+#: ../../source/features.rst:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
msgstr ""
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr ""
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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:119
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it to "
"the people you want in the anonymous chat room. If it's important to "
@@ -295,7 +328,7 @@ msgid ""
"the OnionShare address."
msgstr ""
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 "
@@ -303,7 +336,7 @@ msgid ""
"\"Standard\" or \"Safer\", instead of \"Safest\"."
msgstr ""
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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 "
@@ -311,13 +344,13 @@ msgid ""
"get displayed at all, even if others were already chatting in the room."
msgstr ""
-#: ../../source/features.rst:133
+#: ../../source/features.rst:144
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:136
+#: ../../source/features.rst:147
msgid ""
"However, if you create an OnionShare chat room and securely send the "
"address only to a small group of trusted friends using encrypted "
@@ -325,17 +358,17 @@ msgid ""
"room are your friends."
msgstr ""
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr ""
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -347,7 +380,7 @@ msgid ""
"minimum."
msgstr ""
-#: ../../source/features.rst:146
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -357,11 +390,11 @@ msgid ""
"anonymity."
msgstr ""
-#: ../../source/features.rst:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr ""
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -371,7 +404,7 @@ msgid ""
" connections."
msgstr ""
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
@@ -765,3 +798,46 @@ msgstr ""
#~ "connections."
#~ msgstr ""
+#~ msgid "Receive Files"
+#~ msgstr ""
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+
+#~ msgid "Here is what it looks like for someone sending you files."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+
+#~ 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_passwords`)."
+#~ msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/help.po b/docs/source/locale/en/LC_MESSAGES/help.po
index d1eb81e9..2d8bbb2e 100644
--- a/docs/source/locale/en/LC_MESSAGES/help.po
+++ b/docs/source/locale/en/LC_MESSAGES/help.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -38,9 +38,9 @@ msgstr ""
#: ../../source/help.rst:12
msgid ""
"If it isn't on the website, please check the `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
#: ../../source/help.rst:15
@@ -51,7 +51,7 @@ msgstr ""
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
@@ -118,3 +118,24 @@ msgstr ""
#~ "project."
#~ msgstr ""
+#~ msgid ""
+#~ "If it isn't on the website, please"
+#~ " check the `GitHub issues "
+#~ "<https://github.com/micahflee/onionshare/issues>`_. It's "
+#~ "possible someone else has encountered "
+#~ "the same problem and either raised "
+#~ "it with the developers, or maybe "
+#~ "even posted a solution."
+#~ msgstr ""
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+
diff --git a/docs/source/locale/es/LC_MESSAGES/advanced.po b/docs/source/locale/es/LC_MESSAGES/advanced.po
index 13a3d287..79c05b7f 100644
--- a/docs/source/locale/es/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/es/LC_MESSAGES/advanced.po
@@ -7,16 +7,16 @@ msgid ""
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-12-04 23:29+0000\n"
-"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 05:34+0000\n"
+"Last-Translator: Santiago Sáenz <smezaqs@gmail.com>\n"
"Language-Team: none\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -35,11 +35,12 @@ msgid ""
"useful if you want to host a website available from the same OnionShare "
"address even if you reboot your computer."
msgstr ""
-"En forma predeterminada, todo en OnionShare es temporario. Si cierras una "
-"pestaña OnionShare, su dirección ya no existe, y no puede ser usada de "
-"nuevo. A veces, podrías querer que un servicio OnionShare sea persistente. "
-"Esto es útil si quieres alojar un sitio web que esté disponible desde la "
-"misma dirección OnionShare, aún si reinicias tu computadora."
+"En forma predeterminada, todo en OnionShare es temporario. Si cierras una"
+" pestaña OnionShare, su dirección ya no existe, y no puede ser usada de "
+"nuevo. A veces, podrías querer que un servicio OnionShare sea "
+"persistente. Esto es útil si quieres alojar un sitio web que esté "
+"disponible desde la misma dirección OnionShare, aún si reinicias tu "
+"computadora."
#: ../../source/advanced.rst:13
msgid ""
@@ -58,10 +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 password."
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 contraseña."
#: ../../source/advanced.rst:21
msgid ""
@@ -83,11 +84,11 @@ msgid ""
"wrong guesses at the password, your onion service is automatically "
"stopped to prevent a brute force attack against the OnionShare service."
msgstr ""
-"Por defecto, todos los servicios OnionShare están protegidos con el nombre "
-"de usuario ``onionshare`` y una contraseña generada al azar. Si alguien "
-"intenta adivinarla 20 veces erróneamente, tu servicio onion es detenido en "
-"forma automática para prevenir un ataque por fuerza bruta en contra del "
-"mismo."
+"Por defecto, todos los servicios OnionShare están protegidos con el "
+"nombre de usuario ``onionshare`` y una contraseña generada al azar. Si "
+"alguien intenta adivinarla 20 veces erróneamente, tu servicio onion es "
+"detenido en forma automática para prevenir un ataque por fuerza bruta en "
+"contra del mismo."
#: ../../source/advanced.rst:31
msgid ""
@@ -98,12 +99,12 @@ msgid ""
"can force your server to stop just by making 20 wrong guesses of your "
"password, even if they know the correct password."
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, 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."
#: ../../source/advanced.rst:35
msgid ""
@@ -112,14 +113,37 @@ msgid ""
" and won't have a password."
msgstr ""
"Para deshabilitar la contraseña para cualquier pestaña, solo marca la "
-"casilla \"No usar una contraseña\" antes de iniciar el servidor. Entonces "
-"será público y no tendrá contraseña."
+"casilla \"No usar una contraseña\" antes de iniciar el servidor. Entonces"
+" será público y no tendrá contraseña."
-#: ../../source/advanced.rst:38
+#: ../../source/advanced.rst:40
+msgid "Custom Titles"
+msgstr "Títulos Personalizados"
+
+#: ../../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 ""
+"De forma predeterminada, cuando las personas carguen un servicio de "
+"OnionShare en el navegador Tor verán el título predeterminado para el tipo "
+"de servicio. Por ejemplo, el título predeterminado de un servicio de chat es "
+"\"Chat de OnionShare\"."
+
+#: ../../source/advanced.rst:44
+msgid ""
+"If you want to choose a custom title, set the \"Custom title\" setting "
+"before starting a server."
+msgstr ""
+"Si quieres seleccionar un título personalizado, configura el ajuste de "
+"\"Título Personalizado\" antes de iniciar un servidor."
+
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Tiempos programados"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -128,26 +152,26 @@ msgid ""
"set the respective desired dates and times."
msgstr ""
"OnionShare soporta la programación exacta de cuándo un servicio debería "
-"arrancar y detenerse. Antes de iniciar un servidor, haz clic en \"Mostrar "
-"ajustes avanzados\" en su pestaña, y luego marca las casillas próximas a "
-"\"Iniciar el servicio onion en el tiempo programado\", \"Detener el servicio "
-"onion en el tiempo programado\", o ambas, y establece las fechas y horas "
-"deseadas."
+"arrancar y detenerse. Antes de iniciar un servidor, haz clic en \"Mostrar"
+" ajustes avanzados\" en su pestaña, y luego marca las casillas próximas a"
+" \"Iniciar el servicio onion en el tiempo programado\", \"Detener el "
+"servicio onion en el tiempo programado\", o ambas, y establece las fechas"
+" y horas deseadas."
-#: ../../source/advanced.rst:43
+#: ../../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 ""
-"Si programaste un servicio para arrancar en el futuro, cuando hagas clic en "
-"el botón \"Empezar a compartir\", verás un temporizador contando "
-"regresivamente hasta el arranque. Si lo hiciste para detenerse en el futuro, "
-"luego que sea arrancado verás un temporizador contando regresivamente hasta "
-"el momento en que se detendrá automáticamente."
+"Si programaste un servicio para arrancar en el futuro, cuando hagas clic "
+"en el botón \"Empezar a compartir\", verás un temporizador contando "
+"regresivamente hasta el arranque. Si lo hiciste para detenerse en el "
+"futuro, luego que sea arrancado verás un temporizador contando "
+"regresivamente hasta el momento en que se detendrá automáticamente."
-#: ../../source/advanced.rst:46
+#: ../../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 "
@@ -159,30 +183,29 @@ msgstr ""
"público en un momento dado en el futuro si te pasa algo. Si no te pasa "
"nada, puedes cancelarlo antes de su inicio programado."
-#: ../../source/advanced.rst:51
+#: ../../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 ""
-"**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."
+"**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."
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Interfaz de línea de comando"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
-msgstr ""
-"Además de su interfaz gráfico, OnionShare tiene una de línea de comando."
+msgstr "Además de su interfaz gráfico, OnionShare tiene una de línea de comando."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
@@ -190,7 +213,7 @@ msgstr ""
"Puedes instalar la versión de línea de comando de OnionShare usando "
"``pip3``::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid ""
"Note that you will also need the ``tor`` package installed. In macOS, "
"install it with: ``brew install tor``"
@@ -198,37 +221,37 @@ msgstr ""
"Ten en cuenta que también necesitarás el paquete ``tor`` instalado. En "
"macOS, instálalo con: ``brew install tor``"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Luego, ejecútalo así::"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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 ""
"Si instalaste OnionShare usando el paquete Snapcraft de Linux, también "
-"puedes ejecutar ``onionshare.cli`` para acceder a la versión de interfaz de "
-"línea de comando."
+"puedes ejecutar ``onionshare.cli`` para acceder a la versión de interfaz "
+"de línea de comando."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Uso"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-"Puedes navegar la documentación de línea de comando ejecutando ``onionshare "
-"--help``::"
+"Puedes navegar la documentación de línea de comando ejecutando "
+"``onionshare --help``::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Direcciones antiguas"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
@@ -236,7 +259,7 @@ msgstr ""
"OnionShare usa servicios onion Tor v3 por defecto. Estas son direcciones "
"onion modernas que tienen 56 caracteres, por ejemplo::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
@@ -244,16 +267,16 @@ msgstr ""
"OnionShare aún tiene soporte para direcciones onion v2, el viejo tipo de "
"direcciones onion que tienen 16 caracteres, por ejemplo::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
-"OnionShare llama a las direcciones onion v2 \"direcciones antiguas\", las "
-"cuales no están recomendadas, ya que las direcciones onion v3 son más "
+"OnionShare llama a las direcciones onion v2 \"direcciones antiguas\", las"
+" cuales no están recomendadas, ya que las direcciones onion v3 son más "
"seguras."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -263,13 +286,13 @@ msgid ""
"service in a separate tab."
msgstr ""
"Para usar direcciones antiguas, antes de iniciar un servidor haz clic en "
-"\"Mostrar ajustes avanzados\" en su pestaña, y marca la casilla \"Usar una "
-"dirección antigua (servicio onion v2, no recomendado)\". En el modo antiguo, "
-"puedes habilitar opcionalmente la autenticación de cliente Tor. Una vez que "
-"inicias un servidor en modo antiguo no puedes cambiarlo en esa pestaña. En "
-"vez, debes arrancar un servicio separado en otra pestaña."
+"\"Mostrar ajustes avanzados\" en su pestaña, y marca la casilla \"Usar "
+"una dirección antigua (servicio onion v2, no recomendado)\". En el modo "
+"antiguo, puedes habilitar opcionalmente la autenticación de cliente Tor. "
+"Una vez que inicias un servidor en modo antiguo no puedes cambiarlo en "
+"esa pestaña. En vez, debes arrancar un servicio separado en otra pestaña."
-#: ../../source/advanced.rst:150
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
@@ -277,9 +300,9 @@ msgid ""
"then."
msgstr ""
"El Tor Project planea `descontinuar completamente los servicios onion v2 "
-"<https://blog.torproject.org/v2-deprecation-timeline>`_ el 15 de octubre de "
-"2021, y los servicios onion antiguos serán removidos de OnionShare antes de "
-"esa fecha."
+"<https://blog.torproject.org/v2-deprecation-timeline>`_ el 15 de octubre "
+"de 2021, y los servicios onion antiguos serán removidos de OnionShare "
+"antes de esa fecha."
#~ msgid ""
#~ "By default, everything in OnionShare is"
diff --git a/docs/source/locale/es/LC_MESSAGES/develop.po b/docs/source/locale/es/LC_MESSAGES/develop.po
index bb0ec119..6f40b676 100644
--- a/docs/source/locale/es/LC_MESSAGES/develop.po
+++ b/docs/source/locale/es/LC_MESSAGES/develop.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: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2020-12-04 23:29+0000\n"
"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\n"
-"Language-Team: none\n"
"Language: es\n"
+"Language-Team: none\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -38,14 +37,15 @@ msgid ""
"<https://keybase.io/team/onionshare>`_. Within the app, go to \"Teams\", "
"click \"Join a Team\", and type \"onionshare\"."
msgstr ""
-"OnionShare tiene un equipo Keybase abierto para discutir el proyecto, hacer "
-"preguntas, compartir ideas y diseños, y hacer planes para futuro desarrollo. "
-"(También es una manera fácil de enviar mensajes directos cifrados de extremo "
-"a extremo a otros en la comunidad OnionShare, como por ejemplo, direcciones "
-"OnionShare.) Para usar Keybase, descarga la `aplicación Keybase "
-"<https://keybase.io/download>`_, crea una cuenta, y `únete a este equipo "
-"<https://keybase.io/team/onionshare>`_. Dentro de la aplicación, vé hacia "
-"\"Equipos\", haz clic en \"Unirse a un Equipo\", y tipea \"onionshare\"."
+"OnionShare tiene un equipo Keybase abierto para discutir el proyecto, "
+"hacer preguntas, compartir ideas y diseños, y hacer planes para futuro "
+"desarrollo. (También es una manera fácil de enviar mensajes directos "
+"cifrados de extremo a extremo a otros en la comunidad OnionShare, como "
+"por ejemplo, direcciones OnionShare.) Para usar Keybase, descarga la "
+"`aplicación Keybase <https://keybase.io/download>`_, crea una cuenta, y "
+"`únete a este equipo <https://keybase.io/team/onionshare>`_. Dentro de la"
+" aplicación, vé hacia \"Equipos\", haz clic en \"Unirse a un Equipo\", y "
+"tipea \"onionshare\"."
#: ../../source/develop.rst:12
msgid ""
@@ -62,26 +62,28 @@ 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/micahflee/onionshare"
+"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/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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ 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 <https://github.com/micahflee/"
-"onionshare/issues>`_ 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 "
+"<https://github.com/micahflee/onionshare/issues>`_ en GitHub para ver si "
+"hay alguna a la cual te gustaría encarar."
#: ../../source/develop.rst:22
msgid ""
@@ -89,10 +91,10 @@ 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 ""
-"Cuando estés listo para contribuir código, abre una solicitud de tiraje en "
-"el repositorio GitHub, y uno de los mantenedores del proyecto la revisará, y "
-"posiblemente haga preguntas, solicite cambios, la rechace o la incorpore "
-"dentro del proyecto."
+"Cuando estés listo para contribuir código, abre una solicitud de tiraje "
+"en el repositorio GitHub, y uno de los mantenedores del proyecto la "
+"revisará, y posiblemente haga preguntas, solicite cambios, la rechace o "
+"la incorpore dentro del proyecto."
#: ../../source/develop.rst:27
msgid "Starting Development"
@@ -101,17 +103,12 @@ msgstr "Iniciando el desarrollo"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"OnionShare está desarrollado en Python. Para arrancar, clona el repositorio "
-"Git en https://github.com/micahflee/onionshare/ y luego consulta el archivo "
-"``cli/README.md`` para aprender cómo configurar tu entorno de desarrollo "
-"para la versión de línea de comando, y el archivo ``desktop/README.md`` para "
-"aprender cómo hacerlo para la versión gráfica."
#: ../../source/develop.rst:32
msgid ""
@@ -139,14 +136,14 @@ msgid ""
"initialized, when events occur (like buttons clicked, settings saved or "
"reloaded), and other debug info. For example::"
msgstr ""
-"Durante el desarrollo, es conveniente ejecutar OnionShare desde un terminal "
-"y agregar el modificador ``--verbose`` (o ``-v``) al comando. Esto imprime "
-"una cantidad de mensajes útiles a la terminal, tales como cuándo son "
-"inicializados ciertos objetos, cuándo ocurren eventos (como botones "
-"cliqueados, ajustes guardados o recargados), y otra información de "
-"depuración. Por ejemplo::"
-
-#: ../../source/develop.rst:117
+"Durante el desarrollo, es conveniente ejecutar OnionShare desde un "
+"terminal y agregar el modificador ``--verbose`` (o ``-v``) al comando. "
+"Esto imprime una cantidad de mensajes útiles a la terminal, tales como "
+"cuándo son inicializados ciertos objetos, cuándo ocurren eventos (como "
+"botones cliqueados, ajustes guardados o recargados), y otra información "
+"de depuración. Por ejemplo::"
+
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
@@ -154,21 +151,21 @@ msgstr ""
"Puedes agregar tus propios mensajes de depuración ejecutando el método "
"``Common.log`` desde ``onionshare/common.py``. Por ejemplo:"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
-"Esto puede ser útil para conocer la cadena de eventos que ocurre cuando usas "
-"OnionShare, o el valor de ciertas variables antes y después de que sean "
-"manipuladas."
+"Esto puede ser útil para conocer la cadena de eventos que ocurre cuando "
+"usas OnionShare, o el valor de ciertas variables antes y después de que "
+"sean manipuladas."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr "Solo local"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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`` "
@@ -178,21 +175,21 @@ msgstr ""
"onion sin excepción durante el desarrollo. Puedes hacer esto con el "
"modoficador ``--local-only``. Por ejemplo:"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
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://onionshare:train-"
+"system@127.0.0.1:17635`` en un navegador web normal como Firefox, en vez "
+"de usar al Navegador Tor."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Contribuyendo traducciones"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -200,22 +197,23 @@ msgid ""
"\"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if "
"needed."
msgstr ""
-"Ayuda a que OnionShare sea más fácil de usar, y más familiar y amigable para "
-"las personas, traduciéndolo en `Hosted Weblate <https://hosted.weblate.org/"
-"projects/onionshare/>`_. Siempre mantén \"OnionShare\" en el alfabeto "
-"latino, y usa \"OnionShare (nombre local)\" si fuera necesario."
+"Ayuda a que OnionShare sea más fácil de usar, y más familiar y amigable "
+"para las personas, traduciéndolo en `Hosted Weblate "
+"<https://hosted.weblate.org/projects/onionshare/>`_. Siempre mantén "
+"\"OnionShare\" en el alfabeto latino, y usa \"OnionShare (nombre local)\""
+" si fuera necesario."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
"Para ayudar a traducir, crea una cuenta Hosted Weblate y empieza a "
"contribuir."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr "Sugerencias para cadenas de caracteres en el original en Inglés"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
@@ -223,32 +221,32 @@ msgstr ""
"A veces, las cadenas de caracteres en Inglés están equivocadas, o no se "
"corresponden entre la aplicación y la documentación."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 ""
-"Propone mejoras en las cadenas fuente añadiendo @kingu a tu comentario en "
-"Weblate, o abre una cuestión o solicitud de tiraje en GitHub. Esta última "
-"asegura que todos los desarrolladores de nivel superior vean las "
+"Propone mejoras en las cadenas fuente añadiendo @kingu a tu comentario en"
+" Weblate, o abre una cuestión o solicitud de tiraje en GitHub. Esta "
+"última asegura que todos los desarrolladores de nivel superior vean las "
"sugerencias, y potencialmente puede modificar la cadena a través de los "
"procesos usuales de revisión de código."
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Estado de las traducciones"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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 ""
"Aquí está el estado actual de las traducciones. Si quieres empezar una "
-"traducción en un lenguaje que no se encuentra aquí, por favor escríbenos a "
-"la lista de correo: onionshare-dev@lists.riseup.net"
+"traducción en un lenguaje que no se encuentra aquí, por favor escríbenos "
+"a la lista de correo: onionshare-dev@lists.riseup.net"
#~ msgid ""
#~ "OnionShare has an open Keybase team "
@@ -442,3 +440,26 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr "Haz lo mismo para otras líneas no traducidas."
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "OnionShare está desarrollado en Python. "
+#~ "Para arrancar, clona el repositorio Git"
+#~ " en https://github.com/micahflee/onionshare/ y "
+#~ "luego consulta el archivo ``cli/README.md``"
+#~ " para aprender cómo configurar tu "
+#~ "entorno de desarrollo para la versión"
+#~ " 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 f67c096c..26fd4232 100644
--- a/docs/source/locale/es/LC_MESSAGES/features.po
+++ b/docs/source/locale/es/LC_MESSAGES/features.po
@@ -7,16 +7,16 @@ msgid ""
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-12-06 00:29+0000\n"
-"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 05:34+0000\n"
+"Last-Translator: Santiago Sáenz <smezaqs@gmail.com>\n"
"Language-Team: none\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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -30,8 +30,9 @@ msgid ""
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
"Mediante servidores web iniciados localmente en tu computadora, y hechos "
-"accesibles a otras personas como `servicios onion <https://community."
-"torproject.org/onion-services/>`_`Tor <https://www.torproject.org/>`_ ."
+"accesibles a otras personas como `servicios onion "
+"<https://community.torproject.org/onion-services/>`_`Tor "
+"<https://www.torproject.org/>`_ ."
#: ../../source/features.rst:8
msgid ""
@@ -49,20 +50,20 @@ msgid ""
"something less secure like unencrypted e-mail, depending on your `threat "
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
-"Tu eres responsable por compartir en forma segura ese URL, usando un canal "
-"de comunicación de tu elección, como un mensaje cifrado en una charla, o "
-"usando algo menos seguro, como un correo electrónico no cifrado, dependiendo "
-"de tu `modelo de amenaza <https://ssd.eff.org/en/module/your-security-"
-"plan>`_."
+"Tu eres responsable por compartir en forma segura ese URL, usando un "
+"canal de comunicación de tu elección, como un mensaje cifrado en una "
+"charla, o usando algo menos seguro, como un correo electrónico no "
+"cifrado, dependiendo de tu `modelo de amenaza "
+"<https://ssd.eff.org/en/module/your-security-plan>`_."
#: ../../source/features.rst:14
msgid ""
"The people you send the URL to then copy and paste it into their `Tor "
"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
msgstr ""
-"Las personas a quienes les envías el URL deben copiarlo y pegarlo dentro del "
-"`Navegador Tor <https://www.torproject.org/>`_ para acceder al servicio "
-"OnionShare."
+"Las personas a quienes les envías el URL deben copiarlo y pegarlo dentro "
+"del `Navegador Tor <https://www.torproject.org/>`_ para acceder al "
+"servicio OnionShare."
#: ../../source/features.rst:16
msgid ""
@@ -71,10 +72,11 @@ msgid ""
"until your laptop is unsuspended and on the Internet again. OnionShare "
"works best when working with people in real-time."
msgstr ""
-"Si ejecutas OnionShare en tu portátil para enviarle archivos a alguien, y "
-"antes de que sean enviados es suspendida, el servicio no estará disponible "
-"hasta que tu portátil deje de estarlo, y se conecte de nuevo a Internet. "
-"OnionShare funciona mejor cuando se trabaja con personas en tiempo real."
+"Si ejecutas OnionShare en tu portátil para enviarle archivos a alguien, y"
+" antes de que sean enviados es suspendida, el servicio no estará "
+"disponible hasta que tu portátil deje de estarlo, y se conecte de nuevo a"
+" Internet. OnionShare funciona mejor cuando se trabaja con personas en "
+"tiempo real."
#: ../../source/features.rst:18
msgid ""
@@ -84,11 +86,11 @@ msgid ""
"Tor onion services too, it also protects your anonymity. See the "
":doc:`security design </security>` for more info."
msgstr ""
-"Como tu propia computadora es el servidor web, *ningún tercero puede acceder "
-"a nada de lo que pasa en OnionShare*, ni siquiera sus desarrolladores. Es "
-"completamente privado. Y como OnionShare también está basado en los "
-"servicios onion de Tor, también protege tu anonimato. Mira el :doc:`diseño "
-"de seguridad </security>` para más información."
+"Como tu propia computadora es el servidor web, *ningún tercero puede "
+"acceder a nada de lo que pasa en OnionShare*, ni siquiera sus "
+"desarrolladores. Es completamente privado. Y como OnionShare también está"
+" basado en los servicios onion de Tor, también protege tu anonimato. Mira"
+" el :doc:`diseño de seguridad </security>` para más información."
#: ../../source/features.rst:21
msgid "Share Files"
@@ -105,14 +107,14 @@ msgstr ""
"hacia ella los archivos y carpetas que deseas compartir, y haz clic en "
"\"Iniciar compartición\"."
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
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 ""
-"Después de que agregas archivos, verás algunas configuraciones. Asegúrate de "
-"elegir primero los ajustes en los que estás interesado antes de empezar a "
-"compartir."
+"Después de que agregas archivos, verás algunas configuraciones. Asegúrate"
+" de elegir primero los ajustes en los que estás interesado antes de "
+"empezar a compartir."
#: ../../source/features.rst:31
msgid ""
@@ -123,10 +125,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 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)\"."
#: ../../source/features.rst:34
msgid ""
@@ -134,9 +136,9 @@ msgid ""
"individual files you share rather than a single compressed version of all"
" the files."
msgstr ""
-"Además, si desmarcas esta casilla, las personas serán capaces de descargar "
-"los archivos individuales que compartas, en vez de una única versión "
-"comprimida de todos ellos."
+"Además, si desmarcas esta casilla, las personas serán capaces de "
+"descargar los archivos individuales que compartas, en vez de una única "
+"versión comprimida de todos ellos."
#: ../../source/features.rst:36
msgid ""
@@ -147,8 +149,8 @@ msgid ""
msgstr ""
"Cuando estés listo para compartir, haz clic en el botón \"Iniciar "
"compartición\". Siempre puedes hacer clic en \"Detener compartición\", o "
-"salir de OnionShare, para hacer caer al sitio web inmediatamente. También "
-"puedes hacer clic en el ícono \"↑\" en la esquina superior derecha para "
+"salir de OnionShare, para hacer caer al sitio web inmediatamente. También"
+" puedes hacer clic en el ícono \"↑\" en la esquina superior derecha para "
"mostrar el historial y el progreso de las personas que están descargando "
"archivos."
@@ -159,10 +161,10 @@ msgid ""
"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 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."
#: ../../source/features.rst:42
msgid ""
@@ -171,61 +173,108 @@ msgid ""
"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 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."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr "Recibir Archivos"
+msgid "Receive Files and Messages"
+msgstr "Recibe archivos y mensajes"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
-"Puedes usar OnionShare para permitir a las personas la subida anónima de "
-"archivos directamente a tu computadora, convirtiéndola esencialmente en un "
-"buzón anónimo. Abre una pestaña de recepción, elige dónde quieres que los "
-"archivos sean descargados y otros ajustes, y luego haz clic en \"Iniciar "
-"Modo de Recepción\"."
+"Puedes utilizar OnionShare para permitir que las personas envíen archivos y "
+"mensajes de forma anónima directamente a tu computadora, convirtiéndola "
+"esencialmente en un dropbox anónimo. Abre una pestaña de recibir y elige la "
+"configuración que quieras."
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+"Puedes buscar una carpeta donde guardar los mensajes y archivos que son "
+"enviados."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
-"Esto iniciará al servicio OnionShare. Cualquiera que cargue esta dirección "
-"en el Navegador Tor será capaz de subir archivos a tu computadora."
+"Puedes seleccionar \"Deshabilitar el envío de texto\" si solo quieres "
+"permitir la subida de archivos, y puedes seleccionar \"Deshabilitar la "
+"subida de archivos\" si solo quieres permitir el envío de mensajes de texto, "
+"como en un formulario de contacto anónimo."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Puedes seleccionar \"Usar webhook de notificaciones\" y luego escoger una "
+"URL de webhook si quieres ser notificado cuando alguien envíe archivos o "
+"mensajes a tu servicio de OnionShare. Si usas esta característica, "
+"OnionShare hará una solicitud HTTP POST a la URL cuando alguien envíe "
+"archivos o mensajes. Por ejemplo, si quieres recibir un mensaje de texto "
+"encriptado en la aplicación de mensajería `Keybase <https://keybase.io/>`_, "
+"puedes comenzar una conversación con `@webhookbot <https://keybase.io/"
+"webhookbot>`_, escribiendo ``!webhook create onionshare-alerts``, y "
+"responderá con una URL. Úsala como la URL para el webhook de notificaciones. "
+"Si alguien sube un archivo a tu servicio en modo de recepción, @webhookbot "
+"te enviará un mensaje en Keybase haciéndote saber tan pronto como suceda."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Cuando estés listo, presiona \"Iniciar modo de recepción\". Esto iniciará el "
+"servicio de OnionShare. Cualquiera que cargue está dirección en su navegador "
+"Tor podrá enviar archivos y mensajes que serán enviados a tu computadora."
+
+#: ../../source/features.rst:67
+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 ""
-"También puedes hacer clic en el ícono \"↓\" en la esquina superior derecha "
-"para mostrar el historial y el progreso de las personas enviándote archivos."
+"También puedes hacer clic en el ícono \"↓\" en la esquina superior "
+"derecha para mostrar el historial y el progreso de las personas "
+"enviándote archivos."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
-msgstr "He aquí como luce cuando alguien está enviándote archivos."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
+msgstr "Así es como se ve para alguien que esté enviándote archivos."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-"Cuando alguien sube archivos a tu servicio de recepción, son guardados por "
-"defecto en una carpeta llamada ``OnionShare``, en tu carpeta personal en la "
-"computadora, y automáticamente organizados en subcarpetas separadas, "
-"basándose en la hora en que los archivos son subidos."
+"Cuando alguien envía archivos o mensajes a tu servicio de recepción, son "
+"guardados de forma predeterminada en una carpeta llamada ``OnionShare`` en "
+"la carpeta home de tu computador, y son organizados de forma automática en "
+"subcarpetas basadas en el momento en el que los archivos fueron subidos."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -233,29 +282,30 @@ msgid ""
"quite as secure version of `SecureDrop <https://securedrop.org/>`_, the "
"whistleblower submission system."
msgstr ""
-"Establecer un servicio de recepción OnionShare es útil para periodistas y "
-"otros que necesiten aceptar documentos en forma segura desde fuentes "
+"Establecer un servicio de recepción OnionShare es útil para periodistas y"
+" otros que necesiten aceptar documentos en forma segura desde fuentes "
"anónimas. Cuando es usado de esta manera, OnionShare es una especie de "
"versión liviana, más simple y no tan segura de `SecureDrop "
"<https://securedrop.org/>`_, el sistema de envíos para informantes."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr "Úsalo a tu propio riesgo"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail 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 un"
+" archivo malicioso a tu servicio OnionShare, el cual no añade ningún "
+"mecanismo de seguridad para proteger tu sistema contra archivos "
+"maliciosos."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -264,53 +314,63 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
-"Si recibes un documento de Office o un PDF a través de OnionShare, puedes "
-"convertirlos en PDFs que son seguros para abrir usando `Dangerzone "
-"<https://dangerzone.rocks/>`_. También puedes protegerte al abrir documentos "
-"no confiables haciéndolo en `Tails <https://tails.boum.org/>`_, o en una "
-"máquina virtual descartable`Qubes <https://qubes-os.org/>`_."
+"Si recibes un documento de Office o un PDF a través de OnionShare, puedes"
+" convertirlos en PDFs que son seguros para abrir usando `Dangerzone "
+"<https://dangerzone.rocks/>`_. También puedes protegerte al abrir "
+"documentos no confiables haciéndolo en `Tails "
+"<https://tails.boum.org/>`_, o en una máquina virtual descartable`Qubes "
+"<https://qubes-os.org/>`_."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Sin embargo, siempre es seguro abrir mensajes de texto enviados mediante "
+"OnionShare."
+
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr "Consejos para correr un servicio de recepción"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). 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, entonces deberías guardar la pestaña (mira "
-":ref:`save_tabs`) y correrla como servicio público (mira "
-":ref:`turn_off_passwords`)."
+"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`). También es "
+"una buena idea darle un título personalizado (ver :ref:`custom_titles`)."
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr "Aloja un Sitio Web"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
"\"Start sharing\" when you are ready."
msgstr ""
-"Para alojar un sitio web con HTML estático con OnionShare, abre una pestaña "
-"de sitio web, arrastra los archivos y carpetas que constituyen el sitio web "
-"estático, y haz clic cuando estés listo en \"Iniciar compartición\"."
+"Para alojar un sitio web con HTML estático con OnionShare, abre una "
+"pestaña de sitio web, arrastra los archivos y carpetas que constituyen el"
+" sitio web estático, y haz clic cuando estés listo en \"Iniciar "
+"compartición\"."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -326,7 +386,7 @@ msgstr ""
"*estáticos*, y no puede hacerlo con aquellos que ejecutan código o usan "
"bases de datos. Por lo que, por ejemplo, no puedes usar WordPress.)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 "
@@ -336,11 +396,11 @@ msgstr ""
"directorio, y las personas que lo carguen podrán mirar a través de los "
"archivos y descargarlos."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr "Política de Seguridad de Contenido"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -348,28 +408,30 @@ 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 <https://en.wikipedia.org/"
-"wiki/Content_Security_Policy>`_ estricto. Sin embargo, esto evitará que el "
-"contenido de terceros sea cargado dentro de la página web."
+"Por defecto, OnionShare te ayudará a asegurar tu sitio web estableciendo "
+"un encabezado de `Política de Seguridad de Contenido "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ estricto. Sin "
+"embargo, esto evitará que el contenido de terceros sea cargado dentro de "
+"la página web."
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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 ""
-"Si quieres cargar contenido desde sitios web de terceros, como recursoss o "
-"bibliotecas JavaScript desde CDNs, entonces debes marcar la casilla "
-"\"Deshabilitar el encabezado de Política de Seguridad de Contenido (permite "
-"a tu sitio web usar recursos de terceros)\" antes de iniciar el servicio."
+"Si quieres cargar contenido desde sitios web de terceros, como recursoss "
+"o bibliotecas JavaScript desde CDNs, entonces debes marcar la casilla "
+"\"Deshabilitar el encabezado de Política de Seguridad de Contenido "
+"(permite a tu sitio web usar recursos de terceros)\" antes de iniciar el "
+"servicio."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr "Consejos para correr un servicio de sitio web"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -378,47 +440,48 @@ 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:110
+#: ../../source/features.rst:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
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_passwords`)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr "Chat Anónimo"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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 ""
"Puedes usar OnionShare para establecer un cuarto de chat completamente "
-"anónimo y seguro, que no registra nada. Solo abre una pestaña de chat y haz "
-"clic en \"Iniciar servidor de chat\"."
+"anónimo y seguro, que no registra nada. Solo abre una pestaña de chat y "
+"haz clic en \"Iniciar servidor de chat\"."
-#: ../../source/features.rst:119
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it 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."
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, 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."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 "
@@ -426,24 +489,24 @@ msgid ""
"\"Standard\" or \"Safer\", instead of \"Safest\"."
msgstr ""
"Las personas pueden unirse al cuarto de chat cargando su dirección "
-"OnionShare en el Navegador Tor. El cuarto de chat requiere JavasScript, por "
-"lo que todo aquel que quiera participar debe ajustar su nivel de seguridad a "
-"'Estándar' o 'Más Seguro' en vez de a 'El Más Seguro'."
+"OnionShare en el Navegador Tor. El cuarto de chat requiere JavasScript, "
+"por lo que todo aquel que quiera participar debe ajustar su nivel de "
+"seguridad a 'Estándar' o 'Más Seguro' en vez de a 'El Más Seguro'."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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 ""
-"Cuando alguien se une al cuarto de chat, se le asigna un nombre aleatorio. "
-"Puede cambiarlo tipeando un nombre nuevo en la casilla en el panel izquierdo "
-"y presionando ↵. Ningún historial de chat será mostrado en absoluto, aún si "
-"otros ya estaban chateando en el cuarto, porque ese historial no es guardado "
-"en ningún lado."
+"Cuando alguien se une al cuarto de chat, se le asigna un nombre "
+"aleatorio. Puede cambiarlo tipeando un nombre nuevo en la casilla en el "
+"panel izquierdo y presionando ↵. Ningún historial de chat será mostrado "
+"en absoluto, aún si otros ya estaban chateando en el cuarto, porque ese "
+"historial no es guardado en ningún lado."
-#: ../../source/features.rst:133
+#: ../../source/features.rst:144
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."
@@ -452,23 +515,23 @@ msgstr ""
"cambiar su nombre a cualquier cosa, y no hay manera de confirmar la "
"identidad de nadie."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
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 ""
-"Sin embargo, si creas un cuarto de chat OnionShare, y envías la dirección en "
-"forma segura solamente a un grupo pequeño de amigos confiables usando "
-"mensajes cifrados, entonces puedes estar razonablemente seguro que las "
+"Sin embargo, si creas un cuarto de chat OnionShare, y envías la dirección"
+" en forma segura solamente a un grupo pequeño de amigos confiables usando"
+" mensajes cifrados, entonces puedes estar razonablemente seguro que las "
"personas que se unan a él son tus amigos."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr "¿Cómo es que esto es útil?"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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."
@@ -477,7 +540,7 @@ msgstr ""
"cifrada, ¿cuál es el punto de un cuarto de chat OnionShare? Deja menos "
"rastros."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -488,16 +551,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 del mismo "
-"termina en cada dispositivo (los dispositivos, y las computadoras si "
-"configuran Signal Desktop) de cada miembro del grupo. Incluso si los "
-"mensajes que desaparecen están activados, es difícil confirmar que todas las "
-"copias de los mismos se hayan eliminado de todos los dispositivos y de "
-"cualquier otro lugar (como las bases de datos de notificaciones) en los que "
-"se hayan guardado. Los cuartos de chat de OnionShare no almacenan ningún "
-"mensaje en ningún lugar, por lo que el problema se reduce al mínimo."
+"Si, por ejemplo, envías un mensaje a un grupo de Signal, una copia del "
+"mismo termina en cada dispositivo (los dispositivos, y las computadoras "
+"si configuran Signal Desktop) de cada miembro del grupo. Incluso si los "
+"mensajes que desaparecen están activados, es difícil confirmar que todas "
+"las copias de los mismos se hayan eliminado de todos los dispositivos y "
+"de cualquier otro lugar (como las bases de datos de notificaciones) en "
+"los que se hayan guardado. Los cuartos de chat de OnionShare no almacenan"
+" ningún mensaje en ningún lugar, por lo que el problema se reduce al "
+"mínimo."
-#: ../../source/features.rst:146
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -507,17 +571,17 @@ msgid ""
"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."
+"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."
-#: ../../source/features.rst:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr "¿Cómo funciona el cifrado?"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -529,11 +593,11 @@ msgstr ""
"Como OnionShare se respalda en los servicios onion de Tor, todas las "
"conexiones entre el Navegador Tor y OnionShare son cifradas de extremo a "
"extremo (E2EE). Cuando alguien publica un mensaje a un cuarto de chat "
-"OnionShare, lo envía al servidor a través de la conexión onion E2EE, la cual "
-"lo envía luego a todos los otros miembros del cuarto de chat usando "
+"OnionShare, lo envía al servidor a través de la conexión onion E2EE, la "
+"cual lo envía luego a todos los otros miembros del cuarto de chat usando "
"WebSockets, a través de sus conexiones onion E2EE."
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
@@ -745,3 +809,55 @@ msgstr ""
#~ "cuartos de chat OnionShare no almacenan"
#~ " ningún mensaje en ningún lado, por"
#~ " lo que esto no es un problema."
+
+#~ msgid "Receive Files"
+#~ msgstr "Recibir Archivos"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "Puedes usar OnionShare para permitir a"
+#~ " las personas la subida anónima de"
+#~ " archivos directamente a tu computadora,"
+#~ " convirtiéndola esencialmente en un buzón"
+#~ " anónimo. Abre una pestaña de "
+#~ "recepción, elige dónde quieres que los"
+#~ " archivos sean descargados y otros "
+#~ "ajustes, y luego haz clic en "
+#~ "\"Iniciar Modo de Recepción\"."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Esto iniciará al servicio OnionShare. "
+#~ "Cualquiera que cargue esta dirección en"
+#~ " el Navegador Tor será capaz de "
+#~ "subir archivos a tu computadora."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "Cuando alguien sube archivos a tu "
+#~ "servicio de recepción, son guardados por"
+#~ " defecto en una carpeta llamada "
+#~ "``OnionShare``, en tu carpeta personal "
+#~ "en la computadora, y automáticamente "
+#~ "organizados en subcarpetas separadas, "
+#~ "basándose en la hora en que los"
+#~ " archivos son subidos."
diff --git a/docs/source/locale/es/LC_MESSAGES/help.po b/docs/source/locale/es/LC_MESSAGES/help.po
index eb301797..37e9697a 100644
--- a/docs/source/locale/es/LC_MESSAGES/help.po
+++ b/docs/source/locale/es/LC_MESSAGES/help.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: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2020-12-01 17:29+0000\n"
"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\n"
-"Language-Team: none\n"
"Language: es\n"
+"Language-Team: none\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
@@ -32,24 +31,25 @@ 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 ""
-"Encontrarás instrucciones sobre cómo usar OnionShare. Mira primero a través "
-"de todas las secciones para ver si responde a tus preguntas."
+"Encontrarás instrucciones sobre cómo usar OnionShare. Mira primero a "
+"través de todas las secciones para ver si responde a tus preguntas."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
msgstr "Comprueba las cuestiones con GitHub"
#: ../../source/help.rst:12
+#, fuzzy
msgid ""
"If it isn't on the website, please check the `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
-"Si no está en este sitio web, por favor comprueba las `cuestiones con GitHub "
-"<https://github.com/micahflee/onionshare/issues>`_. Es posible que alguien "
-"más se haya encontrado con el mismo problema y lo haya elevado a los "
-"desarrolladores, o incluso también que haya publicado una solución."
+"Si no está en este sitio web, por favor comprueba las `cuestiones con "
+"GitHub <https://github.com/micahflee/onionshare/issues>`_. Es posible que"
+" alguien más se haya encontrado con el mismo problema y lo haya elevado a"
+" los desarrolladores, o incluso también que haya publicado una solución."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
@@ -59,15 +59,10 @@ msgstr "Envía una cuestión"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Si no puedes encontrar una solución a tu problema, o deseas hacer una "
-"pregunta o sugerir una característica nueva, por favor `envía una cuestión "
-"<https://github.com/micahflee/onionshare/issues/new>`_. Esto requiere `crear "
-"una cuenta en GitHub <https://help.github.com/articles/signing-up-for-a-new-"
-"github-account>`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -78,11 +73,31 @@ msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
-"Mira :ref:`collaborating` por instrucciones acerca de cómo unirse al equipo "
-"Keybase que usamos para discutir el proyecto."
+"Mira :ref:`collaborating` por instrucciones acerca de cómo unirse al "
+"equipo Keybase que usamos para discutir el proyecto."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr ""
#~ "Si necesitas ayuda con OnionShare, por"
#~ " favor sigue las instrucciones de "
#~ "abajo."
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Si no puedes encontrar una solución "
+#~ "a tu problema, o deseas hacer una"
+#~ " pregunta o sugerir una característica "
+#~ "nueva, por favor `envía una cuestión "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. Esto "
+#~ "requiere `crear una cuenta en GitHub "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account>`_."
+
diff --git a/docs/source/locale/fr/LC_MESSAGES/index.po b/docs/source/locale/fr/LC_MESSAGES/index.po
index 7e229643..64923721 100644
--- a/docs/source/locale/fr/LC_MESSAGES/index.po
+++ b/docs/source/locale/fr/LC_MESSAGES/index.po
@@ -6,20 +6,25 @@
msgid ""
msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
-"Report-Msgid-Bugs-To: \n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2020-09-03 11:46-0700\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2021-03-10 10:02+0000\n"
+"Last-Translator: Agnes de Lion <belocurry@pm.me>\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.5.2-dev\n"
#: ../../source/index.rst:2
msgid "OnionShare's documentation"
-msgstr ""
+msgstr "Documentation d'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 est un outil open-source qui vous permet de partager des "
+"fichiers, héberger des sites web et chatter avec des amis de façon sécurisée "
+"et anonyme à travers le réseau Tor."
diff --git a/docs/source/locale/fr/LC_MESSAGES/security.po b/docs/source/locale/fr/LC_MESSAGES/security.po
index a8cbadeb..b522be90 100644
--- a/docs/source/locale/fr/LC_MESSAGES/security.po
+++ b/docs/source/locale/fr/LC_MESSAGES/security.po
@@ -6,33 +6,38 @@
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: Automatically generated\n"
-"Language: fr\n"
+"PO-Revision-Date: 2021-03-10 10:02+0000\n"
+"Last-Translator: AO Localisation Lab <ao@localizationlab.org>\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.5.2-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
msgid "Security Design"
-msgstr ""
+msgstr "Conception de la sécurité"
#: ../../source/security.rst:4
msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works."
msgstr ""
+"Lisez d’abord :ref:`how_it_works` pour comprendre comment OnionShare "
+"fonctionne."
#: ../../source/security.rst:6
msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
msgstr ""
+"Comme tout logiciel, OnionShare peut comprendre des bogues ou des "
+"vulnérabilités."
#: ../../source/security.rst:9
msgid "What OnionShare protects against"
-msgstr ""
+msgstr "Contre quoi protège OnionShare"
#: ../../source/security.rst:11
msgid ""
@@ -43,6 +48,13 @@ msgid ""
"server for that too. This avoids the traditional model of having to trust"
" the computers of others."
msgstr ""
+"**Les tiers n’ont pas accès à ce qui se passe dans OnionShare.** Utiliser "
+"OnionShare implique d’héberger des services directement sur votre "
+"ordinateur. Quand vous partagez des fichiers avec OnionShare, ils ne sont "
+"téléversés vers aucun serveur. Si vous créez un salon de conversation "
+"OnionShare, votre ordinateur sert aussi de serveur à cet effet. Cela évite "
+"le modèle traditionnel qui implique de faire confiance aux ordinateurs "
+"d’autrui."
#: ../../source/security.rst:13
msgid ""
@@ -54,6 +66,13 @@ msgid ""
"Browser with OnionShare's onion service, the traffic is encrypted using "
"the onion service's private key."
msgstr ""
+"**Les systèmes d’écoute des réseaux ne peuvent pas surveiller ce qui se "
+"passe en transit dans OnionShare.** La connexion entre le service onion de "
+"Tor et le Navigateur Tor est chiffrée de bout en bout. Cela signifie que les "
+"assaillants du réseau ne peuvent rien surveiller, sauf le trafic chiffré de "
+"Tor. Même si le système d’écoute est un nœud malveillant utilisé pour "
+"connecter le Navigateur Tor avec le service onion d’OnionShare, le trafic "
+"est chiffré grâce à la clé privée du service onion."
#: ../../source/security.rst:15
msgid ""
@@ -63,6 +82,12 @@ msgid ""
"Browser users, the Tor Browser users and eavesdroppers can't learn the "
"identity of the OnionShare user."
msgstr ""
+"**L’anonymat des utilisateurs d’OnionShare est protégé par Tor.** OnionShare "
+"et le Navigateur Tor protègent l’anonymat des utilisateurs. Tant que l’"
+"utilisateur d’OnionShare communique anonymement l’adresse OnionShare aux "
+"utilisateurs du Navigateur Tor, ni les utilisateurs du Navigateur Tor ni "
+"aucun système d’écoute ne peuvent connaître l’identité de l’utilisateur "
+"d’OnionShare."
#: ../../source/security.rst:17
msgid ""
@@ -77,10 +102,21 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
+"**Si un assaillant apprend l’existence du service onion, il ne peut quand "
+"même accéder à rien.** Des attaques précédentes contre le réseau Tor pour "
+"énumérer les services onion ont permis à l’assaillant de découvrir des "
+"adresses .onion privées. Si un assaillant découvre une adresse OnionShare "
+"privée, un mot de passe l’empêchera d’y accéder (à moins que l’utilisateur d’"
+"OnionShare ne choisisse de le désactiver et de le rendre public). Le mot de "
+"passe est généré en choisissant deux mots au hasard dans une liste de 6 800 "
+"mots, ce qui équivaut à 6800², soit environ 46 millions de mots de passe "
+"possibles. Il ne peut y avoir que vingt essais erronés avant qu’OnionShare n’"
+"arrête le serveur, ce qui prévient les attaques par force brute contre le "
+"mot de passe."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
-msgstr ""
+msgstr "Contre quoi OnionShare ne protège pas"
#: ../../source/security.rst:22
msgid ""
@@ -94,6 +130,17 @@ msgid ""
" disappearing messages enabled), encrypted email, or in person. This "
"isn't necessary when using OnionShare for something that isn't secret."
msgstr ""
+"**Communiquer l’adresse OnionShare pourrait ne pas être sûr** La "
+"communication de l’adresse OnionShare à autrui est la responsabilité de l’"
+"utilisateur d’OnionShare. Si elle est envoyée de façon non sécurisée (par "
+"exemple par un courriel surveillé par un assaillant), une oreille indiscrète "
+"peut en déduire qu’OnionShare est utilisé. Si la personne qui surveille "
+"charge l’adresse dans le Navigateur Tor alors que le service est encore en "
+"fonction, elle peut y accéder. Pour éviter cette situation, l’adresse doit "
+"être communiquée de façon sécurisée, par un texto chiffré (probablement avec "
+"les messages éphémères activés), un courriel chiffré ou en personne. Cela n’"
+"est pas nécessaire si OnionShare est utilisé pour quelque chose qui n’est "
+"pas secret."
#: ../../source/security.rst:24
msgid ""
@@ -103,6 +150,12 @@ msgid ""
" Tor, can be used to share the address. This isn't necessary unless "
"anonymity is a goal."
msgstr ""
+"**Communiquer l’adresse OnionShare pourrait ne pas être anonyme.** Des "
+"précautions supplémentaires doivent être prises pour faire en sorte que l’"
+"adresse OnionShare est communiquée anonymement. Un nouveau compte de "
+"courriel ou de dialogue en ligne auquel vous n’accédez que par Tor peut être "
+"utilisé pour partager l’adresse. Ce n’est pas nécessaire, à moins que l’"
+"anonymat ne soit l’objectif."
#~ msgid "Security design"
#~ msgstr ""
@@ -242,4 +295,3 @@ msgstr ""
#~ " share the address. This isn't "
#~ "necessary unless anonymity is a goal."
#~ msgstr ""
-
diff --git a/docs/source/locale/fr/LC_MESSAGES/tor.po b/docs/source/locale/fr/LC_MESSAGES/tor.po
index dd76b26d..5c1763f6 100644
--- a/docs/source/locale/fr/LC_MESSAGES/tor.po
+++ b/docs/source/locale/fr/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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-11-20 17:28+0000\n"
-"Last-Translator: Localisation Lab <ao@localizationlab.org>\n"
-"Language: fr\n"
+"PO-Revision-Date: 2021-05-21 21:32+0000\n"
+"Last-Translator: AO Localisation Lab <ao@localizationlab.org>\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.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/tor.rst:2
@@ -95,6 +96,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 ""
+"`Sur <https://www.torproject.org/fr/download/tor/>`_, téléchargez « Windows "
+"Expert Bundle » de Tor `. Extrayez le fichier compressé et copiez le dossier "
+"résultant sur ``C:\\Program Files (x86)\\`` Renommez en ``tor-win32`` le "
+"dossier résultant qui comprend ``Data`` et ``Tor``."
#: ../../source/tor.rst:32
msgid ""
@@ -140,10 +145,14 @@ msgid ""
"`<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_). Like "
"this::"
msgstr ""
+"Dans votre invite de commande d’administrateur, installez ``tor`` en tant "
+"que service en utilisant le fichier ``torrc`` approprié que vous venez de "
+"créer (comme indiqué dans `<https://2019.www.torproject.org/docs/faq.html."
+"en#NTService>`_). Comme ceci :"
#: ../../source/tor.rst:50
msgid "You are now running a system ``tor`` process in Windows!"
-msgstr ""
+msgstr "Vous exécutez désormais un processus ``tor``système sur Windows."
#: ../../source/tor.rst:52
msgid ""
@@ -165,16 +174,18 @@ msgid ""
"First, install `Homebrew <https://brew.sh/>`_ if you don't already have "
"it, and then install Tor::"
msgstr ""
+"Si ce n’est pas déjà fait, installez d’abord `Homebrew <https://brew.sh/>`_, "
+"puis installez Tor :"
#: ../../source/tor.rst:67
msgid "Now configure Tor to allow connections from OnionShare::"
msgstr ""
-"Maintenant, configurez Tor pour permettre les connexions à partir "
-"d’OnionShare ::"
+"Maintenant, configurez Tor pour autoriser les connexions à partir d’"
+"OnionShare :"
#: ../../source/tor.rst:74
msgid "And start the system Tor service::"
-msgstr "Et démarrez le service Tor du système ::"
+msgstr "Et démarrez le service Tor du système :"
#: ../../source/tor.rst:78
msgid ""
@@ -195,10 +206,12 @@ msgstr ""
#: ../../source/tor.rst:84 ../../source/tor.rst:104
msgid "If all goes well, you should see \"Connected to the Tor controller\"."
msgstr ""
+"Si tout se passe bien, vous devriez voir « Vous êtes connecté au contrôleur "
+"Tor »."
#: ../../source/tor.rst:87
msgid "Using a system ``tor`` in Linux"
-msgstr ""
+msgstr "Utiliser un ``tor`` système dans Linux"
#: ../../source/tor.rst:89
msgid ""
@@ -245,7 +258,7 @@ msgstr ""
#: ../../source/tor.rst:111
msgid "To configure bridges, click the \"⚙\" icon in OnionShare."
-msgstr ""
+msgstr "Pour configurer des ponts, cliquez sur l’icône « ⚙ » dans OnionShare."
#: ../../source/tor.rst:113
msgid ""
@@ -494,4 +507,3 @@ msgstr ""
#~ "if you don't already have it. "
#~ "Then, install Tor::"
#~ msgstr ""
-
diff --git a/docs/source/locale/hr/LC_MESSAGES/advanced.po b/docs/source/locale/hr/LC_MESSAGES/advanced.po
index 431c5891..ebcf30eb 100644
--- a/docs/source/locale/hr/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/hr/LC_MESSAGES/advanced.po
@@ -6,23 +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:54-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2021-03-26 13:29+0000\n"
+"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: none\n"
"Language: hr\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.6-dev\n"
#: ../../source/advanced.rst:2
msgid "Advanced Usage"
-msgstr ""
+msgstr "Napredna upotreba"
#: ../../source/advanced.rst:7
msgid "Save Tabs"
-msgstr ""
+msgstr "Spremi kartice"
#: ../../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."
@@ -42,7 +45,7 @@ msgstr ""
#: ../../source/advanced.rst:26
msgid "Turn Off Passwords"
-msgstr ""
+msgstr "Isključi lozinke"
#: ../../source/advanced.rst:28
msgid "By default, all OnionShare services are protected with the username ``onionshare`` and a randomly-generated password. If someone takes 20 wrong guesses at the password, your onion service is automatically stopped to prevent a brute force attack against the OnionShare service."
@@ -58,7 +61,7 @@ msgstr ""
#: ../../source/advanced.rst:38
msgid "Scheduled Times"
-msgstr ""
+msgstr "Planiranje"
#: ../../source/advanced.rst:40
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."
@@ -78,7 +81,7 @@ msgstr ""
#: ../../source/advanced.rst:56
msgid "Command-line Interface"
-msgstr ""
+msgstr "Sučelje naredbenog retka"
#: ../../source/advanced.rst:58
msgid "In addition to its graphical interface, OnionShare has a command-line interface."
@@ -102,7 +105,7 @@ msgstr ""
#: ../../source/advanced.rst:73
msgid "Usage"
-msgstr ""
+msgstr "Upotreba"
#: ../../source/advanced.rst:75
msgid "You can browse the command-line documentation by running ``onionshare --help``::"
@@ -110,7 +113,7 @@ msgstr ""
#: ../../source/advanced.rst:132
msgid "Legacy Addresses"
-msgstr ""
+msgstr "Stare adrese"
#: ../../source/advanced.rst:134
msgid "OnionShare uses v3 Tor onion services by default. These are modern onion addresses that have 56 characters, for example::"
diff --git a/docs/source/locale/hr/LC_MESSAGES/help.po b/docs/source/locale/hr/LC_MESSAGES/help.po
index 71a6803e..90594179 100644
--- a/docs/source/locale/hr/LC_MESSAGES/help.po
+++ b/docs/source/locale/hr/LC_MESSAGES/help.po
@@ -6,31 +6,36 @@
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:54-0800\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2021-03-26 13:29+0000\n"
+"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: none\n"
"Language: hr\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.6-dev\n"
#: ../../source/help.rst:2
msgid "Getting Help"
-msgstr ""
+msgstr "Dobivanje pomoći"
#: ../../source/help.rst:5
msgid "Read This Website"
-msgstr ""
+msgstr "Pročitaj ovu web-stranicu"
#: ../../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 ""
+"Pronaći ćeš upute za korištenje programa OnionShare. Najprije pregledaj sve "
+"odjeljke i provjeri, odgovara li nešto na tvoja pitanja."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
-msgstr ""
+msgstr "Pregledaj GitHub probleme"
#: ../../source/help.rst:12
msgid "If it isn't on the website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible someone else has encountered the same problem and either raised it with the developers, or maybe even posted a solution."
@@ -38,7 +43,7 @@ msgstr ""
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
-msgstr ""
+msgstr "Prijavi problem"
#: ../../source/help.rst:17
msgid "If you are unable to find a solution, or wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating a GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
@@ -46,7 +51,7 @@ msgstr ""
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
-msgstr ""
+msgstr "Pridruži se našem Keybase timu"
#: ../../source/help.rst:22
msgid "See :ref:`collaborating` on how to join the Keybase team used to discuss the project."
diff --git a/docs/source/locale/hr/LC_MESSAGES/index.po b/docs/source/locale/hr/LC_MESSAGES/index.po
index 711a4da0..14def152 100644
--- a/docs/source/locale/hr/LC_MESSAGES/index.po
+++ b/docs/source/locale/hr/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-12-17 19:29+0000\n"
+"PO-Revision-Date: 2021-07-27 13:32+0000\n"
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
"Language-Team: none\n"
"Language: hr\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.4-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
#: ../../source/index.rst:2
msgid "OnionShare's documentation"
@@ -27,5 +27,5 @@ msgstr "OnionShare dokumentacija"
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 omogućuje sigurno i anonimno "
-"dijeljenje datoteka, hosting za web-stranice te čavrljanje s prijateljima "
+"dijeljenje datoteka, hosting za web-stranice te razgovaranje s prijateljima "
"pomoću mreže Tor."
diff --git a/docs/source/locale/id/LC_MESSAGES/index.po b/docs/source/locale/id/LC_MESSAGES/index.po
new file mode 100644
index 00000000..776469e3
--- /dev/null
+++ b/docs/source/locale/id/LC_MESSAGES/index.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.1\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2021-02-22 14:18-0800\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
+"Last-Translator: Algustionesa Yoshi <algustionesa@gmail.com>\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"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.7-dev\n"
+
+#: ../../source/index.rst:2
+msgid "OnionShare's documentation"
+msgstr "Dokumentasi 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 adalah perkakas sumber terbuka yang memungkinkan Anda secara aman "
+"dan anonim berbagi berkas, menghosting situs web, dan mengobrol dengan teman "
+"menggunakan jaringan Tor."
diff --git a/docs/source/locale/id/LC_MESSAGES/install.po b/docs/source/locale/id/LC_MESSAGES/install.po
new file mode 100644
index 00000000..41218fdf
--- /dev/null
+++ b/docs/source/locale/id/LC_MESSAGES/install.po
@@ -0,0 +1,105 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-05-03 21:48-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/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Windows or macOS"
+msgstr ""
+
+#: ../../source/install.rst:7
+msgid "You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:12
+msgid "Install in Linux"
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use either the `Flatpak <https://flatpak.org/>`_ or the `Snap <https://snapcraft.io/>`_ package. Flatpak and Snap ensure that you'll always use the newest version and run OnionShare inside of a sandbox."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/install.rst:19
+msgid "**Install OnionShare using Flatpak**: https://flathub.org/apps/details/org.onionshare.OnionShare"
+msgstr ""
+
+#: ../../source/install.rst:21
+msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare"
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/install.rst:28
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "You can verify that the package you download is legitimate and hasn't been tampered with by verifying its PGP signature. For Windows and macOS, this step is optional and provides defense in depth: the OnionShare binaries include operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:34
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:36
+msgid "Packages are signed by Micah Lee, the core developer, using his PGP public key with fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. You can download Micah's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+msgstr ""
+
+#: ../../source/install.rst:38
+msgid "You must have GnuPG installed to verify signatures. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:41
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:43
+msgid "You can find the signatures (as ``.asc`` files), as well as Windows, macOS, Flatpak, Snap, and source packages, at https://onionshare.org/dist/ in the folders named for each version of OnionShare. You can also find them on the `GitHub Releases page <https://github.com/micahflee/onionshare/releases>`_."
+msgstr ""
+
+#: ../../source/install.rst:47
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:49
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary and and ``.asc`` signature, you can verify the binary for macOS in a terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:53
+msgid "Or for Windows, in a command-prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:57
+msgid "The expected output looks like this::"
+msgstr ""
+
+#: ../../source/install.rst:69
+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 install the package. (The \"WARNING:\" shown above, is not a problem with the package, it only means you haven't already defined any level of 'trust' of Micah's PGP key.)"
+msgstr ""
+
+#: ../../source/install.rst:71
+msgid "If you want to learn more about verifying PGP signatures, the guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_ may be useful."
+msgstr ""
diff --git a/docs/source/locale/it/LC_MESSAGES/install.po b/docs/source/locale/it/LC_MESSAGES/install.po
index 271f0818..1c6e82a1 100644
--- a/docs/source/locale/it/LC_MESSAGES/install.po
+++ b/docs/source/locale/it/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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2021-01-25 16:32+0000\n"
+"PO-Revision-Date: 2021-04-09 19:26+0000\n"
"Last-Translator: rc <coluccini.riccardo@gmail.com>\n"
"Language-Team: it <LL@li.org>\n"
"Language: it\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.5-dev\n"
+"X-Generator: Weblate 4.6-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/install.rst:2
@@ -104,7 +104,6 @@ msgstr ""
"puoi semplicemente fare affidamento solo su quelle."
#: ../../source/install.rst:34
-#, fuzzy
msgid "Signing key"
msgstr "Signing key"
diff --git a/docs/source/locale/it/LC_MESSAGES/security.po b/docs/source/locale/it/LC_MESSAGES/security.po
index 8e117cc9..4cf98dfe 100644
--- a/docs/source/locale/it/LC_MESSAGES/security.po
+++ b/docs/source/locale/it/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-12-01 17:29+0000\n"
-"Last-Translator: x <hardwired1.0@protonmail.com>\n"
-"Language: it\n"
+"PO-Revision-Date: 2021-04-09 19:26+0000\n"
+"Last-Translator: rc <coluccini.riccardo@gmail.com>\n"
"Language-Team: it <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: it\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.6-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
@@ -86,7 +87,6 @@ msgstr ""
"possono apprendere l'identità dell'utente di OnionShare."
#: ../../source/security.rst:17
-#, fuzzy
msgid ""
"**If an attacker learns about the onion service, it still can't access "
"anything.** Prior attacks against the Tor network to enumerate onion "
@@ -99,17 +99,16 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
-"**Se un utente malintenzionato viene a conoscenza del servizio onion, non"
-" può comunque accedere a nulla.** Gli attacchi precedenti contro la rete "
-"Tor per enumerare i servizi onion hanno consentito all'utente "
-"malintenzionato di individuare indirizzi onion privati. Se un attacco "
-"rileva un indirizzo OnionShare privato, una password impedirà loro di "
-"accedervi (a meno che l'utente OnionShare non scelga di disattivarlo e "
-"renderlo pubblico).. La password viene generata scegliendo due parole "
-"casuali da un elenco di 6800 parole, rendendo 6800^2 o circa 46 milioni "
-"di password possibili. Solo 20 ipotesi errate possono essere fatte prima "
-"che OnionShare fermi il server, prevenendo attacchi di forza bruta contro"
-" la password."
+"**Se un utente malintenzionato viene a conoscenza del servizio onion, non "
+"può comunque accedere a nulla.** Gli attacchi precedenti contro la rete Tor "
+"per enumerare i servizi onion hanno consentito all'utente malintenzionato di "
+"individuare indirizzi onion privati. Se un attacco rivela un indirizzo "
+"OnionShare privato, una password impedirà loro di accedervi (a meno che "
+"l'utente OnionShare non scelga di disattivarlo e renderlo pubblico). La "
+"password viene generata scegliendo due parole casuali da un elenco di 6800 "
+"parole, ovvero 6800² o circa 46 milioni di password possibili. Solo 20 "
+"tentativi errati possono essere fatti prima che OnionShare fermi il server, "
+"prevenendo attacchi di tipo brute force contro la password."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
@@ -140,7 +139,6 @@ msgstr ""
"OnionShare per qualcosa che non è segreto."
#: ../../source/security.rst:24
-#, fuzzy
msgid ""
"**Communicating the OnionShare address might not be anonymous.** Extra "
"precautions must be taken to ensure the OnionShare address is "
@@ -148,12 +146,12 @@ msgid ""
" Tor, can be used to share the address. This isn't necessary unless "
"anonymity is a goal."
msgstr ""
-"**Comunicare l'indirizzo di OnionShare potrebbe non essere anonimo.** "
-"Devono essere effettuati step ulteriori per garantire che l'indirizzo "
-"OnionShare sia comunicato in maniera anonima. Per condividerlo si possono"
-" utilizzare una nuova mail o un nuovo account di chat, a cui si accede "
-"solo via Tor. Questo non è necessario a meno che l'anonimato non sia un "
-"tuo obiettivo."
+"**La comunicazione dell'indirizzo di OnionShare potrebbe non essere "
+"anonima.** Devono essere prese ulteriori precauzioni per garantire che "
+"l'indirizzo OnionShare sia comunicato in maniera anonima. Per condividerlo "
+"si possono utilizzare una nuova mail o un nuovo account di chat, a cui si "
+"accede solo via Tor. Tutto questo non è necessario a meno che l'anonimato "
+"non sia un tuo obiettivo."
#~ msgid "Security design"
#~ msgstr ""
@@ -261,4 +259,3 @@ msgstr ""
#~ "anonymity, such as co-workers who "
#~ "know each other sharing work documents."
#~ msgstr ""
-
diff --git a/docs/source/locale/it/LC_MESSAGES/tor.po b/docs/source/locale/it/LC_MESSAGES/tor.po
index 6cc41484..405ea16e 100644
--- a/docs/source/locale/it/LC_MESSAGES/tor.po
+++ b/docs/source/locale/it/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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-12-02 19:29+0000\n"
-"Last-Translator: x <hardwired1.0@protonmail.com>\n"
-"Language: it\n"
+"PO-Revision-Date: 2021-04-09 19:26+0000\n"
+"Last-Translator: rc <coluccini.riccardo@gmail.com>\n"
"Language-Team: it <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: it\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.6-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/tor.rst:2
@@ -91,6 +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 ""
+"Scarica il Tor Windows Expert Bundle `da <https://www.torproject.org/"
+"download/tor/>`_. Estrai il file compresso e copia la cartella estratta in "
+"``C:\\Program Files (x86)\\`` Rinomina le cartella all'interno che hanno il "
+"nome ``Data`` e ``Tor`` in ``tor-win32``."
#: ../../source/tor.rst:32
msgid ""
@@ -155,26 +160,24 @@ msgid ""
"to the Tor controller\"."
msgstr ""
"Apri OnionShare e fai clic sull'icona \"⚙\" al suo interno. In \"Come "
-"dovrebbe OnionShare connettersi a Tor?\" scegli \"Connetti utilizzando la"
-" porta di controllo\" e imposta \"Porta di controllo\" su \"127.0.0.1\" e"
-" \"Porta\" su \"9051\". In \"Impostazioni di autenticazione Tor\" scegli "
-"\"Password\" e imposta la password sulla password della porta di "
-"controllo che hai scelto sopra. Fai clic sul pulsante \"Prova connessione"
-" a Tor\". Se tutto va bene, dovresti vedere \"Connesso al controller di "
-"Tor\"."
+"dovrebbe connettersi OnionShare a Tor?\" scegli \"Connetti utilizzando la "
+"porta di controllo\" e imposta \"Porta di controllo\" su \"127.0.0.1\" e "
+"\"Porta\" su \"9051\". In \"Impostazioni di autenticazione Tor\" scegli "
+"\"Password\" e imposta la password sulla password della porta di controllo "
+"che hai scelto sopra. Fai clic sul pulsante \"Prova connessione a Tor\". Se "
+"tutto va bene, dovresti vedere \"Connesso al controller di Tor\"."
#: ../../source/tor.rst:61
msgid "Using a system ``tor`` in macOS"
msgstr "Utilizzando un sistema ``tor`` su macOS"
#: ../../source/tor.rst:63
-#, fuzzy
msgid ""
"First, install `Homebrew <https://brew.sh/>`_ if you don't already have "
"it, and then install Tor::"
msgstr ""
-"Innanzitutto, installa `Homebrew <https://brew.sh/index_it>`_ se non lo "
-"hai già. Quindi, installa Tor::"
+"Innanzitutto, installa `Homebrew <https://brew.sh/index_it>`_ se non lo hai "
+"già. Quindi, installa Tor::"
#: ../../source/tor.rst:67
msgid "Now configure Tor to allow connections from OnionShare::"
@@ -504,4 +507,3 @@ msgstr ""
#~ " estratta in ``C:\\Programmi(x86)\\`` Rinomina"
#~ " la cartella estratta con ``Dati`` e"
#~ " `` Tor`` in ``tor-win32``."
-
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/security.po b/docs/source/locale/nb_NO/LC_MESSAGES/security.po
index 5f3a36b8..effe102a 100644
--- a/docs/source/locale/nb_NO/LC_MESSAGES/security.po
+++ b/docs/source/locale/nb_NO/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-19 08:28+0000\n"
-"Last-Translator: Kurt Eilertsen <kurt@kheds.com>\n"
-"Language: nb_NO\n"
+"PO-Revision-Date: 2021-05-10 22:38+0000\n"
+"Last-Translator: Jonas Matisen <hdsumo@protonmail.ch>\n"
"Language-Team: none\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: nb_NO\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"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
@@ -83,7 +84,6 @@ msgstr ""
"OnionShare-brukerens identitet."
#: ../../source/security.rst:17
-#, fuzzy
msgid ""
"**If an attacker learns about the onion service, it still can't access "
"anything.** Prior attacks against the Tor network to enumerate onion "
@@ -96,16 +96,15 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
-"**Hvis en angriper lærer om løktjenesten, har den fremdeles ikke tilgang "
-"til noe.** Tidligere angrep mot Tor-nettverket for å telle opp "
-"løktjenestene lot kun angriperen oppdage private .onion-adresser. Hvis en"
-" angriper oppdager en privat OnionShare-adresse, vil et passord beskytte "
-"dem fra å få tilgang til den (med mindre OnionShare-brukeren velger å "
-"skru den av, og gjøre den offentlig). Passordet genereres ved å velge to "
-"tilfeldige ord fra en liste med 6800 ord, noe som betyr 6800^2, eller "
-"omtrent 46 millioner mulige passord. Kun 20 feilaktige forsøk tillates "
-"før OnionShare stopper tjeneren, noe som forhindrer totalsøks-angrep mot "
-"possordet."
+"**Hvis en angriper lærer om løketjenesten, kan den fremdeles ikke få tilgang "
+"til noe. ** Tidligere angrep mot Tor-nettverket for å oppregne løketjenester "
+"tillot angriperen å oppdage private .onion-adresser. Hvis et angrep oppdager "
+"en privat OnionShare-adresse, vil et passord hindre dem i å få tilgang til "
+"den (med mindre OnionShare-brukeren velger å slå den av og gjøre den "
+"offentlig). Passordet genereres ved å velge to tilfeldige ord fra en liste "
+"på 6800 ord, noe som gir 6800², eller omtrent 46 millioner mulige passord. "
+"Bare 20 feil gjetninger kan gjøres før OnionShare stopper serveren, og "
+"forhindrer brute force-angrep mot passordet."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
@@ -135,7 +134,6 @@ msgstr ""
"brukes for noe som ikke er hemmelig."
#: ../../source/security.rst:24
-#, fuzzy
msgid ""
"**Communicating the OnionShare address might not be anonymous.** Extra "
"precautions must be taken to ensure the OnionShare address is "
@@ -143,11 +141,10 @@ msgid ""
" Tor, can be used to share the address. This isn't necessary unless "
"anonymity is a goal."
msgstr ""
-"**Kommunisering av OnionShare-adressen er ikke nødvendigivs anonym.** "
-"Ekstra forhåndsregler må tas for å forsikre at OnionShare-adressen "
-"kommuniseres anonymt. En ny e-post eller prat konto, som kun blir brukt "
-"over Tor, kan brukes til å dele adressen. Dette er ikke nødvendig med "
-"mindre anonymitet er et mål."
+"** Kommunikasjon av OnionShare-adressen er kanskje ikke anonym. ** Ekstra "
+"forholdsregler må tas for å sikre at OnionShare-adressen kommuniseres "
+"anonymt. En ny e-post eller chat-konto, kun tilgjengelig via Tor, kan brukes "
+"til å dele adressen. Dette er ikke nødvendig med mindre anonymitet er et mål."
#~ msgid "Security design"
#~ msgstr ""
@@ -255,4 +252,3 @@ msgstr ""
#~ "anonymity, such as co-workers who "
#~ "know each other sharing work documents."
#~ msgstr ""
-
diff --git a/docs/source/locale/nl/LC_MESSAGES/help.po b/docs/source/locale/nl/LC_MESSAGES/help.po
index d1eb81e9..726a2ea3 100644
--- a/docs/source/locale/nl/LC_MESSAGES/help.po
+++ b/docs/source/locale/nl/LC_MESSAGES/help.po
@@ -3,37 +3,41 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-05-14 19:05+0000\n"
+"Last-Translator: nocturnalfilth <nocturnalfilth@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: nl\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"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
msgid "Getting Help"
-msgstr ""
+msgstr "Hulp krijgen"
#: ../../source/help.rst:5
msgid "Read This Website"
-msgstr ""
+msgstr "Lees deze website"
#: ../../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 ""
+"U vindt hier instructies over hoe u OnionShare kunt gebruiken. Kijk eerst "
+"alle secties door om te zien of iets uw vragen beantwoordt."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
-msgstr ""
+msgstr "Controleer de issues op GitHub"
#: ../../source/help.rst:12
msgid ""
@@ -42,12 +46,17 @@ msgid ""
" else has encountered the same problem and either raised it with the "
"developers, or maybe even posted a solution."
msgstr ""
+"Als het niet op de website staat, kijk dan op de `GitHub issues "
+"<https://github.com/micahflee/onionshare/issues>`_. Het is mogelijk dat "
+"iemand anders hetzelfde probleem heeft ondervonden en het heeft aangekaart "
+"bij de ontwikkelaars, of misschien zelfs een oplossing heeft gepost."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
-msgstr ""
+msgstr "Dien zelf een probleem in"
#: ../../source/help.rst:17
+#, fuzzy
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
@@ -55,16 +64,23 @@ msgid ""
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
+"Als u geen oplossing kunt vinden, of een vraag wilt stellen of een nieuwe "
+"functie wilt voorstellen, kunt u `een issue indienen <https://github.com/"
+"micahflee/onionshare/issues/new>`_. Dit vereist `het aanmaken van een GitHub "
+"account <https://help.github.com/articles/"
+"signing-up-for-a-new-github-account/>`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
-msgstr ""
+msgstr "Word lid van ons Keybase-team"
#: ../../source/help.rst:22
msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
+"Zie :ref:'samenwerken' over hoe je lid wordt van het Keybase-team dat wordt "
+"gebruikt om het project te bespreken."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr ""
@@ -117,4 +133,3 @@ msgstr ""
#~ "that we use to discuss the "
#~ "project."
#~ msgstr ""
-
diff --git a/docs/source/locale/nl/LC_MESSAGES/index.po b/docs/source/locale/nl/LC_MESSAGES/index.po
index 2ad2653c..86b50ade 100644
--- a/docs/source/locale/nl/LC_MESSAGES/index.po
+++ b/docs/source/locale/nl/LC_MESSAGES/index.po
@@ -3,27 +3,31 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-05-14 13:32+0000\n"
+"Last-Translator: nocturnalfilth <nocturnalfilth@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: nl\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"
"Generated-By: Babel 2.8.0\n"
#: ../../source/index.rst:2
msgid "OnionShare's documentation"
-msgstr ""
+msgstr "OnionShare documentatie"
#: ../../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 is een open source applicatie waarmee je beveiligd en anoniem "
+"bestanden kan delen, websites kan hosten en met vrienden kan chatten via het "
+"Tor netwerk."
diff --git a/docs/source/locale/nl/LC_MESSAGES/install.po b/docs/source/locale/nl/LC_MESSAGES/install.po
index 8a1e3472..d1432286 100644
--- a/docs/source/locale/nl/LC_MESSAGES/install.po
+++ b/docs/source/locale/nl/LC_MESSAGES/install.po
@@ -3,39 +3,44 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-05-14 19:05+0000\n"
+"Last-Translator: nocturnalfilth <nocturnalfilth@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: nl\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"
"Generated-By: Babel 2.9.0\n"
#: ../../source/install.rst:2
msgid "Installation"
-msgstr ""
+msgstr "Installatie"
#: ../../source/install.rst:5
msgid "Windows or macOS"
-msgstr ""
+msgstr "Windows of macOS"
#: ../../source/install.rst:7
msgid ""
"You can download OnionShare for Windows and macOS from the `OnionShare "
"website <https://onionshare.org/>`_."
msgstr ""
+"Je kan OnionShare downloaden voor Windows en macOS van de `OnionShare "
+"website <https://onionshare.org/>`_."
#: ../../source/install.rst:12
msgid "Install in Linux"
-msgstr ""
+msgstr "Installatie onder Linux"
#: ../../source/install.rst:14
+#, fuzzy
msgid ""
"There are various ways to install OnionShare for Linux, but the "
"recommended way is to use either the `Flatpak <https://flatpak.org/>`_ or"
@@ -43,32 +48,44 @@ msgid ""
"that you'll always use the newest version and run OnionShare inside of a "
"sandbox."
msgstr ""
+"Er zijn verschillende manieren om OnionShare voor Linux te installeren, maar "
+"de aanbevolen manier is om ofwel het `Flatpak <https://flatpak.org/>`_ of "
+"het `Snap <https://snapcraft.io/>`_ pakket te gebruiken. Flatpak en Snap "
+"zorgen ervoor dat u altijd de nieuwste versie gebruikt en OnionShare binnen "
+"een sandbox draait."
#: ../../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 ondersteuning is ingebouwd in Ubuntu. Fedora komt met Flatpak "
+"ondersteuning. Qelke je gebruikt is aan jou. Beide werken in alle Linux "
+"distributies."
#: ../../source/install.rst:19
msgid ""
"**Install OnionShare using Flatpak**: "
"https://flathub.org/apps/details/org.onionshare.OnionShare"
msgstr ""
+"**Installeer OnionShare via Flatpak**: https://flathub.org/apps/details/org."
+"onionshare.OnionShare"
#: ../../source/install.rst:21
msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare"
-msgstr ""
+msgstr "**Installeer OnionShare via 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 ""
+"Je kan ook PGP-ondertekende `` .flatpak '' - of `` .snap '' - pakketten "
+"downloaden en installeren vanaf https://onionshare.org/dist/ als u dat wilt."
#: ../../source/install.rst:28
msgid "Verifying PGP signatures"
-msgstr ""
+msgstr "PGP-handtekeningen verifiëren"
#: ../../source/install.rst:30
msgid ""
@@ -78,10 +95,15 @@ msgid ""
"binaries include operating system-specific signatures, and you can just "
"rely on those alone if you'd like."
msgstr ""
+"Je kunt controleren of het pakket dat je download legitiem is en er niet mee "
+"geknoeid is door de PGP handtekening te controleren. Voor Windows en macOS "
+"is deze stap optioneel en biedt bescherming in de diepte: de binaries van "
+"OnionShare bevatten besturingssysteemspecifieke handtekeningen en u kunt er "
+"ook voor kiezen om alleen daarop te vertrouwen."
#: ../../source/install.rst:34
msgid "Signing key"
-msgstr ""
+msgstr "Ondertekeningsleutel"
#: ../../source/install.rst:36
msgid ""
@@ -91,6 +113,11 @@ msgid ""
"<https://keys.openpgp.org/vks/v1/by-"
"fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
msgstr ""
+"Pakketten zijn ondertekend door Micah Lee, de kernontwikkelaar, met zijn PGP "
+"publieke sleutel met vingerafdruk "
+"``927F419D7EC82C2F149C1BD1403C2657CD994F73``. U kunt Micah's sleutel "
+"downloaden `van de keys.openpgp.org keyserver <https://keys.openpgp.org/vks/"
+"v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
#: ../../source/install.rst:38
msgid ""
@@ -98,10 +125,13 @@ msgid ""
"probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you "
"probably want `Gpg4win <https://www.gpg4win.org/>`_."
msgstr ""
+"Je moet GnuPG geïnstalleerd hebben om handtekeningen te verifiëren. Voor "
+"macOS kan dit via `GPGTools <https://gpgtools.org/>`_, en voor Windows `"
+"Gpg4win <https://www.gpg4win.org/>`_."
#: ../../source/install.rst:41
msgid "Signatures"
-msgstr ""
+msgstr "Handtekeningen"
#: ../../source/install.rst:43
msgid ""
@@ -111,10 +141,16 @@ msgid ""
"OnionShare. You can also find them on the `GitHub Releases page "
"<https://github.com/micahflee/onionshare/releases>`_."
msgstr ""
+"Je kan de handtekeningen (als ``.asc`` bestanden) en de Windows, macOS, "
+"Flatpak, Snap, en broncode pakketten vinden op https://onionshare.org/dist/ "
+"in de mappen genoemd voor elke versie van OnionShare. Je kan ze ook vinden "
+"op de `GitHub Releases pagina <https://github.com/micahflee/onionshare/"
+"releases>`_."
#: ../../source/install.rst:47
+#, fuzzy
msgid "Verifying"
-msgstr ""
+msgstr "Verifiëren"
#: ../../source/install.rst:49
msgid ""
@@ -122,14 +158,17 @@ msgid ""
"downloaded the binary and and ``.asc`` signature, you can verify the "
"binary for macOS in a terminal like this::"
msgstr ""
+"Zodra je Micah's publieke sleutel in jouw GnuPG-sleutelhanger hebt "
+"geïmporteerd, de binary en ``.asc`` handtekening hebt gedownload, kan je de "
+"binary voor macOS in een terminal als volgt verifiëren::"
#: ../../source/install.rst:53
msgid "Or for Windows, in a command-prompt like this::"
-msgstr ""
+msgstr "Of voor Windows, in een command-prompt als deze::"
#: ../../source/install.rst:57
msgid "The expected output looks like this::"
-msgstr ""
+msgstr "De verwachte output ziet er als volgt uit::"
#: ../../source/install.rst:69
msgid ""
@@ -139,6 +178,11 @@ msgid ""
" the package, it only means you haven't already defined any level of "
"'trust' of Micah's PGP key.)"
msgstr ""
+"Als je geen \"Good signature from\" ziet, kan er een probleem zijn met de "
+"integriteit van het bestand (kwaadaardig of anders) en zou je het pakket "
+"niet moeten installeren. (De \"WARNING:\" hierboven, is geen probleem met "
+"het pakket. Het betekent alleen dat je nog geen vertrouwensniveau hebt "
+"ingesteld voor Micah's PGP sleutel.)"
#: ../../source/install.rst:71
msgid ""
@@ -147,6 +191,10 @@ msgid ""
" the `Tor Project <https://support.torproject.org/tbb/how-to-verify-"
"signature/>`_ may be useful."
msgstr ""
+"Als je meer wilt leren over het verifiëren van PGP handtekeningen, kunnen de "
+"handleidingen voor `Qubes OS <https://www.qubes-os.org/security/"
+"verifying-signatures/>`_ en het `Tor Project <https://support.torproject.org/"
+"tbb/how-to-verify-signature/>`_ misschien nuttig zijn."
#~ msgid "Install on Windows or macOS"
#~ msgstr ""
@@ -333,4 +381,3 @@ msgstr ""
#~ "Project <https://support.torproject.org/tbb/how-to-"
#~ "verify-signature/>`_ may be helpful."
#~ msgstr ""
-
diff --git a/docs/source/locale/nl/LC_MESSAGES/security.po b/docs/source/locale/nl/LC_MESSAGES/security.po
index 05816266..d6cd5828 100644
--- a/docs/source/locale/nl/LC_MESSAGES/security.po
+++ b/docs/source/locale/nl/LC_MESSAGES/security.po
@@ -3,35 +3,39 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-05-14 13:32+0000\n"
+"Last-Translator: nocturnalfilth <nocturnalfilth@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: nl\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"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
msgid "Security Design"
-msgstr ""
+msgstr "Beveiligingsontwerp"
#: ../../source/security.rst:4
msgid "Read :ref:`how_it_works` first to get a handle on how OnionShare works."
msgstr ""
+"Lees eerst :ref: `how_it_works`om een idee te krijgen hoe OnionShare werkt."
#: ../../source/security.rst:6
msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
msgstr ""
+"Net als alle software kan ook OnionShare bugs of kwetsbaarheden bevatten."
#: ../../source/security.rst:9
msgid "What OnionShare protects against"
-msgstr ""
+msgstr "Waar OnionShare tegen beschermd"
#: ../../source/security.rst:11
msgid ""
@@ -42,6 +46,12 @@ msgid ""
"server for that too. This avoids the traditional model of having to trust"
" the computers of others."
msgstr ""
+"**Derde partijen hebben geen toegang tot wat er gebeurt in OnionShare.** Het "
+"gebruik van OnionShare betekent het hosten van diensten rechtstreeks op jouw "
+"computer. Wanneer je bestanden deelt met OnionShare, dan worden naar geen "
+"enkele server geüpload. Wanneer je een chatruimte maakt met OnionShare, dan "
+"is je computer de server. Dit voorkomt het traditionele model dat je andere "
+"computers moet vertrouwen."
#: ../../source/security.rst:13
msgid ""
@@ -53,6 +63,13 @@ msgid ""
"Browser with OnionShare's onion service, the traffic is encrypted using "
"the onion service's private key."
msgstr ""
+"**Netwerk-afluisteraars kunnen niets bespioneren van wat er onderweg in "
+"OnionShare gebeurt.** De verbinding tussen de Tor onion service en Tor "
+"Browser is end-to-end versleuteld. Dit betekent dat netwerkaanvallers niets "
+"kunnen afluisteren behalve versleuteld Tor-verkeer. Zelfs als een "
+"afluisteraar een kwaadwillig rendezvous-knooppunt is dat wordt gebruikt om "
+"de Tor Browser met de onion service van OnionShare te verbinden, wordt het "
+"verkeer versleuteld met de privésleutel van de onion service."
#: ../../source/security.rst:15
msgid ""
@@ -62,6 +79,11 @@ msgid ""
"Browser users, the Tor Browser users and eavesdroppers can't learn the "
"identity of the OnionShare user."
msgstr ""
+"**Anonimiteit van de OnionShare gebruikers wordt beschermd door Tor.** "
+"OnionShare en de Tor Browser beschermen de anonimiteit van de gebruikers. "
+"Zolang de OnionShare gebruiker anoniem het OnionShare adres communiceert met "
+"de Tor Browser gebruikers, kunnen de Tor Browser gebruikers en afluisteraars "
+"de identiteit van de OnionShare gebruiker niet achterhalen."
#: ../../source/security.rst:17
msgid ""
@@ -76,10 +98,22 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
+"**Als een aanvaller de onion-service achterhaald, heeft hij nog steeds "
+"nergens toegang toe.** Bij eerdere aanvallen op het Tor-netwerk om onion-"
+"services te verzamelen, kon de aanvaller privé .onion-adressen ontdekken. "
+"Als een aanvaller een privé OnionShare-adres ontdekt, zal een wachtwoord hen "
+"verhinderen er toegang toe te krijgen (tenzij de OnionShare-gebruiker ervoor "
+"kiest het uit te schakelen en het openbaar te maken). Het wachtwoord wordt "
+"gegenereerd door twee willekeurige woorden te kiezen uit een lijst van 6800 "
+"woorden, wat neerkomt op 6800², of ongeveer 46 miljoen mogelijke "
+"wachtwoorden. Er kunnen slechts 20 foutieve pogingen worden gedaan voordat "
+"OnionShare de server stopt, waardoor brute force aanvallen op het wachtwoord "
+"worden voorkomen."
#: ../../source/security.rst:20
+#, fuzzy
msgid "What OnionShare doesn't protect against"
-msgstr ""
+msgstr "Waar OnionShare niet tegen beschermt"
#: ../../source/security.rst:22
msgid ""
@@ -93,6 +127,17 @@ msgid ""
" disappearing messages enabled), encrypted email, or in person. This "
"isn't necessary when using OnionShare for something that isn't secret."
msgstr ""
+"**Het communiceren van het OnionShare-adres is mogelijk niet veilig.** Het "
+"communiceren van het OnionShare-adres aan mensen is de verantwoordelijkheid "
+"van de OnionShare-gebruiker. Als het onveilig wordt verzonden (bijvoorbeeld "
+"via een e-mailbericht dat wordt bewaakt door een aanvaller), kan een "
+"afluisteraar zien dat OnionShare wordt gebruikt. Als de afluisteraar het "
+"adres in de Tor-browser laadt terwijl de service nog steeds bestaat, hebben "
+"ze er toegang toe. Om dit te voorkomen, moet het adres veilig worden "
+"gecommuniceerd, via een versleuteld sms-bericht (waarschijnlijk met "
+"verdwijnende berichten ingeschakeld), versleutelde e-mail of persoonlijk. "
+"Dit is niet nodig bij het gebruik van OnionShare voor iets dat niet geheim "
+"is."
#: ../../source/security.rst:24
msgid ""
@@ -102,6 +147,11 @@ msgid ""
" Tor, can be used to share the address. This isn't necessary unless "
"anonymity is a goal."
msgstr ""
+"**Het communiceren van het OnionShare adres is mogelijk niet anoniem.** Er "
+"moeten extra voorzorgsmaatregelen worden genomen om ervoor te zorgen dat het "
+"OnionShare adres anoniem wordt gecommuniceerd. Een nieuw e-mail of chat "
+"account, alleen toegankelijk via Tor, kan worden gebruikt om het adres te "
+"delen. Dit is niet nodig tenzij anonimiteit het doel is."
#~ msgid "Security design"
#~ msgstr ""
@@ -241,4 +291,3 @@ msgstr ""
#~ " share the address. This isn't "
#~ "necessary unless anonymity is a goal."
#~ msgstr ""
-
diff --git a/docs/source/locale/nl/LC_MESSAGES/sphinx.po b/docs/source/locale/nl/LC_MESSAGES/sphinx.po
index f2cc8ed5..f6c9fc74 100644
--- a/docs/source/locale/nl/LC_MESSAGES/sphinx.po
+++ b/docs/source/locale/nl/LC_MESSAGES/sphinx.po
@@ -3,25 +3,26 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-05-14 13:32+0000\n"
+"Last-Translator: nocturnalfilth <nocturnalfilth@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: nl\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"
"Generated-By: Babel 2.8.0\n"
#: ../../source/_templates/versions.html:10
msgid "Versions"
-msgstr ""
+msgstr "Versies"
#: ../../source/_templates/versions.html:18
msgid "Languages"
-msgstr ""
-
+msgstr "Talen"
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/install.po b/docs/source/locale/pt_BR/LC_MESSAGES/install.po
index 8a1e3472..dc1053ed 100644
--- a/docs/source/locale/pt_BR/LC_MESSAGES/install.po
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/install.po
@@ -3,37 +3,42 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-02-23 15:50+0000\n"
+"Last-Translator: Elton Viana Gonçalves da Luz <eltongoncalves94@hotmail.com>"
+"\n"
"Language-Team: LANGUAGE <LL@li.org>\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.5\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/install.rst:2
msgid "Installation"
-msgstr ""
+msgstr "Instalação"
#: ../../source/install.rst:5
msgid "Windows or macOS"
-msgstr ""
+msgstr "Windows ou MacOS"
#: ../../source/install.rst:7
msgid ""
"You can download OnionShare for Windows and macOS from the `OnionShare "
"website <https://onionshare.org/>`_."
msgstr ""
+"Você pode baixar o OnionShare para Windows and macOS `no site do OnionShare "
+"<https://onionshare.org/>`_."
#: ../../source/install.rst:12
msgid "Install in Linux"
-msgstr ""
+msgstr "Instalar no Linux"
#: ../../source/install.rst:14
msgid ""
@@ -43,32 +48,44 @@ msgid ""
"that you'll always use the newest version and run OnionShare inside of a "
"sandbox."
msgstr ""
+"Existem várias maneiras de instalar o OnionShare para Linux, mas a forma "
+"recomendada é usar o pacote `Flatpak <https://flatpak.org/>` _ ou `Snap "
+"<https://snapcraft.io/>` _ . Flatpak e Snap garantem que você sempre usará a "
+"versão mais recente e executará o OnionShare dentro de uma sandbox."
#: ../../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 ""
+"O suporte a Snap está embutido no Ubuntu e o Fedora vem com suporte a "
+"Flatpak, mas você decide o que usar. Ambos funcionam em todas as "
+"distribuições Linux."
#: ../../source/install.rst:19
msgid ""
"**Install OnionShare using Flatpak**: "
"https://flathub.org/apps/details/org.onionshare.OnionShare"
msgstr ""
+"**Instalar o OnionShare usando Flatpak**: https://flathub.org/apps/details/"
+"org.onionshare.OnionShare"
#: ../../source/install.rst:21
msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare"
msgstr ""
+"**Instalar o OnionShare usando o 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 ""
+"Você também pode baixar e instalar pacotes `` .flatpak`` ou `` .snap`` "
+"assinados por PGP em https://onionshare.org/dist/ se preferir."
#: ../../source/install.rst:28
msgid "Verifying PGP signatures"
-msgstr ""
+msgstr "Verificando as assinaturas PGP"
#: ../../source/install.rst:30
msgid ""
@@ -78,10 +95,15 @@ msgid ""
"binaries include operating system-specific signatures, and you can just "
"rely on those alone if you'd like."
msgstr ""
+"Você pode verificar se o pacote baixado é legítimo e não foi adulterado "
+"verificando sua assinatura PGP. Para Windows e macOS, esta etapa é opcional "
+"e fornece defesa em profundidade: os binários do OnionShare incluem "
+"assinaturas específicas do sistema operacional e você pode confiar apenas "
+"nelas, se desejar."
#: ../../source/install.rst:34
msgid "Signing key"
-msgstr ""
+msgstr "Chave de assinatura"
#: ../../source/install.rst:36
msgid ""
@@ -91,6 +113,11 @@ msgid ""
"<https://keys.openpgp.org/vks/v1/by-"
"fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
msgstr ""
+"Os pacotes são assinados por Micah Lee, o desenvolvedor principal, usando "
+"sua chave pública PGP com impressão digital `` "
+"927F419D7EC82C2F149C1BD1403C2657CD994F73``. Você pode baixar a chave de "
+"Micah `do keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/"
+"by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>` _."
#: ../../source/install.rst:38
msgid ""
@@ -98,10 +125,14 @@ msgid ""
"probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you "
"probably want `Gpg4win <https://www.gpg4win.org/>`_."
msgstr ""
+"Você deve ter o GnuPG instalado para verificar as assinaturas. Para macOS "
+"você provavelmente utilizaria o `GPGTools <https://gpgtools.org/>` _, e para "
+"Windows você provavelmente utilizaria o `Gpg4win <https://www.gpg4win.org/>` "
+"_."
#: ../../source/install.rst:41
msgid "Signatures"
-msgstr ""
+msgstr "Assinaturas"
#: ../../source/install.rst:43
msgid ""
@@ -111,10 +142,15 @@ msgid ""
"OnionShare. You can also find them on the `GitHub Releases page "
"<https://github.com/micahflee/onionshare/releases>`_."
msgstr ""
+"Você pode encontrar as assinaturas (como arquivos `` .asc``), bem como "
+"Windows, macOS, Flatpak, Snap e pacotes de origem, em https://onionshare.org/"
+"dist/ nas pastas nomeadas para cada versão do OnionShare. Você também pode "
+"encontrá-los na página de lançamentos do GitHub <https://github.com/"
+"micahflee/onionshare/releases> `_."
#: ../../source/install.rst:47
msgid "Verifying"
-msgstr ""
+msgstr "Verificando"
#: ../../source/install.rst:49
msgid ""
@@ -122,14 +158,17 @@ msgid ""
"downloaded the binary and and ``.asc`` signature, you can verify the "
"binary for macOS in a terminal like this::"
msgstr ""
+"Depois de importar a chave pública de Micah para o seu keychain GnuPG, "
+"baixar o binário e a assinatura `` .asc``, você pode verificar o binário "
+"para macOS em um terminal como este ::"
#: ../../source/install.rst:53
msgid "Or for Windows, in a command-prompt like this::"
-msgstr ""
+msgstr "Ou para Windows, em um prompt de comando como este ::"
#: ../../source/install.rst:57
msgid "The expected output looks like this::"
-msgstr ""
+msgstr "O resultado esperado se parece com isso::"
#: ../../source/install.rst:69
msgid ""
@@ -139,6 +178,11 @@ msgid ""
" the package, it only means you haven't already defined any level of "
"'trust' of Micah's PGP key.)"
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.)"
#: ../../source/install.rst:71
msgid ""
@@ -147,6 +191,10 @@ msgid ""
" the `Tor Project <https://support.torproject.org/tbb/how-to-verify-"
"signature/>`_ may be useful."
msgstr ""
+"Se você quiser aprender mais sobre a verificação de assinaturas PGP, os "
+"guias para `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/"
+">` _ e o `Tor Project <https: // support .torproject.org / tbb / how-to-"
+"verify-signature /> `_ podem ser úteis."
#~ msgid "Install on Windows or macOS"
#~ msgstr ""
@@ -333,4 +381,3 @@ msgstr ""
#~ "Project <https://support.torproject.org/tbb/how-to-"
#~ "verify-signature/>`_ may be helpful."
#~ msgstr ""
-
diff --git a/docs/source/locale/ru/LC_MESSAGES/advanced.po b/docs/source/locale/ru/LC_MESSAGES/advanced.po
index a3fc50b4..25c7d791 100644
--- a/docs/source/locale/ru/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/ru/LC_MESSAGES/advanced.po
@@ -7,8 +7,8 @@ msgid ""
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-02-19 11:50+0000\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: ru <LL@li.org>\n"
"Language: ru\n"
@@ -17,16 +17,16 @@ 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.7-dev\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 ""
@@ -36,11 +36,11 @@ 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 ""
@@ -50,8 +50,8 @@ msgid ""
msgstr ""
"Чтобы сделать любую вкладку постоянной, отметье пункт \"Сохранить эту "
"вкладку, и открывать ее автоматически при открытии OnionShare\" перед "
-"запуском сервера. При сохранении вкладки появится иконка сиреневого цвета с "
-"изображением булавки слева от статуса сервера."
+"запуском сервера. При сохранении вкладки появится иконка сиреневого цвета"
+" с изображением булавки слева от статуса сервера."
#: ../../source/advanced.rst:18
msgid ""
@@ -59,17 +59,18 @@ msgid ""
"start opened. You'll have to manually start each service, but when you do"
" they will start with the same OnionShare address and password."
msgstr ""
-"Теперь, при завершении работы с OnionShare и повторном запуске, сохранённые "
-"вкладки открываются автоматически. Сервис на каждой вкладке нужно запустить "
-"вручную, но при этом адрес и пароль OnionShare остаются прежние."
+"Теперь, при завершении работы с OnionShare и повторном запуске, "
+"сохранённые вкладки открываются автоматически. Сервис на каждой вкладке "
+"нужно запустить вручную, но при этом адрес и пароль OnionShare остаются "
+"прежние."
#: ../../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 ""
-"При сохранении вкладки копия ключа \"лукового\" сервиса также будет "
-"сохранена на компьютере вместе с настройками OnionShare."
+"При сохранении вкладки копия ключа onions сервиса также будет сохранена "
+"на компьютере вместе с настройками OnionShare."
#: ../../source/advanced.rst:26
msgid "Turn Off Passwords"
@@ -82,10 +83,11 @@ msgid ""
"wrong guesses at the password, your onion service is automatically "
"stopped to prevent a brute force attack against the OnionShare service."
msgstr ""
-"По умолчанию, все сервисы OnionShare защищены при помощи имени пользователя "
-"``onionshare`` и произвольно-сгенерированного пароля. Если кто-то делает 20 "
-"попыток доступа с ошибочным паролем, сервис автоматически останавливается, "
-"чтобы предотвратить 'brute-force' атаку на сервис."
+"По умолчанию, все сервисы OnionShare защищены при помощи имени "
+"пользователя ``onionshare`` и произвольно-сгенерированного пароля. При "
+"совершении более 20-ти попыток доступа с неверным паролем, сервис "
+"автоматически останавливается, чтобы предотвратить 'brute-force' атаку на"
+" сервис."
#: ../../source/advanced.rst:31
msgid ""
@@ -98,7 +100,7 @@ msgid ""
msgstr ""
"Иногда может потребоваться сделать сервис OnionShare общедоступным, "
"например, запустить сервис приёма файлов, чтобы люди могли безопасно и "
-"анонимно присылать свои файлы. В таком случае рекомендуется полностью "
+"анонимно прислать свои файлы. В данном случае рекомендуется полностью "
"отключить проверку пароля. Если этого не сделать, кто-то может заставить "
"сервис остановиться, если сделает 20 попыток доступа с неверным паролем, "
"даже если правильны пароль ему известен."
@@ -109,15 +111,37 @@ msgid ""
"password\" box before starting the server. Then the server will be public"
" and won't have a password."
msgstr ""
-"Чтобы отключить использование пароля для любой вкладки, отметьте пункт \"Не "
-"использовать пароль\" перед запуском сервера. В этом случае сервер "
+"Чтобы отключить использование пароля для любой вкладки, отметьте пункт "
+"\"Не использовать пароль\" перед запуском сервера. В этом случае сервер "
"становится общедоступным и проверка пароля не осуществляется."
-#: ../../source/advanced.rst:38
+#: ../../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 ""
+"По умолчанию, когда люди открывают страницу OnionShare в браузере Tor, они "
+"видят стандартное название сервиса. Например, стандартный заголовок чата это "
+"\"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 ""
+"Если вы хотите указать своё название для сервиса, используйте настройку "
+"\"Custom title\" перед запуском сервиса."
+
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Планирование времени"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -126,12 +150,13 @@ msgid ""
"set the respective desired dates and times."
msgstr ""
"OnionShare поддерживает возможность точного планирования, когда сервис "
-"должен запуститься или остановиться. Перед запуском сервера, нажмите на его "
-"вкладке кнопку \"Показать дополнительные настройки\", отметьте нужные пункты:"
-" \"Запустить сервис onion в назначенное время\", \"Остановить сервис onion в "
-"назначенное время\", и укажите нужную дату и время для каждого пункта."
+"должен запуститься или остановиться. Перед запуском сервера, нажмите на "
+"его вкладке кнопку \"Показать дополнительные настройки\", отметьте нужные"
+" пункты: \"Запустить сервис onion в назначенное время\", \"Остановить "
+"сервис onion в назначенное время\", и укажите нужную дату и время для "
+"каждого пункта."
-#: ../../source/advanced.rst:43
+#: ../../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 "
@@ -139,11 +164,11 @@ msgid ""
" will see a timer counting down to when it will stop automatically."
msgstr ""
"Если запуск сервиса был запланирован на будущее, то при нажатии кнопки "
-"\"Сделать доступным для скачивания\" появится таймер обратного отсчёта до "
-"запуска сервиса. Если была запланирована остановка сервиса, то после нажатия "
-"кнопки появится таймер обратного отсчёта до отстановки сервиса."
+"\"Сделать доступным для скачивания\" появится таймер обратного отсчёта до"
+" запуска сервиса. Если была запланирована остановка сервиса, то после "
+"нажатия кнопки появится таймер обратного отсчёта до отстановки сервиса."
-#: ../../source/advanced.rst:46
+#: ../../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 "
@@ -151,12 +176,12 @@ msgid ""
" you can cancel the service before it's scheduled to start."
msgstr ""
"**Запланированный автоматический запуск сервиса OnionShare может быть "
-"использован как 'переключатель мертвеца'\". ** В этом случае сервис окажется "
-"общедоступен в указанное время, в случае если с отправителем может что-то "
-"случится. Если всё обойдётся, отправитель может остановить таймер до "
-"автоматического запуска."
+"использован как 'переключатель мертвеца'\". ** В этом случае сервис "
+"окажется общедоступен в указанное время, в случае если с отправителем "
+"что-то произойдёт. Если угроза исчезнет, отправитель сможет остановить "
+"таймер до автоматического запуска."
-#: ../../source/advanced.rst:51
+#: ../../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 "
@@ -165,68 +190,69 @@ msgid ""
msgstr ""
"**Запланированная автоматическая остановка сервиса OnionShare может быть "
"использована, чтобы ограничить время огласки\". ** Например может "
-"потребоваться сделать доступными для скачивания тайные документы на "
-"определённый период времени, чтобы они были доступны пользователям в "
-"Интернете всего несколько дней."
+"потребоваться сделать доступными для скачивания секретные документы на "
+"определённый период времени, чтобы они были доступны пользователям в сети"
+" Интернет всего несколько дней."
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Интерфейс командной строки"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
msgstr ""
-"В дополнение к графическому интерфейсу, у OnionShare есть поддержка "
-"использования с командной строки."
+"В дополнение к графическому интерфейсу, у OnionShare присутствует "
+"поддержка интерфейса командной строки."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
msgstr ""
-"Отдельно установить консольную версию OnionShare можно при помощи ``pip3``::"
+"Отдельно установить консольную версию OnionShare можно при помощи "
+"``pip3``::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
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``"
+"Для работы консольной версии также необходимо установить пакет ``tor``. "
+"Для установки пакета в операционной системе macOS выполните команду: "
+"``brew install tor``"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Затем произведите запуск следующим образом::"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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 ""
"Если установка OnionShare была произведена при помощи Linux Snapcraft, "
-"запуск консольной версии возможен при помощи команды: ``onionshare.cli``."
+"запустить консольную версию можно при помощи команды: ``onionshare.cli``."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Использование"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-"Чтобы просмотреть документацию консольной версии OnionShare выполните "
+"Чтобы просмотреть документацию консольной версии OnionShare запустите "
"команду: ``onionshare --help``::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Устаревшие Адреса"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
@@ -234,23 +260,23 @@ msgstr ""
"OnionShare по умолчанию исользует v3 Tor сервисов onion. Это современные "
"onion адреса, состоящие из 56 символов например::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
msgstr ""
-"OnionShare всё ещё поддерживает адреса v2 Tor onion сервисов, состоящие из "
-"16 символов, например::"
+"OnionShare всё ещё поддерживает адреса v2 Tor onion сервисов, состоящие "
+"из 16 символов, например::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
-"OnionShare обозначает v2 onion адреса как \"устаревшие\" и не рекомендует их "
-"к использованию, поскольку v3 onion адреса более безопасны."
+"OnionShare обозначает v2 onion адреса как \"устаревшие\" и не рекомендует"
+" их использование, поскольку v3 onion адреса более безопасны."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -259,14 +285,14 @@ msgid ""
"cannot remove legacy mode in that tab. Instead you must start a separate "
"service in a separate tab."
msgstr ""
-"Для использования устаревших адресов, перед запуском сервера на его вкладке "
-"нужно нажать кнопку \"Показать рассширенные настройки\" и отметить пункт "
-"\"Использовать устаревшую версию адресов (версия 2 сервиса Тор, не "
-"рукомендуем)\". В \"устаревшем\" режиме возможно включить аутентификацию "
-"клента Tor. Отключить \"устаревший\" режим сервера для вкладки невозможно, "
-"необходимо перезапустить сервис в новой вкладке."
-
-#: ../../source/advanced.rst:150
+"Для использования устаревших адресов, перед запуском сервера на его "
+"вкладке нужно нажать кнопку \"Показать рассширенные настройки\" и "
+"отметить пункт \"Использовать устаревшую версию адресов (версия 2 сервиса"
+" Тор, не рукомендуем)\". В \"устаревшем\" режиме возможно включить "
+"аутентификацию клента Tor. Отключить \"устаревший\" режим сервера для "
+"вкладки невозможно, необходимо перезапустить сервис в новой вкладке."
+
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
@@ -274,9 +300,9 @@ msgid ""
"then."
msgstr ""
"Tor Project планирует `полностью отказаться от v2 onion сервисов "
-"<https://blog.torproject.org/v2-deprecation-timeline> _ 15-ого Октября 2021. "
-"\"Устаревшие\" сервисы onion будут удалены из OnionShare до наступления этой "
-"даты."
+"<https://blog.torproject.org/v2-deprecation-timeline> `_ 15-ого Октября "
+"2021. \"Устаревшие\" сервисы onion будут удалены из OnionShare до "
+"наступления этой даты."
#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
#~ msgstr ""
diff --git a/docs/source/locale/ru/LC_MESSAGES/develop.po b/docs/source/locale/ru/LC_MESSAGES/develop.po
index 91e4a969..9887fec3 100644
--- a/docs/source/locale/ru/LC_MESSAGES/develop.po
+++ b/docs/source/locale/ru/LC_MESSAGES/develop.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: 2020-11-15 14:42-0800\n"
-"PO-Revision-Date: 2021-02-21 18:25+0000\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
+"PO-Revision-Date: 2021-04-01 18:26+0000\n"
"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
-"Language-Team: ru <LL@li.org>\n"
"Language: ru\n"
+"Language-Team: ru <LL@li.org>\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.5\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -39,16 +38,16 @@ msgid ""
"<https://keybase.io/team/onionshare>`_. Within the app, go to \"Teams\", "
"click \"Join a Team\", and type \"onionshare\"."
msgstr ""
-"Существует открытая команда на платформе KeyBase, чтобы обсуждать проект в "
-"целом, задавать вопросы, делиться идеями и планами относительно последующей "
-"разработки OnionShare. (Так же, это лёгкий способ делиться зашифрованными "
-"сквозным шифрованием сообщениями с другими пользователями OnionShare, "
-"например, чтобы делиться адресами OnionShare). Для того, чтобы начать "
-"пользоваться Keybase, нужно загрузить приложение по ссылке `Keybase app "
-"<https://keybase.io/download>`_, создать учётную запись и `присоединиться к "
-"этой команде <https://keybase.io/team/onionshare>`_. Внутри самого "
-"приложения, нужно перейти в раздел \"Teams\", нажать кнопку \"Join a Team\" "
-"и ввести название \"onionshare\"."
+"Существует открытая команда на платформе KeyBase, чтобы обсуждать проект "
+"в целом, задавать вопросы, делиться идеями и планами относительно "
+"последующей разработки OnionShare. (Так же, это лёгкий способ делиться "
+"зашифрованными сквозным шифрованием сообщениями с другими пользователями "
+"OnionShare, например, чтобы делиться адресами OnionShare). Для того, "
+"чтобы начать пользоваться Keybase, нужно загрузить приложение по ссылке "
+"`Keybase app <https://keybase.io/download>`_, создать учётную запись и "
+"`присоединиться к этой команде <https://keybase.io/team/onionshare>`_. "
+"Внутри самого приложения, нужно перейти в раздел \"Teams\", нажать кнопку"
+" \"Join a Team\" и ввести название \"onionshare\"."
#: ../../source/develop.rst:12
msgid ""
@@ -56,34 +55,37 @@ msgid ""
"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
"and and designers to discuss the project."
msgstr ""
-"У OnionShare также существует `почтовая рассылка <https://lists.riseup.net/"
-"www/subscribe/onionshare-dev>`_ для разработчиков и дизайнеров."
+"У OnionShare также существует `почтовая рассылка "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ для "
+"разработчиков и дизайнеров интерфейса."
#: ../../source/develop.rst:15
msgid "Contributing Code"
msgstr "Участие в программировании"
#: ../../source/develop.rst:17
+#, fuzzy
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
-"Если Вы хотите написать код для OnionShare, может оказаться полезным "
-"присоединиться к команде OnionShare и задать несколько вопросов относительно "
-"планов своей работы. Так же рекомендуется просмотреть `открытые задачи "
-"<https://github.com/micahflee/onionshare/issues>`_ на GitHub, возможно Вы "
-"сможете решить какую-то из них."
+"Если Вы хотите написать код для OnionShare, рекомендуется присоединиться "
+"к команде OnionShare и задать несколько вопросов относительно планов "
+"своей работы. Так же рекомендуется просмотреть `открытые задачи "
+"<https://github.com/micahflee/onionshare/issues>`_ на GitHub, возможно Вы"
+" сможете решить какую-то из них."
#: ../../source/develop.rst:22
msgid ""
@@ -92,9 +94,9 @@ msgid ""
" ask questions, request changes, reject it, or merge it into the project."
msgstr ""
"Когда Вы будете готовы поделиться кодом, создайте \"pull request\" в "
-"репозитории GitHub, после чего один из сопровождающих проекта просмотрит "
-"изменения, возможно задаст вопросы, попросит об что-то переделать отклонит "
-"или интегрирует Ваш код в проект."
+"репозитории GitHub, после чего один из разработчиков сопровождающих "
+"проект просмотрит изменения, возможно, задаст какие-то вопросы, попросит "
+"что-то переделать, отклонит или интегрирует Ваш код в проект."
#: ../../source/develop.rst:27
msgid "Starting Development"
@@ -103,18 +105,12 @@ msgstr "Начало разработки"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"OnionShare написан на языке Python. Для начала, нужно склонировать "
-"репозиторий Git расположенный по адресу https://github.com/micahflee/"
-"onionshare/. Файл ``cli/README.md``содержит информацию о том, как настроить "
-"рабочее окружение для разработки консольной версии, файл ``desktop/README."
-"md``, соответственно, о том, что нужно дла разработки версии OnionShare с "
-"графическим интерфейсом."
#: ../../source/develop.rst:32
msgid ""
@@ -122,10 +118,10 @@ msgid ""
"install dependencies for your platform, and to run OnionShare from the "
"source tree."
msgstr ""
-"Эти файлы содержат инструкции и команды установки необходимых библиотек/"
-"зависимостей для платформы, на которой планируется разработка приложения, а "
-"так же рассказывают как запустить OnionShare с использованием файлов "
-"репозитория, без установки."
+"Эти файлы содержат инструкции и команды установки необходимых "
+"библиотек/зависимостей для платформы, на которой планируется разработка "
+"приложения, а так же рассказывают как запустить OnionShare с "
+"использованием файлов репозитория, без установки."
#: ../../source/develop.rst:35
msgid "Debugging tips"
@@ -144,13 +140,13 @@ msgid ""
"reloaded), and other debug info. For example::"
msgstr ""
"Во время разработки, для удобства рекомендуется запускать OnionShare при "
-"помщи терминала с добавлением флагов ``--verbose`` или ``-v``. В этом случае "
-"выводится много вспомогательных сообщений, например, о том, какие "
+"помщи терминала с добавлением флагов ``--verbose`` или ``-v``. В этом "
+"случае выводится много вспомогательных сообщений, например, о том, какие "
"инициализируются объекты, когда происходит какое-либо событие (нажатие "
"кнопки, сохраняются или загружаются настройки) и другая отладочная "
"информация. Например::"
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
@@ -158,45 +154,45 @@ msgstr ""
"Можно добавить собственные отладочные сообщения, если запустить метод "
"``Common.log`` из ``onionshare/common.py``. Например::"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
"Это может быть полезно, например, во время изучения последовательности "
-"событий, происходящей во время использования OnionShare, или чтобы узнать "
-"значение определённых переменных до и после их использования."
+"событий, происходящей во время использования OnionShare, или чтобы узнать"
+" значение определённых переменных до и после их использования."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
-msgstr "Только локально"
+msgstr "Локальная Разработка"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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 ""
-"Сеть Tor медленная, и часто может быть удобно полностью пропустить запуск "
-"onion сервисов во время разработки. Это можно сделать с использованием флага "
-"``--local-only``. Например::"
+"Сеть Tor медленная, и часто может быть удобно полностью пропустить запуск"
+" onion сервисов во время разработки. Это можно сделать с использованием "
+"флага ``--local-only``. Например::"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
-"В таком случае можно использовать URL ``http://onionshare:train-system@127.0."
-"0.1:17635`` в обычном веб-браузере, например, Firefox, вместо использования "
-"Tor Browser."
+"В таком случае можно использовать URL ``http://onionshare:train-"
+"system@127.0.0.1:17635`` в обычном веб-браузере, например, Firefox, "
+"вместо использования Tor Browser."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Участие в переводах"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -205,22 +201,23 @@ msgid ""
"needed."
msgstr ""
"Помогите сделать OnionShare легче для использования, более приветливым и "
-"знакомым для людей при помощи платформы переводов на другие языки `Hosted "
-"Weblate <https://hosted.weblate.org/projects/onionshare/>`_. Всегда "
-"используйте латинские буквы при написании \"OnionShare\" и при необходимости "
-"добавляйте переведённое название в виде \"OnionShare (перевод)\"."
+"знакомым для людей при помощи платформы переводов на другие языки `Hosted"
+" Weblate <https://hosted.weblate.org/projects/onionshare/>`_. Всегда "
+"используйте латинские буквы при написании \"OnionShare\" и при "
+"необходимости добавляйте переведённое название в виде \"OnionShare "
+"(перевод)\"."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-"Чтобы начать заниматься переводами нужно создать учётную запись на платформе "
-"Hosted Weblated."
+"Чтобы начать заниматься переводом, нужно создать учётную запись на "
+"платформе Hosted Weblate."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr "Предложения по исходному английскому тексту"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
@@ -228,7 +225,7 @@ msgstr ""
"Иногда исходный текст на английском языке содержит ошибки, или работа "
"приложения не совпадает с документацией."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 "
@@ -236,23 +233,23 @@ msgid ""
"the usual code review processes."
msgstr ""
"Чтобы прежложить изменения к исходному тексту, добавьте @kingu к своему "
-"комментарию на Weblate. Так же можно создать 'issue' или 'pull request' в "
-"проекте OnionShare на портале GitHub, это гарантирует, что основные "
+"комментарию на Weblate. Так же можно создать 'issue' или 'pull request' в"
+" проекте OnionShare на портале GitHub, это гарантирует, что основные "
"разработчики увидят предложение и, возможно, изменят исходный текст."
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Статус Переводов"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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 ""
-"Это текущий статус передов. Если Вы хотите начать делать перевод на языке, "
-"которого пока нет в списке доступных на Weblate, пожлауйста напишите письмо "
-"на этот адрес: onionshare-dev@lists.riseup.net"
+"Это текущий статус передов. Если Вы хотите начать делать перевод на "
+"языке, которого пока нет в списке доступных на Weblate, пожалуйста, "
+"напишите письмо на этот адрес: onionshare-dev@lists.riseup.net"
#~ msgid ""
#~ "OnionShare is developed in Python. To"
@@ -469,3 +466,27 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "OnionShare написан на языке программирования"
+#~ " Python. Для начала, нужно склонировать "
+#~ "репозиторий Git расположенный по адресу "
+#~ "https://github.com/micahflee/onionshare/. Файл "
+#~ "``cli/README.md``содержит информацию о том, "
+#~ "как настроить рабочее окружение для "
+#~ "разработки консольной версии, файл "
+#~ "``desktop/README.md``, соответственно, о том, "
+#~ "что нужно дла разработки версии "
+#~ "OnionShare с графическим интерфейсом."
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/features.po b/docs/source/locale/ru/LC_MESSAGES/features.po
index b4d03165..2821be25 100644
--- a/docs/source/locale/ru/LC_MESSAGES/features.po
+++ b/docs/source/locale/ru/LC_MESSAGES/features.po
@@ -7,9 +7,9 @@ msgid ""
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-19 08:28+0000\n"
-"Last-Translator: Yuri Slobodyanyuk <yuri@yurisk.info>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-11 20:47+0000\n"
+"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: ru <LL@li.org>\n"
"Language: ru\n"
"MIME-Version: 1.0\n"
@@ -17,13 +17,12 @@ 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.4-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
-#, fuzzy
msgid "How OnionShare Works"
-msgstr "Как работает OnionShare"
+msgstr "Принципы работы OnionShare"
#: ../../source/features.rst:6
msgid ""
@@ -31,16 +30,18 @@ msgid ""
"other people as `Tor <https://www.torproject.org/>`_ `onion services "
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
-"OnionShare работает посредством запуска веб серверов локально на Вашем "
-"компьтере, делая их затем доступными другим пользователям через`Tor "
-"<https://www.torproject.org/>`_ `onion services <https://community.torproject"
-".org/onion-services/>`_."
+"OnionShare запускает службы локально на компьютере пользователя и затем "
+"делает их доступными другим людям при помощи`Tor "
+"<https://www.torproject.org/>`_ `onion сервисов "
+"<https://community.torproject.org/onion-services/>`_."
#: ../../source/features.rst:8
msgid ""
"By default, OnionShare web addresses are protected with a random "
"password. A typical OnionShare address might look something like this::"
msgstr ""
+"По умолчанию, веб адреса OnionShare защищены случайным паролем. Пример "
+"типового адреса OnionShare выглядит так::"
#: ../../source/features.rst:12
msgid ""
@@ -49,12 +50,19 @@ msgid ""
"something less secure like unencrypted e-mail, depending on your `threat "
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
+"Безопасность передачи этого адреса зависит от пользователя OnionShare. "
+"Исходя из `модели угрозы <https://ssd.eff.org/module/your-security-"
+"plan>`_, можно использовать либо приложение для обмена зашифрованными "
+"сообщениями, либо сервис электронной почты без шифрования."
#: ../../source/features.rst:14
msgid ""
"The people you send the URL to then copy and paste it into their `Tor "
"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
msgstr ""
+"Чтобы получить доступ к сервисам OnionShare, получатели веб-адреса должны"
+" скопировать и вставить его в адресную строку `Tor Browser "
+"<https://www.torproject.org/>`_."
#: ../../source/features.rst:16
msgid ""
@@ -63,6 +71,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 будет недоступен до тех пор, пока у ноутбука "
+"не будет восстановлено соединение с сетью Internet. Рекомендуется "
+"использовать OnionShare для взаимодействия с другими людьми в режиме "
+"\"реального времени\"."
#: ../../source/features.rst:18
msgid ""
@@ -72,10 +86,16 @@ msgid ""
"Tor onion services too, it also protects your anonymity. See the "
":doc:`security design </security>` for more info."
msgstr ""
+"Поскольку комьютер пользователя является одновременно веб-сервером, "
+"*никакие третьи лица не имеют доступа к внутренним процессам OnionShare*,"
+" включая разработчиков. Приложение полностью приватно. И, поскольку "
+"работа OnionShare основана на использовании onion сервисов сети Tor, он "
+"также защищает анонимность пользователя. Дополнительную информацию можно "
+"найти :здесь:`Обеспечение безопасности </security>`."
#: ../../source/features.rst:21
msgid "Share Files"
-msgstr ""
+msgstr "Отправка файлов"
#: ../../source/features.rst:23
msgid ""
@@ -83,12 +103,19 @@ 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
+#: ../../source/features.rst:27 ../../source/features.rst:104
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 ""
+"После добавления файлов в OnionShare отобразятся некоторые настройки. "
+"Убедитесь, что используете только интересующие Вас настройки перед "
+"началом отправки."
#: ../../source/features.rst:31
msgid ""
@@ -98,6 +125,11 @@ msgid ""
" files have been sent (uncheck to allow downloading individual files)\" "
"box."
msgstr ""
+"Как только завершится первая загрузка файлов, OnionShare автоматически "
+"остановит сервер и удалит веб-сайт из сети Internet. Чтобы разрешить "
+"нескольким людями загружать Ваши файлы, снимите флажок с настройки "
+"\"Закрыть доступ к файлам после их отправки (отмените чтобы разрешить "
+"скачивание отдельных файлов)\"."
#: ../../source/features.rst:34
msgid ""
@@ -105,6 +137,8 @@ msgid ""
"individual files you share rather than a single compressed version of all"
" the files."
msgstr ""
+"Также, если этот флажок снят, люди смогут загружать отдельные файлы из "
+"раздачи, вместо одного большого сжатого архива."
#: ../../source/features.rst:36
msgid ""
@@ -113,6 +147,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 ""
+"Если готово к отправкк, нужно нажать кнопку \"Сделать доступным для "
+"скачивания\". В экстренных случаях всегда есть возможность нажть кнопку "
+"\"Отменить доступ к скачиванию\" или выйти из OnionShare чтобы немедленно"
+" отключить сайт. Для просмотра истории раздач и прогресса текущих раздач,"
+" нажмите кнопку \"↑\" в правом верхнем углу приложения."
#: ../../source/features.rst:40
msgid ""
@@ -121,6 +160,11 @@ msgid ""
"or the person is otherwise exposed to danger, use an encrypted messaging "
"app."
msgstr ""
+"Теперь, когда отображается адрес сервиса OnionShare, его нужно "
+"скопировать и отправить получателю файлов. Если файлы должны оставаться в"
+" безопасности или получатель по той или иной причине находится под "
+"угрозой, для передачи адреса используйте приложение для обмена "
+"зашифроваными сообщениями."
#: ../../source/features.rst:42
msgid ""
@@ -129,44 +173,105 @@ msgid ""
"downloaded directly from your computer by clicking the \"Download Files\""
" link in the corner."
msgstr ""
+"Получателю нужно перейти по полученному веб-адресу при помощи Tor "
+"Browser'а. После того, как получатель пройдёт авторизацию при помощи "
+"пароля, включённого в адрес сервиса OnionShare, он сможет загрузить файлы"
+" прямо на свой компьютер, нажав на ссылку \"Загрузить Файлы\"."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr ""
+msgid "Receive Files and Messages"
+msgstr "Получение файлов и сообщений"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
+"Вы можете использовать OnionShare, чтобы дать людям возможность анонимно "
+"отправлять файлы и сообщения прямо на ваш компьютер, по сути превращая его в "
+"анонимный аналог Dropbox. Откройте вкладку \"Получить\" и установите "
+"желаемые настройки."
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+"Вы можете указать папку, куда будут сохраняться полученные файлы и сообщения."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
+"Вы можете запретить отправку сообщений, если хотите только получить файлы. "
+"Или запретить загрузку файлов, если хотите только отправлять сообщения. "
+"Например, чтобы сделать анонимную форму для связи."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Вы можете установить флажок \"Использовать веб-хук для отправки уведомлений\""
+" и затем указать URL веб-хука, чтобы получить уведомление, что кто-то "
+"загружает файлы и отправляет файлы на ваш сервис приёма OnionShare. При "
+"подключени это опции, OnionShare отправит HTTP POST запрос на указанный URL "
+"когда кто-либо загрузит файлы или отправит сообщение. Например, чтобы "
+"получить зашифрованное сообщение в приложении `Keybase <https://keybase.io/>`"
+", нужно начать беседу со строки `@webhookbot <https://keybase.io/webhookbot>`"
+"_, затем ввести ``!webhook create onionshare-alerts``, и в ответ придёт URL. "
+"Используйте этот URL для отправки уведомлений при помощи веб-хука. Когда кто-"
+"либо загрузит файл на ваш сервис приёма OnionShare, @webhookbot отправит "
+"сообщение в приложение Keybase как только это произойдёт."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Когда вы будете готовы, нажмите «Запустить режим получения». Это запустит "
+"службу OnionShare. Любой, кто откроет этот адрес в своём Tor-браузере, "
+"сможет отправлять файлы и сообщения, которые будут загружены на ваш "
+"компьютер."
+
+#: ../../source/features.rst:67
+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 ""
+"Для просмотра истории получения и прогресса текущих загрузок, нажмите "
+"кнопку \"↓\" в правом верхнем углу."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
-msgstr ""
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
+msgstr "Примерно так выглядит OnionShare когда кто-то вам отправляет файлы."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
+"Когда кто-либо загружает файлы или отправляет текстовые сообщения на ваш "
+"сервис приёма данных, по умолчанию они (файлы и сообщения) сохраняются в "
+"папку ``OnionShare`` в домашнией директории компьютера и автоматически "
+"распределяются в поддиректории в зависимости от времени загрузки."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -174,20 +279,27 @@ msgid ""
"quite as secure version of `SecureDrop <https://securedrop.org/>`_, the "
"whistleblower submission system."
msgstr ""
+"Использование OnionShare в качестве сервиса получения файлов может быть "
+"полезным, например, для журналистов, в случае если нужно безопасно "
+"получить документы от анонимного источника."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
-msgstr ""
+msgstr "Возможные риски"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail 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 ""
+"Как и вредоносные приложения к письмам электронной почты, файлы "
+"загружаемые на Ваш компьютер при помощи OnionShare могут быть "
+"использованы для атаки. OnionShare не содержит какого-либо защитного "
+"механизма операционной системы от вредоносных файлов."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -196,38 +308,64 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
+"Если при помощи OnionShare был получен документ Office или PDF, его можно"
+" преобразовать в определённый формат PDF и, затем, безопасно открыть при "
+"помощи `Dangerzone <https://dangerzone.rocks/>`_. Так же, в качестве "
+"защиты при работе с подозрительными документами, можно ииспользовать ОС "
+"`Tails <https://tails.boum.org/>`_ или внутри одноразовой виртуальной "
+"машины ОС `Qubes <https://qubes-os.org/>`_."
+
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Тем не менее, открывать сообщения присланные через OnionShare всегда "
+"безопасно."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
-msgstr ""
+msgstr "Советы для использования сервиса приёма файлов"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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 ""
+"Если нужно разместить свой собственный анонимный почтовый язщик для "
+"приёма документов, рекомендуется сделать это при помощи отдельного "
+"компьютера, постоянно подключённого к сети питания, который не "
+"используется для обычной работы."
-#: ../../source/features.rst:80
+#: ../../source/features.rst:91
+#, 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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). 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`)."
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
-msgstr ""
+msgstr "Размещение Вебсайта"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
"\"Start sharing\" when you are ready."
msgstr ""
+"Чтобы разместить статический HTML сайт при помощи OnionShare, нужно "
+"соответствующую вкладку, перетащить файлы и директории со статическим "
+"содержимым и, когда всё будет готово, нажать кнопку \"Сделать доступным "
+"для скачивания\"."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -236,19 +374,29 @@ msgid ""
"websites that execute code or use databases. So you can't for example use"
" WordPress.)"
msgstr ""
+"Если добавить во вкладку файл ``index.html``, то он отобразится как "
+"вебсайт, когда кто-то перейдёт по веб-адресу сервиса OnionShare. Также "
+"следует приложить все прочие HTML, CSS JavaScript файлы и изображения из "
+"которых состоит вебсайт. (Обратите внимание, что OnionShare поддерживает "
+"создание только *статических* файлов и не может быть использован для "
+"размещения веб-приложений или сайтов, использующих базы данных (например,"
+" WordPress).)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 ""
+"Если файл ``index.html`` отсутствует, то при октрытии адреса OnionShare "
+"отобразится список директорий и файлов, которые можно просмотреть и/или "
+"загрузить."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
-msgstr ""
+msgstr "Политика безопасности контента"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -256,20 +404,30 @@ msgid ""
"However, this prevents third-party content from loading inside the web "
"page."
msgstr ""
+"По умолчанию OnionShare помогает обезопасить вебсайт пользователя, "
+"устанавливая строгую `Политикаубезопасности контента "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ . Тем не менее,"
+" это исключает возможность загрузки и использования на веб-странице "
+"контента из сторонних источников."
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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, то нужно "
+"установить флажок \"Не отправлять заголовок политики безопасности "
+"контента\" перед запуском сервиса. Это позволит вебсайту использовать "
+"сторонние источники содержимого."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
-msgstr ""
+msgstr "Советы по использованию сервсиа размещения вебсайтов"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -278,72 +436,106 @@ 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 ""
-
-#: ../../source/features.rst:110
+"Чтобы разместить сайт при помощи OnionShare на длительный срок (то есть, "
+"не для быстрой демонстрации чего-то кому-то), рекомендуется сделать это "
+"при помощи отдельного компьютера, постоянно подключённого к сети питания "
+"и Интернету, который не используется для обычной работы. Также, нужно "
+"сохранить вкладку (подробнее :ref:`save_tabs`), чтобы в дальнейшем можно "
+"было восстановить доступ к вебсайту с тем же самым адресом, в случае "
+"закрытия и повторного запуска OnionShare."
+
+#: ../../source/features.rst:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
msgstr ""
+"Если планируется сделать сайт общедоступным, рекомендуется отключить "
+"проверку паролей (подробнее :ref:`turn_off_passwords`)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
-msgstr ""
+msgstr "Анонимный чат"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it 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."
msgstr ""
+"После запуска сервера, нужно скопировать адрес OnionShare и отправить "
+"людям, с которыми планируется анонимная переписка. Если нужно ввести "
+"ограничить круг участников, используйте для рассылки адреса OnionShare "
+"приложение для обмена зашифрованными сообщениями."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 ""
+"Участники могут присодиниться к чату при помощи адреса OnionShare и Tor "
+"Browser. Для функционирования чата нужен JavaScript, так что каждому "
+"предполагаемому участнику необходимо выставить уровень безопасности "
+"\"Обычный\" или \"Высокий\", вместо \"Высший\"."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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:133
+#: ../../source/features.rst:144
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 ""
+"В чате OnionShare всё анонимно. Любой из участников может произвольно "
+"изменить своё имя и нет никакого способа определить/подтвердить личность "
+"такого участника."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
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 ""
+"Тем не менее, если при создании чата в OnionShare вдрес будет разослан "
+"только небольшой группе проверенных друзей при помощи зашифрованных "
+"сообщений, можно быть достаточно уверенным, что в чате присутствуют "
+"друзья."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
-msgstr ""
+msgstr "Насколько это полезно?"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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 ""
+"Какая может быть польза от чата OnionShare при наличии приложений для "
+"обмена зашифрованными сообщениями? OnionShare оставляет меньше следов."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -354,8 +546,16 @@ msgid ""
"rooms don't store any messages anywhere, so the problem is reduced to a "
"minimum."
msgstr ""
-
-#: ../../source/features.rst:146
+"Например, если отправить групповое сообщение при помощи мессенджера "
+"Signal, копия сообщения появится на всех устройствах (включая компьютеры,"
+" на которых установлен Signal Desktop) каждого из участников группы. Даже"
+" если включены \"исчезающие сообщения\", достаточно трудно убедиться, что"
+" все копии сообщения были в действительности удалены со всех устройств и "
+"каких-либо других мест (например, центров уведомлений), куда они могли "
+"быть сохранены. OnionShare не хранит какие-либо сообщения, так что "
+"описанная проблема сведена к минимуму."
+
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -364,12 +564,18 @@ msgid ""
"journalist to join the chat room, all without compromosing their "
"anonymity."
msgstr ""
-
-#: ../../source/features.rst:150
+"OnionShare также может быть полезен для людей, которым нужна анонимная и "
+"безопасная переписка без создания каких-либо учётных записей. Например, с"
+" журналистом может связаться 'источник': прислать адрес OnionShare при "
+"помощи временного адреса электронной почты и затем подождать пока "
+"журналист, присоединится к чату. При таком сценарии источник не "
+"подвергает опасности свою анонимность."
+
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
-msgstr ""
+msgstr "Как работает шифрование?"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -378,12 +584,19 @@ msgid ""
"other members of the chat room using WebSockets, through their E2EE onion"
" connections."
msgstr ""
+"Работа OnionShare обеспечивается onion сервисами сети Tor, все соединения"
+" между Tor Browser и OnionShare зашифровны сквозным шифрованием (E2EE). "
+"При отправке в чат OnionShare, сообщение передаётся на сервер через E2EE "
+"onion соединение. Далее, сообщение рассылается всем участникам чата при "
+"помощи WebSockets, также при использовании E2EE и onion соединений."
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
msgstr ""
+"OnionShare не производит какое-либо шифрование чата самостоятельно. "
+"Шифрование обеспечивается onion сервисами сети Tor."
#~ msgid ""
#~ "You're responsible for securely sharing "
@@ -760,3 +973,53 @@ msgstr ""
#~ "WebSockets, through their E2EE onion "
#~ "connections."
#~ msgstr ""
+
+#~ msgid "Receive Files"
+#~ msgstr "Получение файлов"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "Возможно использование OnionShare в качестве"
+#~ " анонимного почтового ящика, чтобы другие"
+#~ " люди загружали файлы на компьютер "
+#~ "получателя, сохраняя при этом анонимность. "
+#~ "Для этого нужно открыть вкладку "
+#~ "\"Получение\", выбрать директорию для "
+#~ "сохранения файлов, произвести некоторые "
+#~ "настройки и затем нажать на кнопку "
+#~ "\"Включить режим получения\"."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Это запустит сервис OnionShare. Любой, у"
+#~ " кого есть веб-адрес данного сервиса "
+#~ "сможет загрузить файлы на компьютер "
+#~ "получателя при помощи Tor Browser."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "При использовании сервиса получения, по "
+#~ "умолчанию файлы сохраняются в директорию "
+#~ "``OnionShare`` в \"домашней\" директории "
+#~ "комьютера пользователя. Эта директория "
+#~ "автоматически создаёт поддиректории в "
+#~ "зависимости от времени загрузки."
diff --git a/docs/source/locale/ru/LC_MESSAGES/help.po b/docs/source/locale/ru/LC_MESSAGES/help.po
index cc217f65..d252bebd 100644
--- a/docs/source/locale/ru/LC_MESSAGES/help.po
+++ b/docs/source/locale/ru/LC_MESSAGES/help.po
@@ -7,51 +7,52 @@ msgid ""
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-19 08:28+0000\n"
-"Last-Translator: Yuri Slobodyanyuk <yuri@yurisk.info>\n"
-"Language-Team: ru <LL@li.org>\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
+"PO-Revision-Date: 2021-04-01 18:26+0000\n"
+"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language: ru\n"
+"Language-Team: ru <LL@li.org>\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.4-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 ""
-"Данный сайт содержит множество инструкций по использованию OnionShare. "
-"Начните с просмотра всех разделов, возможно Вы найдете ответы на Ваши "
-"вопросы."
+"Данный сайт содержит большое количество инструкций по использованию "
+"OnionShare. Просмотрите все разделы, возможно, Вы найдете ответы на "
+"интересующие вопросы."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
-msgstr "Проверьте на Github отчеты о проблемах"
+msgstr "Проверьте раздел \"Issues\" на сайте Github"
#: ../../source/help.rst:12
+#, fuzzy
msgid ""
"If it isn't on the website, please check the `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
-"Если Вам не удается найти решение на этом веб сайте, пожалуйста, посмотрите "
-"здесь `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. "
-"Возможно кто-то еще столкнулся с такой же проблемой и сообщил об этом "
-"авторам или даже поделился своим решением."
+"Если решение проблемы отсутстует на данном вебсайте, пожалуйста, "
+"проверьте эту страницу: `GitHub issues "
+"<https://github.com/micahflee/onionshare/issues>`_. Возможно, кто-то еще "
+"столкнулся с аналогичной проблемой и сообщил об этом разработчикам "
+"приложения или даже поделился своим решением."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
@@ -61,15 +62,10 @@ msgstr "Сообщите о проблеме"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Если не находите решение вашей проблемы, а может хотите задать вопрос или "
-"предложить новые возможности, пожалуйста, сделайте это через `submit an "
-"issue <https://github.com/micahflee/onionshare/issues/new>`_. Для этого "
-"потребуется `создание аккаунта на Github <https://help.github.com/articles/"
-"signing-up-for-a-new-github-account/>`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -80,10 +76,31 @@ msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
-"Смотрите :ref: `collaborating` инструкции о том как присоединиться к команде "
-"Keybase в которой мы обсуждаем этот проект."
+"Ознакомьтесь с инструкцией :ref: `collaborating` о том, как "
+"присоединиться к команде Keybase, в которой мы обсуждаем проект "
+"Onionshare."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr ""
#~ "Если Вам нужна помощь с OnionShare, "
#~ "пожалуйста, следуйте следующим интсрукциям."
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Если найти решение проблемы не удалось"
+#~ " или Вы хотите задать вопрос/сделать "
+#~ "предложение, пожалуйста используйте ссылку: "
+#~ "`submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. "
+#~ "Предварительно необходимо `создать аккаунт на"
+#~ " Github <https://help.github.com/articles/signing-"
+#~ "up-for-a-new-github-account/>`_."
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/index.po b/docs/source/locale/ru/LC_MESSAGES/index.po
index a4962f04..7e28a7c8 100644
--- a/docs/source/locale/ru/LC_MESSAGES/index.po
+++ b/docs/source/locale/ru/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: 2020-11-03 10:26+0000\n"
-"Last-Translator: Yuri Slobodyanyuk <yuri@yurisk.info>\n"
+"PO-Revision-Date: 2021-02-26 05:50+0000\n"
+"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: ru\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.3.2-dev\n"
+"X-Generator: Weblate 4.5\n"
"Generated-By: Babel 2.8.0\n"
#: ../../source/index.rst:2
@@ -29,6 +29,7 @@ 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 это программное обеспечение с открытым исходным кодом позволяющее "
-"Вам безопасно и анонимно пересылать файлы, публиковать веб сайты и общаться "
-"с друзьями в чате, все это пользуясь сетью Тор."
+"OnionShare это программное обеспечение с открытым исходным кодом, которое "
+"позволяет своим пользователям анонимно и безопасно обмениваться файлами, "
+"размещать в интернете веб-сайты и общаться в чате с друзьями при помощи сети "
+"``Tor``."
diff --git a/docs/source/locale/ru/LC_MESSAGES/install.po b/docs/source/locale/ru/LC_MESSAGES/install.po
index 7c78c83a..85fcda70 100644
--- a/docs/source/locale/ru/LC_MESSAGES/install.po
+++ b/docs/source/locale/ru/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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2021-02-19 11:50+0000\n"
+"PO-Revision-Date: 2021-02-26 05:50+0000\n"
"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: ru <LL@li.org>\n"
"Language: ru\n"
@@ -33,7 +33,7 @@ msgid ""
"You can download OnionShare for Windows and macOS from the `OnionShare "
"website <https://onionshare.org/>`_."
msgstr ""
-"Загрузить OnionShare для Windows ил macOS можно по ссылке: `OnionShare "
+"Загрузить OnionShare для Windows или macOS можно по ссылке: `OnionShare "
"<https://onionshare.org/>`_."
#: ../../source/install.rst:12
@@ -48,40 +48,45 @@ msgid ""
"that you'll always use the newest version and run OnionShare inside of a "
"sandbox."
msgstr ""
-"Установить OnionShare на Linux можно разными способами. Рекомендуется "
-"использовать следующие пакеты: `Flatpak <https://flatpak.org/>`_ или `Snap "
-"<https://snapcraft.io/>`. В этом случае производится установка последней "
-"версии OnionShare и его последующий запуск \"в песочнице\"."
+"Существуют разные способы установки OnionShare на Linux. Рекомендуется "
+"использовать такие менеджеры пакетов, как `Flatpak <https://flatpak.org/>`_ "
+"или `Snap <https://snapcraft.io/>`. Их использование гарантирует, что будет "
+"произведена установка самой свежей версии 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 ""
-"По умолчанию Snap использвется в ОС Ubuntu, Flatpak в ОС Fedora, но выбор "
-"остаётся за пользователем. Оба менеджера пакетов работают со многими "
-"дистрибутивами LInux."
+"По умолчанию поддержка Snap предусмотрена дистрибутивами Ubuntu, поддержка "
+"Flatpak - дистрибутивами Fedora. Нужно отметить, что окончательный выбор "
+"менеджера пакетов остаётся за пользователем, поскольку и тот, и другой "
+"работают во всех дистрибутивах Linux."
#: ../../source/install.rst:19
msgid ""
"**Install OnionShare using Flatpak**: "
"https://flathub.org/apps/details/org.onionshare.OnionShare"
msgstr ""
-"**Установка OnionShare при помощи Flatpak**: https://flathub.org/apps/"
+"**Установка OnionShare c использованием Flatpak**: https://flathub.org/apps/"
"details/org.onionshare.OnionShare"
#: ../../source/install.rst:21
msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare"
msgstr ""
-"**Установка OnionShare при помощи Snap**: https://snapcraft.io/onionshare"
+"**Установка OnionShare с использованием 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 ""
-"Также можно загрузить и установить имеющие цифровую PGP-подпись пакеты ``."
-"flatpak`` или ``.snap`` отсюда: https://onionshare.org/dist/"
+"Также, в случае необходимости, загрузить и установить имеющие цифровую PGP-"
+"подпись пакеты ``.flatpak`` или ``.snap`` можно отсюда: https://onionshare."
+"org/dist/."
#: ../../source/install.rst:28
msgid "Verifying PGP signatures"
@@ -95,11 +100,13 @@ msgid ""
"binaries include operating system-specific signatures, and you can just "
"rely on those alone if you'd like."
msgstr ""
-"Есть возможность произвести проверку подлинности загруженных пакетов при "
-"помощи цифровой подписи PGP. Для ОС Windows и macOS это необязательный шаг, "
-"но обеспечивает глубокую защиту. В общем, исполняемые файлы OnionShare "
-"включают в себя специфичные для операционной цифровые подписи, на которые "
-"можно рассчитывать при проверке подлинности."
+"Пользователь может произвести проверку целостности самостоятельно "
+"загруженных пакетов при помощи цифровой подписи PGP. Это необязательный шаг "
+"для операционных систем Windows и macOS, по скольку бинарные файлы "
+"OnionShare уже содержат в себе цифровые подписи, специфичные для каждой из "
+"этих операционных систем. Тем не менее, возможность такой проверки "
+"предусмотрена, в случае если есть необходимость дополнительно удостовериться "
+"в безопасности загруженных файлов."
#: ../../source/install.rst:34
msgid "Signing key"
@@ -113,11 +120,11 @@ msgid ""
"<https://keys.openpgp.org/vks/v1/by-"
"fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
msgstr ""
-"Пакеты подписаны Micah Lee, основным разработчиком, при помощи его "
-"публичного ключа PGP c отпечатком пальцем "
-"``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Загрузить ключ Micah можно "
-"отсюда: keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/"
-"by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+"Пакеты подписаны основным разработчиком OnionShare Micah Lee , c "
+"использованием его публичного ключа PGP. Цифровой \"отпечаток пальца\" ключа:"
+" ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Загрузить публичный ключ "
+"Micah можно `отсюда: keys.openpgp.org keyserver <https://keys.openpgp.org/"
+"vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
#: ../../source/install.rst:38
msgid ""
@@ -125,9 +132,10 @@ msgid ""
"probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you "
"probably want `Gpg4win <https://www.gpg4win.org/>`_."
msgstr ""
-"Чтобы произвести проверку цифровых подписей на компьютере должно быть "
-"установлено ПО GnuPG. Для macOS: `GPGTools <https://gpgtools.org/>`, для "
-"Windows: `Gpg4win <https://www.gpg4win.org/>`_."
+"Для проверки цифровых подписей PGP на компьютере пользователя должно быть "
+"установлено программное обеспечение GnuPG. Для macOS рекомендуется "
+"использовать `GPGTools <https://gpgtools.org/>`, для Windows `Gpg4win "
+"<https://www.gpg4win.org/>`_."
#: ../../source/install.rst:41
msgid "Signatures"
@@ -141,11 +149,10 @@ msgid ""
"OnionShare. You can also find them on the `GitHub Releases page "
"<https://github.com/micahflee/onionshare/releases>`_."
msgstr ""
-"Найти цифровые подписи в виде ``.asc``файлов, наряду с пакетами для Windows, "
-"macOS, Flatpak, Snap и исходным кодом можно на https://onionshare.org/dist/ "
-"в директориях с соответствующими названиями. Также их можно найти на "
-"странице `GitHub Releases page <https://github.com/micahflee/onionshare/"
-"releases>`_."
+"Цифровые подписи в виде ``.asc``файлов, наряду с пакетами для Windows, "
+"macOS, Flatpak, Snap и исходным кодом OnionSHare можно найти на "
+"https://onionshare.org/dist/ в соответствующих директориях или на `GitHub "
+"Releases page <https://github.com/micahflee/onionshare/releases>`_."
#: ../../source/install.rst:47
msgid "Verifying"
@@ -157,17 +164,20 @@ msgid ""
"downloaded the binary and and ``.asc`` signature, you can verify the "
"binary for macOS in a terminal like this::"
msgstr ""
-"После импорта публичного ключа Micah при помощи ПО GnuPG, можно проверить "
-"исполняемый файл OnionShare на подлинность. Для этого, в macOS введите "
-"следующую команду в терминале:"
+"Чтобы проверить загруженный пакет на подлинность, сначала нужно "
+"импортировать публичного ключ Micah с использованием соответствующего ПО ("
+"GPGTools или Gpg4win), загрузить бинарный файл OnionShare и файл подписи``."
+"asc``. Затем в терминале macOS, нужно выполнить такую команду:"
#: ../../source/install.rst:53
msgid "Or for Windows, in a command-prompt like this::"
-msgstr "Для ОС Windows команда для 'cmd' или 'PowerShell' указана ниже:"
+msgstr ""
+"В Windows, нужно запустить приложение ``cmd`` (или ``PowerShell``) и "
+"выполнить такую команду:"
#: ../../source/install.rst:57
msgid "The expected output looks like this::"
-msgstr "Ожидаемый вывод программы:"
+msgstr "Ожидаемый результат выполнения команды:"
#: ../../source/install.rst:69
msgid ""
@@ -177,11 +187,12 @@ msgid ""
" the package, it only means you haven't already defined any level of "
"'trust' of Micah's PGP key.)"
msgstr ""
-"Если вывод команды не содержит строку 'Good signature from', возможно есть "
-"проблема с целостностью пакета (в результате злонамеренных действий третьих "
-"лиц или по техническим причиниам) то нельзя устанавливать пакет. (Надпись "
-"\"WARNING:\" показанная выше не является проблемой. Она означает, что пока "
-"не установлен нужный \"уровень доверия\" к PGP-ключу Micah.)"
+"Если вывод команды не содержит строку 'Good signature from', возможно "
+"целостностью пакета была нарушена (в результате злонамеренных действий "
+"третьих лиц или по техническим причиниам). В этом случае нельзя прозводить "
+"дальнейщую установку. (Надпись \"WARNING:\" показанная выше не является "
+"проблемой. Она означает, что пока не установлен необходимый \"уровень "
+"доверия\" к публичному ключу PGP Micah.)"
#: ../../source/install.rst:71
msgid ""
@@ -190,9 +201,10 @@ msgid ""
" the `Tor Project <https://support.torproject.org/tbb/how-to-verify-"
"signature/>`_ may be useful."
msgstr ""
-"Узнать больше о проверке цифровых подписей PGP можно здесь: `Qubes OS "
-"<https://www.qubes-os.org/security/verifying-signatures/>`_ и здесь: `Tor "
-"Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_ ."
+"Дополнительную информацию о проверке цифровых подписей PGP можно здесь: `"
+"Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ и здесь:"
+" `Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`"
+"_ ."
#~ msgid "Install on Windows or macOS"
#~ msgstr ""
diff --git a/docs/source/locale/ru/LC_MESSAGES/security.po b/docs/source/locale/ru/LC_MESSAGES/security.po
index 63ec6d24..b4299782 100644
--- a/docs/source/locale/ru/LC_MESSAGES/security.po
+++ b/docs/source/locale/ru/LC_MESSAGES/security.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-12-13 15:48-0800\n"
-"PO-Revision-Date: 2021-02-21 18:25+0000\n"
+"PO-Revision-Date: 2021-04-01 18:26+0000\n"
"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: ru <LL@li.org>\n"
"Language: ru\n"
@@ -17,18 +17,18 @@ 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.6-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 ""
-"Прежде всего, прочитайте :ref:`how_it_works` для понимания общих принципов "
-"работы OnionShare."
+"Прежде всего, пожалуйста прочитайте :ref:`how_it_works` для понимания общих "
+"принципов работы OnionShare."
#: ../../source/security.rst:6
msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
@@ -49,13 +49,13 @@ msgid ""
"server for that too. This avoids the traditional model of having to trust"
" the computers of others."
msgstr ""
-"**Третьи лица не имеют доступа к чему бы то ни было внутри OnionShare.** "
-"Использование OnionShare подразумевает размещение сервисов непосредственно "
-"на компьютере ползователя. Когда файлы раздаются при помощи OnionShare они "
-"не загружаются на какой-либо сервер. Если при помощи OnionShare создаётся "
-"чат, компьютер пользователя вытупает одновременно сервером. Это позволяет "
-"избежать традиционной модели, при которой необходимо доверять другим "
-"компьютерам."
+"**Третьи лица не имеют доступа к каким бы то нибыло внутренним процессам "
+"OnionShare.** Использование OnionShare подразумевает размещение сервисов "
+"непосредственно на компьютере пользователя. Во время раздачи файлов при "
+"помощи OnionShare они не загружаются на какой-либо сервер. При использовании "
+"OnionShare в качестве чата, компьютер пользователя вытупает одновременно "
+"сервером. Таким образом исключается традиционная модель, при которой "
+"необходимо доверять компьютерам других пользователей."
#: ../../source/security.rst:13
msgid ""
@@ -67,12 +67,13 @@ msgid ""
"Browser with OnionShare's onion service, the traffic is encrypted using "
"the onion service's private key."
msgstr ""
-"**Наблюдающие за сетью не могут видеть что происходит внтури OnionShare в "
-"процессе передачи данных.** При создании соединение между сервисом Tor onion "
-"и Tor Browser используется сквозное шифрование. Это значит, что при "
-"нападающий на сеть не видит ничего кроме зашифрованного траффика сети Tor. "
-"Даже если злоумышленник владеет промежуточным узлом Tor, весь траффик "
-"зашифрован при помощи приватного ключа onion сервиса."
+"**Наблюдающие за сетью не видят yичего из того, что происходит внтури "
+"OnionShare в процессе передачи данных.** При создании соединения между "
+"сервисом Tor onion и Tor Browser используется сквозное шифрование. Это "
+"значит, что нападающий на сеть не видит ничего кроме зашифрованного траффика "
+"сети Tor. Даже если злоумышленник завладеет промежуточным узлом Tor, весь "
+"проходящий через него поток данных зашифрован при помощи секретного ключа "
+"onion сервиса."
#: ../../source/security.rst:15
msgid ""
@@ -85,8 +86,8 @@ msgstr ""
"**Анонимость пользователей OnionShare защищена при помощи Tor.** OnionShare "
"и Tor Browser защищают анонимность пользователей. До тех пор, пока "
"пользователь OnionShare анонимно передаёт адрес сервиса OnionShare "
-"пользователям Tor Browser \"подслушивающие\" не могут узнать личность "
-"пользователя OnionShare."
+"пользователям Tor Browser, третьи лица не могут узнать личность пользователя "
+"OnionShare."
#: ../../source/security.rst:17
msgid ""
@@ -101,15 +102,17 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
-"**Если злоумышленник узнаёт об onion сервисе, он всё равно не может получить "
-"доступ к каким либо данным.\" ** Если во время нападения на сеть становится "
-"известен приватный адрес OnionShare, пароль не позволит получить к нему "
-"доступ (доступ возможен в случае, если пользователь OnionShare отключит "
-"использование пароля и сделает сервис публичным). Пароль создаётся при "
-"помощи выбора двух случайных слов из списка длиной в 6800 слов, общее "
-"количество возможных комбинаций в таком случае составляет около 46 миллионов "
-"паролей. Всего 20 попыток ввести неверный пароль приведут к тому, что "
-"OnionShare остановит сервис и предотвратит возможность 'brute-force' атаки."
+"**Если злоумышленник узнаёт об onion сервисе, он всё равно не сможет "
+"получить доступ к каким либо данным.\" ** В прошлом атака на сеть Tor "
+"позволяла нападающему узнать секретный адрес сервиса onion. Сейчас, если во "
+"время нападения на сеть становится известен секретный адрес OnionShare, "
+"пароль не позволит получить к нему доступ (кроме тех случаев, когда "
+"пользователь OnionShare отключит использование пароля и сделает сервис "
+"публичным). Пароль создаётся при помощи выбора двух случайных слов из списка "
+"длиной в 6800 слов, общее количество возможных комбинаций в таком случае "
+"составляет около 46 миллионов паролей. Всего 20 попыток ввести неверный "
+"пароль приведут к тому, что OnionShare остановит сервис и предотвратит "
+"возможность 'brute-force' атаки."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
@@ -134,10 +137,10 @@ msgstr ""
"узнать, что используется OnionShare. Если зломушленник введёт адрес сервиса "
"OnionShare, пока сервис ещё активен, то он может получить доступ к к нему. "
"Чтобы избежать этого, передача адреса должна осуществляться безопасным "
-"образом, например при помощи зашифрованных сообщений (и возможно включённым "
-"режимом 'исчезающие сообщения'), зашифрованной электронной почты или при "
-"лично встрече. Это необязательно в случае если OnionShare используется для "
-"передачи данных не обладающих секретностью."
+"образом, например при помощи зашифрованных сообщений (и, возможно, "
+"включённым режимом 'исчезающие сообщения'), зашифрованной электронной почты "
+"или при личной встрече. Это необязательно в случае, если OnionShare "
+"используется для передачи данных не обладающих секретностью."
#: ../../source/security.rst:24
msgid ""
@@ -148,8 +151,8 @@ msgid ""
"anonymity is a goal."
msgstr ""
"**Передача адреса OnionShare может быть не анонимной.** Дополнительные меры "
-"предосторожности должны быть предприняты чтобы убедиться что адрес сервиса "
-"OnionShare передан анонимно. Например при помощи отдельной учётной записи "
+"предосторожности должны быть предприняты чтобы убедиться в анонимой передаче "
+"адреса OnionShare . Например, при помощи отдельной учётной записи "
"электронной почты или чата, доступ к которым осуществляется только через "
"сеть Tor. Это необязательно, если анонимность передачи данных не является "
"целью."
diff --git a/docs/source/locale/ru/LC_MESSAGES/tor.po b/docs/source/locale/ru/LC_MESSAGES/tor.po
index b42a3faf..62a0cd00 100644
--- a/docs/source/locale/ru/LC_MESSAGES/tor.po
+++ b/docs/source/locale/ru/LC_MESSAGES/tor.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-12-13 15:48-0800\n"
-"PO-Revision-Date: 2021-02-21 18:25+0000\n"
+"PO-Revision-Date: 2021-03-30 16:26+0000\n"
"Last-Translator: Alexander Tarasenko <alexound.login@gmail.com>\n"
"Language-Team: ru <LL@li.org>\n"
"Language: ru\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.6-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/tor.rst:2
@@ -35,13 +35,15 @@ msgstr ""
#: ../../source/tor.rst:9
msgid "Use the ``tor`` bundled with OnionShare"
-msgstr ""
+msgstr "Использование версии ``tor``, которая поставляется вместе с OnionShare"
#: ../../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 ""
+"Это самый простой, надёжный, используемый по-умолчанию способ подключения "
+"OnionShare к сети Tor, рекомендуемый для большиства пользователей."
#: ../../source/tor.rst:14
msgid ""
@@ -50,10 +52,14 @@ msgid ""
"with other ``tor`` processes on your computer, so you can use the Tor "
"Browser or the system ``tor`` on their own."
msgstr ""
+"При запуске OnionShare также запускается заранее сконфигурированный фоновый "
+"процесс ``tor``. Этот процесс не мешает уже существующим на компьютере "
+"процессам ``tor``, так что возможно параллельное использование, системного "
+"``tor`` или Tor Browser."
#: ../../source/tor.rst:18
msgid "Attempt auto-configuration with Tor Browser"
-msgstr ""
+msgstr "Попытка автоматической конфигурации при помощи Tor Browser"
#: ../../source/tor.rst:20
msgid ""
@@ -62,16 +68,24 @@ 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 ""
+"Если на комьютере уже `установлен Tor Browser <https://www.torproject.org>`_ "
+"и Вы не хотите запускать второй параллельный процесс ``tor`` , есть "
+"возможность использовать процесс ``tor`` связанный с Tor Browser. Для этого "
+"нужно, чтобы Tor Browser был запущен в фоновом режиме в течение всего "
+"времени использования OnionShare."
#: ../../source/tor.rst:24
msgid "Using a system ``tor`` in Windows"
-msgstr ""
+msgstr "Использование системного процесса ``tor`` в ОС Windows"
#: ../../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 ""
+"Для настройки нужны сравнительно продвинутые навыки, такие как "
+"редактирование конфигурационных файлов и администрирование операционной "
+"системы."
#: ../../source/tor.rst:28
msgid ""
@@ -80,6 +94,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 ""
+"Загрузите Tor Windows Expert Bundle `отсюда <https://www.torproject.org/"
+"download/tor/>`_. Распакуйте архив и скопируйте содержимое в директорию ``C:"
+"\\Program Files (x86)\\``. Переименуйте директорию, содержащую ``Data`` и "
+"``Tor`` в ``tor-win32``."
#: ../../source/tor.rst:32
msgid ""
@@ -89,6 +107,11 @@ msgid ""
"administrator, and use ``tor.exe --hash-password`` to generate a hash of "
"your password. For example::"
msgstr ""
+"Придумайте пароль для порта управления. (Рекомендуется использование "
+"последовательности из 7-ми случаных слов, например: ``comprised stumble "
+"rummage work avenging construct volatile`` .) Теперь запустите консоль "
+"``cmd`` с правами администратора и выполните команду ``tor.exe --hash-"
+"password`` чтобы захешировать придуманный пароль. Например::"
#: ../../source/tor.rst:39
msgid ""
@@ -96,6 +119,9 @@ msgid ""
"can ignore). In the case of the above example, it is "
"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
msgstr ""
+"Захешированный пароль будет отображен после нескольких предупреждений ("
+"которые можно проигнорировать). В примере, показанном выше, это "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
#: ../../source/tor.rst:41
msgid ""
@@ -103,6 +129,9 @@ msgid ""
"win32\\torrc`` and put your hashed password output in it, replacing the "
"``HashedControlPassword`` with the one you just generated::"
msgstr ""
+"Теперь нужно создать текстовый файл ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` и записать туда только что созданный, захешированный пароль, "
+"заменив ``HashedControlPassword``::"
#: ../../source/tor.rst:46
msgid ""
@@ -111,10 +140,14 @@ msgid ""
"`<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_). Like "
"this::"
msgstr ""
+"В консоли командной строки запущенной с правами адимнистратора установите "
+"``tor`` как сервис в соответствующим ``torrc`` файлом, который был только "
+"что создан. Подробная инструкция находится `здесь <https://2019.www."
+"torproject.org/docs/faq.html.en#NTService>`_. Например::"
#: ../../source/tor.rst:50
msgid "You are now running a system ``tor`` process in Windows!"
-msgstr ""
+msgstr "Теперь ``tor`` запущен как системный процесс в ОС Windows!"
#: ../../source/tor.rst:52
msgid ""
@@ -126,24 +159,33 @@ msgid ""
"Connection to Tor\" button. If all goes well, you should see \"Connected "
"to the Tor controller\"."
msgstr ""
+"Теперь нужно запустить OnionShare и нажать на значок \"⚙\" . Под заголовком "
+"\"Как OnionShare следует подключаться к сети Tor?\" выберите \"Использовать "
+"контрольный порт\" и укажите для пункта \"Порт управления\" значение ``127.0."
+"0.1``, для пунтка \"Порт\" значение ``9051``. Под заголовком \"Настройки "
+"аутентификации Tor\" выберете \"Пароль\" и укажите пароль, придуманный в "
+"предыдущем шаге. Нажмите кнопку \"Проверить подключение к сети Tor\". Если "
+"всё прошло хорошо, то появится сообщение \"Подключено к контроллеру Tor\"."
#: ../../source/tor.rst:61
msgid "Using a system ``tor`` in macOS"
-msgstr ""
+msgstr "Использование системного процесса ``tor`` в macOS"
#: ../../source/tor.rst:63
msgid ""
"First, install `Homebrew <https://brew.sh/>`_ if you don't already have "
"it, and then install Tor::"
msgstr ""
+"Прежде всего, при необходимости установите `Homebrew <https://brew.sh/>`_ . "
+"Затем установите Tor::"
#: ../../source/tor.rst:67
msgid "Now configure Tor to allow connections from OnionShare::"
-msgstr ""
+msgstr "Теперь настройте Tor так, чтобы OnionShare мог его использовать::"
#: ../../source/tor.rst:74
msgid "And start the system Tor service::"
-msgstr ""
+msgstr "И запустите сервис Tor::"
#: ../../source/tor.rst:78
msgid ""
@@ -153,14 +195,22 @@ msgid ""
"Under \"Tor authentication settings\" choose \"No authentication, or "
"cookie authentication\". Click the \"Test Connection to Tor\" button."
msgstr ""
+"Запустите OnionShare и нажмите на значок \"⚙\". Под заголовком \"Как "
+"OnionShare следует подключаться к сети Tor?\" выберите \"Использовать файл "
+"сокет\" и укажите путь до файла сокета: ``/usr/local/var/run/tor/control."
+"socket``. Под заголовком \"Настройки аутентификации Tor\" выберете \"Без "
+"аутентификации или cookie-аутентификация\". Нажмите кнопку \"Проверить "
+"подключение к сети Tor\"."
#: ../../source/tor.rst:84 ../../source/tor.rst:104
msgid "If all goes well, you should see \"Connected to the Tor controller\"."
msgstr ""
+"Если всё прошло хорошо, то появится сообщение \"Подключено к контроллеру "
+"Tor\"."
#: ../../source/tor.rst:87
msgid "Using a system ``tor`` in Linux"
-msgstr ""
+msgstr "Использование системного ``tor`` в ОС Linux"
#: ../../source/tor.rst:89
msgid ""
@@ -169,6 +219,9 @@ msgid ""
"`official repository <https://support.torproject.org/apt/tor-deb-"
"repo/>`_."
msgstr ""
+"Прежде всего, установите пакет ``tor``. С такими дистрибутивами, как Debian, "
+"Ubuntu или похожие, рекомендуется использовать `официальный репозиторий "
+"<https://support.torproject.org/apt/tor-deb-repo/>`_ Tor Project."
#: ../../source/tor.rst:91
msgid ""
@@ -176,12 +229,18 @@ msgid ""
"case of Debian and Ubuntu, ``debian-tor``) and configure OnionShare to "
"connect to your system ``tor``'s control socket file."
msgstr ""
+"Теперь нужно добавить пользователя в группу, которая запускает процессы "
+"``tor`` (в случае дистрибутивов Debian и Ubuntu процесс называется ``debian-"
+"tor``) и настроить подключение OnionShare к системному процессу ``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 ""
+"Добавьте свого пользователя в группу ``debian-tor`` при помощи команды ("
+"измените ``username`` на имя своего пользователя))::"
#: ../../source/tor.rst:97
msgid ""
@@ -192,10 +251,16 @@ msgid ""
"\"No authentication, or cookie authentication\". Click the \"Test "
"Connection to Tor\" button."
msgstr ""
+"Перезагрузите компьютер. После загрузки операционной системы запустите "
+"OnionShare и нажмите на значок \"⚙\" . Под заголовком \"Как OnionShare "
+"следует подключаться к сети Tor?\" выберите \"Использовать файл сокет\" и "
+"укажите путь до файла сокета: ``/var/run/tor/control``. Под заголовком "
+"\"Настройки аутентификации Tor\" выберете \"Без аутентификации или cookie-"
+"аутентификация\". Нажмите кнопку \"Проверить подключение к сети Tor\"."
#: ../../source/tor.rst:107
msgid "Using Tor bridges"
-msgstr ""
+msgstr "Использование мостов \"Tor\""
#: ../../source/tor.rst:109
msgid ""
@@ -204,10 +269,15 @@ msgid ""
"<https://2019.www.torproject.org/docs/bridges.html.en>`_. If OnionShare "
"connects to Tor without one, you don't need to use a bridge."
msgstr ""
+"В случае, если доступ к сети Интернет подвергается цензуре, можно настроить "
+"подключение OnionShare к сети Tor при помощи `мостов Tor` <https://2019.www."
+"torproject.org/docs/bridges.html.en>`_. Использование мостов необязательно в "
+"случае, если OnionShare успешно подключается к сети Tor самостоятельно."
#: ../../source/tor.rst:111
msgid "To configure bridges, click the \"⚙\" icon in OnionShare."
msgstr ""
+"Чтобы настроить использование мостов, нажмите на значок \"⚙\" в OnionShare."
#: ../../source/tor.rst:113
msgid ""
@@ -216,6 +286,11 @@ msgid ""
"obtain from Tor's `BridgeDB <https://bridges.torproject.org/>`_. If you "
"need to use a bridge, try the built-in obfs4 ones first."
msgstr ""
+"Возможно использование встроенных obfs4 или meek_lite(Azure) подключаемых "
+"транспортов или пользовательских мостов, настройки которых можно получить "
+"здесь: `Tor's BridgeDB <https://bridges.torproject.org/>`_. Если "
+"использование мостов необходимо, рекомендуется в первую очередь попробовать "
+"транспорты obfs4."
#~ msgid "Using a system Tor in Mac OS X"
#~ msgstr ""
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/index.po b/docs/source/locale/sr@latin/LC_MESSAGES/index.po
index 2ad2653c..bac96959 100644
--- a/docs/source/locale/sr@latin/LC_MESSAGES/index.po
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/index.po
@@ -3,27 +3,29 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-03-02 16:50+0000\n"
+"Last-Translator: Filipovic Dragan <filipovic@tutanota.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\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.5\n"
"Generated-By: Babel 2.8.0\n"
#: ../../source/index.rst:2
msgid "OnionShare's documentation"
-msgstr ""
+msgstr "OnionShare dokumentacija"
#: ../../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 ""
-
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po b/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po
index f2cc8ed5..b9d01e58 100644
--- a/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po
@@ -3,25 +3,27 @@
# This file is distributed under the same license as the OnionShare package.
# FIRST AUTHOR <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"PO-Revision-Date: 2021-03-02 16:50+0000\n"
+"Last-Translator: Filipovic Dragan <filipovic@tutanota.com>\n"
"Language-Team: LANGUAGE <LL@li.org>\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.5\n"
"Generated-By: Babel 2.8.0\n"
#: ../../source/_templates/versions.html:10
msgid "Versions"
-msgstr ""
+msgstr "Verzije"
#: ../../source/_templates/versions.html:18
msgid "Languages"
-msgstr ""
-
+msgstr "Jezici"
diff --git a/docs/source/locale/tr/LC_MESSAGES/advanced.po b/docs/source/locale/tr/LC_MESSAGES/advanced.po
index 8ec42910..37073fe4 100644
--- a/docs/source/locale/tr/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/tr/LC_MESSAGES/advanced.po
@@ -7,25 +7,25 @@ msgid ""
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-01-09 15:33+0000\n"
-"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-07-15 20:32+0000\n"
+"Last-Translator: Tur <tur+translate@simplelogin.fr>\n"
+"Language-Team: tr <LL@li.org>\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.4.1-dev\n"
+"X-Generator: Weblate 4.7.2-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
msgid "Advanced Usage"
-msgstr "Gelişmiş Kullanım"
+msgstr "Gelişmiş kullanım"
#: ../../source/advanced.rst:7
msgid "Save Tabs"
-msgstr "Sekmeleri Kaydedin"
+msgstr "Sekmeleri kaydedin"
#: ../../source/advanced.rst:9
msgid ""
@@ -35,11 +35,12 @@ msgid ""
"useful if you want to host a website available from the same OnionShare "
"address even if you reboot your computer."
msgstr ""
-"OnionShare'deki her şey öntanımlı olarak geçicidir. Bir OnionShare sekmesini "
-"kapatırsanız, adresi artık mevcut değildir ve tekrar kullanılamaz. Bazen bir "
-"OnionShare hizmetinin kalıcı olmasını isteyebilirsiniz. Bilgisayarınızı "
-"yeniden başlatsanız bile, aynı OnionShare adresinden kullanılabilen bir web "
-"sitesini barındırmak istiyorsanız bu kullanışlıdır."
+"OnionShare'deki her şey öntanımlı olarak geçicidir. Bir OnionShare "
+"sekmesini kapatırsanız, adresi artık mevcut değildir ve tekrar "
+"kullanılamaz. Bazen bir OnionShare hizmetinin kalıcı olmasını "
+"isteyebilirsiniz. Bilgisayarınızı yeniden başlatsanız bile, aynı "
+"OnionShare adresinden kullanılabilen bir web sitesini barındırmak "
+"istiyorsanız bu kullanışlıdır."
#: ../../source/advanced.rst:13
msgid ""
@@ -47,10 +48,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 ""
-"Herhangi bir sekmeyi kalıcı hale getirmek için, sunucuyu başlatmadan önce "
-"\"Bu sekmeyi kaydet ve OnionShare'i açtığımda otomatik olarak aç\" kutusunu "
-"işaretleyin. Bir sekme kaydedildiğinde, sunucu durumunun solunda mor bir "
-"iğne simgesi görünür."
+"Herhangi bir sekmeyi kalıcı hale getirmek için, sunucuyu başlatmadan önce"
+" \"Bu sekmeyi kaydet ve OnionShare'i açtığımda otomatik olarak aç\" "
+"kutusunu işaretleyin. Bir sekme kaydedildiğinde, sunucu durumunun solunda"
+" mor bir iğne simgesi görünür."
#: ../../source/advanced.rst:18
msgid ""
@@ -58,17 +59,18 @@ msgid ""
"start opened. You'll have to manually start each service, but when you do"
" they will start with the same OnionShare address and password."
msgstr ""
-"OnionShare'den çıkıp tekrar açtığınızda, kaydedilmiş sekmeleriniz açılmaya "
-"başlayacaktır. Her hizmeti elle başlatmanız gerekecektir, ancak bunu "
-"yaptığınızda aynı OnionShare adresi ve parolasıyla başlayacaklardır."
+"OnionShare'den çıkıp tekrar açtığınızda, kaydedilmiş sekmeleriniz "
+"açılmaya başlayacaktır. Her hizmeti elle başlatmanız gerekecektir, ancak "
+"bunu yaptığınızda aynı OnionShare adresi ve parolasıyla başlayacaklardır."
#: ../../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 ""
-"Bir sekmeyi kaydederseniz, bu sekmenin onion hizmeti gizli anahtarının bir "
-"kopyası, OnionShare ayarlarınızla birlikte bilgisayarınızda saklanacaktır."
+"Bir sekmeyi kaydederseniz, bu sekmenin onion hizmeti gizli anahtarının "
+"bir kopyası, OnionShare ayarlarınızla birlikte bilgisayarınızda "
+"saklanacaktır."
#: ../../source/advanced.rst:26
msgid "Turn Off Passwords"
@@ -81,10 +83,10 @@ msgid ""
"wrong guesses at the password, your onion service is automatically "
"stopped to prevent a brute force attack against the OnionShare service."
msgstr ""
-"Öntanımlı olarak, tüm OnionShare hizmetleri, ``onionshare`` kullanıcı adı ve "
-"rastgele oluşturulan bir parola ile korunur. Birisi parola için 20 yanlış "
-"tahmin yaparsa, OnionShare hizmetine karşı bir kaba kuvvet saldırısını "
-"önlemek için onion hizmetiniz otomatik olarak durdurulur."
+"Öntanımlı olarak, tüm OnionShare hizmetleri, ``onionshare`` kullanıcı adı"
+" ve rastgele oluşturulan bir parola ile korunur. Birisi parola için 20 "
+"yanlış tahmin yaparsa, OnionShare hizmetine karşı bir kaba kuvvet "
+"saldırısını önlemek için onion hizmetiniz otomatik olarak durdurulur."
#: ../../source/advanced.rst:31
msgid ""
@@ -95,12 +97,12 @@ msgid ""
"can force your server to stop just by making 20 wrong guesses of your "
"password, even if they know the correct password."
msgstr ""
-"Bazen, örneğin bir OnionShare alma hizmeti kurmak istediğinizde, insanların "
-"size güvenli ve anonim olarak dosya gönderebilmesi için OnionShare "
-"hizmetinizin herkes tarafından erişilebilir olmasını isteyebilirsiniz. Bu "
-"durumda parolayı tamamen devre dışı bırakmak daha iyidir. Bunu yapmazsanız, "
-"birisi doğru parolayı bilse bile parolanız hakkında 20 yanlış tahmin yaparak "
-"sunucunuzu durmaya zorlayabilir."
+"Bazen, örneğin bir OnionShare alma hizmeti kurmak istediğinizde, "
+"insanların size güvenli ve anonim olarak dosya gönderebilmesi için "
+"OnionShare hizmetinizin herkes tarafından erişilebilir olmasını "
+"isteyebilirsiniz. Bu durumda parolayı tamamen devre dışı bırakmak daha "
+"iyidir. Bunu yapmazsanız, birisi doğru parolayı bilse bile parolanız "
+"hakkında 20 yanlış tahmin yaparak sunucunuzu durmaya zorlayabilir."
#: ../../source/advanced.rst:35
msgid ""
@@ -108,15 +110,37 @@ msgid ""
"password\" box before starting the server. Then the server will be public"
" and won't have a password."
msgstr ""
-"Herhangi bir sekmenin parolasını kapatmak için, sunucuyu başlatmadan önce "
-"\"Parola kullanma\" kutusunu işaretlemeniz yeterlidir. Daha sonra sunucu "
-"herkese açık olacak ve bir parolası olmayacaktır."
+"Herhangi bir sekmenin parolasını kapatmak için, sunucuyu başlatmadan önce"
+" \"Parola kullanma\" kutusunu işaretlemeniz yeterlidir. Daha sonra sunucu"
+" herkese açık olacak ve bir parolası olmayacaktır."
-#: ../../source/advanced.rst:38
+#: ../../source/advanced.rst:40
+msgid "Custom Titles"
+msgstr "Özel Başlıklar"
+
+#: ../../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 ""
+"Öntanımlı olarak, insanlar Tor Browser'da bir OnionShare hizmeti "
+"yüklediklerinde, hizmet türü için öntanımlı başlığı görürler. Örneğin, bir "
+"sohbet hizmetinin öntanımlı başlığı \"OnionShare Chat\" 'tir."
+
+#: ../../source/advanced.rst:44
+msgid ""
+"If you want to choose a custom title, set the \"Custom title\" setting "
+"before starting a server."
+msgstr ""
+"Özel bir başlık seçmek istiyorsanız, bir sunucu başlatmadan önce \"Özel "
+"başlık\" ayarını belirleyin."
+
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Zamanlanan Saatler"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -124,55 +148,56 @@ msgid ""
"scheduled time\", \"Stop onion service at scheduled time\", or both, and "
"set the respective desired dates and times."
msgstr ""
-"OnionShare, bir hizmetin tam olarak ne zaman başlaması ve durması gerektiği "
-"zamanlamayı destekler. Bir sunucuyu başlatmadan önce, onun sekmesinde "
-"\"Gelişmiş ayarları göster\" düğmesine tıklayın ve ardından \"Onion "
-"hizmetini zamanlanan saatte başlat\", \"Onion hizmetini zamanlanan saatte "
-"durdur\" veya her ikisinin yanındaki kutuları işaretleyin ve istenen "
-"tarihleri ve saatleri ayarlayın."
-
-#: ../../source/advanced.rst:43
+"OnionShare, bir hizmetin tam olarak ne zaman başlaması ve durması "
+"gerektiği zamanlamayı destekler. Bir sunucuyu başlatmadan önce, onun "
+"sekmesinde \"Gelişmiş ayarları göster\" düğmesine tıklayın ve ardından "
+"\"Onion hizmetini zamanlanan saatte başlat\", \"Onion hizmetini "
+"zamanlanan saatte durdur\" veya her ikisinin yanındaki kutuları "
+"işaretleyin ve istenen tarihleri ve saatleri ayarlayın."
+
+#: ../../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 ""
-"Bir hizmeti gelecekte başlaması için zamanladıysanız, \"Paylaşmaya başla\" "
-"düğmesine tıkladığınızda, başlayana kadar geri sayım yapan bir zamanlayıcı "
-"göreceksiniz. Gelecekte durması için zamanladıysanız, başladıktan sonra "
-"otomatik olarak duracağı zamana kadar geri sayan bir zamanlayıcı "
-"göreceksiniz."
+"Bir hizmeti gelecekte başlaması için zamanladıysanız, \"Paylaşmaya "
+"başla\" düğmesine tıkladığınızda, başlayana kadar geri sayım yapan bir "
+"zamanlayıcı göreceksiniz. Gelecekte durması için zamanladıysanız, "
+"başladıktan sonra otomatik olarak duracağı zamana kadar geri sayan bir "
+"zamanlayıcı göreceksiniz."
-#: ../../source/advanced.rst:46
+#: ../../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 ""
-"**Bir OnionShare hizmetini otomatik olarak başlayacak şekilde zamanlamak, "
-"ölü adam anahtarı olarak kullanılabilir**, bu şekilde size bir şey olursa, "
-"hizmetiniz gelecekte belirli bir zamanda herkese açık duruma getirilecektir. "
-"Size bir şey olmazsa, hizmetin başlama zamanından önce iptal edebilirsiniz."
+"**Bir OnionShare hizmetini otomatik olarak başlayacak şekilde zamanlamak,"
+" ölü adam anahtarı olarak kullanılabilir**, bu şekilde size bir şey "
+"olursa, hizmetiniz gelecekte belirli bir zamanda herkese açık duruma "
+"getirilecektir. Size bir şey olmazsa, hizmetin başlama zamanından önce "
+"iptal edebilirsiniz."
-#: ../../source/advanced.rst:51
+#: ../../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 ""
-"**Bir OnionShare hizmetini otomatik olarak durdurulacak şekilde zamanlamak, "
-"maruz kalmayı sınırlandırmak için kullanışlı olabilir**, örneğin gizli "
-"belgeleri birkaç günden daha uzun süre internette bulunmadıklarından emin "
-"olacak şekilde paylaşmak isterseniz."
+"**Bir OnionShare hizmetini otomatik olarak durdurulacak şekilde "
+"zamanlamak, maruz kalmayı sınırlandırmak için kullanışlı olabilir**, "
+"örneğin gizli belgeleri birkaç günden daha uzun süre internette "
+"bulunmadıklarından emin olacak şekilde paylaşmak isterseniz."
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Komut Satırı Arayüzü"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
@@ -180,7 +205,7 @@ msgstr ""
"Grafiksel arayüzüne ek olarak, OnionShare bir komut satırı arayüzüne "
"sahiptir."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
@@ -188,53 +213,53 @@ msgstr ""
"OnionShare'in yalnızca komut satırı sürümünü ``pip3`` kullanarak "
"kurabilirsiniz::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid ""
"Note that you will also need the ``tor`` package installed. In macOS, "
"install it with: ``brew install tor``"
msgstr ""
-"Ayrıca ``tor`` paketinin kurulu olması gerekeceğini unutmayın. macOS için şu "
-"komutla kurun: ``brew install tor``"
+"Ayrıca ``tor`` paketinin kurulu olması gerekeceğini unutmayın. macOS için"
+" şu komutla kurun: ``brew install tor``"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Sonra şu şekilde çalıştırın::"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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 ""
-"OnionShare'i Linux Snapcraft paketini kullanarak kurduysanız, komut satırı "
-"arayüzü sürümüne erişmek için ``onionshare.cli`` komutunu "
+"OnionShare'i Linux Snapcraft paketini kullanarak kurduysanız, komut "
+"satırı arayüzü sürümüne erişmek için ``onionshare.cli`` komutunu "
"çalıştırabilirsiniz."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Kullanım"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-"``onionshare --help`` komutunu çalıştırarak komut satırı belgelendirmesine "
-"göz atabilirsiniz::"
+"``onionshare --help`` komutunu çalıştırarak komut satırı "
+"belgelendirmesine göz atabilirsiniz::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Eski Adresler"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
msgstr ""
-"OnionShare, öntanımlı olarak v3 Tor onion hizmetlerini kullanır. Bunlar, 56 "
-"karakter içeren modern onion adresleridir, örneğin::"
+"OnionShare, öntanımlı olarak v3 Tor onion hizmetlerini kullanır. Bunlar, "
+"56 karakter içeren modern onion adresleridir, örneğin::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
@@ -242,15 +267,15 @@ msgstr ""
"OnionShare, v2 onion adreslerini, yani 16 karakter içeren eski tür onion "
"adreslerini hala desteklemektedir, örneğin::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
msgstr ""
-"OnionShare, v2 onion adreslerini \"eski adresler\" olarak adlandırır ve v3 "
-"onion adresleri daha güvenli olduğu için bunlar tavsiye edilmez."
+"OnionShare, v2 onion adreslerini \"eski adresler\" olarak adlandırır ve "
+"v3 onion adresleri daha güvenli olduğu için bunlar tavsiye edilmez."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -259,14 +284,15 @@ msgid ""
"cannot remove legacy mode in that tab. Instead you must start a separate "
"service in a separate tab."
msgstr ""
-"Eski adresleri kullanmak için, bir sunucuyu başlatmadan önce onun sekmesinde "
-"\"Gelişmiş ayarları göster\" düğmesine tıklayın ve \"Eski bir adres kullan ("
-"v2 onion hizmeti, tavsiye edilmez)\" kutusunu işaretleyin. Eski modda isteğe "
-"bağlı olarak Tor istemci kimlik doğrulamasını açabilirsiniz. Eski modda bir "
-"sunucu başlattığınızda, o sekmede eski modu kaldıramazsınız. Bunun yerine, "
-"ayrı bir sekmede ayrı bir hizmet başlatmalısınız."
-
-#: ../../source/advanced.rst:150
+"Eski adresleri kullanmak için, bir sunucuyu başlatmadan önce onun "
+"sekmesinde \"Gelişmiş ayarları göster\" düğmesine tıklayın ve \"Eski bir "
+"adres kullan (v2 onion hizmeti, tavsiye edilmez)\" kutusunu işaretleyin. "
+"Eski modda isteğe bağlı olarak Tor istemci kimlik doğrulamasını "
+"açabilirsiniz. Eski modda bir sunucu başlattığınızda, o sekmede eski modu"
+" kaldıramazsınız. Bunun yerine, ayrı bir sekmede ayrı bir hizmet "
+"başlatmalısınız."
+
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
diff --git a/docs/source/locale/tr/LC_MESSAGES/develop.po b/docs/source/locale/tr/LC_MESSAGES/develop.po
index 6d87cabe..ed0cfa96 100644
--- a/docs/source/locale/tr/LC_MESSAGES/develop.po
+++ b/docs/source/locale/tr/LC_MESSAGES/develop.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: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2021-01-01 20:29+0000\n"
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: tr\n"
+"Language-Team: tr <LL@li.org>\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.4.1-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -43,10 +42,10 @@ msgstr ""
"Keybase ekibine sahiptir. (Ayrıca OnionShare adresleri gibi, OnionShare "
"topluluğundaki diğer kişilere uçtan uca şifrelenmiş doğrudan mesajlar "
"göndermenin kolay bir yoludur.) Keybase'i kullanmak için `Keybase "
-"uygulamasını <https://keybase.io/download>`_ indirin, bir hesap oluşturun ve "
-"`bu ekibe katılın <https://keybase.io/team/onionshare>`_. Uygulama içinde "
-"\"Teams\" bölümüne gidin, \"Join a Team\" düğmesine tıklayın ve \"onionshare"
-"\" yazın."
+"uygulamasını <https://keybase.io/download>`_ indirin, bir hesap oluşturun"
+" ve `bu ekibe katılın <https://keybase.io/team/onionshare>`_. Uygulama "
+"içinde \"Teams\" bölümüne gidin, \"Join a Team\" düğmesine tıklayın ve "
+"\"onionshare\" yazın."
#: ../../source/develop.rst:12
msgid ""
@@ -54,35 +53,38 @@ msgid ""
"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
"and and designers to discuss the project."
msgstr ""
-"OnionShare ayrıca geliştiricilerin ve tasarımcıların projeyi tartışmaları "
-"için bir `e-posta listesine <https://lists.riseup.net/www/subscribe/"
-"onionshare-dev>`_ sahiptir."
+"OnionShare ayrıca geliştiricilerin ve tasarımcıların projeyi tartışmaları"
+" için bir `e-posta listesine <https://lists.riseup.net/www/subscribe"
+"/onionshare-dev>`_ sahiptir."
#: ../../source/develop.rst:15
msgid "Contributing Code"
msgstr "Kodlara Katkıda Bulunma"
#: ../../source/develop.rst:17
+#, fuzzy
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"https://github.com/onionshare/onionshare"
msgstr ""
-"OnionShare kaynak kodları şu Git deposunda bulunabilir: https://github.com/"
-"micahflee/onionshare"
+"OnionShare kaynak kodları şu Git deposunda bulunabilir: "
+"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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
"OnionShare kodlarına katkıda bulunmak istiyorsanız, Keybase ekibine "
"katılmanız ve üzerinde çalışmayı düşündüğünüz şeyler hakkında sorular "
"sormanız yardımcı olacaktır. Ayrıca üzerinde çalışmak isteyebileceğiniz "
"herhangi bir sorun olup olmadığını görmek için GitHub'daki tüm `açık "
-"sorunları <https://github.com/micahflee/onionshare/issues>`_ incelemelisiniz."
+"sorunları <https://github.com/micahflee/onionshare/issues>`_ "
+"incelemelisiniz."
#: ../../source/develop.rst:22
msgid ""
@@ -102,17 +104,12 @@ msgstr "Geliştirmeye Başlama"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"OnionShare, Python ile geliştirilmektedir. Başlamak için https://github.com/"
-"micahflee/onionshare/ adresindeki Git deposunu klonlayın ve ardından komut "
-"satırı sürümü için geliştirme ortamınızı nasıl kuracağınızı öğrenmek için ``"
-"cli/README.md`` dosyasına, grafiksel sürüm için geliştirme ortamınızı nasıl "
-"kuracağınızı öğrenmek için ``desktop/README.md`` dosyasına bakın."
#: ../../source/develop.rst:32
msgid ""
@@ -121,7 +118,8 @@ msgid ""
"source tree."
msgstr ""
"Bu dosyalar, platformunuz için bağımlılıkları kurmak ve kaynak ağacından "
-"OnionShare'i çalıştırmak için gerekli teknik talimatları ve komutları içerir."
+"OnionShare'i çalıştırmak için gerekli teknik talimatları ve komutları "
+"içerir."
#: ../../source/develop.rst:35
msgid "Debugging tips"
@@ -140,57 +138,59 @@ msgid ""
"reloaded), and other debug info. For example::"
msgstr ""
"Geliştirme sırasında, OnionShare'i bir terminalden çalıştırmak ve komuta "
-"``--verbose`` (veya ``-v``) seçeneklerini eklemek faydalıdır. Bu, terminale "
-"birçok yararlı mesajlar, örneğin belirli nesneler başlatıldığında, olaylar "
-"gerçekleştiğinde (düğmeler tıklandı, ayarlar kaydedildi veya yeniden "
-"yüklendi gibi) ve diğer hata ayıklama bilgileri yazdırır. Örneğin::"
+"``--verbose`` (veya ``-v``) seçeneklerini eklemek faydalıdır. Bu, "
+"terminale birçok yararlı mesajlar, örneğin belirli nesneler "
+"başlatıldığında, olaylar gerçekleştiğinde (düğmeler tıklandı, ayarlar "
+"kaydedildi veya yeniden yüklendi gibi) ve diğer hata ayıklama bilgileri "
+"yazdırır. Örneğin::"
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
msgstr ""
-"``onionshare/common.py`` içinden ``Common.log`` yöntemini çalıştırarak kendi "
-"hata ayıklama mesajlarınızı ekleyebilirsiniz. Örneğin::"
+"``onionshare/common.py`` içinden ``Common.log`` yöntemini çalıştırarak "
+"kendi hata ayıklama mesajlarınızı ekleyebilirsiniz. Örneğin::"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
-"Bu, OnionShare kullanılırken meydana gelen olaylar zincirini veya belirli "
-"değişkenlerin değiştirilmeden önce ve sonra değerini öğrenirken faydalı "
+"Bu, OnionShare kullanılırken meydana gelen olaylar zincirini veya belirli"
+" değişkenlerin değiştirilmeden önce ve sonra değerini öğrenirken faydalı "
"olabilir."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr "Yalnızca Yerel"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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 ""
-"Tor yavaştır ve geliştirme sırasında onion hizmetlerini başlatmayı tamamen "
-"atlamak genellikle uygundur. Bunu ``--local-only`` seçeneğiyle "
+"Tor yavaştır ve geliştirme sırasında onion hizmetlerini başlatmayı "
+"tamamen atlamak genellikle uygundur. Bunu ``--local-only`` seçeneğiyle "
"yapabilirsiniz. Örneğin::"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
-"Bu durumda, ``http://onionshare:train-system@127.0.0.1:17635`` URL'sini Tor "
-"Browser kullanmak yerine Firefox gibi normal bir web tarayıcısında açarsınız."
+"Bu durumda, ``http://onionshare:train-system@127.0.0.1:17635`` URL'sini "
+"Tor Browser kullanmak yerine Firefox gibi normal bir web tarayıcısında "
+"açarsınız."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Çevirilere Katkıda Bulunma"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -199,22 +199,22 @@ msgid ""
"needed."
msgstr ""
"`Hosted Weblate <https://hosted.weblate.org/projects/onionshare/>`_ "
-"adresinde OnionShare'i çevirerek daha kolay kullanılmasına ve insanlar için "
-"daha bilindik ve kullanıcı dostu olmasına yardımcı olun. \"OnionShare\" "
-"sözcüğünü her zaman latin harflerinde tutun ve gerekirse \"OnionShare (yerel "
-"adı)\" kullanın."
+"adresinde OnionShare'i çevirerek daha kolay kullanılmasına ve insanlar "
+"için daha bilindik ve kullanıcı dostu olmasına yardımcı olun. "
+"\"OnionShare\" sözcüğünü her zaman latin harflerinde tutun ve gerekirse "
+"\"OnionShare (yerel adı)\" kullanın."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-"Çeviriye yardımcı olmak için bir Hosted Weblate hesabı oluşturun ve katkıda "
-"bulunmaya başlayın."
+"Çeviriye yardımcı olmak için bir Hosted Weblate hesabı oluşturun ve "
+"katkıda bulunmaya başlayın."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr "Asıl İngilizce Dizgeler için Öneriler"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
@@ -222,31 +222,32 @@ msgstr ""
"Bazen asıl İngilizce dizgeler yanlıştır veya uygulama ile belgelendirme "
"arasında uyumsuzluk vardır."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 ""
-"Weblate'teki yorumunuza @kingu ekleyerek veya bir GitHub sorunu veya çekme "
-"isteği açarak kaynağı dizgesi için iyileştirmeler önerin. İkinci seçenek, "
-"tüm proje geliştiricilerinin öneriyi görmesini sağlar ve dizge üzerinde "
-"olağan kod inceleme süreçleri aracılığıyla değişiklikler yapabilir."
+"Weblate'teki yorumunuza @kingu ekleyerek veya bir GitHub sorunu veya "
+"çekme isteği açarak kaynağı dizgesi için iyileştirmeler önerin. İkinci "
+"seçenek, tüm proje geliştiricilerinin öneriyi görmesini sağlar ve dizge "
+"üzerinde olağan kod inceleme süreçleri aracılığıyla değişiklikler "
+"yapabilir."
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Çevirilerin Durumu"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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 ""
-"Şu anki çeviri durumu aşağıdaki gibidir. Henüz başlamamış bir dilde çeviriye "
-"başlamak istiyorsanız lütfen e-posta listesine yazın: onionshare-dev@lists."
-"riseup.net"
+"Şu anki çeviri durumu aşağıdaki gibidir. Henüz başlamamış bir dilde "
+"çeviriye başlamak istiyorsanız lütfen e-posta listesine yazın: "
+"onionshare-dev@lists.riseup.net"
#~ msgid ""
#~ "OnionShare is developed in Python. To"
@@ -463,3 +464,26 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "OnionShare, Python ile geliştirilmektedir. "
+#~ "Başlamak için https://github.com/micahflee/onionshare/ "
+#~ "adresindeki Git deposunu klonlayın ve "
+#~ "ardından komut satırı sürümü için "
+#~ "geliştirme ortamınızı nasıl kuracağınızı "
+#~ "öğrenmek için ``cli/README.md`` dosyasına, "
+#~ "grafiksel sürüm için geliştirme ortamınızı "
+#~ "nasıl kuracağınızı öğrenmek için "
+#~ "``desktop/README.md`` dosyasına bakın."
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/features.po b/docs/source/locale/tr/LC_MESSAGES/features.po
index c516046c..4451ccdb 100644
--- a/docs/source/locale/tr/LC_MESSAGES/features.po
+++ b/docs/source/locale/tr/LC_MESSAGES/features.po
@@ -7,16 +7,16 @@ msgid ""
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-01-10 16:32+0000\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language-Team: tr <LL@li.org>\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.4.1-dev\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -29,17 +29,18 @@ msgid ""
"other people as `Tor <https://www.torproject.org/>`_ `onion services "
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
-"Web sunucuları bilgisayarınızda yerel olarak başlatılır ve `Tor <https://www."
-"torproject.org/>`_ `onion hizmetleri <https://community.torproject.org/"
-"onion-services/>`_ olarak diğer kişilerin erişimine açılır."
+"Web sunucuları bilgisayarınızda yerel olarak başlatılır ve `Tor "
+"<https://www.torproject.org/>`_ `onion hizmetleri "
+"<https://community.torproject.org/onion-services/>`_ olarak diğer "
+"kişilerin erişimine açılır."
#: ../../source/features.rst:8
msgid ""
"By default, OnionShare web addresses are protected with a random "
"password. A typical OnionShare address might look something like this::"
msgstr ""
-"Öntanımlı olarak, OnionShare web adresleri rastgele bir parola ile korunur. "
-"Tipik bir OnionShare adresi aşağıdaki gibi görünebilir::"
+"Öntanımlı olarak, OnionShare web adresleri rastgele bir parola ile "
+"korunur. Tipik bir OnionShare adresi aşağıdaki gibi görünebilir::"
#: ../../source/features.rst:12
msgid ""
@@ -48,10 +49,10 @@ msgid ""
"something less secure like unencrypted e-mail, depending on your `threat "
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
-"`Tehdit modelinize <https://ssd.eff.org/module/your-security-plan>`_ bağlı "
-"olarak, bu URL'yi şifrelenmiş bir sohbet mesajı gibi seçtiğiniz bir iletişim "
-"kanalını veya şifrelenmemiş e-posta gibi daha az güvenli bir şeyi kullanarak "
-"güvenli bir şekilde paylaşmaktan sorumlusunuz."
+"`Tehdit modelinize <https://ssd.eff.org/module/your-security-plan>`_ "
+"bağlı olarak, bu URL'yi şifrelenmiş bir sohbet mesajı gibi seçtiğiniz bir"
+" iletişim kanalını veya şifrelenmemiş e-posta gibi daha az güvenli bir "
+"şeyi kullanarak güvenli bir şekilde paylaşmaktan sorumlusunuz."
#: ../../source/features.rst:14
msgid ""
@@ -69,10 +70,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 internete bağlanana 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 internete bağlanana kadar "
+"hizmet kullanılamayacaktır. OnionShare, insanlarla gerçek zamanlı olarak "
+"çalışırken en iyi şekilde çalışır."
#: ../../source/features.rst:18
msgid ""
@@ -82,8 +83,8 @@ msgid ""
"Tor onion services too, it also protects your anonymity. See the "
":doc:`security design </security>` for more info."
msgstr ""
-"Kendi bilgisayarınız web sunucusu olduğu için, *OnionShare'de gerçekleşen "
-"şeylere hiçbir üçüncü taraf erişemez*, OnionShare geliştiricileri bile. "
+"Kendi bilgisayarınız web sunucusu olduğu için, *OnionShare'de gerçekleşen"
+" şeylere hiçbir üçüncü taraf erişemez*, OnionShare geliştiricileri bile. "
"Tamamen özeldir. Ve OnionShare, Tor onion hizmetlerine de dayandığından, "
"anonimliğinizi de korur. Daha fazla bilgi için :doc:`güvenlik tasarımına "
"</security>` bakın."
@@ -100,16 +101,16 @@ msgid ""
msgstr ""
"OnionShare'i, dosyaları ve klasörleri insanlara güvenli ve anonim olarak "
"göndermek için kullanabilirsiniz. Bir paylaşma sekmesi açın, paylaşmak "
-"istediğiniz dosya ve klasörleri sürükleyin ve \"Paylaşmaya başla\" düğmesine "
-"tıklayın."
+"istediğiniz dosya ve klasörleri sürükleyin ve \"Paylaşmaya başla\" "
+"düğmesine tıklayın."
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
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şmaya başlamadan "
-"önce istediğiniz ayarı seçtiğinizden emin olun."
+"Dosyaları ekledikten sonra bazı ayarlar göreceksiniz. Paylaşmaya "
+"başlamadan önce istediğiniz ayarı seçtiğinizden emin olun."
#: ../../source/features.rst:31
msgid ""
@@ -120,10 +121,10 @@ msgid ""
"box."
msgstr ""
"Birisi dosyalarınızı indirmeyi bitirir bitirmez, OnionShare sunucuyu "
-"otomatik olarak durduracak ve web sitesini internetten kaldıracaktır. Birden "
-"çok kişinin bunları indirmesine izin vermek için, \"Dosyalar gönderildikten "
-"sonra paylaşmayı durdur (dosyaların tek tek indirilmesine izin vermek için "
-"işareti kaldırın)\" kutusunun işaretini kaldırın."
+"otomatik olarak durduracak ve web sitesini internetten kaldıracaktır. "
+"Birden çok kişinin bunları indirmesine izin vermek için, \"Dosyalar "
+"gönderildikten sonra paylaşmayı durdur (dosyaların tek tek indirilmesine "
+"izin vermek için işareti kaldırın)\" kutusunun işaretini kaldırın."
#: ../../source/features.rst:34
msgid ""
@@ -131,8 +132,9 @@ msgid ""
"individual files you share rather than a single compressed version of all"
" the files."
msgstr ""
-"Ayrıca, bu kutunun işaretini kaldırırsanız, kişiler tüm dosyaların tek bir "
-"sıkıştırılmış çeşidi yerine paylaştığınız dosyaları tek tek indirebilirler."
+"Ayrıca, bu kutunun işaretini kaldırırsanız, kişiler tüm dosyaların tek "
+"bir sıkıştırılmış çeşidi yerine paylaştığınız dosyaları tek tek "
+"indirebilirler."
#: ../../source/features.rst:36
msgid ""
@@ -143,9 +145,9 @@ msgid ""
msgstr ""
"Paylaşmaya hazır olduğunuzda, \"Paylaşmaya başla\" düğmesine tıklayın. "
"İstediğiniz zaman \"Paylaşmayı durdur\" düğmesine tıklayarak veya "
-"OnionShare'den çı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."
+"OnionShare'den çı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:40
msgid ""
@@ -154,10 +156,10 @@ msgid ""
"or the person is otherwise exposed to danger, use an encrypted messaging "
"app."
msgstr ""
-"Artık bir OnionShare'e sahip olduğunuza göre, adresi kopyalayın ve dosyaları "
-"almasını istediğiniz kişiye gönderin. Dosyaların güvende kalması gerekiyorsa "
-"veya kişi başka bir şekilde tehlikeye maruz kalırsa, şifreli bir mesajlaşma "
-"uygulaması kullanın."
+"Artık bir OnionShare'e sahip olduğunuza göre, adresi kopyalayın ve "
+"dosyaları almasını istediğiniz kişiye gönderin. Dosyaların güvende "
+"kalması gerekiyorsa veya kişi başka bir şekilde tehlikeye maruz kalırsa, "
+"şifreli bir mesajlaşma uygulaması kullanın."
#: ../../source/features.rst:42
msgid ""
@@ -166,60 +168,104 @@ msgid ""
"downloaded directly from your computer by clicking the \"Download Files\""
" link in the corner."
msgstr ""
-"Bu kişi daha sonra adresi Tor Browser'da açmalıdır. Web adresinde bulunan "
-"rastgele parola ile oturum açtıktan sonra, köşedeki \"Dosyaları İndir\" "
-"bağlantısına tıklayarak dosyalar doğrudan bilgisayarınızdan indirilebilir."
+"Bu kişi daha sonra adresi Tor Browser'da açmalıdır. Web adresinde bulunan"
+" rastgele parola ile oturum açtıktan sonra, köşedeki \"Dosyaları İndir\" "
+"bağlantısına tıklayarak dosyalar doğrudan bilgisayarınızdan "
+"indirilebilir."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr "Dosya Alın"
+msgid "Receive Files and Messages"
+msgstr "Dosya ve Mesajları Alın"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
-"OnionShare'i, kullanıcıların dosyaları anonim olarak doğrudan "
-"bilgisayarınıza yüklemesine, bir anlamda onu anonim bir depolama alanına "
-"dönüştürmesine izin vermek için kullanabilirsiniz. Bir \"Alma sekmesi\" "
-"açın, dosyaları nereye kaydetmek istediğinizi ve diğer ayarları seçin ve "
-"ardından \"Alma Modunu Başlat\" düğmesine tıklayın."
+"OnionShare'i, kullanıcıların dosya ve mesajlarını 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:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr ""
+"Gönderilen mesajları ve dosyaları kaydetmek için bir klasöre gidebilirsiniz."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
-"Bu, OnionShare hizmetini başlatır. Bu adresi Tor Browser'da açan herkes, "
-"bilgisayarınıza dosya yükleyebilir."
+"Yalnızca dosya yüklemelerine izin vermek istiyorsanız \"Metin göndermeyi "
+"devre dışı bırak\" seçeneğini işaretleyebilir ve anonim bir iletişim formu "
+"gibi yalnızca metin mesajlarının gönderilmesine izin vermek istiyorsanız "
+"\"Dosya yüklemeyi devre dışı bırak\" seçeneğini işaretleyebilirsiniz."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Birisi OnionShare hizmetinize dosya veya mesaj gönderdiğinde "
+"bilgilendirilmek istiyorsanız, \"Bildirim web kancası kullan\" seçeneğini "
+"işaretleyebilir ve ardından bir web kancası URL'si seçebilirsiniz. Bu "
+"özelliği kullanırsanız, OnionShare, birisi dosya veya mesaj gönderdiğinde bu "
+"URL'ye bir HTTP POST isteğinde bulunacaktır. Örneğin, `Keybase "
+"<https://keybase.io/>`_ mesajlaşma uygulamasında şifreli bir metin mesajı "
+"almak istiyorsanız, `@webhookbot <https://keybase.io/webhookbot>`_ ile bir "
+"konuşma başlatabilir, ``!webhook create onionshare-alerts`` yazabilirsiniz "
+"ve bot size bir URL ile yanıt verecektir. Bunu bildirim web kancası URL'si "
+"olarak kullanın. Birisi alma modu hizmetinize bir dosya yüklerse, bu olur "
+"olmaz @webhookbot size Keybase'de bir mesaj göndererek haber verecektir."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Hazır olduğunuzda, \"Alma Modunu Başlat\" düğmesine tıklayın. Bu, OnionShare "
+"hizmetini başlatır. Bu adresi Tor Browser'larında yükleyen herkes, "
+"bilgisayarınıza yüklenecek olan dosyaları ve mesajları gönderebilir."
+
+#: ../../source/features.rst:67
+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 ""
-"Ayrıca, size dosya gönderen kişilerin geçmişini ve ilerlemesini göstermek "
-"için sağ üst köşedeki \"↑\" simgesine tıklayabilirsiniz."
+"Ayrıca, size dosya gönderen kişilerin geçmişini ve ilerlemesini göstermek"
+" için sağ üst köşedeki \"↑\" simgesine tıklayabilirsiniz."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
msgstr "Size dosya gönderen birisi için şu şekilde görünür."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-"Bir kişi alma hizmetinize dosyalar yüklediğinde, öntanımlı olarak "
-"bilgisayarınızdaki ev klasöründe ``OnionShare`` adlı bir klasöre kaydedilir "
-"ve dosyaların yüklenme zamanına göre otomatik olarak ayrı alt klasörler "
-"halinde düzenlenir."
+"Biri alma hizmetinize dosya veya mesaj gönderdiğinde, öntanımlı olarak "
+"bilgisayarınızdaki ev klasöründe bulunan ``OnionShare`` adlı bir klasöre "
+"kaydedilir ve dosyaların yüklendiği zamana göre otomatik olarak ayrı alt "
+"klasörler halinde düzenlenir."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -227,29 +273,29 @@ msgid ""
"quite as secure version of `SecureDrop <https://securedrop.org/>`_, the "
"whistleblower submission system."
msgstr ""
-"Bir OnionShare alma hizmeti kurmak, gazeteciler ve anonim kaynaklardan gelen "
-"belgeleri güvenli bir şekilde kabul etmesi gereken diğer kişiler için "
-"kullanışlıdır. Bu şekilde kullanıldığında, OnionShare hafif, daha basit, "
-"onun kadar güvenli olmayan bir muhbir teslimat sistemi `SecureDrop "
-"<https://securedrop.org/>`_ çeşidi gibidir."
+"Bir OnionShare alma hizmeti kurmak, gazeteciler ve anonim kaynaklardan "
+"gelen belgeleri güvenli bir şekilde kabul etmesi gereken diğer kişiler "
+"için kullanışlıdır. Bu şekilde kullanıldığında, OnionShare hafif, daha "
+"basit, onun kadar güvenli olmayan bir muhbir teslimat sistemi `SecureDrop"
+" <https://securedrop.org/>`_ çeşidi gibidir."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr "Sorumluluk size aittir"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail 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 ""
-"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 mekanizması eklemez."
+"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 mekanizması eklemez."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -258,18 +304,24 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
-"OnionShare aracılığıyla bir Office belgesi veya PDF dosyası alırsanız, bu "
-"belgeleri `Dangerzone <https://dangerzone.rocks/>`_ kullanarak açılmaları "
-"güvenli PDF dosyalarına dönüştürebilirsiniz. Ayrıca, güvenilmeyen belgeleri "
-"açarken onları tek kullanımlık `Tails <https://tails.boum.org/>`_ veya `"
-"Qubes <https://qubes-os.org/>`_ sanal makinelerinde açarak kendinizi "
-"koruyabilirsiniz."
+"OnionShare aracılığıyla bir Office belgesi veya PDF dosyası alırsanız, bu"
+" belgeleri `Dangerzone <https://dangerzone.rocks/>`_ kullanarak "
+"açılmaları güvenli PDF dosyalarına dönüştürebilirsiniz. Ayrıca, "
+"güvenilmeyen belgeleri açarken onları tek kullanımlık `Tails "
+"<https://tails.boum.org/>`_ veya `Qubes <https://qubes-os.org/>`_ sanal "
+"makinelerinde açarak kendinizi koruyabilirsiniz."
+
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Ancak, OnionShare aracılığıyla gönderilen metin mesajlarını açmak her zaman "
+"güvenlidir."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr "Alma hizmeti çalıştırma ipuçları"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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"
@@ -278,35 +330,37 @@ 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 internete bağlı ayrı, özel bir bilgisayarda yapmanız tavsiye "
-"edilir."
+"zaman açık ve internete bağlı ayrı, özel bir bilgisayarda yapmanız "
+"tavsiye edilir."
-#: ../../source/features.rst:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). It's also a good idea to "
+"give it a custom title (see :ref:`custom_titles`)."
msgstr ""
"OnionShare adresini web sitenize veya sosyal medya 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_passwords` "
-"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_passwords` 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:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr "Web Sitesi Barındırın"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"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şmaya başla\" 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şmaya başla\" düğmesine tıklayın."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -315,14 +369,14 @@ msgid ""
"websites that execute code or use databases. So you can't for example use"
" WordPress.)"
msgstr ""
-"Bir ``index.html`` dosyası eklerseniz, birisi web sitenizi yüklediğinde o "
-"gösterilecektir. Web sitesini oluşturan diğer HTML, CSS, JavaScript "
-"dosyalarını ve resimleri de eklemelisiniz. (OnionShare'in yalnızca *statik* "
-"web sitelerini barındırmayı desteklediğini unutmayın. Kod çalıştıran veya "
-"veri tabanları kullanan web sitelerini barındıramaz. Yani, örneğin WordPress "
-"kullanamazsınız.)"
+"Bir ``index.html`` dosyası eklerseniz, birisi web sitenizi yüklediğinde o"
+" gösterilecektir. Web sitesini oluşturan diğer HTML, CSS, JavaScript "
+"dosyalarını ve resimleri de eklemelisiniz. (OnionShare'in yalnızca "
+"*statik* web sitelerini barındırmayı desteklediğini unutmayın. Kod "
+"çalıştıran veya veri tabanları kullanan web sitelerini barındıramaz. "
+"Yani, örneğin WordPress kullanamazsınız.)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 "
@@ -331,11 +385,11 @@ msgstr ""
"Bir ``index.html`` dosyanız yoksa, onun yerine bir dizin listesi "
"gösterilecek ve onu yükleyen kişiler dosyalara göz atıp indirebilecektir."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr "İçerik Güvenliği Politikası"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -345,10 +399,10 @@ msgid ""
msgstr ""
"OnionShare, öntanımlı olarak katı bir `İçerik Güvenliği Politikası "
"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ 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."
+"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:102
+#: ../../source/features.rst:113
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 "
@@ -356,15 +410,15 @@ msgid ""
"before starting the service."
msgstr ""
"CDN'lerden varlıklar veya JavaScript kütüphaneleri gibi üçüncü taraf web "
-"sitelerinden içerik yüklemek istiyorsanız, hizmeti başlatmadan önce \"İçerik "
-"Güvenliği Politikası başlığı gönderme (web sitenizin üçüncü taraf "
-"kaynaklarını kullanmasına izin verir)\" kutusunu işaretleyin."
+"sitelerinden içerik yüklemek istiyorsanız, hizmeti başlatmadan önce "
+"\"İçerik Güvenliği Politikası başlığı gönderme (web sitenizin üçüncü "
+"taraf kaynaklarını kullanmasına izin verir)\" kutusunu işaretleyin."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr "Web sitesi hizmeti çalıştırma ipuçları"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -373,14 +427,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 kullanarak (birine hızlı bir şekilde bir şey göstermek 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 internete bağlı ayrı, "
-"özel bir bilgisayarda yapmanız tavsiye edilir. OnionShare'i kapatıp ve 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:110
+"OnionShare kullanarak (birine hızlı bir şekilde bir şey göstermek 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 internete bağlı "
+"ayrı, özel bir bilgisayarda yapmanız tavsiye edilir. OnionShare'i kapatıp"
+" ve 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:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
@@ -388,32 +442,32 @@ 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_passwords` bölümüne bakın)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr "Anonim Olarak Sohbet Edin"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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 özel, 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."
+"Hiçbir şey kaydetmeyen özel, 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."
-#: ../../source/features.rst:119
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it 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."
msgstr ""
-"Sunucuyu başlattıktan sonra, OnionShare adresini 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 göndermek için "
-"şifreli bir mesajlaşma uygulaması kullanın."
+"Sunucuyu başlattıktan sonra, OnionShare adresini 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 "
+"göndermek için şifreli bir mesajlaşma uygulaması kullanın."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 "
@@ -422,10 +476,10 @@ msgid ""
msgstr ""
"İnsanlar OnionShare adresini Tor Browser'da açarak sohbet odasına "
"katılabilirler. Sohbet odası JavasScript gerektirir, bu nedenle katılmak "
-"isteyenler Tor Browser güvenlik düzeyini \"En Güvenli\" yerine \"Standart\" "
-"veya \"Daha Güvenli\" olarak ayarlamalıdır."
+"isteyenler Tor Browser güvenlik düzeyini \"En Güvenli\" yerine "
+"\"Standart\" veya \"Daha Güvenli\" olarak ayarlamalıdır."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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 "
@@ -433,36 +487,36 @@ msgid ""
"get displayed at all, even if others were already chatting in the room."
msgstr ""
"Birisi sohbet odasına katıldığında rastgele bir ad alır. Sol paneldeki "
-"kutuya yeni bir ad yazıp ↵ tuşuna basarak adlarını değiştirebilirler. Sohbet "
-"geçmişi herhangi bir yere kaydedilmediğinden, başkaları odada sohbet ediyor "
-"olsa bile bu hiç görüntülenmez."
+"kutuya yeni bir ad yazıp ↵ tuşuna basarak adlarını değiştirebilirler. "
+"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:133
+#: ../../source/features.rst:144
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 ""
-"Bir OnionShare sohbet odasında herkes anonimdir. Herkes adını herhangi bir "
-"şeyle değiştirebilir ve herhangi birinin kimliğini doğrulamanın bir yolu "
-"yoktur."
+"Bir OnionShare sohbet odasında herkes anonimdir. Herkes adını herhangi "
+"bir şeyle değiştirebilir ve herhangi birinin kimliğini doğrulamanın bir "
+"yolu yoktur."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
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 ""
-"Ancak, bir OnionShare sohbet odası oluşturur ve adresi şifrelenmiş mesajlar "
-"kullanarak güvenli bir şekilde yalnızca 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."
+"Ancak, bir OnionShare sohbet odası oluşturur ve adresi şifrelenmiş "
+"mesajlar kullanarak güvenli bir şekilde yalnızca 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."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr "Bunun ne faydası var?"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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."
@@ -470,7 +524,7 @@ msgstr ""
"Zaten şifrelenmiş bir mesajlaşma uygulaması kullanmanız gerekiyorsa, "
"OnionShare sohbet odasından başlamanın ne anlamı var? Daha az iz bırakır."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -481,15 +535,15 @@ msgid ""
"rooms don't store any messages anywhere, so the problem is reduced to a "
"minimum."
msgstr ""
-"Örneğin bir Signal grubuna bir mesaj gönderirseniz, mesajınızın bir kopyası "
-"grubun her üyesinin her aygıtında (aygıtlar ve Signal Masaüstünü kurdularsa "
-"bilgisayarlar) bulunur. Kaybolan mesajlar açık olsa bile, mesajların 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ı mesajları hiçbir yerde depolamadığından sorun en "
-"aza indirilir."
-
-#: ../../source/features.rst:146
+"Örneğin bir Signal grubuna bir mesaj gönderirseniz, mesajınızın bir "
+"kopyası grubun her üyesinin her aygıtında (aygıtlar ve Signal Masaüstünü "
+"kurdularsa bilgisayarlar) bulunur. Kaybolan mesajlar açık olsa bile, "
+"mesajların 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ı mesajları hiçbir yerde "
+"depolamadığından sorun en aza indirilir."
+
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -499,17 +553,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:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr "Şifreleme nasıl çalışır?"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -518,14 +572,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 mesaj 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:154
+"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 mesaj 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:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
@@ -920,3 +974,51 @@ msgstr ""
#~ "WebSockets, through their E2EE onion "
#~ "connections."
#~ msgstr ""
+
+#~ msgid "Receive Files"
+#~ msgstr "Dosya Alın"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "OnionShare'i, kullanıcıların dosyaları anonim "
+#~ "olarak doğrudan bilgisayarınıza yüklemesine, "
+#~ "bir anlamda onu anonim bir depolama "
+#~ "alanına dönüştürmesine izin vermek için "
+#~ "kullanabilirsiniz. Bir \"Alma sekmesi\" açın,"
+#~ " dosyaları nereye kaydetmek istediğinizi ve"
+#~ " diğer ayarları seçin ve ardından "
+#~ "\"Alma Modunu Başlat\" düğmesine tıklayın."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Bu, OnionShare hizmetini başlatır. Bu "
+#~ "adresi Tor Browser'da açan herkes, "
+#~ "bilgisayarınıza dosya yükleyebilir."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "Bir kişi alma hizmetinize dosyalar "
+#~ "yüklediğinde, öntanımlı olarak bilgisayarınızdaki"
+#~ " ev klasöründe ``OnionShare`` adlı bir "
+#~ "klasöre kaydedilir ve dosyaların yüklenme "
+#~ "zamanına göre otomatik olarak ayrı alt"
+#~ " klasörler halinde düzenlenir."
diff --git a/docs/source/locale/tr/LC_MESSAGES/help.po b/docs/source/locale/tr/LC_MESSAGES/help.po
index b0533068..f97d1bd0 100644
--- a/docs/source/locale/tr/LC_MESSAGES/help.po
+++ b/docs/source/locale/tr/LC_MESSAGES/help.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: 2020-11-15 14:42-0800\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
"PO-Revision-Date: 2020-11-17 10:28+0000\n"
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language-Team: tr <LL@li.org>\n"
"Language: tr\n"
+"Language-Team: tr <LL@li.org>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
@@ -32,25 +31,26 @@ 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 ""
-"Burada OnionShare'in nasıl kullanılacağına ilişkin talimatları bulacaksınız. "
-"Sorularınızı yanıtlayan bir şey olup olmadığını görmek için önce tüm "
-"bölümlere bakın."
+"Burada OnionShare'in nasıl kullanılacağına ilişkin talimatları "
+"bulacaksınız. Sorularınızı yanıtlayan bir şey olup olmadığını görmek için"
+" önce tüm bölümlere bakın."
#: ../../source/help.rst:10
msgid "Check the GitHub Issues"
msgstr "GitHub Sorunlarına Bakın"
#: ../../source/help.rst:12
+#, fuzzy
msgid ""
"If it isn't on the website, please check the `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
-"Web sitesinde yoksa, lütfen `GitHub sorunlarına <https://github.com/"
-"micahflee/onionshare/issues>`_ bakın. Bir başkasının aynı sorunla "
-"karşılaşması ve bunu geliştiricilere iletmesi, hatta bir çözüm göndermesi "
-"mümkündür."
+"Web sitesinde yoksa, lütfen `GitHub sorunlarına "
+"<https://github.com/micahflee/onionshare/issues>`_ bakın. Bir başkasının "
+"aynı sorunla karşılaşması ve bunu geliştiricilere iletmesi, hatta bir "
+"çözüm göndermesi mümkündür."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
@@ -60,15 +60,10 @@ msgstr "Kendiniz Bir Sorun Gönderin"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Sorununuza bir çözüm bulamazsanız ya da bir soru sormak veya yeni bir "
-"özellik önermek istiyorsanız, lütfen `bir sorun gönderin <https://github.com/"
-"micahflee/onionshare/issues/new>`_. Bunun için `bir GitHub hesabı "
-"oluşturulması <https://help.github.com/articles/"
-"signing-up-for-a-new-github-account/>`_ gerekir."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -79,10 +74,30 @@ msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
-"Projeyi tartışmak için kullandığımız Keybase ekibimize nasıl katılacağınızla "
-"ilgili :ref:`collaborating` bölümüne bakın."
+"Projeyi tartışmak için kullandığımız Keybase ekibimize nasıl "
+"katılacağınızla ilgili :ref:`collaborating` bölümüne bakın."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr ""
#~ "OnionShare ile ilgili yardıma ihtiyacınız "
#~ "varsa, lütfen aşağıdaki talimatları izleyin."
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Sorununuza bir çözüm bulamazsanız ya da"
+#~ " bir soru sormak veya yeni bir "
+#~ "özellik önermek istiyorsanız, lütfen `bir "
+#~ "sorun gönderin "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. Bunun"
+#~ " için `bir GitHub hesabı oluşturulması "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_ gerekir."
+
diff --git a/docs/source/locale/uk/LC_MESSAGES/advanced.po b/docs/source/locale/uk/LC_MESSAGES/advanced.po
index ff6697c9..ef1dbbc8 100644
--- a/docs/source/locale/uk/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/uk/LC_MESSAGES/advanced.po
@@ -7,8 +7,8 @@ msgid ""
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-17 10:28+0000\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: none\n"
"Language: uk\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.4-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -36,11 +36,11 @@ 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, навіть якщо "
-"ви перезапустите свій комп’ютер."
+"Усе в OnionShare типово є тимчасовим. Якщо закрити вкладку OnionShare, її"
+" адреса більше не існуватиме й її більше не можна використовувати. Іноді "
+"вам може знадобитися, щоб служба OnionShare була постійною. Це корисно, "
+"якщо ви хочете розмістити вебсайт, доступний з тієї ж адреси OnionShare, "
+"навіть якщо ви перезапустите свій комп’ютер."
#: ../../source/advanced.rst:13
msgid ""
@@ -61,8 +61,8 @@ msgid ""
msgstr ""
"Коли ви вийдете з OnionShare, а потім знову відкриєте його, збережені "
"вкладки почнуть відкриватися. Вам доведеться власноруч запускати кожну "
-"службу, але коли ви це зробите, вони запустяться з тієї ж адреси OnionShare "
-"і з тим же паролем."
+"службу, але коли ви це зробите, вони запустяться з тієї ж адреси "
+"OnionShare і з тим же паролем."
#: ../../source/advanced.rst:21
msgid ""
@@ -85,7 +85,7 @@ msgid ""
msgstr ""
"Типово всі служби OnionShare захищені іменем користувача ``onionshare`` і "
"випадково створеним паролем. Якщо хтось вводить пароль неправильно 20 разів, "
-"ваша служба onion автоматично зупинениться, щоб запобігти грубій спробі "
+"ваша служба onion автоматично зупиняється, щоб запобігти спробі грубого "
"зламу служби OnionShare."
#: ../../source/advanced.rst:31
@@ -98,11 +98,11 @@ msgid ""
"password, even if they know the correct password."
msgstr ""
"Іноді вам може знадобитися, щоб ваша служба OnionShare була "
-"загальнодоступною, наприклад, якщо ви хочете налаштувати службу отримання "
-"OnionShare, щоб інші могли безпечно та анонімно надсилати вам файли. У цьому "
-"випадку краще взагалі вимкнути пароль. Якщо ви цього не зробите, хтось може "
-"змусити ваш сервер зупинитися, просто зробивши 20 неправильних спроб "
-"введення паролю, навіть якщо вони знають правильний пароль."
+"загальнодоступною, наприклад, якщо ви хочете налаштувати службу отримання"
+" OnionShare, щоб інші могли безпечно та анонімно надсилати вам файли. У "
+"цьому випадку краще взагалі вимкнути пароль. Якщо ви цього не зробите, "
+"хтось може змусити ваш сервер зупинитися, просто зробивши 20 неправильних"
+" спроб введення паролю, навіть якщо вони знають правильний пароль."
#: ../../source/advanced.rst:35
msgid ""
@@ -114,11 +114,33 @@ msgstr ""
"використовувати пароль» перед запуском сервера. Тоді сервер буде "
"загальнодоступним і не матиме пароля."
-#: ../../source/advanced.rst:38
+#: ../../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 ""
+"Усталено, коли користувачі завантажують службу OnionShare у браузері Tor, "
+"вони бачать типову назву для типу служби. Наприклад, типовою назвою чату є "
+"\"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 ""
+"Якщо потрібно вибрати власний заголовок, перед запуском сервера встановіть "
+"параметр «Власний заголовок»."
+
+#: ../../source/advanced.rst:47
msgid "Scheduled Times"
msgstr "Запланований час"
-#: ../../source/advanced.rst:40
+#: ../../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 "
@@ -128,23 +150,24 @@ msgid ""
msgstr ""
"OnionShare підтримує планування, коли саме служба повинна запускатися та "
"зупинятися. Перш ніж запускати сервер, натисніть «Показати розширені "
-"налаштування» на його вкладці, а потім позначте «Запускати службу onion у "
-"запланований час», «Зупинити службу onion у запланований час» або обидва і "
-"встановіть бажані дати та час."
+"налаштування» на його вкладці, а потім позначте «Запускати службу onion у"
+" запланований час», «Зупинити службу onion у запланований час» або обидва"
+" і встановіть бажані дати та час."
-#: ../../source/advanced.rst:43
+#: ../../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:46
+#: ../../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 "
@@ -156,7 +179,7 @@ msgstr ""
"певний час у майбутньому, якщо з вами щось станеться. Якщо з вами нічого "
"не відбувається, ви можете вимкнути службу до запланованого запуску."
-#: ../../source/advanced.rst:51
+#: ../../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 "
@@ -165,20 +188,20 @@ msgid ""
msgstr ""
"**Планування автоматичної зупинки служби OnionShare може бути корисним для "
"обмеження надсилання**, наприклад, якщо ви хочете поділитися таємними "
-"документами й буди певними, що вони не доступні в Інтернеті впродовж більше "
+"документами й бути певними, що вони не доступні в Інтернеті впродовж більше "
"кількох днів."
-#: ../../source/advanced.rst:56
+#: ../../source/advanced.rst:65
msgid "Command-line Interface"
msgstr "Інтерфейс командного рядка"
-#: ../../source/advanced.rst:58
+#: ../../source/advanced.rst:67
msgid ""
"In addition to its graphical interface, OnionShare has a command-line "
"interface."
msgstr "Окрім графічного інтерфейсу, OnionShare має інтерфейс командного рядка."
-#: ../../source/advanced.rst:60
+#: ../../source/advanced.rst:69
msgid ""
"You can install just the command-line version of OnionShare using "
"``pip3``::"
@@ -186,7 +209,7 @@ msgstr ""
"Ви можете встановити версію для командного рядка OnionShare лише "
"використовуючи ``pip3``::"
-#: ../../source/advanced.rst:64
+#: ../../source/advanced.rst:73
msgid ""
"Note that you will also need the ``tor`` package installed. In macOS, "
"install it with: ``brew install tor``"
@@ -194,37 +217,37 @@ msgstr ""
"Зауважте, що вам також знадобиться встановлений пакунок ``tor``. У macOS "
"встановіть його за допомогою: ``brew install tor``"
-#: ../../source/advanced.rst:66
+#: ../../source/advanced.rst:75
msgid "Then run it like this::"
msgstr "Потім запустіть його так::"
-#: ../../source/advanced.rst:70
+#: ../../source/advanced.rst:79
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 ""
"Якщо ви встановили OnionShare за допомогою пакунка Linux Snapcraft, ви "
-"можете просто запустити ``onionshare.cli`` для доступу до версії інтерфейсу "
-"командного рядка."
+"можете просто запустити ``onionshare.cli`` для доступу до версії "
+"інтерфейсу командного рядка."
-#: ../../source/advanced.rst:73
+#: ../../source/advanced.rst:82
msgid "Usage"
msgstr "Користування"
-#: ../../source/advanced.rst:75
+#: ../../source/advanced.rst:84
msgid ""
"You can browse the command-line documentation by running ``onionshare "
"--help``::"
msgstr ""
-"Ви можете переглянути документацію командного рядка, запустивши ``onionshare "
-"--help``::"
+"Ви можете переглянути документацію командного рядка, запустивши "
+"``onionshare --help``::"
-#: ../../source/advanced.rst:132
+#: ../../source/advanced.rst:147
msgid "Legacy Addresses"
msgstr "Застарілі адреси"
-#: ../../source/advanced.rst:134
+#: ../../source/advanced.rst:149
msgid ""
"OnionShare uses v3 Tor onion services by default. These are modern onion "
"addresses that have 56 characters, for example::"
@@ -232,15 +255,15 @@ msgstr ""
"Типово, OnionShare використовує служби onion Tor v3. Це сучасні адреси "
"onion, що мають 56 символів, наприклад::"
-#: ../../source/advanced.rst:139
+#: ../../source/advanced.rst:154
msgid ""
"OnionShare still has support for v2 onion addresses, the old type of "
"onion addresses that have 16 characters, for example::"
msgstr ""
-"OnionShare досі підтримує адреси onion v2, старий тип адрес onion, які мають "
-"16 символів, наприклад::"
+"OnionShare досі підтримує адреси onion v2, старий тип адрес onion, які "
+"мають 16 символів, наприклад::"
-#: ../../source/advanced.rst:143
+#: ../../source/advanced.rst:158
msgid ""
"OnionShare calls v2 onion addresses \"legacy addresses\", and they are "
"not recommended, as v3 onion addresses are more secure."
@@ -248,7 +271,7 @@ msgstr ""
"OnionShare називає адреси onion v2 «застарілими адресами» і вони не "
"рекомендовані, оскільки адреси onion v3 безпечніші."
-#: ../../source/advanced.rst:145
+#: ../../source/advanced.rst:160
msgid ""
"To use legacy addresses, before starting a server click \"Show advanced "
"settings\" from its tab and check the \"Use a legacy address (v2 onion "
@@ -261,20 +284,21 @@ msgstr ""
"розширені налаштування» на його вкладці та позначте «Користуватися "
"застарілою адресою (служба onion v2, не рекомендовано)». У застарілому "
"режимі ви можете додатково ввімкнути автентифікацію клієнта Tor. Після "
-"запуску сервера у застарілому режимі ви не зможете вилучити застарілий режим "
-"у цій вкладці. Натомість ви повинні запустити окрему службу в окремій "
-"вкладці."
+"запуску сервера у застарілому режимі ви не зможете вилучити застарілий "
+"режим у цій вкладці. Натомість ви повинні запустити окрему службу в "
+"окремій вкладці."
-#: ../../source/advanced.rst:150
+#: ../../source/advanced.rst:165
msgid ""
"Tor Project plans to `completely deprecate v2 onion services "
"<https://blog.torproject.org/v2-deprecation-timeline>`_ on October 15, "
"2021, and legacy onion services will be removed from OnionShare before "
"then."
msgstr ""
-"Проєкт Tor планує `повністю припинити роботу службами onion v2 <https://blog."
-"torproject.org/v2-deprecation-timeline>`_ 15 жовтня 2021 р. і застарілі "
-"служби onion також буде вилучено з OnionShare незадовго до цього часу."
+"Проєкт Tor планує `повністю припинити роботу службами onion v2 "
+"<https://blog.torproject.org/v2-deprecation-timeline>`_ 15 жовтня 2021 р."
+" і застарілі служби onion також буде вилучено з OnionShare незадовго до "
+"цього часу."
#~ msgid ""
#~ "By default, everything in OnionShare is"
diff --git a/docs/source/locale/uk/LC_MESSAGES/develop.po b/docs/source/locale/uk/LC_MESSAGES/develop.po
index ce18e618..60330eb5 100644
--- a/docs/source/locale/uk/LC_MESSAGES/develop.po
+++ b/docs/source/locale/uk/LC_MESSAGES/develop.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: 2020-11-15 14:42-0800\n"
-"PO-Revision-Date: 2021-01-26 22:32+0000\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\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.5-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/develop.rst:2
@@ -39,14 +38,15 @@ msgid ""
"<https://keybase.io/team/onionshare>`_. Within the app, go to \"Teams\", "
"click \"Join a Team\", and type \"onionshare\"."
msgstr ""
-"OnionShare має відкриту команду Keybase для обговорення проєкту, включно з "
-"питаннями, обміном ідеями та побудовою, плануванням подальшого розвитку. (Це "
-"також простий спосіб надсилати захищені наскрізним шифруванням прямі "
-"повідомлення іншим у спільноті OnionShare, як-от адреси OnionShare.) Щоб "
-"використовувати Keybase, потрібно завантажити програму `Keybase app "
-"<https://keybase.io/download>`_, створити обліковий запис та `приєднайтися "
-"до цієї команди <https://keybase.io/team/onionshare>`_. У програмі перейдіть "
-"до «Команди», натисніть «Приєднатися до команди» та введіть «onionshare»."
+"OnionShare має відкриту команду Keybase для обговорення проєкту, включно "
+"з питаннями, обміном ідеями та побудовою, плануванням подальшого "
+"розвитку. (Це також простий спосіб надсилати безпосередні захищені "
+"наскрізним шифруванням повідомлення іншим спільноти OnionShare, наприклад"
+" адреси OnionShare.) Щоб користуватися Keybase, потрібно завантажити "
+"застосунок `Keybase app <https://keybase.io/download>`_, створити "
+"обліковий запис та `приєднайтеся до цієї команди "
+"<https://keybase.io/team/onionshare>`_. У застосунку перейдіть до "
+"«Команди», натисніть «Приєднатися до команди» та введіть «onionshare»."
#: ../../source/develop.rst:12
msgid ""
@@ -54,34 +54,36 @@ msgid ""
"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
"and and designers to discuss the project."
msgstr ""
-"OnionShare також має `список розсилки "
-"<https://lists.riseup.net/www/subscribe/onionshare-dev>` _ для "
-"розробників та дизайнерів для обговорення проєкту."
+"OnionShare також має `список розсилання "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ для розробників"
+" та дизайнерів для обговорення проєкту."
#: ../../source/develop.rst:15
msgid "Contributing Code"
msgstr "Внесок до кодової бази"
#: ../../source/develop.rst:17
+#, fuzzy
msgid ""
"OnionShare source code is to be found in this Git repository: "
-"https://github.com/micahflee/onionshare"
+"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. "
"You should also review all of the `open issues "
-"<https://github.com/micahflee/onionshare/issues>`_ on GitHub to see if "
+"<https://github.com/onionshare/onionshare/issues>`_ on GitHub to see if "
"there are any you'd like to tackle."
msgstr ""
-"Якщо ви хочете допомогти кодом OnionShare, приєднайтеся до команди Keybase і "
-"запитайте над чим ви думаєте працювати. Ви також повинні переглянути всі `"
-"відкриті запити <https://github.com/micahflee/onionshare/issues>`_ на "
-"GitHub, щоб побачити, чи є такі, які ви хотіли б розв'язати."
+"Якщо ви хочете допомогти кодом OnionShare, приєднайтеся до команди "
+"Keybase і запитайте над чим можна попрацювати. Також варто переглянути "
+"всі `відкриті завдання <https://github.com/micahflee/onionshare/issues>`_"
+" на GitHub, щоб побачити, чи є такі, які б ви хотіли розв'язати."
#: ../../source/develop.rst:22
msgid ""
@@ -89,9 +91,10 @@ 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 ""
-"Коли ви будете готові внести код, відкрийте запит надсилання до сховища "
-"GitHub і один із супровідників проєкту перегляне його та, можливо, поставить "
-"питання, попросить змінити щось, відхилить його або об’єднає з проєктом."
+"Коли ви будете готові допомогти код, відкрийте «pull request» до "
+"репозиторію GitHub і один із супровідників проєкту перегляне його та, "
+"можливо, поставить питання, попросить змінити щось, відхилить його або "
+"об’єднає з проєктом."
#: ../../source/develop.rst:27
msgid "Starting Development"
@@ -100,17 +103,12 @@ msgstr "Початок розробки"
#: ../../source/develop.rst:29
msgid ""
"OnionShare is developed in Python. To get started, clone the Git "
-"repository at https://github.com/micahflee/onionshare/ and then consult "
+"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 ""
-"OnionShare розроблено на Python. Для початку клонуйте сховище Git за адресою "
-"https://github.com/micahflee/onionshare/, а потім зверніться до файлу ``cli/"
-"README.md``, щоб дізнатися, як налаштувати середовище розробки для версії "
-"командного рядка та файл ``desktop/README.md``, щоб дізнатися, як "
-"налаштувати середовище розробки для графічної версії."
#: ../../source/develop.rst:32
msgid ""
@@ -119,7 +117,8 @@ msgid ""
"source tree."
msgstr ""
"Ці файли містять необхідні технічні вказівки та команди встановлення "
-"залежностей для вашої платформи та запуску OnionShare з джерельного дерева."
+"залежностей для вашої платформи та запуску OnionShare з джерельного "
+"дерева."
#: ../../source/develop.rst:35
msgid "Debugging tips"
@@ -139,11 +138,12 @@ msgid ""
msgstr ""
"Під час розробки зручно запустити OnionShare з термінала та додати до "
"команди прапор ``--verbose`` (або ``-v``). До термінала виводитиметься "
-"багато корисних повідомлень, наприклад, про ініціалізацію певних об'єктів, "
-"про події (наприклад, натискання кнопок, збереження або перезавантаження "
-"параметрів) та інші подробиці для зневаджування. Наприклад::"
+"багато корисних повідомлень, наприклад, про ініціалізацію певних "
+"об'єктів, про події (наприклад, натискання кнопок, збереження або "
+"перезавантаження параметрів) та інші подробиці для зневаджування. "
+"Наприклад::"
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid ""
"You can add your own debug messages by running the ``Common.log`` method "
"from ``onionshare/common.py``. For example::"
@@ -151,21 +151,21 @@ msgstr ""
"Ви можете додати власні повідомлення про зневадження, запустивши метод "
"``Common.log`` з ``onionshare/common.py``. Наприклад::"
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
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 ""
-"Це може бути корисно для вивчення ланцюжка подій, що відбуваються під час "
-"користування програмою, або значень певних змінних до та після того, як ними "
-"маніпулюють."
+"Це може бути корисно для вивчення ланцюжка подій, що відбуваються під час"
+" користування OnionShare, або значень певних змінних до та після "
+"взаємодії з ними."
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr "Лише локально"
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
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`` "
@@ -175,21 +175,21 @@ msgstr ""
"початковими службами onion. Ви можете зробити це за допомогою прапора "
"``--local-only``. Наприклад::"
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid ""
"In this case, you load the URL ``http://onionshare:train-"
"system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of"
" using the Tor Browser."
msgstr ""
"У цьому випадку ви завантажуєте URL-адресу ``http://onionshare:train-"
-"system@127.0.0.1:17635`` у звичайному переглядачі, як-от Firefox, замість "
-"користування Tor Browser."
+"system@127.0.0.1:17635`` у звичайному переглядачі, як-от Firefox, замість"
+" користування Tor Browser."
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr "Допомога з перекладами"
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid ""
"Help make OnionShare easier to use and more familiar and welcoming for "
"people by translating it on `Hosted Weblate "
@@ -198,54 +198,55 @@ msgid ""
"needed."
msgstr ""
"Допоможіть зробити OnionShare простішим у користуванні та звичнішим та "
-"приємнішим для людей, переклавши його на `Hosted Weblate <https://hosted."
-"weblate.org/projects/onionshare/>`_. Завжди зберігайте «OnionShare» "
-"латинськими літерами та використовуйте «OnionShare (місцева назва)», якщо це "
-"необхідно."
+"приємнішим для людей, переклавши його на `Hosted Weblate "
+"<https://hosted.weblate.org/projects/onionshare/>`_. Завжди зберігайте "
+"«OnionShare» латинськими літерами та використовуйте «OnionShare (місцева "
+"назва)», якщо це необхідно."
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
"Щоб допомогти перекласти, створіть обліковий запис на Hosted Weblate і "
"почніть допомагати."
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr "Пропозиції для оригінальних рядків англійською"
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid ""
"Sometimes the original English strings are wrong, or don't match between "
"the application and the documentation."
msgstr ""
-"Іноді оригінальні англійські рядки містять помилки або не збігаються між "
-"програмою та документацією."
+"Іноді оригінальні англійські рядки містять помилки або відрізняються у "
+"застосунку та документації."
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
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 ""
-"Вдоскональте рядок джерела файлу, додавши @kingu до свого коментаря Weblate, "
-"або повідомте про проблему на GitHub або запит на додавання. Останнє "
-"гарантує, що всі основні розробники, бачать пропозицію та можуть потенційно "
-"змінити рядок за допомогою звичайних процесів перегляду коду."
+"Вдоскональте рядок джерела файлу, додавши @kingu до свого коментаря "
+"Weblate, або повідомте про проблему на GitHub, або надішліть запит на "
+"додавання. Останнє гарантує, що всі основні розробники, бачать пропозицію"
+" та, ймовірно, можуть змінити рядок за допомогою звичайних процесів "
+"перегляду коду."
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr "Стан перекладів"
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
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 ""
-"Ось поточний стан перекладу. Якщо ви хочете розпочати переклад мовою, якої "
-"тут немає, будь ласка, напишіть нам до списку розсилки: onionshare-dev@lists."
-"riseup.net"
+"Тут знаходиться поточний стан перекладу. Якщо ви хочете розпочати "
+"переклад відсутньою тут мовою, будь ласка, напишіть нам до списку "
+"розсилання: onionshare-dev@lists.riseup.net"
#~ msgid ""
#~ "OnionShare is developed in Python. To"
@@ -436,3 +437,26 @@ msgstr ""
#~ msgid "Do the same for other untranslated lines."
#~ msgstr "Зробіть те ж саме для інших неперекладених рядків."
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, clone the Git "
+#~ "repository at https://github.com/micahflee/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 ""
+#~ "OnionShare розроблено на Python. Для "
+#~ "початку клонуйте сховище Git за адресою"
+#~ " https://github.com/micahflee/onionshare/, а потім "
+#~ "перегляньте файл ``cli/README.md``, щоб "
+#~ "дізнатися, як налаштувати середовище розробки"
+#~ " у командному рядку або файл "
+#~ "``desktop/README.md``, щоб дізнатися, як "
+#~ "налаштувати середовище розробки у версії "
+#~ "з графічним інтерфейсом."
+
diff --git a/docs/source/locale/uk/LC_MESSAGES/features.po b/docs/source/locale/uk/LC_MESSAGES/features.po
index 77cd66b4..341da9ed 100644
--- a/docs/source/locale/uk/LC_MESSAGES/features.po
+++ b/docs/source/locale/uk/LC_MESSAGES/features.po
@@ -7,8 +7,8 @@ msgid ""
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-17 10:28+0000\n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: none\n"
"Language: uk\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.4-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -30,9 +30,9 @@ msgid ""
"other people as `Tor <https://www.torproject.org/>`_ `onion services "
"<https://community.torproject.org/onion-services/>`_."
msgstr ""
-"Вебсервери локально запускаються на вашому комп’ютері та стають доступними "
-"для інших людей як `Tor <https://www.torproject.org/>`_ `onion служби "
-"<https://community.torproject.org/onion-services/>`_."
+"Вебсервери локально запускаються на вашому комп’ютері та стають "
+"доступними для інших людей як `Tor <https://www.torproject.org/>`_ `onion"
+" служби <https://community.torproject.org/onion-services/>`_."
#: ../../source/features.rst:8
msgid ""
@@ -50,19 +50,19 @@ msgid ""
"model <https://ssd.eff.org/module/your-security-plan>`_."
msgstr ""
"Ви відповідальні за безпечний доступ до цієї URL-адреси за допомогою "
-"вибраного вами каналу зв'язку, як-от у зашифрованому повідомленні чату, або "
-"за використання менш захищеного повідомлення, як от незашифрований "
-"електронний лист, залежно від вашої `моделі загрози <https://ssd.eff.org/en/"
-"module/your-security-plan>`_."
+"вибраного вами каналу зв'язку, як-от у зашифрованому повідомленні чату, "
+"або за використання менш захищеного повідомлення, як от незашифрований "
+"електронний лист, залежно від вашої `моделі загрози "
+"<https://ssd.eff.org/en/module/your-security-plan>`_."
#: ../../source/features.rst:14
msgid ""
"The people you send the URL to then copy and paste it into their `Tor "
"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
msgstr ""
-"Люди, яким ви надсилаєте URL-адресу, повинні копіювати та вставити її до `"
-"Tor Browser <https://www.torproject.org/>`_, щоб отримати доступ до служби "
-"OnionShare."
+"Люди, яким ви надсилаєте URL-адресу, повинні копіювати та вставити її до "
+"`Tor Browser <https://www.torproject.org/>`_, щоб отримати доступ до "
+"служби OnionShare."
#: ../../source/features.rst:16
msgid ""
@@ -72,8 +72,8 @@ msgid ""
"works best when working with people in real-time."
msgstr ""
"Якщо ви запустили OnionShare на ноутбуці, щоб надіслати комусь файли, а "
-"потім зупинити його роботу перед надсиланням файлів, служба буде недоступна, "
-"доки роботу ноутбука не буде поновлено і знову з'явиться в Інтернеті. "
+"потім зупинили його роботу перед надсиланням файлів, служба буде недоступна, "
+"доки роботу ноутбука не буде поновлено і він знову з'єднається з інтернетом. "
"OnionShare найкраще працює під час роботи з людьми в режимі реального часу."
#: ../../source/features.rst:18
@@ -86,9 +86,9 @@ msgid ""
msgstr ""
"Оскільки ваш власний комп'ютер є вебсервером, *ніхто сторонній не може "
"отримати доступ до будь-чого, що відбувається в OnionShare*, навіть "
-"розробники OnionShare. Це цілком приватно. Оскільки OnionShare теж базується "
-"на onion службах Tor, вашу анонімність також захищено. Докладніше про це у "
-"статті :doc:`про побудову безпеки </security>`."
+"розробники OnionShare. Це цілком приватно. Оскільки OnionShare теж "
+"базується на onion службах Tor, вашу анонімність також захищено. "
+"Докладніше про це у статті :doc:`про побудову безпеки </security>`."
#: ../../source/features.rst:21
msgid "Share Files"
@@ -100,17 +100,17 @@ msgid ""
"anonymously. Open a share tab, drag in the files and folders you wish to "
"share, and click \"Start sharing\"."
msgstr ""
-"Ви можете використовувати OnionShare, щоб безпечно та анонімно надсилати "
-"файли та теки людям. Просто відкрийте вкладку спільного доступу, перетягніть "
-"файли та теки, якими хочете поділитися і натисніть \"Почати надсилання\"."
+"Ви можете користуватися OnionShare, щоб безпечно та анонімно надсилати файли "
+"та теки людям. Просто відкрийте вкладку спільного доступу, перетягніть файли "
+"та теки, якими хочете поділитися і натисніть \"Почати надсилання\"."
-#: ../../source/features.rst:27 ../../source/features.rst:93
+#: ../../source/features.rst:27 ../../source/features.rst:104
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 ""
-"Після додавання файлів з'являться параметри. Перед надсиланням, "
-"переконайтеся, що вибрано потрібний параметр."
+"Після додавання файлів з'являться налаштування. Перед надсиланням, "
+"переконайтеся, що вибрано потрібні налаштування."
#: ../../source/features.rst:31
msgid ""
@@ -120,10 +120,10 @@ msgid ""
" files have been sent (uncheck to allow downloading individual files)\" "
"box."
msgstr ""
-"Як тільки хтось завершив завантажувати ваші файли, OnionShare автоматично "
-"зупиняє сервер, вилучивши вебсайт з Інтернету. Якщо ви хочете дозволити "
-"кільком людям завантажувати ці файли, приберіть позначку біля пункту «"
-"Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити "
+"Як тільки хтось завершив завантажувати ваші файли, OnionShare автоматично"
+" зупиняє сервер, вилучивши вебсайт з Інтернету. Якщо ви хочете дозволити "
+"кільком людям завантажувати ці файли, приберіть позначку біля пункту "
+"«Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити "
"завантаження окремих файлів)»."
#: ../../source/features.rst:34
@@ -132,8 +132,8 @@ msgid ""
"individual files you share rather than a single compressed version of all"
" the files."
msgstr ""
-"Також, якщо прибрати цю позначку, користувачі зможуть завантажувати окремі "
-"файли, які ви надсилаєте, а не одну стиснуту версію всіх файлів."
+"Також, якщо прибрати цю позначку, користувачі зможуть завантажувати "
+"окремі файли, які ви надсилаєте, а не одну стиснуту версію всіх файлів."
#: ../../source/features.rst:36
msgid ""
@@ -142,10 +142,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 ""
-"Коли ви будете готові поділитися, натисніть кнопку \"Почати надсилання\". Ви "
-"завжди можете натиснути \"Зупинити надсилання\" або вийти з OnionShare, щоб "
-"негайно вимкнути вебсайт. Ви також можете натиснути піктограму «↑» у "
-"верхньому правому куті, щоб побачити журнал та поступ надсилання файлів."
+"Коли ви будете готові поділитися, натисніть кнопку \"Почати надсилання\"."
+" Ви завжди можете натиснути \"Зупинити надсилання\" або вийти з "
+"OnionShare, щоб негайно вимкнути вебсайт. Ви також можете натиснути "
+"піктограму «↑» у верхньому правому куті, щоб побачити журнал та поступ "
+"надсилання файлів."
#: ../../source/features.rst:40
msgid ""
@@ -154,8 +155,8 @@ msgid ""
"or the person is otherwise exposed to danger, use an encrypted messaging "
"app."
msgstr ""
-"Тепер, коли у вас є OnionShare, копіюйте адресу та надішліть людині, якій ви "
-"хочете надіслати файли. Якщо файли повинні бути захищеними або особа "
+"Тепер, коли у вас є OnionShare, копіюйте адресу та надішліть людині, якій"
+" ви хочете надіслати файли. Якщо файли повинні бути захищеними або особа "
"піддається небезпеці, скористайтеся застосунком зашифрованих повідомлень."
#: ../../source/features.rst:42
@@ -167,59 +168,104 @@ msgid ""
msgstr ""
"Потім ця особа повинна завантажити адресу в Tor Browser. Після входу за "
"випадковим паролем, який міститься у вебадресі, вони зможуть завантажити "
-"файли безпосередньо з вашого комп’ютера, натиснувши посилання «Завантажити "
-"файли» в кутку."
+"файли безпосередньо з вашого комп’ютера, натиснувши посилання "
+"«Завантажити файли» в кутку."
#: ../../source/features.rst:47
-msgid "Receive Files"
-msgstr "Отримання файлів"
+msgid "Receive Files and Messages"
+msgstr "Отримання файлів і повідомлень"
#: ../../source/features.rst:49
msgid ""
-"You can use OnionShare to let people anonymously upload files directly to"
-" your computer, essentially turning it into an anonymous dropbox. Open a "
-"\"Receive tab\", choose where you want to save the files and other "
-"settings, and then click \"Start Receive Mode\"."
+"You can use OnionShare to let people anonymously submit files and "
+"messages directly to your computer, essentially turning it into an "
+"anonymous dropbox. Open a receive tab and choose the settings that you "
+"want."
msgstr ""
-"Ви можете користуватися OnionShare, щоб дозволити людям анонімно "
-"завантажувати файли безпосередньо на ваш комп’ютер, по суті, перетворивши "
-"його на анонімну скриньку. Відкрийте вкладку «Отримання», виберіть, куди "
-"потрібно завантажувати файли, та інші параметри, а потім натисніть «"
-"Запустити режим отримання»."
+"Ви можете користуватися OnionShare, щоб дозволити людям анонімно надсилати "
+"файли та повідомлення безпосередньо на ваш комп’ютер, по суті, перетворюючи "
+"їх на анонімний буфер. Відкрийте вкладку отримання та виберіть потрібні "
+"налаштування."
#: ../../source/features.rst:54
+msgid "You can browse for a folder to save messages and files that get submitted."
+msgstr "Можете вибрати теку для збереження доставлених повідомлень і файлів."
+
+#: ../../source/features.rst:56
msgid ""
-"This starts the OnionShare service. Anyone loading this address in their "
-"Tor Browser will be able to upload files to your computer."
+"You can check \"Disable submitting text\" if want to only allow file "
+"uploads, and you can check \"Disable uploading files\" if you want to "
+"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
-"Запуститься служба OnionShare. Будь-хто, хто завантажить цю адресу в Tor "
-"Browser, зможе завантажувати файли на ваш комп’ютер."
+"Можете позначити «Вимкнути надсилання тексту», якщо хочете дозволити лише "
+"завантаження файлів, а також можете позначити «Вимкнути вивантаження файлів»"
+", якщо ви хочете дозволити надсилання лише текстових повідомлень, як для "
+"анонімної контактної форми."
#: ../../source/features.rst:58
msgid ""
+"You can check \"Use notification webhook\" and then choose a webhook URL "
+"if you want to be notified when someone submits files or messages to your"
+" OnionShare service. If you use this feature, OnionShare will make an "
+"HTTP POST request to this URL whenever someone submits files or messages."
+" For example, if you want to get an encrypted text messaging on the "
+"messaging app `Keybase <https://keybase.io/>`_, you can start a "
+"conversation with `@webhookbot <https://keybase.io/webhookbot>`_, type "
+"``!webhook create onionshare-alerts``, and it will respond with a URL. "
+"Use that as the notification webhook URL. If someone uploads a file to "
+"your receive mode service, @webhookbot will send you a message on Keybase"
+" letting you know as soon as it happens."
+msgstr ""
+"Ви можете позначити «Застосовувати мережні обробники сповіщень», а потім "
+"вибрати URL-адресу обробника, якщо хочете отримувати сповіщення, коли хтось "
+"надсилає файли або повідомлення до вашої служби OnionShare. Якщо ви "
+"увімкнете цю функцію, OnionShare робитиме запит HTTP POST на цю URL-адресу, "
+"коли хтось надсилає файли або повідомлення. Наприклад, якщо ви хочете "
+"отримати зашифровані текстові повідомлення в програмі обміну повідомленнями `"
+"Keybase <https://keybase.io/>`_, ви можете почати розмову з `@webhookbot "
+"<https://keybase.io/webhookbot>`_, введіть ``!webhook create onionshare-"
+"alerts``, і він відповідатиме через URL-адресу. Застосовуйте її URL-адресою "
+"вебобробника сповіщень. Якщо хтось вивантажить файл до служби отримання, @"
+"webhookbot надішле вам повідомлення на Keybase, яке сповістить вас, як "
+"тільки це станеться."
+
+#: ../../source/features.rst:63
+msgid ""
+"When you are ready, click \"Start Receive Mode\". This starts the "
+"OnionShare service. Anyone loading this address in their Tor Browser will"
+" be able to submit files and messages which get uploaded to your "
+"computer."
+msgstr ""
+"Коли все буде готово, натисніть кнопку «Запустити режим отримання». Це "
+"запустить службу OnionShare. Всі хто завантажить цю адресу у своєму браузері "
+"Tor зможе надсилати файли та повідомлення, які завантажуватимуться на ваш "
+"комп'ютер."
+
+#: ../../source/features.rst:67
+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 ""
-"Також можна клацнути піктограму «↓» у верхньому правому куті, щоб побачити "
-"журнал і перебіг надсилання файлів."
+"Також можна клацнути піктограму «↓» у верхньому правому куті, щоб "
+"побачити журнал і перебіг надсилання файлів."
-#: ../../source/features.rst:60
-msgid "Here is what it looks like for someone sending you files."
-msgstr "Ось як це виглядає для когось, хто надсилає вам файли."
+#: ../../source/features.rst:69
+msgid "Here is what it looks like for someone sending you files and messages."
+msgstr "Ось як це виглядає для тих, хто надсилає вам файли та повідомлення."
-#: ../../source/features.rst:64
+#: ../../source/features.rst:73
msgid ""
-"When someone uploads files to your receive service, by default they get "
-"saved to a folder called ``OnionShare`` in the home folder on your "
-"computer, automatically organized into separate subfolders based on the "
-"time that the files get uploaded."
+"When someone submits files or messages to your receive service, by "
+"default they get saved to a folder called ``OnionShare`` in the home "
+"folder on your computer, automatically organized into separate subfolders"
+" based on the time that the files get uploaded."
msgstr ""
-"Коли хтось завантажує файли до вашої служби отримання, типово вони "
-"зберігаються у теці з назвою ``OnionShare`` у вашій домашній теці вашого "
-"комп'ютера та автоматично впорядковуються до окремих підтек за часом "
-"завантаження файлів."
+"Коли хтось надсилає файли або повідомлення до вашої служби отримання, типово "
+"вони зберігаються до теки ``OnionShare`` у домашній теці на вашому "
+"комп'ютері та автоматично впорядковуються в окремі підтеки залежно від часу "
+"передавання файлів."
-#: ../../source/features.rst:66
+#: ../../source/features.rst:75
msgid ""
"Setting up an OnionShare receiving service is useful for journalists and "
"others needing to securely accept documents from anonymous sources. When "
@@ -227,17 +273,17 @@ msgid ""
"quite as secure version of `SecureDrop <https://securedrop.org/>`_, the "
"whistleblower submission system."
msgstr ""
-"Параметри служби отримання OnionShare корисні для журналістів та інших осіб, "
-"яким потрібно безпечно отримувати документи від анонімних джерел. "
-"Використовуючи таким чином, OnionShare як легку, простішу, не настільки "
-"безпечну версію `SecureDrop <https://securedrop.org/>`_, системи подання "
-"таємних повідомлень викривачів."
+"Служби отримання OnionShare корисні для журналістів та інших осіб, яким "
+"потрібно безпечно отримувати документи від анонімних джерел. Користуючись "
+"таким чином OnionShare як легкою, простішою, але не настільки безпечною "
+"версією `SecureDrop <https://securedrop.org/>`_, системи подання таємних "
+"повідомлень викривачів."
-#: ../../source/features.rst:69
+#: ../../source/features.rst:78
msgid "Use at your own risk"
msgstr "Використовуйте на власний ризик"
-#: ../../source/features.rst:71
+#: ../../source/features.rst:80
msgid ""
"Just like with malicious e-mail attachments, it's possible someone could "
"try to attack your computer by uploading a malicious file to your "
@@ -246,10 +292,10 @@ msgid ""
msgstr ""
"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, хтось "
"спробує зламати ваш комп’ютер, завантаживши шкідливий файл до вашої служби "
-"OnionShare. OnionShare не додає жодних механізмів безпеки, щоб захистити "
-"вашу систему від шкідливих файлів."
+"OnionShare. Вона не додає жодних механізмів безпеки для захисту вашої "
+"системи від шкідливих файлів."
-#: ../../source/features.rst:73
+#: ../../source/features.rst:82
msgid ""
"If you receive an Office document or a PDF through OnionShare, you can "
"convert these documents into PDFs that are safe to open using `Dangerzone"
@@ -258,18 +304,24 @@ msgid ""
"<https://tails.boum.org/>`_ or in a `Qubes <https://qubes-os.org/>`_ "
"disposableVM."
msgstr ""
-"Якщо ви отримали документ Office або PDF-файл за допомогою OnionShare, ці "
-"документи можна перетворити на PDF-файли, які можна безпечно відкрити за "
-"допомогою `Dangerzone <https://dangerzone.rocks/>`_. Ви також можете "
+"Якщо ви отримали документ Office або PDF-файл за допомогою OnionShare, ці"
+" документи можна перетворити на PDF-файли, які можна безпечно відкрити за"
+" допомогою `Dangerzone <https://dangerzone.rocks/>`_. Ви також можете "
"захистити себе під час відкриття недовірених документів, відкривши їх у "
-"одноразових віртуальних машинах `Tails <https://tails.boum.org/>`_ або в `"
-"Qubes <https://qubes-os.org/>`_."
+"одноразових віртуальних машинах `Tails <https://tails.boum.org/>`_ або в "
+"`Qubes <https://qubes-os.org/>`_."
-#: ../../source/features.rst:76
+#: ../../source/features.rst:84
+msgid "However, it is always safe to open text messages sent through OnionShare."
+msgstr ""
+"Однак, відкривати текстові повідомлення, надіслані через OnionShare, завжди "
+"безпечно."
+
+#: ../../source/features.rst:87
msgid "Tips for running a receive service"
msgstr "Поради щодо запуску служби отримання"
-#: ../../source/features.rst:78
+#: ../../source/features.rst:89
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"
@@ -277,36 +329,37 @@ msgid ""
"basis."
msgstr ""
"Якщо ви хочете розмістити свою власну анонімну скриньку за допомогою "
-"OnionShare, радимо робити це на окремому виділеному комп’ютері, який завжди "
-"ввімкнено та під'єднано до Інтернету, а не на тому, яким ви користуєтеся "
-"регулярно."
+"OnionShare, радимо робити це на окремому виділеному комп’ютері, який "
+"завжди ввімкнено та під'єднано до Інтернету, а не на тому, яким ви "
+"користуєтеся регулярно."
-#: ../../source/features.rst:80
+#: ../../source/features.rst:91
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_passwords`)."
+"public service (see :ref:`turn_off_passwords`). 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:`custom_titles`)."
-#: ../../source/features.rst:83
+#: ../../source/features.rst:94
msgid "Host a Website"
msgstr "Розміщення вебсайту"
-#: ../../source/features.rst:85
+#: ../../source/features.rst:96
msgid ""
"To host a static HTML website with OnionShare, open a website tab, drag "
"the files and folders that make up the static content there, and click "
"\"Start sharing\" when you are ready."
msgstr ""
-"Для розміщення статичного вебсайту HTML за допомогою OnionShare відкрийте "
-"вкладку вебсайту, перетягніть файли та теки, що є статичним вмістом і "
+"Для розміщення статичного вебсайту HTML за допомогою OnionShare відкрийте"
+" вкладку вебсайту, перетягніть файли та теки, що є статичним вмістом і "
"натисніть кнопку «Почати надсилання», коли будете готові."
-#: ../../source/features.rst:89
+#: ../../source/features.rst:100
msgid ""
"If you add an ``index.html`` file, it will render when someone loads your"
" website. You should also include any other HTML files, CSS files, "
@@ -315,14 +368,14 @@ msgid ""
"websites that execute code or use databases. So you can't for example use"
" WordPress.)"
msgstr ""
-"Якщо ви додасте файл ``index.html``, коли хтось завантажить ваш вебсайт, він "
-"покаже цю сторінку. Слід також включити будь-які інші файли HTML, файли CSS, "
-"файли JavaScript та зображення, що складають вебсайт. (Зуважте, що "
-"OnionShare підтримує розміщення лише *статичних* вебсайтів. Він не може "
-"розміщувати вебсайти, які виконують код або використовують бази даних. Тож "
-"ви не можете, наприклад, використовувати WordPress.)"
+"Якщо ви додасте файл ``index.html``, коли хтось завантажить ваш вебсайт, "
+"він покаже цю сторінку. Слід також включити будь-які інші файли HTML, "
+"файли CSS, файли JavaScript та зображення, що складають вебсайт. "
+"(Зуважте, що OnionShare підтримує розміщення лише *статичних* вебсайтів. "
+"Він не може розміщувати вебсайти, які виконують код або використовують "
+"бази даних. Тож ви не можете, наприклад, використовувати WordPress.)"
-#: ../../source/features.rst:91
+#: ../../source/features.rst:102
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 "
@@ -332,11 +385,11 @@ msgstr ""
"каталогів, а люди, які завантажують його, зможуть оглядати файли та "
"завантажувати їх."
-#: ../../source/features.rst:98
+#: ../../source/features.rst:109
msgid "Content Security Policy"
msgstr "Політика безпеки вмісту"
-#: ../../source/features.rst:100
+#: ../../source/features.rst:111
msgid ""
"By default OnionShare helps secure your website by setting a strict "
"`Content Security Police "
@@ -345,27 +398,27 @@ msgid ""
"page."
msgstr ""
"Типово OnionShare допоможе захистити ваш вебсайт, встановивши надійний "
-"заголовок `Content Security Police <https://en.wikipedia.org/wiki/"
-"Content_Security_Policy>`_. Однак, це запобігає завантаженню сторонніх "
-"матеріалів на вебсторінку."
+"заголовок `Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_. Однак, це "
+"запобігає завантаженню сторонніх матеріалів на вебсторінку."
-#: ../../source/features.rst:102
+#: ../../source/features.rst:113
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 із CDN, то перед запуском служби потрібно "
+"встановити позначку «Не надсилати заголовок політики безпеки вмісту "
+"(дозволяє вебсайту застосовувати сторонні ресурси)»."
-#: ../../source/features.rst:105
+#: ../../source/features.rst:116
msgid "Tips for running a website service"
msgstr "Поради щодо запуску служби розміщення вебсайту"
-#: ../../source/features.rst:107
+#: ../../source/features.rst:118
msgid ""
"If you want to host a long-term website using OnionShare (meaning not "
"something to quickly show someone something), it's recommended you do it "
@@ -374,15 +427,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 (це "
-"не просто для того, щоб швидко комусь щось показати), рекомендовано робити "
-"це на окремому виділеному комп’ютері, який завжди ввімкнено та під'єднано до "
+"Якщо ви хочете розмістити постійний вебсайт за допомогою OnionShare (це не "
+"просто для того, щоб швидко комусь щось показати), радимо робити це на "
+"окремо виділеному комп’ютері, який завжди ввімкнено та під'єднано до "
"Інтернету, а не на той, яким ви користуєтеся регулярно. Вам також слід "
-"зберегти вкладку (подробиці :ref:`save_tabs`), щоб ви могли відновити "
+"зберегти вкладку (подробиці про :ref:`save_tabs`), щоб ви могли відновити "
"вебсайт з тією ж адресою, якщо закриєте OnionShare і знову відкриєте його "
"пізніше."
-#: ../../source/features.rst:110
+#: ../../source/features.rst:121
msgid ""
"If your website is intended for the public, you should run it as a public"
" service (see :ref:`turn_off_passwords`)."
@@ -390,20 +443,20 @@ msgstr ""
"Якщо ваш вебсайт призначено для загального перегляду, вам слід запустити "
"його як загальнодоступну службу (подробиці :ref:`turn_off_passwords`)."
-#: ../../source/features.rst:113
+#: ../../source/features.rst:124
msgid "Chat Anonymously"
msgstr "Спілкуйтеся таємно"
-#: ../../source/features.rst:115
+#: ../../source/features.rst:126
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 для створення цілком анонімної, захищеної "
-"кімнати чату, яка нічого не реєструє. Просто відкрийте вкладку чату та "
-"натисніть «Запустити сервер чату»."
+"Ви можете застосовувати OnionShare для створення цілком анонімної, "
+"захищеної кімнати чату, яка нічого не реєструє. Просто відкрийте вкладку "
+"чату та натисніть «Запустити сервер чату»."
-#: ../../source/features.rst:119
+#: ../../source/features.rst:130
msgid ""
"After you start the server, copy the OnionShare address and send it to "
"the people you want in the anonymous chat room. If it's important to "
@@ -411,23 +464,23 @@ msgid ""
"the OnionShare address."
msgstr ""
"Після запуску сервера копіюйте адресу OnionShare і надішліть її людям, які "
-"приєднаються до цієї анонімної кімнати чату. Якщо важливо обмежити коло, хто "
-"може приєднатися, ви повинні використовувати зашифровані програми обміну "
+"приєднаються до цієї анонімної кімнати чату. Якщо важливо обмежити коло "
+"учасників, ви повинні скористатися застосунком обміну зашифрованими "
"повідомленнями для надсилання адреси OnionShare."
-#: ../../source/features.rst:124
+#: ../../source/features.rst:135
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 ""
-"Люди можуть приєднатися до чату, завантаживши його адресу OnionShare у Tor "
-"Browser. Для чату потрібен JavasScript, тому всі, хто хоче взяти участь, "
-"повинні встановити рівень безпеки на «Стандартний» або «Безпечніший» замість "
-"«Найбезпечніший»."
+"Люди можуть приєднатися до чату, завантаживши його адресу OnionShare у "
+"Tor Browser. Для чату потрібен JavasScript, тому всі, хто хоче взяти "
+"участь, повинні встановити рівень безпеки на «Стандартний» або "
+"«Безпечніший» замість «Найбезпечніший»."
-#: ../../source/features.rst:127
+#: ../../source/features.rst:138
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 "
@@ -436,10 +489,10 @@ msgid ""
msgstr ""
"Коли хтось приєднується до чату, йому присвоюється випадкове ім'я. Вони "
"можуть змінити своє ім’я, ввівши нове ім’я у полі на панелі ліворуч та "
-"натиснувши ↵. Попередні повідомлення взагалі не з'являться, навіть якщо інші "
-"вже спілкувалися в чаті, оскільки історія чату ніде не зберігається."
+"натиснувши ↵. Попередні повідомлення взагалі не з'являться, навіть якщо "
+"інші вже спілкувалися в чаті, оскільки історія чату ніде не зберігається."
-#: ../../source/features.rst:133
+#: ../../source/features.rst:144
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."
@@ -447,32 +500,31 @@ msgstr ""
"У чаті OnionShare всі анонімні. Будь-хто може змінити своє ім'я на яке "
"завгодно і жодного способу підтвердження особи не існує."
-#: ../../source/features.rst:136
+#: ../../source/features.rst:147
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 ""
-"Однак, якщо ви створюєте чат OnionShare і безпечно надсилаєте адресу лише "
-"невеликій групі надійних друзів за допомогою зашифрованих повідомлень, то ви "
-"можете бути обґрунтовано впевнені, що люди, які приєднуються до чату, є "
-"вашими друзями."
+"Однак, якщо ви створюєте чат OnionShare і безпечно надсилаєте адресу лише"
+" невеликій групі надійних друзів за допомогою зашифрованих повідомлень, "
+"то ви можете бути обґрунтовано впевнені, що люди, які приєднуються до "
+"чату, є вашими друзями."
-#: ../../source/features.rst:139
+#: ../../source/features.rst:150
msgid "How is this useful?"
msgstr "Чим це корисно?"
-#: ../../source/features.rst:141
+#: ../../source/features.rst:152
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 ""
-"Якщо вам вже потрібно використовувати програму обміну зашифрованим "
-"повідомленнями, то який сенс спілкування в OnionShare? Він залишає менше "
-"слідів."
+"Якщо вам потрібно застосовувати програму обміну зашифрованим повідомленнями, "
+"то який сенс спілкування в OnionShare? Він залишає менше слідів."
-#: ../../source/features.rst:143
+#: ../../source/features.rst:154
msgid ""
"If you for example send a message to a Signal group, a copy of your "
"message ends up on each device (the devices, and computers if they set up"
@@ -484,15 +536,15 @@ msgid ""
"minimum."
msgstr ""
"Наприклад, якщо ви надсилаєте повідомлення до групи в Signal, копія "
-"повідомлення потрапляє на кожен пристрій (телефони та комп’ютери, якщо на "
-"них встановлено Signal для комп'ютерів) кожного з учасників групи. Навіть "
-"якщо ввімкнено зникання повідомлень, важко впевнитися, що всі копії "
-"повідомлень було фактично видалено з усіх пристроїв та з будь-яких інших "
-"місць (наприклад, баз даних сповіщень), до яких вони могли бути збережені. "
-"Кімнати чатів OnionShare ніде не зберігають жодних повідомлень, тож проблему "
-"мінімізовано."
+"повідомлення потрапляє на кожен пристрій (телефони та комп’ютери, якщо на"
+" них встановлено Signal для комп'ютерів) кожного з учасників групи. "
+"Навіть якщо ввімкнено зникання повідомлень, важко впевнитися, що всі "
+"копії повідомлень було фактично видалено з усіх пристроїв та з будь-яких "
+"інших місць (наприклад, баз даних сповіщень), до яких вони могли бути "
+"збережені. Кімнати чатів OnionShare ніде не зберігають жодних "
+"повідомлень, тож проблему мінімізовано."
-#: ../../source/features.rst:146
+#: ../../source/features.rst:157
msgid ""
"OnionShare chat rooms can also be useful for people wanting to chat "
"anonymously and securely with someone without needing to create any "
@@ -501,17 +553,18 @@ msgid ""
"journalist to join the chat room, all without compromosing their "
"anonymity."
msgstr ""
-"Кімнати чатів OnionShare також можуть бути корисними для людей, які хочуть "
-"анонімно та безпечно спілкуватися з кимось, не створюючи жодних облікових "
-"записів. Наприклад, джерело може надіслати журналісту адресу OnionShare за "
-"допомогою одноразової адреси електронної пошти, а потім зачекати, поки "
-"журналіст приєднається до чату і все це без шкоди для їхньої анонімности."
+"Кімнати чатів OnionShare також можуть бути корисними для людей, які "
+"хочуть анонімно та безпечно спілкуватися з кимось, не створюючи жодних "
+"облікових записів. Наприклад, джерело може надіслати журналісту адресу "
+"OnionShare за допомогою одноразової адреси електронної пошти, а потім "
+"зачекати, поки журналіст приєднається до чату і все це без шкоди для "
+"їхньої анонімности."
-#: ../../source/features.rst:150
+#: ../../source/features.rst:161
msgid "How does the encryption work?"
msgstr "Як працює шифрування?"
-#: ../../source/features.rst:152
+#: ../../source/features.rst:163
msgid ""
"Because OnionShare relies on Tor onion services, connections between the "
"Tor Browser and OnionShare are all end-to-end encrypted (E2EE). When "
@@ -522,11 +575,11 @@ msgid ""
msgstr ""
"Оскільки OnionShare покладається на onion служби Tor, з’єднання між Tor "
"Browser та OnionShare захищено наскрізним шифруванням (E2EE). Коли хтось "
-"публікує повідомлення в кімнаті чату OnionShare, він надсилає його на сервер "
-"через E2EE onion з'єднання, який потім надсилає його всім іншим учасникам "
-"чату за допомогою WebSockets через їхні E2EE onion з'єднання."
+"публікує повідомлення в кімнаті чату OnionShare, він надсилає його на "
+"сервер через E2EE onion з'єднання, який потім надсилає його всім іншим "
+"учасникам чату за допомогою WebSockets через їхні E2EE onion з'єднання."
-#: ../../source/features.rst:154
+#: ../../source/features.rst:165
msgid ""
"OnionShare doesn't implement any chat encryption on its own. It relies on"
" the Tor onion service's encryption instead."
@@ -732,3 +785,52 @@ msgstr ""
#~ "могли бути збережені. Чати OnionShare "
#~ "ніде не зберігають жодних повідомлень, "
#~ "тому це не проблема."
+
+#~ msgid "Receive Files"
+#~ msgstr "Отримання файлів"
+
+#~ msgid ""
+#~ "You can use OnionShare to let "
+#~ "people anonymously upload files directly "
+#~ "to your computer, essentially turning it"
+#~ " into an anonymous dropbox. Open a"
+#~ " \"Receive tab\", choose where you "
+#~ "want to save the files and other"
+#~ " settings, and then click \"Start "
+#~ "Receive Mode\"."
+#~ msgstr ""
+#~ "Ви можете користуватися OnionShare, щоб "
+#~ "дозволити людям анонімно завантажувати файли"
+#~ " безпосередньо на ваш комп’ютер, по "
+#~ "суті, перетворивши його на анонімну "
+#~ "скриньку. Відкрийте вкладку «Отримання», "
+#~ "виберіть, куди потрібно завантажувати файли,"
+#~ " та інші параметри, а потім натисніть"
+#~ " «Запустити режим отримання»."
+
+#~ msgid ""
+#~ "This starts the OnionShare service. "
+#~ "Anyone loading this address in their "
+#~ "Tor Browser will be able to upload"
+#~ " files to your computer."
+#~ msgstr ""
+#~ "Запуститься служба OnionShare. Будь-хто, хто"
+#~ " завантажить цю адресу в Tor Browser,"
+#~ " зможе завантажувати файли на ваш "
+#~ "комп’ютер."
+
+#~ msgid ""
+#~ "When someone uploads files to your "
+#~ "receive service, by default they get "
+#~ "saved to a folder called ``OnionShare``"
+#~ " in the home folder on your "
+#~ "computer, automatically organized into "
+#~ "separate subfolders based on the time"
+#~ " that the files get uploaded."
+#~ msgstr ""
+#~ "Коли хтось завантажує файли до вашої "
+#~ "служби отримання, типово вони зберігаються "
+#~ "у теці з назвою ``OnionShare`` у "
+#~ "вашій домашній теці вашого комп'ютера та"
+#~ " автоматично впорядковуються до окремих "
+#~ "підтек за часом завантаження файлів."
diff --git a/docs/source/locale/uk/LC_MESSAGES/help.po b/docs/source/locale/uk/LC_MESSAGES/help.po
index 914b6716..c55cf34a 100644
--- a/docs/source/locale/uk/LC_MESSAGES/help.po
+++ b/docs/source/locale/uk/LC_MESSAGES/help.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: 2020-11-15 14:42-0800\n"
-"PO-Revision-Date: 2020-11-17 10:28+0000\n"
+"POT-Creation-Date: 2021-08-20 13:37-0700\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\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.4-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/help.rst:2
@@ -33,24 +32,26 @@ 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 ""
-"Цей вебсайт містить настановами щодо користування OnionShare. Спочатку "
-"перегляньте всі розділи, щоб дізнатися, чи відповідає він на ваші питання."
+"Цей вебсайт містить настанови щодо користування OnionShare. Спочатку "
+"перегляньте всі розділи, щоб дізнатися, чи містять вони відповідей на "
+"ваші запитання."
#: ../../source/help.rst:10
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 "
-"<https://github.com/micahflee/onionshare/issues>`_. It's possible someone"
-" else has encountered the same problem and either raised it with the "
-"developers, or maybe even posted a solution."
+"<https://github.com/onionshare/onionshare/issues>`_. It's possible "
+"someone else has encountered the same problem and either raised it with "
+"the developers, or maybe even posted a solution."
msgstr ""
-"Якщо розв'язок відсутній на цьому вебсайті, перегляньте `GitHub issues "
-"<https://github.com/micahflee/onionshare/issues>`_. Можливо, хтось інший "
-"зіткнувся з тією ж проблемою та запитав про неї у розробників, або, можливо, "
-"навіть опублікував розв'язок."
+"Якщо на цьому вебсайті не описано вашої проблеми, перегляньте `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. Можливо, хтось"
+" інший зіткнувся з тією ж проблемою та запитав про неї у розробників, "
+"або, можливо, навіть опублікував як її виправити."
#: ../../source/help.rst:15
msgid "Submit an Issue Yourself"
@@ -60,15 +61,10 @@ msgstr "Повідомте про ваду"
msgid ""
"If you are unable to find a solution, or wish to ask a question or "
"suggest a new feature, please `submit an issue "
-"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"<https://github.com/onionshare/onionshare/issues/new>`_. This requires "
"`creating a GitHub account <https://help.github.com/articles/signing-up-"
"for-a-new-github-account/>`_."
msgstr ""
-"Якщо не можете знайти розв'язку своєї проблеми або хочете запитати чи "
-"запропонувати нову функцію, `поставте питання <https://github.com/micahflee/"
-"onionshare/issues/new>`_. Для цього потрібно `створити обліковий запис "
-"GitHub <https://help.github.com/articles/signing-up-for-a-new-github-account/"
-">`_."
#: ../../source/help.rst:20
msgid "Join our Keybase Team"
@@ -79,8 +75,27 @@ msgid ""
"See :ref:`collaborating` on how to join the Keybase team used to discuss "
"the project."
msgstr ""
-"Читайте про :ref:`співпрацю`, щоб отримати вказівки щодо приєднання до нашої "
-"команди Keybase, де ми обговорюємо проєкт."
+"Читайте про :ref:`співпрацю`, щоб отримати вказівки щодо приєднання до "
+"нашої команди Keybase, де ми обговорюємо проєкт."
#~ msgid "If you need help with OnionShare, please follow the instructions below."
#~ msgstr "Якщо вам потрібна допомога з OnionShare, виконайте ці настанови."
+
+#~ msgid ""
+#~ "If you are unable to find a "
+#~ "solution, or wish to ask a "
+#~ "question or suggest a new feature, "
+#~ "please `submit an issue "
+#~ "<https://github.com/micahflee/onionshare/issues/new>`_. This "
+#~ "requires `creating a GitHub account "
+#~ "<https://help.github.com/articles/signing-up-for-a-new-"
+#~ "github-account/>`_."
+#~ msgstr ""
+#~ "Якщо не можете знайти як виправити "
+#~ "свою проблему або хочете запитати чи "
+#~ "запропонувати нову функцію, `поставте питання"
+#~ " <https://github.com/micahflee/onionshare/issues/new>`_. Для"
+#~ " цього потрібно `створити обліковий запис"
+#~ " GitHub <https://help.github.com/articles/signing-"
+#~ "up-for-a-new-github-account/>`_."
+
diff --git a/docs/source/locale/uk/LC_MESSAGES/install.po b/docs/source/locale/uk/LC_MESSAGES/install.po
index b57fab90..bce42529 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: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-12-16 00:29+0000\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: none\n"
"Language: uk\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.4-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/install.rst:2
@@ -59,8 +59,8 @@ 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 вбудовано в Ubuntu, а Flatpak — у Fedora, але те, чим ви користуєтеся "
-"залежить від вас. Обидва вони працюють у всіх дистрибутивах Linux."
+"Snap вбудовано в Ubuntu, а Flatpak — у Fedora, але ви самі можете обрати чим "
+"користуватися. Вони обоє працюють у всіх дистрибутивах Linux."
#: ../../source/install.rst:19
msgid ""
@@ -113,11 +113,10 @@ msgid ""
"<https://keys.openpgp.org/vks/v1/by-"
"fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
msgstr ""
-"Пакунки підписує Micah Lee, основний розробник, своїм відкритим ключем "
-"PGP з цифровим відбитком ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. "
-"Ключ Micah можна завантажити `з сервера ключів keys.openpgp.org "
-"<https://keys.openpgp.org/vks/v1/by-"
-"fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+"Пакунки підписує основний розробник Micah Lee своїм відкритим ключем PGP з "
+"цифровим відбитком ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Ключ Micah "
+"можна завантажити `з сервера ключів keys.openpgp.org <https://keys.openpgp."
+"org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
#: ../../source/install.rst:38
msgid ""
@@ -177,10 +176,10 @@ msgid ""
" the package, it only means you haven't already defined any level of "
"'trust' of Micah's PGP key.)"
msgstr ""
-"Якщо ви не бачите 'Good signature from', можливо, проблема з цілісністю "
-"файлу (шкідлива чи інша), і, можливо, вам не слід встановлювати пакунок. ("
-"Вказане раніше «ПОПЕРЕДЖЕННЯ» не є проблемою з пакунком: воно означає лише, "
-"що ви не визначили жодного рівня 'довіри' щодо самого ключа PGP від Micah.)"
+"Якщо ви не бачите «Good signature from», можливо, проблема з цілісністю "
+"файлу (зловмисна чи інша), і, можливо, вам не слід встановлювати пакунок. ("
+"Вказане раніше «ПОПЕРЕДЖЕННЯ» не є проблемою з пакунком: воно лише означає, "
+"що ви не визначено рівня «довіри» до самого ключа PGP від Micah.)"
#: ../../source/install.rst:71
msgid ""
@@ -189,10 +188,9 @@ msgid ""
" the `Tor Project <https://support.torproject.org/tbb/how-to-verify-"
"signature/>`_ may be useful."
msgstr ""
-"Якщо ви хочете дізнатися докладніше про перевірку підписів PGP, настанови "
-"для `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ та "
-"`Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_ "
-"можуть допомогти."
+"Докладніше про перевірку підписів PGP читайте у настановах для `Qubes OS "
+"<https://www.qubes-os.org/security/verifying-signatures/>`_ та `Tor Project "
+"<https://support.torproject.org/tbb/how-to-verify-signature/>`_."
#~ msgid "For added security, see :ref:`verifying_sigs`."
#~ msgstr "Для додаткової безпеки перегляньте :ref:`verifying_sigs`."
diff --git a/docs/source/locale/uk/LC_MESSAGES/security.po b/docs/source/locale/uk/LC_MESSAGES/security.po
index 0df854e6..80cfbe8c 100644
--- a/docs/source/locale/uk/LC_MESSAGES/security.po
+++ b/docs/source/locale/uk/LC_MESSAGES/security.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-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-12-16 00:29+0000\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: none\n"
"Language: uk\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.4-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
@@ -103,12 +103,12 @@ msgstr ""
"**Якщо зловмисник дізнається про службу onion, він все одно не може отримати "
"доступ ні до чого.** Попередні напади на мережу Tor для виявлення служб "
"onion дозволили зловмиснику виявити приватні адреси .onion. Якщо напад "
-"виявить приватну адресу OnionShare, пароль не дозволить їм отримати до неї "
+"виявить приватну адресу OnionShare, пароль не дозволить йому отримати до неї "
"доступ (якщо користувач OnionShare не вирішив вимкнути його та зробити "
"службу загальнодоступною). Пароль створюється шляхом вибору двох випадкових "
-"слів зпереліку з 6800 слів, що робить 6800² або близько 46 мільйонів "
+"слів з переліку у 6800 слів, що робить 6800² або близько 46 мільйонів "
"можливих паролів. Можна здійснити лише 20 невдалих спроб, перш ніж "
-"OnionShare зупинить сервер, запобігаючи грубому намаганню зламу пароля."
+"OnionShare зупинить сервер, запобігаючи намаганню грубого зламу пароля."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
@@ -126,17 +126,16 @@ msgid ""
" disappearing messages enabled), encrypted email, or in person. This "
"isn't necessary when using OnionShare for something that isn't secret."
msgstr ""
-"**Зв’язок з адресою OnionShare може бути ненадійним.** Передача адреси "
-"OnionShare людям є відповідальністю користувача OnionShare. Якщо "
-"надіслано ненадійно (наприклад, через повідомлення електронною поштою, "
-"яку контролює зловмисник), підслуховувач може дізнатися, що "
-"використовується OnionShare. Якщо підслуховувачі завантажать адресу в Tor"
-" Browser, поки служба ще працює, вони можуть отримати до неї доступ. Щоб "
-"уникнути цього, адресу потрібно передавати надійно, за допомогою "
-"захищеного текстового повідомлення (можливо, з увімкненими "
-"повідомленнями, що зникають), захищеного електронного листа або особисто."
-" Це не потрібно при використанні OnionShare для чогось, що не є "
-"таємницею."
+"**Зв’язок з адресою OnionShare може бути ненадійним.** Відповідальність за "
+"передавання адреси OnionShare людям покладено на користувача OnionShare. "
+"Якщо її надіслано ненадійно (наприклад, через повідомлення електронною "
+"поштою, яку контролює зловмисник), підслуховувач може дізнатися, що ви "
+"користується OnionShare. Якщо підслуховувачі завантажать адресу в Tor "
+"Browser, поки служба ще працює, вони можуть отримати до неї доступ. Щоб "
+"уникнути цього, адресу потрібно передавати надійно, за допомогою захищеного "
+"текстового повідомлення (можливо, з увімкненими повідомленнями, що зникають)"
+", захищеного електронного листа або особисто. Це не потрібно якщо "
+"користуватися OnionShare для даних, які не є таємницею."
#: ../../source/security.rst:24
msgid ""
diff --git a/docs/source/locale/uk/LC_MESSAGES/tor.po b/docs/source/locale/uk/LC_MESSAGES/tor.po
index 9317e157..ddf4ab4f 100644
--- a/docs/source/locale/uk/LC_MESSAGES/tor.po
+++ b/docs/source/locale/uk/LC_MESSAGES/tor.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-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-12-16 00:29+0000\n"
+"PO-Revision-Date: 2021-07-08 02:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
"Language-Team: none\n"
"Language: uk\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.4-dev\n"
+"X-Generator: Weblate 4.8-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/tor.rst:2
@@ -160,7 +160,7 @@ msgstr ""
"Відкрийте OnionShare і натисніть на ньому піктограму «⚙». У розділі «Як "
"OnionShare повинен з'єднуватися з Tor?\" виберіть «Під'єднатися через порт "
"керування» та встановіть «Порт керування» на ``127.0.0.1`` та «Порт» на "
-"``9051``. У розділі «Параметри автентифікації Tor» виберіть «Пароль» і "
+"``9051``. У розділі «Налаштування автентифікації Tor» виберіть «Пароль» і "
"встановіть пароль для пароля контрольного порту, який ви вибрали раніше. "
"Натисніть кнопку «Перевірити з'єднання з Tor». Якщо все добре, ви побачите «"
"З'єднано з контролером Tor»."
@@ -194,11 +194,10 @@ msgid ""
"cookie authentication\". Click the \"Test Connection to Tor\" button."
msgstr ""
"Відкрийте OnionShare. Клацніть піктограму «⚙». У розділі «Як OnionShare "
-"повинен з'єднуватися з Tor?» виберіть «Під'єднуватися через файл сокета» "
-"та встановіть для файлу сокета шлях "
-"``/usr/local/var/run/tor/control.socket``. У розділі «Параметри "
-"автентифікації Tor» виберіть «Без автентифікації або автентифікація через"
-" cookie». Натисніть кнопку «Перевірити з'єднання з Tor»."
+"повинен з'єднуватися з Tor?» виберіть «Під'єднуватися через файл сокета» та "
+"встановіть для файлу сокета шлях ``/usr/local/var/run/tor/control.socket``. "
+"У розділі «Налаштування автентифікації Tor» виберіть «Без автентифікації або "
+"автентифікація через cookie». Натисніть кнопку «Перевірити з'єднання з Tor»."
#: ../../source/tor.rst:84 ../../source/tor.rst:104
msgid "If all goes well, you should see \"Connected to the Tor controller\"."
@@ -248,10 +247,10 @@ msgid ""
msgstr ""
"Перезапустіть комп'ютер. Після запуску, відкрийте OnionShare. Клацніть "
"піктограму «⚙». У розділі «Як OnionShare повинен з'єднуватися з Tor?» "
-"виберіть «Під'єднуватися через файл сокета» та встановіть для файлу "
-"сокета шлях ``/var/run/tor/control``. У розділі «Параметри автентифікації"
-" Tor» виберіть «Без автентифікації або автентифікація через cookie». "
-"Натисніть кнопку «Перевірити з'єднання з Tor»."
+"виберіть «Під'єднуватися через файл сокета» та встановіть для файлу сокета "
+"шлях ``/var/run/tor/control``. У розділі «Налаштування автентифікації Tor» "
+"виберіть «Без автентифікації або автентифікація через cookie». Натисніть "
+"кнопку «Перевірити з'єднання з Tor»."
#: ../../source/tor.rst:107
msgid "Using Tor bridges"
diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml
index 00682777..e1c79e7e 100644
--- a/snap/snapcraft.yaml
+++ b/snap/snapcraft.yaml
@@ -1,6 +1,6 @@
name: onionshare
base: core18
-version: '2.3.1'
+version: '2.3.3'
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
@@ -8,7 +8,7 @@ description: |
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 # must be 'stable' to release into candidate/stable channels
+grade: stable # stable or devel
confinement: strict
apps:
@@ -23,6 +23,8 @@ apps:
- removable-media
extensions:
- gnome-3-34
+ environment:
+ LANG: C.UTF-8
cli:
common-id: org.onionshare.OnionShareCli
@@ -32,6 +34,8 @@ apps:
- network
- network-bind
- removable-media
+ environment:
+ LANG: C.UTF-8
parts:
onionshare:
@@ -40,7 +44,7 @@ parts:
python-version: python3
python-packages:
- psutil
- - pyside2==5.15.1
+ - pyside2 == 5.15.2
- qrcode
stage-packages:
- libasound2
@@ -114,21 +118,24 @@ parts:
- click
- flask
- flask-httpauth
- - flask-socketio
+ - flask-socketio == 5.0.1
- pycryptodome
+ - psutil
- pysocks
- requests
- stem
- urllib3
- eventlet
+ - setuptools
+ - colorama
stage:
- -usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
- -usr/share/doc/libssl1.1/changelog.Debian.gz
after: [tor, obfs4]
tor:
- source: https://dist.torproject.org/tor-0.4.5.6.tar.gz
- source-checksum: sha256/22cba3794fedd5fa87afc1e512c6ce2c21bc20b4e1c6f8079d832dc1e545e733
+ source: https://dist.torproject.org/tor-0.4.6.7.tar.gz
+ source-checksum: sha256/ff665ce121b2952110bd98b9c8741b5593bf6c01ac09033ad848ed92c2510f9a
source-type: tar
plugin: autotools
build-packages: