summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.circleci/config.yml68
-rw-r--r--.circleci/qt-installer-script.js75
-rw-r--r--.gitignore8
-rw-r--r--BUILD.md451
-rw-r--r--CHANGELOG.md10
-rw-r--r--LICENSE2
-rw-r--r--MANIFEST.in13
-rw-r--r--README.md37
-rw-r--r--apparmor/abstractions/onionshare29
-rw-r--r--apparmor/local/usr.bin.onionshare2
-rw-r--r--apparmor/local/usr.bin.onionshare-gui2
-rw-r--r--apparmor/usr.bin.onionshare10
-rw-r--r--apparmor/usr.bin.onionshare-gui28
-rw-r--r--cli/.circleci/config.yml38
-rw-r--r--cli/README.md81
-rw-r--r--cli/onionshare_cli/__init__.py (renamed from onionshare/__init__.py)60
-rw-r--r--cli/onionshare_cli/common.py (renamed from onionshare/common.py)78
-rw-r--r--cli/onionshare_cli/mode_settings.py (renamed from onionshare/mode_settings.py)10
-rw-r--r--cli/onionshare_cli/onion.py (renamed from onionshare/onion.py)121
-rw-r--r--cli/onionshare_cli/onionshare.py (renamed from onionshare/onionshare.py)6
-rw-r--r--cli/onionshare_cli/resources/static/css/style.css (renamed from share/static/css/style.css)164
-rw-r--r--cli/onionshare_cli/resources/static/img/ajax.gif (renamed from share/static/img/ajax.gif)bin847 -> 847 bytes
-rw-r--r--cli/onionshare_cli/resources/static/img/favicon.ico (renamed from share/static/img/favicon.ico)bin4286 -> 4286 bytes
-rw-r--r--cli/onionshare_cli/resources/static/img/logo.png (renamed from share/images/logo.png)bin3824 -> 3824 bytes
-rw-r--r--cli/onionshare_cli/resources/static/img/logo_large.png (renamed from share/static/img/logo_large.png)bin9663 -> 9663 bytes
-rw-r--r--cli/onionshare_cli/resources/static/img/web_file.png (renamed from share/static/img/web_file.png)bin251 -> 251 bytes
-rw-r--r--cli/onionshare_cli/resources/static/img/web_folder.png (renamed from share/static/img/web_folder.png)bin338 -> 338 bytes
-rw-r--r--cli/onionshare_cli/resources/static/js/chat.js165
-rw-r--r--cli/onionshare_cli/resources/static/js/jquery-3.5.1.min.js (renamed from share/static/js/jquery-3.5.1.min.js)0
-rw-r--r--cli/onionshare_cli/resources/static/js/receive.js (renamed from share/static/js/receive.js)0
-rw-r--r--cli/onionshare_cli/resources/static/js/send.js (renamed from share/static/js/send.js)0
-rw-r--r--cli/onionshare_cli/resources/static/js/socket.io.min.js3
-rw-r--r--cli/onionshare_cli/resources/templates/401.html (renamed from share/templates/401.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/403.html (renamed from share/templates/403.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/404.html (renamed from share/templates/404.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/405.html (renamed from share/templates/405.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/chat.html46
-rw-r--r--cli/onionshare_cli/resources/templates/denied.html (renamed from share/templates/denied.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/listing.html (renamed from share/templates/listing.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/receive.html (renamed from share/templates/receive.html)2
-rw-r--r--cli/onionshare_cli/resources/templates/send.html (renamed from share/templates/send.html)57
-rw-r--r--cli/onionshare_cli/resources/templates/thankyou.html (renamed from share/templates/thankyou.html)2
-rw-r--r--cli/onionshare_cli/resources/torrc_template (renamed from share/torrc_template)0
-rw-r--r--cli/onionshare_cli/resources/torrc_template-meek_lite_amazon (renamed from share/torrc_template-meek_lite_amazon)0
-rw-r--r--cli/onionshare_cli/resources/torrc_template-meek_lite_azure (renamed from share/torrc_template-meek_lite_azure)0
-rw-r--r--cli/onionshare_cli/resources/torrc_template-obfs4 (renamed from share/torrc_template-obfs4)0
-rw-r--r--cli/onionshare_cli/resources/version.txt1
-rw-r--r--cli/onionshare_cli/resources/wordlist.txt (renamed from share/wordlist.txt)0
-rw-r--r--cli/onionshare_cli/settings.py (renamed from onionshare/settings.py)6
-rw-r--r--cli/onionshare_cli/web/__init__.py (renamed from onionshare/web/__init__.py)2
-rw-r--r--cli/onionshare_cli/web/chat_mode.py159
-rw-r--r--cli/onionshare_cli/web/receive_mode.py (renamed from onionshare/web/receive_mode.py)24
-rw-r--r--cli/onionshare_cli/web/send_base_mode.py (renamed from onionshare/web/send_base_mode.py)22
-rw-r--r--cli/onionshare_cli/web/share_mode.py (renamed from onionshare/web/share_mode.py)21
-rw-r--r--cli/onionshare_cli/web/web.py (renamed from onionshare/web/web.py)36
-rw-r--r--cli/onionshare_cli/web/website_mode.py (renamed from onionshare/web/website_mode.py)21
-rw-r--r--cli/poetry.lock (renamed from poetry.lock)328
-rw-r--r--cli/pyproject.toml40
-rw-r--r--cli/tests/__init__.py (renamed from tests/__init__.py)0
-rw-r--r--cli/tests/conftest.py (renamed from tests/conftest.py)16
-rw-r--r--cli/tests/pytest.ini (renamed from tests/pytest.ini)0
-rw-r--r--cli/tests/test_cli.py (renamed from tests/test_cli.py)29
-rw-r--r--cli/tests/test_cli_common.py (renamed from tests/test_cli_common.py)73
-rw-r--r--cli/tests/test_cli_settings.py (renamed from tests/test_cli_settings.py)33
-rw-r--r--cli/tests/test_cli_web.py (renamed from tests/test_cli_web.py)48
-rw-r--r--desktop/.gitignore1
-rw-r--r--desktop/README.md184
-rwxr-xr-xdesktop/install/build_deb.sh (renamed from install/build_deb.sh)0
-rw-r--r--desktop/install/build_exe.bat (renamed from install/build_exe.bat)0
-rwxr-xr-xdesktop/install/build_osx.sh (renamed from install/build_osx.sh)22
-rwxr-xr-xdesktop/install/build_rpm.sh (renamed from install/build_rpm.sh)2
-rwxr-xr-xdesktop/install/build_source.sh (renamed from install/build_source.sh)0
-rwxr-xr-xdesktop/install/check_lacked_trans.py (renamed from install/check_lacked_trans.py)65
-rw-r--r--desktop/install/get-tor-osx.py (renamed from install/get-tor-osx.py)12
-rw-r--r--desktop/install/get-tor-windows.py (renamed from install/get-tor-windows.py)28
-rw-r--r--desktop/install/licenses/license-jquery.txt (renamed from install/licenses/license-jquery.txt)0
-rw-r--r--desktop/install/licenses/license-obfs4.txt (renamed from install/licenses/license-obfs4.txt)0
-rw-r--r--desktop/install/licenses/license-onionshare.txt (renamed from install/licenses/license-onionshare.txt)0
-rw-r--r--desktop/install/licenses/license-tor.txt (renamed from install/licenses/license-tor.txt)0
-rw-r--r--desktop/install/licenses/readme.txt (renamed from install/licenses/readme.txt)0
-rw-r--r--desktop/install/macos_sandbox/child.plist (renamed from install/macos_sandbox/child.plist)0
-rw-r--r--desktop/install/macos_sandbox/parent.plist (renamed from install/macos_sandbox/parent.plist)4
-rw-r--r--desktop/install/onionshare.icns (renamed from install/onionshare.icns)bin34168 -> 34168 bytes
-rw-r--r--desktop/install/onionshare.ico (renamed from install/onionshare.ico)bin15086 -> 15086 bytes
-rw-r--r--desktop/install/onionshare.nsi (renamed from install/onionshare.nsi)4
-rw-r--r--desktop/install/onionshare80.xpm (renamed from install/onionshare80.xpm)0
-rw-r--r--desktop/install/org.onionshare.OnionShare.appdata.xml29
-rw-r--r--desktop/install/org.onionshare.OnionShare.desktop (renamed from install/org.onionshare.OnionShare.desktop)0
-rw-r--r--desktop/install/org.onionshare.OnionShare.pngbin0 -> 24613 bytes
-rw-r--r--desktop/install/org.onionshare.OnionShare.svg (renamed from install/org.onionshare.OnionShare.svg)0
-rwxr-xr-xdesktop/install/ppa_release.sh (renamed from install/ppa_release.sh)0
-rw-r--r--desktop/install/pyinstaller.spec116
-rw-r--r--desktop/install/scripts/onionshare-nautilus.py (renamed from install/scripts/onionshare-nautilus.py)0
-rw-r--r--desktop/pyproject.toml52
-rw-r--r--desktop/screenshots/appdata-onionshare-receive-client.png (renamed from screenshots/appdata-onionshare-receive-client.png)bin361337 -> 361337 bytes
-rw-r--r--desktop/screenshots/appdata-onionshare-receive-server.png (renamed from screenshots/appdata-onionshare-receive-server.png)bin340924 -> 340924 bytes
-rw-r--r--desktop/screenshots/appdata-onionshare-share-client.png (renamed from screenshots/appdata-onionshare-share-client.png)bin372511 -> 372511 bytes
-rw-r--r--desktop/screenshots/appdata-onionshare-share-server.png (renamed from screenshots/appdata-onionshare-share-server.png)bin526914 -> 526914 bytes
-rw-r--r--desktop/screenshots/onionshare-receive-client.png (renamed from screenshots/onionshare-receive-client.png)bin589481 -> 589481 bytes
-rw-r--r--desktop/screenshots/onionshare-receive-server.png (renamed from screenshots/onionshare-receive-server.png)bin569260 -> 569260 bytes
-rw-r--r--desktop/screenshots/onionshare-share-client.png (renamed from screenshots/onionshare-share-client.png)bin43404 -> 43404 bytes
-rw-r--r--desktop/screenshots/onionshare-share-server.png (renamed from screenshots/onionshare-share-server.png)bin57758 -> 57758 bytes
-rw-r--r--desktop/screenshots/onionshare-website-server.png (renamed from screenshots/onionshare-website-server.png)bin148709 -> 148709 bytes
-rw-r--r--desktop/scripts/get-tor-osx.py126
-rw-r--r--desktop/scripts/get-tor-windows.py100
-rw-r--r--desktop/src/onionshare/__init__.py (renamed from onionshare_gui/__init__.py)58
-rw-r--r--[-rwxr-xr-x]desktop/src/onionshare/__main__.py (renamed from dev_scripts/onionshare)12
-rw-r--r--desktop/src/onionshare/gui_common.py (renamed from onionshare_gui/gui_common.py)114
-rw-r--r--desktop/src/onionshare/main_window.py (renamed from onionshare_gui/main_window.py)26
-rw-r--r--desktop/src/onionshare/resources/__init__.py0
-rw-r--r--desktop/src/onionshare/resources/images/file_delete.png (renamed from share/images/file_delete.png)bin182 -> 182 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_completed.png (renamed from share/images/history_completed.png)bin646 -> 646 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_completed_none.png (renamed from share/images/history_completed_none.png)bin437 -> 437 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_in_progress.png (renamed from share/images/history_in_progress.png)bin638 -> 638 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_in_progress_none.png (renamed from share/images/history_in_progress_none.png)bin412 -> 412 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_requests.png (renamed from share/images/history_requests.png)bin738 -> 738 bytes
-rw-r--r--desktop/src/onionshare/resources/images/history_requests_none.png (renamed from share/images/history_requests_none.png)bin754 -> 754 bytes
-rw-r--r--desktop/src/onionshare/resources/images/info.png (renamed from share/images/info.png)bin435 -> 435 bytes
-rw-r--r--desktop/src/onionshare/resources/images/logo.png (renamed from share/static/img/logo.png)bin3824 -> 3824 bytes
-rw-r--r--desktop/src/onionshare/resources/images/logo_grayscale.png (renamed from share/images/logo_grayscale.png)bin2258 -> 2258 bytes
-rw-r--r--desktop/src/onionshare/resources/images/logo_text.pngbin0 -> 3798 bytes
-rw-r--r--desktop/src/onionshare/resources/images/logo_transparent.png (renamed from share/images/logo_transparent.png)bin3740 -> 3740 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_chat.pngbin0 -> 27306 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_chat.svg81
-rw-r--r--desktop/src/onionshare/resources/images/mode_new_tab_chat.pngbin0 -> 5213 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_new_tab_receive.pngbin0 -> 6470 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_new_tab_share.pngbin0 -> 4485 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_new_tab_website.pngbin0 -> 3860 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_receive.pngbin0 -> 37288 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_receive.svg74
-rw-r--r--desktop/src/onionshare/resources/images/mode_share.pngbin0 -> 9472 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_share.svg63
-rw-r--r--desktop/src/onionshare/resources/images/mode_website.pngbin0 -> 8126 bytes
-rw-r--r--desktop/src/onionshare/resources/images/mode_website.svg35
-rw-r--r--desktop/src/onionshare/resources/images/open_folder.png (renamed from share/images/open_folder.png)bin221 -> 221 bytes
-rw-r--r--desktop/src/onionshare/resources/images/persistent_enabled.png (renamed from share/images/persistent_enabled.png)bin3398 -> 3398 bytes
-rw-r--r--desktop/src/onionshare/resources/images/receive_icon_toggle.png (renamed from share/images/receive_icon_toggle.png)bin380 -> 380 bytes
-rw-r--r--desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png (renamed from share/images/receive_icon_toggle_selected.png)bin468 -> 468 bytes
-rw-r--r--desktop/src/onionshare/resources/images/receive_icon_transparent.png (renamed from share/images/receive_icon_transparent.png)bin2138 -> 2138 bytes
-rw-r--r--desktop/src/onionshare/resources/images/server_started.png (renamed from share/images/server_started.png)bin347 -> 347 bytes
-rw-r--r--desktop/src/onionshare/resources/images/server_stopped.png (renamed from share/images/server_stopped.png)bin342 -> 342 bytes
-rw-r--r--desktop/src/onionshare/resources/images/server_working.png (renamed from share/images/server_working.png)bin349 -> 349 bytes
-rw-r--r--desktop/src/onionshare/resources/images/settings.png (renamed from share/images/settings.png)bin1157 -> 1157 bytes
-rw-r--r--desktop/src/onionshare/resources/images/share_icon_toggle.png (renamed from share/images/share_icon_toggle.png)bin389 -> 389 bytes
-rw-r--r--desktop/src/onionshare/resources/images/share_icon_toggle_selected.png (renamed from share/images/share_icon_toggle_selected.png)bin473 -> 473 bytes
-rw-r--r--desktop/src/onionshare/resources/images/share_icon_transparent.png (renamed from share/images/share_icon_transparent.png)bin2096 -> 2096 bytes
-rw-r--r--desktop/src/onionshare/resources/locale/af.json183
-rw-r--r--desktop/src/onionshare/resources/locale/am.json (renamed from share/locale/am.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/ar.json (renamed from share/locale/ar.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/bg.json (renamed from share/locale/bg.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/bn.json267
-rw-r--r--desktop/src/onionshare/resources/locale/ca.json (renamed from share/locale/ca.json)40
-rw-r--r--desktop/src/onionshare/resources/locale/cs.json (renamed from share/locale/cs.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/da.json (renamed from share/locale/da.json)69
-rw-r--r--desktop/src/onionshare/resources/locale/de.json (renamed from share/locale/de.json)167
-rw-r--r--desktop/src/onionshare/resources/locale/el.json (renamed from share/locale/el.json)4
-rw-r--r--desktop/src/onionshare/resources/locale/en.json (renamed from share/locale/en.json)82
-rw-r--r--desktop/src/onionshare/resources/locale/eo.json (renamed from share/locale/eo.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/es.json (renamed from share/locale/es.json)223
-rw-r--r--desktop/src/onionshare/resources/locale/fa.json (renamed from share/locale/fa.json)5
-rw-r--r--desktop/src/onionshare/resources/locale/fi.json (renamed from share/locale/fi.json)134
-rw-r--r--desktop/src/onionshare/resources/locale/fr.json (renamed from share/locale/fr.json)101
-rw-r--r--desktop/src/onionshare/resources/locale/ga.json (renamed from share/locale/ga.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/gu.json (renamed from share/locale/gu.json)23
-rw-r--r--desktop/src/onionshare/resources/locale/he.json (renamed from share/locale/he.json)18
-rw-r--r--desktop/src/onionshare/resources/locale/hi.json (renamed from share/locale/hi.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/hr.json232
-rw-r--r--desktop/src/onionshare/resources/locale/hu.json196
-rw-r--r--desktop/src/onionshare/resources/locale/id.json (renamed from share/locale/id.json)9
-rw-r--r--desktop/src/onionshare/resources/locale/is.json (renamed from share/locale/is.json)65
-rw-r--r--desktop/src/onionshare/resources/locale/it.json (renamed from share/locale/it.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/ja.json (renamed from share/locale/ja.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/ka.json (renamed from share/locale/ka.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/km.json (renamed from share/locale/km.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/ko.json (renamed from share/locale/ko.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/lg.json (renamed from share/locale/lg.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/lt.json208
-rw-r--r--desktop/src/onionshare/resources/locale/mk.json (renamed from share/locale/mk.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/ms.json (renamed from share/locale/ms.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/nb_NO.json (renamed from share/locale/nb.json)62
-rw-r--r--desktop/src/onionshare/resources/locale/nl.json (renamed from share/locale/nl.json)35
-rw-r--r--desktop/src/onionshare/resources/locale/pa.json (renamed from share/locale/pa.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/pl.json (renamed from share/locale/pl.json)24
-rw-r--r--desktop/src/onionshare/resources/locale/pt_BR.json (renamed from share/locale/pt_BR.json)42
-rw-r--r--desktop/src/onionshare/resources/locale/pt_PT.json (renamed from share/locale/pt_PT.json)206
-rw-r--r--desktop/src/onionshare/resources/locale/ro.json (renamed from share/locale/ro.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/ru.json (renamed from share/locale/ru.json)24
-rw-r--r--desktop/src/onionshare/resources/locale/sl.json (renamed from share/locale/sl.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/sn.json (renamed from share/locale/sn.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/sr_Latn.json (renamed from share/locale/sr_Latn.json)2
-rw-r--r--desktop/src/onionshare/resources/locale/sv.json (renamed from share/locale/sv.json)105
-rw-r--r--desktop/src/onionshare/resources/locale/sw.json (renamed from share/locale/sw.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/te.json (renamed from share/locale/te.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/tr.json (renamed from share/locale/tr.json)78
-rw-r--r--desktop/src/onionshare/resources/locale/uk.json232
-rw-r--r--desktop/src/onionshare/resources/locale/wo.json (renamed from share/locale/wo.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/yo.json (renamed from share/locale/yo.json)0
-rw-r--r--desktop/src/onionshare/resources/locale/zh_Hans.json (renamed from share/locale/zh_Hans.json)50
-rw-r--r--desktop/src/onionshare/resources/locale/zh_Hant.json (renamed from share/locale/zh_Hant.json)20
-rw-r--r--desktop/src/onionshare/resources/onionshare-128.pngbin0 -> 12788 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare-16.pngbin0 -> 2437 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare-256.pngbin0 -> 19034 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare-32.pngbin0 -> 4051 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare-512.pngbin0 -> 24613 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare-64.pngbin0 -> 8486 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare.icnsbin0 -> 34168 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare.icobin0 -> 15086 bytes
-rw-r--r--desktop/src/onionshare/resources/onionshare.pngbin0 -> 24613 bytes
-rw-r--r--desktop/src/onionshare/settings_dialog.py (renamed from onionshare_gui/settings_dialog.py)34
-rw-r--r--desktop/src/onionshare/strings.py (renamed from onionshare/strings.py)5
-rw-r--r--desktop/src/onionshare/tab/__init__.py (renamed from onionshare_gui/tab/__init__.py)3
-rw-r--r--desktop/src/onionshare/tab/mode/__init__.py (renamed from onionshare_gui/tab/mode/__init__.py)32
-rw-r--r--desktop/src/onionshare/tab/mode/chat_mode/__init__.py154
-rw-r--r--desktop/src/onionshare/tab/mode/file_selection.py (renamed from onionshare_gui/tab/mode/file_selection.py)101
-rw-r--r--desktop/src/onionshare/tab/mode/history.py (renamed from onionshare_gui/tab/mode/history.py)40
-rw-r--r--desktop/src/onionshare/tab/mode/mode_settings_widget.py (renamed from onionshare_gui/tab/mode/mode_settings_widget.py)9
-rw-r--r--desktop/src/onionshare/tab/mode/receive_mode/__init__.py (renamed from onionshare_gui/tab/mode/receive_mode/__init__.py)55
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/__init__.py (renamed from onionshare_gui/tab/mode/share_mode/__init__.py)36
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/threads.py (renamed from onionshare_gui/tab/mode/share_mode/threads.py)9
-rw-r--r--desktop/src/onionshare/tab/mode/website_mode/__init__.py (renamed from onionshare_gui/tab/mode/website_mode/__init__.py)38
-rw-r--r--desktop/src/onionshare/tab/server_status.py (renamed from onionshare_gui/tab/server_status.py)50
-rw-r--r--desktop/src/onionshare/tab/tab.py (renamed from onionshare_gui/tab/tab.py)224
-rw-r--r--desktop/src/onionshare/tab_widget.py (renamed from onionshare_gui/tab_widget.py)33
-rw-r--r--desktop/src/onionshare/threads.py (renamed from onionshare_gui/threads.py)28
-rw-r--r--desktop/src/onionshare/tor_connection_dialog.py (renamed from onionshare_gui/tor_connection_dialog.py)24
-rw-r--r--desktop/src/onionshare/update_checker.py (renamed from onionshare_gui/update_checker.py)27
-rw-r--r--desktop/src/onionshare/widgets.py (renamed from onionshare_gui/widgets.py)30
-rw-r--r--desktop/src/setup.py80
-rw-r--r--desktop/tests/__init__.py0
-rw-r--r--desktop/tests/conftest.py222
-rw-r--r--desktop/tests/gui_base_test.py (renamed from tests/gui_base_test.py)76
-rw-r--r--desktop/tests/run.bat4
-rwxr-xr-xdesktop/tests/run.sh5
-rw-r--r--desktop/tests/test_gui_receive.py (renamed from tests/test_gui_receive.py)17
-rw-r--r--desktop/tests/test_gui_share.py (renamed from tests/test_gui_share.py)58
-rw-r--r--desktop/tests/test_gui_tabs.py (renamed from tests/test_gui_tabs.py)33
-rw-r--r--desktop/tests/test_gui_website.py (renamed from tests/test_gui_website.py)8
-rwxr-xr-xdev_scripts/onionshare-gui28
-rw-r--r--docs/Makefile20
-rw-r--r--docs/README.md38
-rwxr-xr-xdocs/build.sh34
-rw-r--r--docs/gettext/.doctrees/advanced.doctreebin0 -> 29050 bytes
-rw-r--r--docs/gettext/.doctrees/develop.doctreebin0 -> 41566 bytes
-rw-r--r--docs/gettext/.doctrees/environment.picklebin0 -> 38898 bytes
-rw-r--r--docs/gettext/.doctrees/features.doctreebin0 -> 43702 bytes
-rw-r--r--docs/gettext/.doctrees/help.doctreebin0 -> 8171 bytes
-rw-r--r--docs/gettext/.doctrees/index.doctreebin0 -> 3439 bytes
-rw-r--r--docs/gettext/.doctrees/install.doctreebin0 -> 20103 bytes
-rw-r--r--docs/gettext/.doctrees/security.doctreebin0 -> 15257 bytes
-rw-r--r--docs/gettext/.doctrees/tor.doctreebin0 -> 28661 bytes
-rw-r--r--docs/gettext/advanced.pot153
-rw-r--r--docs/gettext/develop.pot177
-rw-r--r--docs/gettext/features.pot226
-rw-r--r--docs/gettext/help.pot57
-rw-r--r--docs/gettext/index.pot25
-rw-r--r--docs/gettext/install.pot101
-rw-r--r--docs/gettext/security.pot61
-rw-r--r--docs/gettext/sphinx.pot25
-rw-r--r--docs/gettext/tor.pot137
-rw-r--r--docs/make.bat35
-rw-r--r--docs/poetry.lock464
-rw-r--r--docs/pyproject.toml17
-rw-r--r--docs/source/_static/apple-logo.pngbin0 -> 6620 bytes
-rw-r--r--docs/source/_static/custom.css21
-rw-r--r--docs/source/_static/favicon.icobin0 -> 4286 bytes
-rw-r--r--docs/source/_static/linux-logo.pngbin0 -> 10237 bytes
-rw-r--r--docs/source/_static/logo.pngbin0 -> 18375 bytes
-rw-r--r--docs/source/_static/screenshots/advanced-save-tabs.pngbin0 -> 18667 bytes
-rw-r--r--docs/source/_static/screenshots/advanced-schedule-start-timer.pngbin0 -> 47799 bytes
-rw-r--r--docs/source/_static/screenshots/advanced-schedule-stop-timer.pngbin0 -> 114019 bytes
-rw-r--r--docs/source/_static/screenshots/chat-sharing.pngbin0 -> 60339 bytes
-rw-r--r--docs/source/_static/screenshots/chat-torbrowser.pngbin0 -> 48464 bytes
-rw-r--r--docs/source/_static/screenshots/chat.pngbin0 -> 54235 bytes
-rw-r--r--docs/source/_static/screenshots/receive-sharing.pngbin0 -> 84635 bytes
-rw-r--r--docs/source/_static/screenshots/receive-torbrowser.pngbin0 -> 56883 bytes
-rw-r--r--docs/source/_static/screenshots/receive.pngbin0 -> 84892 bytes
-rw-r--r--docs/source/_static/screenshots/settings.pngbin0 -> 55802 bytes
-rw-r--r--docs/source/_static/screenshots/share-files.pngbin0 -> 48917 bytes
-rw-r--r--docs/source/_static/screenshots/share-sharing.pngbin0 -> 48161 bytes
-rw-r--r--docs/source/_static/screenshots/share-torbrowser.pngbin0 -> 42133 bytes
-rw-r--r--docs/source/_static/screenshots/share.pngbin0 -> 43822 bytes
-rw-r--r--docs/source/_static/screenshots/tabs.pngbin0 -> 61545 bytes
-rw-r--r--docs/source/_static/screenshots/website-files.pngbin0 -> 66994 bytes
-rw-r--r--docs/source/_static/screenshots/website.pngbin0 -> 46330 bytes
-rw-r--r--docs/source/_static/windows-logo.pngbin0 -> 5187 bytes
-rw-r--r--docs/source/_templates/versions.html25
-rw-r--r--docs/source/advanced.rst148
-rw-r--r--docs/source/conf.py34
-rw-r--r--docs/source/develop.rst200
-rw-r--r--docs/source/features.rst144
-rw-r--r--docs/source/help.rst24
-rw-r--r--docs/source/index.rst17
-rw-r--r--docs/source/install.rst66
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ar/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ca/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/da/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/da/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/da/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/da/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/da/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/da/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/da/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/da/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/da/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/de/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/de/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/de/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/de/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/de/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/de/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/de/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/de/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/de/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/el/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/el/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/el/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/el/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/el/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/el/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/el/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/el/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/el/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/en/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/en/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/en/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/en/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/en/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/en/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/en/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/en/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/en/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/es/LC_MESSAGES/advanced.po304
-rw-r--r--docs/source/locale/es/LC_MESSAGES/develop.po325
-rw-r--r--docs/source/locale/es/LC_MESSAGES/features.po399
-rw-r--r--docs/source/locale/es/LC_MESSAGES/help.po75
-rw-r--r--docs/source/locale/es/LC_MESSAGES/index.po30
-rw-r--r--docs/source/locale/es/LC_MESSAGES/install.po144
-rw-r--r--docs/source/locale/es/LC_MESSAGES/security.po116
-rw-r--r--docs/source/locale/es/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/es/LC_MESSAGES/tor.po291
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/fa/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/advanced.po228
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/develop.po257
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/features.po226
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/help.po57
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/index.po25
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/install.po101
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/security.po61
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/sphinx.po25
-rw-r--r--docs/source/locale/fr/LC_MESSAGES/tor.po217
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ga/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/is/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/is/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/is/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/is/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/is/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/is/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/is/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/is/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/is/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/it/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/it/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/it/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/it/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/it/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/it/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/it/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/it/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/it/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ja/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/advanced.po228
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/develop.po257
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/features.po226
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/help.po57
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/index.po25
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/install.po101
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/security.po61
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/sphinx.po25
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/tor.po235
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/nl/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/pl/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/pt_BR/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/pt_PT/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ro/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/ru/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/sr@latin/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/sv/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/te/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/te/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/te/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/te/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/te/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/te/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/te/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/te/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/te/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/advanced.po298
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/develop.po328
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/features.po389
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/help.po73
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/index.po31
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/install.po144
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/security.po118
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/sphinx.po28
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/tor.po292
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/zh_CN/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/advanced.po227
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/develop.po256
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/features.po382
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/help.po72
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/index.po29
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/install.po143
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/security.po114
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/sphinx.po27
-rw-r--r--docs/source/locale/zh_TW/LC_MESSAGES/tor.po216
-rw-r--r--docs/source/security.rst24
-rw-r--r--docs/source/tor.rst93
-rw-r--r--git-hooks/README.md3
-rwxr-xr-xgit-hooks/pre-push4
-rw-r--r--install/org.onionshare.OnionShare.appdata.xml45
-rw-r--r--install/pyinstaller.spec67
-rw-r--r--install/qt-installer-script.js78
-rw-r--r--install/scripts/onionshare-pyinstaller44
-rw-r--r--pyproject.toml39
-rw-r--r--setup.cfg2
-rw-r--r--setup.py108
-rw-r--r--share/locale/bn.json216
-rw-r--r--share/locale/hu.json190
-rw-r--r--share/locale/uk.json183
-rw-r--r--share/version.txt1
-rw-r--r--stdeb.cfg6
-rwxr-xr-xtests/run.sh26
-rw-r--r--tests/test_cli_strings.py65
554 files changed, 47720 insertions, 3291 deletions
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 67d8ab0e..3be131b3 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -8,14 +8,13 @@ workflows:
version: 2
test:
jobs:
- - test-3.6
- - test-3.7
- - test-3.8
+ - test-cli
+ - test-gui
jobs:
- test-3.6: &test-template
+ test-cli:
docker:
- - image: circleci/python:3.6-buster
+ - image: circleci/python:3.8-buster
working_directory: ~/repo
@@ -23,42 +22,45 @@ jobs:
- checkout
- run:
- name: Install Qt5 binaries
- command: |
- sudo apt-get update
- sudo apt-get install xvfb libdbus-1-3 libxkbcommon-x11-0 libxkbcommon-x11-dev
- cd ~/
- wget https://download.qt.io/official_releases/qt/5.14/5.14.0/qt-opensource-linux-x64-5.14.0.run
- chmod +x qt-opensource-linux-x64-5.14.0.run
- xvfb-run ./qt-opensource-linux-x64-5.14.0.run --script ~/repo/.circleci/qt-installer-script.js --platform minimal --verbose
-
- - run:
name: Install dependencies
command: |
sudo apt-get update
- sudo apt-get install -y python3-pip xvfb tor obfs4proxy
- sudo pip3 install poetry flake8
+ sudo apt-get -y install tor obfs4proxy
+ pip install poetry
+ cd ~/repo/cli
poetry install
- run:
- name: Run flake tests
+ name: Run tests
command: |
- # stop the build if there are Python syntax errors or undefined names
- flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics
- # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
- flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
+ cd ~/repo/cli
+ poetry run pytest -v ./tests
+
+ test-gui:
+ docker:
+ - image: circleci/python:3.8-buster
+
+ working_directory: ~/repo
+
+ steps:
+ - checkout
- run:
- name: Run unit tests
+ name: Install dependencies
command: |
- xvfb-run -s "-screen 0 1280x1024x24" poetry run ./tests/run.sh --rungui
-
- test-3.7:
- <<: *test-template
- docker:
- - image: circleci/python:3.7-buster
+ sudo apt-get update
+ sudo apt-get install -y tor obfs4proxy gcc python3-dev python3-pyside2.qtcore python3-pyside2.qtwidgets python3-pyside2.qtgui
+ sudo apt-get install -y xvfb x11-utils libxkbcommon-x11-0 libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev libxcb-render-util0 libxcb-icccm4 libxcb-keysyms1 libxcb-image0
+ cd ~/repo/cli
+ poetry install
+ poetry build
+ cp dist/onionshare_cli-*.whl ~/repo/desktop
+ cd ~/repo/desktop
+ pip install briefcase pytest pytest-briefcase pytest-faulthandler pytest-qt pytest-xvfb
+ pip install $(python -c 'import toml; print(" ".join(toml.loads(open("pyproject.toml").read())["tool"]["briefcase"]["app"]["onionshare"]["requires"]))')
- test-3.8:
- <<: *test-template
- docker:
- - image: circleci/python:3.8-buster
+ - run:
+ name: Run tests
+ command: |
+ cd ~/repo/desktop
+ ./tests/run.sh
diff --git a/.circleci/qt-installer-script.js b/.circleci/qt-installer-script.js
deleted file mode 100644
index d5860b68..00000000
--- a/.circleci/qt-installer-script.js
+++ /dev/null
@@ -1,75 +0,0 @@
-function Controller() {
- installer.installationFinished.connect(proceed)
-}
-
-function logCurrentPage() {
- var pageName = page().objectName
- var pagePrettyTitle = page().title
- console.log("At page: " + pageName + " ('" + pagePrettyTitle + "')")
-}
-
-function page() {
- return gui.currentPageWidget()
-}
-
-function proceed(button, delay) {
- gui.clickButton(button || buttons.NextButton, delay)
-}
-
-Controller.prototype.WelcomePageCallback = function() {
- logCurrentPage()
- proceed(buttons.NextButton, 2000)
-}
-
-Controller.prototype.CredentialsPageCallback = function() {
- logCurrentPage()
- page().loginWidget.EmailLineEdit.text = installer.environmentVariable("QT_EMAIL");
- page().loginWidget.PasswordLineEdit.text = installer.environmentVariable("QT_PASSWORD");
- proceed()
-}
-
-Controller.prototype.IntroductionPageCallback = function() {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.TargetDirectoryPageCallback = function() {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.ComponentSelectionPageCallback = function() {
- logCurrentPage()
- page().deselectAll()
- page().selectComponent("qt.qt5.5140.gcc_64")
- proceed()
-}
-
-Controller.prototype.LicenseAgreementPageCallback = function() {
- logCurrentPage()
- page().AcceptLicenseRadioButton.checked = true
- gui.clickButton(buttons.NextButton)
-}
-
-Controller.prototype.ReadyForInstallationPageCallback = function() {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.PerformInstallationPageCallback = function() {
- logCurrentPage()
-}
-
-Controller.prototype.FinishedPageCallback = function() {
- logCurrentPage()
- page().LaunchQtCreatorCheckBoxForm.launchQtCreatorCheckBox.checked = false
- proceed(buttons.FinishButton)
-}
-
-Controller.prototype.DynamicTelemetryPluginFormCallback = function() {
- logCurrentPage()
- console.log(Object.keys(page().TelemetryPluginForm.statisticGroupBox))
- var radioButtons = page().TelemetryPluginForm.statisticGroupBox
- radioButtons.disableStatisticRadioButton.checked = true
- proceed()
-}
diff --git a/.gitignore b/.gitignore
index 26ee07ad..e58af6a0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ __pycache__
dist
deb_dist
build
+_build
eggs
parts
var
@@ -54,4 +55,9 @@ tags
venv
# other
-.vscode \ No newline at end of file
+.vscode
+onionshare.dist-info
+desktop/src/onionshare/resources/tor
+desktop/*.whl
+desktop/linux
+desktop/windows
diff --git a/BUILD.md b/BUILD.md
deleted file mode 100644
index 2ea2f1ab..00000000
--- a/BUILD.md
+++ /dev/null
@@ -1,451 +0,0 @@
-# Index
-* [Building OnionShare](#building-onionshare)
- * [Linux](#linux)
- * [Use newest software](#use-newest-software)
- * [Use package managers](#use-package-managers)
- * [Flatpak packaging](#flatpak-packaging)
- * [Snapcraft packaging](#snapcraft-packaging)
- * [macOS](#macos)
- * [Windows](#windows)
- * [Setting up your dev environment](#setting-up-your-dev-environment)
- * [To make a .exe](#to-make-a-exe)
- * [To build the installer](#to-build-the-installer)
-* [Running tests](#running-tests)
-* [Making releases](#making-releases)
- * [Changelog, version, and signed git tag](#changelog-version-and-signed-git-tag)
- * [Linux release](#linux-release)
- * [macOS release](#macos-release)
- * [Windows release](#windows-release)
- * [Source package](#source-package)
- * [Publishing the release](#publishing-the-release)
-
-# Building OnionShare
-
-Start by getting the source code:
-
-```sh
-git clone https://github.com/micahflee/onionshare.git
-cd onionshare
-```
-
-## Linux
-
-### Use newest software
-
-The recommended way to develop OnionShare is to use the latest versions of all dependencies.
-
-First, install `tor` and `obfs4proxy` from either the [official Debian repository](https://support.torproject.org/apt/tor-deb-repo/), or from your package manager.
-
-Then download Qt 5.14.0 for Linux:
-
-```sh
-cd ~/Downloads
-wget https://download.qt.io/official_releases/qt/5.14/5.14.0/qt-opensource-linux-x64-5.14.0.run
-```
-
-If you'd like to check to make sure you have the exact installer I have, here is the sha256 checksum:
-
-```sh
-sha256sum qt-opensource-linux-x64-5.14.0.run
-4379f147c6793ec7e7349d2f9ee7d53b8ab6ea4e4edf8ee0574a75586a6a6e0e qt-opensource-linux-x64-5.14.0.run
-```
-
-Then make it executable and install Qt:
-
-```sh
-chmod +x qt-opensource-linux-x64-5.14.0.run
-./qt-opensource-linux-x64-5.14.0.run
-```
-
-You have to create a Qt account and login to install Qt. Choose the default installation folder in your home directory. The only component you need is `Qt 5.14.0` > `Desktop gcc 64-bit`.
-
-Install [poetry](https://python-poetry.org/docs/) from your package manager, or by doing `pip install --user poetry`. Then install dependencies:
-
-```sh
-poetry install
-```
-
-You can run the CLI and the GUI versions of OnionShare like this:
-
-```sh
-poetry run ./dev_scripts/onionshare
-poetry run ./dev_scripts/onionshare-gui
-```
-
-### Use package managers
-
-Alternatively, you can install dependencies from package managers.
-
-Install the needed dependencies:
-
-**For Debian-like distros:**
-
-```
-apt install -y python3-flask python3-stem python3-pyqt5 python3-crypto python3-socks python-nautilus tor obfs4proxy python3-pytest python3-pytestqt build-essential fakeroot python3-all python3-stdeb dh-python python3-flask-httpauth python3-distutils python3-psutil python3-watchdog
-```
-
-**For Fedora-like distros:**
-
-```
-dnf install -y python3-flask python3-flask-httpauth python3-stem python3-qt5 python3-crypto python3-pysocks nautilus-python tor obfs4 python3-pytest rpm-build python3-psutil python3-watchdog
-```
-
-After that you can try both the CLI and the GUI version of OnionShare:
-
-```sh
-./dev_scripts/onionshare
-./dev_scripts/onionshare-gui
-```
-
-You can also build OnionShare packages to install:
-
-Create a .deb on Debian-like distros: `./install/build_deb.sh`
-
-Create a .rpm on Fedora-like distros: `./install/build_rpm.sh`
-
-For openSUSE: There are instructions for building [in the wiki](https://github.com/micahflee/onionshare/wiki/Linux-Distribution-Support#opensuse-leap-150).
-
-For ArchLinux: There is a PKBUILD available [here](https://www.archlinux.org/packages/community/any/onionshare/) that can be used to install OnionShare.
-
-If you find that these instructions don't work for your Linux distribution or version, consult the [Linux Distribution Support wiki guide](https://github.com/micahflee/onionshare/wiki/Linux-Distribution-Support), which might contain extra instructions.
-
-### Flatpak packaging
-
-See: https://github.com/micahflee/org.onionshare.OnionShare
-
-### Snapcraft packaging
-
-This folder contains files to build a [snap package](https://snapcraft.io/). First make sure you install `snap` and `snapcraft` (`snap install snapcraft --classic`).
-
-To build the snap, cd to the `onionshare` folder and run:
-
-```sh
-snapcraft
-snap install --devmode ./onionshare_*.snap
-```
-
-See your installed snaps:
-
-```sh
-snap list
-```
-
-Run the OnionShare snap:
-
-```sh
-/snap/bin/onionshare # CLI version
-/snap/bin/onionshare.onionshare-gui # GUI version
-```
-
-Delete the OnionShare snap:
-
-```sh
-snap remove onionshare
-```
-
-#### Making a new release
-
-In `snapcraft.yaml`:
-
-- Update `version`
-- Update the `onionshare` part to use the correct tag
-- Update `Qt5`, `tor`, `libevent`, and `obfs4` dependencies, if necessary
-
-## macOS
-
-Install Xcode from the Mac App Store. Once it's installed, run it for the first time to set it up. Also, run this to make sure command line tools are installed: `xcode-select --install`. And finally, open Xcode, go to Preferences > Locations, and make sure under Command Line Tools you select an installed version from the dropdown. (This is required for installing Qt5.)
-
-Download and install Python 3.7.4 from https://www.python.org/downloads/release/python-374/. I downloaded `python-3.7.4-macosx10.9.pkg`.
-
-You may also need to run the command `/Applications/Python\ 3.7/Install\ Certificates.command` to update Python 3.6's internal certificate store. Otherwise, you may find that fetching the Tor Browser .dmg file fails later due to a certificate validation error.
-
-Install Qt 5.13.1 for macOS from https://www.qt.io/offline-installers. I downloaded `qt-opensource-mac-x64-5.13.1.dmg`. In the installer, you can skip making an account, and all you need is `Qt` > `Qt 5.13.1` > `macOS`.
-
-If you don't have it already, install poetry (`pip3 install --user poetry`). Then install dependencies:
-
-```sh
-poetry install
-```
-
-#### You can run both the CLI and GUI versions of OnionShare without building an bundle
-
-```sh
-poetry run ./dev_scripts/onionshare
-poetry run ./dev_scripts/onionshare-gui
-```
-
-#### To build the app bundle
-
-```sh
-install/build_osx.sh
-```
-
-Now you should have `dist/OnionShare.app`.
-
-#### To codesign and build a pkg for distribution
-
-```sh
-install/build_osx.sh --release
-```
-
-Now you should have `dist/OnionShare.pkg`.
-
-## Windows
-
-### Setting up your dev environment
-
-Download Python 3.7.4, 32-bit (x86) from https://www.python.org/downloads/release/python-374/. I downloaded `python-3.7.4.exe`. When installing it, make sure to check the "Add Python 3.7 to PATH" checkbox on the first page of the installer.
-
-Install the Qt 5.13.1 from https://www.qt.io/offline-installers. I downloaded `qt-opensource-windows-x86-5.13.1.exe`. In the installer, you can skip making an account, and all you need `Qt` > `Qt 5.13.1` > `MSVC 2017 32-bit`.
-
-Install [poetry](https://python-poetry.org/). Open PowerShell, and run:
-
-```
-(Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py -UseBasicParsing).Content | python
-```
-
-And add `%USERPROFILE%\.poetry\bin` to your path. Then open a command prompt and cd to the `dangerzone` folder, and install the poetry dependencies:
-
-```
-poetry install
-```
-
-After that you can try both the CLI and the GUI version of OnionShare:
-
-```
-poetry run python dev_scripts\onionshare
-poetry run python dev_scripts\onionshare-gui
-```
-
-#### If you want to build a .exe
-
-These instructions include adding folders to the path in Windows. To do this, go to Start and type "advanced system settings", and open "View advanced system settings" in the Control Panel. Click Environment Variables. Under "System variables" double-click on Path. From there you can add and remove folders that are available in the PATH.
-
-Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1900.exe`.
-
-Download and install the standalone [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk). Note that you may not need this if you already have Visual Studio.
-
-Add the following directories (you might want to make sure these are exact on your computer) to the path:
-
-* `C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\x86`
-* `C:\Program Files (x86)\Windows Kits\10\Redist\10.0.18362.0\ucrt\DLLs\x86`
-* `C:\Program Files (x86)\7-Zip`
-* `C:\Users\user\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyQt5\Qt\bin`
-
-#### If you want the .exe to not get falsely flagged as malicious by anti-virus software
-
-OnionShare uses PyInstaller to turn the python source code into Windows executable `.exe` file. Apparently, malware developers also use PyInstaller, and some anti-virus vendors have included snippets of PyInstaller code in their virus definitions. To avoid this, you have to compile the Windows PyInstaller bootloader yourself instead of using the pre-compiled one that comes with PyInstaller.
-
-(If you don't care about this, you can install PyInstaller with `pip install PyInstaller==3.5`.)
-
-Here's how to compile the PyInstaller bootloader:
-
-Download and install [Microsoft Build Tools for Visual Studio 2019](https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2019). I downloaded `vs_buildtools__1285639570.1568593053.exe`. In the installer, check the box next to "Visual C++ build tools". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer.
-
-Then, enable the 32-bit Visual C++ Toolset on the Command Line like this:
-
-```
-cd "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build"
-vcvars32.bat
-```
-
-Change to a folder where you keep source code, and clone the PyInstaller git repo and checkout the `v3.5` tag:
-
-```
-git clone https://github.com/pyinstaller/pyinstaller.git
-cd pyinstaller
-git tag -v v3.5
-```
-
-(Note that ideally you would verify the git tag, but the PGP key that has signed the `v3.5` git tag for is not published anywhere, so this isn't possible. See [this issue](https://github.com/pyinstaller/pyinstaller/issues/4430).)
-
-The next step is to compile the bootloader. We should do this all in dangerzone's poetry shell:
-
-```
-cd onionshare
-poetry shell
-cd ..\pyinstaller
-```
-
-And compile the bootloader, following [these instructions](https://pythonhosted.org/PyInstaller/bootloader-building.html). To compile, run this:
-
-```
-cd bootloader
-python waf distclean all --target-arch=32bit --msvc_targets=x86
-```
-
-Finally, install the PyInstaller module into your poetry environment:
-
-```
-cd ..
-python setup.py install
-exit
-```
-
-Now the next time you use PyInstaller to build OnionShare, the `.exe` file should not be flagged as malicious by anti-virus.
-
-#### If you want to build the installer
-
-* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.04-setup.exe`.
-* Add `C:\Program Files (x86)\NSIS` to the path.
-
-#### If you want to sign binaries with Authenticode
-
-* You'll need a code signing certificate. I got an open source code signing certificate from [Certum](https://www.certum.eu/certum/cert,offer_en_open_source_cs.xml).
-* Once you get a code signing key and certificate and covert it to a pfx file, import it into your certificate store.
-
-### To make a .exe:
-
-* Open a command prompt, cd into the onionshare directory, and type: `pyinstaller install\pyinstaller.spec`. `onionshare-gui.exe` and all of their supporting files will get created inside the `dist` folder.
-
-### To build the installer:
-
-Note that you must have a codesigning certificate installed in order to use the `install\build_exe.bat` script, because it codesigns `onionshare-gui.exe`, `uninstall.exe`, and `onionshare-setup.exe`.
-
-Open a command prompt, cd to the onionshare directory, and type: `install\build_exe.bat`
-
-This will prompt you to codesign three binaries and execute one unsigned binary. When you're done clicking through everything you will have `dist\onionshare-setup.exe`.
-
-# Running tests
-
-OnionShare includes PyTest unit tests. To run tests, you can run `pytest` against the `tests/` directory.
-
-```sh
-poetry run ./tests/run.sh
-```
-
-You can run GUI tests like this:
-
-```sh
-poetry run ./tests/run.sh --rungui
-```
-
-If you would like to also run the GUI unit tests in 'tor' mode, start Tor Browser in the background, then run:
-
-```sh
-poetry run ./tests/run.sh --rungui --runtor
-```
-
-Keep in mind that the Tor tests take a lot longer to run than local mode, but they are also more comprehensive.
-
-You can also choose to wrap the tests in `xvfb-run` so that a ton of OnionShare windows don't pop up on your desktop (you may need to install the `xorg-x11-server-Xvfb` package), like this:
-
-```sh
-xvfb-run poetry run ./tests/run.sh --rungui
-```
-
-# Making releases
-
-This section documents the release process. Unless you're a core OnionShare developer making a release, you'll probably never need to follow it.
-
-## Changelog, version, and signed git tag
-
-Before making a release, all of these should be complete:
-
-* `share/version.txt` should have the correct version
-* `pyproject.toml` should have the correct version
-* `install/org.onionshare.OnionShare.appdata.xml` should have the correct version
-* `snap/snapcraft.yaml` should have the correct version
-* `install/onionshare.nsi` should have the correct version, for the Windows installer
-* `CHANGELOG.md` should be updated to include a list of all major changes since the last release
-* There must be a PGP-signed git tag for the version, e.g. for OnionShare 2.1, the tag must be `v2.1`
-
-The first step for the Linux, macOS, and Windows releases is the same:
-
-Verify the release git tag:
-
-```
-git fetch
-git tag -v v$VERSION
-```
-
-If the tag verifies successfully, check it out:
-
-```
-git checkout v$VERSION
-```
-
-## Linux release
-
-TODO: Write Flatpak instructions (see [this issue](https://github.com/micahflee/onionshare/issues/910)).
-
-To make a PPA release:
-
-- Go to Ubuntu build machine, which must have `~/.dput.cf` with the correct PPA info in it, and with the correct PGP signing key
-- Verify and checkout the git tag for this release
-- Run `./install/ppa_release.sh`, which builds a source package and uploads to the PPA build server
-- Login to Launchpad to monitor the build and make sure it is successful; if not, make minor patches and try the release again
-- After build is successful, from Launchpad, copy the binary from `cosmic` into other suites
-
-## macOS release
-
-To make a macOS release, go to macOS build machine:
-
-- Build machine should be running macOS 10.11.6, and must have the Apple-trusted `Developer ID Application: Micah Lee` and `Developer ID Installer: Micah Lee` code-signing certificates installed
-- Verify and checkout the git tag for this release
-- Run `./install/build_osx.sh --release`; this will make a codesigned installer package called `dist/OnionShare-$VERSION.pkg`
-- Copy `OnionShare-$VERSION.pkg` to developer machine
-
-Then move back to the developer machine:
-
-- PGP-sign the macOS installer, `gpg -a --detach-sign OnionShare-$VERSION.pkg`
-
-Note that once we support notarizing the macOS installer (see [this issue](https://github.com/micahflee/onionshare/issues/953)), these will be the steps instead:
-
-- Developer machine, running the latest macOS, must have an app-specific Apple ID password saved in the login keychain called `onionshare-notarize`
-- Notarize it: `xcrun altool --notarize-app --primary-bundle-id "com.micahflee.onionshare" -u "micah@micahflee.com" -p "@keychain:onionshare-notarize" --file OnionShare-$VERSION.pkg`
-- Wait for it to get approved, check status with: `xcrun altool --notarization-history 0 -u "micah@micahflee.com" -p "@keychain:onionshare-notarize"`
-- After it's approved, staple the ticket: `xcrun stapler staple OnionShare-$VERSION.pkg`
-- PGP-sign the final, notarized and stapled, `gpg -a --detach-sign OnionShare-$VERSION.pkg`
-
-This process ends up with two final files:
-
-```
-OnionShare-$VERSION.pkg
-OnionShare-$VERSION.pkg.asc
-```
-
-## Windows release
-
-To make a Windows release, go to Windows build machine:
-
-- Build machine should be running Windows 10, and have the Windows codesigning certificate installed
-- Verify and checkout the git tag for this release
-- Run `install\build_exe.bat`; this will make a codesigned installer package called `dist\onionshare-$VERSION-setup.exe`
-- Copy `onionshare-$VERSION-setup.exe` to developer machine
-
-Then move back to the developer machine:
-
-- PGP-sign the Windows installer, `gpg -a --detach-sign onionshare-$VERSION-setup.exe`
-
-This process ends up with two final files:
-
-```
-onionshare-$VERSION-setup.exe
-onionshare-$VERSION-setup.exe.asc
-```
-
-## Source package
-
-To make a source package, run `./install/build_source.sh $TAG`, where `$TAG` is the the name of the signed git tag, e.g. `v2.1`.
-
-This process ends up with two final files in `dist`:
-
-```
-onionshare-$VERSION.tar.gz
-onionshare-$VERSION.tar.gz.asc
-```
-
-## Publishing the release
-
-To publish the release:
-
-- Create a new release on GitHub, put the changelog in the description of the release, and upload all six files (the macOS installer, the Windows installer, the source package, and their signatures)
-- Upload the six release files to https://onionshare.org/dist/$VERSION/
-- Copy the six release files into the OnionShare team Keybase filesystem
-- 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/
-- Email the [onionshare-dev](https://lists.riseup.net/www/subscribe/onionshare-dev) mailing list announcing the release
-- Make a PR to [homebrew-cask](https://github.com/homebrew/homebrew-cask) to update the macOS version
diff --git a/CHANGELOG.md b/CHANGELOG.md
index da5f0c42..272f8efc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,15 @@
# OnionShare Changelog
+## 2.3
+
+* Major new feature: Multiple tabs, including better support for persistent services, faster Tor connections
+* New feature: Chat anonymously mode
+* New feature: All new design
+* New feature: Ability to display QR codes of OnionShare addresses
+* New feature: Web apps have responsive design and look better on mobile
+* New feature: Flatpak packaging for Linux
+* Several bug fixes
+
## 2.2
* New feature: Website mode, which allows publishing a static HTML website as an onion service
diff --git a/LICENSE b/LICENSE
index 668a10f0..5a3a9871 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,7 @@
(Note: Third-party licenses can be found under install/licenses/.)
OnionShare
-Copyright © 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
diff --git a/MANIFEST.in b/MANIFEST.in
deleted file mode 100644
index 7dd8a881..00000000
--- a/MANIFEST.in
+++ /dev/null
@@ -1,13 +0,0 @@
-include LICENSE
-include README.md
-include BUILD.md
-include share/*
-include share/images/*
-include share/locale/*
-include share/templates/*
-include share/static/*
-include install/org.onionshare.OnionShare.desktop
-include install/org.onionshare.OnionShare.appdata.xml
-include install/org.onionshare.OnionShare.svg
-include install/scripts/onionshare-nautilus.py
-include tests/*.py
diff --git a/README.md b/README.md
index 0c14c121..274d6d93 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,8 @@
-# OnionShare
-
-[OnionShare](https://onionshare.org) is an open source tool for securely and anonymously sending and receiving files using Tor onion services. It works by starting a web server directly on your computer and making it accessible as an unguessable Tor web address that others can load in [Tor Browser](https://www.torproject.org/) to download files from you, or upload files to you. It doesn't require setting up a separate server, using a third party file-sharing service, or even logging into an account.
+![OnionShare](/docs/source/_static/logo.png)
-Unlike services like email, Google Drive, DropBox, WeTransfer, or nearly any other way people typically send files to each other, when you use OnionShare you don't give any companies access to the files that you're sharing. So long as you share the unguessable web address in a secure way (like pasting it in an encrypted messaging app), _no one_ but you and the person you're sharing with can access the files.
-
-## Documentation
+# OnionShare
-To learn how OnionShare works, what its security properties are, and how to use it, check out the [wiki](https://github.com/micahflee/onionshare/wiki).
+OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network.
## Installing OnionShare
@@ -18,29 +14,12 @@ For macOS you can also use [Homebrew](https://brew.sh/):
brew cask install onionshare
```
-For Ubuntu-like Linux distributions, you can use this PPA:
-
-```
-sudo add-apt-repository ppa:micahflee/ppa
-sudo apt install -y onionshare
-```
+See [these instructions](https://docs.onionshare.org/en/install.html#install-in-linux-with-flatpak) to install OnionShare in Linux with Flatpak.
-OnionShare may also be available in your Linux distribution's package manager. Check [this wiki page](https://github.com/micahflee/onionshare/wiki/How-Do-I-Install-Onionshare) for more information.
-
-## Contributing to OnionShare
-
-You can set up your development environment to build OnionShare yourself by following [these instructions](/BUILD.md). You may also subscribe to our mailing list [here](https://lists.riseup.net/www/info/onionshare-dev), and join our public Keybase team [here](https://keybase.io/team/onionshare).
-
-Test status: [![CircleCI](https://circleci.com/gh/micahflee/onionshare.svg?style=svg)](https://circleci.com/gh/micahflee/onionshare)
-
-# Screenshots
-
-![Share mode OnionShare](/screenshots/onionshare-share-server.png)
-
-![Share mode Tor Browser](/screenshots/onionshare-share-client.png)
+## Documentation
-![Receive mode OnionShare](/screenshots/onionshare-receive-server.png)
+To learn how OnionShare works, what its security properties are, how to use it, and how to contribute to the project, check out https://docs.onionshare.org.
-![Receive mode Tor Browser](/screenshots/onionshare-receive-client.png)
+---
-![Website mode OnionShare](/screenshots/onionshare-website-server.png) \ No newline at end of file
+Test status: [![CircleCI](https://circleci.com/gh/micahflee/onionshare.svg?style=svg)](https://circleci.com/gh/micahflee/onionshare) \ No newline at end of file
diff --git a/apparmor/abstractions/onionshare b/apparmor/abstractions/onionshare
deleted file mode 100644
index fa94e68d..00000000
--- a/apparmor/abstractions/onionshare
+++ /dev/null
@@ -1,29 +0,0 @@
-#include <abstractions/base>
-#include <abstractions/nameservice>
-#include <abstractions/private-files-strict>
-#include <abstractions/python>
-
-# Why are these not in abstractions/python?
-/usr/lib{,32,64}/python{2,3}.[0-9]/__pycache__/ rw,
-/usr/lib{,32,64}/python{2,3}.[0-9]/__pycache__/* rw,
-/usr/lib{,32,64}/python{2,3}.[0-9]/**/__pycache__/ rw,
-/usr/lib{,32,64}/python{2,3}.[0-9]/**/__pycache__/* rw,
-/usr/lib{,32,64}/python{2,3}/**/__pycache__/ rw,
-/usr/lib{,32,64}/python{2,3}/**/__pycache__/* rw,
-
-/bin/dash rix,
-/proc/*/mounts r,
-/proc/*/fd/ r,
-/sbin/ldconfig rix,
-/sbin/ldconfig.real rix,
-/bin/uname rix,
-/etc/mime.types r,
-/usr/share/onionshare/ r,
-/usr/share/onionshare/** r,
-/tmp/ rw,
-/tmp/** rw,
-
-# Allow read on almost anything in @{HOME}. Lenient, but
-# private-files-strict is in effect.
-owner @{HOME}/ r,
-owner @{HOME}/[^.]** r,
diff --git a/apparmor/local/usr.bin.onionshare b/apparmor/local/usr.bin.onionshare
deleted file mode 100644
index 6453771d..00000000
--- a/apparmor/local/usr.bin.onionshare
+++ /dev/null
@@ -1,2 +0,0 @@
-# Site-specific additions and overrides for usr.bin.onionshare.
-# For more details, please see /etc/apparmor.d/local/README.
diff --git a/apparmor/local/usr.bin.onionshare-gui b/apparmor/local/usr.bin.onionshare-gui
deleted file mode 100644
index fa5ba3f0..00000000
--- a/apparmor/local/usr.bin.onionshare-gui
+++ /dev/null
@@ -1,2 +0,0 @@
-# Site-specific additions and overrides for usr.bin.onionshare-gui.
-# For more details, please see /etc/apparmor.d/local/README.
diff --git a/apparmor/usr.bin.onionshare b/apparmor/usr.bin.onionshare
deleted file mode 100644
index 1c14ccc1..00000000
--- a/apparmor/usr.bin.onionshare
+++ /dev/null
@@ -1,10 +0,0 @@
-#include <tunables/global>
-
-/usr/bin/onionshare {
- #include <abstractions/onionshare>
-
- /usr/bin/ r,
- /usr/bin/onionshare r,
-
- #include <local/usr.bin.onionshare>
-}
diff --git a/apparmor/usr.bin.onionshare-gui b/apparmor/usr.bin.onionshare-gui
deleted file mode 100644
index 746dadc1..00000000
--- a/apparmor/usr.bin.onionshare-gui
+++ /dev/null
@@ -1,28 +0,0 @@
-#include <tunables/global>
-
-/usr/bin/onionshare-gui {
- #include <abstractions/gnome>
- #include <abstractions/ibus>
- #include <abstractions/onionshare>
-
- /usr/bin/ r,
- /usr/bin/onionshare-gui r,
- /proc/*/cmdline r,
-
- # The freedesktop.org abstraction doesn't allow `k`
- /usr/share/icons/*/index.theme k,
-
- # Why do these still emit audit journal entries?
- owner @{HOME}/.config/ibus/bus/ rw,
- owner @{HOME}/.config/ibus/bus/* rw,
- deny @{HOME}/.ICEauthority r,
-
- deny /etc/machine-id r,
- deny /var/lib/dbus/machine-id.* rw,
-
- # Accessibility support
- owner /{,var/}run/user/*/at-spi2-*/ rw,
- owner /{,var/}run/user/*/at-spi2-*/** rw,
-
- #include <local/usr.bin.onionshare-gui>
-}
diff --git a/cli/.circleci/config.yml b/cli/.circleci/config.yml
new file mode 100644
index 00000000..70d16fea
--- /dev/null
+++ b/cli/.circleci/config.yml
@@ -0,0 +1,38 @@
+version: 2
+workflows:
+ version: 2
+ test:
+ jobs:
+ - test-3.6
+ - test-3.7
+ - test-3.8
+
+jobs:
+ test-3.6: &test-template
+ docker:
+ - image: circleci/python:3.6-buster
+
+ working_directory: ~/repo
+
+ steps:
+ - checkout
+
+ - run:
+ name: Install dependencies
+ command: |
+ poetry install
+
+ - run:
+ name: Run unit tests
+ command: |
+ poetry run pytest -vvv ./tests
+
+ test-3.7:
+ <<: *test-template
+ docker:
+ - image: circleci/python:3.7-buster
+
+ test-3.8:
+ <<: *test-template
+ docker:
+ - image: circleci/python:3.8-buster
diff --git a/cli/README.md b/cli/README.md
new file mode 100644
index 00000000..cb5f9bc5
--- /dev/null
+++ b/cli/README.md
@@ -0,0 +1,81 @@
+```
+ @@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
+ @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
+ @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
+ @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
+ @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
+ @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
+ @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
+ @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
+ @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
+ @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
+ @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@
+```
+
+## Installing OnionShare CLI
+
+First, make sure you have `tor` installed. In Linux, install it through your package manager. In macOS, install it with [Homebrew](https://brew.sh): `brew install tor`.
+
+Then install OnionShare CLI:
+
+```sh
+pip install onionshare-cli
+```
+
+Then run it with:
+
+```sh
+onionshare-cli --help
+```
+
+## Developing OnionShare CLI
+
+You must have python3 and [poetry](https://python-poetry.org/) installed.
+
+Install dependencies with poetry:
+
+```sh
+poetry install
+```
+
+To run from the source tree:
+
+```sh
+poetry run onionshare-cli
+```
+
+To run tests:
+
+```sh
+poetry run pytest -v ./tests
+```
+
+## Build a wheel package
+
+```sh
+poetry build
+```
+
+This will create `dist/onionshare_cli-$VERSION-py3-none-any.whl`.
+
+### Making a release
+
+Before making a release, update the version in these places:
+
+- `pyproject.toml`
+- `onionshare_cli/resources/version.txt`
+
+Build and publish to PyPi:
+
+```
+poetry publish --build
+``` \ No newline at end of file
diff --git a/onionshare/__init__.py b/cli/onionshare_cli/__init__.py
index e82c7929..7361ac9e 100644
--- a/onionshare/__init__.py
+++ b/cli/onionshare_cli/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -46,25 +46,49 @@ def main(cwd=None):
# Display OnionShare banner
print(f"OnionShare {common.version} | https://onionshare.org/")
- reset='\033[0m'
- purple='\33[95m'
+ 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(
+ " @@@@@@@@@@@@ @@@@@@@@@@ \\ \\_/ / | | | | (_) | | | | "
+ )
+ print(
+ " @@@@@@@@@@@@@@@@ @@@@@@@@@ \\___/|_| |_|_|\\___/|_| |_| "
+ )
+ print(
+ " @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _ "
+ )
+ print(
+ " @@@@@@@@@@ @@@@@@@@@@@@ / ___| | "
+ )
+ print(
+ " @@@@@@@@@@ @@@@@@@@ \\ `--.| |__ __ _ _ __ ___ "
+ )
+ print(
+ " @@@@@@@@@@@ @ @@@@ `--. \\ '_ \\ / _` | '__/ _ \\"
+ )
+ print(
+ " @@@@@@@@@@@@@ @@@@@@ /\\__/ / | | | (_| | | | __/"
+ )
+ print(
+ " @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \\____/|_| |_|\\__,_|_| \\___|"
+ )
print(" @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ")
print(" @@@@@@@@@@@@@@@@@@@@@@@@@ ")
print(" @@@@@@@@@@@@@@@@@@@ ")
@@ -87,6 +111,9 @@ def main(cwd=None):
parser.add_argument(
"--website", action="store_true", dest="website", help="Publish website"
)
+ parser.add_argument(
+ "--chat", action="store_true", dest="chat", help="Start chat server"
+ )
# Tor connection-related args
parser.add_argument(
"--local-only",
@@ -196,6 +223,7 @@ def main(cwd=None):
receive = bool(args.receive)
website = bool(args.website)
+ chat = bool(args.chat)
local_only = bool(args.local_only)
connect_timeout = int(args.connect_timeout)
config_filename = args.config
@@ -214,6 +242,8 @@ def main(cwd=None):
mode = "receive"
elif website:
mode = "website"
+ elif chat:
+ mode = "chat"
else:
mode = "share"
diff --git a/onionshare/common.py b/cli/onionshare_cli/common.py
index b74534ff..0c034a87 100644
--- a/onionshare/common.py
+++ b/cli/onionshare_cli/common.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -71,49 +71,13 @@ class Common:
def get_resource_path(self, filename):
"""
- Returns the absolute path of a resource, regardless of whether OnionShare is installed
- systemwide, and whether regardless of platform
+ Returns the absolute path of a resource
"""
- # On Windows, and in Windows dev mode, switch slashes in incoming filename to backslackes
- if self.platform == "Windows":
- filename = filename.replace("/", "\\")
-
- if getattr(sys, "onionshare_dev_mode", False):
- # Look for resources directory relative to python file
- prefix = os.path.join(
- os.path.dirname(
- os.path.dirname(
- os.path.abspath(inspect.getfile(inspect.currentframe()))
- )
- ),
- "share",
- )
- if not os.path.exists(prefix):
- # While running tests during stdeb bdist_deb, look 3 directories up for the share folder
- prefix = os.path.join(
- os.path.dirname(
- os.path.dirname(os.path.dirname(os.path.dirname(prefix)))
- ),
- "share",
- )
-
- elif self.platform == "BSD" or self.platform == "Linux":
- # Look for resources relative to the binary, so if the binary is /usr/bin/onionshare-gui and
- # the resource dir is /usr/share/onionshare, then the resource dir relative to the binary dir
- # is ../share/onionshare
- prefix = os.path.join(
- os.path.dirname(os.path.dirname(sys.argv[0])), "share/onionshare"
- )
-
- elif getattr(sys, "frozen", False):
- # Check if app is "frozen"
- # https://pythonhosted.org/PyInstaller/#run-time-information
- if self.platform == "Darwin":
- prefix = os.path.join(sys._MEIPASS, "share")
- elif self.platform == "Windows":
- prefix = os.path.join(os.path.dirname(sys.executable), "share")
-
- return os.path.join(prefix, filename)
+ resources_path = os.path.join(
+ os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))),
+ "resources",
+ )
+ return os.path.join(resources_path, filename)
def get_tor_paths(self):
if self.platform == "Linux":
@@ -123,19 +87,11 @@ class Common:
tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
elif self.platform == "Windows":
- base_path = os.path.join(
- os.path.dirname(os.path.dirname(self.get_resource_path(""))), "tor"
- )
- tor_path = os.path.join(os.path.join(base_path, "Tor"), "tor.exe")
- obfs4proxy_file_path = os.path.join(
- os.path.join(base_path, "Tor"), "obfs4proxy.exe"
- )
- tor_geo_ip_file_path = os.path.join(
- os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip"
- )
- tor_geo_ipv6_file_path = os.path.join(
- os.path.join(os.path.join(base_path, "Data"), "Tor"), "geoip6"
- )
+ base_path = self.get_resource_path("tor")
+ tor_path = os.path.join(base_path, "Tor", "tor.exe")
+ obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe")
+ tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip")
+ tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
elif self.platform == "Darwin":
base_path = os.path.dirname(
os.path.dirname(os.path.dirname(self.get_resource_path("")))
@@ -221,6 +177,16 @@ class Common:
r = random.SystemRandom()
return "-".join(r.choice(wordlist) for _ in range(word_count))
+ def build_username(self, word_count=2):
+ """
+ Returns a random string made of words from the wordlist, such as "deter-trig".
+ """
+ with open(self.get_resource_path("wordlist.txt")) as f:
+ wordlist = f.read().split()
+
+ r = random.SystemRandom()
+ return "-".join(r.choice(wordlist) for _ in range(word_count))
+
@staticmethod
def random_string(num_bytes, output_len=None):
"""
diff --git a/onionshare/mode_settings.py b/cli/onionshare_cli/mode_settings.py
index 9201721e..4e3a27ab 100644
--- a/onionshare/mode_settings.py
+++ b/cli/onionshare_cli/mode_settings.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -18,8 +18,11 @@ 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 pwd
import json
+import platform
+
+if platform.system() == "Darwin":
+ import pwd
class ModeSettings:
@@ -49,6 +52,7 @@ class ModeSettings:
"share": {"autostop_sharing": True, "filenames": []},
"receive": {"data_dir": self.build_default_receive_data_dir()},
"website": {"disable_csp": False, "filenames": []},
+ "chat": {"room": "default"},
}
self._settings = {}
@@ -98,7 +102,7 @@ class ModeSettings:
elif self.common.platform == "Windows":
# On Windows, os.path.expanduser() needs to use backslash, or else it
# retains the forward slash, which breaks opening the folder in explorer.
- return os.path.expanduser("~\OnionShare")
+ return os.path.expanduser("~\\OnionShare")
else:
# All other OSes
return os.path.expanduser("~/OnionShare")
diff --git a/onionshare/onion.py b/cli/onionshare_cli/onion.py
index 88d72496..02fd3263 100644
--- a/onionshare/onion.py
+++ b/cli/onionshare_cli/onion.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,9 +25,11 @@ from Crypto.PublicKey import RSA
import base64, os, sys, tempfile, shutil, urllib, platform, subprocess, time, shlex
from distutils.version import LooseVersion as Version
-from . import common, strings
+from . import common
from .settings import Settings
+# TODO: Figure out how to localize this for the GUI
+
class TorErrorAutomatic(Exception):
"""
@@ -150,7 +152,7 @@ class Onion(object):
is necessary for status updates to reach the GUI.
"""
- def __init__(self, common, use_tmp_dir=False):
+ def __init__(self, common, use_tmp_dir=False, get_tor_paths=None):
self.common = common
self.common.log("Onion", "__init__")
@@ -165,12 +167,14 @@ class Onion(object):
self.bundle_tor_supported = True
# Set the path of the tor binary, for bundled tor
+ if not get_tor_paths:
+ get_tor_paths = self.common.get_tor_paths
(
self.tor_path,
self.tor_geo_ip_file_path,
self.tor_geo_ipv6_file_path,
self.obfs4proxy_file_path,
- ) = self.common.get_tor_paths()
+ ) = get_tor_paths()
# The tor process
self.tor_proc = None
@@ -181,6 +185,9 @@ class Onion(object):
# Start out not connected to Tor
self.connected_to_tor = False
+ # Assigned later if we are using stealth mode
+ self.auth_string = None
+
def connect(
self,
custom_settings=None,
@@ -207,15 +214,14 @@ class Onion(object):
self.common.load_settings()
self.settings = self.common.settings
- strings.load_strings(self.common)
-
# The Tor controller
self.c = None
if self.settings.get("connection_type") == "bundled":
if not self.bundle_tor_supported:
raise BundledTorNotSupported(
- strings._("settings_error_bundled_tor_not_supported")
+ # strings._("settings_error_bundled_tor_not_supported")
+ "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS."
)
# Create a torrc for this session
@@ -241,7 +247,7 @@ class Onion(object):
try:
self.tor_socks_port = self.common.get_available_port(1000, 65535)
except:
- raise OSError(strings._("no_available_port"))
+ raise OSError("OnionShare port not available")
self.tor_torrc = os.path.join(self.tor_data_directory_name, "torrc")
if self.common.platform == "Windows" or self.common.platform == "Darwin":
@@ -253,7 +259,7 @@ class Onion(object):
try:
self.tor_control_port = self.common.get_available_port(1000, 65535)
except:
- raise OSError(strings._("no_available_port"))
+ raise OSError("OnionShare port not available")
self.tor_control_socket = None
else:
# Linux and BSD can use unix sockets
@@ -357,7 +363,8 @@ class Onion(object):
self.c.authenticate()
except Exception as e:
raise BundledTorBroken(
- strings._("settings_error_bundled_tor_broken").format(e.args[0])
+ # strings._("settings_error_bundled_tor_broken").format(e.args[0])
+ "OnionShare could not connect to Tor:\n{}".format(e.args[0])
)
while True:
@@ -371,7 +378,10 @@ class Onion(object):
summary = res_parts[4].split("=")[1]
# "\033[K" clears the rest of the line
- print(f"Connecting to the Tor network: {progress}% - {summary}\033[K")
+ print(
+ f"\rConnecting to the Tor network: {progress}% - {summary}\033[K",
+ end="",
+ )
if callable(tor_status_update_func):
if not tor_status_update_func(progress, summary):
@@ -403,7 +413,8 @@ class Onion(object):
try:
self.tor_proc.terminate()
raise BundledTorTimeout(
- strings._("settings_error_bundled_tor_timeout")
+ # strings._("settings_error_bundled_tor_timeout")
+ "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?"
)
except FileNotFoundError:
pass
@@ -461,18 +472,27 @@ class Onion(object):
)
elif self.common.platform == "Windows":
# Windows doesn't support unix sockets
- raise TorErrorAutomatic(strings._("settings_error_automatic"))
+ raise TorErrorAutomatic(
+ # strings._("settings_error_automatic")
+ "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
+ )
self.c = Controller.from_socket_file(path=socket_file_path)
except:
- raise TorErrorAutomatic(strings._("settings_error_automatic"))
+ raise TorErrorAutomatic(
+ # strings._("settings_error_automatic")
+ "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
+ )
# Try authenticating
try:
self.c.authenticate()
except:
- raise TorErrorAutomatic(strings._("settings_error_automatic"))
+ raise TorErrorAutomatic(
+ # strings._("settings_error_automatic")
+ "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?"
+ )
else:
# Use specific settings to connect to tor
@@ -489,19 +509,24 @@ class Onion(object):
path=self.settings.get("socket_file_path")
)
else:
- raise TorErrorInvalidSetting(strings._("settings_error_unknown"))
+ raise TorErrorInvalidSetting(
+ # strings._("settings_error_unknown")
+ "Can't connect to Tor controller because your settings don't make sense."
+ )
except:
if self.settings.get("connection_type") == "control_port":
raise TorErrorSocketPort(
- strings._("settings_error_socket_port").format(
+ # strings._("settings_error_socket_port")
+ "Can't connect to the Tor controller at {}:{}.".format(
self.settings.get("control_port_address"),
self.settings.get("control_port_port"),
)
)
else:
raise TorErrorSocketFile(
- strings._("settings_error_socket_file").format(
+ # strings._("settings_error_socket_file")
+ "Can't connect to the Tor controller using socket file {}.".format(
self.settings.get("socket_file_path")
)
)
@@ -513,19 +538,25 @@ class Onion(object):
elif self.settings.get("auth_type") == "password":
self.c.authenticate(self.settings.get("auth_password"))
else:
- raise TorErrorInvalidSetting(strings._("settings_error_unknown"))
+ raise TorErrorInvalidSetting(
+ # strings._("settings_error_unknown")
+ "Can't connect to Tor controller because your settings don't make sense."
+ )
except MissingPassword:
raise TorErrorMissingPassword(
- strings._("settings_error_missing_password")
+ # strings._("settings_error_missing_password")
+ "Connected to Tor controller, but it requires a password to authenticate."
)
except UnreadableCookieFile:
raise TorErrorUnreadableCookieFile(
- strings._("settings_error_unreadable_cookie_file")
+ # strings._("settings_error_unreadable_cookie_file")
+ "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file."
)
except AuthenticationFailure:
raise TorErrorAuthError(
- strings._("settings_error_auth").format(
+ # strings._("settings_error_auth")
+ "Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?".format(
self.settings.get("control_port_address"),
self.settings.get("control_port_port"),
)
@@ -549,7 +580,11 @@ class Onion(object):
# Do the versions of stem and tor that I'm using support stealth onion services?
try:
res = self.c.create_ephemeral_hidden_service(
- {1: 1}, basic_auth={"onionshare": None}, await_publication=False
+ {1: 1},
+ basic_auth={"onionshare": None},
+ await_publication=False,
+ key_type="NEW",
+ key_content="RSA1024",
)
tmp_service_id = res.service_id
self.c.remove_ephemeral_hidden_service(tmp_service_id)
@@ -580,9 +615,15 @@ class Onion(object):
self.common.log("Onion", "start_onion_service", f"port={port}")
if not self.supports_ephemeral:
- raise TorTooOld(strings._("error_ephemeral_not_supported"))
+ raise TorTooOld(
+ # strings._("error_ephemeral_not_supported")
+ "Your version of Tor is too old, ephemeral onion services are not supported"
+ )
if mode_settings.get("general", "client_auth") and not self.supports_stealth:
- raise TorTooOld(strings._("error_stealth_not_supported"))
+ raise TorTooOld(
+ # strings._("error_stealth_not_supported")
+ "Your version of Tor is too old, stealth onion services are not supported"
+ )
auth_cookie = None
if mode_settings.get("general", "client_auth"):
@@ -640,7 +681,8 @@ class Onion(object):
except ProtocolError as e:
raise TorErrorProtocolError(
- strings._("error_tor_protocol_error").format(e.args[0])
+ # strings._("error_tor_protocol_error")
+ "Tor error: {}".format(e.args[0])
)
onion_host = res.service_id + ".onion"
@@ -655,8 +697,8 @@ class Onion(object):
"onion", "hidservauth_string"
):
auth_cookie = list(res.client_auth.values())[0]
- auth_string = f"HidServAuth {onion_host} {auth_cookie}"
- mode_settings.set("onion", "hidservauth_string", auth_string)
+ self.auth_string = f"HidServAuth {onion_host} {auth_cookie}"
+ mode_settings.set("onion", "hidservauth_string", self.auth_string)
return onion_host
@@ -665,15 +707,16 @@ class Onion(object):
Stop a specific onion service
"""
onion_host = mode_settings.get("general", "service_id")
- self.common.log("Onion", "stop_onion_service", f"onion host: {onion_host}")
- try:
- self.c.remove_ephemeral_hidden_service(
- mode_settings.get("general", "service_id")
- )
- except:
- self.common.log(
- "Onion", "stop_onion_service", f"failed to remove {onion_host}"
- )
+ if onion_host:
+ self.common.log("Onion", "stop_onion_service", f"onion host: {onion_host}")
+ try:
+ self.c.remove_ephemeral_hidden_service(
+ mode_settings.get("general", "service_id")
+ )
+ except:
+ self.common.log(
+ "Onion", "stop_onion_service", f"failed to remove {onion_host}"
+ )
def cleanup(self, stop_tor=True):
"""
@@ -704,7 +747,7 @@ class Onion(object):
if self.tor_proc:
self.tor_proc.terminate()
time.sleep(0.2)
- if self.tor_proc.poll() == None:
+ if self.tor_proc.poll() is None:
self.common.log(
"Onion",
"cleanup",
@@ -713,7 +756,7 @@ class Onion(object):
try:
self.tor_proc.kill()
time.sleep(0.2)
- if self.tor_proc.poll() == None:
+ if self.tor_proc.poll() is None:
self.common.log(
"Onion",
"cleanup",
diff --git a/onionshare/onionshare.py b/cli/onionshare_cli/onionshare.py
index 0fa25767..f74672ce 100644
--- a/onionshare/onionshare.py
+++ b/cli/onionshare_cli/onionshare.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import os, shutil
-from . import common, strings
+from . import common
from .onion import TorTooOld, TorErrorProtocolError
from .common import AutoStopTimer
@@ -61,7 +61,7 @@ class OnionShare(object):
try:
self.port = self.common.get_available_port(17600, 17650)
except:
- raise OSError(strings._("no_available_port"))
+ raise OSError("Cannot find an available OnionShare port")
def start_onion_service(self, mode_settings, await_publication=True):
"""
diff --git a/share/static/css/style.css b/cli/onionshare_cli/resources/static/css/style.css
index af41b155..88d9cb79 100644
--- a/share/static/css/style.css
+++ b/cli/onionshare_cli/resources/static/css/style.css
@@ -12,6 +12,13 @@ body {
font-family: Helvetica, sans-serif;
}
+.d-flex {
+ display: flex;
+ flex-wrap: wrap;
+ justify-content: space-between;
+ align-items: center;
+}
+
header {
border-bottom: 1px solid rgba(0, 0, 0, 0.1);
background: #fcfcfc;
@@ -34,14 +41,7 @@ header h1 {
color: #666666;
}
-header .right {
- float: right;
- font-size: .75rem;
-}
-
-header .right ul li {
- display: inline;
- margin: 0 0 0 .5rem;
+header .information {
font-size: 1rem;
}
@@ -98,13 +98,13 @@ ul.breadcrumbs li a:link, ul.breadcrumbs li a:visited {
border-bottom: 1px solid #666666;
}
-table.file-list {
+.file-list {
width: 100%;
margin: 0 auto;
border-collapse: collapse;
}
-table.file-list th {
+.file-list .heading {
text-align: left;
text-transform: uppercase;
font-weight: normal;
@@ -112,22 +112,153 @@ table.file-list th {
padding: 0.5rem;
}
-table.file-list tr {
+.file-list div.d-flex {
border-bottom: 1px solid #e0e0e0;
+ justify-content: flex-start;
}
-table.file-list td {
+.file-list div.d-flex div {
white-space: nowrap;
- padding: 0.5rem 10rem 0.5rem 0.8rem;
+ padding: 0.5rem 0.8rem 0.5rem 0.8rem;
}
-table.file-list td img {
+.file-list div.d-flex div img {
vertical-align: middle;
margin-right: 0.5rem;
}
-table.file-list td:last-child {
+.file-list div.d-flex div:last-child {
+ padding-right: 0.8rem;
+ flex-basis: 0;
+ flex-grow: 1;
+}
+
+.file-list div.d-flex div:first-child {
+ flex-basis: 0;
+ flex-grow: 2;
+}
+
+@media (max-width: 950px) {
+ .file-list div.d-flex div:last-child {
+ flex-basis: auto;
+ flex-grow: 0;
+ }
+}
+
+@media (max-width: 655px) {
+ .file-list div.d-flex {
+ display: block;
+ }
+ .file-list div.d-flex span {
+ max-width: 100%;
+ word-break: break-all;
+ white-space: normal;
+ }
+ .file-list div.d-flex #size-header {
+ display: none;
+ }
+ .file-list div.d-flex div:last-child {
+ padding-left: 3.5rem;
+ font-size: 0.85rem;
+ padding-top: 0;
+ }
+ header .information {
+ padding: 1rem 0;
+ }
+}
+
+.chat-container {
+ display: flex;
+ font-family: monospace;
+}
+
+.chat-users {
+ width: 20%;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+ overflow: auto;
+ background: #f2f2f2;
+ margin: 1rem 0 1rem 1rem;
+}
+
+.chat-users .editable-username {
+ display: flex;
+ padding: 1rem;
+ flex-direction: column;
+}
+
+.chat-users .editable-username input {
+ font-family: monospace;
+ font-size: 1em;
+}
+
+.chat-users .editable-username #username-error {
+ color: #c90c0c;
+ margin: 0.5rem;
+}
+
+.chat-users #user-list li {
+ margin-bottom: 1em;
+}
+
+.chat-wrapper {
+ display: flex;
+ flex-direction: column;
+ flex: 1;
+ margin: 1rem 1rem 0 1rem;
+ height: calc(100vh - (65px + 2em));
+}
+
+.chat-wrapper #chat {
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+ flex: 1;
+ overflow: auto;
+ background: #f2f2f2;
+ padding: 0 1rem;
+}
+
+.chat-wrapper .status {
+ font-style: italic;
+ font-size: 0.8em;
+ color: #666666;
+}
+
+.chat-wrapper .username {
+ font-weight: bold;
+ display: block;
+}
+.chat-wrapper .message {
+ font-weight: normal;
+ display: block;
+ margin-bottom: 0.3em;
+}
+
+.chat-wrapper .chat-form {
+ display: block;
+ margin: 0.2rem 1rem 1rem 0;
+ padding: -0.5em;
+}
+
+.chat-wrapper input#new-message {
+ height: 100%;
width: 100%;
+ font-family: monospace;
+ font-size: 1em;
+}
+
+@media (max-width: 992px) {
+ .chat-users .editable-username {
+ display: block;
+ }
+
+ .chat-users input#username {
+ width: 90%;
+ }
+}
+
+.no-js {
+ display: none;
}
.upload-wrapper {
@@ -204,7 +335,7 @@ ul.flashes {
margin: 0;
padding: 0;
width: 800px;
- max-width: 500px;
+ max-width: 100%;
margin: 0 auto;
}
@@ -213,6 +344,7 @@ ul.flashes li {
padding: 5px;
list-style: none;
text-align: center;
+ word-break: break-word;
}
li.error {
diff --git a/share/static/img/ajax.gif b/cli/onionshare_cli/resources/static/img/ajax.gif
index 01d955aa..01d955aa 100644
--- a/share/static/img/ajax.gif
+++ b/cli/onionshare_cli/resources/static/img/ajax.gif
Binary files differ
diff --git a/share/static/img/favicon.ico b/cli/onionshare_cli/resources/static/img/favicon.ico
index 63e65d8b..63e65d8b 100644
--- a/share/static/img/favicon.ico
+++ b/cli/onionshare_cli/resources/static/img/favicon.ico
Binary files differ
diff --git a/share/images/logo.png b/cli/onionshare_cli/resources/static/img/logo.png
index 43884c1f..43884c1f 100644
--- a/share/images/logo.png
+++ b/cli/onionshare_cli/resources/static/img/logo.png
Binary files differ
diff --git a/share/static/img/logo_large.png b/cli/onionshare_cli/resources/static/img/logo_large.png
index ee8f26ac..ee8f26ac 100644
--- a/share/static/img/logo_large.png
+++ b/cli/onionshare_cli/resources/static/img/logo_large.png
Binary files differ
diff --git a/share/static/img/web_file.png b/cli/onionshare_cli/resources/static/img/web_file.png
index 1931aff0..1931aff0 100644
--- a/share/static/img/web_file.png
+++ b/cli/onionshare_cli/resources/static/img/web_file.png
Binary files differ
diff --git a/share/static/img/web_folder.png b/cli/onionshare_cli/resources/static/img/web_folder.png
index 3ca5df21..3ca5df21 100644
--- a/share/static/img/web_folder.png
+++ b/cli/onionshare_cli/resources/static/img/web_folder.png
Binary files differ
diff --git a/cli/onionshare_cli/resources/static/js/chat.js b/cli/onionshare_cli/resources/static/js/chat.js
new file mode 100644
index 00000000..39547725
--- /dev/null
+++ b/cli/onionshare_cli/resources/static/js/chat.js
@@ -0,0 +1,165 @@
+$(function () {
+ $(document).ready(function () {
+ $('.chat-container').removeClass('no-js');
+ var socket = io.connect('http://' + document.domain + ':' + location.port + '/chat');
+
+ // Store current username received from app context
+ var current_username = $('#username').val();
+
+ // On browser connect, emit a socket event to be added to
+ // room and assigned random username
+ socket.on('connect', function () {
+ socket.emit('joined', {});
+ });
+
+ // Triggered on any status change by any user, such as some
+ // user joined, or changed username, or left, etc.
+ socket.on('status', function (data) {
+ addMessageToRoom(data, current_username, 'status');
+ console.log(data, current_username);
+ });
+
+ // Triggered when message is received from a user. Even when sent
+ // by self, it get triggered after the server sends back the emit.
+ socket.on('message', function (data) {
+ addMessageToRoom(data, current_username, 'chat');
+ console.log(data, current_username);
+ });
+
+ // Triggered when disconnected either by server stop or timeout
+ socket.on('disconnect', function (data) {
+ addMessageToRoom({ 'msg': 'The chat server is disconnected.' }, current_username, 'status');
+ })
+ socket.on('connect_error', function (error) {
+ console.log("error");
+ })
+
+ // Trigger new message on enter or click of send message button.
+ $('#new-message').on('keypress', function (e) {
+ var code = e.keyCode || e.which;
+ if (code == 13) {
+ emitMessage(socket);
+ }
+ });
+
+ // Keep buttons disabled unless changed or not empty
+ $('#username').on('keyup', function (event) {
+ if ($('#username').val() !== '' && $('#username').val() !== current_username) {
+ if (event.keyCode == 13) {
+ current_username = updateUsername(socket) || current_username;
+ }
+ }
+ });
+
+ // Show warning of losing data
+ $(window).on('beforeunload', function (e) {
+ e.preventDefault();
+ e.returnValue = '';
+ return '';
+ });
+ });
+});
+
+var addMessageToRoom = function (data, current_username, messageType) {
+ var scrollDiff = getScrollDiffBefore();
+ if (messageType === 'status') {
+ addStatusMessage(data.msg);
+ if (data.connected_users) {
+ addUserList(data.connected_users, current_username);
+ }
+ } else if (messageType === 'chat') {
+ addChatMessage(data.username, data.msg)
+ }
+ scrollBottomMaybe(scrollDiff);
+}
+
+var emitMessage = function (socket) {
+ var text = $('#new-message').val();
+ $('#new-message').val('');
+ $('#chat').scrollTop($('#chat')[0].scrollHeight);
+ socket.emit('text', { msg: text });
+}
+
+var updateUsername = function (socket) {
+ var username = $('#username').val();
+ if (!checkUsernameExists(username)) {
+ socket.emit('update_username', { username: username });
+ $.ajax({
+ method: 'POST',
+ url: `http://${document.domain}:${location.port}/update-session-username`,
+ contentType: 'application/json',
+ dataType: 'json',
+ data: JSON.stringify({ 'username': username })
+ }).done(function (response) {
+ console.log(response);
+ });
+ return username;
+ }
+ return false;
+}
+
+/************************************/
+/********* Util Functions ***********/
+/************************************/
+
+var createUserListHTML = function (connected_users, current_user) {
+ var userListHTML = '';
+ connected_users.sort();
+ connected_users.forEach(function (username) {
+ if (username !== current_user) {
+ userListHTML += `<li>${sanitizeHTML(username)}</li>`;
+ }
+ });
+ return userListHTML;
+}
+
+var checkUsernameExists = function (username) {
+ $('#username-error').text('');
+ var userMatches = $('#user-list li').filter(function () {
+ return $(this).text() === username;
+ });
+ if (userMatches.length) {
+ $('#username-error').text('User with that username exists!');
+ return true;
+ }
+ return false;
+}
+
+var getScrollDiffBefore = function () {
+ return $('#chat').scrollTop() - ($('#chat')[0].scrollHeight - $('#chat')[0].offsetHeight);
+}
+
+var scrollBottomMaybe = function (scrollDiff) {
+ // Scrolls to bottom if the user is scrolled at bottom
+ // if the user has scrolled upp, it wont scroll at bottom.
+ // Note: when a user themselves send a message, it will still
+ // scroll to the bottom even if they had scrolled up before.
+ if (scrollDiff > 0) {
+ $('#chat').scrollTop($('#chat')[0].scrollHeight);
+ }
+}
+
+var addStatusMessage = function (message) {
+ $('#chat').append(
+ `<p class="status">${sanitizeHTML(message)}</p>`
+ );
+}
+
+var addChatMessage = function (username, message) {
+ $('#chat').append(`<p><span class="username">${sanitizeHTML(username)}</span><span class="message">${sanitizeHTML(message)}</span></p>`);
+}
+
+var addUserList = function (connected_users, current_username) {
+ $('#user-list').html(
+ createUserListHTML(
+ connected_users,
+ current_username
+ )
+ );
+}
+
+var sanitizeHTML = function (str) {
+ var temp = document.createElement('span');
+ temp.textContent = str;
+ return temp.innerHTML;
+};
diff --git a/share/static/js/jquery-3.5.1.min.js b/cli/onionshare_cli/resources/static/js/jquery-3.5.1.min.js
index b0614034..b0614034 100644
--- a/share/static/js/jquery-3.5.1.min.js
+++ b/cli/onionshare_cli/resources/static/js/jquery-3.5.1.min.js
diff --git a/share/static/js/receive.js b/cli/onionshare_cli/resources/static/js/receive.js
index eac67412..eac67412 100644
--- a/share/static/js/receive.js
+++ b/cli/onionshare_cli/resources/static/js/receive.js
diff --git a/share/static/js/send.js b/cli/onionshare_cli/resources/static/js/send.js
index 43e9892d..43e9892d 100644
--- a/share/static/js/send.js
+++ b/cli/onionshare_cli/resources/static/js/send.js
diff --git a/cli/onionshare_cli/resources/static/js/socket.io.min.js b/cli/onionshare_cli/resources/static/js/socket.io.min.js
new file mode 100644
index 00000000..b622e1b9
--- /dev/null
+++ b/cli/onionshare_cli/resources/static/js/socket.io.min.js
@@ -0,0 +1,3 @@
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;"undefined"!=typeof window?e=window:"undefined"!=typeof global?e=global:"undefined"!=typeof self&&(e=self),e.io=t()}}(function(){var t;return function e(t,n,r){function o(s,a){if(!n[s]){if(!t[s]){var c="function"==typeof require&&require;if(!a&&c)return c(s,!0);if(i)return i(s,!0);throw new Error("Cannot find module '"+s+"'")}var p=n[s]={exports:{}};t[s][0].call(p.exports,function(e){var n=t[s][1][e];return o(n?n:e)},p,p.exports,e,t,n,r)}return n[s].exports}for(var i="function"==typeof require&&require,s=0;s<r.length;s++)o(r[s]);return o}({1:[function(t,e){e.exports=t("./lib/")},{"./lib/":2}],2:[function(t,e,n){function r(t,e){"object"==typeof t&&(e=t,t=void 0),e=e||{};var n,r=o(t),i=r.source,p=r.id;return e.forceNew||e["force new connection"]||!1===e.multiplex?(a("ignoring socket cache for %s",i),n=s(i,e)):(c[p]||(a("new io instance for %s",i),c[p]=s(i,e)),n=c[p]),n.socket(r.path)}var o=t("./url"),i=t("socket.io-parser"),s=t("./manager"),a=t("debug")("socket.io-client");e.exports=n=r;var c=n.managers={};n.protocol=i.protocol,n.connect=r,n.Manager=t("./manager"),n.Socket=t("./socket")},{"./manager":3,"./socket":5,"./url":6,debug:10,"socket.io-parser":46}],3:[function(t,e){function n(t,e){return this instanceof n?(t&&"object"==typeof t&&(e=t,t=void 0),e=e||{},e.path=e.path||"/socket.io",this.nsps={},this.subs=[],this.opts=e,this.reconnection(e.reconnection!==!1),this.reconnectionAttempts(e.reconnectionAttempts||1/0),this.reconnectionDelay(e.reconnectionDelay||1e3),this.reconnectionDelayMax(e.reconnectionDelayMax||5e3),this.randomizationFactor(e.randomizationFactor||.5),this.backoff=new f({min:this.reconnectionDelay(),max:this.reconnectionDelayMax(),jitter:this.randomizationFactor()}),this.timeout(null==e.timeout?2e4:e.timeout),this.readyState="closed",this.uri=t,this.connected=[],this.encoding=!1,this.packetBuffer=[],this.encoder=new s.Encoder,this.decoder=new s.Decoder,this.autoConnect=e.autoConnect!==!1,void(this.autoConnect&&this.open())):new n(t,e)}var r=(t("./url"),t("engine.io-client")),o=t("./socket"),i=t("component-emitter"),s=t("socket.io-parser"),a=t("./on"),c=t("component-bind"),p=(t("object-component"),t("debug")("socket.io-client:manager")),u=t("indexof"),f=t("backo2");e.exports=n,n.prototype.emitAll=function(){this.emit.apply(this,arguments);for(var t in this.nsps)this.nsps[t].emit.apply(this.nsps[t],arguments)},n.prototype.updateSocketIds=function(){for(var t in this.nsps)this.nsps[t].id=this.engine.id},i(n.prototype),n.prototype.reconnection=function(t){return arguments.length?(this._reconnection=!!t,this):this._reconnection},n.prototype.reconnectionAttempts=function(t){return arguments.length?(this._reconnectionAttempts=t,this):this._reconnectionAttempts},n.prototype.reconnectionDelay=function(t){return arguments.length?(this._reconnectionDelay=t,this.backoff&&this.backoff.setMin(t),this):this._reconnectionDelay},n.prototype.randomizationFactor=function(t){return arguments.length?(this._randomizationFactor=t,this.backoff&&this.backoff.setJitter(t),this):this._randomizationFactor},n.prototype.reconnectionDelayMax=function(t){return arguments.length?(this._reconnectionDelayMax=t,this.backoff&&this.backoff.setMax(t),this):this._reconnectionDelayMax},n.prototype.timeout=function(t){return arguments.length?(this._timeout=t,this):this._timeout},n.prototype.maybeReconnectOnOpen=function(){!this.reconnecting&&this._reconnection&&0===this.backoff.attempts&&this.reconnect()},n.prototype.open=n.prototype.connect=function(t){if(p("readyState %s",this.readyState),~this.readyState.indexOf("open"))return this;p("opening %s",this.uri),this.engine=r(this.uri,this.opts);var e=this.engine,n=this;this.readyState="opening",this.skipReconnect=!1;var o=a(e,"open",function(){n.onopen(),t&&t()}),i=a(e,"error",function(e){if(p("connect_error"),n.cleanup(),n.readyState="closed",n.emitAll("connect_error",e),t){var r=new Error("Connection error");r.data=e,t(r)}else n.maybeReconnectOnOpen()});if(!1!==this._timeout){var s=this._timeout;p("connect attempt will timeout after %d",s);var c=setTimeout(function(){p("connect attempt timed out after %d",s),o.destroy(),e.close(),e.emit("error","timeout"),n.emitAll("connect_timeout",s)},s);this.subs.push({destroy:function(){clearTimeout(c)}})}return this.subs.push(o),this.subs.push(i),this},n.prototype.onopen=function(){p("open"),this.cleanup(),this.readyState="open",this.emit("open");var t=this.engine;this.subs.push(a(t,"data",c(this,"ondata"))),this.subs.push(a(this.decoder,"decoded",c(this,"ondecoded"))),this.subs.push(a(t,"error",c(this,"onerror"))),this.subs.push(a(t,"close",c(this,"onclose")))},n.prototype.ondata=function(t){this.decoder.add(t)},n.prototype.ondecoded=function(t){this.emit("packet",t)},n.prototype.onerror=function(t){p("error",t),this.emitAll("error",t)},n.prototype.socket=function(t){var e=this.nsps[t];if(!e){e=new o(this,t),this.nsps[t]=e;var n=this;e.on("connect",function(){e.id=n.engine.id,~u(n.connected,e)||n.connected.push(e)})}return e},n.prototype.destroy=function(t){var e=u(this.connected,t);~e&&this.connected.splice(e,1),this.connected.length||this.close()},n.prototype.packet=function(t){p("writing packet %j",t);var e=this;e.encoding?e.packetBuffer.push(t):(e.encoding=!0,this.encoder.encode(t,function(t){for(var n=0;n<t.length;n++)e.engine.write(t[n]);e.encoding=!1,e.processPacketQueue()}))},n.prototype.processPacketQueue=function(){if(this.packetBuffer.length>0&&!this.encoding){var t=this.packetBuffer.shift();this.packet(t)}},n.prototype.cleanup=function(){for(var t;t=this.subs.shift();)t.destroy();this.packetBuffer=[],this.encoding=!1,this.decoder.destroy()},n.prototype.close=n.prototype.disconnect=function(){this.skipReconnect=!0,this.backoff.reset(),this.readyState="closed",this.engine&&this.engine.close()},n.prototype.onclose=function(t){p("close"),this.cleanup(),this.backoff.reset(),this.readyState="closed",this.emit("close",t),this._reconnection&&!this.skipReconnect&&this.reconnect()},n.prototype.reconnect=function(){if(this.reconnecting||this.skipReconnect)return this;var t=this;if(this.backoff.attempts>=this._reconnectionAttempts)p("reconnect failed"),this.backoff.reset(),this.emitAll("reconnect_failed"),this.reconnecting=!1;else{var e=this.backoff.duration();p("will wait %dms before reconnect attempt",e),this.reconnecting=!0;var n=setTimeout(function(){t.skipReconnect||(p("attempting reconnect"),t.emitAll("reconnect_attempt",t.backoff.attempts),t.emitAll("reconnecting",t.backoff.attempts),t.skipReconnect||t.open(function(e){e?(p("reconnect attempt error"),t.reconnecting=!1,t.reconnect(),t.emitAll("reconnect_error",e.data)):(p("reconnect success"),t.onreconnect())}))},e);this.subs.push({destroy:function(){clearTimeout(n)}})}},n.prototype.onreconnect=function(){var t=this.backoff.attempts;this.reconnecting=!1,this.backoff.reset(),this.updateSocketIds(),this.emitAll("reconnect",t)}},{"./on":4,"./socket":5,"./url":6,backo2:7,"component-bind":8,"component-emitter":9,debug:10,"engine.io-client":11,indexof:42,"object-component":43,"socket.io-parser":46}],4:[function(t,e){function n(t,e,n){return t.on(e,n),{destroy:function(){t.removeListener(e,n)}}}e.exports=n},{}],5:[function(t,e,n){function r(t,e){this.io=t,this.nsp=e,this.json=this,this.ids=0,this.acks={},this.io.autoConnect&&this.open(),this.receiveBuffer=[],this.sendBuffer=[],this.connected=!1,this.disconnected=!0}var o=t("socket.io-parser"),i=t("component-emitter"),s=t("to-array"),a=t("./on"),c=t("component-bind"),p=t("debug")("socket.io-client:socket"),u=t("has-binary");e.exports=n=r;var f={connect:1,connect_error:1,connect_timeout:1,disconnect:1,error:1,reconnect:1,reconnect_attempt:1,reconnect_failed:1,reconnect_error:1,reconnecting:1},h=i.prototype.emit;i(r.prototype),r.prototype.subEvents=function(){if(!this.subs){var t=this.io;this.subs=[a(t,"open",c(this,"onopen")),a(t,"packet",c(this,"onpacket")),a(t,"close",c(this,"onclose"))]}},r.prototype.open=r.prototype.connect=function(){return this.connected?this:(this.subEvents(),this.io.open(),"open"==this.io.readyState&&this.onopen(),this)},r.prototype.send=function(){var t=s(arguments);return t.unshift("message"),this.emit.apply(this,t),this},r.prototype.emit=function(t){if(f.hasOwnProperty(t))return h.apply(this,arguments),this;var e=s(arguments),n=o.EVENT;u(e)&&(n=o.BINARY_EVENT);var r={type:n,data:e};return"function"==typeof e[e.length-1]&&(p("emitting packet with ack id %d",this.ids),this.acks[this.ids]=e.pop(),r.id=this.ids++),this.connected?this.packet(r):this.sendBuffer.push(r),this},r.prototype.packet=function(t){t.nsp=this.nsp,this.io.packet(t)},r.prototype.onopen=function(){p("transport is open - connecting"),"/"!=this.nsp&&this.packet({type:o.CONNECT})},r.prototype.onclose=function(t){p("close (%s)",t),this.connected=!1,this.disconnected=!0,delete this.id,this.emit("disconnect",t)},r.prototype.onpacket=function(t){if(t.nsp==this.nsp)switch(t.type){case o.CONNECT:this.onconnect();break;case o.EVENT:this.onevent(t);break;case o.BINARY_EVENT:this.onevent(t);break;case o.ACK:this.onack(t);break;case o.BINARY_ACK:this.onack(t);break;case o.DISCONNECT:this.ondisconnect();break;case o.ERROR:this.emit("error",t.data)}},r.prototype.onevent=function(t){var e=t.data||[];p("emitting event %j",e),null!=t.id&&(p("attaching ack callback to event"),e.push(this.ack(t.id))),this.connected?h.apply(this,e):this.receiveBuffer.push(e)},r.prototype.ack=function(t){var e=this,n=!1;return function(){if(!n){n=!0;var r=s(arguments);p("sending ack %j",r);var i=u(r)?o.BINARY_ACK:o.ACK;e.packet({type:i,id:t,data:r})}}},r.prototype.onack=function(t){p("calling ack %s with %j",t.id,t.data);var e=this.acks[t.id];e.apply(this,t.data),delete this.acks[t.id]},r.prototype.onconnect=function(){this.connected=!0,this.disconnected=!1,this.emit("connect"),this.emitBuffered()},r.prototype.emitBuffered=function(){var t;for(t=0;t<this.receiveBuffer.length;t++)h.apply(this,this.receiveBuffer[t]);for(this.receiveBuffer=[],t=0;t<this.sendBuffer.length;t++)this.packet(this.sendBuffer[t]);this.sendBuffer=[]},r.prototype.ondisconnect=function(){p("server disconnect (%s)",this.nsp),this.destroy(),this.onclose("io server disconnect")},r.prototype.destroy=function(){if(this.subs){for(var t=0;t<this.subs.length;t++)this.subs[t].destroy();this.subs=null}this.io.destroy(this)},r.prototype.close=r.prototype.disconnect=function(){return this.connected&&(p("performing disconnect (%s)",this.nsp),this.packet({type:o.DISCONNECT})),this.destroy(),this.connected&&this.onclose("io client disconnect"),this}},{"./on":4,"component-bind":8,"component-emitter":9,debug:10,"has-binary":38,"socket.io-parser":46,"to-array":50}],6:[function(t,e){(function(n){function r(t,e){var r=t,e=e||n.location;return null==t&&(t=e.protocol+"//"+e.host),"string"==typeof t&&("/"==t.charAt(0)&&(t="/"==t.charAt(1)?e.protocol+t:e.hostname+t),/^(https?|wss?):\/\//.test(t)||(i("protocol-less url %s",t),t="undefined"!=typeof e?e.protocol+"//"+t:"https://"+t),i("parse %s",t),r=o(t)),r.port||(/^(http|ws)$/.test(r.protocol)?r.port="80":/^(http|ws)s$/.test(r.protocol)&&(r.port="443")),r.path=r.path||"/",r.id=r.protocol+"://"+r.host+":"+r.port,r.href=r.protocol+"://"+r.host+(e&&e.port==r.port?"":":"+r.port),r}var o=t("parseuri"),i=t("debug")("socket.io-client:url");e.exports=r}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{debug:10,parseuri:44}],7:[function(t,e){function n(t){t=t||{},this.ms=t.min||100,this.max=t.max||1e4,this.factor=t.factor||2,this.jitter=t.jitter>0&&t.jitter<=1?t.jitter:0,this.attempts=0}e.exports=n,n.prototype.duration=function(){var t=this.ms*Math.pow(this.factor,this.attempts++);if(this.jitter){var e=Math.random(),n=Math.floor(e*this.jitter*t);t=0==(1&Math.floor(10*e))?t-n:t+n}return 0|Math.min(t,this.max)},n.prototype.reset=function(){this.attempts=0},n.prototype.setMin=function(t){this.ms=t},n.prototype.setMax=function(t){this.max=t},n.prototype.setJitter=function(t){this.jitter=t}},{}],8:[function(t,e){var n=[].slice;e.exports=function(t,e){if("string"==typeof e&&(e=t[e]),"function"!=typeof e)throw new Error("bind() requires a function");var r=n.call(arguments,2);return function(){return e.apply(t,r.concat(n.call(arguments)))}}},{}],9:[function(t,e){function n(t){return t?r(t):void 0}function r(t){for(var e in n.prototype)t[e]=n.prototype[e];return t}e.exports=n,n.prototype.on=n.prototype.addEventListener=function(t,e){return this._callbacks=this._callbacks||{},(this._callbacks[t]=this._callbacks[t]||[]).push(e),this},n.prototype.once=function(t,e){function n(){r.off(t,n),e.apply(this,arguments)}var r=this;return this._callbacks=this._callbacks||{},n.fn=e,this.on(t,n),this},n.prototype.off=n.prototype.removeListener=n.prototype.removeAllListeners=n.prototype.removeEventListener=function(t,e){if(this._callbacks=this._callbacks||{},0==arguments.length)return this._callbacks={},this;var n=this._callbacks[t];if(!n)return this;if(1==arguments.length)return delete this._callbacks[t],this;for(var r,o=0;o<n.length;o++)if(r=n[o],r===e||r.fn===e){n.splice(o,1);break}return this},n.prototype.emit=function(t){this._callbacks=this._callbacks||{};var e=[].slice.call(arguments,1),n=this._callbacks[t];if(n){n=n.slice(0);for(var r=0,o=n.length;o>r;++r)n[r].apply(this,e)}return this},n.prototype.listeners=function(t){return this._callbacks=this._callbacks||{},this._callbacks[t]||[]},n.prototype.hasListeners=function(t){return!!this.listeners(t).length}},{}],10:[function(t,e){function n(t){return n.enabled(t)?function(e){e=r(e);var o=new Date,i=o-(n[t]||o);n[t]=o,e=t+" "+e+" +"+n.humanize(i),window.console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}:function(){}}function r(t){return t instanceof Error?t.stack||t.message:t}e.exports=n,n.names=[],n.skips=[],n.enable=function(t){try{localStorage.debug=t}catch(e){}for(var r=(t||"").split(/[\s,]+/),o=r.length,i=0;o>i;i++)t=r[i].replace("*",".*?"),"-"===t[0]?n.skips.push(new RegExp("^"+t.substr(1)+"$")):n.names.push(new RegExp("^"+t+"$"))},n.disable=function(){n.enable("")},n.humanize=function(t){var e=1e3,n=6e4,r=60*n;return t>=r?(t/r).toFixed(1)+"h":t>=n?(t/n).toFixed(1)+"m":t>=e?(t/e|0)+"s":t+"ms"},n.enabled=function(t){for(var e=0,r=n.skips.length;r>e;e++)if(n.skips[e].test(t))return!1;for(var e=0,r=n.names.length;r>e;e++)if(n.names[e].test(t))return!0;return!1};try{window.localStorage&&n.enable(localStorage.debug)}catch(o){}},{}],11:[function(t,e){e.exports=t("./lib/")},{"./lib/":12}],12:[function(t,e){e.exports=t("./socket"),e.exports.parser=t("engine.io-parser")},{"./socket":13,"engine.io-parser":25}],13:[function(t,e){(function(n){function r(t,e){if(!(this instanceof r))return new r(t,e);if(e=e||{},t&&"object"==typeof t&&(e=t,t=null),t&&(t=u(t),e.host=t.host,e.secure="https"==t.protocol||"wss"==t.protocol,e.port=t.port,t.query&&(e.query=t.query)),this.secure=null!=e.secure?e.secure:n.location&&"https:"==location.protocol,e.host){var o=e.host.split(":");e.hostname=o.shift(),o.length?e.port=o.pop():e.port||(e.port=this.secure?"443":"80")}this.agent=e.agent||!1,this.hostname=e.hostname||(n.location?location.hostname:"localhost"),this.port=e.port||(n.location&&location.port?location.port:this.secure?443:80),this.query=e.query||{},"string"==typeof this.query&&(this.query=h.decode(this.query)),this.upgrade=!1!==e.upgrade,this.path=(e.path||"/engine.io").replace(/\/$/,"")+"/",this.forceJSONP=!!e.forceJSONP,this.jsonp=!1!==e.jsonp,this.forceBase64=!!e.forceBase64,this.enablesXDR=!!e.enablesXDR,this.timestampParam=e.timestampParam||"t",this.timestampRequests=e.timestampRequests,this.transports=e.transports||["polling","websocket"],this.readyState="",this.writeBuffer=[],this.callbackBuffer=[],this.policyPort=e.policyPort||843,this.rememberUpgrade=e.rememberUpgrade||!1,this.binaryType=null,this.onlyBinaryUpgrades=e.onlyBinaryUpgrades,this.pfx=e.pfx||null,this.key=e.key||null,this.passphrase=e.passphrase||null,this.cert=e.cert||null,this.ca=e.ca||null,this.ciphers=e.ciphers||null,this.rejectUnauthorized=e.rejectUnauthorized||null,this.open()}function o(t){var e={};for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n]);return e}var i=t("./transports"),s=t("component-emitter"),a=t("debug")("engine.io-client:socket"),c=t("indexof"),p=t("engine.io-parser"),u=t("parseuri"),f=t("parsejson"),h=t("parseqs");e.exports=r,r.priorWebsocketSuccess=!1,s(r.prototype),r.protocol=p.protocol,r.Socket=r,r.Transport=t("./transport"),r.transports=t("./transports"),r.parser=t("engine.io-parser"),r.prototype.createTransport=function(t){a('creating transport "%s"',t);var e=o(this.query);e.EIO=p.protocol,e.transport=t,this.id&&(e.sid=this.id);var n=new i[t]({agent:this.agent,hostname:this.hostname,port:this.port,secure:this.secure,path:this.path,query:e,forceJSONP:this.forceJSONP,jsonp:this.jsonp,forceBase64:this.forceBase64,enablesXDR:this.enablesXDR,timestampRequests:this.timestampRequests,timestampParam:this.timestampParam,policyPort:this.policyPort,socket:this,pfx:this.pfx,key:this.key,passphrase:this.passphrase,cert:this.cert,ca:this.ca,ciphers:this.ciphers,rejectUnauthorized:this.rejectUnauthorized});return n},r.prototype.open=function(){var t;if(this.rememberUpgrade&&r.priorWebsocketSuccess&&-1!=this.transports.indexOf("websocket"))t="websocket";else{if(0==this.transports.length){var e=this;return void setTimeout(function(){e.emit("error","No transports available")},0)}t=this.transports[0]}this.readyState="opening";var t;try{t=this.createTransport(t)}catch(n){return this.transports.shift(),void this.open()}t.open(),this.setTransport(t)},r.prototype.setTransport=function(t){a("setting transport %s",t.name);var e=this;this.transport&&(a("clearing existing transport %s",this.transport.name),this.transport.removeAllListeners()),this.transport=t,t.on("drain",function(){e.onDrain()}).on("packet",function(t){e.onPacket(t)}).on("error",function(t){e.onError(t)}).on("close",function(){e.onClose("transport close")})},r.prototype.probe=function(t){function e(){if(h.onlyBinaryUpgrades){var e=!this.supportsBinary&&h.transport.supportsBinary;f=f||e}f||(a('probe transport "%s" opened',t),u.send([{type:"ping",data:"probe"}]),u.once("packet",function(e){if(!f)if("pong"==e.type&&"probe"==e.data){if(a('probe transport "%s" pong',t),h.upgrading=!0,h.emit("upgrading",u),!u)return;r.priorWebsocketSuccess="websocket"==u.name,a('pausing current transport "%s"',h.transport.name),h.transport.pause(function(){f||"closed"!=h.readyState&&(a("changing transport and sending upgrade packet"),p(),h.setTransport(u),u.send([{type:"upgrade"}]),h.emit("upgrade",u),u=null,h.upgrading=!1,h.flush())})}else{a('probe transport "%s" failed',t);var n=new Error("probe error");n.transport=u.name,h.emit("upgradeError",n)}}))}function n(){f||(f=!0,p(),u.close(),u=null)}function o(e){var r=new Error("probe error: "+e);r.transport=u.name,n(),a('probe transport "%s" failed because of error: %s',t,e),h.emit("upgradeError",r)}function i(){o("transport closed")}function s(){o("socket closed")}function c(t){u&&t.name!=u.name&&(a('"%s" works - aborting "%s"',t.name,u.name),n())}function p(){u.removeListener("open",e),u.removeListener("error",o),u.removeListener("close",i),h.removeListener("close",s),h.removeListener("upgrading",c)}a('probing transport "%s"',t);var u=this.createTransport(t,{probe:1}),f=!1,h=this;r.priorWebsocketSuccess=!1,u.once("open",e),u.once("error",o),u.once("close",i),this.once("close",s),this.once("upgrading",c),u.open()},r.prototype.onOpen=function(){if(a("socket open"),this.readyState="open",r.priorWebsocketSuccess="websocket"==this.transport.name,this.emit("open"),this.flush(),"open"==this.readyState&&this.upgrade&&this.transport.pause){a("starting upgrade probes");for(var t=0,e=this.upgrades.length;e>t;t++)this.probe(this.upgrades[t])}},r.prototype.onPacket=function(t){if("opening"==this.readyState||"open"==this.readyState)switch(a('socket receive: type "%s", data "%s"',t.type,t.data),this.emit("packet",t),this.emit("heartbeat"),t.type){case"open":this.onHandshake(f(t.data));break;case"pong":this.setPing();break;case"error":var e=new Error("server error");e.code=t.data,this.emit("error",e);break;case"message":this.emit("data",t.data),this.emit("message",t.data)}else a('packet received with socket readyState "%s"',this.readyState)},r.prototype.onHandshake=function(t){this.emit("handshake",t),this.id=t.sid,this.transport.query.sid=t.sid,this.upgrades=this.filterUpgrades(t.upgrades),this.pingInterval=t.pingInterval,this.pingTimeout=t.pingTimeout,this.onOpen(),"closed"!=this.readyState&&(this.setPing(),this.removeListener("heartbeat",this.onHeartbeat),this.on("heartbeat",this.onHeartbeat))},r.prototype.onHeartbeat=function(t){clearTimeout(this.pingTimeoutTimer);var e=this;e.pingTimeoutTimer=setTimeout(function(){"closed"!=e.readyState&&e.onClose("ping timeout")},t||e.pingInterval+e.pingTimeout)},r.prototype.setPing=function(){var t=this;clearTimeout(t.pingIntervalTimer),t.pingIntervalTimer=setTimeout(function(){a("writing ping packet - expecting pong within %sms",t.pingTimeout),t.ping(),t.onHeartbeat(t.pingTimeout)},t.pingInterval)},r.prototype.ping=function(){this.sendPacket("ping")},r.prototype.onDrain=function(){for(var t=0;t<this.prevBufferLen;t++)this.callbackBuffer[t]&&this.callbackBuffer[t]();this.writeBuffer.splice(0,this.prevBufferLen),this.callbackBuffer.splice(0,this.prevBufferLen),this.prevBufferLen=0,0==this.writeBuffer.length?this.emit("drain"):this.flush()},r.prototype.flush=function(){"closed"!=this.readyState&&this.transport.writable&&!this.upgrading&&this.writeBuffer.length&&(a("flushing %d packets in socket",this.writeBuffer.length),this.transport.send(this.writeBuffer),this.prevBufferLen=this.writeBuffer.length,this.emit("flush"))},r.prototype.write=r.prototype.send=function(t,e){return this.sendPacket("message",t,e),this},r.prototype.sendPacket=function(t,e,n){if("closing"!=this.readyState&&"closed"!=this.readyState){var r={type:t,data:e};this.emit("packetCreate",r),this.writeBuffer.push(r),this.callbackBuffer.push(n),this.flush()}},r.prototype.close=function(){function t(){r.onClose("forced close"),a("socket closing - telling transport to close"),r.transport.close()}function e(){r.removeListener("upgrade",e),r.removeListener("upgradeError",e),t()}function n(){r.once("upgrade",e),r.once("upgradeError",e)}if("opening"==this.readyState||"open"==this.readyState){this.readyState="closing";var r=this;this.writeBuffer.length?this.once("drain",function(){this.upgrading?n():t()}):this.upgrading?n():t()}return this},r.prototype.onError=function(t){a("socket error %j",t),r.priorWebsocketSuccess=!1,this.emit("error",t),this.onClose("transport error",t)},r.prototype.onClose=function(t,e){if("opening"==this.readyState||"open"==this.readyState||"closing"==this.readyState){a('socket close with reason: "%s"',t);var n=this;clearTimeout(this.pingIntervalTimer),clearTimeout(this.pingTimeoutTimer),setTimeout(function(){n.writeBuffer=[],n.callbackBuffer=[],n.prevBufferLen=0},0),this.transport.removeAllListeners("close"),this.transport.close(),this.transport.removeAllListeners(),this.readyState="closed",this.id=null,this.emit("close",t,e)}},r.prototype.filterUpgrades=function(t){for(var e=[],n=0,r=t.length;r>n;n++)~c(this.transports,t[n])&&e.push(t[n]);return e}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./transport":14,"./transports":15,"component-emitter":9,debug:22,"engine.io-parser":25,indexof:42,parsejson:34,parseqs:35,parseuri:36}],14:[function(t,e){function n(t){this.path=t.path,this.hostname=t.hostname,this.port=t.port,this.secure=t.secure,this.query=t.query,this.timestampParam=t.timestampParam,this.timestampRequests=t.timestampRequests,this.readyState="",this.agent=t.agent||!1,this.socket=t.socket,this.enablesXDR=t.enablesXDR,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized}var r=t("engine.io-parser"),o=t("component-emitter");e.exports=n,o(n.prototype),n.timestamps=0,n.prototype.onError=function(t,e){var n=new Error(t);return n.type="TransportError",n.description=e,this.emit("error",n),this},n.prototype.open=function(){return("closed"==this.readyState||""==this.readyState)&&(this.readyState="opening",this.doOpen()),this},n.prototype.close=function(){return("opening"==this.readyState||"open"==this.readyState)&&(this.doClose(),this.onClose()),this},n.prototype.send=function(t){if("open"!=this.readyState)throw new Error("Transport not open");this.write(t)},n.prototype.onOpen=function(){this.readyState="open",this.writable=!0,this.emit("open")},n.prototype.onData=function(t){var e=r.decodePacket(t,this.socket.binaryType);this.onPacket(e)},n.prototype.onPacket=function(t){this.emit("packet",t)},n.prototype.onClose=function(){this.readyState="closed",this.emit("close")}},{"component-emitter":9,"engine.io-parser":25}],15:[function(t,e,n){(function(e){function r(t){var n,r=!1,a=!1,c=!1!==t.jsonp;if(e.location){var p="https:"==location.protocol,u=location.port;u||(u=p?443:80),r=t.hostname!=location.hostname||u!=t.port,a=t.secure!=p}if(t.xdomain=r,t.xscheme=a,n=new o(t),"open"in n&&!t.forceJSONP)return new i(t);if(!c)throw new Error("JSONP disabled");return new s(t)}var o=t("xmlhttprequest"),i=t("./polling-xhr"),s=t("./polling-jsonp"),a=t("./websocket");n.polling=r,n.websocket=a}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling-jsonp":16,"./polling-xhr":17,"./websocket":19,xmlhttprequest:20}],16:[function(t,e){(function(n){function r(){}function o(t){i.call(this,t),this.query=this.query||{},a||(n.___eio||(n.___eio=[]),a=n.___eio),this.index=a.length;var e=this;a.push(function(t){e.onData(t)}),this.query.j=this.index,n.document&&n.addEventListener&&n.addEventListener("beforeunload",function(){e.script&&(e.script.onerror=r)},!1)}var i=t("./polling"),s=t("component-inherit");e.exports=o;var a,c=/\n/g,p=/\\n/g;s(o,i),o.prototype.supportsBinary=!1,o.prototype.doClose=function(){this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),this.form&&(this.form.parentNode.removeChild(this.form),this.form=null,this.iframe=null),i.prototype.doClose.call(this)},o.prototype.doPoll=function(){var t=this,e=document.createElement("script");this.script&&(this.script.parentNode.removeChild(this.script),this.script=null),e.async=!0,e.src=this.uri(),e.onerror=function(e){t.onError("jsonp poll error",e)};var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(e,n),this.script=e;var r="undefined"!=typeof navigator&&/gecko/i.test(navigator.userAgent);r&&setTimeout(function(){var t=document.createElement("iframe");document.body.appendChild(t),document.body.removeChild(t)},100)},o.prototype.doWrite=function(t,e){function n(){r(),e()}function r(){if(o.iframe)try{o.form.removeChild(o.iframe)}catch(t){o.onError("jsonp polling iframe removal error",t)}try{var e='<iframe src="javascript:0" name="'+o.iframeId+'">';i=document.createElement(e)}catch(t){i=document.createElement("iframe"),i.name=o.iframeId,i.src="javascript:0"}i.id=o.iframeId,o.form.appendChild(i),o.iframe=i}var o=this;if(!this.form){var i,s=document.createElement("form"),a=document.createElement("textarea"),u=this.iframeId="eio_iframe_"+this.index;s.className="socketio",s.style.position="absolute",s.style.top="-1000px",s.style.left="-1000px",s.target=u,s.method="POST",s.setAttribute("accept-charset","utf-8"),a.name="d",s.appendChild(a),document.body.appendChild(s),this.form=s,this.area=a}this.form.action=this.uri(),r(),t=t.replace(p,"\\\n"),this.area.value=t.replace(c,"\\n");try{this.form.submit()}catch(f){}this.iframe.attachEvent?this.iframe.onreadystatechange=function(){"complete"==o.iframe.readyState&&n()}:this.iframe.onload=n}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling":18,"component-inherit":21}],17:[function(t,e){(function(n){function r(){}function o(t){if(c.call(this,t),n.location){var e="https:"==location.protocol,r=location.port;r||(r=e?443:80),this.xd=t.hostname!=n.location.hostname||r!=t.port,this.xs=t.secure!=e}}function i(t){this.method=t.method||"GET",this.uri=t.uri,this.xd=!!t.xd,this.xs=!!t.xs,this.async=!1!==t.async,this.data=void 0!=t.data?t.data:null,this.agent=t.agent,this.isBinary=t.isBinary,this.supportsBinary=t.supportsBinary,this.enablesXDR=t.enablesXDR,this.pfx=t.pfx,this.key=t.key,this.passphrase=t.passphrase,this.cert=t.cert,this.ca=t.ca,this.ciphers=t.ciphers,this.rejectUnauthorized=t.rejectUnauthorized,this.create()}function s(){for(var t in i.requests)i.requests.hasOwnProperty(t)&&i.requests[t].abort()}var a=t("xmlhttprequest"),c=t("./polling"),p=t("component-emitter"),u=t("component-inherit"),f=t("debug")("engine.io-client:polling-xhr");e.exports=o,e.exports.Request=i,u(o,c),o.prototype.supportsBinary=!0,o.prototype.request=function(t){return t=t||{},t.uri=this.uri(),t.xd=this.xd,t.xs=this.xs,t.agent=this.agent||!1,t.supportsBinary=this.supportsBinary,t.enablesXDR=this.enablesXDR,t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized,new i(t)},o.prototype.doWrite=function(t,e){var n="string"!=typeof t&&void 0!==t,r=this.request({method:"POST",data:t,isBinary:n}),o=this;r.on("success",e),r.on("error",function(t){o.onError("xhr post error",t)}),this.sendXhr=r},o.prototype.doPoll=function(){f("xhr poll");var t=this.request(),e=this;t.on("data",function(t){e.onData(t)}),t.on("error",function(t){e.onError("xhr poll error",t)}),this.pollXhr=t},p(i.prototype),i.prototype.create=function(){var t={agent:this.agent,xdomain:this.xd,xscheme:this.xs,enablesXDR:this.enablesXDR};t.pfx=this.pfx,t.key=this.key,t.passphrase=this.passphrase,t.cert=this.cert,t.ca=this.ca,t.ciphers=this.ciphers,t.rejectUnauthorized=this.rejectUnauthorized;var e=this.xhr=new a(t),r=this;try{if(f("xhr open %s: %s",this.method,this.uri),e.open(this.method,this.uri,this.async),this.supportsBinary&&(e.responseType="arraybuffer"),"POST"==this.method)try{this.isBinary?e.setRequestHeader("Content-type","application/octet-stream"):e.setRequestHeader("Content-type","text/plain;charset=UTF-8")}catch(o){}"withCredentials"in e&&(e.withCredentials=!0),this.hasXDR()?(e.onload=function(){r.onLoad()},e.onerror=function(){r.onError(e.responseText)}):e.onreadystatechange=function(){4==e.readyState&&(200==e.status||1223==e.status?r.onLoad():setTimeout(function(){r.onError(e.status)},0))},f("xhr data %s",this.data),e.send(this.data)}catch(o){return void setTimeout(function(){r.onError(o)},0)}n.document&&(this.index=i.requestsCount++,i.requests[this.index]=this)},i.prototype.onSuccess=function(){this.emit("success"),this.cleanup()},i.prototype.onData=function(t){this.emit("data",t),this.onSuccess()},i.prototype.onError=function(t){this.emit("error",t),this.cleanup(!0)},i.prototype.cleanup=function(t){if("undefined"!=typeof this.xhr&&null!==this.xhr){if(this.hasXDR()?this.xhr.onload=this.xhr.onerror=r:this.xhr.onreadystatechange=r,t)try{this.xhr.abort()}catch(e){}n.document&&delete i.requests[this.index],this.xhr=null}},i.prototype.onLoad=function(){var t;try{var e;try{e=this.xhr.getResponseHeader("Content-Type").split(";")[0]}catch(n){}t="application/octet-stream"===e?this.xhr.response:this.supportsBinary?"ok":this.xhr.responseText}catch(n){this.onError(n)}null!=t&&this.onData(t)},i.prototype.hasXDR=function(){return"undefined"!=typeof n.XDomainRequest&&!this.xs&&this.enablesXDR},i.prototype.abort=function(){this.cleanup()},n.document&&(i.requestsCount=0,i.requests={},n.attachEvent?n.attachEvent("onunload",s):n.addEventListener&&n.addEventListener("beforeunload",s,!1))}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./polling":18,"component-emitter":9,"component-inherit":21,debug:22,xmlhttprequest:20}],18:[function(t,e){function n(t){var e=t&&t.forceBase64;
+(!c||e)&&(this.supportsBinary=!1),r.call(this,t)}var r=t("../transport"),o=t("parseqs"),i=t("engine.io-parser"),s=t("component-inherit"),a=t("debug")("engine.io-client:polling");e.exports=n;var c=function(){var e=t("xmlhttprequest"),n=new e({xdomain:!1});return null!=n.responseType}();s(n,r),n.prototype.name="polling",n.prototype.doOpen=function(){this.poll()},n.prototype.pause=function(t){function e(){a("paused"),n.readyState="paused",t()}var n=this;if(this.readyState="pausing",this.polling||!this.writable){var r=0;this.polling&&(a("we are currently polling - waiting to pause"),r++,this.once("pollComplete",function(){a("pre-pause polling complete"),--r||e()})),this.writable||(a("we are currently writing - waiting to pause"),r++,this.once("drain",function(){a("pre-pause writing complete"),--r||e()}))}else e()},n.prototype.poll=function(){a("polling"),this.polling=!0,this.doPoll(),this.emit("poll")},n.prototype.onData=function(t){var e=this;a("polling got data %s",t);var n=function(t){return"opening"==e.readyState&&e.onOpen(),"close"==t.type?(e.onClose(),!1):void e.onPacket(t)};i.decodePayload(t,this.socket.binaryType,n),"closed"!=this.readyState&&(this.polling=!1,this.emit("pollComplete"),"open"==this.readyState?this.poll():a('ignoring poll - transport state "%s"',this.readyState))},n.prototype.doClose=function(){function t(){a("writing close packet"),e.write([{type:"close"}])}var e=this;"open"==this.readyState?(a("transport open - closing"),t()):(a("transport not open - deferring close"),this.once("open",t))},n.prototype.write=function(t){var e=this;this.writable=!1;var n=function(){e.writable=!0,e.emit("drain")},e=this;i.encodePayload(t,this.supportsBinary,function(t){e.doWrite(t,n)})},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"https":"http",n="";return!1!==this.timestampRequests&&(t[this.timestampParam]=+new Date+"-"+r.timestamps++),this.supportsBinary||t.sid||(t.b64=1),t=o.encode(t),this.port&&("https"==e&&443!=this.port||"http"==e&&80!=this.port)&&(n=":"+this.port),t.length&&(t="?"+t),e+"://"+this.hostname+n+this.path+t}},{"../transport":14,"component-inherit":21,debug:22,"engine.io-parser":25,parseqs:35,xmlhttprequest:20}],19:[function(t,e){function n(t){var e=t&&t.forceBase64;e&&(this.supportsBinary=!1),r.call(this,t)}var r=t("../transport"),o=t("engine.io-parser"),i=t("parseqs"),s=t("component-inherit"),a=t("debug")("engine.io-client:websocket"),c=t("ws");e.exports=n,s(n,r),n.prototype.name="websocket",n.prototype.supportsBinary=!0,n.prototype.doOpen=function(){if(this.check()){var t=this.uri(),e=void 0,n={agent:this.agent};n.pfx=this.pfx,n.key=this.key,n.passphrase=this.passphrase,n.cert=this.cert,n.ca=this.ca,n.ciphers=this.ciphers,n.rejectUnauthorized=this.rejectUnauthorized,this.ws=new c(t,e,n),void 0===this.ws.binaryType&&(this.supportsBinary=!1),this.ws.binaryType="arraybuffer",this.addEventListeners()}},n.prototype.addEventListeners=function(){var t=this;this.ws.onopen=function(){t.onOpen()},this.ws.onclose=function(){t.onClose()},this.ws.onmessage=function(e){t.onData(e.data)},this.ws.onerror=function(e){t.onError("websocket error",e)}},"undefined"!=typeof navigator&&/iPad|iPhone|iPod/i.test(navigator.userAgent)&&(n.prototype.onData=function(t){var e=this;setTimeout(function(){r.prototype.onData.call(e,t)},0)}),n.prototype.write=function(t){function e(){n.writable=!0,n.emit("drain")}var n=this;this.writable=!1;for(var r=0,i=t.length;i>r;r++)o.encodePacket(t[r],this.supportsBinary,function(t){try{n.ws.send(t)}catch(e){a("websocket closed before onclose event")}});setTimeout(e,0)},n.prototype.onClose=function(){r.prototype.onClose.call(this)},n.prototype.doClose=function(){"undefined"!=typeof this.ws&&this.ws.close()},n.prototype.uri=function(){var t=this.query||{},e=this.secure?"wss":"ws",n="";return this.port&&("wss"==e&&443!=this.port||"ws"==e&&80!=this.port)&&(n=":"+this.port),this.timestampRequests&&(t[this.timestampParam]=+new Date),this.supportsBinary||(t.b64=1),t=i.encode(t),t.length&&(t="?"+t),e+"://"+this.hostname+n+this.path+t},n.prototype.check=function(){return!(!c||"__initialize"in c&&this.name===n.prototype.name)}},{"../transport":14,"component-inherit":21,debug:22,"engine.io-parser":25,parseqs:35,ws:37}],20:[function(t,e){var n=t("has-cors");e.exports=function(t){var e=t.xdomain,r=t.xscheme,o=t.enablesXDR;try{if("undefined"!=typeof XMLHttpRequest&&(!e||n))return new XMLHttpRequest}catch(i){}try{if("undefined"!=typeof XDomainRequest&&!r&&o)return new XDomainRequest}catch(i){}if(!e)try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(i){}}},{"has-cors":40}],21:[function(t,e){e.exports=function(t,e){var n=function(){};n.prototype=e.prototype,t.prototype=new n,t.prototype.constructor=t}},{}],22:[function(t,e,n){function r(){return"WebkitAppearance"in document.documentElement.style||window.console&&(console.firebug||console.exception&&console.table)||navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31}function o(){var t=arguments,e=this.useColors;if(t[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+t[0]+(e?"%c ":" ")+"+"+n.humanize(this.diff),!e)return t;var r="color: "+this.color;t=[t[0],r,"color: inherit"].concat(Array.prototype.slice.call(t,1));var o=0,i=0;return t[0].replace(/%[a-z%]/g,function(t){"%"!==t&&(o++,"%c"===t&&(i=o))}),t.splice(i,0,r),t}function i(){return"object"==typeof console&&"function"==typeof console.log&&Function.prototype.apply.call(console.log,console,arguments)}function s(t){try{null==t?localStorage.removeItem("debug"):localStorage.debug=t}catch(e){}}function a(){var t;try{t=localStorage.debug}catch(e){}return t}n=e.exports=t("./debug"),n.log=i,n.formatArgs=o,n.save=s,n.load=a,n.useColors=r,n.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],n.formatters.j=function(t){return JSON.stringify(t)},n.enable(a())},{"./debug":23}],23:[function(t,e,n){function r(){return n.colors[u++%n.colors.length]}function o(t){function e(){}function o(){var t=o,e=+new Date,i=e-(p||e);t.diff=i,t.prev=p,t.curr=e,p=e,null==t.useColors&&(t.useColors=n.useColors()),null==t.color&&t.useColors&&(t.color=r());var s=Array.prototype.slice.call(arguments);s[0]=n.coerce(s[0]),"string"!=typeof s[0]&&(s=["%o"].concat(s));var a=0;s[0]=s[0].replace(/%([a-z%])/g,function(e,r){if("%"===e)return e;a++;var o=n.formatters[r];if("function"==typeof o){var i=s[a];e=o.call(t,i),s.splice(a,1),a--}return e}),"function"==typeof n.formatArgs&&(s=n.formatArgs.apply(t,s));var c=o.log||n.log||console.log.bind(console);c.apply(t,s)}e.enabled=!1,o.enabled=!0;var i=n.enabled(t)?o:e;return i.namespace=t,i}function i(t){n.save(t);for(var e=(t||"").split(/[\s,]+/),r=e.length,o=0;r>o;o++)e[o]&&(t=e[o].replace(/\*/g,".*?"),"-"===t[0]?n.skips.push(new RegExp("^"+t.substr(1)+"$")):n.names.push(new RegExp("^"+t+"$")))}function s(){n.enable("")}function a(t){var e,r;for(e=0,r=n.skips.length;r>e;e++)if(n.skips[e].test(t))return!1;for(e=0,r=n.names.length;r>e;e++)if(n.names[e].test(t))return!0;return!1}function c(t){return t instanceof Error?t.stack||t.message:t}n=e.exports=o,n.coerce=c,n.disable=s,n.enable=i,n.enabled=a,n.humanize=t("ms"),n.names=[],n.skips=[],n.formatters={};var p,u=0},{ms:24}],24:[function(t,e){function n(t){var e=/^((?:\d+)?\.?\d+) *(ms|seconds?|s|minutes?|m|hours?|h|days?|d|years?|y)?$/i.exec(t);if(e){var n=parseFloat(e[1]),r=(e[2]||"ms").toLowerCase();switch(r){case"years":case"year":case"y":return n*u;case"days":case"day":case"d":return n*p;case"hours":case"hour":case"h":return n*c;case"minutes":case"minute":case"m":return n*a;case"seconds":case"second":case"s":return n*s;case"ms":return n}}}function r(t){return t>=p?Math.round(t/p)+"d":t>=c?Math.round(t/c)+"h":t>=a?Math.round(t/a)+"m":t>=s?Math.round(t/s)+"s":t+"ms"}function o(t){return i(t,p,"day")||i(t,c,"hour")||i(t,a,"minute")||i(t,s,"second")||t+" ms"}function i(t,e,n){return e>t?void 0:1.5*e>t?Math.floor(t/e)+" "+n:Math.ceil(t/e)+" "+n+"s"}var s=1e3,a=60*s,c=60*a,p=24*c,u=365.25*p;e.exports=function(t,e){return e=e||{},"string"==typeof t?n(t):e.long?o(t):r(t)}},{}],25:[function(t,e,n){(function(e){function r(t,e){var r="b"+n.packets[t.type]+t.data.data;return e(r)}function o(t,e,r){if(!e)return n.encodeBase64Packet(t,r);var o=t.data,i=new Uint8Array(o),s=new Uint8Array(1+o.byteLength);s[0]=m[t.type];for(var a=0;a<i.length;a++)s[a+1]=i[a];return r(s.buffer)}function i(t,e,r){if(!e)return n.encodeBase64Packet(t,r);var o=new FileReader;return o.onload=function(){t.data=o.result,n.encodePacket(t,e,!0,r)},o.readAsArrayBuffer(t.data)}function s(t,e,r){if(!e)return n.encodeBase64Packet(t,r);if(g)return i(t,e,r);var o=new Uint8Array(1);o[0]=m[t.type];var s=new w([o.buffer,t.data]);return r(s)}function a(t,e,n){for(var r=new Array(t.length),o=h(t.length,n),i=function(t,n,o){e(n,function(e,n){r[t]=n,o(e,r)})},s=0;s<t.length;s++)i(s,t[s],o)}var c=t("./keys"),p=t("has-binary"),u=t("arraybuffer.slice"),f=t("base64-arraybuffer"),h=t("after"),l=t("utf8"),d=navigator.userAgent.match(/Android/i),y=/PhantomJS/i.test(navigator.userAgent),g=d||y;n.protocol=3;var m=n.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6},v=c(m),b={type:"error",data:"parser error"},w=t("blob");n.encodePacket=function(t,n,i,a){"function"==typeof n&&(a=n,n=!1),"function"==typeof i&&(a=i,i=null);var c=void 0===t.data?void 0:t.data.buffer||t.data;if(e.ArrayBuffer&&c instanceof ArrayBuffer)return o(t,n,a);if(w&&c instanceof e.Blob)return s(t,n,a);if(c&&c.base64)return r(t,a);var p=m[t.type];return void 0!==t.data&&(p+=i?l.encode(String(t.data)):String(t.data)),a(""+p)},n.encodeBase64Packet=function(t,r){var o="b"+n.packets[t.type];if(w&&t.data instanceof w){var i=new FileReader;return i.onload=function(){var t=i.result.split(",")[1];r(o+t)},i.readAsDataURL(t.data)}var s;try{s=String.fromCharCode.apply(null,new Uint8Array(t.data))}catch(a){for(var c=new Uint8Array(t.data),p=new Array(c.length),u=0;u<c.length;u++)p[u]=c[u];s=String.fromCharCode.apply(null,p)}return o+=e.btoa(s),r(o)},n.decodePacket=function(t,e,r){if("string"==typeof t||void 0===t){if("b"==t.charAt(0))return n.decodeBase64Packet(t.substr(1),e);if(r)try{t=l.decode(t)}catch(o){return b}var i=t.charAt(0);return Number(i)==i&&v[i]?t.length>1?{type:v[i],data:t.substring(1)}:{type:v[i]}:b}var s=new Uint8Array(t),i=s[0],a=u(t,1);return w&&"blob"===e&&(a=new w([a])),{type:v[i],data:a}},n.decodeBase64Packet=function(t,n){var r=v[t.charAt(0)];if(!e.ArrayBuffer)return{type:r,data:{base64:!0,data:t.substr(1)}};var o=f.decode(t.substr(1));return"blob"===n&&w&&(o=new w([o])),{type:r,data:o}},n.encodePayload=function(t,e,r){function o(t){return t.length+":"+t}function i(t,r){n.encodePacket(t,s?e:!1,!0,function(t){r(null,o(t))})}"function"==typeof e&&(r=e,e=null);var s=p(t);return e&&s?w&&!g?n.encodePayloadAsBlob(t,r):n.encodePayloadAsArrayBuffer(t,r):t.length?void a(t,i,function(t,e){return r(e.join(""))}):r("0:")},n.decodePayload=function(t,e,r){if("string"!=typeof t)return n.decodePayloadAsBinary(t,e,r);"function"==typeof e&&(r=e,e=null);var o;if(""==t)return r(b,0,1);for(var i,s,a="",c=0,p=t.length;p>c;c++){var u=t.charAt(c);if(":"!=u)a+=u;else{if(""==a||a!=(i=Number(a)))return r(b,0,1);if(s=t.substr(c+1,i),a!=s.length)return r(b,0,1);if(s.length){if(o=n.decodePacket(s,e,!0),b.type==o.type&&b.data==o.data)return r(b,0,1);var f=r(o,c+i,p);if(!1===f)return}c+=i,a=""}}return""!=a?r(b,0,1):void 0},n.encodePayloadAsArrayBuffer=function(t,e){function r(t,e){n.encodePacket(t,!0,!0,function(t){return e(null,t)})}return t.length?void a(t,r,function(t,n){var r=n.reduce(function(t,e){var n;return n="string"==typeof e?e.length:e.byteLength,t+n.toString().length+n+2},0),o=new Uint8Array(r),i=0;return n.forEach(function(t){var e="string"==typeof t,n=t;if(e){for(var r=new Uint8Array(t.length),s=0;s<t.length;s++)r[s]=t.charCodeAt(s);n=r.buffer}o[i++]=e?0:1;for(var a=n.byteLength.toString(),s=0;s<a.length;s++)o[i++]=parseInt(a[s]);o[i++]=255;for(var r=new Uint8Array(n),s=0;s<r.length;s++)o[i++]=r[s]}),e(o.buffer)}):e(new ArrayBuffer(0))},n.encodePayloadAsBlob=function(t,e){function r(t,e){n.encodePacket(t,!0,!0,function(t){var n=new Uint8Array(1);if(n[0]=1,"string"==typeof t){for(var r=new Uint8Array(t.length),o=0;o<t.length;o++)r[o]=t.charCodeAt(o);t=r.buffer,n[0]=0}for(var i=t instanceof ArrayBuffer?t.byteLength:t.size,s=i.toString(),a=new Uint8Array(s.length+1),o=0;o<s.length;o++)a[o]=parseInt(s[o]);if(a[s.length]=255,w){var c=new w([n.buffer,a.buffer,t]);e(null,c)}})}a(t,r,function(t,n){return e(new w(n))})},n.decodePayloadAsBinary=function(t,e,r){"function"==typeof e&&(r=e,e=null);for(var o=t,i=[],s=!1;o.byteLength>0;){for(var a=new Uint8Array(o),c=0===a[0],p="",f=1;255!=a[f];f++){if(p.length>310){s=!0;break}p+=a[f]}if(s)return r(b,0,1);o=u(o,2+p.length),p=parseInt(p);var h=u(o,0,p);if(c)try{h=String.fromCharCode.apply(null,new Uint8Array(h))}catch(l){var d=new Uint8Array(h);h="";for(var f=0;f<d.length;f++)h+=String.fromCharCode(d[f])}i.push(h),o=u(o,p)}var y=i.length;i.forEach(function(t,o){r(n.decodePacket(t,e,!0),o,y)})}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./keys":26,after:27,"arraybuffer.slice":28,"base64-arraybuffer":29,blob:30,"has-binary":31,utf8:33}],26:[function(t,e){e.exports=Object.keys||function(t){var e=[],n=Object.prototype.hasOwnProperty;for(var r in t)n.call(t,r)&&e.push(r);return e}},{}],27:[function(t,e){function n(t,e,n){function o(t,r){if(o.count<=0)throw new Error("after called too many times");--o.count,t?(i=!0,e(t),e=n):0!==o.count||i||e(null,r)}var i=!1;return n=n||r,o.count=t,0===t?e():o}function r(){}e.exports=n},{}],28:[function(t,e){e.exports=function(t,e,n){var r=t.byteLength;if(e=e||0,n=n||r,t.slice)return t.slice(e,n);if(0>e&&(e+=r),0>n&&(n+=r),n>r&&(n=r),e>=r||e>=n||0===r)return new ArrayBuffer(0);for(var o=new Uint8Array(t),i=new Uint8Array(n-e),s=e,a=0;n>s;s++,a++)i[a]=o[s];return i.buffer}},{}],29:[function(t,e,n){!function(t){"use strict";n.encode=function(e){var n,r=new Uint8Array(e),o=r.length,i="";for(n=0;o>n;n+=3)i+=t[r[n]>>2],i+=t[(3&r[n])<<4|r[n+1]>>4],i+=t[(15&r[n+1])<<2|r[n+2]>>6],i+=t[63&r[n+2]];return o%3===2?i=i.substring(0,i.length-1)+"=":o%3===1&&(i=i.substring(0,i.length-2)+"=="),i},n.decode=function(e){var n,r,o,i,s,a=.75*e.length,c=e.length,p=0;"="===e[e.length-1]&&(a--,"="===e[e.length-2]&&a--);var u=new ArrayBuffer(a),f=new Uint8Array(u);for(n=0;c>n;n+=4)r=t.indexOf(e[n]),o=t.indexOf(e[n+1]),i=t.indexOf(e[n+2]),s=t.indexOf(e[n+3]),f[p++]=r<<2|o>>4,f[p++]=(15&o)<<4|i>>2,f[p++]=(3&i)<<6|63&s;return u}}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")},{}],30:[function(t,e){(function(t){function n(t,e){e=e||{};for(var n=new r,o=0;o<t.length;o++)n.append(t[o]);return e.type?n.getBlob(e.type):n.getBlob()}var r=t.BlobBuilder||t.WebKitBlobBuilder||t.MSBlobBuilder||t.MozBlobBuilder,o=function(){try{var t=new Blob(["hi"]);return 2==t.size}catch(e){return!1}}(),i=r&&r.prototype.append&&r.prototype.getBlob;e.exports=function(){return o?t.Blob:i?n:void 0}()}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],31:[function(t,e){(function(n){function r(t){function e(t){if(!t)return!1;if(n.Buffer&&n.Buffer.isBuffer(t)||n.ArrayBuffer&&t instanceof ArrayBuffer||n.Blob&&t instanceof Blob||n.File&&t instanceof File)return!0;if(o(t)){for(var r=0;r<t.length;r++)if(e(t[r]))return!0}else if(t&&"object"==typeof t){t.toJSON&&(t=t.toJSON());for(var i in t)if(t.hasOwnProperty(i)&&e(t[i]))return!0}return!1}return e(t)}var o=t("isarray");e.exports=r}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{isarray:32}],32:[function(t,e){e.exports=Array.isArray||function(t){return"[object Array]"==Object.prototype.toString.call(t)}},{}],33:[function(e,n,r){(function(e){!function(o){function i(t){for(var e,n,r=[],o=0,i=t.length;i>o;)e=t.charCodeAt(o++),e>=55296&&56319>=e&&i>o?(n=t.charCodeAt(o++),56320==(64512&n)?r.push(((1023&e)<<10)+(1023&n)+65536):(r.push(e),o--)):r.push(e);return r}function s(t){for(var e,n=t.length,r=-1,o="";++r<n;)e=t[r],e>65535&&(e-=65536,o+=b(e>>>10&1023|55296),e=56320|1023&e),o+=b(e);return o}function a(t,e){return b(t>>e&63|128)}function c(t){if(0==(4294967168&t))return b(t);var e="";return 0==(4294965248&t)?e=b(t>>6&31|192):0==(4294901760&t)?(e=b(t>>12&15|224),e+=a(t,6)):0==(4292870144&t)&&(e=b(t>>18&7|240),e+=a(t,12),e+=a(t,6)),e+=b(63&t|128)}function p(t){for(var e,n=i(t),r=n.length,o=-1,s="";++o<r;)e=n[o],s+=c(e);return s}function u(){if(v>=m)throw Error("Invalid byte index");var t=255&g[v];if(v++,128==(192&t))return 63&t;throw Error("Invalid continuation byte")}function f(){var t,e,n,r,o;if(v>m)throw Error("Invalid byte index");if(v==m)return!1;if(t=255&g[v],v++,0==(128&t))return t;if(192==(224&t)){var e=u();if(o=(31&t)<<6|e,o>=128)return o;throw Error("Invalid continuation byte")}if(224==(240&t)){if(e=u(),n=u(),o=(15&t)<<12|e<<6|n,o>=2048)return o;throw Error("Invalid continuation byte")}if(240==(248&t)&&(e=u(),n=u(),r=u(),o=(15&t)<<18|e<<12|n<<6|r,o>=65536&&1114111>=o))return o;throw Error("Invalid UTF-8 detected")}function h(t){g=i(t),m=g.length,v=0;for(var e,n=[];(e=f())!==!1;)n.push(e);return s(n)}var l="object"==typeof r&&r,d="object"==typeof n&&n&&n.exports==l&&n,y="object"==typeof e&&e;(y.global===y||y.window===y)&&(o=y);var g,m,v,b=String.fromCharCode,w={version:"2.0.0",encode:p,decode:h};if("function"==typeof t&&"object"==typeof t.amd&&t.amd)t(function(){return w});else if(l&&!l.nodeType)if(d)d.exports=w;else{var k={},x=k.hasOwnProperty;for(var A in w)x.call(w,A)&&(l[A]=w[A])}else o.utf8=w}(this)}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],34:[function(t,e){(function(t){var n=/^[\],:{}\s]*$/,r=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,o=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,i=/(?:^|:|,)(?:\s*\[)+/g,s=/^\s+/,a=/\s+$/;e.exports=function(e){return"string"==typeof e&&e?(e=e.replace(s,"").replace(a,""),t.JSON&&JSON.parse?JSON.parse(e):n.test(e.replace(r,"@").replace(o,"]").replace(i,""))?new Function("return "+e)():void 0):null}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],35:[function(t,e,n){n.encode=function(t){var e="";for(var n in t)t.hasOwnProperty(n)&&(e.length&&(e+="&"),e+=encodeURIComponent(n)+"="+encodeURIComponent(t[n]));return e},n.decode=function(t){for(var e={},n=t.split("&"),r=0,o=n.length;o>r;r++){var i=n[r].split("=");e[decodeURIComponent(i[0])]=decodeURIComponent(i[1])}return e}},{}],36:[function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];e.exports=function(t){var e=t,o=t.indexOf("["),i=t.indexOf("]");-1!=o&&-1!=i&&(t=t.substring(0,o)+t.substring(o,i).replace(/:/g,";")+t.substring(i,t.length));for(var s=n.exec(t||""),a={},c=14;c--;)a[r[c]]=s[c]||"";return-1!=o&&-1!=i&&(a.source=e,a.host=a.host.substring(1,a.host.length-1).replace(/;/g,":"),a.authority=a.authority.replace("[","").replace("]","").replace(/;/g,":"),a.ipv6uri=!0),a}},{}],37:[function(t,e){function n(t,e){var n;return n=e?new o(t,e):new o(t)}var r=function(){return this}(),o=r.WebSocket||r.MozWebSocket;e.exports=o?n:null,o&&(n.prototype=o.prototype)},{}],38:[function(t,e){(function(n){function r(t){function e(t){if(!t)return!1;if(n.Buffer&&n.Buffer.isBuffer(t)||n.ArrayBuffer&&t instanceof ArrayBuffer||n.Blob&&t instanceof Blob||n.File&&t instanceof File)return!0;if(o(t)){for(var r=0;r<t.length;r++)if(e(t[r]))return!0}else if(t&&"object"==typeof t){t.toJSON&&(t=t.toJSON());for(var i in t)if(Object.prototype.hasOwnProperty.call(t,i)&&e(t[i]))return!0}return!1}return e(t)}var o=t("isarray");e.exports=r}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{isarray:39}],39:[function(t,e){e.exports=t(32)},{}],40:[function(t,e){var n=t("global");try{e.exports="XMLHttpRequest"in n&&"withCredentials"in new n.XMLHttpRequest}catch(r){e.exports=!1}},{global:41}],41:[function(t,e){e.exports=function(){return this}()},{}],42:[function(t,e){var n=[].indexOf;e.exports=function(t,e){if(n)return t.indexOf(e);for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}},{}],43:[function(t,e,n){var r=Object.prototype.hasOwnProperty;n.keys=Object.keys||function(t){var e=[];for(var n in t)r.call(t,n)&&e.push(n);return e},n.values=function(t){var e=[];for(var n in t)r.call(t,n)&&e.push(t[n]);return e},n.merge=function(t,e){for(var n in e)r.call(e,n)&&(t[n]=e[n]);return t},n.length=function(t){return n.keys(t).length},n.isEmpty=function(t){return 0==n.length(t)}},{}],44:[function(t,e){var n=/^(?:(?![^:@]+:[^:@\/]*@)(http|https|ws|wss):\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?((?:[a-f0-9]{0,4}:){2,7}[a-f0-9]{0,4}|[^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/,r=["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"];e.exports=function(t){for(var e=n.exec(t||""),o={},i=14;i--;)o[r[i]]=e[i]||"";return o}},{}],45:[function(t,e,n){(function(e){var r=t("isarray"),o=t("./is-buffer");n.deconstructPacket=function(t){function e(t){if(!t)return t;if(o(t)){var i={_placeholder:!0,num:n.length};return n.push(t),i}if(r(t)){for(var s=new Array(t.length),a=0;a<t.length;a++)s[a]=e(t[a]);return s}if("object"==typeof t&&!(t instanceof Date)){var s={};for(var c in t)s[c]=e(t[c]);return s}return t}var n=[],i=t.data,s=t;return s.data=e(i),s.attachments=n.length,{packet:s,buffers:n}},n.reconstructPacket=function(t,e){function n(t){if(t&&t._placeholder){var o=e[t.num];return o}if(r(t)){for(var i=0;i<t.length;i++)t[i]=n(t[i]);return t}if(t&&"object"==typeof t){for(var s in t)t[s]=n(t[s]);return t}return t}return t.data=n(t.data),t.attachments=void 0,t},n.removeBlobs=function(t,n){function i(t,c,p){if(!t)return t;if(e.Blob&&t instanceof Blob||e.File&&t instanceof File){s++;var u=new FileReader;u.onload=function(){p?p[c]=this.result:a=this.result,--s||n(a)},u.readAsArrayBuffer(t)}else if(r(t))for(var f=0;f<t.length;f++)i(t[f],f,t);else if(t&&"object"==typeof t&&!o(t))for(var h in t)i(t[h],h,t)}var s=0,a=t;i(a),s||n(a)}}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./is-buffer":47,isarray:48}],46:[function(t,e,n){function r(){}function o(t){var e="",r=!1;return e+=t.type,(n.BINARY_EVENT==t.type||n.BINARY_ACK==t.type)&&(e+=t.attachments,e+="-"),t.nsp&&"/"!=t.nsp&&(r=!0,e+=t.nsp),null!=t.id&&(r&&(e+=",",r=!1),e+=t.id),null!=t.data&&(r&&(e+=","),e+=f.stringify(t.data)),u("encoded %j as %s",t,e),e}function i(t,e){function n(t){var n=l.deconstructPacket(t),r=o(n.packet),i=n.buffers;i.unshift(r),e(i)}l.removeBlobs(t,n)}function s(){this.reconstructor=null}function a(t){var e={},r=0;if(e.type=Number(t.charAt(0)),null==n.types[e.type])return p();if(n.BINARY_EVENT==e.type||n.BINARY_ACK==e.type){for(var o="";"-"!=t.charAt(++r)&&(o+=t.charAt(r),r!=t.length););if(o!=Number(o)||"-"!=t.charAt(r))throw new Error("Illegal attachments");e.attachments=Number(o)}if("/"==t.charAt(r+1))for(e.nsp="";++r;){var i=t.charAt(r);if(","==i)break;if(e.nsp+=i,r==t.length)break}else e.nsp="/";var s=t.charAt(r+1);if(""!==s&&Number(s)==s){for(e.id="";++r;){var i=t.charAt(r);if(null==i||Number(i)!=i){--r;break}if(e.id+=t.charAt(r),r==t.length)break}e.id=Number(e.id)}if(t.charAt(++r))try{e.data=f.parse(t.substr(r))}catch(a){return p()}return u("decoded %s as %j",t,e),e}function c(t){this.reconPack=t,this.buffers=[]}function p(){return{type:n.ERROR,data:"parser error"}}var u=t("debug")("socket.io-parser"),f=t("json3"),h=(t("isarray"),t("component-emitter")),l=t("./binary"),d=t("./is-buffer");n.protocol=4,n.types=["CONNECT","DISCONNECT","EVENT","BINARY_EVENT","ACK","BINARY_ACK","ERROR"],n.CONNECT=0,n.DISCONNECT=1,n.EVENT=2,n.ACK=3,n.ERROR=4,n.BINARY_EVENT=5,n.BINARY_ACK=6,n.Encoder=r,n.Decoder=s,r.prototype.encode=function(t,e){if(u("encoding packet %j",t),n.BINARY_EVENT==t.type||n.BINARY_ACK==t.type)i(t,e);else{var r=o(t);e([r])}},h(s.prototype),s.prototype.add=function(t){var e;if("string"==typeof t)e=a(t),n.BINARY_EVENT==e.type||n.BINARY_ACK==e.type?(this.reconstructor=new c(e),0===this.reconstructor.reconPack.attachments&&this.emit("decoded",e)):this.emit("decoded",e);else{if(!d(t)&&!t.base64)throw new Error("Unknown type: "+t);if(!this.reconstructor)throw new Error("got binary data when not reconstructing a packet");e=this.reconstructor.takeBinaryData(t),e&&(this.reconstructor=null,this.emit("decoded",e))}},s.prototype.destroy=function(){this.reconstructor&&this.reconstructor.finishedReconstruction()},c.prototype.takeBinaryData=function(t){if(this.buffers.push(t),this.buffers.length==this.reconPack.attachments){var e=l.reconstructPacket(this.reconPack,this.buffers);return this.finishedReconstruction(),e}return null},c.prototype.finishedReconstruction=function(){this.reconPack=null,this.buffers=[]}},{"./binary":45,"./is-buffer":47,"component-emitter":9,debug:10,isarray:48,json3:49}],47:[function(t,e){(function(t){function n(e){return t.Buffer&&t.Buffer.isBuffer(e)||t.ArrayBuffer&&e instanceof ArrayBuffer}e.exports=n}).call(this,"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],48:[function(t,e){e.exports=t(32)},{}],49:[function(e,n,r){!function(e){function n(t){if(n[t]!==s)return n[t];var e;if("bug-string-char-index"==t)e="a"!="a"[0];else if("json"==t)e=n("json-stringify")&&n("json-parse");else{var r,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==t){var i=u.stringify,c="function"==typeof i&&f;if(c){(r=function(){return 1}).toJSON=r;try{c="0"===i(0)&&"0"===i(new Number)&&'""'==i(new String)&&i(a)===s&&i(s)===s&&i()===s&&"1"===i(r)&&"[1]"==i([r])&&"[null]"==i([s])&&"null"==i(null)&&"[null,null,null]"==i([s,a,null])&&i({a:[r,!0,!1,null,"\x00\b\n\f\r "]})==o&&"1"===i(null,r)&&"[\n 1,\n 2\n]"==i([1,2],null,1)&&'"-271821-04-20T00:00:00.000Z"'==i(new Date(-864e13))&&'"+275760-09-13T00:00:00.000Z"'==i(new Date(864e13))&&'"-000001-01-01T00:00:00.000Z"'==i(new Date(-621987552e5))&&'"1969-12-31T23:59:59.999Z"'==i(new Date(-1))}catch(p){c=!1}}e=c}if("json-parse"==t){var h=u.parse;if("function"==typeof h)try{if(0===h("0")&&!h(!1)){r=h(o);var l=5==r.a.length&&1===r.a[0];if(l){try{l=!h('" "')}catch(p){}if(l)try{l=1!==h("01")}catch(p){}if(l)try{l=1!==h("1.")}catch(p){}}}}catch(p){l=!1}e=l}}return n[t]=!!e}var o,i,s,a={}.toString,c="function"==typeof t&&t.amd,p="object"==typeof JSON&&JSON,u="object"==typeof r&&r&&!r.nodeType&&r;u&&p?(u.stringify=p.stringify,u.parse=p.parse):u=e.JSON=p||{};var f=new Date(-0xc782b5b800cec);try{f=-109252==f.getUTCFullYear()&&0===f.getUTCMonth()&&1===f.getUTCDate()&&10==f.getUTCHours()&&37==f.getUTCMinutes()&&6==f.getUTCSeconds()&&708==f.getUTCMilliseconds()}catch(h){}if(!n("json")){var l="[object Function]",d="[object Date]",y="[object Number]",g="[object String]",m="[object Array]",v="[object Boolean]",b=n("bug-string-char-index");if(!f)var w=Math.floor,k=[0,31,59,90,120,151,181,212,243,273,304,334],x=function(t,e){return k[e]+365*(t-1970)+w((t-1969+(e=+(e>1)))/4)-w((t-1901+e)/100)+w((t-1601+e)/400)};(o={}.hasOwnProperty)||(o=function(t){var e,n={};return(n.__proto__=null,n.__proto__={toString:1},n).toString!=a?o=function(t){var e=this.__proto__,n=t in(this.__proto__=null,this);return this.__proto__=e,n}:(e=n.constructor,o=function(t){var n=(this.constructor||e).prototype;return t in this&&!(t in n&&this[t]===n[t])}),n=null,o.call(this,t)});var A={"boolean":1,number:1,string:1,undefined:1},B=function(t,e){var n=typeof t[e];return"object"==n?!!t[e]:!A[n]};if(i=function(t,e){var n,r,s,c=0;(n=function(){this.valueOf=0}).prototype.valueOf=0,r=new n;for(s in r)o.call(r,s)&&c++;return n=r=null,c?i=2==c?function(t,e){var n,r={},i=a.call(t)==l;for(n in t)i&&"prototype"==n||o.call(r,n)||!(r[n]=1)||!o.call(t,n)||e(n)}:function(t,e){var n,r,i=a.call(t)==l;for(n in t)i&&"prototype"==n||!o.call(t,n)||(r="constructor"===n)||e(n);(r||o.call(t,n="constructor"))&&e(n)}:(r=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],i=function(t,e){var n,i,s=a.call(t)==l,c=!s&&"function"!=typeof t.constructor&&B(t,"hasOwnProperty")?t.hasOwnProperty:o;for(n in t)s&&"prototype"==n||!c.call(t,n)||e(n);for(i=r.length;n=r[--i];c.call(t,n)&&e(n));}),i(t,e)},!n("json-stringify")){var C={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},S="000000",E=function(t,e){return(S+(e||0)).slice(-t)},T="\\u00",j=function(t){var e,n='"',r=0,o=t.length,i=o>10&&b;for(i&&(e=t.split(""));o>r;r++){var s=t.charCodeAt(r);switch(s){case 8:case 9:case 10:case 12:case 13:case 34:case 92:n+=C[s];break;default:if(32>s){n+=T+E(2,s.toString(16));break}n+=i?e[r]:b?t.charAt(r):t[r]}}return n+'"'},_=function(t,e,n,r,c,p,u){var f,h,l,b,k,A,B,C,S,T,P,R,N,O,q,D;try{f=e[t]}catch(U){}if("object"==typeof f&&f)if(h=a.call(f),h!=d||o.call(f,"toJSON"))"function"==typeof f.toJSON&&(h!=y&&h!=g&&h!=m||o.call(f,"toJSON"))&&(f=f.toJSON(t));else if(f>-1/0&&1/0>f){if(x){for(k=w(f/864e5),l=w(k/365.2425)+1970-1;x(l+1,0)<=k;l++);for(b=w((k-x(l,0))/30.42);x(l,b+1)<=k;b++);k=1+k-x(l,b),A=(f%864e5+864e5)%864e5,B=w(A/36e5)%24,C=w(A/6e4)%60,S=w(A/1e3)%60,T=A%1e3}else l=f.getUTCFullYear(),b=f.getUTCMonth(),k=f.getUTCDate(),B=f.getUTCHours(),C=f.getUTCMinutes(),S=f.getUTCSeconds(),T=f.getUTCMilliseconds();f=(0>=l||l>=1e4?(0>l?"-":"+")+E(6,0>l?-l:l):E(4,l))+"-"+E(2,b+1)+"-"+E(2,k)+"T"+E(2,B)+":"+E(2,C)+":"+E(2,S)+"."+E(3,T)+"Z"}else f=null;if(n&&(f=n.call(e,t,f)),null===f)return"null";if(h=a.call(f),h==v)return""+f;if(h==y)return f>-1/0&&1/0>f?""+f:"null";if(h==g)return j(""+f);if("object"==typeof f){for(O=u.length;O--;)if(u[O]===f)throw TypeError();if(u.push(f),P=[],q=p,p+=c,h==m){for(N=0,O=f.length;O>N;N++)R=_(N,f,n,r,c,p,u),P.push(R===s?"null":R);D=P.length?c?"[\n"+p+P.join(",\n"+p)+"\n"+q+"]":"["+P.join(",")+"]":"[]"}else i(r||f,function(t){var e=_(t,f,n,r,c,p,u);e!==s&&P.push(j(t)+":"+(c?" ":"")+e)}),D=P.length?c?"{\n"+p+P.join(",\n"+p)+"\n"+q+"}":"{"+P.join(",")+"}":"{}";return u.pop(),D}};u.stringify=function(t,e,n){var r,o,i,s;if("function"==typeof e||"object"==typeof e&&e)if((s=a.call(e))==l)o=e;else if(s==m){i={};for(var c,p=0,u=e.length;u>p;c=e[p++],s=a.call(c),(s==g||s==y)&&(i[c]=1));}if(n)if((s=a.call(n))==y){if((n-=n%1)>0)for(r="",n>10&&(n=10);r.length<n;r+=" ");}else s==g&&(r=n.length<=10?n:n.slice(0,10));return _("",(c={},c[""]=t,c),o,i,r,"",[])}}if(!n("json-parse")){var P,R,N=String.fromCharCode,O={92:"\\",34:'"',47:"/",98:"\b",116:" ",110:"\n",102:"\f",114:"\r"},q=function(){throw P=R=null,SyntaxError()},D=function(){for(var t,e,n,r,o,i=R,s=i.length;s>P;)switch(o=i.charCodeAt(P)){case 9:case 10:case 13:case 32:P++;break;case 123:case 125:case 91:case 93:case 58:case 44:return t=b?i.charAt(P):i[P],P++,t;case 34:for(t="@",P++;s>P;)if(o=i.charCodeAt(P),32>o)q();else if(92==o)switch(o=i.charCodeAt(++P)){case 92:case 34:case 47:case 98:case 116:case 110:case 102:case 114:t+=O[o],P++;break;case 117:for(e=++P,n=P+4;n>P;P++)o=i.charCodeAt(P),o>=48&&57>=o||o>=97&&102>=o||o>=65&&70>=o||q();t+=N("0x"+i.slice(e,P));break;default:q()}else{if(34==o)break;for(o=i.charCodeAt(P),e=P;o>=32&&92!=o&&34!=o;)o=i.charCodeAt(++P);t+=i.slice(e,P)}if(34==i.charCodeAt(P))return P++,t;q();default:if(e=P,45==o&&(r=!0,o=i.charCodeAt(++P)),o>=48&&57>=o){for(48==o&&(o=i.charCodeAt(P+1),o>=48&&57>=o)&&q(),r=!1;s>P&&(o=i.charCodeAt(P),o>=48&&57>=o);P++);if(46==i.charCodeAt(P)){for(n=++P;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==P&&q(),P=n}if(o=i.charCodeAt(P),101==o||69==o){for(o=i.charCodeAt(++P),(43==o||45==o)&&P++,n=P;s>n&&(o=i.charCodeAt(n),o>=48&&57>=o);n++);n==P&&q(),P=n}return+i.slice(e,P)}if(r&&q(),"true"==i.slice(P,P+4))return P+=4,!0;if("false"==i.slice(P,P+5))return P+=5,!1;
+if("null"==i.slice(P,P+4))return P+=4,null;q()}return"$"},U=function(t){var e,n;if("$"==t&&q(),"string"==typeof t){if("@"==(b?t.charAt(0):t[0]))return t.slice(1);if("["==t){for(e=[];t=D(),"]"!=t;n||(n=!0))n&&(","==t?(t=D(),"]"==t&&q()):q()),","==t&&q(),e.push(U(t));return e}if("{"==t){for(e={};t=D(),"}"!=t;n||(n=!0))n&&(","==t?(t=D(),"}"==t&&q()):q()),(","==t||"string"!=typeof t||"@"!=(b?t.charAt(0):t[0])||":"!=D())&&q(),e[t.slice(1)]=U(D());return e}q()}return t},I=function(t,e,n){var r=L(t,e,n);r===s?delete t[e]:t[e]=r},L=function(t,e,n){var r,o=t[e];if("object"==typeof o&&o)if(a.call(o)==m)for(r=o.length;r--;)I(o,r,n);else i(o,function(t){I(o,t,n)});return n.call(t,e,o)};u.parse=function(t,e){var n,r;return P=0,R=""+t,n=U(D()),"$"!=D()&&q(),P=R=null,e&&a.call(e)==l?L((r={},r[""]=n,r),"",e):n}}}c&&t(function(){return u})}(this)},{}],50:[function(t,e){function n(t,e){var n=[];e=e||0;for(var r=e||0;r<t.length;r++)n[r-e]=t[r];return n}e.exports=n},{}]},{},[1])(1)}); \ No newline at end of file
diff --git a/share/templates/401.html b/cli/onionshare_cli/resources/templates/401.html
index dc50f534..5e43ca01 100644
--- a/share/templates/401.html
+++ b/cli/onionshare_cli/resources/templates/401.html
@@ -3,6 +3,8 @@
<head>
<title>OnionShare: 401 Unauthorized Access</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>
diff --git a/share/templates/403.html b/cli/onionshare_cli/resources/templates/403.html
index 2ebab09a..c9d28eea 100644
--- a/share/templates/403.html
+++ b/cli/onionshare_cli/resources/templates/403.html
@@ -3,6 +3,8 @@
<head>
<title>OnionShare: 403 Forbidden</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>
diff --git a/share/templates/404.html b/cli/onionshare_cli/resources/templates/404.html
index 375c125d..e816f2c4 100644
--- a/share/templates/404.html
+++ b/cli/onionshare_cli/resources/templates/404.html
@@ -3,6 +3,8 @@
<head>
<title>OnionShare: 404 Not Found</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>
diff --git a/share/templates/405.html b/cli/onionshare_cli/resources/templates/405.html
index 55493ae7..63888004 100644
--- a/share/templates/405.html
+++ b/cli/onionshare_cli/resources/templates/405.html
@@ -3,6 +3,8 @@
<head>
<title>OnionShare: 405 Method Not Allowed</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>
diff --git a/cli/onionshare_cli/resources/templates/chat.html b/cli/onionshare_cli/resources/templates/chat.html
new file mode 100644
index 00000000..b4443c09
--- /dev/null
+++ b/cli/onionshare_cli/resources/templates/chat.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<html>
+
+<head>
+ <title>OnionShare</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>
+
+<body>
+
+ <header class="clearfix">
+ <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
+ <h1>OnionShare</h1>
+ </header>
+ <noscript>
+ <p>
+ Chat <b>requires JavaScript</b>, so you must set your Tor Browser security
+ level to <b>Safer</b> or <b>Standard</b> to join.
+ </p>
+ </noscript>
+
+ <div class="chat-container no-js">
+ <div class="chat-users">
+ <div class="editable-username">
+ <input id="username" value="{{ username }}" />
+ <p id="username-error"></p>
+ </div>
+ <ul id="user-list">
+ </ul>
+ </div>
+ <div class="chat-wrapper">
+ <div id="chat"></div>
+
+ <div class="chat-form">
+ <input type="text" id="new-message" name="new-message" placeholder="Type your message" />
+ </div>
+
+ </div>
+ </div>
+ <script src="{{ static_url_path }}/js/jquery-3.5.1.min.js"></script>
+ <script src="{{ static_url_path }}/js/socket.io.min.js"></script>
+ <script async src="{{ static_url_path }}/js/chat.js"></script>
+</body>
+
+</html> \ No newline at end of file
diff --git a/share/templates/denied.html b/cli/onionshare_cli/resources/templates/denied.html
index ad4d0b21..49147ef2 100644
--- a/share/templates/denied.html
+++ b/cli/onionshare_cli/resources/templates/denied.html
@@ -3,6 +3,8 @@
<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" />
</head>
diff --git a/share/templates/listing.html b/cli/onionshare_cli/resources/templates/listing.html
index 2f70dbf0..ea050710 100644
--- a/share/templates/listing.html
+++ b/cli/onionshare_cli/resources/templates/listing.html
@@ -2,6 +2,8 @@
<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 href="{{ static_url_path }}/css/style.css" rel="stylesheet" type="text/css" />
</head>
diff --git a/share/templates/receive.html b/cli/onionshare_cli/resources/templates/receive.html
index b7e7f8e5..20f4bb7e 100644
--- a/share/templates/receive.html
+++ b/cli/onionshare_cli/resources/templates/receive.html
@@ -2,6 +2,8 @@
<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>
diff --git a/share/templates/send.html b/cli/onionshare_cli/resources/templates/send.html
index 941c4130..dd30bfdd 100644
--- a/share/templates/send.html
+++ b/cli/onionshare_cli/resources/templates/send.html
@@ -3,6 +3,8 @@
<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">
<meta name="onionshare-filename" content="{{ filename }}">
@@ -11,15 +13,15 @@
<body>
- <header class="clearfix">
- <div class="right">
- <ul>
- <li>Total size: <strong>{{ filesize_human }}</strong> {% if is_zipped %} (compressed){% endif %}</li>
- <li><a class="button" href='/download'>Download Files</a></li>
- </ul>
+ <header class="d-flex">
+ <div class="logo-container">
+ <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
+ <h1>OnionShare</h1>
+ </div>
+ <div class="information d-flex">
+ <div>Total size: <strong>{{ filesize_human }}</strong> {% if is_zipped %} (compressed){% endif %}</div>
+ <a class="button" href='/download'>Download Files</a>
</div>
- <img class="logo" src="{{ static_url_path }}/img/logo.png" title="OnionShare">
- <h1>OnionShare</h1>
</header>
{% if breadcrumbs %}
@@ -28,40 +30,39 @@
</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.basename }}">
- {{ 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" />
{% if download_individual_files %}
<a href="{{ info.basename }}">
- {{ info.basename }}
+ <span>{{ info.basename }}</span>
</a>
{% else %}
- {{ info.basename }}
+ <span>{{ info.basename }}</span>
{% endif %}
- </td>
- <td>{{ info.size_human }}</td>
- </tr>
+ </div>
+ <div>{{ info.size_human }}</div>
+ </div>
{% endfor %}
- </table>
+ </div>
<script async src="{{ static_url_path }}/js/send.js" charset="utf-8"></script>
</body>
diff --git a/share/templates/thankyou.html b/cli/onionshare_cli/resources/templates/thankyou.html
index b7e2b97c..aa0bc553 100644
--- a/share/templates/thankyou.html
+++ b/cli/onionshare_cli/resources/templates/thankyou.html
@@ -3,6 +3,8 @@
<head>
<title>OnionShare is closed</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>
diff --git a/share/torrc_template b/cli/onionshare_cli/resources/torrc_template
index 8ac9e1ef..8ac9e1ef 100644
--- a/share/torrc_template
+++ b/cli/onionshare_cli/resources/torrc_template
diff --git a/share/torrc_template-meek_lite_amazon b/cli/onionshare_cli/resources/torrc_template-meek_lite_amazon
index 606ae889..606ae889 100644
--- a/share/torrc_template-meek_lite_amazon
+++ b/cli/onionshare_cli/resources/torrc_template-meek_lite_amazon
diff --git a/share/torrc_template-meek_lite_azure b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure
index a9b374ba..a9b374ba 100644
--- a/share/torrc_template-meek_lite_azure
+++ b/cli/onionshare_cli/resources/torrc_template-meek_lite_azure
diff --git a/share/torrc_template-obfs4 b/cli/onionshare_cli/resources/torrc_template-obfs4
index 306c456c..306c456c 100644
--- a/share/torrc_template-obfs4
+++ b/cli/onionshare_cli/resources/torrc_template-obfs4
diff --git a/cli/onionshare_cli/resources/version.txt b/cli/onionshare_cli/resources/version.txt
new file mode 100644
index 00000000..4804c3be
--- /dev/null
+++ b/cli/onionshare_cli/resources/version.txt
@@ -0,0 +1 @@
+2.3.dev1 \ No newline at end of file
diff --git a/share/wordlist.txt b/cli/onionshare_cli/resources/wordlist.txt
index caf71f52..caf71f52 100644
--- a/share/wordlist.txt
+++ b/cli/onionshare_cli/resources/wordlist.txt
diff --git a/onionshare/settings.py b/cli/onionshare_cli/settings.py
index f9348a8e..82fcd6b9 100644
--- a/onionshare/settings.py
+++ b/cli/onionshare_cli/settings.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -29,8 +29,6 @@ try:
except:
pass
-from . import strings
-
class Settings(object):
"""
@@ -80,7 +78,7 @@ class Settings(object):
"ga": "Gaeilge", # Irish
"it": "Italiano", # Italian
"ja": "日本語", # Japanese
- "nb": "Norsk Bokmål", # Norwegian Bokmål
+ "nb_NO": "Norsk Bokmål", # Norwegian Bokmål
"fa": "فارسی", # Persian
"pl": "Polski", # Polish
"pt_BR": "Português (Brasil)", # Portuguese Brazil
diff --git a/onionshare/web/__init__.py b/cli/onionshare_cli/web/__init__.py
index d45b4983..f036d011 100644
--- a/onionshare/web/__init__.py
+++ b/cli/onionshare_cli/web/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/cli/onionshare_cli/web/chat_mode.py b/cli/onionshare_cli/web/chat_mode.py
new file mode 100644
index 00000000..15e236d3
--- /dev/null
+++ b/cli/onionshare_cli/web/chat_mode.py
@@ -0,0 +1,159 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <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_socketio import emit, join_room, leave_room
+
+
+class ChatModeWeb:
+ """
+ All of the web logic for chat mode
+ """
+
+ def __init__(self, common, web):
+ self.common = common
+ self.common.log("ChatModeWeb", "__init__")
+
+ self.web = web
+
+ # This tracks users in the room
+ self.connected_users = []
+
+ # This tracks the history id
+ self.cur_history_id = 0
+
+ self.define_routes()
+
+ def define_routes(self):
+ """
+ The web app routes for chatting
+ """
+
+ @self.web.app.route("/")
+ def index():
+ history_id = self.cur_history_id
+ self.cur_history_id += 1
+ session["name"] = (
+ session.get("name")
+ if session.get("name")
+ else self.common.build_username()
+ )
+ session["room"] = self.web.settings.default_settings["chat"]["room"]
+ 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(
+ render_template(
+ "chat.html",
+ static_url_path=self.web.static_url_path,
+ username=session.get("name"),
+ )
+ )
+ return self.web.add_security_headers(r)
+
+ @self.web.app.route("/update-session-username", methods=["POST"])
+ def update_session_username():
+ history_id = self.cur_history_id
+ data = request.get_json()
+ if data.get("username", "") not in self.connected_users:
+ session["name"] = data.get("username", session.get("name"))
+ 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,))
+ return self.web.add_security_headers(r)
+
+ @self.web.socketio.on("joined", namespace="/chat")
+ def joined(message):
+ """Sent by clients when they enter a room.
+ A status message is broadcast to all people in the room."""
+ self.connected_users.append(session.get("name"))
+ join_room(session.get("room"))
+ emit(
+ "status",
+ {
+ "username": session.get("name"),
+ "msg": "{} has joined.".format(session.get("name")),
+ "connected_users": self.connected_users,
+ "user": session.get("name"),
+ },
+ room=session.get("room"),
+ )
+
+ @self.web.socketio.on("text", namespace="/chat")
+ def text(message):
+ """Sent by a client when the user entered a new message.
+ The message is sent to all people in the room."""
+ emit(
+ "message",
+ {"username": session.get("name"), "msg": message["msg"]},
+ room=session.get("room"),
+ )
+
+ @self.web.socketio.on("update_username", namespace="/chat")
+ def update_username(message):
+ """Sent by a client when the user updates their username.
+ The message is sent to all people in the room."""
+ current_name = session.get("name")
+ if message["username"] not in self.connected_users:
+ session["name"] = message["username"]
+ self.connected_users[
+ self.connected_users.index(current_name)
+ ] = session.get("name")
+ emit(
+ "status",
+ {
+ "msg": "{} has updated their username to: {}".format(
+ current_name, session.get("name")
+ ),
+ "connected_users": self.connected_users,
+ "old_name": current_name,
+ "new_name": session.get("name"),
+ },
+ room=session.get("room"),
+ )
+
+ @self.web.socketio.on("disconnect", namespace="/chat")
+ def disconnect():
+ """Sent by clients when they disconnect from a room.
+ A status message is broadcast to all people in the room."""
+ self.connected_users.remove(session.get("name"))
+ leave_room(session.get("room"))
+ emit(
+ "status",
+ {
+ "msg": "{} has left the room.".format(session.get("name")),
+ "connected_users": self.connected_users,
+ },
+ room=session.get("room"),
+ )
diff --git a/onionshare/web/receive_mode.py b/cli/onionshare_cli/web/receive_mode.py
index 17613fdd..a0da0d3c 100644
--- a/onionshare/web/receive_mode.py
+++ b/cli/onionshare_cli/web/receive_mode.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
import os
import tempfile
import json
@@ -5,8 +25,6 @@ from datetime import datetime
from flask import Request, request, render_template, make_response, flash, redirect
from werkzeug.utils import secure_filename
-from .. import strings
-
class ReceiveModeWeb:
"""
@@ -106,8 +124,6 @@ class ReceiveModeWeb:
flash(msg, "error")
return redirect("/")
- # Note that flash strings are in English, and not translated, on purpose,
- # to avoid leaking the locale of the OnionShare user
if ajax:
info_flashes = []
diff --git a/onionshare/web/send_base_mode.py b/cli/onionshare_cli/web/send_base_mode.py
index 020b65e0..f9db28c6 100644
--- a/onionshare/web/send_base_mode.py
+++ b/cli/onionshare_cli/web/send_base_mode.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
import os
import sys
import tempfile
@@ -5,8 +25,6 @@ import mimetypes
import gzip
from flask import Response, request, render_template, make_response
-from .. import strings
-
class SendBaseModeWeb:
"""
diff --git a/onionshare/web/share_mode.py b/cli/onionshare_cli/web/share_mode.py
index 16a16a0b..39c82d31 100644
--- a/onionshare/web/share_mode.py
+++ b/cli/onionshare_cli/web/share_mode.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
import os
import sys
import tempfile
@@ -6,7 +26,6 @@ import mimetypes
from flask import Response, request, render_template, make_response
from .send_base_mode import SendBaseModeWeb
-from .. import strings
class ShareModeWeb(SendBaseModeWeb):
diff --git a/onionshare/web/web.py b/cli/onionshare_cli/web/web.py
index 8582e694..14d780c3 100644
--- a/onionshare/web/web.py
+++ b/cli/onionshare_cli/web/web.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
import hmac
import logging
import os
@@ -20,12 +40,12 @@ from flask import (
__version__ as flask_version,
)
from flask_httpauth import HTTPBasicAuth
-
-from .. import strings
+from flask_socketio import SocketIO
from .share_mode import ShareModeWeb
from .receive_mode import ReceiveModeWeb, ReceiveModeWSGIMiddleware, ReceiveModeRequest
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
@@ -134,12 +154,17 @@ class Web:
self.share_mode = None
self.receive_mode = None
self.website_mode = None
+ self.chat_mode = None
if self.mode == "share":
self.share_mode = ShareModeWeb(self.common, self)
elif self.mode == "receive":
self.receive_mode = ReceiveModeWeb(self.common, self)
elif self.mode == "website":
self.website_mode = WebsiteModeWeb(self.common, self)
+ elif self.mode == "chat":
+ self.socketio = SocketIO()
+ self.socketio.init_app(self.app)
+ self.chat_mode = ChatModeWeb(self.common, self)
def get_mode(self):
if self.mode == "share":
@@ -148,6 +173,8 @@ class Web:
return self.receive_mode
elif self.mode == "website":
return self.website_mode
+ elif self.mode == "chat":
+ return self.chat_mode
else:
return None
@@ -366,7 +393,10 @@ class Web:
host = "127.0.0.1"
self.running = True
- self.app.run(host=host, port=port, threaded=True)
+ if self.mode == "chat":
+ self.socketio.run(self.app, host=host, port=port)
+ else:
+ self.app.run(host=host, port=port, threaded=True)
def stop(self, port):
"""
diff --git a/onionshare/web/website_mode.py b/cli/onionshare_cli/web/website_mode.py
index 61b6d2c6..ef37ab12 100644
--- a/onionshare/web/website_mode.py
+++ b/cli/onionshare_cli/web/website_mode.py
@@ -1,3 +1,23 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
import os
import sys
import tempfile
@@ -5,7 +25,6 @@ import mimetypes
from flask import Response, request, render_template, make_response
from .send_base_mode import SendBaseModeWeb
-from .. import strings
class WebsiteModeWeb(SendBaseModeWeb):
diff --git a/poetry.lock b/cli/poetry.lock
index 7356fd18..3062c022 100644
--- a/poetry.lock
+++ b/cli/poetry.lock
@@ -1,15 +1,7 @@
[[package]]
category = "dev"
-description = "Python graph (network) package"
-marker = "sys_platform == \"darwin\""
-name = "altgraph"
-optional = false
-python-versions = "*"
-version = "0.17"
-
-[[package]]
-category = "dev"
description = "Atomic file writes."
+marker = "sys_platform == \"win32\""
name = "atomicwrites"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
@@ -21,13 +13,13 @@ description = "Classes Without Boilerplate"
name = "attrs"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "19.3.0"
+version = "20.2.0"
[package.extras]
-azure-pipelines = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "pytest-azurepipelines"]
-dev = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "pre-commit"]
-docs = ["sphinx", "zope.interface"]
-tests = ["coverage", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface"]
+dev = ["coverage (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "zope.interface", "sphinx", "sphinx-rtd-theme", "pre-commit"]
+docs = ["sphinx", "sphinx-rtd-theme", "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"]
[[package]]
category = "main"
@@ -54,22 +46,39 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
version = "7.1.2"
[[package]]
-category = "main"
+category = "dev"
description = "Cross-platform colored terminal text."
-marker = "platform_system == \"Windows\" or sys_platform == \"win32\""
+marker = "sys_platform == \"win32\""
name = "colorama"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-version = "0.4.3"
+version = "0.4.4"
[[package]]
-category = "dev"
-description = "Python 2.7 backport of the \"dis\" module from Python 3.5+"
-marker = "sys_platform == \"darwin\""
-name = "dis3"
+category = "main"
+description = "DNS toolkit"
+name = "dnspython"
+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"
optional = false
python-versions = "*"
-version = "0.1.3"
+version = "0.28.0"
+
+[package.dependencies]
+dnspython = ">=1.15.0,<2.0.0"
+greenlet = ">=0.3"
+monotonic = ">=1.4"
+six = ">=1.10.0"
[[package]]
category = "main"
@@ -103,6 +112,26 @@ Flask = "*"
[[package]]
category = "main"
+description = "Socket.IO integration for Flask applications"
+name = "flask-socketio"
+optional = false
+python-versions = "*"
+version = "4.3.1"
+
+[package.dependencies]
+Flask = ">=0.9"
+python-socketio = ">=4.3.0"
+
+[[package]]
+category = "main"
+description = "Lightweight in-process concurrent programming"
+name = "greenlet"
+optional = false
+python-versions = "*"
+version = "0.4.17"
+
+[[package]]
+category = "main"
description = "Internationalized Domain Names in Applications (IDNA)"
name = "idna"
optional = false
@@ -116,7 +145,7 @@ marker = "python_version < \"3.8\""
name = "importlib-metadata"
optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7"
-version = "1.7.0"
+version = "2.0.0"
[package.dependencies]
zipp = ">=0.5"
@@ -126,6 +155,14 @@ docs = ["sphinx", "rst.linker"]
testing = ["packaging", "pep517", "importlib-resources (>=1.3)"]
[[package]]
+category = "dev"
+description = "iniconfig: brain-dead simple config-ini parsing"
+name = "iniconfig"
+optional = false
+python-versions = "*"
+version = "1.0.1"
+
+[[package]]
category = "main"
description = "Various helpers to pass data to untrusted environments and back."
name = "itsdangerous"
@@ -156,12 +193,12 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
version = "1.1.1"
[[package]]
-category = "dev"
-description = "More routines for operating on iterables, beyond itertools"
-name = "more-itertools"
+category = "main"
+description = "An implementation of time.monotonic() for Python 2 & < 3.3"
+name = "monotonic"
optional = false
-python-versions = ">=3.5"
-version = "8.4.0"
+python-versions = "*"
+version = "1.5"
[[package]]
category = "dev"
@@ -209,20 +246,6 @@ version = "3.9.8"
[[package]]
category = "dev"
-description = "PyInstaller bundles a Python application and all its dependencies into a single package."
-marker = "sys_platform == \"darwin\""
-name = "pyinstaller"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
-version = "3.6"
-
-[package.dependencies]
-altgraph = "*"
-dis3 = "*"
-setuptools = "*"
-
-[[package]]
-category = "dev"
description = "Python parsing module"
name = "pyparsing"
optional = false
@@ -231,25 +254,6 @@ version = "2.4.7"
[[package]]
category = "main"
-description = "Python bindings for the Qt cross platform application toolkit"
-name = "pyqt5"
-optional = false
-python-versions = ">=3.5"
-version = "5.14.0"
-
-[package.dependencies]
-PyQt5-sip = ">=12.7,<13"
-
-[[package]]
-category = "main"
-description = "The sip module support for PyQt5"
-name = "pyqt5-sip"
-optional = false
-python-versions = ">=3.5"
-version = "12.8.0"
-
-[[package]]
-category = "main"
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
name = "pysocks"
optional = false
@@ -262,69 +266,56 @@ description = "pytest: simple powerful testing with Python"
name = "pytest"
optional = false
python-versions = ">=3.5"
-version = "5.4.3"
+version = "6.1.1"
[package.dependencies]
atomicwrites = ">=1.0"
attrs = ">=17.4.0"
colorama = "*"
-more-itertools = ">=4.0.0"
+iniconfig = "*"
packaging = "*"
pluggy = ">=0.12,<1.0"
-py = ">=1.5.0"
-wcwidth = "*"
+py = ">=1.8.2"
+toml = "*"
[package.dependencies.importlib-metadata]
python = "<3.8"
version = ">=0.12"
[package.extras]
-checkqa-mypy = ["mypy (v0.761)"]
+checkqa_mypy = ["mypy (0.780)"]
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"]
[[package]]
-category = "dev"
-description = "py.test plugin that activates the fault handler module for tests (dummy package)"
-name = "pytest-faulthandler"
+category = "main"
+description = "Engine.IO server"
+name = "python-engineio"
optional = false
python-versions = "*"
-version = "2.0.1"
-
-[package.dependencies]
-pytest = ">=5.0"
-
-[[package]]
-category = "dev"
-description = "pytest support for PyQt and PySide applications"
-name = "pytest-qt"
-optional = false
-python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
-version = "3.3.0"
+version = "3.13.2"
[package.dependencies]
-pytest = ">=3.0.0"
+six = ">=1.9.0"
[package.extras]
-dev = ["pre-commit", "tox"]
-doc = ["sphinx", "sphinx-rtd-theme"]
+asyncio_client = ["aiohttp (>=3.4)"]
+client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
category = "main"
-description = "QR Code image generator"
-name = "qrcode"
+description = "Socket.IO server"
+name = "python-socketio"
optional = false
python-versions = "*"
-version = "6.1"
+version = "4.6.0"
[package.dependencies]
-colorama = "*"
-six = "*"
+python-engineio = ">=3.13.0"
+six = ">=1.9.0"
[package.extras]
-dev = ["tox", "pytest", "mock"]
-maintainer = ["zest.releaser"]
-pil = ["pillow"]
-test = ["pytest", "pytest-cov", "mock"]
+asyncio_client = ["aiohttp (>=3.4)", "websockets (>=7.0)"]
+client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
[[package]]
category = "main"
@@ -361,12 +352,20 @@ python-versions = "*"
version = "1.8.0"
[[package]]
+category = "dev"
+description = "Python Library for Tom's Obvious, Minimal Language"
+name = "toml"
+optional = false
+python-versions = "*"
+version = "0.10.1"
+
+[[package]]
category = "main"
description = "HTTP library with thread-safe connection pooling, file post, and more."
name = "urllib3"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
-version = "1.25.9"
+version = "1.25.10"
[package.extras]
brotli = ["brotlipy (>=0.6.0)"]
@@ -374,14 +373,6 @@ secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0
socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
[[package]]
-category = "dev"
-description = "Measures the displayed width of unicode strings in a terminal"
-name = "wcwidth"
-optional = false
-python-versions = "*"
-version = "0.2.5"
-
-[[package]]
category = "main"
description = "The comprehensive WSGI web application library."
name = "werkzeug"
@@ -400,28 +391,24 @@ marker = "python_version < \"3.8\""
name = "zipp"
optional = false
python-versions = ">=3.6"
-version = "3.1.0"
+version = "3.3.0"
[package.extras]
docs = ["sphinx", "jaraco.packaging (>=3.2)", "rst.linker (>=1.9)"]
-testing = ["jaraco.itertools", "func-timeout"]
+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"]
[metadata]
-content-hash = "3a656a034d7365a1303dec5491a04be22f90db70fd922da2ede1441d8c88fec8"
-python-versions = "^3.6"
+content-hash = "5c1dfb397d3520827e3fd1a0b53903a87ba486750758ca532fb7c13f9eab0d35"
+python-versions = "^3.7"
[metadata.files]
-altgraph = [
- {file = "altgraph-0.17-py2.py3-none-any.whl", hash = "sha256:c623e5f3408ca61d4016f23a681b9adb100802ca3e3da5e718915a9e4052cebe"},
- {file = "altgraph-0.17.tar.gz", hash = "sha256:1f05a47122542f97028caf78775a095fbe6a2699b5089de8477eb583167d69aa"},
-]
atomicwrites = [
{file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"},
{file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"},
]
attrs = [
- {file = "attrs-19.3.0-py2.py3-none-any.whl", hash = "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c"},
- {file = "attrs-19.3.0.tar.gz", hash = "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"},
+ {file = "attrs-20.2.0-py2.py3-none-any.whl", hash = "sha256:fce7fc47dfc976152e82d53ff92fa0407700c21acd20886a13777a0d20e655dc"},
+ {file = "attrs-20.2.0.tar.gz", hash = "sha256:26b54ddbbb9ee1d34d5d3668dd37d6cf74990ab23c828c2888dccdceee395594"},
]
certifi = [
{file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"},
@@ -436,13 +423,15 @@ click = [
{file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
]
colorama = [
- {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"},
- {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"},
+ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
]
-dis3 = [
- {file = "dis3-0.1.3-py2-none-any.whl", hash = "sha256:61f7720dd0d8749d23fda3d7227ce74d73da11c2fade993a67ab2f9852451b14"},
- {file = "dis3-0.1.3-py3-none-any.whl", hash = "sha256:30b6412d33d738663e8ded781b138f4b01116437f0872aa56aa3adba6aeff218"},
- {file = "dis3-0.1.3.tar.gz", hash = "sha256:9259b881fc1df02ed12ac25f82d4a85b44241854330b1a651e40e0c675cb2d1e"},
+dnspython = [
+ {file = "dnspython-1.16.0-py2.py3-none-any.whl", hash = "sha256:f69c21288a962f4da86e56c4905b49d11aba7938d3d740e80d9e366ee4f1632d"},
+ {file = "dnspython-1.16.0.zip", hash = "sha256:36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01"},
+]
+eventlet = [
+ {file = "eventlet-0.28.0-py2.py3-none-any.whl", hash = "sha256:c8bba2fd235455eb04ae352b4cf975a6c27064f897f9febd48736413801a6930"},
+ {file = "eventlet-0.28.0.tar.gz", hash = "sha256:9c7c63e8a80c7d02d692b2cf308312402fa4777335fd3de5da45097383301ff3"},
]
flask = [
{file = "Flask-1.1.2-py2.py3-none-any.whl", hash = "sha256:8a4fdd8936eba2512e9c85df320a37e694c93945b33ef33c89946a340a238557"},
@@ -452,13 +441,41 @@ flask-httpauth = [
{file = "Flask-HTTPAuth-4.1.0.tar.gz", hash = "sha256:9e028e4375039a49031eb9ecc40be4761f0540476040f6eff329a31dabd4d000"},
{file = "Flask_HTTPAuth-4.1.0-py2.py3-none-any.whl", hash = "sha256:29e0288869a213c7387f0323b6bf2c7191584fb1da8aa024d9af118e5cd70de7"},
]
+flask-socketio = [
+ {file = "Flask-SocketIO-4.3.1.tar.gz", hash = "sha256:36c1d5765010d1f4e4f05b4cc9c20c289d9dc70698c88d1addd0afcfedc5b062"},
+ {file = "Flask_SocketIO-4.3.1-py2.py3-none-any.whl", hash = "sha256:3668675bf7763c5b5f56689d439f07356e89c0a52e0c9e9cd3cc08563c07b252"},
+]
+greenlet = [
+ {file = "greenlet-0.4.17-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:75e4c27188f28149b74e7685809f9227410fd15432a4438fc48627f518577fa5"},
+ {file = "greenlet-0.4.17-cp27-cp27m-win32.whl", hash = "sha256:3af587e9813f9bd8be9212722321a5e7be23b2bc37e6323a90e592ab0c2ef117"},
+ {file = "greenlet-0.4.17-cp27-cp27m-win_amd64.whl", hash = "sha256:ccd62f09f90b2730150d82f2f2ffc34d73c6ce7eac234aed04d15dc8a3023994"},
+ {file = "greenlet-0.4.17-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:13037e2d7ab2145300676852fa069235512fdeba4ed1e3bb4b0677a04223c525"},
+ {file = "greenlet-0.4.17-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:e495096e3e2e8f7192afb6aaeba19babc4fb2bdf543d7b7fed59e00c1df7f170"},
+ {file = "greenlet-0.4.17-cp35-cp35m-win32.whl", hash = "sha256:124a3ae41215f71dc91d1a3d45cbf2f84e46b543e5d60b99ecc20e24b4c8f272"},
+ {file = "greenlet-0.4.17-cp35-cp35m-win_amd64.whl", hash = "sha256:5494e3baeacc371d988345fbf8aa4bd15555b3077c40afcf1994776bb6d77eaf"},
+ {file = "greenlet-0.4.17-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bee111161420f341a346731279dd976be161b465c1286f82cc0779baf7b729e8"},
+ {file = "greenlet-0.4.17-cp36-cp36m-win32.whl", hash = "sha256:ac85db59aa43d78547f95fc7b6fd2913e02b9e9b09e2490dfb7bbdf47b2a4914"},
+ {file = "greenlet-0.4.17-cp36-cp36m-win_amd64.whl", hash = "sha256:4481002118b2f1588fa3d821936ffdc03db80ef21186b62b90c18db4ba5e743b"},
+ {file = "greenlet-0.4.17-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:be7a79988b8fdc5bbbeaed69e79cfb373da9759242f1565668be4fb7f3f37552"},
+ {file = "greenlet-0.4.17-cp37-cp37m-win32.whl", hash = "sha256:97f2b01ab622a4aa4b3724a3e1fba66f47f054c434fbaa551833fa2b41e3db51"},
+ {file = "greenlet-0.4.17-cp37-cp37m-win_amd64.whl", hash = "sha256:d3436110ca66fe3981031cc6aff8cc7a40d8411d173dde73ddaa5b8445385e2d"},
+ {file = "greenlet-0.4.17-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:a34023b9eabb3525ee059f3bf33a417d2e437f7f17e341d334987d4091ae6072"},
+ {file = "greenlet-0.4.17-cp38-cp38-win32.whl", hash = "sha256:e66a824f44892bc4ec66c58601a413419cafa9cec895e63d8da889c8a1a4fa4a"},
+ {file = "greenlet-0.4.17-cp38-cp38-win_amd64.whl", hash = "sha256:47825c3a109f0331b1e54c1173d4e57fa000aa6c96756b62852bfa1af91cd652"},
+ {file = "greenlet-0.4.17-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:1023d7b43ca11264ab7052cb09f5635d4afdb43df55e0854498fc63070a0b206"},
+ {file = "greenlet-0.4.17.tar.gz", hash = "sha256:41d8835c69a78de718e466dd0e6bfd4b46125f21a67c3ff6d76d8d8059868d6b"},
+]
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-1.7.0-py2.py3-none-any.whl", hash = "sha256:dc15b2969b4ce36305c51eebe62d418ac7791e9a157911d58bfb1f9ccd8e2070"},
- {file = "importlib_metadata-1.7.0.tar.gz", hash = "sha256:90bb658cdbbf6d1735b6341ce708fc7024a3e14e99ffdc5783edea9f9b077f83"},
+ {file = "importlib_metadata-2.0.0-py2.py3-none-any.whl", hash = "sha256:cefa1a2f919b866c5beb7c9f7b0ebb4061f30a8a9bf16d609b000e2dfaceb9c3"},
+ {file = "importlib_metadata-2.0.0.tar.gz", hash = "sha256:77a540690e24b0305878c37ffd421785a6f7e53c8b5720d211b211de8d0e95da"},
+]
+iniconfig = [
+ {file = "iniconfig-1.0.1-py3-none-any.whl", hash = "sha256:80cf40c597eb564e86346103f609d74efce0f6b4d4f30ec8ce9e2c26411ba437"},
+ {file = "iniconfig-1.0.1.tar.gz", hash = "sha256:e5f92f89355a67de0595932a6c6c02ab4afddc6fcdc0bfc5becd0d60884d3f69"},
]
itsdangerous = [
{file = "itsdangerous-1.1.0-py2.py3-none-any.whl", hash = "sha256:b12271b2047cb23eeb98c8b5622e2e5c5e9abd9784a153e9d8ef9cb4dd09d749"},
@@ -503,9 +520,9 @@ markupsafe = [
{file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
{file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
]
-more-itertools = [
- {file = "more-itertools-8.4.0.tar.gz", hash = "sha256:68c70cc7167bdf5c7c9d8f6954a7837089c6a36bf565383919bb595efb8a17e5"},
- {file = "more_itertools-8.4.0-py3-none-any.whl", hash = "sha256:b78134b2063dd214000685165d81c154522c3ee0a1c0d4d113c80361c234c5a2"},
+monotonic = [
+ {file = "monotonic-1.5-py2.py3-none-any.whl", hash = "sha256:552a91f381532e33cbd07c6a2655a21908088962bb8fa7239ecbcc6ad1140cc7"},
+ {file = "monotonic-1.5.tar.gz", hash = "sha256:23953d55076df038541e648a53676fb24980f7a1be290cdda21300b3bc21dfb0"},
]
packaging = [
{file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"},
@@ -551,59 +568,26 @@ pycryptodome = [
{file = "pycryptodome-3.9.8-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:de6e1cd75677423ff64712c337521e62e3a7a4fc84caabbd93207752e831a85a"},
{file = "pycryptodome-3.9.8.tar.gz", hash = "sha256:0e24171cf01021bc5dc17d6a9d4f33a048f09d62cc3f62541e95ef104588bda4"},
]
-pyinstaller = [
- {file = "PyInstaller-3.6.tar.gz", hash = "sha256:3730fa80d088f8bb7084d32480eb87cbb4ddb64123363763cf8f2a1378c1c4b7"},
-]
pyparsing = [
{file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
{file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
]
-pyqt5 = [
- {file = "PyQt5-5.14.0-5.14.0-cp35.cp36.cp37.cp38-abi3-macosx_10_6_intel.whl", hash = "sha256:895d4101f7f8c82bc728d7eb9da1c756955ce27a0c945eafe7f234dd03402853"},
- {file = "PyQt5-5.14.0-5.14.0-cp35.cp36.cp37.cp38-abi3-manylinux1_x86_64.whl", hash = "sha256:a757ba71c51f428b52ba404e781e2f19b4436b2c31298b8313339d5817781b65"},
- {file = "PyQt5-5.14.0-5.14.0-cp35.cp36.cp37.cp38-none-win32.whl", hash = "sha256:cc3529c0f7cbbe7491073458d5d15e7518ce544ad8c627f485e5db8a27fcaf61"},
- {file = "PyQt5-5.14.0-5.14.0-cp35.cp36.cp37.cp38-none-win_amd64.whl", hash = "sha256:0dcc128b72f83cce0fc7926c83f05a9b74b652b5eb31a4ab71693ac8829e73c8"},
- {file = "PyQt5-5.14.0.tar.gz", hash = "sha256:0145a6b7de15756366decb736c349a0cb510d706c83fda5b8cd9e0557bc1da72"},
-]
-pyqt5-sip = [
- {file = "PyQt5_sip-12.8.0-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:9ef12754021bcc1246f97e00ea62b5594dd5c61192830639ab4a1640bd4b7940"},
- {file = "PyQt5_sip-12.8.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:fa3d70f370604efc67085849d3d1d3d2109faa716c520faf601d15845df64de6"},
- {file = "PyQt5_sip-12.8.0-cp35-cp35m-win32.whl", hash = "sha256:61aa60fb848d740581646603a12c2dcb8d7c4cbd2a9c476a1c891ec360ff0b87"},
- {file = "PyQt5_sip-12.8.0-cp35-cp35m-win_amd64.whl", hash = "sha256:8d9f4dc7dbae9783c5dafd66801875a2ebf9302c3addd5739f772285c1c1e91c"},
- {file = "PyQt5_sip-12.8.0-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:9b69db29571dde679908fb237784a8e7af4a2cbf1b7bb25bdb86e487210e04d2"},
- {file = "PyQt5_sip-12.8.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:58eae636e0b1926cddec98a703319a47f671cef07d73aaa525ba421cd4adfeb5"},
- {file = "PyQt5_sip-12.8.0-cp36-cp36m-win32.whl", hash = "sha256:e6254647fa35e1260282aeb9c32a3dd363287b9a1ffcc4f22bd27e54178e92e4"},
- {file = "PyQt5_sip-12.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f4c294bfaf2be8004583266d4621bfd3a387e12946f548f966a7fbec91845f1b"},
- {file = "PyQt5_sip-12.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:224e2fbb7088595940c348d168a317caa2110cbb7a5b957a8c3fc0d9296ee069"},
- {file = "PyQt5_sip-12.8.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c19c4ad67af087e8f4411da7422391b236b941f5f0697f615c5816455d1355d"},
- {file = "PyQt5_sip-12.8.0-cp37-cp37m-win32.whl", hash = "sha256:2a1153cda63f2632d3d5698f0cf29f6b1f1d5162305dc6f5b23336ad8f1039ed"},
- {file = "PyQt5_sip-12.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:94c80677b1e8c92fa080e24045d54ace5e4343c4ee6d0216675cd91d6f8e122a"},
- {file = "PyQt5_sip-12.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2a2239d16a49ce6eaf10166a84424543111f8ebe49d3c124d02af91b01a58425"},
- {file = "PyQt5_sip-12.8.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:b1bbe763d431d26f9565cba3e99866768761366ab6d609d2506d194882156fa7"},
- {file = "PyQt5_sip-12.8.0-cp38-cp38-win32.whl", hash = "sha256:d7b8a8f89385ad9e3da38e0123c22c0efc18005e0e2731b6b95e4c21db2049d2"},
- {file = "PyQt5_sip-12.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:1d65ce08a56282fb0273dd06585b8927b88d4fba71c01a54f8e2ac87ac1ed387"},
- {file = "PyQt5_sip-12.8.0.tar.gz", hash = "sha256:0a34b6596bdd28d52da3a51fa8d9bb0b287bcb605c2512aa3251b9028cc71f4d"},
-]
pysocks = [
{file = "PySocks-1.7.1-py27-none-any.whl", hash = "sha256:08e69f092cc6dbe92a0fdd16eeb9b9ffbc13cadfe5ca4c7bd92ffb078b293299"},
{file = "PySocks-1.7.1-py3-none-any.whl", hash = "sha256:2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5"},
{file = "PySocks-1.7.1.tar.gz", hash = "sha256:3f8804571ebe159c380ac6de37643bb4685970655d3bba243530d6558b799aa0"},
]
pytest = [
- {file = "pytest-5.4.3-py3-none-any.whl", hash = "sha256:5c0db86b698e8f170ba4582a492248919255fcd4c79b1ee64ace34301fb589a1"},
- {file = "pytest-5.4.3.tar.gz", hash = "sha256:7979331bfcba207414f5e1263b5a0f8f521d0f457318836a7355531ed1a4c7d8"},
-]
-pytest-faulthandler = [
- {file = "pytest-faulthandler-2.0.1.tar.gz", hash = "sha256:ed72bbce87ac344da81eb7d882196a457d4a1026a3da4a57154dacd85cd71ae5"},
- {file = "pytest_faulthandler-2.0.1-py2.py3-none-any.whl", hash = "sha256:236430ba962fd1c910d670922be55fe5b25ea9bc3fc6561a0cafbb8759e7504d"},
+ {file = "pytest-6.1.1-py3-none-any.whl", hash = "sha256:7a8190790c17d79a11f847fba0b004ee9a8122582ebff4729a082c109e81a4c9"},
+ {file = "pytest-6.1.1.tar.gz", hash = "sha256:8f593023c1a0f916110285b6efd7f99db07d59546e3d8c36fc60e2ab05d3be92"},
]
-pytest-qt = [
- {file = "pytest-qt-3.3.0.tar.gz", hash = "sha256:714b0bf86c5313413f2d300ac613515db3a1aef595051ab8ba2ffe619dbe8925"},
- {file = "pytest_qt-3.3.0-py2.py3-none-any.whl", hash = "sha256:5f8928288f50489d83f5d38caf2d7d9fcd6e7cf769947902caa4661dc7c851e3"},
+python-engineio = [
+ {file = "python-engineio-3.13.2.tar.gz", hash = "sha256:36b33c6aa702d9b6a7f527eec6387a2da1a9a24484ec2f086d76576413cef04b"},
+ {file = "python_engineio-3.13.2-py2.py3-none-any.whl", hash = "sha256:cfded18156862f94544a9f8ef37f56727df731c8552d7023f5afee8369be2db6"},
]
-qrcode = [
- {file = "qrcode-6.1-py2.py3-none-any.whl", hash = "sha256:3996ee560fc39532910603704c82980ff6d4d5d629f9c3f25f34174ce8606cf5"},
- {file = "qrcode-6.1.tar.gz", hash = "sha256:505253854f607f2abf4d16092c61d4e9d511a3b4392e60bff957a68592b04369"},
+python-socketio = [
+ {file = "python-socketio-4.6.0.tar.gz", hash = "sha256:358d8fbbc029c4538ea25bcaa283e47f375be0017fcba829de8a3a731c9df25a"},
+ {file = "python_socketio-4.6.0-py2.py3-none-any.whl", hash = "sha256:d437f797c44b6efba2f201867cf02b8c96b97dff26d4e4281ac08b45817cd522"},
]
requests = [
{file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"},
@@ -616,19 +600,19 @@ six = [
stem = [
{file = "stem-1.8.0.tar.gz", hash = "sha256:a0b48ea6224e95f22aa34c0bc3415f0eb4667ddeae3dfb5e32a6920c185568c2"},
]
-urllib3 = [
- {file = "urllib3-1.25.9-py2.py3-none-any.whl", hash = "sha256:88206b0eb87e6d677d424843ac5209e3fb9d0190d0ee169599165ec25e9d9115"},
- {file = "urllib3-1.25.9.tar.gz", hash = "sha256:3018294ebefce6572a474f0604c2021e33b3fd8006ecd11d62107a5d2a963527"},
+toml = [
+ {file = "toml-0.10.1-py2.py3-none-any.whl", hash = "sha256:bda89d5935c2eac546d648028b9901107a595863cb36bae0c73ac804a9b4ce88"},
+ {file = "toml-0.10.1.tar.gz", hash = "sha256:926b612be1e5ce0634a2ca03470f95169cf16f939018233a670519cb4ac58b0f"},
]
-wcwidth = [
- {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"},
- {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"},
+urllib3 = [
+ {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"},
+ {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"},
]
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.1.0-py3-none-any.whl", hash = "sha256:aa36550ff0c0b7ef7fa639055d797116ee891440eac1a56f378e2d3179e0320b"},
- {file = "zipp-3.1.0.tar.gz", hash = "sha256:c599e4d75c98f6798c509911d08a22e6c021d074469042177c8c86fb92eefd96"},
+ {file = "zipp-3.3.0-py3-none-any.whl", hash = "sha256:eed8ec0b8d1416b2ca33516a37a08892442f3954dee131e92cfd92d8fe3e7066"},
+ {file = "zipp-3.3.0.tar.gz", hash = "sha256:64ad89efee774d1897a58607895d80789c59778ea02185dd846ac38394a8642b"},
]
diff --git a/cli/pyproject.toml b/cli/pyproject.toml
new file mode 100644
index 00000000..576444ae
--- /dev/null
+++ b/cli/pyproject.toml
@@ -0,0 +1,40 @@
+[tool.poetry]
+name = "onionshare_cli"
+version = "2.3.dev1"
+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+"
+classifiers = [
+ "Programming Language :: Python :: 3",
+ "Framework :: Flask",
+ "Topic :: Communications :: File Sharing",
+ "Topic :: Security :: Cryptography",
+ "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
+ "Intended Audience :: End Users/Desktop",
+ "Operating System :: OS Independent",
+ "Environment :: Web Environment",
+]
+
+[tool.poetry.dependencies]
+python = "^3.7"
+Click = "*"
+Flask = "*"
+Flask-HTTPAuth = "*"
+flask-socketio = "*"
+pycryptodome = "*"
+PySocks = "*"
+requests = "*"
+stem = "*"
+urllib3 = "*"
+eventlet = "*"
+
+[tool.poetry.dev-dependencies]
+pytest = "*"
+setuptools = "*"
+
+[tool.poetry.scripts]
+onionshare-cli = 'onionshare_cli:main'
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"
diff --git a/tests/__init__.py b/cli/tests/__init__.py
index e69de29b..e69de29b 100644
--- a/tests/__init__.py
+++ b/cli/tests/__init__.py
diff --git a/tests/conftest.py b/cli/tests/conftest.py
index 200f526d..04d4112a 100644
--- a/tests/conftest.py
+++ b/cli/tests/conftest.py
@@ -12,7 +12,7 @@ import tempfile
import pytest
-from onionshare import common, web, settings, strings
+from onionshare_cli import common, web
# The temporary directory for CLI tests
@@ -21,9 +21,6 @@ test_temp_dir = None
def pytest_addoption(parser):
parser.addoption(
- "--rungui", action="store_true", default=False, help="run GUI tests"
- )
- parser.addoption(
"--runtor", action="store_true", default=False, help="run tor tests"
)
@@ -36,13 +33,6 @@ def pytest_collection_modifyitems(config, items):
if "tor" in item.keywords:
item.add_marker(skip_tor)
- if not config.getoption("--rungui"):
- # --rungui given in cli: do not skip GUI tests
- skip_gui = pytest.mark.skip(reason="need --rungui option to run")
- for item in items:
- if "gui" in item.keywords:
- item.add_marker(skip_gui)
-
@pytest.fixture
def temp_dir():
@@ -98,9 +88,10 @@ def temp_file_1024_delete(temp_dir):
The temporary file will be deleted after fixture usage.
"""
- with tempfile.NamedTemporaryFile(dir=temp_dir) as tmp_file:
+ with tempfile.NamedTemporaryFile(dir=temp_dir, delete=False) as tmp_file:
tmp_file.write(b"*" * 1024)
tmp_file.flush()
+ tmp_file.close()
yield tmp_file.name
@@ -204,5 +195,4 @@ def common_obj():
def settings_obj(sys_onionshare_dev_mode, platform_linux):
_common = common.Common()
_common.version = "DUMMY_VERSION_1.2.3"
- strings.load_strings(_common)
return settings.Settings(_common)
diff --git a/tests/pytest.ini b/cli/tests/pytest.ini
index 393e0dd8..393e0dd8 100644
--- a/tests/pytest.ini
+++ b/cli/tests/pytest.ini
diff --git a/tests/test_cli.py b/cli/tests/test_cli.py
index 3c85e60d..99f26547 100644
--- a/tests/test_cli.py
+++ b/cli/tests/test_cli.py
@@ -1,29 +1,10 @@
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
import os
import pytest
-from onionshare import OnionShare
-from onionshare.common import Common
-from onionshare.mode_settings import ModeSettings
+from onionshare_cli import OnionShare
+from onionshare_cli.common import Common
+from onionshare_cli.mode_settings import ModeSettings
class MyOnion:
@@ -33,7 +14,9 @@ class MyOnion:
self.scheduled_key = None
@staticmethod
- def start_onion_service(self, mode_settings_obj, await_publication=True, save_scheduled_key=False):
+ def start_onion_service(
+ self, mode_settings_obj, await_publication=True, save_scheduled_key=False
+ ):
return "test_service_id.onion"
diff --git a/tests/test_cli_common.py b/cli/tests/test_cli_common.py
index 3592d1ba..b60d22d7 100644
--- a/tests/test_cli_common.py
+++ b/cli/tests/test_cli_common.py
@@ -1,22 +1,3 @@
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
import contextlib
import inspect
import io
@@ -29,13 +10,6 @@ import zipfile
import pytest
-LOG_MSG_REGEX = re.compile(
- r"""
- ^\[Jun\ 06\ 2013\ 11:05:00\]
- \ TestModule\.<function\ TestLog\.test_output\.<locals>\.dummy_func
- \ at\ 0x[a-f0-9]+>(:\ TEST_MSG)?$""",
- re.VERBOSE,
-)
PASSWORD_REGEX = re.compile(r"^([a-z]+)(-[a-z]+)?-([a-z]+)(-[a-z]+)?$")
@@ -194,7 +168,7 @@ class TestGetResourcePath:
) == os.path.join(prefix, "test_filename")
def test_linux(self, common_obj, platform_linux, sys_argv_sys_prefix):
- prefix = os.path.join(sys.prefix, "share/onionshare")
+ prefix = os.path.join(sys.prefix, "share", "onionshare")
assert common_obj.get_resource_path(
os.path.join(prefix, "test_filename")
) == os.path.join(prefix, "test_filename")
@@ -207,7 +181,7 @@ class TestGetResourcePath:
class TestGetTorPaths:
- # @pytest.mark.skipif(sys.platform != 'Darwin', reason='requires MacOS') ?
+ @pytest.mark.skipif(sys.platform != "Darwin", reason="requires MacOS")
def test_get_tor_paths_darwin(
self, platform_darwin, common_obj, sys_frozen, sys_meipass
):
@@ -225,7 +199,7 @@ class TestGetTorPaths:
obfs4proxy_file_path,
)
- # @pytest.mark.skipif(sys.platform != 'Linux', reason='requires Linux') ?
+ @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
def test_get_tor_paths_linux(self, platform_linux, common_obj):
(
tor_path,
@@ -235,10 +209,16 @@ class TestGetTorPaths:
) = common_obj.get_tor_paths()
assert os.path.basename(tor_path) == "tor"
- assert tor_geo_ip_file_path == "/usr/share/tor/geoip"
- assert tor_geo_ipv6_file_path == "/usr/share/tor/geoip6"
+ assert (
+ tor_geo_ip_file_path == "/usr/share/tor/geoip"
+ or tor_geo_ip_file_path == "/usr/local/share/tor/geoip"
+ )
+ assert (
+ tor_geo_ipv6_file_path == "/usr/share/tor/geoip6"
+ or tor_geo_ipv6_file_path == "/usr/local/share/tor/geoip6"
+ )
- # @pytest.mark.skipif(sys.platform != 'Windows', reason='requires Windows') ?
+ @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"
@@ -281,36 +261,15 @@ class TestHumanReadableFilesize:
class TestLog:
- @pytest.mark.parametrize(
- "test_input",
- (
- (
- "[Jun 06 2013 11:05:00]"
- " TestModule.<function TestLog.test_output.<locals>.dummy_func"
- " at 0xdeadbeef>"
- ),
- (
- "[Jun 06 2013 11:05:00]"
- " TestModule.<function TestLog.test_output.<locals>.dummy_func"
- " at 0xdeadbeef>: TEST_MSG"
- ),
- ),
- )
- def test_log_msg_regex(self, test_input):
- assert bool(LOG_MSG_REGEX.match(test_input))
-
def test_output(self, common_obj, time_strftime):
- def dummy_func():
- pass
-
common_obj.verbose = True
# From: https://stackoverflow.com/questions/1218933
with io.StringIO() as buf, contextlib.redirect_stdout(buf):
- common_obj.log("TestModule", dummy_func)
- common_obj.log("TestModule", dummy_func, "TEST_MSG")
+ common_obj.log("TestModule", "dummy_func")
+ common_obj.log("TestModule", "dummy_func", "TEST_MSG")
output = buf.getvalue()
line_one, line_two, _ = output.split("\n")
- assert LOG_MSG_REGEX.match(line_one)
- assert LOG_MSG_REGEX.match(line_two)
+ 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"
diff --git a/tests/test_cli_settings.py b/cli/tests/test_cli_settings.py
index 7a1e8de5..62f97267 100644
--- a/tests/test_cli_settings.py
+++ b/cli/tests/test_cli_settings.py
@@ -1,29 +1,11 @@
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
import json
import os
import tempfile
+import sys
import pytest
-from onionshare import common, settings, strings
+from onionshare_cli import common, settings
@pytest.fixture
@@ -84,8 +66,6 @@ class TestSettings:
assert os.path.exists(tmp_file_path) is False
def test_save(self, monkeypatch, temp_dir, settings_obj):
- monkeypatch.setattr(strings, "_", lambda _: "")
-
settings_filename = "default_settings.json"
new_temp_dir = tempfile.mkdtemp(dir=temp_dir)
settings_path = os.path.join(new_temp_dir, settings_filename)
@@ -135,18 +115,27 @@ class TestSettings:
settings_obj.set("socks_port", "NON_INTEGER")
assert settings_obj._settings["socks_port"] == 9050
+ @pytest.mark.skipif(sys.platform != "Darwin", reason="requires Darwin")
def test_filename_darwin(self, monkeypatch, platform_darwin):
obj = settings.Settings(common.Common())
assert obj.filename == os.path.expanduser(
"~/Library/Application Support/OnionShare-testdata/onionshare.json"
)
+ @pytest.mark.skipif(sys.platform != "Linux", reason="requires Linux")
def test_filename_linux(self, monkeypatch, platform_linux):
obj = settings.Settings(common.Common())
assert obj.filename == os.path.expanduser(
"~/.config/onionshare-testdata/onionshare.json"
)
+ @pytest.mark.skipif(sys.platform != "win32", reason="requires Windows")
+ def test_filename_windows(self, monkeypatch, platform_windows):
+ obj = settings.Settings(common.Common())
+ assert obj.filename == os.path.expanduser(
+ "~\\AppData\\Roaming\\OnionShare-testdata\\onionshare.json"
+ )
+
def test_set_custom_bridge(self, settings_obj):
settings_obj.set(
"tor_bridges_use_custom_bridges",
diff --git a/tests/test_cli_web.py b/cli/tests/test_cli_web.py
index 2e7d427b..063bd43c 100644
--- a/tests/test_cli_web.py
+++ b/cli/tests/test_cli_web.py
@@ -1,22 +1,3 @@
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
import contextlib
import inspect
import io
@@ -32,11 +13,10 @@ import base64
import pytest
from werkzeug.datastructures import Headers
-from onionshare.common import Common
-from onionshare import strings
-from onionshare.web import Web
-from onionshare.settings import Settings
-from onionshare.mode_settings import ModeSettings
+from onionshare_cli.common import Common
+from onionshare_cli.web import Web
+from onionshare_cli.settings import Settings
+from onionshare_cli.mode_settings import ModeSettings
DEFAULT_ZW_FILENAME_REGEX = re.compile(r"^onionshare_[a-z2-7]{6}.zip$")
RANDOM_STR_REGEX = re.compile(r"^[a-z2-7]+$")
@@ -45,7 +25,6 @@ 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 """
common_obj.settings = Settings(common_obj)
- strings.load_strings(common_obj)
mode_settings = ModeSettings(common_obj)
web = Web(common_obj, False, mode_settings, mode)
web.generate_password()
@@ -93,7 +72,10 @@ class TestWeb:
res = c.get("/download", headers=self._make_auth_headers(web.password))
res.get_data()
assert res.status_code == 200
- assert res.mimetype == "application/zip"
+ assert (
+ res.mimetype == "application/zip"
+ or res.mimetype == "application/x-zip-compressed"
+ )
def test_share_mode_autostop_sharing_on(self, temp_dir, common_obj, temp_file_1024):
web = web_obj(temp_dir, common_obj, "share", 3)
@@ -106,11 +88,16 @@ class TestWeb:
res = c.get("/download", headers=self._make_auth_headers(web.password))
res.get_data()
assert res.status_code == 200
- assert res.mimetype == "application/zip"
+ assert (
+ res.mimetype == "application/zip"
+ or res.mimetype == "application/x-zip-compressed"
+ )
assert web.running == False
- def test_share_mode_autostop_sharing_off(self, temp_dir, common_obj, temp_file_1024):
+ def test_share_mode_autostop_sharing_off(
+ self, temp_dir, common_obj, temp_file_1024
+ ):
web = web_obj(temp_dir, common_obj, "share", 3)
web.settings.set("share", "autostop_sharing", False)
@@ -121,7 +108,10 @@ class TestWeb:
res = c.get("/download", headers=self._make_auth_headers(web.password))
res.get_data()
assert res.status_code == 200
- assert res.mimetype == "application/zip"
+ assert (
+ res.mimetype == "application/zip"
+ or res.mimetype == "application/x-zip-compressed"
+ )
assert web.running == True
def test_receive_mode(self, temp_dir, common_obj):
diff --git a/desktop/.gitignore b/desktop/.gitignore
new file mode 100644
index 00000000..a08e1f35
--- /dev/null
+++ b/desktop/.gitignore
@@ -0,0 +1 @@
+linux
diff --git a/desktop/README.md b/desktop/README.md
new file mode 100644
index 00000000..7d816b16
--- /dev/null
+++ b/desktop/README.md
@@ -0,0 +1,184 @@
+# OnionShare Desktop
+
+## Building OnionShare
+
+Start by getting the source code and changing to the `desktop` folder:
+
+```sh
+git clone https://github.com/micahflee/onionshare.git
+cd onionshare/desktop
+```
+
+### Install platform-specific dependencies
+
+#### Linux
+
+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.
+
+#### macOS
+
+#### Windows
+
+These instructions include adding folders to the path in Windows. To do this, go to Start and type "advanced system settings", and open "View advanced system settings" in the Control Panel. Click Environment Variables. Under "System variables" double-click on Path. From there you can add and remove folders that are available in the PATH.
+
+Download Python 3.8.6, 32-bit (x86) from https://www.python.org/downloads/release/python-386/. I downloaded `python-3.8.6.exe`. When installing it, make sure to check the "Add Python 3.8 to PATH" checkbox on the first page of the installer.
+
+Download and install 7-Zip from http://www.7-zip.org/download.html. I downloaded `7z1900.exe`. Add `C:\Program Files (x86)\7-Zip` to your path.
+
+Download Tor Browser and extract the binaries by running:
+
+```
+pip install requests
+python scripts\get-tor-windows.py
+```
+
+### Prepare the code
+
+In order to work with the desktop app, you'll need to build a wheel of the CLI package first, and copy it into the `desktop` folder:
+
+```sh
+cd ../cli
+poetry install
+poetry build
+cp dist/onionshare_cli-*.whl ../desktop
+cd ../desktop
+```
+
+OnionShare uses [Briefcase](https://briefcase.readthedocs.io/en/latest/).
+
+Install Briefcase dependencies by following [these instructions](https://docs.beeware.org/en/latest/tutorial/tutorial-0.html#install-dependencies).
+
+Now create and/or activate a virtual environment.
+
+* Linux and macOS
+ ```
+ python3 -m venv venv
+ . venv/bin/activate
+ ```
+* Windows
+ ```
+ python -m venv venv
+ venv\Scripts\activate.bat
+ ```
+
+While your virtual environment is active, install briefcase from pip.
+
+```
+pip install briefcase
+```
+
+Run OnionShare from the source tree like this:
+
+```
+briefcase dev -d
+```
+
+## Running tests
+
+Install these packages inside your virtual environment:
+
+```sh
+pip install pytest pytest-briefcase pytest-faulthandler pytest-qt
+```
+
+Then run the tests:
+
+```sh
+./tests/run.sh
+```
+
+If you want to run tests while hiding the GUI, you must have the `xvfb` package installed, and then:
+
+```sh
+xvfb-run ./tests/run.sh
+```
+
+## Making a release
+
+### Flatpak packaging
+
+See: https://github.com/micahflee/org.onionshare.OnionShare
+
+### Snapcraft packaging
+
+This folder contains files to build a [snap package](https://snapcraft.io/). First make sure you install `snap` and `snapcraft` (`snap install snapcraft --classic`).
+
+To build the snap, cd to the `onionshare` folder and run:
+
+```sh
+snapcraft
+snap install --devmode ./onionshare_*.snap
+```
+
+See your installed snaps:
+
+```sh
+snap list
+```
+
+Run the OnionShare snap:
+
+```sh
+/snap/bin/onionshare # CLI version
+/snap/bin/onionshare.onionshare-gui # GUI version
+```
+
+Delete the OnionShare snap:
+
+```sh
+snap remove onionshare
+```
+
+### Linux
+
+Build a wheel package for OnionShare CLI:
+
+```sh
+cd onionshare/cli
+poetry install
+poetry build
+```
+
+This will make a file like `dist/onionshare_cli-$VERSION-py3-none-any.whl` (except with your specific version number). Move it into `../desktop/linux`:
+
+```
+mkdir -p ../desktop/linux
+mv dist/onionshare_cli-*-py3-none-any.whl ../desktop/linux
+# change back to the desktop directory
+cd ../desktop
+```
+
+Make sure the virtual environment is active, and then run `briefcase create` and `briefcase build`:
+
+```sh
+. venv/bin/activate
+briefcase create
+briefcase build
+```
+
+### Windows
+
+Build a wheel package for OnionShare CLI (including Tor binaries, from Tor Browser):
+
+```sh
+cd onionshare\cli
+poetry install
+poetry build
+```
+
+This will make a file like `dist\onionshare_cli-$VERSION-py3-none-any.whl` (except with your specific version number). Move it into `..\desktop`:
+
+```
+move dist\onionshare_cli-*-py3-none-any.whl ..\desktop
+cd ..\desktop
+```
+
+Make sure the virtual environment is active, and then run `briefcase create`:
+
+```sh
+venv\Scripts\activate.bat
+briefcase create
+briefcase package
+```
+
+TODO: Codesign \ No newline at end of file
diff --git a/install/build_deb.sh b/desktop/install/build_deb.sh
index aec026a4..aec026a4 100755
--- a/install/build_deb.sh
+++ b/desktop/install/build_deb.sh
diff --git a/install/build_exe.bat b/desktop/install/build_exe.bat
index ba626fa2..ba626fa2 100644
--- a/install/build_exe.bat
+++ b/desktop/install/build_exe.bat
diff --git a/install/build_osx.sh b/desktop/install/build_osx.sh
index 40e1fe90..9d286591 100755
--- a/install/build_osx.sh
+++ b/desktop/install/build_osx.sh
@@ -20,9 +20,7 @@ cd $ROOT
if [ "$1" = "--release" ]; then
mkdir -p dist
APP_PATH="$ROOT/dist/OnionShare.app"
- PKG_PATH="$ROOT/dist/OnionShare.pkg"
- IDENTITY_NAME_APPLICATION="Developer ID Application: Micah Lee"
- IDENTITY_NAME_INSTALLER="Developer ID Installer: Micah Lee"
+ IDENTITY_NAME_APPLICATION="Developer ID Application: Micah Lee (N9B95FDWH4)"
ENTITLEMENTS_CHILD_PATH="$ROOT/install/macos_sandbox/child.plist"
ENTITLEMENTS_PARENT_PATH="$ROOT/install/macos_sandbox/parent.plist"
@@ -30,26 +28,30 @@ if [ "$1" = "--release" ]; then
codesign \
--deep \
-s "$IDENTITY_NAME_APPLICATION" \
+ -o runtime \
--force \
--entitlements "$ENTITLEMENTS_CHILD_PATH" \
--timestamp \
"$APP_PATH"
codesign \
-s "$IDENTITY_NAME_APPLICATION" \
+ -o runtime \
--force \
--entitlements "$ENTITLEMENTS_PARENT_PATH" \
--timestamp \
"$APP_PATH"
- echo "Creating an installer"
- productbuild \
- --sign "$IDENTITY_NAME_INSTALLER" \
- --component "$APP_PATH" /Applications \
- --timestamp \
- "$PKG_PATH"
+ echo "Create the DMG"
+ if [ ! -f "/usr/local/bin/create-dmg" ]; then
+ echo "Error: create-dmg is not installed"
+ exit 0
+ fi
+ /usr/local/bin/create-dmg "$APP_PATH" --identity "$IDENTITY_NAME_APPLICATION"
+ mv *.dmg dist
echo "Cleaning up"
rm -rf "$APP_PATH"
- echo "All done, your installer is in: $PKG_PATH"
+ echo "All done, your DMG is in:"
+ ls dist/*.dmg
fi
diff --git a/install/build_rpm.sh b/desktop/install/build_rpm.sh
index 22153c6d..145f0a3c 100755
--- a/install/build_rpm.sh
+++ b/desktop/install/build_rpm.sh
@@ -9,7 +9,7 @@ VERSION=`cat share/version.txt`
rm -r build dist >/dev/null 2>&1
# build binary package
-python3 setup.py bdist_rpm --requires="python3-flask, python3-flask-httpauth, python3-stem, python3-qt5, python3-crypto, python3-pysocks, nautilus-python, tor, obfs4"
+python3 setup.py bdist_rpm --requires="python3-flask, python3-flask-httpauth, python3-stem, python3-qt5, python3-crypto, python3-pysocks, nautilus-python, tor, obfs4, python3-psutil, python3-socketio, python3-flask-socketio, python3-qrcode"
# install it
echo ""
diff --git a/install/build_source.sh b/desktop/install/build_source.sh
index d7f48722..d7f48722 100755
--- a/install/build_source.sh
+++ b/desktop/install/build_source.sh
diff --git a/install/check_lacked_trans.py b/desktop/install/check_lacked_trans.py
index 62986707..965b103b 100755
--- a/install/check_lacked_trans.py
+++ b/desktop/install/check_lacked_trans.py
@@ -27,7 +27,12 @@ es disused gui_starting_server
"""
-import fileinput, argparse, re, os, codecs, json, sys
+import argparse
+import re
+import os
+import codecs
+import json
+import sys
def arg_parser():
@@ -68,29 +73,53 @@ def main():
dir = args.onionshare_dir
src = (
- files_in(dir, "onionshare")
- + files_in(dir, "onionshare_gui")
- + files_in(dir, "onionshare_gui/mode")
- + files_in(dir, "onionshare_gui/mode/share_mode")
- + files_in(dir, "onionshare_gui/mode/receive_mode")
- + files_in(dir, "onionshare_gui/mode/website_mode")
+ files_in(dir, "onionshare_gui")
+ + files_in(dir, "onionshare_gui/tab")
+ + files_in(dir, "onionshare_gui/tab/mode")
+ + files_in(dir, "onionshare_gui/tab/mode/chat_mode")
+ + files_in(dir, "onionshare_gui/tab/mode/receive_mode")
+ + files_in(dir, "onionshare_gui/tab/mode/share_mode")
+ + files_in(dir, "onionshare_gui/tab/mode/website_mode")
+ files_in(dir, "install/scripts")
- + files_in(dir, "tests")
)
- pysrc = [p for p in src if p.endswith(".py")]
+ filenames = [p for p in src if p.endswith(".py")]
lang_code = args.lang_code
translate_keys = set()
- # load translate key from python source
- for line in fileinput.input(pysrc, openhook=fileinput.hook_encoded("utf-8")):
- # search `strings._('translate_key')`
- # `strings._('translate_key', True)`
- m = re.findall(r"strings\._\((.*?)\)", line)
- if m:
- for match in m:
- key = match.split(",")[0].strip(""""' """)
- translate_keys.add(key)
+ for filename in filenames:
+ # load translate key from python source
+ with open(filename) as f:
+ src = f.read()
+
+ # find all the starting strings
+ start_substr = "strings._\("
+ starting_indices = [m.start() for m in re.finditer(start_substr, src)]
+
+ for starting_i in starting_indices:
+ # are we dealing with single quotes or double quotes?
+ quote = None
+ inc = 0
+ while True:
+ quote_i = starting_i + len("strings._(") + inc
+ if src[quote_i] == '"':
+ quote = '"'
+ break
+ elif src[quote_i] == "'":
+ quote = "'"
+ break
+ else:
+ inc += 1
+
+ # find the starting quote
+ starting_i = src.find(quote, starting_i)
+ if starting_i:
+ starting_i += 1
+ # find the ending quote
+ ending_i = src.find(quote, starting_i)
+ if ending_i:
+ key = src[starting_i:ending_i]
+ translate_keys.add(key)
if args.show_all_keys:
for k in sorted(translate_keys):
diff --git a/install/get-tor-osx.py b/desktop/install/get-tor-osx.py
index c68a81a6..a05870f2 100644
--- a/install/get-tor-osx.py
+++ b/desktop/install/get-tor-osx.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -36,10 +36,10 @@ import requests
def main():
- dmg_url = "https://archive.torproject.org/tor-package-archive/torbrowser/8.5.5/TorBrowser-8.5.5-osx64_en-US.dmg"
- dmg_filename = "TorBrowser-8.5.5-osx64_en-US.dmg"
+ dmg_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0/TorBrowser-10.0-osx64_en-US.dmg"
+ dmg_filename = "TorBrowser-10.0-osx64_en-US.dmg"
expected_dmg_sha256 = (
- "9c1b7840bd251a4c52f0c919991e57cafb9178c55e11fa49f83ffacce3c20511"
+ "4e1ca7068bc29d5e8ffba85ecc8fec36c52ae582faea67bcdf445cd57192fb08"
)
# Build paths
@@ -107,8 +107,8 @@ def main():
os.path.join(dist_path, "MacOS", "Tor", "tor.real"),
)
shutil.copyfile(
- os.path.join(dmg_tor_path, "MacOS", "Tor", "libevent-2.1.6.dylib"),
- os.path.join(dist_path, "MacOS", "Tor", "libevent-2.1.6.dylib"),
+ os.path.join(dmg_tor_path, "MacOS", "Tor", "libevent-2.1.7.dylib"),
+ os.path.join(dist_path, "MacOS", "Tor", "libevent-2.1.7.dylib"),
)
os.chmod(os.path.join(dist_path, "MacOS", "Tor", "tor.real"), 0o755)
# obfs4proxy binary
diff --git a/install/get-tor-windows.py b/desktop/install/get-tor-windows.py
index 99608706..33de056b 100644
--- a/install/get-tor-windows.py
+++ b/desktop/install/get-tor-windows.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -34,26 +34,24 @@ import requests
def main():
- exe_url = "https://archive.torproject.org/tor-package-archive/torbrowser/8.5.5/torbrowser-install-8.5.5_en-US.exe"
- exe_filename = "torbrowser-install-8.5.5_en-US.exe"
+ exe_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0/torbrowser-install-10.0_en-US.exe"
+ exe_filename = "torbrowser-install-10.0_en-US.exe"
expected_exe_sha256 = (
- "a3aa7e626d1d2365dcecc6f17055f467f31c4ff9558a769e51d4b90640e48bb0"
+ "3d1a337da0e6eae32071e6de21963ba628a1a0939477bf823aa7df9051215410"
)
# Build paths
root_path = os.path.dirname(
os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
)
- working_path = os.path.join(os.path.join(root_path, "build"), "tor")
+ working_path = os.path.join(root_path, "build", "tor")
exe_path = os.path.join(working_path, exe_filename)
- dist_path = os.path.join(
- os.path.join(os.path.join(root_path, "dist"), "onionshare"), "tor"
- )
+ dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor")
# Make sure the working folder exists
if not os.path.exists(working_path):
os.makedirs(working_path)
- # Make sure the zip is downloaded
+ # Make sure Tor Browser is downloaded
if not os.path.exists(exe_path):
print("Downloading {}".format(exe_url))
r = requests.get(exe_url)
@@ -71,26 +69,24 @@ def main():
sys.exit(-1)
# Extract the bits we need from the exe
- cmd = [
+ subprocess.Popen([
"7z",
"e",
"-y",
exe_path,
"Browser\TorBrowser\Tor",
"-o%s" % os.path.join(working_path, "Tor"),
- ]
- cmd2 = [
+ ]).wait()
+ subprocess.Popen([
"7z",
"e",
"-y",
exe_path,
"Browser\TorBrowser\Data\Tor\geoip*",
"-o%s" % os.path.join(working_path, "Data"),
- ]
- subprocess.Popen(cmd).wait()
- subprocess.Popen(cmd2).wait()
+ ]).wait()
- # Copy into dist
+ # Copy into the onionshare resources
if os.path.exists(dist_path):
shutil.rmtree(dist_path)
os.makedirs(dist_path)
diff --git a/install/licenses/license-jquery.txt b/desktop/install/licenses/license-jquery.txt
index e3dbacb9..e3dbacb9 100644
--- a/install/licenses/license-jquery.txt
+++ b/desktop/install/licenses/license-jquery.txt
diff --git a/install/licenses/license-obfs4.txt b/desktop/install/licenses/license-obfs4.txt
index 6b89f8ca..6b89f8ca 100644
--- a/install/licenses/license-obfs4.txt
+++ b/desktop/install/licenses/license-obfs4.txt
diff --git a/install/licenses/license-onionshare.txt b/desktop/install/licenses/license-onionshare.txt
index 77d05583..77d05583 100644
--- a/install/licenses/license-onionshare.txt
+++ b/desktop/install/licenses/license-onionshare.txt
diff --git a/install/licenses/license-tor.txt b/desktop/install/licenses/license-tor.txt
index 3d0f8c12..3d0f8c12 100644
--- a/install/licenses/license-tor.txt
+++ b/desktop/install/licenses/license-tor.txt
diff --git a/install/licenses/readme.txt b/desktop/install/licenses/readme.txt
index 3dd5d2fe..3dd5d2fe 100644
--- a/install/licenses/readme.txt
+++ b/desktop/install/licenses/readme.txt
diff --git a/install/macos_sandbox/child.plist b/desktop/install/macos_sandbox/child.plist
index 06d88f66..06d88f66 100644
--- a/install/macos_sandbox/child.plist
+++ b/desktop/install/macos_sandbox/child.plist
diff --git a/install/macos_sandbox/parent.plist b/desktop/install/macos_sandbox/parent.plist
index 3929abe9..8b9ac949 100644
--- a/install/macos_sandbox/parent.plist
+++ b/desktop/install/macos_sandbox/parent.plist
@@ -6,6 +6,10 @@
<key>com.apple.security.app-sandbox</key>
<true/>
+ <!-- Required for running PyInstaller python code with hardened runtime -->
+ <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
+ <true/>
+
<!-- Both OnionShare and Tor need network server and client -->
<key>com.apple.security.network.server</key>
<true/>
diff --git a/install/onionshare.icns b/desktop/install/onionshare.icns
index f65ad12d..f65ad12d 100644
--- a/install/onionshare.icns
+++ b/desktop/install/onionshare.icns
Binary files differ
diff --git a/install/onionshare.ico b/desktop/install/onionshare.ico
index dcde4f1f..dcde4f1f 100644
--- a/install/onionshare.ico
+++ b/desktop/install/onionshare.ico
Binary files differ
diff --git a/install/onionshare.nsi b/desktop/install/onionshare.nsi
index 42bd268b..21ac0baa 100644
--- a/install/onionshare.nsi
+++ b/desktop/install/onionshare.nsi
@@ -5,8 +5,8 @@
# change these with each release
!define INSTALLSIZE 132423
!define VERSIONMAJOR 2
-!define VERSIONMINOR 2
-!define VERSIONSTRING "2.2"
+!define VERSIONMINOR 3
+!define VERSIONSTRING "2.3.dev1"
RequestExecutionLevel admin
diff --git a/install/onionshare80.xpm b/desktop/install/onionshare80.xpm
index a3d0f6dc..a3d0f6dc 100644
--- a/install/onionshare80.xpm
+++ b/desktop/install/onionshare80.xpm
diff --git a/desktop/install/org.onionshare.OnionShare.appdata.xml b/desktop/install/org.onionshare.OnionShare.appdata.xml
new file mode 100644
index 00000000..3630b89c
--- /dev/null
+++ b/desktop/install/org.onionshare.OnionShare.appdata.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<component type="desktop-application">
+ <id>org.onionshare.OnionShare</id>
+ <metadata_license>CC0-1.0</metadata_license>
+ <project_license>GPL-3.0</project_license>
+ <name>OnionShare</name>
+ <summary>Securely and anonymously share files, host websites, and chat with friends</summary>
+ <description>
+ <p>
+ OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network.
+ </p>
+ </description>
+ <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>
+ <caption>Types of services that OnionShare supports</caption>
+ </screenshot>
+ </screenshots>
+ <url type="bugtracker">https://github.com/micahflee/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="2020-09-20" version="2.3.dev1" />
+ </releases>
+</component>
diff --git a/install/org.onionshare.OnionShare.desktop b/desktop/install/org.onionshare.OnionShare.desktop
index 190e2f26..190e2f26 100644
--- a/install/org.onionshare.OnionShare.desktop
+++ b/desktop/install/org.onionshare.OnionShare.desktop
diff --git a/desktop/install/org.onionshare.OnionShare.png b/desktop/install/org.onionshare.OnionShare.png
new file mode 100644
index 00000000..a4810d04
--- /dev/null
+++ b/desktop/install/org.onionshare.OnionShare.png
Binary files differ
diff --git a/install/org.onionshare.OnionShare.svg b/desktop/install/org.onionshare.OnionShare.svg
index 502da0d8..502da0d8 100644
--- a/install/org.onionshare.OnionShare.svg
+++ b/desktop/install/org.onionshare.OnionShare.svg
diff --git a/install/ppa_release.sh b/desktop/install/ppa_release.sh
index cb1a4cdb..cb1a4cdb 100755
--- a/install/ppa_release.sh
+++ b/desktop/install/ppa_release.sh
diff --git a/desktop/install/pyinstaller.spec b/desktop/install/pyinstaller.spec
new file mode 100644
index 00000000..24c0ed07
--- /dev/null
+++ b/desktop/install/pyinstaller.spec
@@ -0,0 +1,116 @@
+# -*- mode: python -*-
+
+import os
+import platform
+from distutils.sysconfig import get_python_lib
+
+p = platform.system()
+
+version = open("share/version.txt").read().strip()
+
+paths = ["."]
+if p == "Windows":
+ paths.append(os.path.join(get_python_lib(), "PyQt5", "Qt", "bin"))
+ paths.append(
+ os.path.join(
+ os.path.abspath(os.sep),
+ "Program Files (x86)",
+ "Windows Kits",
+ "10",
+ "bin",
+ "x86",
+ )
+ )
+ paths.append(
+ os.path.join(
+ os.path.abspath(os.sep),
+ "Program Files (x86)",
+ "Windows Kits",
+ "10",
+ "bin",
+ "x64",
+ )
+ )
+ paths.append(
+ os.path.join(
+ os.path.abspath(os.sep),
+ "Program Files (x86)",
+ "Windows Kits",
+ "10",
+ "Redist",
+ "ucrt",
+ "DLLs",
+ "x86",
+ )
+ )
+ paths.append(
+ os.path.join(
+ os.path.abspath(os.sep),
+ "Program Files (x86)",
+ "Windows Kits",
+ "10",
+ "Redist",
+ "ucrt",
+ "DLLs",
+ "x64",
+ )
+ )
+
+a = Analysis(
+ ["scripts/onionshare-pyinstaller"],
+ pathex=paths,
+ binaries=None,
+ datas=[
+ ("../share/version.txt", "share"),
+ ("../share/wordlist.txt", "share"),
+ ("../share/torrc_template", "share"),
+ ("../share/torrc_template-obfs4", "share"),
+ ("../share/torrc_template-meek_lite_azure", "share"),
+ ("../share/images/*", "share/images"),
+ ("../share/locale/*", "share/locale"),
+ ("../share/static/*", "share/static"),
+ ("../share/templates/*", "share/templates"),
+ ("../share/static/css/*", "share/static/css"),
+ ("../share/static/img/*", "share/static/img"),
+ ("../share/static/js/*", "share/static/js"),
+ ("../install/licenses/*", "licenses"),
+ ],
+ hiddenimports=["engineio.async_drivers.threading"],
+ hookspath=[],
+ runtime_hooks=[],
+ win_no_prefer_redirects=False,
+ win_private_assemblies=False,
+ cipher=None,
+)
+
+pyz = PYZ(a.pure, a.zipped_data, cipher=None)
+
+# Show console in dev releases, don't show console in production releases
+console = "dev" in version
+
+exe = EXE(
+ pyz,
+ a.scripts,
+ exclude_binaries=True,
+ name="onionshare-gui",
+ debug=False,
+ strip=False,
+ upx=True,
+ console=console,
+)
+
+coll = COLLECT(
+ exe, a.binaries, a.zipfiles, a.datas, strip=False, upx=True, name="onionshare"
+)
+
+if p == "Darwin":
+ app = BUNDLE(
+ coll,
+ name="OnionShare.app",
+ icon="onionshare.icns",
+ bundle_identifier="com.micahflee.onionshare",
+ info_plist={
+ "CFBundleShortVersionString": version,
+ "NSHighResolutionCapable": "True",
+ },
+ )
diff --git a/install/scripts/onionshare-nautilus.py b/desktop/install/scripts/onionshare-nautilus.py
index 776ca5de..776ca5de 100644
--- a/install/scripts/onionshare-nautilus.py
+++ b/desktop/install/scripts/onionshare-nautilus.py
diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml
new file mode 100644
index 00000000..cf4ace2e
--- /dev/null
+++ b/desktop/pyproject.toml
@@ -0,0 +1,52 @@
+[tool.briefcase]
+project_name = "OnionShare"
+bundle = "org.onionshare"
+version = "2.3.dev1"
+url = "https://onionshare.org"
+license = "GPLv3"
+author = 'Micah Lee'
+author_email = "micah@micahflee.com"
+
+[tool.briefcase.app.onionshare]
+formal_name = "OnionShare"
+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."
+icon = "src/onionshare/resources/onionshare"
+sources = ['src/onionshare']
+requires = [
+ "./onionshare_cli-2.3.dev1-py3-none-any.whl",
+ "Click",
+ "eventlet",
+ "Flask",
+ "Flask-HTTPAuth",
+ "flask-socketio",
+ "psutil",
+ "pycryptodome",
+ "PySocks",
+ "pyside2==5.15.1",
+ "qrcode",
+ "requests",
+ "stem",
+ "urllib3",
+]
+
+[tool.briefcase.app.onionshare.macOS]
+requires = []
+
+[tool.briefcase.app.onionshare.linux]
+requires = []
+system_requires = [
+ "tor",
+ "obfs4proxy",
+ "gcc",
+ "python3-dev",
+]
+
+[tool.briefcase.app.onionshare.windows]
+requires = ["pywin32"]
+
+# Mobile deployments
+[tool.briefcase.app.onionshare.iOS]
+requires = []
+
+[tool.briefcase.app.onionshare.android]
+requires = []
diff --git a/screenshots/appdata-onionshare-receive-client.png b/desktop/screenshots/appdata-onionshare-receive-client.png
index 8edcc326..8edcc326 100644
--- a/screenshots/appdata-onionshare-receive-client.png
+++ b/desktop/screenshots/appdata-onionshare-receive-client.png
Binary files differ
diff --git a/screenshots/appdata-onionshare-receive-server.png b/desktop/screenshots/appdata-onionshare-receive-server.png
index 121eab48..121eab48 100644
--- a/screenshots/appdata-onionshare-receive-server.png
+++ b/desktop/screenshots/appdata-onionshare-receive-server.png
Binary files differ
diff --git a/screenshots/appdata-onionshare-share-client.png b/desktop/screenshots/appdata-onionshare-share-client.png
index c57fb2a8..c57fb2a8 100644
--- a/screenshots/appdata-onionshare-share-client.png
+++ b/desktop/screenshots/appdata-onionshare-share-client.png
Binary files differ
diff --git a/screenshots/appdata-onionshare-share-server.png b/desktop/screenshots/appdata-onionshare-share-server.png
index d85e45ce..d85e45ce 100644
--- a/screenshots/appdata-onionshare-share-server.png
+++ b/desktop/screenshots/appdata-onionshare-share-server.png
Binary files differ
diff --git a/screenshots/onionshare-receive-client.png b/desktop/screenshots/onionshare-receive-client.png
index 648d67ae..648d67ae 100644
--- a/screenshots/onionshare-receive-client.png
+++ b/desktop/screenshots/onionshare-receive-client.png
Binary files differ
diff --git a/screenshots/onionshare-receive-server.png b/desktop/screenshots/onionshare-receive-server.png
index 0e801d3d..0e801d3d 100644
--- a/screenshots/onionshare-receive-server.png
+++ b/desktop/screenshots/onionshare-receive-server.png
Binary files differ
diff --git a/screenshots/onionshare-share-client.png b/desktop/screenshots/onionshare-share-client.png
index 58f102d4..58f102d4 100644
--- a/screenshots/onionshare-share-client.png
+++ b/desktop/screenshots/onionshare-share-client.png
Binary files differ
diff --git a/screenshots/onionshare-share-server.png b/desktop/screenshots/onionshare-share-server.png
index 329fc8af..329fc8af 100644
--- a/screenshots/onionshare-share-server.png
+++ b/desktop/screenshots/onionshare-share-server.png
Binary files differ
diff --git a/screenshots/onionshare-website-server.png b/desktop/screenshots/onionshare-website-server.png
index 55e4fa27..55e4fa27 100644
--- a/screenshots/onionshare-website-server.png
+++ b/desktop/screenshots/onionshare-website-server.png
Binary files differ
diff --git a/desktop/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py
new file mode 100644
index 00000000..a05870f2
--- /dev/null
+++ b/desktop/scripts/get-tor-osx.py
@@ -0,0 +1,126 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
+"""
+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/TorBrowser-10.0-osx64_en-US.dmg"
+ dmg_filename = "TorBrowser-10.0-osx64_en-US.dmg"
+ expected_dmg_sha256 = (
+ "4e1ca7068bc29d5e8ffba85ecc8fec36c52ae582faea67bcdf445cd57192fb08"
+ )
+
+ # Build paths
+ root_path = os.path.dirname(
+ os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
+ )
+ working_path = os.path.join(root_path, "build", "tor")
+ dmg_tor_path = os.path.join(
+ "/Volumes", "Tor Browser", "Tor Browser.app", "Contents"
+ )
+ dmg_path = os.path.join(working_path, dmg_filename)
+ dist_path = os.path.join(root_path, "dist", "OnionShare.app", "Contents")
+
+ # Make sure the working folder exists
+ if not os.path.exists(working_path):
+ os.makedirs(working_path)
+
+ # Make sure the zip is downloaded
+ if not os.path.exists(dmg_path):
+ print("Downloading {}".format(dmg_url))
+ r = requests.get(dmg_url)
+ open(dmg_path, "wb").write(r.content)
+ dmg_sha256 = hashlib.sha256(r.content).hexdigest()
+ else:
+ dmg_data = open(dmg_path, "rb").read()
+ dmg_sha256 = hashlib.sha256(dmg_data).hexdigest()
+
+ # Compare the hash
+ if dmg_sha256 != expected_dmg_sha256:
+ print("ERROR! The sha256 doesn't match:")
+ print("expected: {}".format(expected_dmg_sha256))
+ print(" actual: {}".format(dmg_sha256))
+ sys.exit(-1)
+
+ # Mount the dmg, copy data to the working path
+ subprocess.call(["hdiutil", "attach", dmg_path])
+
+ # Make sure Resources/tor exists before copying files
+ if os.path.exists(os.path.join(dist_path, "Resources", "Tor")):
+ shutil.rmtree(os.path.join(dist_path, "Resources", "Tor"))
+ os.makedirs(os.path.join(dist_path, "Resources", "Tor"))
+ if os.path.exists(os.path.join(dist_path, "MacOS", "Tor")):
+ shutil.rmtree(os.path.join(dist_path, "MacOS", "Tor"))
+ os.makedirs(os.path.join(dist_path, "MacOS", "Tor"))
+
+ # Modify the tor script to adjust the path
+ tor_script = open(
+ os.path.join(dmg_tor_path, "Resources", "TorBrowser", "Tor", "tor"), "r"
+ ).read()
+ tor_script = tor_script.replace("../../../MacOS/Tor", "../../MacOS/Tor")
+ open(os.path.join(dist_path, "Resources", "Tor", "tor"), "w").write(tor_script)
+
+ # Copy into dist
+ shutil.copyfile(
+ os.path.join(dmg_tor_path, "Resources", "TorBrowser", "Tor", "geoip"),
+ os.path.join(dist_path, "Resources", "Tor", "geoip"),
+ )
+ shutil.copyfile(
+ os.path.join(dmg_tor_path, "Resources", "TorBrowser", "Tor", "geoip6"),
+ os.path.join(dist_path, "Resources", "Tor", "geoip6"),
+ )
+ os.chmod(os.path.join(dist_path, "Resources", "Tor", "tor"), 0o755)
+ shutil.copyfile(
+ os.path.join(dmg_tor_path, "MacOS", "Tor", "tor.real"),
+ os.path.join(dist_path, "MacOS", "Tor", "tor.real"),
+ )
+ shutil.copyfile(
+ os.path.join(dmg_tor_path, "MacOS", "Tor", "libevent-2.1.7.dylib"),
+ os.path.join(dist_path, "MacOS", "Tor", "libevent-2.1.7.dylib"),
+ )
+ os.chmod(os.path.join(dist_path, "MacOS", "Tor", "tor.real"), 0o755)
+ # obfs4proxy binary
+ shutil.copyfile(
+ os.path.join(dmg_tor_path, "MacOS", "Tor", "PluggableTransports", "obfs4proxy"),
+ os.path.join(dist_path, "Resources", "Tor", "obfs4proxy"),
+ )
+ os.chmod(os.path.join(dist_path, "Resources", "Tor", "obfs4proxy"), 0o755)
+
+ # Eject dmg
+ subprocess.call(["diskutil", "eject", "/Volumes/Tor Browser"])
+
+
+if __name__ == "__main__":
+ main()
diff --git a/desktop/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py
new file mode 100644
index 00000000..33de056b
--- /dev/null
+++ b/desktop/scripts/get-tor-windows.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
+"""
+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
+import hashlib
+import shutil
+import subprocess
+import requests
+
+
+def main():
+ exe_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0/torbrowser-install-10.0_en-US.exe"
+ exe_filename = "torbrowser-install-10.0_en-US.exe"
+ expected_exe_sha256 = (
+ "3d1a337da0e6eae32071e6de21963ba628a1a0939477bf823aa7df9051215410"
+ )
+ # Build paths
+ root_path = os.path.dirname(
+ os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
+ )
+ working_path = os.path.join(root_path, "build", "tor")
+ exe_path = os.path.join(working_path, exe_filename)
+ dist_path = os.path.join(root_path, "src", "onionshare", "resources", "tor")
+
+ # Make sure the working folder exists
+ if not os.path.exists(working_path):
+ os.makedirs(working_path)
+
+ # Make sure Tor Browser is downloaded
+ if not os.path.exists(exe_path):
+ print("Downloading {}".format(exe_url))
+ r = requests.get(exe_url)
+ open(exe_path, "wb").write(r.content)
+ exe_sha256 = hashlib.sha256(r.content).hexdigest()
+ else:
+ exe_data = open(exe_path, "rb").read()
+ exe_sha256 = hashlib.sha256(exe_data).hexdigest()
+
+ # Compare the hash
+ if exe_sha256 != expected_exe_sha256:
+ print("ERROR! The sha256 doesn't match:")
+ print("expected: {}".format(expected_exe_sha256))
+ print(" actual: {}".format(exe_sha256))
+ sys.exit(-1)
+
+ # Extract the bits we need from the exe
+ subprocess.Popen([
+ "7z",
+ "e",
+ "-y",
+ exe_path,
+ "Browser\TorBrowser\Tor",
+ "-o%s" % os.path.join(working_path, "Tor"),
+ ]).wait()
+ subprocess.Popen([
+ "7z",
+ "e",
+ "-y",
+ exe_path,
+ "Browser\TorBrowser\Data\Tor\geoip*",
+ "-o%s" % os.path.join(working_path, "Data"),
+ ]).wait()
+
+ # Copy into the onionshare resources
+ if os.path.exists(dist_path):
+ shutil.rmtree(dist_path)
+ os.makedirs(dist_path)
+ shutil.copytree(os.path.join(working_path, "Tor"), os.path.join(dist_path, "Tor"))
+ shutil.copytree(
+ os.path.join(working_path, "Data"), os.path.join(dist_path, "Data", "Tor")
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/onionshare_gui/__init__.py b/desktop/src/onionshare/__init__.py
index d083f741..287d882c 100644
--- a/onionshare_gui/__init__.py
+++ b/desktop/src/onionshare/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,6 +17,7 @@ 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/>.
"""
+
from __future__ import division
import os
import sys
@@ -24,9 +25,11 @@ import platform
import argparse
import signal
import json
-from PyQt5 import QtCore, QtWidgets
+import psutil
+import getpass
+from PySide2 import QtCore, QtWidgets
-from onionshare.common import Common
+from onionshare_cli.common import Common
from .gui_common import GuiCommon
from .widgets import Alert
@@ -125,23 +128,38 @@ def main():
with open(common.gui.lock_filename, "r") as f:
existing_pid = int(f.read())
- print(f"Opening tab in existing OnionShare window (pid {existing_pid})")
-
- # Make an event for the existing OnionShare window
- if filenames:
- obj = {"type": "new_share_tab", "filenames": filenames}
+ # Is this process actually still running?
+ still_running = True
+ if not psutil.pid_exists(existing_pid):
+ still_running = False
else:
- obj = {"type": "new_tab"}
-
- # Write that event to disk
- with open(common.gui.events_filename, "a") as f:
- f.write(json.dumps(obj) + "\n")
- return
+ for proc in psutil.process_iter(["pid", "name", "username"]):
+ if proc.pid == existing_pid:
+ if (
+ proc.username() != getpass.getuser()
+ or "onionshare" not in " ".join(proc.cmdline()).lower()
+ ):
+ still_running = False
+
+ if still_running:
+ print(f"Opening tab in existing OnionShare window (pid {existing_pid})")
+
+ # Make an event for the existing OnionShare window
+ if filenames:
+ obj = {"type": "new_share_tab", "filenames": filenames}
+ else:
+ obj = {"type": "new_tab"}
+
+ # Write that event to disk
+ with open(common.gui.events_filename, "a") as f:
+ f.write(json.dumps(obj) + "\n")
+ return
+ else:
+ os.remove(common.gui.lock_filename)
- else:
- # Write the lock file
- with open(common.gui.lock_filename, "w") as f:
- f.write(f"{os.getpid()}\n")
+ # Write the lock file
+ with open(common.gui.lock_filename, "w") as f:
+ f.write(f"{os.getpid()}\n")
# Allow Ctrl-C to smoothly quit the program instead of throwing an exception
def signal_handler(s, frame):
@@ -168,7 +186,3 @@ def main():
# All done
sys.exit(qtapp.exec_())
-
-
-if __name__ == "__main__":
- main()
diff --git a/dev_scripts/onionshare b/desktop/src/onionshare/__main__.py
index 29cdedcc..7b087670 100755..100644
--- a/dev_scripts/onionshare
+++ b/desktop/src/onionshare/__main__.py
@@ -1,9 +1,8 @@
-#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -19,10 +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/>.
"""
-# Load onionshare module and resources from the source code tree
-import os, sys
-sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-sys.onionshare_dev_mode = True
+from . import main
-import onionshare
-onionshare.main()
+if __name__ == "__main__":
+ main()
diff --git a/onionshare_gui/gui_common.py b/desktop/src/onionshare/gui_common.py
index eb259301..cf005e6a 100644
--- a/onionshare_gui/gui_common.py
+++ b/desktop/src/onionshare/gui_common.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,10 +17,13 @@ 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 os
+import inspect
+import shutil
-from onionshare import strings
-from onionshare.onion import Onion
+from . import strings
+from onionshare_cli.onion import Onion
class GuiCommon:
@@ -31,6 +34,7 @@ class GuiCommon:
MODE_SHARE = "share"
MODE_RECEIVE = "receive"
MODE_WEBSITE = "website"
+ MODE_CHAT = "chat"
def __init__(self, common, qtapp, local_only):
self.common = common
@@ -44,10 +48,10 @@ class GuiCommon:
self.common.load_settings()
# Load strings
- strings.load_strings(self.common)
+ strings.load_strings(self.common, self.get_resource_path("locale"))
# Start the Onion
- self.onion = Onion(common)
+ self.onion = Onion(common, get_tor_paths=self.get_tor_paths)
# Lock filename
self.lock_filename = os.path.join(self.common.build_data_dir(), "lock")
@@ -60,6 +64,9 @@ class GuiCommon:
self.css = {
# OnionShareGui styles
+ "tab_widget": """
+ QTabBar::tab { width: 170px; height: 30px; }
+ """,
"tab_widget_new_tab_button": """
QPushButton {
font-weight: bold;
@@ -73,13 +80,9 @@ class GuiCommon:
}""",
"mode_header_label": """
QLabel {
- color: #ffffff;
- background-color: #4e064f;
- border: 0;
- font-weight: bold;
- font-size: 18px;
- border-radius: 0;
- padding: 10px 0 10px 0;
+ color: #4E064F;
+ font-size: 48px;
+ margin-bottom: 16px;
}""",
"settings_button": """
QPushButton {
@@ -131,7 +134,7 @@ class GuiCommon:
QPushButton {
background-color: #5fa416;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
}""",
@@ -139,7 +142,7 @@ class GuiCommon:
QPushButton {
background-color: #4c8211;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
font-style: italic;
@@ -148,7 +151,7 @@ class GuiCommon:
QPushButton {
background-color: #d0011b;
color: #ffffff;
- padding: 10px;
+ padding: 10px 30px 10px 30px;
border: 0;
border-radius: 5px;
}""",
@@ -213,6 +216,29 @@ class GuiCommon:
QLabel {
color: #cc0000;
}""",
+ # New tab
+ "new_tab_button_image": """
+ QLabel {
+ padding: 30px;
+ text-align: center;
+ }
+ """,
+ "new_tab_button_text": """
+ QLabel {
+ border: 1px solid #efeff0;
+ border-radius: 4px;
+ background-color: #ffffff;
+ text-align: center;
+ color: #4e0d4e;
+ }
+ """,
+ "new_tab_title_text": """
+ QLabel {
+ text-align: center;
+ color: #333333;
+ font-size: 28px;
+ }
+ """,
# Share mode and child widget styles
"share_delete_all_files_button": """
QPushButton {
@@ -238,9 +264,16 @@ class GuiCommon:
color: #333333;
}
""",
+ "share_file_selection_drop_here_header_label": """
+ QLabel {
+ color: #4E064F;
+ font-size: 48px;
+ margin-bottom: 72px;
+ }""",
"share_file_selection_drop_here_label": """
QLabel {
- color: #999999;
+ color: #666666;
+ margin-bottom: 48px;
}""",
"share_file_selection_drop_count_label": """
QLabel {
@@ -296,3 +329,52 @@ class GuiCommon:
font-style: italic;
}""",
}
+
+ def get_tor_paths(self):
+ if self.common.platform == "Linux":
+ tor_path = shutil.which("tor")
+ obfs4proxy_file_path = shutil.which("obfs4proxy")
+ prefix = os.path.dirname(os.path.dirname(tor_path))
+ tor_geo_ip_file_path = os.path.join(prefix, "share/tor/geoip")
+ tor_geo_ipv6_file_path = os.path.join(prefix, "share/tor/geoip6")
+ elif self.common.platform == "Windows":
+ base_path = self.get_resource_path("tor")
+ tor_path = os.path.join(base_path, "Tor", "tor.exe")
+ obfs4proxy_file_path = os.path.join(base_path, "Tor", "obfs4proxy.exe")
+ tor_geo_ip_file_path = os.path.join(base_path, "Data", "Tor", "geoip")
+ tor_geo_ipv6_file_path = os.path.join(base_path, "Data", "Tor", "geoip6")
+ elif self.common.platform == "Darwin":
+ base_path = os.path.dirname(
+ os.path.dirname(os.path.dirname(self.get_resource_path("")))
+ )
+ tor_path = os.path.join(base_path, "Resources", "Tor", "tor")
+ tor_geo_ip_file_path = os.path.join(base_path, "Resources", "Tor", "geoip")
+ tor_geo_ipv6_file_path = os.path.join(
+ base_path, "Resources", "Tor", "geoip6"
+ )
+ obfs4proxy_file_path = os.path.join(
+ base_path, "Resources", "Tor", "obfs4proxy"
+ )
+ elif self.common.platform == "BSD":
+ tor_path = "/usr/local/bin/tor"
+ tor_geo_ip_file_path = "/usr/local/share/tor/geoip"
+ tor_geo_ipv6_file_path = "/usr/local/share/tor/geoip6"
+ obfs4proxy_file_path = "/usr/local/bin/obfs4proxy"
+
+ return (
+ tor_path,
+ tor_geo_ip_file_path,
+ tor_geo_ipv6_file_path,
+ obfs4proxy_file_path,
+ )
+
+ @staticmethod
+ def get_resource_path(filename):
+ """
+ Returns the absolute path of a resource
+ """
+ resources_path = os.path.join(
+ os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))),
+ "resources",
+ )
+ return os.path.join(resources_path, filename)
diff --git a/onionshare_gui/main_window.py b/desktop/src/onionshare/main_window.py
index 1c745b1c..38a6b275 100644
--- a/onionshare_gui/main_window.py
+++ b/desktop/src/onionshare/main_window.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,16 +17,18 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.web import Web
+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
from .widgets import Alert
from .update_checker import UpdateThread
from .tab_widget import TabWidget
+from .gui_common import GuiCommon
class MainWindow(QtWidgets.QMainWindow):
@@ -44,9 +46,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.setMinimumWidth(1040)
self.setMinimumHeight(700)
self.setWindowTitle("OnionShare")
- self.setWindowIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
- )
+ self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
# System tray
menu = QtWidgets.QMenu()
@@ -62,11 +62,11 @@ class MainWindow(QtWidgets.QMainWindow):
# The convention is Mac systray icons are always grayscale
if self.common.platform == "Darwin":
self.system_tray.setIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo_grayscale.png"))
+ QtGui.QIcon(GuiCommon.get_resource_path("images/logo_grayscale.png"))
)
else:
self.system_tray.setIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
+ QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png"))
)
self.system_tray.setContextMenu(menu)
self.system_tray.show()
@@ -79,13 +79,13 @@ class MainWindow(QtWidgets.QMainWindow):
# Server status indicator icons
self.status_bar.server_status_image_stopped = QtGui.QImage(
- self.common.get_resource_path("images/server_stopped.png")
+ GuiCommon.get_resource_path("images/server_stopped.png")
)
self.status_bar.server_status_image_working = QtGui.QImage(
- self.common.get_resource_path("images/server_working.png")
+ GuiCommon.get_resource_path("images/server_working.png")
)
self.status_bar.server_status_image_started = QtGui.QImage(
- self.common.get_resource_path("images/server_started.png")
+ GuiCommon.get_resource_path("images/server_started.png")
)
# Server status indicator on the status bar
@@ -111,7 +111,7 @@ class MainWindow(QtWidgets.QMainWindow):
self.settings_button.setDefault(False)
self.settings_button.setFixedSize(40, 50)
self.settings_button.setIcon(
- QtGui.QIcon(self.common.get_resource_path("images/settings.png"))
+ QtGui.QIcon(GuiCommon.get_resource_path("images/settings.png"))
)
self.settings_button.clicked.connect(self.open_settings)
self.settings_button.setStyleSheet(self.common.gui.css["settings_button"])
diff --git a/desktop/src/onionshare/resources/__init__.py b/desktop/src/onionshare/resources/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/desktop/src/onionshare/resources/__init__.py
diff --git a/share/images/file_delete.png b/desktop/src/onionshare/resources/images/file_delete.png
index b9057df5..b9057df5 100644
--- a/share/images/file_delete.png
+++ b/desktop/src/onionshare/resources/images/file_delete.png
Binary files differ
diff --git a/share/images/history_completed.png b/desktop/src/onionshare/resources/images/history_completed.png
index e68fe5a2..e68fe5a2 100644
--- a/share/images/history_completed.png
+++ b/desktop/src/onionshare/resources/images/history_completed.png
Binary files differ
diff --git a/share/images/history_completed_none.png b/desktop/src/onionshare/resources/images/history_completed_none.png
index 8dbd6939..8dbd6939 100644
--- a/share/images/history_completed_none.png
+++ b/desktop/src/onionshare/resources/images/history_completed_none.png
Binary files differ
diff --git a/share/images/history_in_progress.png b/desktop/src/onionshare/resources/images/history_in_progress.png
index 19694659..19694659 100644
--- a/share/images/history_in_progress.png
+++ b/desktop/src/onionshare/resources/images/history_in_progress.png
Binary files differ
diff --git a/share/images/history_in_progress_none.png b/desktop/src/onionshare/resources/images/history_in_progress_none.png
index 2d61dba4..2d61dba4 100644
--- a/share/images/history_in_progress_none.png
+++ b/desktop/src/onionshare/resources/images/history_in_progress_none.png
Binary files differ
diff --git a/share/images/history_requests.png b/desktop/src/onionshare/resources/images/history_requests.png
index 4965744d..4965744d 100644
--- a/share/images/history_requests.png
+++ b/desktop/src/onionshare/resources/images/history_requests.png
Binary files differ
diff --git a/share/images/history_requests_none.png b/desktop/src/onionshare/resources/images/history_requests_none.png
index 93a71ef3..93a71ef3 100644
--- a/share/images/history_requests_none.png
+++ b/desktop/src/onionshare/resources/images/history_requests_none.png
Binary files differ
diff --git a/share/images/info.png b/desktop/src/onionshare/resources/images/info.png
index 4be4e65e..4be4e65e 100644
--- a/share/images/info.png
+++ b/desktop/src/onionshare/resources/images/info.png
Binary files differ
diff --git a/share/static/img/logo.png b/desktop/src/onionshare/resources/images/logo.png
index 43884c1f..43884c1f 100644
--- a/share/static/img/logo.png
+++ b/desktop/src/onionshare/resources/images/logo.png
Binary files differ
diff --git a/share/images/logo_grayscale.png b/desktop/src/onionshare/resources/images/logo_grayscale.png
index 950d9ff6..950d9ff6 100644
--- a/share/images/logo_grayscale.png
+++ b/desktop/src/onionshare/resources/images/logo_grayscale.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/logo_text.png b/desktop/src/onionshare/resources/images/logo_text.png
new file mode 100644
index 00000000..3b584acd
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/logo_text.png
Binary files differ
diff --git a/share/images/logo_transparent.png b/desktop/src/onionshare/resources/images/logo_transparent.png
index 1e8ed196..1e8ed196 100644
--- a/share/images/logo_transparent.png
+++ b/desktop/src/onionshare/resources/images/logo_transparent.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_chat.png b/desktop/src/onionshare/resources/images/mode_chat.png
new file mode 100644
index 00000000..33114364
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_chat.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_chat.svg b/desktop/src/onionshare/resources/images/mode_chat.svg
new file mode 100644
index 00000000..335e9cf4
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_chat.svg
@@ -0,0 +1,81 @@
+<svg width="300" height="252" viewBox="0 0 300 252" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0)">
+<path d="M84.6089 251.006C129.061 251.006 165.097 245.451 165.097 238.599C165.097 231.746 129.061 226.191 84.6089 226.191C40.1567 226.191 4.12109 231.746 4.12109 238.599C4.12109 245.451 40.1567 251.006 84.6089 251.006Z" fill="#E5E5E5"/>
+<path d="M62.3512 56.9482H17.8125V57.5845H62.3512V56.9482Z" fill="#E5E5E5"/>
+<path d="M30.5386 51.2207H29.9023V57.1062H30.5386V51.2207Z" fill="#E5E5E5"/>
+<path d="M49.9527 51.2207H49.3164V57.1062H49.9527V51.2207Z" fill="#E5E5E5"/>
+<path d="M181.98 39.4482H137.441V40.0845H181.98V39.4482Z" fill="#E5E5E5"/>
+<path d="M150.168 33.7207H149.531V39.6062H150.168V33.7207Z" fill="#E5E5E5"/>
+<path d="M169.562 33.7207H168.926V39.6062H169.562V33.7207Z" fill="#E5E5E5"/>
+<path d="M207.097 216.65H162.559V217.287H207.097V216.65Z" fill="#E5E5E5"/>
+<path d="M175.304 210.923H174.668V216.808H175.304V210.923Z" fill="#E5E5E5"/>
+<path d="M194.699 210.923H194.062V216.808H194.699V210.923Z" fill="#E5E5E5"/>
+<path d="M296.492 188.018H251.953V188.654H296.492V188.018Z" fill="#E5E5E5"/>
+<path d="M264.679 182.29H264.043V188.175H264.679V182.29Z" fill="#E5E5E5"/>
+<path d="M284.093 182.29H283.457V188.175H284.093V182.29Z" fill="#E5E5E5"/>
+<path d="M300.007 115.161H255.469V115.797H300.007V115.161Z" fill="#E5E5E5"/>
+<path d="M268.195 109.438H267.559V115.324H268.195V109.438Z" fill="#E5E5E5"/>
+<path d="M287.589 109.438H286.953V115.324H287.589V109.438Z" fill="#E5E5E5"/>
+<path d="M141.882 122.163H97.3438V122.799H141.882V122.163Z" fill="#E5E5E5"/>
+<path d="M110.07 116.436H109.434V122.321H110.07V116.436Z" fill="#E5E5E5"/>
+<path d="M129.484 116.436H128.848V122.321H129.484V116.436Z" fill="#E5E5E5"/>
+<path d="M252.605 169.883H208.066V170.519H252.605V169.883Z" fill="#E5E5E5"/>
+<path d="M220.773 164.155H220.137V170.041H220.773V164.155Z" fill="#E5E5E5"/>
+<path d="M240.187 164.155H239.551V170.041H240.187V164.155Z" fill="#E5E5E5"/>
+<path d="M189.929 149.839H145.391V150.475H189.929V149.839Z" fill="#E5E5E5"/>
+<path d="M158.117 144.111H157.48V149.997H158.117V144.111Z" fill="#E5E5E5"/>
+<path d="M177.531 144.111H176.895V149.997H177.531V144.111Z" fill="#E5E5E5"/>
+<path d="M129.168 86.8506H84.6289V87.4869H129.168V86.8506Z" fill="#E5E5E5"/>
+<path d="M97.355 81.123H96.7188V87.0085H97.355V81.123Z" fill="#E5E5E5"/>
+<path d="M116.75 81.123H116.113V87.0085H116.75V81.123Z" fill="#E5E5E5"/>
+<path d="M44.5387 156.201H0V156.837H44.5387V156.201Z" fill="#E5E5E5"/>
+<path d="M12.7261 150.474H12.0898V156.359H12.7261V150.474Z" fill="#E5E5E5"/>
+<path d="M32.1402 150.474H31.5039V156.359H32.1402V150.474Z" fill="#E5E5E5"/>
+<path d="M230.313 136.797C268.088 136.797 298.711 106.174 298.711 68.3987C298.711 30.6232 268.088 0 230.313 0C192.537 0 161.914 30.6232 161.914 68.3987C161.914 106.174 192.537 136.797 230.313 136.797Z" fill="white"/>
+<path d="M20.9705 104.275L20.3516 104.424L35.7741 168.732L36.3929 168.583L20.9705 104.275Z" fill="#2F2E41"/>
+<path d="M90.1822 148.091C90.1822 148.091 103.226 153.499 99.0899 156.68C94.9542 159.862 86.3646 152.863 86.6827 151.908C87.0008 150.954 85.4102 148.727 85.4102 148.727L90.1822 148.091Z" fill="#9F616A"/>
+<path d="M78.7196 105.459L82.8553 109.277L83.8097 120.411L86.9911 132.182C86.9911 132.182 92.3993 143.317 91.4449 145.544C90.4905 147.771 92.3993 148.407 92.3993 148.407L85.0822 151.27C85.0822 151.27 77.1289 142.362 77.1289 140.454C77.1289 138.545 78.7196 105.459 78.7196 105.459Z" fill="#575A88"/>
+<path opacity="0.1" d="M78.7196 105.459L82.8553 109.277L83.8097 120.411L86.9911 132.182C86.9911 132.182 92.3993 143.317 91.4449 145.544C90.4905 147.771 92.3993 148.407 92.3993 148.407L85.0822 151.27C85.0822 151.27 77.1289 142.362 77.1289 140.454C77.1289 138.545 78.7196 105.459 78.7196 105.459Z" fill="black"/>
+<path d="M117.858 219.992C117.858 219.992 116.267 227.309 115.949 227.945C115.631 228.582 121.994 230.809 121.994 230.809L129.629 225.4C129.629 225.4 126.447 218.401 126.447 217.129L117.858 219.992Z" fill="#575A88"/>
+<path d="M76.1747 148.726L78.4017 151.271C78.4017 151.271 124.531 156.997 125.485 165.905C126.44 174.813 133.121 216.806 129.303 218.079C125.485 219.351 115.623 224.123 115.623 221.578C115.623 219.033 109.261 184.038 110.533 177.676C110.533 177.676 55.496 170.677 54.2235 162.723C52.951 154.77 55.496 151.271 55.496 151.271L76.1747 148.726Z" fill="#2F2E41"/>
+<path opacity="0.1" d="M76.1747 148.726L78.4017 151.271C78.4017 151.271 124.531 156.997 125.485 165.905C126.44 174.813 133.121 216.806 129.303 218.079C125.485 219.351 115.623 224.123 115.623 221.578C115.623 219.033 109.261 184.038 110.533 177.676C110.533 177.676 55.496 170.677 54.2235 162.723C52.951 154.77 55.496 151.271 55.496 151.271L76.1747 148.726Z" fill="black"/>
+<path d="M117.224 227.306C117.224 227.306 115.951 224.443 115.315 225.397C114.679 226.352 112.452 237.486 114.679 237.486C116.906 237.486 137.266 242.576 140.129 241.94C142.993 241.304 148.401 242.258 147.765 239.077C147.128 235.896 143.947 235.577 143.947 235.577C143.947 235.577 132.176 228.578 131.54 225.079C130.903 221.58 127.404 223.488 127.404 223.488V225.715C127.404 225.715 120.723 230.805 117.224 227.306Z" fill="#2F2E41"/>
+<path d="M56.7686 81.2837C56.7686 81.2837 58.9955 92.1002 54.2235 93.0546C49.4515 94.009 60.268 100.372 60.268 100.372L67.267 104.189L72.3571 99.0992C72.3571 99.0992 67.7442 89.7142 71.2437 82.7153C74.7431 75.7163 56.7686 81.2837 56.7686 81.2837Z" fill="#9F616A"/>
+<path d="M72.3571 99.0992L67.267 104.189L60.268 100.372C60.268 100.372 49.4515 94.009 54.2235 93.0546C57.2935 92.4406 57.4653 87.745 57.2012 84.4746C57.1151 83.4039 56.9706 82.3387 56.7686 81.2837C56.7686 81.2837 74.7431 75.7163 71.2437 82.7153C70.7119 83.7961 70.3432 84.9496 70.1493 86.1384C69.0771 92.4279 72.3571 99.0992 72.3571 99.0992Z" fill="#9F616A"/>
+<path d="M90.1758 229.217V236.534H102.265L103.219 233.67L101.947 226.035L90.1758 229.217Z" fill="#575A88"/>
+<path d="M40.2344 155.092C40.2344 155.092 40.2344 173.862 47.8696 174.498C55.5048 175.134 82.8643 178.634 82.8643 178.634C82.8643 178.634 84.4549 209.811 87.3181 219.991C90.1813 230.171 87.6363 230.808 90.1813 231.444C92.7264 232.08 103.543 229.853 103.225 227.626C102.907 225.399 101.634 169.09 101.634 169.09C101.634 169.09 104.497 157.001 66.3213 151.274L40.2344 155.092Z" fill="#2F2E41"/>
+<path d="M91.1248 234.304C91.1248 234.304 89.216 230.168 88.8978 231.441C88.5797 232.713 84.7621 243.848 88.5797 244.802C92.3973 245.757 104.486 250.847 112.44 250.529C120.393 250.21 121.348 249.892 121.348 249.892C121.348 249.892 123.574 246.711 120.711 244.802C117.848 242.893 106.077 231.759 105.441 230.486C104.805 229.214 100.033 228.259 100.033 230.486C100.033 232.713 93.3517 237.167 91.1248 234.304Z" fill="#2F2E41"/>
+<path opacity="0.1" d="M71.2524 82.7153C70.7207 83.7961 70.3519 84.9496 70.1581 86.1384C68.5737 87.096 67.5143 86.851 65.526 86.851C62.5769 86.851 61.3871 83.0811 59.4815 81.1246C59.332 79.3081 56.7773 81.2837 56.7773 81.2837C56.7773 81.2837 74.7519 75.7163 71.2524 82.7153Z" fill="black"/>
+<path d="M64.7171 86.6951C70.5153 86.6951 75.2155 81.9948 75.2155 76.1967C75.2155 70.3985 70.5153 65.6982 64.7171 65.6982C58.919 65.6982 54.2188 70.3985 54.2188 76.1967C54.2188 81.9948 58.919 86.6951 64.7171 86.6951Z" fill="#9F616A"/>
+<path d="M82.8574 109.278C82.8574 109.278 81.2668 120.731 80.3124 124.866C79.358 129.002 78.0854 148.09 77.4492 150.635C76.8129 153.18 72.9953 153.816 65.3601 152.862C64.8808 152.802 64.3987 152.766 63.9158 152.754C59.2138 152.604 53.8341 154.364 48.8553 155.744C45.9921 156.54 43.2594 157.208 40.8638 157.316C37.2371 157.481 36.1745 153.46 36.2986 149.108C36.4163 145.058 37.5648 140.716 38.6369 139.182C40.568 136.421 38.6687 111.629 39.3813 103.453V103.45C39.4895 102.202 39.6581 101.344 39.9094 101.006C41.8182 98.4612 54.2254 92.0985 55.6157 92.3562C57.0027 92.6139 68.8596 100.052 68.8596 100.052C71.7228 100.052 71.6305 96.9469 71.6305 96.9469C71.6305 96.9469 73.6316 100.688 77.4492 101.643C81.2668 102.597 82.8574 109.278 82.8574 109.278Z" fill="#575A88"/>
+<path d="M61.5862 150.522C61.5862 150.522 82.0791 151.175 78.4891 153.61C74.8992 156.044 58.9925 158.271 58.6744 155.09C58.3563 151.909 61.5862 150.522 61.5862 150.522Z" fill="#9F616A"/>
+<path opacity="0.1" d="M63.9258 152.758C63.9926 153.98 60.7063 156.731 59.6437 158.593C59.0552 159.623 54.4995 158.265 48.8653 155.748C44.5418 153.808 40.3476 151.591 36.3086 149.112C36.4263 145.062 37.5748 140.72 38.6469 139.186C40.578 136.425 38.6787 111.633 39.3913 103.457V103.454C39.5612 103.367 39.7378 103.295 39.9194 103.237H43.737C56.7805 109.282 41.8282 135.369 41.8282 135.369C41.8282 135.369 61.5525 151.594 63.4613 152.23C63.5865 152.254 63.7002 152.318 63.7843 152.414C63.8685 152.51 63.9182 152.631 63.9258 152.758V152.758Z" fill="black"/>
+<path d="M43.7174 101.323H39.8998C39.8998 101.323 36.4004 102.278 33.5372 108.64C30.6739 115.003 20.1755 134.727 29.4014 142.363C38.6273 149.998 58.3516 158.905 59.6241 156.679C60.8966 154.452 65.3505 150.952 63.4417 150.316C61.5329 149.68 41.8086 133.455 41.8086 133.455C41.8086 133.455 56.7609 107.368 43.7174 101.323Z" fill="#575A88"/>
+<path d="M63.0985 71.3068C63.0985 71.3068 63.5592 64.929 69.2429 67.5295C74.9266 70.13 74.5557 62.9622 72.8381 61.6955C71.1206 60.4289 71.1749 60.1154 64.8931 60.9629C58.6112 61.8104 46.4153 63.2462 50.3588 75.8772C54.3023 88.5081 57.8737 85.2588 57.8737 85.2588C57.8737 85.2588 54.7392 73.8926 57.9152 76.058L61.0913 78.2235L62.7673 77.8685L63.0985 71.3068Z" fill="#2F2E41"/>
+<path d="M110.386 232.666L90.0963 177.504L36.4882 173.72L22.5527 232.63L21.9336 232.483L35.9938 173.047L36.2633 173.066L90.5512 176.898L90.6225 177.091L110.983 232.447L110.386 232.666Z" fill="#2F2E41"/>
+<path opacity="0.4" d="M189.843 186.762C195.334 186.762 199.784 182.311 199.784 176.821C199.784 171.331 195.334 166.88 189.843 166.88C184.353 166.88 179.902 171.331 179.902 176.821C179.902 182.311 184.353 186.762 189.843 186.762Z" fill="#6C63FF"/>
+<path opacity="0.4" d="M171.427 188.537C175.278 188.537 178.4 185.415 178.4 181.563C178.4 177.712 175.278 174.59 171.427 174.59C167.575 174.59 164.453 177.712 164.453 181.563C164.453 185.415 167.575 188.537 171.427 188.537Z" fill="#6C63FF"/>
+<path opacity="0.4" d="M17.7743 90.2361C21.6257 90.2361 24.7479 87.114 24.7479 83.2626C24.7479 79.4112 21.6257 76.2891 17.7743 76.2891C13.9229 76.2891 10.8008 79.4112 10.8008 83.2626C10.8008 87.114 13.9229 90.2361 17.7743 90.2361Z" fill="#6C63FF"/>
+<path d="M150.968 235.14L150.332 235.128C150.578 228.053 151.333 221.006 152.591 214.04C155.342 199.125 159.917 189.33 166.189 184.927L166.554 185.447C151.903 195.734 150.976 234.747 150.968 235.14Z" fill="#2F2E41"/>
+<path d="M158.937 234.985L158.301 234.972C158.314 234.268 158.712 217.661 165.25 213.071L165.615 213.592C159.341 217.997 158.94 234.815 158.937 234.985Z" fill="#2F2E41"/>
+<path d="M170.174 185.503C171.931 185.503 173.355 184.079 173.355 182.322C173.355 180.565 171.931 179.141 170.174 179.141C168.417 179.141 166.992 180.565 166.992 182.322C166.992 184.079 168.417 185.503 170.174 185.503Z" fill="#6C63FF"/>
+<path d="M168.611 212.862C170.368 212.862 171.792 211.437 171.792 209.68C171.792 207.923 170.368 206.499 168.611 206.499C166.854 206.499 165.43 207.923 165.43 209.68C165.43 211.437 166.854 212.862 168.611 212.862Z" fill="#6C63FF"/>
+<path d="M157.465 187.41C158.063 191.229 156.504 194.645 156.504 194.645C156.504 194.645 153.977 191.869 153.379 188.05C152.781 184.231 154.339 180.815 154.339 180.815C154.339 180.815 156.867 183.591 157.465 187.41Z" fill="#2F2E41"/>
+<path d="M167.838 196.684C164.182 197.938 160.547 196.999 160.547 196.999C160.547 196.999 162.84 194.026 166.496 192.772C170.153 191.518 173.787 192.457 173.787 192.457C173.787 192.457 171.494 195.43 167.838 196.684Z" fill="#2F2E41"/>
+<path d="M167.962 220.916C166.307 221.436 164.545 221.512 162.852 221.137C163.927 219.768 165.375 218.739 167.022 218.174C168.668 217.609 170.443 217.532 172.132 217.953C171.026 219.289 169.588 220.31 167.962 220.916V220.916Z" fill="#2F2E41"/>
+<path d="M54.624 62.2314L56.9767 61.7967L59.3462 74.6232L55.5921 75.3167L53.4815 63.8916C53.4129 63.5199 53.4947 63.1362 53.7089 62.8249C53.9232 62.5135 54.2524 62.3 54.624 62.2314V62.2314Z" fill="#6C63FF"/>
+<path d="M57.8775 82.0782C60.513 82.0782 62.6495 79.9417 62.6495 77.3062C62.6495 74.6707 60.513 72.5342 57.8775 72.5342C55.242 72.5342 53.1055 74.6707 53.1055 77.3062C53.1055 79.9417 55.242 82.0782 57.8775 82.0782Z" fill="#6C63FF"/>
+<path d="M57.8827 80.1698C59.4641 80.1698 60.746 78.8879 60.746 77.3066C60.746 75.7253 59.4641 74.4434 57.8827 74.4434C56.3014 74.4434 55.0195 75.7253 55.0195 77.3066C55.0195 78.8879 56.3014 80.1698 57.8827 80.1698Z" fill="#F2F2F2"/>
+<path d="M57.888 78.2613C58.4151 78.2613 58.8424 77.834 58.8424 77.3069C58.8424 76.7798 58.4151 76.3525 57.888 76.3525C57.3609 76.3525 56.9336 76.7798 56.9336 77.3069C56.9336 77.834 57.3609 78.2613 57.888 78.2613Z" fill="#6C63FF"/>
+<path d="M237.154 42.9346V71.5666H195.533L187.844 80.7925L188.722 71.5666H184.98V42.9346H237.154Z" fill="#4E064F"/>
+<path opacity="0.1" d="M237.149 52.7979H218.379V71.5677H237.149V52.7979Z" fill="black"/>
+<path d="M222.52 56.9336H274.693V85.5656H270.952L271.83 94.7915L264.142 85.5656H222.52V56.9336Z" fill="#4E064F"/>
+<path opacity="0.1" d="M188.152 85.4086C194.477 85.4086 199.605 84.9083 199.605 84.2912C199.605 83.6741 194.477 83.1738 188.152 83.1738C181.827 83.1738 176.699 83.6741 176.699 84.2912C176.699 84.9083 181.827 85.4086 188.152 85.4086Z" fill="black"/>
+<path opacity="0.1" d="M271.833 100.519C279.036 100.519 284.876 99.949 284.876 99.2462C284.876 98.5434 279.036 97.9736 271.833 97.9736C264.629 97.9736 258.789 98.5434 258.789 99.2462C258.789 99.949 264.629 100.519 271.833 100.519Z" fill="black"/>
+</g>
+<defs>
+<clipPath id="clip0">
+<rect width="300" height="251.007" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/desktop/src/onionshare/resources/images/mode_new_tab_chat.png b/desktop/src/onionshare/resources/images/mode_new_tab_chat.png
new file mode 100644
index 00000000..50759d64
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_new_tab_chat.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_new_tab_receive.png b/desktop/src/onionshare/resources/images/mode_new_tab_receive.png
new file mode 100644
index 00000000..9db809be
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_new_tab_receive.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_new_tab_share.png b/desktop/src/onionshare/resources/images/mode_new_tab_share.png
new file mode 100644
index 00000000..92973175
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_new_tab_share.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_new_tab_website.png b/desktop/src/onionshare/resources/images/mode_new_tab_website.png
new file mode 100644
index 00000000..86b45f66
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_new_tab_website.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_receive.png b/desktop/src/onionshare/resources/images/mode_receive.png
new file mode 100644
index 00000000..d57aa409
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_receive.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_receive.svg b/desktop/src/onionshare/resources/images/mode_receive.svg
new file mode 100644
index 00000000..5a0a29fd
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_receive.svg
@@ -0,0 +1,74 @@
+<svg width="300" height="229" viewBox="0 0 300 229" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0)">
+<path d="M215.881 135.736L218.241 134.244C218.466 134.099 218.687 133.943 218.914 133.798C213.853 132.906 209.24 130.27 205.84 126.326C202.44 122.382 200.456 117.367 200.217 112.111C200.044 108.496 200.711 104.89 202.164 101.591C203.516 98.5041 205.513 95.7588 208.014 93.5486C210.514 91.3384 213.458 89.7171 216.636 88.799L216.52 98.3153L221.622 87.9574C221.643 87.954 221.664 87.954 221.685 87.9574C224.642 87.816 227.597 88.2726 230.381 89.3012C233.166 90.3299 235.725 91.9103 237.913 93.9524C240.102 95.9945 241.876 98.4582 243.135 101.203C244.394 103.947 245.113 106.919 245.25 109.949C245.269 110.389 245.25 110.822 245.25 111.243C247.026 109.168 248.637 106.945 249.705 104.507C251.866 99.5712 251.917 93.9812 251.737 87.1871C251.395 73.7218 250.83 60.1562 250.091 46.6295C244.763 46.0233 239.821 43.4907 236.153 39.4867C232.484 35.4826 230.33 30.2696 230.076 24.7841C230.045 24.0752 230.054 23.3793 230.076 22.6866C230.076 22.5151 230.076 22.3403 230.101 22.1687C230.146 21.4987 230.206 20.8351 230.307 20.1813C230.307 20.0712 230.345 19.9677 230.364 19.8576C230.456 19.303 230.567 18.7549 230.695 18.2133C230.746 18.0126 230.793 17.8087 230.847 17.608C231.005 17.0189 231.163 16.4395 231.381 15.8666C231.447 15.6756 231.526 15.4911 231.596 15.3034C231.757 14.8826 231.931 14.4683 232.114 14.0572C232.212 13.8403 232.307 13.6267 232.411 13.4098C232.436 13.3548 232.458 13.2998 232.487 13.2448C234.866 8.43106 238.815 4.62354 243.65 2.48404C248.484 0.344543 253.898 0.0083428 258.949 1.53388L258.798 13.918L263.853 3.68962C267.999 6.12119 271.278 9.8473 273.21 14.3237C275.143 18.8001 275.628 23.7923 274.594 28.5712H274.62C274.585 28.7363 274.534 28.8949 274.496 29.0567C274.427 29.361 274.351 29.662 274.269 29.963C274.161 30.3482 274.041 30.7269 273.918 31.1056C273.823 31.3872 273.732 31.6753 273.628 31.9537C273.476 32.3615 273.312 32.7596 273.128 33.1578C273.027 33.3908 272.936 33.6271 272.812 33.8569C272.524 34.4525 272.208 35.0351 271.865 35.6048C271.748 35.8023 271.615 35.99 271.492 36.1875C271.252 36.5694 271.008 36.9481 270.746 37.3171C270.585 37.5437 270.411 37.7606 270.241 37.9839C269.994 38.3076 269.742 38.6313 269.479 38.9258C269.293 39.1427 269.103 39.3563 268.907 39.5732C268.633 39.871 268.348 40.1591 268.054 40.4439C267.862 40.6349 267.666 40.8258 267.464 41.0071C267.132 41.3081 266.784 41.5962 266.434 41.8778C266.257 42.0202 266.086 42.1691 265.903 42.3051C265.37 42.7108 264.819 43.0916 264.251 43.4477C264.143 43.5124 264.029 43.5674 263.935 43.6322C263.461 43.9203 262.987 44.1889 262.478 44.4414C262.267 44.5482 262.045 44.6421 261.827 44.7424C261.42 44.9302 261.009 45.1114 260.589 45.2765C260.346 45.3704 260.096 45.4578 259.847 45.5452C259.433 45.6908 259.012 45.8235 258.583 45.9433C258.33 46.0145 258.08 46.0857 257.825 46.1472C257.363 46.2605 256.893 46.3544 256.419 46.4353C256.387 46.4353 256.359 46.4353 256.327 46.4547C256.639 52.1602 256.916 57.8689 257.158 63.5808C258.502 60.7545 260.395 58.2393 262.722 56.1894C265.048 54.1396 267.759 52.5983 270.688 51.6603C273.616 50.7222 276.701 50.4071 279.753 50.7342C282.805 51.0614 285.76 52.0239 288.435 53.5628L284.451 64.7461L292.647 56.6831C297.034 60.8028 299.647 66.5369 299.913 72.6278C300.017 74.7649 299.825 76.9065 299.341 78.9882C298.312 83.493 295.985 87.5769 292.662 90.71C289.339 93.8431 285.174 95.8808 280.707 96.5588C276.239 97.2367 271.677 96.5236 267.61 94.512C263.543 92.5003 260.16 89.283 257.9 85.2773C257.9 85.8567 257.941 86.4394 257.957 87.0187C258.106 93.0134 258.292 100.471 255.376 107.132C253.402 111.648 250.22 115.315 247.077 118.601C245.032 120.74 242.913 122.808 240.739 124.812C238.602 127.752 235.812 130.129 232.601 131.745C229.03 134.564 225.334 137.203 221.511 139.663L219.189 141.197C217.044 142.56 214.845 143.958 212.687 145.405C213.066 145.366 213.442 145.324 213.828 145.308C218.604 145.078 223.328 146.411 227.317 149.112C231.306 151.814 234.353 155.744 236.019 160.336L221.935 172.083L237.415 168.403C237.411 172.307 236.441 176.147 234.595 179.564C232.75 182.98 230.089 185.862 226.861 187.939C223.634 190.016 219.945 191.221 216.14 191.441C212.335 191.662 208.537 190.89 205.102 189.199C205.449 189.646 205.8 190.089 206.147 190.533C206.839 191.416 207.528 192.294 208.201 193.164C217.363 205.053 219.916 216.343 215.376 224.95L209.86 221.895C214.283 213.518 207.648 202.797 203.279 197.146C202.619 196.291 201.942 195.43 201.26 194.556C195.406 187.111 188.771 178.657 188.939 168.296C189.176 152.694 203.99 143.285 215.881 135.736Z" fill="#F3F3F3"/>
+<path d="M143.907 228.38C223.385 228.38 287.814 225.337 287.814 221.583C287.814 217.829 223.385 214.786 143.907 214.786C64.4295 214.786 0 217.829 0 221.583C0 225.337 64.4295 228.38 143.907 228.38Z" fill="#E5E5E5"/>
+<path d="M260.166 219.049C261.114 217.265 260.04 215.08 258.814 213.488C257.588 211.895 256.094 210.251 256.125 208.215C256.17 205.302 259.187 203.583 261.601 202.039C263.388 200.892 265.037 199.533 266.513 197.99C267.133 197.396 267.645 196.695 268.027 195.918C268.523 194.779 268.51 193.484 268.478 192.235C268.373 188.079 268.173 183.927 267.878 179.779" stroke="#3F3D56" stroke-width="0.998733" stroke-miterlimit="10"/>
+<path d="M272.463 179.559C272.428 178.798 272.207 178.059 271.821 177.409C271.434 176.759 270.895 176.218 270.252 175.837L269.26 177.85L269.288 175.416C268.61 175.207 267.892 175.169 267.196 175.304C266.5 175.439 265.846 175.743 265.289 176.191C264.732 176.639 264.287 177.218 263.994 177.878C263.7 178.538 263.566 179.261 263.601 179.986C263.657 181.188 264.176 182.318 265.044 183.128C265.474 183.529 265.977 183.839 266.524 184.041C267.072 184.243 267.652 184.332 268.233 184.304C268.814 184.276 269.384 184.131 269.91 183.877C270.436 183.624 270.908 183.266 271.299 182.826C271.691 182.385 271.994 181.87 272.191 181.309C272.388 180.749 272.475 180.154 272.447 179.559H272.463Z" fill="#57B793"/>
+<path d="M264.555 210.309C264.091 211.233 263.33 211.965 262.402 212.383C261.473 212.802 260.432 212.88 259.454 212.605C258.476 212.331 257.619 211.72 257.028 210.876C256.437 210.031 256.147 209.004 256.207 207.967C256.267 206.929 256.673 205.944 257.358 205.177C258.042 204.41 258.963 203.907 259.966 203.753C260.969 203.599 261.994 203.803 262.868 204.331C263.742 204.858 264.412 205.677 264.767 206.651L261.999 208.959L265.045 208.234C265.045 208.956 264.877 209.667 264.555 210.309V210.309Z" fill="#57B793"/>
+<path d="M262.364 201.475C261.782 201.504 261.2 201.415 260.652 201.213C260.104 201.01 259.601 200.699 259.17 200.297C258.74 199.895 258.392 199.41 258.145 198.87C257.898 198.329 257.758 197.744 257.732 197.148C257.697 196.437 257.828 195.728 258.114 195.079C258.38 194.472 258.772 193.932 259.263 193.497C259.755 193.062 260.333 192.742 260.958 192.561L260.936 194.435L261.94 192.396C263.116 192.34 264.264 192.764 265.134 193.576C266.004 194.387 266.523 195.52 266.578 196.724C266.633 197.928 266.219 199.105 265.427 199.996C264.635 200.887 263.529 201.419 262.354 201.475H262.364Z" fill="#57B793"/>
+<path d="M273.129 194.125C271.956 194.181 270.809 193.758 269.94 192.949C269.071 192.139 268.552 191.009 268.497 189.807C268.442 188.605 268.855 187.43 269.645 186.54C270.436 185.65 271.539 185.118 272.712 185.062C273.541 185.02 274.365 185.22 275.087 185.638L274.304 187.839L275.915 186.253C276.78 187.062 277.296 188.19 277.349 189.389C277.37 189.809 277.331 190.23 277.236 190.639C277.015 191.598 276.494 192.458 275.753 193.087C275.012 193.716 274.09 194.081 273.129 194.125V194.125Z" fill="#57B793"/>
+<path opacity="0.1" d="M271.867 180.757C270.844 180.873 269.849 181.2 268.822 181.265C267.795 181.33 266.667 181.077 266.016 180.258C265.666 179.818 265.492 179.261 265.195 178.782C264.915 178.335 264.532 177.965 264.08 177.705C263.812 178.278 263.665 178.902 263.648 179.537C263.631 180.171 263.745 180.803 263.981 181.39C264.218 181.977 264.572 182.507 265.022 182.944C265.471 183.382 266.005 183.718 266.589 183.93C267.173 184.143 267.795 184.227 268.413 184.178C269.031 184.129 269.632 183.947 270.177 183.644C270.722 183.342 271.199 182.925 271.577 182.422C271.954 181.918 272.225 181.339 272.37 180.721C272.199 180.728 272.032 180.741 271.867 180.757Z" fill="black"/>
+<path opacity="0.1" d="M273.13 194.125C272.365 194.164 271.603 194 270.919 193.648C270.235 193.295 269.652 192.767 269.227 192.115C268.802 191.462 268.549 190.708 268.494 189.925C268.439 189.143 268.583 188.359 268.912 187.651C269.264 187.894 269.566 188.205 269.803 188.567C270.119 189.056 270.308 189.619 270.681 190.069C271.37 190.901 272.551 191.173 273.622 191.121C274.693 191.069 275.723 190.761 276.782 190.661C276.927 190.661 277.079 190.635 277.227 190.632C277.008 191.591 276.489 192.451 275.75 193.082C275.01 193.712 274.09 194.078 273.13 194.125Z" fill="black"/>
+<path opacity="0.1" d="M262.364 201.476C261.782 201.504 261.2 201.415 260.652 201.213C260.104 201.011 259.601 200.7 259.17 200.297C258.74 199.895 258.392 199.41 258.145 198.87C257.898 198.329 257.758 197.744 257.732 197.148C257.697 196.437 257.828 195.728 258.114 195.08C258.482 195.326 258.803 195.638 259.062 196.002C259.407 196.501 259.621 197.073 260.01 197.533C260.759 198.388 262.016 198.689 263.15 198.66C264.285 198.63 265.305 198.359 266.398 198.274C266.128 199.168 265.596 199.955 264.874 200.528C264.153 201.101 263.276 201.432 262.364 201.476Z" fill="black"/>
+<path opacity="0.1" d="M264.554 210.309C264.316 210.853 263.975 211.344 263.551 211.753C263.128 212.161 262.63 212.481 262.086 212.693C261.542 212.904 260.962 213.004 260.38 212.987C259.799 212.969 259.226 212.834 258.695 212.59C258.164 212.345 257.686 211.996 257.287 211.562C256.887 211.128 256.576 210.618 256.369 210.061C256.162 209.503 256.065 208.909 256.082 208.313C256.099 207.717 256.231 207.131 256.469 206.587C256.833 206.835 257.161 207.134 257.443 207.477C257.863 208.005 258.141 208.6 258.63 209.095C259.537 210.005 261 210.39 262.302 210.416C263.054 210.426 263.806 210.391 264.554 210.309V210.309Z" fill="black"/>
+<path d="M253.482 216.993C253.482 216.993 256.98 216.883 258.035 216.113C259.09 215.342 263.406 214.423 263.681 215.66C263.956 216.896 268.941 221.81 264.989 221.829C261.036 221.848 255.808 221.182 254.756 220.534C253.704 219.887 253.482 216.993 253.482 216.993Z" fill="#656380"/>
+<path opacity="0.2" d="M265.058 221.398C261.109 221.431 255.877 220.751 254.825 220.104C254.026 219.605 253.704 217.809 253.599 216.98H253.482C253.482 216.98 253.704 219.87 254.746 220.541C255.789 221.211 261.027 221.861 264.979 221.835C266.12 221.835 266.515 221.408 266.493 220.793C266.344 221.159 265.908 221.392 265.058 221.398Z" fill="black"/>
+<path d="M61.4202 209.063C59.1265 204.712 61.7361 199.385 64.7185 195.507C67.7009 191.629 71.3531 187.596 71.2741 182.653C71.1604 175.552 63.8055 171.36 57.9291 167.596C53.5686 164.802 49.5462 161.489 45.9458 157.727C44.502 156.215 43.1024 154.603 42.2621 152.674C41.0489 149.897 41.0805 146.741 41.1595 143.698C41.4122 133.556 41.9008 123.433 42.6254 113.33" stroke="#3F3D56" stroke-width="0.998733" stroke-miterlimit="10"/>
+<path d="M31.4494 112.777C31.5359 110.924 32.0754 109.123 33.0182 107.54C33.9611 105.956 35.2771 104.64 36.8455 103.714L39.2656 108.618L39.1929 102.681C41.3915 102.017 43.739 102.087 45.8966 102.879C48.0542 103.671 49.9102 105.146 51.1966 107.089C52.483 109.033 53.1332 111.345 53.0534 113.692C52.9735 116.039 52.1678 118.299 50.7524 120.146C49.3371 121.993 47.3854 123.331 45.1792 123.968C42.973 124.604 40.6264 124.506 38.4783 123.687C36.3302 122.868 34.4917 121.371 33.2283 119.412C31.9649 117.452 31.3419 115.132 31.4494 112.787V112.777Z" fill="#57B793"/>
+<path d="M50.7274 187.729C51.8143 189.899 53.5702 191.64 55.7225 192.683C57.8748 193.725 60.3028 194.01 62.6295 193.494C64.9561 192.977 67.0511 191.688 68.5889 189.826C70.1267 187.964 71.0212 185.633 71.1335 183.197C71.209 181.665 70.969 180.135 70.429 178.704C69.6397 176.606 68.2459 174.804 66.4328 173.537C64.6198 172.271 62.4733 171.599 60.2788 171.612C58.0843 171.625 55.9456 172.322 54.1469 173.61C52.3483 174.898 50.9749 176.717 50.2093 178.824L56.9608 184.45L49.5332 182.679C49.5301 184.436 49.9397 186.168 50.7274 187.729Z" fill="#57B793"/>
+<path d="M56.0637 166.229C58.7142 166.354 61.3168 165.475 63.3758 163.76C65.4349 162.046 66.8068 159.616 67.2302 156.932C67.6536 154.249 67.099 151.499 65.672 149.207C64.245 146.916 62.0453 145.241 59.4916 144.504L59.5484 149.064L57.1157 144.102H57.0873C54.2229 143.965 51.4228 145 49.3029 146.978C47.1829 148.957 45.9169 151.717 45.7832 154.651C45.6496 157.586 46.6593 160.455 48.5902 162.627C50.5211 164.799 53.2151 166.096 56.0795 166.233L56.0637 166.229Z" fill="#57B793"/>
+<path d="M29.8236 148.34C31.4972 148.423 33.1668 148.107 34.7006 147.417C36.2345 146.726 37.5906 145.679 38.662 144.359C39.7334 143.039 40.4907 141.482 40.8741 139.811C41.2575 138.14 41.2565 136.401 40.8713 134.73C40.486 133.059 39.7271 131.503 38.6542 130.185C37.5814 128.866 36.2241 127.821 34.6895 127.132C33.1549 126.443 31.4849 126.128 29.8115 126.214C28.138 126.299 26.5068 126.782 25.0467 127.624L26.9423 132.988L23.0279 129.113C21.9815 130.089 21.1331 131.266 20.5314 132.578C19.9296 133.89 19.5863 135.311 19.5211 136.759C19.4709 137.783 19.5634 138.81 19.7959 139.808C20.3333 142.154 21.6032 144.257 23.413 145.797C25.2228 147.337 27.4736 148.23 29.8236 148.34V148.34Z" fill="#57B793"/>
+<path opacity="0.1" d="M32.9052 115.729C35.4011 116.011 37.8274 116.804 40.3296 116.962C42.8318 117.121 45.5836 116.509 47.1664 114.515C48.0194 113.44 48.4459 112.081 49.1663 110.909C49.8488 109.817 50.7844 108.916 51.8896 108.284C52.5778 109.688 52.9668 111.225 53.0307 112.795C53.0946 114.364 52.832 115.929 52.2603 117.387C51.6886 118.844 50.8208 120.161 49.7147 121.248C48.6085 122.336 47.2892 123.17 45.8443 123.695C44.3995 124.22 42.8621 124.425 41.3342 124.295C39.8063 124.165 38.3229 123.703 36.9824 122.941C35.6419 122.179 34.4749 121.133 33.559 119.874C32.6431 118.614 31.9992 117.169 31.6699 115.635C32.0901 115.654 32.5008 115.684 32.9052 115.729Z" fill="black"/>
+<path opacity="0.1" d="M29.8236 148.34C31.6865 148.428 33.5399 148.021 35.204 147.159C36.8681 146.296 38.2864 145.008 39.3212 143.418C40.356 141.829 40.9721 139.992 41.1099 138.087C41.2476 136.182 40.9022 134.272 40.1073 132.544C39.249 133.135 38.5108 133.892 37.9336 134.771C37.1628 135.962 36.6983 137.338 35.7916 138.432C34.1077 140.458 31.2327 141.122 28.6231 141.002C26.0135 140.882 23.4955 140.118 20.8986 139.875C20.5384 139.843 20.1719 139.817 19.8086 139.807C20.3453 142.152 21.6134 144.253 23.4207 145.793C25.2279 147.333 27.4758 148.227 29.8236 148.34V148.34Z" fill="black"/>
+<path opacity="0.1" d="M56.065 166.23C57.9097 166.319 59.7458 165.922 61.3982 165.077C63.0505 164.232 64.4641 162.968 65.5039 161.404C66.5437 159.84 67.1752 158.03 67.338 156.145C67.5008 154.261 67.1895 152.365 66.4339 150.638C65.5437 151.244 64.7695 152.012 64.1497 152.904C63.3093 154.118 62.7849 155.516 61.8023 156.636C59.9794 158.717 56.9148 159.452 54.1504 159.384C51.4745 159.326 48.8965 158.653 46.2363 158.442C46.8949 160.618 48.1918 162.533 49.9505 163.926C51.7091 165.32 53.8442 166.124 56.065 166.23V166.23Z" fill="black"/>
+<path opacity="0.1" d="M50.7285 187.729C51.8154 189.899 53.5713 191.641 55.7236 192.683C57.8759 193.726 60.3039 194.011 62.6306 193.494C64.9572 192.977 67.0522 191.688 68.59 189.826C70.1278 187.964 71.0223 185.634 71.1346 183.197C71.2101 181.666 70.97 180.135 70.4301 178.705C69.5407 179.303 68.7422 180.033 68.0606 180.87C67.0338 182.165 66.3546 183.608 65.1666 184.806C62.9551 187.026 59.3882 187.946 56.2131 188.043C54.3805 188.049 52.5491 187.944 50.7285 187.729V187.729Z" fill="black"/>
+<path d="M136.237 215.53L94.5335 224.269L93.5857 224.172L56.9375 220.385V172.804L101.8 165.035L134.341 168.919L134.35 169.13L134.354 169.233L136.237 215.53Z" fill="#4E0D4E"/>
+<path opacity="0.05" d="M134.354 169.233L134.341 169.243L93.5857 175.393L56.9375 172.804L101.8 165.035L134.341 168.919L134.35 169.13L134.354 169.233Z" fill="black"/>
+<path opacity="0.5" d="M136.237 215.53L94.5337 224.27L93.5859 224.173V175.394L134.351 169.13L136.237 215.53Z" fill="#3A0A3A"/>
+<path d="M182.045 217.472L140.342 226.212L139.394 226.115L102.746 222.327V174.746L147.609 166.978L180.15 170.862L180.159 171.072L180.162 171.176L182.045 217.472Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M182.045 217.472L140.342 226.212L139.395 226.115V177.336L180.159 171.072L182.045 217.472Z" fill="#EFEFEF"/>
+<path opacity="0.05" d="M180.162 171.176L180.15 171.185L139.394 177.335L102.746 174.746L147.608 166.978L180.15 170.862L180.159 171.072L180.162 171.176Z" fill="black"/>
+<path d="M153.297 170.862L111.594 179.601L110.646 179.504L73.998 175.717V128.136L118.86 120.367L151.402 124.251L151.411 124.462L151.414 124.565L153.297 170.862Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M153.295 170.861L111.592 179.601L110.645 179.504V130.725L151.409 124.461L153.295 170.861Z" fill="black"/>
+<path opacity="0.05" d="M151.414 124.565L151.401 124.575L110.646 130.725L73.998 128.136L118.86 120.367L151.401 124.251L151.411 124.462L151.414 124.565Z" fill="black"/>
+<path d="M176.991 172.855L155.226 177.419L154.73 177.367L135.604 175.39V150.557L159.017 146.501L176.002 148.53L176.008 148.641V148.692L176.991 172.855Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M176.991 172.856L155.226 177.42L154.73 177.368V151.91L176.008 148.641L176.991 172.856Z" fill="black"/>
+<path opacity="0.05" d="M176.008 148.692L176.002 148.699L154.73 151.91L135.604 150.557L159.017 146.501L176.002 148.53L176.008 148.641V148.692Z" fill="black"/>
+<path d="M118.545 124.626L96.7808 129.187L96.2848 129.138L77.1582 127.161V102.328L100.572 98.272L117.556 100.301L117.563 100.412V100.463L118.545 124.626Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M118.544 124.627L96.7792 129.188L96.2832 129.139V103.681L117.561 100.412L118.544 124.627Z" fill="black"/>
+<path opacity="0.05" d="M117.563 100.463L117.556 100.47L96.2848 103.681L77.1582 102.328L100.572 98.272L117.556 100.301L117.563 100.412V100.463Z" fill="black"/>
+<path d="M156.77 123.656L135.005 128.216L134.509 128.168L115.383 126.19V101.357L138.797 97.3013L155.781 99.3308L155.787 99.4408V99.4926L156.77 123.656Z" fill="#4E0D4E"/>
+<path opacity="0.1" d="M156.772 123.655L135.008 128.216L134.512 128.167V102.71L155.79 99.4404L156.772 123.655Z" fill="black"/>
+<path opacity="0.05" d="M155.787 99.4926L155.781 99.4991L134.509 102.71L115.383 101.357L138.797 97.3013L155.781 99.3308L155.787 99.4408V99.4926Z" fill="black"/>
+<path d="M168.145 98.7318L146.38 103.292L145.884 103.244L126.758 101.266V76.4332L150.172 72.3774L167.156 74.4069L167.162 74.517V74.5688L168.145 98.7318Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M168.145 98.7323L146.381 103.293L145.885 103.244V77.7868L167.163 74.5176L168.145 98.7323Z" fill="black"/>
+<path opacity="0.05" d="M167.162 74.5688L167.156 74.5753L145.884 77.7862L126.758 76.4332L150.172 72.3774L167.156 74.4069L167.162 74.517V74.5688Z" fill="black"/>
+<path d="M182.967 47.9656C182.737 50.0696 181.17 51.7657 180.588 53.7919C179.717 56.8507 181.22 60.1361 183.293 62.5314C184.963 64.4346 186.985 65.9793 189.243 67.0761C191.5 68.1729 193.947 68.7999 196.442 68.9209C197.175 68.9855 197.913 68.9031 198.616 68.6781C199.241 68.4174 199.804 68.0222 200.268 67.5194C201.822 65.9171 202.66 63.6999 202.991 61.4632C203.323 59.2266 203.197 56.9511 203.067 54.695C203.067 54.2281 202.983 53.7652 202.821 53.3291C202.609 52.9143 202.318 52.5477 201.964 52.2512C200.844 51.1962 199.609 50.2763 198.284 49.5096C197.715 49.1859 197.105 48.8622 196.742 48.3023C196.493 47.8563 196.331 47.3649 196.265 46.8554L195.858 44.732C195.785 44.1198 195.581 43.5316 195.26 43.01C194.543 42.0196 193.169 41.8836 191.965 41.8351L187.542 41.657C186.168 41.602 184.361 41.1974 183.018 41.4758C181.754 41.7315 182.181 42.9162 182.408 43.9908C182.737 45.2905 182.925 46.6236 182.967 47.9656V47.9656Z" fill="#FFC0C6"/>
+<path opacity="0.1" d="M182.967 47.9656C182.737 50.0696 181.17 51.7657 180.588 53.7919C179.717 56.8507 181.22 60.1361 183.293 62.5314C184.963 64.4346 186.985 65.9793 189.243 67.0761C191.5 68.1729 193.947 68.7999 196.442 68.9209C197.175 68.9855 197.913 68.9031 198.616 68.6781C199.241 68.4174 199.804 68.0222 200.268 67.5194C201.822 65.9171 202.66 63.6999 202.991 61.4632C203.323 59.2266 203.197 56.9511 203.067 54.695C203.067 54.2281 202.983 53.7652 202.821 53.3291C202.609 52.9143 202.318 52.5477 201.964 52.2512C200.844 51.1962 199.609 50.2763 198.284 49.5096C197.715 49.1859 197.105 48.8622 196.742 48.3023C196.493 47.8563 196.331 47.3649 196.265 46.8554L195.858 44.732C195.785 44.1198 195.581 43.5316 195.26 43.01C194.543 42.0196 193.169 41.8836 191.965 41.8351L187.542 41.657C186.168 41.602 184.361 41.1974 183.018 41.4758C181.754 41.7315 182.181 42.9162 182.408 43.9908C182.737 45.2905 182.925 46.6236 182.967 47.9656V47.9656Z" fill="black"/>
+<path d="M211.06 142.727L209.183 163.805C208.693 169.334 208.194 174.885 207.234 180.342C206.918 182.223 206.513 184.094 206.052 185.949C204.769 191.098 202.908 196.132 202.308 201.411C202.289 201.563 202.273 201.735 202.258 201.874C202.134 203.039 202.027 204.217 201.626 205.305C201.31 206.111 200.864 206.846 200.539 207.642C199.907 209.234 199.806 210.995 199.727 212.721C197.45 211.403 194.956 210.526 192.369 210.131C191.105 209.94 189.731 209.807 188.894 208.836C187.946 207.781 188.057 206.166 188.214 204.748C188.712 200.346 189.207 195.946 189.699 191.548C189.864 189.656 190.181 187.781 190.647 185.942C190.818 185.33 191.023 184.728 191.232 184.126C191.519 183.298 191.81 182.469 192.028 181.618C192.33 180.25 192.539 178.862 192.653 177.465C193.162 173.037 193.775 168.619 194.312 164.194L194.34 163.961C195.146 157.254 195.759 150.515 195.582 143.76C195.557 142.76 195.516 141.759 195.452 140.756C195.364 139.303 195.234 138.532 196.4 137.623C197.699 136.619 199.408 135.917 200.893 135.26C201.692 134.904 210.494 131.699 210.687 132.405C211.095 133.904 211.308 135.451 211.319 137.008C211.336 138.918 211.25 140.827 211.06 142.727V142.727Z" fill="#605D82"/>
+<path opacity="0.1" d="M207.231 180.342C206.915 182.223 206.51 184.094 206.049 185.948C204.767 191.098 202.906 196.131 202.305 201.411C202.286 201.563 202.271 201.734 202.255 201.874C198.331 196.131 195.026 189.956 191.197 184.152C191.485 183.323 191.775 182.495 191.993 181.643C192.308 180.268 192.527 178.872 192.651 177.465C193.159 173.037 193.772 168.618 194.309 164.194L194.338 163.96C194.559 164.899 194.877 165.812 195.285 166.683C197.857 172.036 203.967 174.742 206.956 179.866C207.055 180.026 207.147 180.185 207.231 180.342Z" fill="black"/>
+<path d="M175.394 133.272C175.524 137.564 176.194 141.821 176.864 146.061L178.244 154.801C178.999 159.591 179.789 164.475 182.001 168.764C183.656 171.975 186.038 174.714 188.196 177.591C193.497 184.667 197.481 192.684 202.508 199.967C203.971 202.084 206.059 204.376 208.552 203.932C210.188 203.644 211.376 202.246 212.659 201.171C214.175 199.903 216.001 198.974 217.195 197.381C218.39 195.789 218.624 193.147 217.006 192.014C216.453 191.629 215.78 191.484 215.155 191.238C212.649 190.267 211.025 187.755 209.995 185.217C208.965 182.679 208.337 179.957 206.962 177.598C203.974 172.474 197.86 169.768 195.289 164.411C193.848 161.413 193.709 157.937 193.602 154.613L193.32 146.097C193.289 145.164 193.267 144.197 193.636 143.345C194.619 141.08 197.589 140.866 199.996 140.578C202.726 140.251 205.371 139.397 207.79 138.06C209.177 137.292 210.529 136.315 211.265 134.891C211.942 133.596 212.033 132.071 212.112 130.602L212.946 115.165C213.019 113.838 213.082 112.463 212.63 111.22C211.483 108.093 207.629 107.07 204.372 107.219C198.312 107.497 192.72 110.168 186.996 111.974C185.577 112.421 184.152 112.822 182.689 113.123C181.426 113.385 179.846 113.278 178.633 113.699C176.459 114.45 176.513 119.325 176.206 121.345C175.574 125.286 175.302 129.279 175.394 133.272V133.272Z" fill="#605D82"/>
+<path d="M207.728 204.586C208.262 205.14 208.436 205.949 208.575 206.713C209.347 210.952 209.749 215.254 209.775 219.566C209.741 219.968 209.818 220.373 210 220.731C210.151 220.944 210.355 221.112 210.59 221.217C212.135 221.971 213.927 220.919 215.216 219.764C217.601 217.624 219.62 214.75 219.756 211.503C219.79 210.668 219.699 209.823 219.841 208.998C220.049 207.774 220.748 206.709 221.361 205.641C222.409 203.821 223.257 201.886 223.888 199.873C224.122 199.116 224.28 198.164 223.698 197.637C223.495 197.471 223.262 197.347 223.013 197.271L216.031 194.617C215.424 194.387 213.92 198.345 213.683 198.779C213.099 199.838 212.518 200.436 211.345 200.682C210.173 200.928 208.726 200.572 207.608 201.184C205.712 202.217 206.657 203.482 207.728 204.586Z" fill="#535070"/>
+<path d="M196.96 207.03C196.83 206.766 196.65 206.531 196.429 206.341C196.106 206.13 195.739 206.002 195.358 205.968C194.031 205.735 192.458 205.583 191.538 206.596C190.679 207.545 190.827 209.089 190.11 210.157C189.883 210.48 189.573 210.772 189.377 211.128C189.134 211.673 189.025 212.271 189.061 212.869C189.023 214.517 188.986 216.171 189.099 217.815C189.191 219.194 189.415 220.641 190.259 221.722C191.611 223.457 194.05 223.706 196.211 223.816L197.964 223.91C198.446 223.968 198.935 223.922 199.399 223.774C199.686 223.639 199.944 223.445 200.157 223.206C200.369 222.966 200.533 222.685 200.637 222.379C201.55 220.055 200.106 217.553 199.215 215.222C198.189 212.539 198.372 209.564 196.96 207.03Z" fill="#535070"/>
+<path d="M182.463 36.1025C182.441 35.8669 182.475 35.6293 182.561 35.4099C182.817 34.947 183.487 35.0862 183.992 35.2027C186.024 35.7271 188.166 35.2513 190.261 35.3743C192.355 35.4973 194.712 36.5687 195.132 38.6726C196.652 37.5708 197.962 36.1928 198.996 34.6071C199.577 33.717 200.083 32.6974 200.004 31.6292C199.89 30.0885 198.63 28.9362 197.476 27.9587L194.001 25.0455C193.543 24.6153 193.015 24.2712 192.441 24.0291C191.638 23.7475 190.76 23.8835 189.913 23.8835C187.386 23.8835 184.675 22.702 182.422 23.8835C181.474 24.3787 180.77 25.23 180.088 26.0586L176.982 29.8263C176.747 30.0665 176.575 30.3638 176.483 30.6906C176.394 31.1502 176.625 31.6033 176.707 32.0662C176.852 32.9078 176.499 33.8076 176.77 34.6168C177.222 35.9569 178.814 36.1479 179.787 36.9182C180.148 37.2031 180.716 38.1774 181.149 38.1644C181.91 38.1482 182.441 36.724 182.463 36.1025Z" fill="#3F3D56"/>
+<path d="M187.733 47.2143C193.229 47.2143 197.685 42.6494 197.685 37.0183C197.685 31.3872 193.229 26.8223 187.733 26.8223C182.237 26.8223 177.781 31.3872 177.781 37.0183C177.781 42.6494 182.237 47.2143 187.733 47.2143Z" fill="#FFC0C6"/>
+<path d="M190.064 59.3298C189.727 58.3416 189.092 57.4887 188.251 56.8941C187.41 56.2995 186.407 55.994 185.385 56.0218C185.092 56.0791 184.789 56.0394 184.52 55.9085C184.367 55.789 184.244 55.6336 184.163 55.4553C183.559 54.3394 183.073 53.1611 182.712 51.9401C182.554 51.3996 182.336 50.7619 181.802 50.6227C181.373 50.5095 180.934 50.7943 180.646 51.1406C180.391 51.5123 180.115 51.8679 179.818 52.2056C178.555 53.3514 176.343 52.3059 175.019 53.3579C174.801 53.5294 174.621 53.7495 174.388 53.9081C174.16 54.0501 173.914 54.1591 173.658 54.2318C171.088 55.0883 168.569 56.0967 166.113 57.2518C166.998 62.7026 167.901 68.257 169.974 73.3551C170.96 75.7827 172.075 78.1618 172.865 80.6638C174.615 86.2085 174.691 92.1417 174.713 97.9712C174.713 101.959 174.713 106.031 173.449 109.805C173.165 110.66 172.817 111.508 172.738 112.395C172.659 113.281 172.918 114.285 173.629 114.816C174.041 115.094 174.513 115.264 175.004 115.311C177.187 115.635 179.386 115.046 181.534 114.534C187.293 113.168 193.17 112.385 199.03 111.621L208.856 110.326C209.561 110.276 210.25 110.092 210.89 109.786C212.688 108.779 212.859 106.008 211.74 104.247C211.206 103.403 210.451 102.71 209.999 101.817C209.548 100.923 209.513 99.6673 210.287 99.0491C211.867 97.7867 211.393 95.4465 211.469 93.4008C211.679 87.6781 211.651 81.9597 211.383 76.2456C211.303 75.0606 211.284 73.8721 211.326 72.685C211.437 70.6717 211.923 68.7005 212.41 66.7422L215.396 54.7012C214.615 53.4388 213.121 52.6361 211.709 52.2735C210.296 51.911 208.821 51.8042 207.428 51.3607C204.584 50.4544 202.032 48.1563 199.052 48.3699C198.826 48.374 198.604 48.4293 198.402 48.5317C197.732 48.9234 197.836 49.9139 197.795 50.7037C197.7 52.4548 196.443 53.9146 195.059 54.9407C193.675 55.9668 192.089 56.7112 190.816 57.8797C190.595 58.0505 190.413 58.2688 190.283 58.5194C190.153 58.7699 190.078 59.0465 190.064 59.3298V59.3298Z" fill="#3F3D56"/>
+<path d="M150.633 70.7524C149.974 71.1915 149.273 71.5613 148.542 71.8562C147.847 72.1378 147.104 72.3611 146.536 72.8531C146.254 73.1034 146.018 73.4025 145.837 73.7368C145.501 74.3489 145.331 75.0423 145.345 75.7447C145.359 76.4471 145.556 77.1328 145.917 77.7303C146.278 78.3277 146.789 78.8151 147.396 79.1414C148.003 79.4678 148.685 79.6212 149.37 79.5858C150.283 79.5372 151.145 79.1585 151.982 78.7863L159.002 75.6562C160.19 75.1286 161.473 74.5136 162.035 73.316C162.1 73.2039 162.124 73.0723 162.105 72.9438C162.05 72.8027 161.947 72.6873 161.814 72.6201C160.232 71.5656 158.848 70.228 157.729 68.6711C157.442 68.2698 157.097 67.3246 156.68 67.0819C155.195 66.237 151.824 69.9626 150.633 70.7524Z" fill="#FFC0C6"/>
+<path d="M225.673 68.2119L228.261 71.2416C228.817 71.889 229.373 72.5363 229.878 73.2355C231.122 74.9907 232.12 76.9159 232.842 78.955C233.404 80.4666 233.871 82.0785 233.676 83.684C233.544 84.5071 233.327 85.3134 233.028 86.089C232.554 87.58 231.965 89.0303 231.268 90.4263C230.686 91.4856 230.028 92.4993 229.3 93.4592C227.296 96.18 225.103 98.7491 222.738 101.147C221.853 102.043 221.474 103.497 221.098 104.707C220.387 106.944 218.697 108.689 217.064 110.339C216.539 110.908 215.957 111.42 215.329 111.867C214.389 112.489 213.289 112.809 212.17 112.786C211.682 112.789 211.198 112.687 210.752 112.485C209.633 111.942 209.064 110.618 208.948 109.355C208.844 108.208 209.031 107.053 209.491 106.002C210.976 102.632 214.789 101.173 217.484 98.7126C219.064 97.2722 220.274 95.4596 221.468 93.6696C222.277 92.5508 222.952 91.337 223.48 90.0541C224.081 88.4065 223.847 86.458 224.375 84.7878C224.596 84.0789 225.006 83.4412 225.231 82.7388C225.455 82.0364 225.531 81.2046 225.111 80.5993C224.796 80.2123 224.393 79.9101 223.939 79.7189C222.217 78.8255 220.29 77.6732 219.961 75.7214C219.829 74.6405 220.105 73.5489 220.732 72.669C221.355 71.8004 222.085 71.0172 222.902 70.3385C223.651 69.6458 224.918 68.8787 225.673 68.2119Z" fill="#FFC0C6"/>
+<path d="M148.971 74.9802C148.516 74.035 147.944 73.0704 147.021 72.6011C146.572 72.4027 146.089 72.3003 145.6 72.3003C145.111 72.3003 144.627 72.4027 144.178 72.6011C143.284 72.9971 142.447 73.5154 141.688 74.1418L139.458 75.8282C138.952 76.1682 138.505 76.5914 138.134 77.0809C137.78 77.6747 137.546 78.335 137.445 79.023C137.13 80.5993 136.874 82.221 137.095 83.8167C137.449 86.4062 138.965 88.6461 140.633 90.6141C141.676 91.8376 142.965 93.0741 144.551 93.1291C145.236 93.1518 145.998 92.8734 146.282 92.2357C146.381 91.9824 146.434 91.7124 146.437 91.4395C146.608 88.5652 145.603 85.7588 144.434 83.1402C144.118 82.4281 143.777 81.6901 143.802 80.9101C143.792 80.7776 143.826 80.6456 143.897 80.5346C143.997 80.4269 144.131 80.3592 144.276 80.3436C145.878 80.0199 148.639 81.2952 149.761 79.4729C150.487 78.2688 149.489 76.0516 148.971 74.9802Z" fill="#FFC0C6"/>
+<path d="M181.939 32.8945C181.92 32.6587 181.954 32.4214 182.041 32.2019C182.296 31.7358 182.966 31.8782 183.472 31.9947C185.503 32.5191 187.645 32.0433 189.74 32.1663C191.835 32.2893 194.188 33.3606 194.612 35.4646C196.13 34.361 197.439 32.9834 198.475 31.3991C199.057 30.5058 199.562 29.4862 199.483 28.418C199.369 26.8773 198.106 25.7249 196.956 24.7507L193.481 21.8375C193.024 21.4073 192.497 21.0632 191.923 20.8211C191.117 20.5395 190.242 20.6755 189.395 20.6755C186.868 20.6755 184.157 19.494 181.905 20.6755C180.957 21.1707 180.252 22.022 179.57 22.8506L176.461 26.6183C176.227 26.859 176.057 27.1563 175.965 27.4825C175.877 27.9422 176.107 28.3953 176.19 28.8582C176.335 29.6998 175.981 30.5996 176.253 31.4056C176.704 32.7489 178.297 32.9399 179.27 33.7102C179.63 33.9951 180.199 34.9694 180.632 34.9564C181.38 34.9402 181.911 33.516 181.939 32.8945Z" fill="#3F3D56"/>
+<path d="M160.803 60.8349C160.402 61.1017 160.05 61.438 159.761 61.8286C159.398 62.395 159.322 63.1233 159.009 63.706C158.339 64.9813 156.769 65.4377 155.793 66.4832C155.635 66.6261 155.524 66.8163 155.477 67.027C155.471 67.3117 155.564 67.5893 155.739 67.8103L160.459 75.4104C162.039 75.5528 163.536 74.5429 165.11 74.6788C165.694 74.7274 166.298 74.9346 166.86 74.7565C167.262 74.5731 167.639 74.337 167.981 74.0541C168.929 73.4456 170.168 73.3744 170.954 72.5749C171.741 71.7754 171.807 70.6004 171.798 69.5096C171.812 68.5629 171.718 67.6177 171.517 66.6936C170.822 63.7804 168.645 61.534 167.28 58.951C166.613 57.6919 166.253 56.9572 164.847 57.8214C163.441 58.6856 162.134 59.8379 160.803 60.8349Z" fill="#3F3D56"/>
+<path d="M218.116 56.9929C219.003 57.583 219.803 58.3002 220.492 59.1227C221.209 60.0711 221.617 61.2364 222.309 62.2074C223 63.1785 223.888 63.8776 224.647 64.7451C225.8 66.0593 226.58 67.6583 227.345 69.2475C225.473 71.7425 223.433 74.1003 221.241 76.3038C220.996 76.5985 220.674 76.8144 220.312 76.9253C220.067 76.9523 219.819 76.9165 219.591 76.821C219.362 76.7255 219.161 76.5734 219.004 76.3783C218.663 76.0158 218.423 75.5626 218.097 75.1839C217.331 74.3738 216.309 73.8681 215.213 73.7565C214.126 73.648 213.032 73.6318 211.943 73.7079C211.704 73.737 211.461 73.6954 211.245 73.5881C211.083 73.4746 210.953 73.3209 210.866 73.1415C209.602 70.9145 209.997 68.1179 210.448 65.5737L211.482 59.7474C211.632 58.635 211.922 57.5472 212.344 56.5106C212.736 55.6528 213.608 54.1963 214.688 54.4552C215.769 54.7141 217.203 56.3196 218.116 56.9929Z" fill="#3F3D56"/>
+<path d="M128.022 99.7029L106.257 104.264L105.761 104.215L86.6348 102.237V77.4044L110.048 73.3486L127.033 75.3781L127.039 75.4882V75.54L128.022 99.7029Z" fill="#4E0D4E"/>
+<path opacity="0.1" d="M128.022 99.7031L106.258 104.264L105.762 104.215V78.7575L127.04 75.4883L128.022 99.7031Z" fill="black"/>
+<path opacity="0.05" d="M127.039 75.54L127.033 75.5464L105.761 78.7574L86.6348 77.4044L110.049 73.3486L127.033 75.3781L127.039 75.4882V75.54Z" fill="black"/>
+<path d="M139.395 75.1034L117.63 79.6673L117.134 79.6155L98.0078 77.6378V52.8048L121.422 48.749L138.406 50.7785L138.412 50.8886V50.9404L139.395 75.1034Z" fill="#3F3D56"/>
+<path opacity="0.1" d="M139.395 75.103L117.631 79.6669L117.135 79.6151V54.1574L138.413 50.8882L139.395 75.103Z" fill="black"/>
+<path opacity="0.05" d="M138.412 50.9404L138.406 50.9468L117.134 54.1578L98.0078 52.8048L121.422 48.749L138.406 50.7785L138.412 50.8886V50.9404Z" fill="black"/>
+</g>
+<defs>
+<clipPath id="clip0">
+<rect width="300" height="227.76" fill="white" transform="translate(0 0.620117)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/desktop/src/onionshare/resources/images/mode_share.png b/desktop/src/onionshare/resources/images/mode_share.png
new file mode 100644
index 00000000..ec287db4
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_share.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_share.svg b/desktop/src/onionshare/resources/images/mode_share.svg
new file mode 100644
index 00000000..9fb97c65
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_share.svg
@@ -0,0 +1,63 @@
+<svg width="300" height="223" viewBox="0 0 300 223" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0)">
+<path d="M17.0615 222.435L12.1934 208.804C12.1934 208.804 17.5483 211.482 17.7917 214.889C17.7917 214.889 16.5747 197.851 14.1406 194.2C14.1406 194.2 18.0351 194.687 22.4165 213.672C22.4165 213.672 23.1467 191.766 16.5747 185.437C16.5747 185.437 25.5808 192.739 26.311 208.561V222.435H17.0615Z" fill="#F2F2F2"/>
+<path d="M181.446 222.233L184.654 213.249C184.654 213.249 181.125 215.014 180.965 217.26C180.965 217.26 181.767 206.03 183.371 203.624C183.371 203.624 180.804 203.944 177.916 216.458C177.916 216.458 177.435 202.019 181.767 197.848C181.767 197.848 175.831 202.661 175.35 213.089V222.233H181.446Z" fill="#F2F2F2"/>
+<path d="M130.086 222.234L127.541 215.109C127.541 215.109 130.34 216.508 130.467 218.29C130.467 218.29 129.831 209.383 128.559 207.475C128.559 207.475 130.595 207.729 132.885 217.653C132.885 217.653 133.267 206.202 129.831 202.894C129.831 202.894 134.539 206.711 134.921 214.981V222.234H130.086Z" fill="#F2F2F2"/>
+<path d="M127.255 173.583C125.971 173.583 124.68 173.541 123.409 173.46L123.45 172.82C124.709 172.9 125.987 172.941 127.251 172.941L127.289 172.941V173.582L127.259 173.583L127.255 173.583ZM131.171 173.455L131.129 172.815C132.402 172.732 133.688 172.606 134.952 172.441L135.035 173.077C133.758 173.244 132.458 173.371 131.171 173.455V173.455ZM119.544 173.087C118.264 172.921 116.975 172.711 115.712 172.462L115.836 171.832C117.085 172.079 118.361 172.287 119.627 172.451L119.544 173.087ZM138.867 172.446L138.742 171.817C139.992 171.569 141.251 171.276 142.482 170.946L142.648 171.566C141.403 171.899 140.131 172.195 138.867 172.446V172.446ZM111.929 171.586C110.685 171.255 109.435 170.877 108.211 170.463L108.417 169.856C109.627 170.265 110.864 170.639 112.094 170.966L111.929 171.586ZM146.364 170.438L146.158 169.83C147.362 169.422 148.569 168.967 149.746 168.478L149.992 169.071C148.802 169.564 147.581 170.025 146.364 170.438ZM104.57 169.095C103.38 168.603 102.188 168.063 101.029 167.491L101.312 166.916C102.459 167.481 103.638 168.015 104.816 168.503L104.57 169.095ZM153.524 167.467L153.239 166.891C154.382 166.326 155.52 165.716 156.622 165.079L156.943 165.634C155.83 166.279 154.679 166.895 153.524 167.467V167.467ZM97.6008 165.658C96.4839 165.013 95.3738 164.322 94.3013 163.605L94.6578 163.072C95.719 163.781 96.817 164.465 97.9217 165.103L97.6008 165.658ZM160.236 163.581L159.879 163.048C160.937 162.34 161.986 161.587 162.998 160.809L163.389 161.318C162.366 162.104 161.305 162.866 160.236 163.581V163.581ZM91.1435 161.341C90.1212 160.557 89.1109 159.728 88.1405 158.877L88.5635 158.395C89.5234 159.236 90.5229 160.056 91.5342 160.832L91.1435 161.341ZM166.39 158.853L165.966 158.371C166.924 157.53 167.867 156.646 168.769 155.744L169.223 156.198C168.311 157.109 167.358 158.003 166.39 158.853ZM85.3048 156.223C84.3922 155.312 83.4982 154.359 82.6479 153.391L83.1298 152.968C83.9712 153.925 84.8555 154.868 85.7582 155.769L85.3048 156.223ZM171.879 153.364L171.396 152.941C172.238 151.982 173.059 150.983 173.836 149.971L174.345 150.362C173.559 151.385 172.73 152.394 171.879 153.364ZM80.1811 150.393C79.3953 149.372 78.6329 148.311 77.9154 147.242L78.4484 146.884C79.1581 147.943 79.9123 148.992 80.6897 150.002L80.1811 150.393ZM176.611 147.206L176.078 146.849C176.788 145.788 177.472 144.69 178.111 143.586L178.666 143.908C178.02 145.024 177.329 146.133 176.611 147.206ZM75.8604 143.95C75.2138 142.834 74.5965 141.684 74.0258 140.531L74.6008 140.247C75.1654 141.387 75.7761 142.524 76.4156 143.628L75.8604 143.95ZM180.501 140.481L179.926 140.197C180.491 139.053 181.025 137.875 181.515 136.695L182.107 136.94C181.613 138.134 181.072 139.325 180.501 140.481V140.481ZM72.4196 137.001C71.9252 135.812 71.4641 134.591 71.0493 133.374L71.6568 133.167C72.067 134.371 72.523 135.578 73.0122 136.755L72.4196 137.001ZM183.478 133.301L182.87 133.095C183.28 131.886 183.654 130.65 183.983 129.418L184.603 129.584C184.27 130.829 183.892 132.079 183.478 133.301ZM69.9191 129.659C69.5847 128.414 69.2877 127.142 69.0359 125.877L69.6654 125.752C69.9142 127.003 70.2081 128.261 70.5388 129.492L69.9191 129.659ZM185.481 125.801L184.851 125.677C185.099 124.426 185.308 123.151 185.472 121.886L186.108 121.969C185.942 123.248 185.731 124.537 185.481 125.801ZM68.4035 122.047C68.2357 120.772 68.1075 119.472 68.0223 118.183L68.6628 118.141C68.7469 119.416 68.8738 120.702 69.0397 121.963L68.4035 122.047ZM186.485 118.105L185.844 118.063C185.926 116.796 185.968 115.504 185.968 114.225L185.967 114.072H186.609L186.609 114.222C186.609 115.518 186.567 116.823 186.485 118.105ZM68.5343 114.301H67.8926L67.8927 114.222C67.8927 112.958 67.933 111.678 68.0126 110.421L68.653 110.462C68.5744 111.706 68.5344 112.972 68.5344 114.225L68.5343 114.301ZM185.834 110.233C185.749 108.96 185.621 107.675 185.453 106.411L186.089 106.327C186.259 107.604 186.388 108.904 186.475 110.19L185.834 110.233ZM69.0199 106.638L68.3836 106.556C68.5484 105.278 68.758 103.988 69.0062 102.723L69.636 102.847C69.3903 104.098 69.183 105.373 69.0199 106.638ZM184.822 102.623C184.571 101.373 184.276 100.115 183.943 98.8837L184.563 98.7164C184.899 99.9615 185.198 101.233 185.451 102.497L184.822 102.623ZM70.4995 99.1043L69.8794 98.9395C70.2106 97.6928 70.5877 96.4418 71.0001 95.2213L71.6079 95.4266C71.2001 96.6337 70.8273 97.8711 70.4995 99.1043ZM182.821 95.2105C182.409 94.0054 181.951 92.7991 181.461 91.6249L182.053 91.3776C182.549 92.5649 183.011 93.7845 183.428 95.0028L182.821 95.2105ZM72.9583 91.8248L72.3651 91.5797C72.8577 90.3875 73.3966 89.1956 73.967 88.037L74.5426 88.3206C73.9785 89.4664 73.4453 90.6454 72.9583 91.8248ZM179.867 88.1349C179.303 86.9974 178.691 85.8606 178.048 84.7558L178.603 84.4333C179.253 85.5501 179.871 86.6995 180.442 87.8495L179.867 88.1349ZM76.3537 84.9283L75.7979 84.6077C76.4419 83.4911 77.1319 82.3805 77.8488 81.3069L78.3824 81.6631C77.6733 82.7253 76.9907 83.8239 76.3537 84.9283V84.9283ZM176.012 81.5019C175.3 80.4432 174.544 79.3952 173.766 78.3871L174.274 77.9951C175.061 79.0142 175.824 80.0736 176.544 81.1438L176.012 81.5019ZM80.6199 78.5379L80.1106 78.1475C80.8952 77.124 81.7237 76.113 82.573 75.1429L83.0558 75.5656C82.2156 76.5254 81.3961 77.5254 80.6199 78.5379V78.5379ZM171.322 75.4243C170.48 74.4688 169.595 73.5274 168.69 72.6261L169.143 72.1714C170.057 73.0824 170.953 74.0342 171.803 75L171.322 75.4243ZM85.6792 72.7585L85.2249 72.3054C86.1354 71.3926 87.0877 70.4981 88.0551 69.6467L88.479 70.1283C87.5219 70.9707 86.5799 71.8556 85.6792 72.7585V72.7585ZM165.881 70.0045C164.92 69.164 163.92 68.3451 162.908 67.5706L163.298 67.0611C164.321 67.8439 165.332 68.6718 166.304 69.5214L165.881 70.0045ZM91.4433 67.6863L91.0517 67.1781C92.0722 66.3916 93.1322 65.6287 94.2019 64.9103L94.5598 65.443C93.5015 66.1537 92.4529 66.9085 91.4433 67.6863V67.6863ZM159.781 65.3351C158.719 64.6272 157.62 63.9454 156.515 63.3084L156.835 62.7522C157.953 63.3963 159.064 64.0856 160.137 64.8011L159.781 65.3351ZM97.8149 63.4081L97.4927 62.8531C98.6059 62.2069 99.7555 61.5888 100.91 61.0162L101.195 61.5912C100.053 62.1575 98.9161 62.7688 97.8149 63.4081V63.4081ZM153.121 61.4995C151.975 60.936 150.796 60.4038 149.616 59.9173L149.861 59.3242C151.053 59.8158 152.246 60.354 153.404 60.9236L153.121 61.4995ZM104.686 60.0002L104.439 59.4079C105.628 58.9126 106.848 58.4508 108.065 58.0353L108.273 58.6425C107.069 59.0536 105.862 59.5105 104.686 60.0002ZM146.013 58.5692C144.805 58.162 143.567 57.7899 142.335 57.4633L142.499 56.8429C143.745 57.1731 144.996 57.5493 146.218 57.961L146.013 58.5692ZM111.947 57.5223L111.78 56.9026C113.024 56.5676 114.296 56.2698 115.56 56.0171L115.686 56.6463C114.435 56.8963 113.177 57.191 111.947 57.5224L111.947 57.5223ZM138.591 56.6022C137.342 56.3577 136.066 56.1513 134.8 55.9887L134.882 55.3523C136.161 55.5165 137.451 55.7252 138.715 55.9724L138.591 56.6022ZM119.475 56.0182L119.391 55.3821C120.666 55.2135 121.966 55.0844 123.255 54.9986L123.297 55.6389C122.022 55.7238 120.736 55.8515 119.475 56.0182V56.0182ZM130.976 55.6242C129.745 55.5471 128.491 55.5079 127.251 55.5079L127.137 55.5081V54.8664L127.25 54.8662C128.505 54.8662 129.772 54.9057 131.017 54.9837L130.976 55.6242Z" fill="#ABABAB"/>
+<path d="M222.227 118.716C220.944 118.716 219.653 118.675 218.382 118.594L218.422 117.954C219.681 118.034 220.96 118.075 222.224 118.075L222.262 118.074V118.716L222.232 118.716L222.227 118.716ZM226.144 118.589L226.102 117.948C227.374 117.865 228.661 117.739 229.924 117.574L230.008 118.21C228.73 118.378 227.43 118.505 226.144 118.589ZM214.517 118.221C213.237 118.055 211.948 117.845 210.684 117.596L210.808 116.966C212.058 117.212 213.334 117.42 214.599 117.584L214.517 118.221ZM233.839 117.58L233.714 116.951C234.965 116.703 236.223 116.41 237.455 116.08L237.621 116.7C236.376 117.033 235.103 117.329 233.839 117.58V117.58ZM206.901 116.72C205.658 116.389 204.407 116.011 203.184 115.597L203.39 114.989C204.6 115.399 205.837 115.772 207.067 116.1L206.901 116.72ZM241.337 115.572L241.131 114.964C242.334 114.555 243.541 114.1 244.718 113.612L244.965 114.204C243.774 114.698 242.554 115.158 241.337 115.572ZM199.543 114.229C198.352 113.737 197.161 113.197 196.001 112.625L196.285 112.05C197.432 112.615 198.611 113.149 199.788 113.636L199.543 114.229ZM248.496 112.6L248.212 112.025C249.355 111.46 250.493 110.85 251.594 110.213L251.916 110.768C250.802 111.413 249.652 112.029 248.496 112.6V112.6ZM192.574 110.792C191.457 110.147 190.346 109.456 189.274 108.739L189.631 108.206C190.692 108.915 191.79 109.598 192.894 110.236L192.574 110.792ZM255.209 108.715L254.852 108.182C255.91 107.474 256.959 106.721 257.971 105.943L258.362 106.452C257.339 107.238 256.278 107.999 255.209 108.715V108.715ZM186.116 106.475C185.094 105.69 184.084 104.861 183.113 104.011L183.536 103.528C184.496 104.37 185.496 105.19 186.507 105.966L186.116 106.475ZM261.362 103.987L260.939 103.504C261.897 102.663 262.84 101.78 263.742 100.878L264.196 101.332C263.284 102.243 262.331 103.136 261.362 103.987ZM180.277 101.357C179.365 100.446 178.471 99.4931 177.621 98.5252L178.102 98.1016C178.944 99.059 179.828 100.002 180.731 100.903L180.277 101.357ZM266.852 98.4977L266.369 98.0743C267.211 97.1154 268.032 96.1165 268.809 95.1052L269.318 95.4962C268.532 96.5185 267.702 97.5282 266.852 98.4977V98.4977ZM175.154 95.5269C174.368 94.5056 173.606 93.4453 172.888 92.3754L173.421 92.0179C174.131 93.0765 174.885 94.1254 175.662 95.1356L175.154 95.5269ZM271.584 92.3397L271.05 91.9828C271.76 90.9218 272.444 89.8242 273.083 88.72L273.638 89.0415C272.993 90.1576 272.301 91.2673 271.584 92.3397V92.3397ZM170.833 89.0835C170.186 87.968 169.569 86.8179 168.998 85.6652L169.573 85.3803C170.138 86.5206 170.749 87.6583 171.388 88.7617L170.833 89.0835ZM275.474 85.6149L274.898 85.3307C275.463 84.1871 275.998 83.0089 276.487 81.8285L277.08 82.0742C276.585 83.2675 276.045 84.4588 275.474 85.6149V85.6149ZM167.392 82.1346C166.898 80.9455 166.437 79.7253 166.022 78.5076L166.629 78.3008C167.04 79.505 167.496 80.7121 167.985 81.8884L167.392 82.1346ZM278.451 78.4343L277.843 78.2285C278.252 77.0202 278.627 75.7833 278.956 74.5519L279.576 74.7177C279.243 75.9624 278.865 77.2129 278.451 78.4343ZM164.892 74.7926C164.557 73.5477 164.26 72.2754 164.009 71.0112L164.638 70.8859C164.887 72.1364 165.181 73.3948 165.512 74.6262L164.892 74.7926ZM280.453 70.9349L279.824 70.8105C280.071 69.56 280.28 68.2847 280.445 67.0201L281.081 67.1032C280.915 68.3816 280.703 69.6708 280.453 70.9349ZM163.376 67.1804C163.208 65.9056 163.08 64.6057 162.995 63.3166L163.635 63.2743C163.72 64.5496 163.846 65.8356 164.012 67.0967L163.376 67.1804ZM281.457 63.2386L280.817 63.1973C280.899 61.9294 280.94 60.6378 280.94 59.3583L280.94 59.206H281.582L281.582 59.3563C281.582 60.6514 281.54 61.9569 281.457 63.2386V63.2386ZM163.507 59.4349H162.865L162.865 59.3562C162.865 58.0919 162.906 56.8123 162.985 55.5549L163.626 55.5953C163.547 56.8394 163.507 58.1054 163.507 59.3583L163.507 59.4349ZM280.807 55.3672C280.722 54.0942 280.593 52.8083 280.425 51.5453L281.061 51.4607C281.231 52.7377 281.361 54.0375 281.447 55.3242L280.807 55.3672ZM163.993 51.7718L163.356 51.6897C163.521 50.4113 163.731 49.1218 163.979 47.857L164.609 47.9808C164.363 49.2316 164.156 50.5072 163.993 51.7718ZM279.794 47.7566C279.544 46.5068 279.248 45.2489 278.916 44.0175L279.536 43.8502C279.872 45.0953 280.17 46.3671 280.423 47.6306L279.794 47.7566ZM165.472 44.2381L164.852 44.0733C165.183 42.8265 165.56 41.5756 165.973 40.3551L166.581 40.5603C166.173 41.7675 165.8 43.0048 165.472 44.2381ZM277.793 40.3443C277.381 39.1392 276.924 37.9329 276.433 36.7587L277.026 36.5114C277.521 37.6987 277.984 38.9183 278.4 40.1366L277.793 40.3443ZM167.931 36.9586L167.338 36.7135C167.83 35.5213 168.369 34.3294 168.94 33.1708L169.515 33.4544C168.951 34.6002 168.418 35.7792 167.931 36.9586ZM274.84 33.2687C274.275 32.1312 273.663 30.9944 273.021 29.8896L273.576 29.5671C274.225 30.6839 274.844 31.8333 275.415 32.9833L274.84 33.2687ZM171.326 30.062L170.771 29.7415C171.415 28.6249 172.105 27.5143 172.821 26.4407L173.355 26.7969C172.646 27.8591 171.963 28.9577 171.326 30.062ZM270.984 26.6357C270.272 25.577 269.517 24.529 268.739 23.5209L269.247 23.1289C270.033 24.148 270.797 25.2074 271.517 26.2776L270.984 26.6357ZM175.593 23.6717L175.083 23.2813C175.868 22.2578 176.696 21.2468 177.546 20.2767L178.028 20.6994C177.188 21.6592 176.369 22.6592 175.593 23.6717V23.6717ZM266.295 20.5581C265.453 19.6026 264.568 18.6612 263.663 17.7599L264.116 17.3052C265.03 18.2162 265.925 19.168 266.776 20.1338L266.295 20.5581ZM180.652 17.8922L180.198 17.4392C181.108 16.5264 182.06 15.6318 183.028 14.7805L183.452 15.2621C182.495 16.1045 181.553 16.9894 180.652 17.8922V17.8922ZM260.854 15.1383C259.893 14.2978 258.892 13.4789 257.88 12.7044L258.27 12.1949C259.293 12.9777 260.305 13.8056 261.276 14.6552L260.854 15.1383ZM186.416 12.8201L186.024 12.3119C187.045 11.5254 188.105 10.7624 189.175 10.0441L189.532 10.5768C188.474 11.2874 187.426 12.0423 186.416 12.8201V12.8201ZM254.754 10.4689C253.692 9.76103 252.593 9.07921 251.487 8.4422L251.807 7.88603C252.925 8.5301 254.036 9.21943 255.11 9.93493L254.754 10.4689ZM192.788 8.54184L192.465 7.98693C193.579 7.34067 194.728 6.72262 195.882 6.15L196.168 6.72497C195.026 7.29132 193.889 7.90264 192.788 8.54184V8.54184ZM248.094 6.63332C246.948 6.06979 245.768 5.5376 244.589 5.05113L244.833 4.45799C246.026 4.94961 247.218 5.48776 248.377 6.05741L248.094 6.63332ZM199.659 5.13401L199.412 4.54164C200.601 4.04642 201.821 3.58456 203.038 3.16908L203.245 3.77632C202.041 4.18742 200.835 4.64426 199.659 5.13401ZM240.986 3.70299C239.778 3.29582 238.54 2.92372 237.307 2.59707L237.472 1.97667C238.718 2.30692 239.969 2.68308 241.191 3.0948L240.986 3.70299ZM206.919 2.65614L206.753 2.03636C207.997 1.70138 209.269 1.40358 210.533 1.15087L210.659 1.78005C209.408 2.0301 208.15 2.3248 206.919 2.65615V2.65614ZM233.564 1.73603C232.314 1.49147 231.039 1.28514 229.773 1.12251L229.854 0.486128C231.134 0.650316 232.424 0.858999 233.688 1.10622L233.564 1.73603ZM214.448 1.15197L214.364 0.515897C215.638 0.347323 216.938 0.218227 218.228 0.132372L218.27 0.772676C216.995 0.857603 215.709 0.98528 214.448 1.15198V1.15197ZM225.949 0.757959C224.717 0.68088 223.464 0.641711 222.224 0.641711L222.109 0.641865V0.00015422L222.223 0C223.477 0 224.744 0.0394655 225.989 0.117501L225.949 0.757959Z" fill="#E6E6E6"/>
+<path d="M71.9124 43.7183H71.9124C63.019 43.7183 56.5446 49.7569 54.362 58.3782L51.6562 71.3118H53.5814L57.7525 60.7236L56.8744 71.3118H59.0359L60.6402 65.8573L60.3025 71.3118H86.3087V58.1145C86.3087 56.2239 85.9363 54.3519 85.2128 52.6053C84.4893 50.8587 83.4289 49.2716 82.0921 47.9348C80.7553 46.598 79.1682 45.5376 77.4216 44.8141C75.675 44.0906 73.803 43.7183 71.9124 43.7183V43.7183Z" fill="#2F2E41"/>
+<path d="M68.1811 60.5635C68.1811 60.5635 69.4645 68.264 66.256 69.5474C63.0474 70.8309 62.7266 70.8309 62.7266 70.8309L68.502 88.4779L75.5608 90.7239L83.2613 69.8683L79.7319 68.264C79.7319 68.264 76.2025 63.4512 77.4859 60.5635H68.1811Z" fill="#A0616A"/>
+<path d="M56.9514 121.205C56.9514 121.205 50.5343 128.906 52.1386 155.537L51.8177 163.237C51.8177 163.237 35.1332 206.553 46.0423 208.799C56.9514 211.045 57.914 212.649 58.8765 210.082C59.8391 207.515 75.2402 148.478 75.2402 148.478C75.2402 148.478 87.7536 209.761 93.8498 209.12C99.9461 208.478 107.967 210.403 107.647 205.59C107.326 200.777 99.9461 163.879 99.9461 163.879C99.9461 163.879 98.3418 119.922 89.9995 117.355C81.6573 114.788 64.6519 113.826 56.9514 121.205Z" fill="#2F2E41"/>
+<path d="M48.61 206.553L45.7223 213.932C45.7223 213.932 40.5886 220.991 43.7972 221.954C47.0057 222.916 51.4977 220.35 51.4977 220.35C51.4977 220.35 54.0645 210.724 54.0645 208.157L48.61 206.553Z" fill="#2F2E41"/>
+<path d="M101.871 206.553L104.758 213.932C104.758 213.932 109.892 220.991 106.683 221.954C103.475 222.916 98.9829 220.35 98.9829 220.35C98.9829 220.35 96.416 210.724 96.416 208.157L101.871 206.553Z" fill="#2F2E41"/>
+<path d="M72.3534 64.4134C76.7835 64.4134 80.3748 60.8221 80.3748 56.392C80.3748 51.9619 76.7835 48.3706 72.3534 48.3706C67.9233 48.3706 64.332 51.9619 64.332 56.392C64.332 60.8221 67.9233 64.4134 72.3534 64.4134Z" fill="#A0616A"/>
+<path d="M73.6367 82.3817C73.6367 82.3817 66.5778 79.1731 63.6901 69.8683L58.5565 71.4726C58.5565 71.4726 60.1607 81.74 59.1982 83.986C59.1982 83.986 57.9147 116.392 58.5565 117.034C59.1982 117.676 53.4228 123.13 55.3479 123.772C57.273 124.414 67.5404 122.81 66.257 120.884L64.9736 118.959L86.7917 119.28C86.7917 119.28 85.1875 123.772 89.6794 123.772C94.1714 123.772 91.6046 115.109 91.6046 115.109L88.7169 85.2694C88.7169 85.2694 85.5083 74.3603 86.4709 70.51L81.9789 68.9058C81.9789 68.9058 79.4121 78.2106 73.6367 82.3817Z" fill="#3F3D56"/>
+<path d="M66.9283 51.9787L66.6581 54.5456H73.9871L74.9497 52.6205L74.7472 54.5456H83.6128L77.5165 44.9199L64.0406 45.2408L60.832 54.5456H65.6449L66.9283 51.9787Z" fill="#2F2E41"/>
+<path d="M212.085 66.8198H128.342V114.306H212.085V66.8198Z" fill="#F2F2F2"/>
+<path d="M145.829 85.4294C150.082 85.4294 153.53 81.9817 153.53 77.7289C153.53 73.476 150.082 70.0283 145.829 70.0283C141.577 70.0283 138.129 73.476 138.129 77.7289C138.129 81.9817 141.577 85.4294 145.829 85.4294Z" fill="white"/>
+<path d="M202.3 76.4458H158.021V79.0126H202.3V76.4458Z" fill="white"/>
+<path d="M202.3 82.8628H158.021V85.4296H202.3V82.8628Z" fill="white"/>
+<path d="M202.3 89.2798H138.129V91.8466H202.3V89.2798Z" fill="white"/>
+<path d="M202.3 95.6963H138.129V98.2631H202.3V95.6963Z" fill="white"/>
+<path d="M202.3 102.114H138.129V104.681H202.3V102.114Z" fill="white"/>
+<path d="M202.3 108.531H138.129V111.098H202.3V108.531Z" fill="white"/>
+<path d="M182.056 114.627H128.021V66.499H212.407V85.4128H211.765V67.1407H128.663V113.986H182.056V114.627Z" fill="#3F3D56"/>
+<path d="M114.544 134.841H30.8008V182.328H114.544V134.841Z" fill="#F2F2F2"/>
+<path d="M84.8361 182.649H30.8008V134.521H115.186V153.435H114.544V135.163H31.4425V182.008H84.8361V182.649Z" fill="#3F3D56"/>
+<path d="M59.3571 71.3117C59.3571 71.3117 52.6192 70.9908 52.6192 76.4453C52.6192 81.8999 53.2609 99.2261 53.2609 99.2261L53.9026 104.681L53.5817 126.82C53.5817 126.82 47.4855 140.616 51.6566 140.937C55.8277 141.258 58.0737 128.424 58.0737 128.424L59.3571 116.873C59.3571 116.873 58.555 85.5897 59.5176 84.3063L59.3571 71.3117Z" fill="#A0616A"/>
+<path d="M86.3089 70.3497C86.3089 70.3497 93.0468 70.0289 93.0468 75.4834C93.0468 80.938 92.4051 98.2642 92.4051 98.2642L91.7634 103.719L92.0843 125.858C92.0843 125.858 98.1805 139.655 94.0094 139.975C89.8383 140.296 87.5923 127.462 87.5923 127.462L86.3089 115.911C86.3089 115.911 87.111 84.6278 86.1484 83.3444L86.3089 70.3497Z" fill="#A0616A"/>
+<path d="M215.936 50.7769L299.68 50.7769V3.29023L215.936 3.29023V50.7769Z" fill="#F2F2F2"/>
+<path d="M299.998 51.0981H245.963V50.4564H299.357V3.61144H216.255V21.8832H215.613V2.96973H299.998V51.0981Z" fill="#3F3D56"/>
+<path d="M290.054 8.42432H225.883V10.9912H290.054V8.42432Z" fill="white"/>
+<path d="M290.054 14.1997H225.883V16.7666H290.054V14.1997Z" fill="white"/>
+<path d="M290.054 19.9751H225.883V22.5419H290.054V19.9751Z" fill="white"/>
+<path d="M290.054 25.75H225.883V28.3168H290.054V25.75Z" fill="white"/>
+<path d="M290.054 31.5254H225.883V34.0922H290.054V31.5254Z" fill="white"/>
+<path d="M290.055 38.585H276.258V45.9646H290.055V38.585Z" fill="white"/>
+<path d="M256.364 221.793H0V222.435H256.364V221.793Z" fill="#2F2E41"/>
+<path d="M210.804 119.119C214.348 119.119 217.221 116.246 217.221 112.702C217.221 109.158 214.348 106.285 210.804 106.285C207.26 106.285 204.387 109.158 204.387 112.702C204.387 116.246 207.26 119.119 210.804 119.119Z" fill="#4E064F"/>
+<path d="M215.128 112.284H211.221V108.377H210.385V112.284H206.479V113.121H210.385V117.027H211.221V113.121H215.128V112.284Z" fill="white"/>
+<path d="M214.331 56.2317C217.875 56.2317 220.748 53.3586 220.748 49.8146C220.748 46.2705 217.875 43.3975 214.331 43.3975C210.787 43.3975 207.914 46.2705 207.914 49.8146C207.914 53.3586 210.787 56.2317 214.331 56.2317Z" fill="#4E064F"/>
+<path d="M218.657 49.3963H214.751V45.4902H213.914V49.3963H210.008V50.2334H213.914V54.1395H214.751V50.2334H218.657V49.3963Z" fill="white"/>
+<g clip-path="url(#clip1)">
+<path d="M62.4185 148.419C56.5606 154.277 56.5606 163.775 62.4185 169.632C68.2763 175.49 77.7738 175.49 83.6317 169.632C89.4895 163.775 89.4895 154.277 83.6317 148.419C77.7738 142.561 68.2763 142.561 62.4185 148.419Z" fill="#4E064F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M65.8148 151.817C69.7947 147.837 76.2474 147.837 80.2273 151.817C84.2072 155.797 84.2072 162.25 80.2273 166.23C76.2474 170.21 69.7947 170.21 65.8148 166.23C61.8349 162.25 61.8349 155.797 65.8148 151.817ZM68.6973 154.7C66.3094 157.088 66.3094 160.959 68.6973 163.347C71.0853 165.735 74.9569 165.735 77.3448 163.347C79.7328 160.959 79.7328 157.088 77.3448 154.7C74.9569 152.312 71.0853 152.312 68.6973 154.7Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M85.9941 160.945L80.7096 166.229L76.3858 161.906L81.6704 156.621L85.9941 160.945Z" fill="#4E064F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M69.6582 155.66L64.6138 160.705L60.2901 156.381L65.3345 151.336L69.6582 155.66Z" fill="#4E064F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M67.2578 153.739L63.4145 157.582L61.2526 155.42L65.0959 151.577L67.2578 153.739Z" fill="#4E064F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M85.5137 161.906L81.6703 165.749L79.5085 163.587L83.3518 159.744L85.5137 161.906Z" fill="#4E064F"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M69.2258 160.173L65.3207 156.267C65.1889 156.136 64.9752 156.136 64.8434 156.267L60.9995 160.111C60.8677 160.243 60.8677 160.457 60.9995 160.589C61.0622 160.651 61.1469 160.687 61.2355 160.687L68.9845 160.749C69.1709 160.75 69.3232 160.6 69.3246 160.414C69.3253 160.323 69.2897 160.237 69.2258 160.173Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M76.5398 156.894L80.4449 160.799C80.5767 160.931 80.7904 160.931 80.9222 160.799L84.7661 156.956C84.8979 156.824 84.8979 156.61 84.7661 156.478C84.7035 156.416 84.6187 156.38 84.5301 156.379L76.7812 156.318C76.5948 156.317 76.4425 156.467 76.441 156.653C76.4403 156.743 76.4759 156.83 76.5398 156.894Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M66.2953 151.815L68.7005 154.221C68.8323 154.352 68.8323 154.566 68.7005 154.698L68.6974 154.701C68.5656 154.833 68.3519 154.833 68.2201 154.701L65.8149 152.296C65.6831 152.164 65.6831 151.95 65.8149 151.818L65.818 151.815C65.9498 151.684 66.1635 151.684 66.2953 151.815Z" fill="white"/>
+<path fill-rule="evenodd" clip-rule="evenodd" d="M78.0648 163.105L80.47 165.511C80.6018 165.642 80.6018 165.856 80.47 165.988L80.4669 165.991C80.3351 166.123 80.1214 166.123 79.9896 165.991L77.5844 163.586C77.4526 163.454 77.4526 163.24 77.5844 163.108L77.5875 163.105C77.7193 162.974 77.933 162.974 78.0648 163.105Z" fill="white"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0">
+<rect width="300" height="222.435" fill="white"/>
+</clipPath>
+<clipPath id="clip1">
+<rect width="30" height="30" fill="white" transform="translate(58 144)"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/desktop/src/onionshare/resources/images/mode_website.png b/desktop/src/onionshare/resources/images/mode_website.png
new file mode 100644
index 00000000..37a556d9
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_website.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/images/mode_website.svg b/desktop/src/onionshare/resources/images/mode_website.svg
new file mode 100644
index 00000000..1a80846f
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/mode_website.svg
@@ -0,0 +1,35 @@
+<svg width="300" height="205" viewBox="0 0 300 205" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0)">
+<path d="M127.628 49.6012C125.191 58.6086 116.845 64.1872 116.845 64.1872C116.845 64.1872 112.45 55.1618 114.886 46.1543C117.323 37.1469 125.669 31.5684 125.669 31.5684C125.669 31.5684 130.065 40.5938 127.628 49.6012Z" fill="#4E0D4E"/>
+<path d="M105.462 49.6012C107.899 58.6086 116.245 64.1872 116.245 64.1872C116.245 64.1872 120.641 55.1618 118.204 46.1543C115.767 37.1469 107.421 31.5684 107.421 31.5684C107.421 31.5684 103.026 40.5938 105.462 49.6012Z" fill="#3A0A3A"/>
+<path d="M109.042 47.6655C115.729 54.1743 116.545 64.1799 116.545 64.1799C116.545 64.1799 106.521 63.6326 99.835 57.1238C93.1487 50.615 92.332 40.6094 92.332 40.6094C92.332 40.6094 102.356 41.1567 109.042 47.6655Z" fill="#3F3D56"/>
+<path d="M124.048 47.6655C117.362 54.1743 116.545 64.1799 116.545 64.1799C116.545 64.1799 126.569 63.6326 133.255 57.1238C139.941 50.615 140.758 40.6094 140.758 40.6094C140.758 40.6094 130.734 41.1567 124.048 47.6655Z" fill="#3F3D56"/>
+<path d="M284.522 182.496C286.089 188.289 291.457 191.877 291.457 191.877C291.457 191.877 294.284 186.072 292.717 180.279C291.15 174.486 285.782 170.898 285.782 170.898C285.782 170.898 282.955 176.703 284.522 182.496Z" fill="#6C63FF"/>
+<path d="M286.825 181.251C291.126 185.437 291.651 191.872 291.651 191.872C291.651 191.872 285.204 191.52 280.904 187.334C276.603 183.148 276.078 176.713 276.078 176.713C276.078 176.713 282.525 177.065 286.825 181.251Z" fill="#3F3D56"/>
+<path opacity="0.75" d="M33.6035 61.6396V191.798H199.487V61.6396H33.6035ZM142.504 127.593C142.504 128.769 142.434 129.944 142.294 131.112L141.571 131.025C141.434 132.164 141.228 133.293 140.955 134.407L141.663 134.581C141.382 135.724 141.032 136.85 140.614 137.951L139.933 137.692C139.526 138.765 139.054 139.812 138.52 140.828L139.165 141.167C138.617 142.209 138.007 143.216 137.337 144.184L136.738 143.77C136.085 144.714 135.377 145.617 134.616 146.476L135.161 146.959C134.381 147.839 133.548 148.672 132.668 149.452L132.185 148.907C131.327 149.668 130.424 150.377 129.481 151.029L129.895 151.628C128.928 152.297 127.921 152.907 126.881 153.455L126.541 152.811C125.526 153.345 124.48 153.817 123.407 154.224L123.666 154.906C122.566 155.323 121.441 155.674 120.299 155.955L120.125 155.247C119.011 155.522 117.882 155.728 116.743 155.865L116.83 156.588C115.662 156.729 114.488 156.799 113.312 156.8L113.311 156.073L113.297 156.073C112.155 156.073 111.014 156.004 109.879 155.868L109.793 156.592C108.625 156.452 107.466 156.241 106.324 155.962L106.497 155.254C105.382 154.981 104.285 154.64 103.212 154.233L102.953 154.915C101.853 154.498 100.778 154.014 99.736 153.467L100.075 152.822C99.059 152.288 98.0764 151.694 97.1323 151.042L96.7181 151.641C95.7503 150.972 94.8234 150.246 93.9423 149.467L94.4256 148.921C93.5668 148.16 92.7544 147.349 91.9929 146.491L91.4478 146.975C90.6673 146.095 89.9401 145.17 89.2701 144.203L89.8693 143.788C89.2165 142.845 88.6211 141.864 88.0866 140.849L87.4418 141.189C86.8935 140.148 86.4088 139.075 85.9902 137.975L86.6713 137.716C86.2634 136.644 85.9213 135.548 85.6466 134.434L84.9391 134.609C84.6577 133.466 84.4457 132.308 84.3042 131.14L85.0271 131.053C84.8884 129.909 84.8184 128.759 84.8177 127.607L84.0907 127.621L84.091 127.582C84.0913 126.419 84.1602 125.258 84.2974 124.103L85.0208 124.189C85.1565 123.05 85.3611 121.92 85.6335 120.806L84.9255 120.633C85.2053 119.489 85.5543 118.364 85.9707 117.262L86.6523 117.52C87.0584 116.447 87.5293 115.399 88.0624 114.383L87.4171 114.044C87.9641 113.002 88.5733 111.994 89.2415 111.025L89.8413 111.439C90.4929 110.495 91.2007 109.591 91.9609 108.732L91.4151 108.249C92.1945 107.368 93.0261 106.534 93.9052 105.753L94.3893 106.298C95.2467 105.536 96.1491 104.826 97.0917 104.173L96.6764 103.574C97.643 102.904 98.649 102.293 99.6889 101.744L100.029 102.389C101.044 101.853 102.09 101.38 103.162 100.972L102.902 100.291C104.002 99.8719 105.126 99.5205 106.268 99.2383L106.443 99.9457C107.557 99.6704 108.686 99.463 109.824 99.3244L109.737 98.6016C110.904 98.46 112.079 98.3882 113.255 98.3867L113.256 99.1138C113.27 99.1138 113.284 99.1133 113.297 99.1133C114.431 99.1137 115.563 99.181 116.688 99.315L116.774 98.5914C117.942 98.7302 119.101 98.9393 120.244 99.2176L120.071 99.9259C121.186 100.198 122.284 100.538 123.358 100.943L123.615 100.261C124.716 100.677 125.791 101.16 126.834 101.706L126.496 102.352C127.512 102.884 128.495 103.478 129.44 104.129L129.854 103.529C130.822 104.197 131.75 104.922 132.631 105.701L132.149 106.247C133.008 107.007 133.821 107.818 134.584 108.675L135.128 108.19C135.91 109.069 136.638 109.994 137.309 110.96L136.71 111.376C137.364 112.318 137.96 113.299 138.495 114.312L139.14 113.972C139.689 115.013 140.175 116.085 140.595 117.185L139.914 117.445C140.323 118.516 140.666 119.612 140.942 120.725L141.649 120.55C141.932 121.692 142.145 122.85 142.287 124.018L141.565 124.106C141.704 125.245 141.775 126.391 141.777 127.538H142.504L142.504 127.593Z" fill="#EFEFEF"/>
+<path d="M40.989 71.1362C42.5945 71.1362 43.896 69.8347 43.896 68.2292C43.896 66.6238 42.5945 65.3223 40.989 65.3223C39.3835 65.3223 38.082 66.6238 38.082 68.2292C38.082 69.8347 39.3835 71.1362 40.989 71.1362Z" fill="#6C63FF"/>
+<path d="M50.0007 71.1362C51.6062 71.1362 52.9077 69.8347 52.9077 68.2292C52.9077 66.6238 51.6062 65.3223 50.0007 65.3223C48.3952 65.3223 47.0938 66.6238 47.0938 68.2292C47.0938 69.8347 48.3952 71.1362 50.0007 71.1362Z" fill="#6C63FF"/>
+<path d="M59.0124 71.1362C60.6179 71.1362 61.9194 69.8347 61.9194 68.2292C61.9194 66.6238 60.6179 65.3223 59.0124 65.3223C57.407 65.3223 56.1055 66.6238 56.1055 68.2292C56.1055 69.8347 57.407 71.1362 59.0124 71.1362Z" fill="#6C63FF"/>
+<path d="M191.57 74.334H40.9883V74.9154H191.57V74.334Z" fill="white"/>
+<path d="M141.863 167.648H84.0137V168.229H141.863V167.648Z" fill="#E6E6E6"/>
+<path d="M141.863 173.752H84.0137V174.334H141.863V173.752Z" fill="#E6E6E6"/>
+<path d="M141.863 179.857H84.0137V180.439H141.863V179.857Z" fill="#E6E6E6"/>
+<path d="M300 191.485H0V192.067H300V191.485Z" fill="#3F3D56"/>
+<path d="M222.491 57.4082C216.759 57.4082 212.111 62.5656 212.111 68.9276V77.0106H214.597L216.036 74.0158L215.677 77.0106H231.655L232.964 74.288L232.637 77.0106H234.436V70.664C234.436 63.343 229.088 57.4082 222.491 57.4082Z" fill="#2F2E41"/>
+<path d="M222.568 178.602L227.315 191.343L233.061 194.341L228.564 178.602H222.568Z" fill="#FFB8B8"/>
+<path d="M248.801 179.601L256.046 194.34L259.793 192.092L254.297 177.103L248.801 179.601Z" fill="#FFB8B8"/>
+<path d="M220.819 74.6747C224.683 74.6747 227.814 71.5429 227.814 67.6796C227.814 63.8164 224.683 60.6846 220.819 60.6846C216.956 60.6846 213.824 63.8164 213.824 67.6796C213.824 71.5429 216.956 74.6747 220.819 74.6747Z" fill="#FFB8B8"/>
+<path d="M219.82 73.1758C219.82 73.1758 222.319 79.6712 220.82 81.42C219.321 83.1688 230.313 78.6719 230.313 78.6719C230.313 78.6719 225.566 72.926 225.816 70.4277L219.82 73.1758Z" fill="#FFB8B8"/>
+<path d="M228.566 78.1724L232.313 77.4229L236.061 72.9261C236.061 72.9261 237.81 66.6805 240.058 64.9317V64.1822C240.058 64.1822 228.566 56.6875 225.068 56.9373C225.068 56.9373 213.327 60.4349 215.575 56.9373C216.208 55.9536 217.294 55.1676 218.53 54.5458C220.305 53.6725 222.24 53.1716 224.216 53.0739C226.191 52.9761 228.166 53.2836 230.019 53.9773L246.304 59.9352C246.668 60.8135 246.834 61.7613 246.791 62.7111C246.748 63.661 246.496 64.5897 246.054 65.4314C244.555 68.4293 239.308 83.9184 239.308 83.9184C238.07 86.4319 236.986 89.0182 236.061 91.6629C234.812 95.4103 233.812 97.9085 233.812 97.9085L212.577 97.6587L214.326 89.9141C214.326 89.9141 212.577 86.6664 210.079 86.4166C210.079 86.4166 192.092 79.4215 191.342 75.1745C191.342 75.1745 191.092 73.6756 192.092 72.9261C193.091 72.1766 204.333 59.9352 204.333 59.9352C204.333 59.9352 209.33 53.4398 211.828 55.4384C214.326 57.437 207.331 62.4335 207.331 62.4335C207.331 62.4335 200.086 73.4257 199.087 74.1752C199.087 74.1752 206.082 78.4222 208.08 78.9219C210.079 79.4215 214.826 78.9219 217.074 80.9205C218.074 81.1966 219.118 81.2725 220.147 81.1439C221.176 81.0153 222.169 80.6846 223.07 80.171C226.068 78.4222 228.566 78.1724 228.566 78.1724Z" fill="#FFB8B8"/>
+<path d="M218.071 79.9207L214.324 89.9137C214.324 89.9137 211.076 92.9116 212.325 99.9067C212.325 99.9067 212.825 106.402 211.326 108.401C209.827 110.399 189.092 133.133 208.828 181.1C208.828 181.1 222.069 178.601 232.061 182.848C242.054 187.095 258.543 178.351 258.543 178.351L232.561 114.396C232.561 114.396 231.812 101.156 236.059 95.16L233.311 92.9116C233.311 92.9116 230.063 84.9172 230.563 82.419C230.563 82.419 231.562 77.4225 232.061 76.9229H230.063L227.315 83.4183C227.315 83.4183 222.818 91.9123 219.071 91.1628C215.323 90.4134 218.321 85.167 218.321 85.167L219.57 80.1706L218.071 79.9207Z" fill="#2F2E41"/>
+<path d="M233.062 192.092C233.062 192.092 227.387 189.771 226.977 190.432C226.567 191.093 224.568 195.09 224.568 195.09C224.568 195.09 216.823 203.085 223.069 204.084C229.315 205.083 230.064 201.586 230.064 201.586C230.064 201.586 230.314 201.336 231.313 201.336C232.312 201.336 236.31 199.837 236.06 199.087C235.81 198.338 233.062 192.092 233.062 192.092Z" fill="#2F2E41"/>
+<path d="M260.044 190.343C260.044 190.343 254.797 191.592 254.547 192.592C254.298 193.591 252.549 200.336 254.048 200.836C255.547 201.336 257.795 202.085 258.545 201.835C259.294 201.585 261.043 205.083 264.79 204.333C268.538 203.584 270.286 203.084 270.037 202.834C269.787 202.585 268.787 198.837 265.79 197.338C262.792 195.839 260.044 190.343 260.044 190.343Z" fill="#2F2E41"/>
+<path d="M225.442 60.5811C224.942 59.9103 224.295 59.3637 223.55 58.9836C222.805 58.6034 221.983 58.4 221.146 58.3892H220.943C217.013 58.3892 213.828 61.9446 213.828 66.3305V66.3305H215.145L215.357 64.7121L215.669 66.3305H223.478L224.132 64.9613L223.968 66.3305H225.504C226.221 69.8904 225.191 73.4503 222.414 77.0102H225.031L226.34 74.2718L226.013 77.0102H231.001L231.982 70.7119C231.982 65.995 229.241 61.9952 225.442 60.5811Z" fill="#2F2E41"/>
+<path d="M240.68 29.1514C240.68 29.1281 240.681 29.105 240.681 29.0818C240.681 27.9627 240.615 26.8445 240.484 25.7331L241.316 25.6316C241.173 24.4639 240.96 23.3058 240.678 22.1637L239.881 22.3608C239.612 21.2492 239.276 20.1549 238.875 19.084L239.623 18.7984C239.204 17.6991 238.718 16.6262 238.169 15.5857L237.478 15.9505C236.949 14.9348 236.36 13.952 235.712 13.0074L236.337 12.5739C235.666 11.6079 234.938 10.6828 234.157 9.80379L233.604 10.2952C232.847 9.43341 232.039 8.61788 231.184 7.85299L231.66 7.31484C230.778 6.53596 229.85 5.81057 228.882 5.14256L228.486 5.71648C227.544 5.05857 226.563 4.45828 225.548 3.9189L225.862 3.31974C224.819 2.77368 223.745 2.29114 222.644 1.87477L222.411 2.4889C221.337 2.076 220.238 1.72914 219.121 1.45028L219.272 0.831211C218.129 0.552643 216.97 0.343465 215.802 0.204823L215.729 0.819308C214.586 0.67822 213.436 0.605936 212.284 0.602846L212.283 0C211.107 0.00166833 209.932 0.0734284 208.765 0.214898L208.836 0.800607C207.691 0.935307 206.555 1.13969 205.435 1.41261L205.296 0.851369C204.154 1.1339 203.03 1.48548 201.931 1.90415L202.133 2.43482C201.054 2.84286 200 3.31646 198.979 3.853L198.717 3.35765C197.677 3.90663 196.671 4.51766 195.705 5.18743L196.021 5.64363C195.072 6.30005 194.164 7.01329 193.301 7.77944L192.934 7.36639C192.055 8.14791 191.223 8.98138 190.443 9.8623L190.857 10.2282C190.093 11.093 189.381 12.0033 188.727 12.9541L188.27 12.6388C187.602 13.6076 186.992 14.6157 186.445 15.6578L186.941 15.9179C186.407 16.9411 185.936 17.996 185.53 19.0766L184.999 18.8758C184.583 19.9771 184.234 21.1028 183.954 22.2465L184.515 22.3838C184.245 23.5046 184.044 24.6408 183.912 25.7862L183.326 25.7164C183.188 26.8748 183.119 28.0403 183.119 29.2068V29.2343L183.723 29.2229C183.728 30.3784 183.803 31.5326 183.946 32.6792L183.333 32.7535C183.474 33.9214 183.686 35.0796 183.967 36.222L184.586 36.0696C184.868 37.1851 185.217 38.2824 185.632 39.3553L185.018 39.5889C185.437 40.6885 185.922 41.7617 186.47 42.8028L187.069 42.4873C187.61 43.5001 188.212 44.4791 188.872 45.4192L188.299 45.816C188.969 46.7827 189.696 47.7084 190.476 48.5883L191.014 48.1115C191.78 48.9647 192.598 49.7711 193.461 50.5263L192.971 51.0796C193.852 51.8596 194.779 52.5859 195.747 53.2548L196.179 52.6292C197.125 53.2746 198.11 53.8623 199.127 54.389L198.764 55.0806C199.807 55.6276 200.881 56.1112 201.982 56.5285L202.266 55.7793C203.338 56.1785 204.434 56.5121 205.547 56.7783L205.352 57.5752C206.495 57.8549 207.653 58.0653 208.821 58.2052L208.921 57.3727C210.01 57.4981 211.105 57.5613 212.201 57.5618C212.247 57.5618 212.293 57.5602 212.34 57.56L212.34 58.4134C213.516 58.4128 214.691 58.3421 215.859 58.2018L215.755 57.3414C216.887 57.2002 218.01 56.9908 219.117 56.7142L219.328 57.5687C220.47 57.2872 221.595 56.9367 222.695 56.5192L222.379 55.6872C223.444 55.2795 224.483 54.8078 225.491 54.2747L225.909 55.0691C226.95 54.5211 227.957 53.911 228.924 53.242L228.41 52.4998C229.347 51.8502 230.244 51.1451 231.096 50.3884L231.697 51.0658C232.577 50.2851 233.409 49.4525 234.19 48.5724L233.512 47.9721C234.269 47.1191 234.974 46.2216 235.624 45.2844L236.366 45.7977C237.035 44.8296 237.645 43.8221 238.193 42.7807L237.399 42.363C237.932 41.3541 238.403 40.3141 238.811 39.2484L239.643 39.564C240.06 38.4631 240.41 37.3379 240.691 36.1946L239.837 35.9848C240.113 34.8775 240.322 33.7545 240.462 32.622L241.323 32.7254C241.462 31.5577 241.533 30.3828 241.533 29.2068V29.1514L240.68 29.1514Z" fill="#F3F3F3"/>
+</g>
+<defs>
+<clipPath id="clip0">
+<rect width="300" height="204.439" fill="white"/>
+</clipPath>
+</defs>
+</svg>
diff --git a/share/images/open_folder.png b/desktop/src/onionshare/resources/images/open_folder.png
index 0a734c41..0a734c41 100644
--- a/share/images/open_folder.png
+++ b/desktop/src/onionshare/resources/images/open_folder.png
Binary files differ
diff --git a/share/images/persistent_enabled.png b/desktop/src/onionshare/resources/images/persistent_enabled.png
index 6c295db5..6c295db5 100644
--- a/share/images/persistent_enabled.png
+++ b/desktop/src/onionshare/resources/images/persistent_enabled.png
Binary files differ
diff --git a/share/images/receive_icon_toggle.png b/desktop/src/onionshare/resources/images/receive_icon_toggle.png
index 846ececb..846ececb 100644
--- a/share/images/receive_icon_toggle.png
+++ b/desktop/src/onionshare/resources/images/receive_icon_toggle.png
Binary files differ
diff --git a/share/images/receive_icon_toggle_selected.png b/desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png
index 127ce208..127ce208 100644
--- a/share/images/receive_icon_toggle_selected.png
+++ b/desktop/src/onionshare/resources/images/receive_icon_toggle_selected.png
Binary files differ
diff --git a/share/images/receive_icon_transparent.png b/desktop/src/onionshare/resources/images/receive_icon_transparent.png
index 99207097..99207097 100644
--- a/share/images/receive_icon_transparent.png
+++ b/desktop/src/onionshare/resources/images/receive_icon_transparent.png
Binary files differ
diff --git a/share/images/server_started.png b/desktop/src/onionshare/resources/images/server_started.png
index 9c0c3176..9c0c3176 100644
--- a/share/images/server_started.png
+++ b/desktop/src/onionshare/resources/images/server_started.png
Binary files differ
diff --git a/share/images/server_stopped.png b/desktop/src/onionshare/resources/images/server_stopped.png
index 5c5b2ec0..5c5b2ec0 100644
--- a/share/images/server_stopped.png
+++ b/desktop/src/onionshare/resources/images/server_stopped.png
Binary files differ
diff --git a/share/images/server_working.png b/desktop/src/onionshare/resources/images/server_working.png
index e5c8b318..e5c8b318 100644
--- a/share/images/server_working.png
+++ b/desktop/src/onionshare/resources/images/server_working.png
Binary files differ
diff --git a/share/images/settings.png b/desktop/src/onionshare/resources/images/settings.png
index b6f8fa55..b6f8fa55 100644
--- a/share/images/settings.png
+++ b/desktop/src/onionshare/resources/images/settings.png
Binary files differ
diff --git a/share/images/share_icon_toggle.png b/desktop/src/onionshare/resources/images/share_icon_toggle.png
index 87303c9f..87303c9f 100644
--- a/share/images/share_icon_toggle.png
+++ b/desktop/src/onionshare/resources/images/share_icon_toggle.png
Binary files differ
diff --git a/share/images/share_icon_toggle_selected.png b/desktop/src/onionshare/resources/images/share_icon_toggle_selected.png
index 0ba52cff..0ba52cff 100644
--- a/share/images/share_icon_toggle_selected.png
+++ b/desktop/src/onionshare/resources/images/share_icon_toggle_selected.png
Binary files differ
diff --git a/share/images/share_icon_transparent.png b/desktop/src/onionshare/resources/images/share_icon_transparent.png
index 3648c3fb..3648c3fb 100644
--- a/share/images/share_icon_transparent.png
+++ b/desktop/src/onionshare/resources/images/share_icon_transparent.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/locale/af.json b/desktop/src/onionshare/resources/locale/af.json
new file mode 100644
index 00000000..c9e641f5
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/af.json
@@ -0,0 +1,183 @@
+{
+ "preparing_files": "Pers lêers saam.",
+ "not_a_readable_file": "{0:s} is nie ’n leesbare lêer nie.",
+ "no_available_port": "Kon geen beskikbare poort vind om die uidiens te begin nie",
+ "other_page_loaded": "Adres gelaai",
+ "incorrect_password": "Verkeerde wagwoord",
+ "close_on_autostop_timer": "Gestop omdat outo-stoptydhouer afgeloop het",
+ "closing_automatically": "Gestop omdat die oordrag klaar is",
+ "large_filesize": "Waarskuwing: die stuur van ’n groot lêer kan ure duur",
+ "gui_drag_and_drop": "Sleep-en-los lêers en vouers\nom te begin deel",
+ "gui_add": "Voeg Toe",
+ "gui_add_files": "Voeg Lêers Toe",
+ "gui_add_folder": "Voeg Vouer Toe",
+ "gui_delete": "Skrap",
+ "gui_choose_items": "Kies",
+ "gui_share_start_server": "Begin deel",
+ "gui_share_stop_server": "Staak deel",
+ "gui_share_stop_server_autostop_timer": "Staak Deel ({})",
+ "gui_stop_server_autostop_timer_tooltip": "Outo-stoptydhouer eindig om {}",
+ "gui_start_server_autostart_timer_tooltip": "Outo-begintydhouer eindig om {}",
+ "gui_receive_start_server": "Begin Ontvangmodus",
+ "gui_receive_stop_server": "Staak Ontvangmodus",
+ "gui_receive_stop_server_autostop_timer": "Staak Ontvangmodus ({} oorblywend)",
+ "gui_copy_url": "Kopieer Adres",
+ "gui_copy_hidservauth": "Kopieer HidServAuth",
+ "gui_canceled": "Gekanselleer",
+ "gui_copied_url_title": "OnionShare-adres Gekopieer",
+ "gui_copied_url": "OnionShare-adres na knipbord gekopieer",
+ "gui_copied_hidservauth_title": "HidServAuth Gekopieer",
+ "gui_copied_hidservauth": "HidServAuth-reël na knipbord gekopieer",
+ "gui_waiting_to_start": "Geskeduleer om oor {} te begin. Klik om te kanselleer.",
+ "gui_please_wait": "Begin… Klik om te kanselleer.",
+ "gui_quit_title": "Nie so haastig nie",
+ "gui_share_quit_warning": "U is besig om lêers te verstuur. Is u seker u wil OnionShare afsluit?",
+ "gui_receive_quit_warning": "U is besig om lêers te ontvang. Is u seker u wil OnionShare afsluit?",
+ "gui_quit_warning_quit": "Sluit Af",
+ "gui_quit_warning_dont_quit": "Kanselleer",
+ "error_rate_limit": "Iemand het te veel verkeerde raaiskote met u wagwoord probeer, daarom het OnionShare die bediener gestaak. Begin weer deel en stuur ’n nuwe adres aan die ontvanger.",
+ "zip_progress_bar_format": "Samepersing: %p%",
+ "error_stealth_not_supported": "U benodig ten minste Tor 0.2.6.1-alfa (of TorBrowser 6.5) en python3-stem 1.5.0 om kliënt-magtiging te gebruik.",
+ "error_ephemeral_not_supported": "OnionShare vereis ten minste Tor 0.2.7.1 en python3-stem 1.4.0.",
+ "gui_settings_window_title": "Instellings",
+ "gui_settings_whats_this": "<a href='{0:s}'>Wat is dit?</a>",
+ "gui_settings_stealth_option": "Gebruik kliëntmagtiging",
+ "gui_settings_stealth_hidservauth_string": "Deur u privaat sleutel vir herbruik bewaar te hê kan u nou klik om u HidServAuth te kopieer.",
+ "gui_settings_autoupdate_label": "Soek na nuwe weergawe",
+ "gui_settings_autoupdate_option": "Laat my weet wanneer ’n nuwe weergawe beskikbaar is",
+ "gui_settings_autoupdate_timestamp": "Laas gesoek: {}",
+ "gui_settings_autoupdate_timestamp_never": "Nooit",
+ "gui_settings_autoupdate_check_button": "Soek na Nuwe Weergawe",
+ "gui_settings_general_label": "Algemene instellings",
+ "gui_settings_onion_label": "Ui-instellings",
+ "gui_settings_sharing_label": "Deelinstellings",
+ "gui_settings_close_after_first_download_option": "Staak deel nadat lêers verstuur is",
+ "gui_settings_csp_header_disabled_option": "Deaktiveer Inhoudsekuriteitsbeleidkop",
+ "gui_settings_individual_downloads_label": "Merk af om aflaai van individuele lêers toe te staan",
+ "gui_settings_connection_type_label": "Hoe moet OnionShare aan Tor koppel?",
+ "gui_settings_connection_type_bundled_option": "Gebruik die Tor-weergawe wat by OnionShare ingebou is",
+ "gui_settings_connection_type_automatic_option": "Probeer outo-opstelling met Tor Browser",
+ "gui_settings_connection_type_control_port_option": "Koppel d.m.v. kontrolepoort",
+ "gui_settings_connection_type_socket_file_option": "Koppel d.m.v. soklêer",
+ "gui_settings_connection_type_test_button": "Toets Tor-koppeling",
+ "gui_settings_control_port_label": "Kontrolepoort",
+ "gui_settings_socket_file_label": "Soklêer",
+ "gui_settings_socks_label": "SOCKS-poort",
+ "gui_settings_authenticate_label": "Tormagtiginginstellings",
+ "gui_settings_authenticate_no_auth_option": "Geen magtiging of koekiemagtiging",
+ "gui_settings_authenticate_password_option": "Wagwoord",
+ "gui_settings_password_label": "Wagwoord",
+ "gui_settings_tor_bridges": "Tor-brugondersteuning",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Moenie brûe gebruik nie",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Gebruik ingeboude obfs4-inpropbare vervoere",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gebruik ingeboude obfs4-inpropbare vervoere (vereis obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingeboude meek_lite (Azure)-inpropbare vervoere (vereis obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Waarskuwing: Die meek_lite-brûe is baie duur vir die Tor-projek om uit te voer.<br><br>Gebruik dit slegs indien u nie direk aan Tor, d.m.v. obfs4-vervoere, of ander normale brûe kan koppel nie.",
+ "gui_settings_tor_bridges_custom_radio_option": "Gebruik pasgemaakte brûe",
+ "gui_settings_tor_bridges_custom_label": "U kan brûe vanaf <a href=\"https://bridges.torproject.org/options?lang=af\">https://bridges.torproject.org</a> verkry",
+ "gui_settings_tor_bridges_invalid": "Geen van u toegevoegde brûe werk nie.\nGaan dit na of voeg ander toe.",
+ "gui_settings_button_save": "Bewaar",
+ "gui_settings_button_cancel": "Kanselleer",
+ "gui_settings_button_help": "Help",
+ "gui_settings_autostop_timer_checkbox": "Gebruik outo-stoptydhouer",
+ "gui_settings_autostop_timer": "Staak die deel om:",
+ "gui_settings_autostart_timer_checkbox": "Gebruik outo-begintydhouer",
+ "gui_settings_autostart_timer": "Begin die deel om:",
+ "settings_error_unknown": "Kan nie aan Tor-kontroleur koppel nie omdat u instellings onsinnig is.",
+ "settings_error_automatic": "Kon nie aan die Tor-kontroleur koppel nie. Loop Tor Browser (beskikbaar by torproject.org) in die agtergrond?",
+ "settings_error_socket_port": "Kan nie aan die Tor-kontroleur by {}:{} koppel nie .",
+ "settings_error_socket_file": "Kan nie aan die Tor-kontroleur d.m.v. soklêer {} koppel nie.",
+ "settings_error_auth": "Gekoppel aan {}:{} maar kan nie magtig nie. Miskien is die nie ’n Tor-kontroleur nie?",
+ "settings_error_missing_password": "Gekoppel aan Tor-kontroleur, maar dit vereis ’n wagwoord om te magtig.",
+ "settings_error_unreadable_cookie_file": "Gekoppel aan die Tor-kontroleur, maar wagwoord is dalk verkeerd of u gebruiker mag nie die koekielêer lees nie.",
+ "settings_error_bundled_tor_not_supported": "Die Tor-weergawe wat met OnionShare verskeep word werk nie in ontwikkelaarsmodus op Windows of macOS nie.",
+ "settings_error_bundled_tor_timeout": "Vat te lank om aan Tor te koppel. Miskien is u nie aan die Internet gekoppel nie of u stelselhorlosie is onakkuraat?",
+ "settings_error_bundled_tor_broken": "OnionShare kon nie in die agtergrond aan Tor koppel nie:\n{}",
+ "settings_test_success": "Gekoppel aan die Tor-kontroleur:\n\nTor-weergawe: {}\nSteun efemere uidienste: {}.\nSteun kliëntmagtiging: {}.\nSteun nuwegenerasie-.onionadresse: {}.",
+ "error_tor_protocol_error": "Daar was ’n fout met Tor: {}",
+ "error_tor_protocol_error_unknown": "Daar was ’n onbekende fout met Tor",
+ "connecting_to_tor": "Koppel tans aan die Tor-netwerk",
+ "update_available": "Nuwe OnionShare is beskikbaar. <a href='{}'>Klik hier</a> om dit te kry.<br><br>U gebruik {} en die nuutste is {}.",
+ "update_error_check_error": "Kon nie na nuwe weergawe soek nie: die OnionShare-webwerf sê dat die nuutste weergawe die onherkenbare ‘{}’ is…",
+ "update_error_invalid_latest_version": "Kon nie na die nuwe weergawe soek nie. U is dalk nie aan Tor gekoppel nie of die OnionShare-webwerf is vanlyn.",
+ "update_not_available": "U gebruik die nuutste OnionShare.",
+ "gui_tor_connection_ask": "Open die instellings om Tor-koppeling op te los?",
+ "gui_tor_connection_ask_open_settings": "Ja",
+ "gui_tor_connection_ask_quit": "Sluit Af",
+ "gui_tor_connection_error_settings": "Probeer in die instellings verander hoe OnionShare aan die Tor-netwerk koppel.",
+ "gui_tor_connection_canceled": "Kon nie aan Tor koppel nie.\n\nMaak seker u is aan die Internet gekoppel, open OnionShare dan weer en stel die Tor-koppeling weer op.",
+ "gui_tor_connection_lost": "Ontkoppel van Tor.",
+ "gui_server_started_after_autostop_timer": "Die outo-stoptydhouer het afgeloop voor die bediener kon begin. Skep ’n nuwe deel.",
+ "gui_server_autostop_timer_expired": "Die outo-stoptydhouer het reeds afgeloop. Pas dit aan om te begin deel.",
+ "gui_server_autostart_timer_expired": "Die geskeduleerde tyd is verstreke. Verstel dit om met deel te begin met.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die outo-stoptyd kan nie dieselfde of vroeër as die outo-begintyd wees nie. Pas dit aan om te begin deel.",
+ "share_via_onionshare": "Deel d.m.v. OnionShare",
+ "gui_connect_to_tor_for_onion_settings": "Koppel aan Tor om uidiensinstellings te sien",
+ "gui_use_legacy_v2_onions_checkbox": "Gebruik argaïese adresse",
+ "gui_save_private_key_checkbox": "Gebruik ’n blywende adres",
+ "gui_share_url_description": "<b>Enigeen</b> met hierdie OnionShare-adres kan u lêers d.m.v. die <b>Tor Browser aflaai</b>: <img src=\"{}\"/>",
+ "gui_website_url_description": "<b>Enigeen</b> met hierdie OnionShare-adres kan u webwerf d.m.v. die <b>Tor Browser besoek</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Enigeen</b> met hierdie OnionShare-adres kan lêers d.m.v. die <b>Tor Browser</b> na u rekenaar <b>oplaai</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Hierdie deel sal nie self stop nie.<br><br>Elke opvolgende deel hergebruik die adres. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)",
+ "gui_url_label_stay_open": "Hierdie deel sal nie self stop nie.",
+ "gui_url_label_onetime": "Hierdie deel sal stop na eerste voltooiing.",
+ "gui_url_label_onetime_and_persistent": "Hierdie deel sal nie self stop nie.<br><br>Elke opvolgende deel sal die adres hergebruik. (Deaktiveer “Gebruik ’n blywende adres” in die instellings om eenmalige adresse te gebruik.)",
+ "gui_status_indicator_share_stopped": "Gereed om te deel",
+ "gui_status_indicator_share_working": "Begin…",
+ "gui_status_indicator_share_scheduled": "Geskeduleer…",
+ "gui_status_indicator_share_started": "Deel tans",
+ "gui_status_indicator_receive_stopped": "Gereed om te ontvang",
+ "gui_status_indicator_receive_working": "Begin…",
+ "gui_status_indicator_receive_scheduled": "Geskeduleer…",
+ "gui_status_indicator_receive_started": "Ontvang tans",
+ "gui_file_info": "{} lêers, {}",
+ "gui_file_info_single": "{} lêer, {}",
+ "history_in_progress_tooltip": "{} besig",
+ "history_completed_tooltip": "{} afgehandel",
+ "history_requests_tooltip": "{} webversoeke",
+ "error_cannot_create_data_dir": "Kon nie OnionShare-datavouer skep nie: {}",
+ "gui_receive_mode_warning": "Ontvangsmodus laat ander mense lêers op u rekenaar plaas.<br><br><b>Sommige van die lêers kan moontlik u rekenaar oorneem indien u dit open. Open slegs lêers van mense wat u vertrou of indien u weet wat u doen.</b>",
+ "gui_mode_share_button": "Deel Lêers",
+ "gui_mode_receive_button": "Ontvang Lêers",
+ "gui_mode_website_button": "Publiseer Webwerf",
+ "gui_settings_receiving_label": "Ontvangsinstellings",
+ "gui_settings_website_label": "Webwerfinstellings",
+ "gui_settings_data_dir_label": "Bewaar lêers na",
+ "gui_settings_data_dir_browse_button": "Blaai",
+ "gui_settings_public_mode_checkbox": "Openbaarmodus",
+ "gui_open_folder_error_nautilus": "Kan nie vouer oopmaak nie want nautilus is onbeskikbaar. Die lêer is hier: {}",
+ "gui_settings_language_label": "Voorkeurtaal",
+ "gui_settings_language_changed_notice": "Herbegin OnionShare om die nuwe taal te gebruik.",
+ "systray_menu_exit": "Sluit Af",
+ "systray_page_loaded_title": "Bladsy Gelaai",
+ "systray_page_loaded_message": "OnionShare-adres gelaai",
+ "systray_share_started_title": "Deel het Begin",
+ "systray_share_started_message": "Begin lêers aan iemand stuur",
+ "systray_share_completed_title": "Deel is Afgehandel",
+ "systray_share_completed_message": "Lêers klaar gestuur",
+ "systray_share_canceled_title": "Deel is Gekanselleer",
+ "systray_share_canceled_message": "Iemand het ontvangs van u lêers gekanselleer",
+ "systray_receive_started_title": "Ontvang het Begin",
+ "systray_receive_started_message": "Iemand stuur lêers aan u",
+ "gui_all_modes_history": "Geskiedenis",
+ "gui_all_modes_clear_history": "Wis Alles",
+ "gui_all_modes_transfer_started": "Begin {}",
+ "gui_all_modes_transfer_finished_range": "Oorgedra {} - {}",
+ "gui_all_modes_transfer_finished": "Oorgedra {}",
+ "gui_all_modes_transfer_canceled_range": "Gekanselleer {} - {}",
+ "gui_all_modes_transfer_canceled": "Gekanselleer {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} verstreke.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (bereken tans)",
+ "gui_all_modes_progress_eta": "{0:s}, Verwagte Aankomstyd: {1:s}, %p%",
+ "gui_share_mode_no_files": "Nog Geen Lêers Gestuur Nie",
+ "gui_share_mode_autostop_timer_waiting": "Wag om klaar te stuur",
+ "gui_website_mode_no_files": "Nog Geen Webwerf Gedeel Nie",
+ "gui_receive_mode_no_files": "Nog Geen Lêers Ontvang Nie",
+ "gui_receive_mode_autostop_timer_waiting": "Wag om klaar te ontvang",
+ "receive_mode_upload_starting": "Oplaai van totale grootte {} begin",
+ "days_first_letter": "d",
+ "hours_first_letter": "h",
+ "minutes_first_letter": "m",
+ "seconds_first_letter": "s"
+}
diff --git a/share/locale/am.json b/desktop/src/onionshare/resources/locale/am.json
index b787a617..b787a617 100644
--- a/share/locale/am.json
+++ b/desktop/src/onionshare/resources/locale/am.json
diff --git a/share/locale/ar.json b/desktop/src/onionshare/resources/locale/ar.json
index f1451cc7..f1451cc7 100644
--- a/share/locale/ar.json
+++ b/desktop/src/onionshare/resources/locale/ar.json
diff --git a/share/locale/bg.json b/desktop/src/onionshare/resources/locale/bg.json
index 9a579ce6..9abe5623 100644
--- a/share/locale/bg.json
+++ b/desktop/src/onionshare/resources/locale/bg.json
@@ -100,7 +100,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Използвайте вградените meek_lite (Azure) pluggable транспорти (изискват obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Предупреждение: meek_lite мостовета са много скъпи за проекта Тор. <br> <br> Използвайте ги само, ако не можете да се свържете пряко чрез obfs4 транспорти или други нормални мостове с Тор.",
"gui_settings_tor_bridges_custom_radio_option": "Използвайте персонализирани мостове",
- "gui_settings_tor_bridges_custom_label": "Може да намерите мостове на <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Може да намерите мостове на <a href=\"https://bridges.torproject.org/options?lang=bg\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Нито един от добавените от Вас мостове работят.\nПроверете ги отново или добавете други.",
"gui_settings_button_save": "Запазване",
"gui_settings_button_cancel": "Отказ",
diff --git a/desktop/src/onionshare/resources/locale/bn.json b/desktop/src/onionshare/resources/locale/bn.json
new file mode 100644
index 00000000..7d43b3bb
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/bn.json
@@ -0,0 +1,267 @@
+{
+ "config_onion_service": "{0:d} পোর্টে onion সার্ভিস সেটাপ করা হচ্ছে।",
+ "preparing_files": "ফাইলগুলো কমপ্রেস হচ্ছে।",
+ "give_this_url": "প্রাপককে এই এড্রেসটি দিন:",
+ "give_this_url_stealth": "প্রাপককে এই এড্রেস এবং HidServAuth লাইনটি দিন:",
+ "give_this_url_receive": "প্রেরককে এই ঠিকানাটি দিন:",
+ "give_this_url_receive_stealth": "প্রেরককে এই এড্রেস এবং HidServAuthটি দিন:",
+ "ctrlc_to_stop": "সার্ভারটি বন্ধ করার জন্য Ctrl+C চাপুন",
+ "not_a_file": "{0:s} ফাইলটি বৈধ নয়।",
+ "not_a_readable_file": "{0:s} ফাইলটি পড়া যাচ্ছে না।",
+ "no_available_port": "অনিয়ন সার্ভিস চালু করার জন্য কোন পোর্ট পাওয়া যাচ্ছে না",
+ "other_page_loaded": "ঠিকানা লোড হয়েছে",
+ "close_on_autostop_timer": "বন্ধ হয়ে গিয়েছে, কারণ অটো-স্টপ টাইমার এর সময় শেষ",
+ "closing_automatically": "ট্রান্সফার শেষ, তাই থেমে যাওয়া হলো",
+ "timeout_download_still_running": "",
+ "timeout_upload_still_running": "",
+ "large_filesize": "সতর্কতা: বড় ফাইল পাঠাতে গেলে অনেক সময় লাগতে পারে",
+ "systray_menu_exit": "করুন",
+ "systray_download_started_title": "",
+ "systray_download_started_message": "",
+ "systray_download_completed_title": "",
+ "systray_download_completed_message": "",
+ "systray_download_canceled_title": "",
+ "systray_download_canceled_message": "",
+ "systray_upload_started_title": "",
+ "systray_upload_started_message": "",
+ "help_local_only": "Tor ব্যবহার করবে না (শুধুমাত্র ডেভেলপারদের জন্য)",
+ "help_stay_open": "ফাইলগুলো পাঠানো হয়ে গেলেও শেয়ার করা থামিও না",
+ "help_autostop_timer": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও",
+ "help_stealth": "ক্লায়েন্ট অনুমোদন ব্যবহার করুন (উন্নততর)",
+ "help_receive": "কোনকিছু শেয়ার না করে শুধু গ্রহণ করবে",
+ "help_verbose": "OnionShare-এর এররগুলো stdout-এ দেখাও, আর ওয়েব এররগুলো ডিস্কে লগ করো",
+ "help_filename": "শেয়ার করার জন্য ফাইল বা ফোল্ডারের লিস্ট",
+ "help_config": "কাস্টম JSON কনফিগারেশন ফাইলের লোকেশন (যদি থাকে)",
+ "gui_drag_and_drop": "শেয়ার করা শুরু করতে\nফাইল এবং ফোল্ডারগুলো টেনে ছেড়ে দাও",
+ "gui_add": "যোগ করো",
+ "gui_delete": "ডিলিট করো",
+ "gui_choose_items": "পছন্দ করো",
+ "gui_share_start_server": "শেয়ার আরম্ভ করো",
+ "gui_share_stop_server": "শেয়ার বন্ধ করো",
+ "gui_share_stop_server_autostop_timer": "শেয়ার বন্ধ করো ({})",
+ "gui_share_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে",
+ "gui_receive_start_server": "রিসিভ মোড আরম্ভ করো",
+ "gui_receive_stop_server": "রিসিভ মোড বন্ধ করো",
+ "gui_receive_stop_server_autostop_timer": "রিসিভ মোড বন্ধ করো({} বাকি)",
+ "gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে",
+ "gui_copy_url": "এড্রেস কপি করো",
+ "gui_copy_hidservauth": "হিডসার্ভঅথ কপি করো",
+ "gui_downloads": "",
+ "gui_no_downloads": "",
+ "gui_canceled": "বাতিল করা হয়েছে",
+ "gui_copied_url_title": "OnionShare ঠিকানা কপি করা হয়েছে",
+ "gui_copied_url": "OnionShare ঠিকানাটি ক্লিপবোর্ডে কপি করা হয়েছে",
+ "gui_copied_hidservauth_title": "HidServAuth কপি করা হয়েছে",
+ "gui_copied_hidservauth": "HidServAuth লাইনটি ক্লিপবোর্ডে কপি করা হয়েছে",
+ "gui_please_wait": "চালু করছি… বাতিল করতে এখানে ক্লিক করো।",
+ "gui_download_upload_progress_complete": "",
+ "gui_download_upload_progress_starting": "",
+ "gui_download_upload_progress_eta": "",
+ "version_string": "OnionShare (অনিয়নশেয়ার) {0:s} | https://onionshare.org/",
+ "gui_quit_title": "আস্তে ভাই",
+ "gui_share_quit_warning": "আপনি ফাইল পাঠানোর প্রক্রিয়ার মধ্যে আছেন। আপনি কি আসলেই OnionShare বন্ধ করতে চান?",
+ "gui_receive_quit_warning": "আপনি ফাইল গ্রহণের প্রক্রিয়ার মধ্যে আছেন। আপনি কি আসলেই OnionShare বন্ধ করতে চান?",
+ "gui_quit_warning_quit": "প্রস্থান করো",
+ "gui_quit_warning_dont_quit": "বাতিল",
+ "error_rate_limit": "কেউ একজন অসংখ্যবার তোমার পাসওয়ার্ডটি অনুমান করার ব্যর্থ চেষ্টা করেছে, তাই OnionShare নিরাপত্তার জন্য সার্ভার বন্ধ করে দিয়েছে। তাই, নতুন করে আবার তোমার ফাইল(গুলো)শেয়ার করো এবং প্রাপককে নতুন এড্রেসটি দিন।",
+ "zip_progress_bar_format": "কমপ্রেস করছি: %p%",
+ "error_stealth_not_supported": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করার জন্য, তোমার অন্তত Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
+ "error_ephemeral_not_supported": "OnionShare ব্যবহার করার জন্য Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
+ "gui_settings_window_title": "সেটিংস",
+ "gui_settings_whats_this": "<a href='{0:s}'>বিস্তারিত দেখুন</a>",
+ "gui_settings_stealth_option": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করো",
+ "gui_settings_stealth_hidservauth_string": "তোমার প্রাইভেট চাবি পুনব্যবহারের জন্য সেভ করে থাকলে, তার মানে হলো তুমি এখন তোমার হিডসার্ভঅথ কপি করার জন্য ক্লিক করতে পারো।",
+ "gui_settings_autoupdate_label": "নতুন সংস্করণ এসেছে কিনা দেখুন",
+ "gui_settings_autoupdate_option": "নতুন সংস্করণ আসলে আমাকে জানাবে",
+ "gui_settings_autoupdate_timestamp": "সর্বশেষ চেক করা হয়েছে: {}",
+ "gui_settings_autoupdate_timestamp_never": "কখনো না",
+ "gui_settings_autoupdate_check_button": "নতুন সংস্করণ এসেছে কিনা দেখুন",
+ "gui_settings_general_label": "সাধারণ সেটিংস",
+ "gui_settings_sharing_label": "শেয়ারিং সেটিংস",
+ "gui_settings_close_after_first_download_option": "ফাইল পাঠানো হলে শেয়ার করা বন্ধ করে দিও",
+ "gui_settings_connection_type_label": "OnionShare কিভাবে টর এর সাথে কানেক্ট করবে?",
+ "gui_settings_connection_type_bundled_option": "OnionShare-এর ভিতরে থাকা নিজস্ব টরটি ব্যবহার করো",
+ "gui_settings_connection_type_automatic_option": "টর ব্রাউজার এর সাথে স্বয়ংক্রিয়ভাবে-কনফিগার করার চেষ্টা করো",
+ "gui_settings_connection_type_control_port_option": "কন্ট্রোল পোর্ট ব্যবহার করে কানেক্ট করো",
+ "gui_settings_connection_type_socket_file_option": "সকেট ফাইল দিয়ে কানেক্ট করো",
+ "gui_settings_connection_type_test_button": "টর নেটওয়ার্কের সাথে কানেকশন চেক করো",
+ "gui_settings_control_port_label": "নিয়ন্ত্রন পোর্ট",
+ "gui_settings_socket_file_label": "সকেট ফাইল",
+ "gui_settings_socks_label": "SOCKS পোর্ট",
+ "gui_settings_authenticate_label": "টর অথেনটিকেশন সেটিংস",
+ "gui_settings_authenticate_no_auth_option": "অথেনটিকেশন ছাড়া, বা কুকি অথেনটিকেশন",
+ "gui_settings_authenticate_password_option": "পাসওয়ার্ড",
+ "gui_settings_password_label": "পাসওয়ার্ড",
+ "gui_settings_tor_bridges": "টর ব্রিজ সাপোর্ট",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "ব্রিজ ব্যবহার করো না",
+ "gui_settings_tor_bridges_obfs4_radio_option": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)",
+ "gui_settings_meek_lite_expensive_warning": "সতর্কতা: meek_lite ব্রিজ পরিচালনা করা Tor Project-এর জন্য অনেক ব্যয়বহুল।<br><br>এগুলো তখনই ব্যবহার করো যখন Tor-এ সরাসরি কানেক্ট করতে পারছো না, obfs4 ট্রান্সপোর্ট দিয়ে, অথবা অন্যান্য সাধারণ ব্রিজ দিয়ে।",
+ "gui_settings_tor_bridges_custom_radio_option": "কাস্টম ব্রিজ ব্যবহার করো",
+ "gui_settings_tor_bridges_custom_label": "ব্রিজ পেতে চাইলে <a href=\"https://bridges.torproject.org/options?lang=bn\">https://bridges.torproject.org</a> দেখুন",
+ "gui_settings_tor_bridges_invalid": "তোমার দেয়া কোন ব্রিজই কাজ করছে না।\nআরেকবার চেক করে দেখো বা নতুন ব্রিজ দিয়ে চেষ্টা করো।",
+ "gui_settings_button_save": "সেভ",
+ "gui_settings_button_cancel": "বাতিল",
+ "gui_settings_button_help": "সাহায্য",
+ "gui_settings_autostop_timer_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো",
+ "gui_settings_autostop_timer": "শেয়ার বন্ধ করো:",
+ "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করা যায় না কারণ তোমার বিন্যাসসমূহ বোধগম্য নয়।",
+ "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন্ডে কি চলমান?",
+ "settings_error_socket_port": "{}: {} এ টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারছি না ।",
+ "settings_error_socket_file": "সকেট ফাইল {} ব্যবহার করে টর নিয়ন্ত্রকের সাথে সংযোগ করা যাচ্ছে না।",
+ "settings_error_auth": "{}: {}-এর সাথে সংযুক্ত, কিন্তু পরীক্ষা করা যাচ্ছে না । হয়তো এটা কোনো টর নিয়ন্ত্রক নয়?",
+ "settings_error_missing_password": "টর কন্ট্রোলার সাথে সংযুক্ত, কিন্তু তা প্রমাণীকরণের জন্য একটি পাসওয়ার্ড প্রয়োজন।",
+ "settings_error_unreadable_cookie_file": "টর নিয়ন্ত্রকের সাথে সংযুক্ত, কিন্তু পাসওয়ার্ড ভুল হতে পারে, অথবা তোমার ব্যবহারকারীকে কুকি ফাইলে পড়ার অনুমতি দেওয়া হয়নি।",
+ "settings_error_bundled_tor_not_supported": "OnionShare এর সাথে আসা টর সংস্করণটি উইন্ডোজ বা ম্যাক এ ডেভেলপার মোডে কাজ করে না।",
+ "settings_error_bundled_tor_timeout": "টর সাথে সংযোগ করার জন্য খুব বেশি সময় লাগছে। হয়তো তুমি ইন্টারনেটের সাথে সংযুক্ত নন, অথবা তোমার কম্পিউটারের সময় ঠিক নেই?",
+ "settings_error_bundled_tor_broken": "OnionShare টর এর সাথে কানেক্ট করতে পারছে না:\n{}",
+ "settings_test_success": "টর নিয়ন্ত্রকের সঙ্গে যুক্ত হয়েছে।\n\nটর সংস্করণ: {}\nঅস্থায়ী অনিয়ন ঠিকানা সমর্থন করে: {}.\nক্লায়েন্ট অথেনটিকেশন সমর্থন করে: {}.\n৩য় প্রজন্মের অনিয়ন ঠিকানাগুলো(৫৬ অক্ষর) সমর্থন করে: {} .",
+ "error_tor_protocol_error": "টরে একটি ত্রুটি ছিল: {}",
+ "error_tor_protocol_error_unknown": "টরে একটি অজানা ত্রুটি আছে",
+ "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত",
+ "connecting_to_tor": "টর নেটওয়ার্কে যুক্ত হচ্ছে",
+ "update_available": "নতুন OnionShare সংস্করণ বের হয়েছে। এটি পেতে এখানে <a href='{}'>ক্লিক করো</a> । <br><br>তুমি ব্যবহার করছো {} এবং সাম্প্রতিক সংস্করণ হলো {}।",
+ "update_error_check_error": "নতুন সংস্করণ চেক করতে পারছি না: অনিওনশেয়ার ওয়েবসাইট বলছে, সাম্প্রতিক সংস্করণটিকে চেনা যাচ্ছে না '{}'…",
+ "update_error_invalid_latest_version": "নতুন সংস্করণের জন্য চেক করা যায়নি: OnionShare ওয়েবসাইট বলছে সর্বনতুন সংস্করণ চেনা যাচ্ছে না '{}'…",
+ "update_not_available": "তুমি OnionShare এর সাম্প্রতিক সংস্করণটি চালাচ্ছো ।",
+ "gui_tor_connection_ask": "টর এর সাথে কীভাবে সংযোগ করবে, তা ঠিক করতে সেটিংস খুলবো কি?",
+ "gui_tor_connection_ask_open_settings": "হ্যাঁ",
+ "gui_tor_connection_ask_quit": "প্রস্থান",
+ "gui_tor_connection_error_settings": "OnionShare কীভাবে টর নেটওয়ার্কের সাথে সংযোগ স্থাপন করবে, তা সেটিংস এ গিয়ে পরিবর্তন করে দেখুন কাজ হয় কিনা।",
+ "gui_tor_connection_canceled": "টর-এর সাথে কানেক্ট করা যাচ্ছে না।\n\nতুমি ইন্টারনেটের সাথে সংযুক্ত আছো কিনা তা নিশ্চিত করো, তারপর OnionShare পুনরায় খুলো এবং টর এর সাথে OnionShare কে সেট আপ করো।",
+ "gui_tor_connection_lost": "টর এর সাথে যোগাযোগ বিচ্ছিন্ন হয়ে গেছে।",
+ "gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই স্বয়ংক্রিয়-বন্ধ ঘড়ির সময় শেষ হয়ে গেছে। অনুগ্রহ করে আবার নতুনভাবে শেয়ার করো।",
+ "gui_server_autostop_timer_expired": "অটো-স্টপ টাইমারের সময় ইতিমধ্যেই শেষ হয়ে গিয়েছে। দয়া করে, শেয়ারিং শুরু করতে নতুনভাবে সময় সেট করো।",
+ "share_via_onionshare": "OnionShare এর মাধমে শেয়ার করো",
+ "gui_use_legacy_v2_onions_checkbox": "লেগাসি ঠিকানা ব্যবহার করো",
+ "gui_save_private_key_checkbox": "একটি স্থায়ী ঠিকানা ব্যবহার করো",
+ "gui_share_url_description": "যার কাছেই এই ঠিকানা থাকবে সে ই <b>টর ব্রাউজার</b> ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে <b>যে কেউ</b> আপনার ফাইল(গুলি) <b>ডাউনলোড</b> করতে পারবে:<img src='{}' />",
+ "gui_receive_url_description": "যার কাছেই এই ঠিকানা থাকবে সে ই <b>টর ব্রাউজার</b> ব্যবহার করে এই OnionShare ঠিকানায় গিয়ে <b>যে কেউ</b> আপনার কম্পিউটারে ফাইল <b>আপলোড</b> করতে পারবে:<img src='{}' />",
+ "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_status_indicator_receive_stopped": "পাওয়ার জন্য প্রস্তুত",
+ "gui_status_indicator_receive_working": "শুরু…",
+ "gui_status_indicator_receive_started": "গ্রহণ",
+ "gui_file_info": "{} ফাইল, {}",
+ "gui_file_info_single": "{} ফাইল, {}",
+ "history_in_progress_tooltip": "{} অগ্রসর হচ্ছে",
+ "history_completed_tooltip": "{} সম্পূর্ণ",
+ "info_in_progress_uploads_tooltip": "",
+ "info_completed_uploads_tooltip": "",
+ "error_cannot_create_downloads_dir": "",
+ "receive_mode_downloads_dir": "",
+ "receive_mode_warning": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।",
+ "gui_receive_mode_warning": "গ্রহণ মোডে লোকজন আপনার কম্পিউটারে ফাইলগুলো আপলোড করতে দেয় । <br><br><b>আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।</b>",
+ "receive_mode_upload_starting": "মোট আকারের {} টি আপলোড শুরু হচ্ছে",
+ "receive_mode_received_file": "প্রাপ্ত: {}",
+ "gui_mode_share_button": "ফাইলগুলো শেয়ার করুন",
+ "gui_mode_receive_button": "ফাইল গ্রহণ করা হচ্ছে",
+ "gui_settings_receiving_label": "সেটিংস গ্রহণ করা হচ্ছে",
+ "gui_settings_downloads_label": "",
+ "gui_settings_downloads_button": "দেখা",
+ "gui_settings_public_mode_checkbox": "সর্বজনীন মোড",
+ "systray_close_server_title": "",
+ "systray_close_server_message": "",
+ "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে",
+ "systray_download_page_loaded_message": "",
+ "systray_upload_page_loaded_message": "",
+ "gui_uploads": "",
+ "gui_no_uploads": "",
+ "gui_clear_history": "",
+ "gui_upload_in_progress": "",
+ "gui_upload_finished_range": "",
+ "gui_upload_finished": "",
+ "gui_download_in_progress": "",
+ "gui_open_folder_error_nautilus": "ফোল্ডার খোলা যাচ্ছে না কারণ nautilus বিদ্যমান নয় । ফাইলটি এখানে: {}",
+ "gui_settings_language_label": "পছন্দনীয় ভাষা",
+ "gui_settings_language_changed_notice": "নতুন ভাষায় এপটি দেখার জন্য OnionShare পুনরায় চালু করো।",
+ "gui_add_files": "ফাইল যোগ করো",
+ "gui_add_folder": "ফোল্ডার যোগ করো",
+ "gui_settings_onion_label": "অনিয়ন সেটিংস",
+ "gui_connect_to_tor_for_onion_settings": "অনিওন সার্ভিস সেটিংস দেখতে টর এর সাথে কানেক্ট করো",
+ "error_cannot_create_data_dir": "onionshare ডাটা ফোল্ডার তৈরি করা যায়নি: {}",
+ "receive_mode_data_dir": "আপনার কাছে পাঠানো ফাইলসমূহ এই ফোল্ডারে প্রদর্শিত হয়েছে: {}",
+ "gui_settings_data_dir_label": "ফাইল সংরক্ষণ করুন",
+ "gui_settings_data_dir_browse_button": "ব্রাউজ",
+ "systray_page_loaded_message": "onionshare ঠিকানা লোড করা হয়েছে",
+ "systray_share_started_title": "শেয়ারিং শুরু করা হয়েছে",
+ "systray_share_completed_title": "শেয়ারিং সম্পূর্ণ হয়েছে",
+ "systray_share_completed_message": "ফাইল পাঠানো শেষ হয়েছে",
+ "systray_share_canceled_title": "শেয়ারিং বাতিল করা হয়েছে",
+ "systray_share_canceled_message": "কেউ আপনার ফাইল গ্রহণ করা বাতিল করেছে",
+ "systray_receive_started_title": "গ্রহণ শুরু হয়েছে",
+ "systray_receive_started_message": "কেউ তোমার কাছে ফাইল পাঠাচ্ছে",
+ "gui_all_modes_history": "ইতিহাস",
+ "gui_all_modes_clear_history": "সব পরিষ্কার করো",
+ "gui_all_modes_transfer_started": "{} শুরু হয়েছে",
+ "systray_share_started_message": "কাউকে ফাইল পাঠানো আরম্ভ করছি",
+ "gui_all_modes_transfer_finished_range": "স্থানান্তরিত হয়েছে {} - {}",
+ "gui_all_modes_transfer_finished": "স্থানান্তরিত {}",
+ "gui_all_modes_transfer_canceled_range": "বাতিলকৃত {} - {}",
+ "gui_all_modes_transfer_canceled": "বাতিলকৃত {}",
+ "gui_all_modes_progress_complete": "%p%, {0: সে} অতিক্রান্ত হয়েছে ।",
+ "gui_all_modes_progress_starting": "{0:সে}, %p% (গণনা করা হচ্ছে)",
+ "gui_all_modes_progress_eta": "{0:সে}, কাসবা: {1:সে}, %p%",
+ "gui_share_mode_no_files": "এখনও কোন ফাইল পাঠানো হয়নি",
+ "gui_share_mode_autostop_timer_waiting": "পাঠানো শেষ হওয়ার জন্য অপেক্ষা করছি",
+ "gui_receive_mode_no_files": "কোন ফাইল এখনও পাওয়া যায়নি",
+ "gui_receive_mode_autostop_timer_waiting": "রিসিভ শেষ হওয়ার জন্য অপেক্ষা করছি",
+ "gui_stop_server_autostop_timer_tooltip": "অটো-স্টপ টাইমার বন্ধ হবে {} পরে",
+ "gui_start_server_autostart_timer_tooltip": "অটো স্টার্ট টাইমার বন্ধ হবে {} পরে",
+ "gui_waiting_to_start": "{} এর মধ্যে শেয়ারিং শুরু হবে। বাতিল করতে এখানে ক্লিক করো।",
+ "gui_settings_autostart_timer_checkbox": "অটো-স্টার্ট টাইমার ব্যবহার করো",
+ "gui_settings_autostart_timer": "শেয়ার শুরু করো:",
+ "gui_server_autostart_timer_expired": "পূর্বনির্ধারিত সময় শেষ হয়ে গিয়েছে। শেয়ার শুরু করার জন্য আবার টাইম সেট করো।",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "অটো স্টপ টাইম, অটো স্টার্ট টাইমের আগে বা একই সময় হতে পারবে না। শেয়ারিং চালু করতে দয়া করে এটি ঠিক করুন।",
+ "gui_status_indicator_share_scheduled": "শিডিউল করা হয়েছে…",
+ "gui_status_indicator_receive_scheduled": "শিডিউল করা হয়েছে…",
+ "days_first_letter": "দি",
+ "hours_first_letter": "ঘ",
+ "minutes_first_letter": "মি",
+ "seconds_first_letter": "সে",
+ "gui_website_url_description": "<b>যার কাছেই</b> নিচের OnionShare ঠিকানাটি থাকবে সেই <b>টর ব্রাউজারের মাধ্যমে উক্ত ঠিকানায় গিয়ে <b> </b>আপনার ফাইল(গুলো) ডাউনলোড করতে পারবে</b>: <img src='{}' />",
+ "gui_mode_website_button": "ওয়েবসাইট পাবলিশ করুন",
+ "gui_website_mode_no_files": "এখনো কোন ওয়েবসাইট শেয়ার করা হয়নি",
+ "incorrect_password": "ভুল পাসওয়ার্ড",
+ "gui_settings_individual_downloads_label": "একাধিক ফাইলের ক্ষেত্রে আলাদাভাবে প্রত্যেক ফাইলকে ডাউনলোড করার জন্য চেক উঠিয়ে দিন",
+ "history_requests_tooltip": "{} ওয়েব রিকুয়েস্ট",
+ "gui_settings_csp_header_disabled_option": "\"কন্টেন্ট নিরাপত্তা পলিসি\" হেডারকে বন্ধ করো",
+ "gui_settings_website_label": "ওয়েবসাইট সেটিংস",
+ "gui_new_tab_receive_button": "ফাইল গ্রহণ করো",
+ "gui_new_tab_share_button": "ফাইল শেয়ার করো",
+ "gui_new_tab_tooltip": "একটি নতুন ট্যাব খুলো",
+ "gui_new_tab": "নতুন ট্যাব",
+ "mode_settings_website_disable_csp_checkbox": "বিষয়বস্তু নিরাপত্তা নীতি শীর্ষাংশ নিষ্ক্রিয় করো (তোমার ওয়েবসাইটকে তৃতীয় পক্ষের সম্পদ ব্যবহার করতে সম্মতি দাও)",
+ "mode_settings_legacy_checkbox": "একটি লেগাসি ঠিকানা ব্যবহার করো (অনিওন সেবা স.২, এর ব্যবহার উৎসাহযোগ্য না)",
+ "gui_new_tab_receive_description": "তোমার কম্পিউটারকে একটি অনলাইন ড্রপবক্স বানাও। অন্যরা টর ব্রাউজার ব্যবহার করে তোমার কম্পিউটারে ফাইল পাঠাতে পারবে।",
+ "gui_new_tab_share_description": "অন্য কাউকে পাঠাতে তোমার কম্পিউটারের ফাইল নির্বাচন করো. তুমি যাকে বা যাদের কাছে ফাইল পাঠাতে চাও তাকে বা তাদেরকে তোমার কাছ থেকে ফাইল ডাউনলোড করতে টর ব্রাউজার ব্যবহার করতে হবে।",
+ "mode_settings_share_autostop_sharing_checkbox": "ফাইল পাঠানোর পর শেয়ার করা বন্ধ করো (স্বতন্ত্র ফাইল ডাউনলোড এর মঞ্জুরি দিতে টিক চিহ্ন তুলে দাও)",
+ "mode_settings_client_auth_checkbox": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করো",
+ "mode_settings_autostop_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা বন্ধ করো",
+ "mode_settings_autostart_timer_checkbox": "নির্ধারিত সময়ে অনিওন সেবা শুরু করো",
+ "mode_settings_persistent_checkbox": "এই ট্যাব সংরক্ষণ করো, এবং যখন আমি অনিওনশেয়ার খুলব তখন এটি স্বয়ংক্রিয়ভাবে খুলো",
+ "gui_quit_warning_description": "তোমার কিছু ট্যাবে শেয়ারিং সক্রিয়। তুমি যদি প্রস্থান করো, তোমার সমস্ত ট্যাব বন্ধ হয়ে যাবে। তুমি কি নিশ্চিত যে তুমি প্রস্থান করতে চাও?",
+ "gui_close_tab_warning_website_description": "তুমি সক্রিয়ভাবে একটি ওয়েবসাইট হোস্ট করছো। আপনি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?",
+ "gui_close_tab_warning_receive_description": "তুমি ফাইল পাওয়ার প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?",
+ "gui_close_tab_warning_share_description": "তুমি ফাইল পাঠানোর প্রক্রিয়ায় আছো। তুমি কি নিশ্চিত যে তুমি এই ট্যাবটি বন্ধ করতে চাও?",
+ "gui_close_tab_warning_persistent_description": "এই ট্যাবটি স্থায়ী। তুমি যদি এটা বন্ধ করো তাহলে তুমি যে অনিওন ঠিকানা ব্যবহার করছো তা হারিয়ে ফেলবে। তুমি কি নিশ্চিত যে তুমি এটা বন্ধ করতে চাও?",
+ "gui_quit_warning_title": "তুমি নিশ্চিত?",
+ "gui_new_tab_website_description": "তোমার কম্পিউটার থেকে একটি স্ট্যাটিক এইচটিএমএল অনিওন ওয়েবসাইট হোস্ট করো।",
+ "gui_new_tab_website_button": "ওয়েবসাইট প্রকাশ করো",
+ "gui_close_tab_warning_title": "তুমি নিশ্চিত?",
+ "gui_close_tab_warning_close": "বন্ধ",
+ "gui_close_tab_warning_cancel": "বাতিল",
+ "gui_quit_warning_cancel": "বাতিল",
+ "mode_settings_advanced_toggle_show": "উন্নততর সেটিংস দেখাও",
+ "mode_settings_advanced_toggle_hide": "উন্নততর সেটিংস লুকাও",
+ "mode_settings_public_checkbox": "পাসওয়ার্ড ব্যবহার করো না",
+ "mode_settings_receive_data_dir_browse_button": "অনুসন্ধান করো",
+ "mode_settings_receive_data_dir_label": "ফাইল সংরক্ষণ করো"
+}
diff --git a/share/locale/ca.json b/desktop/src/onionshare/resources/locale/ca.json
index a414834c..62b69618 100644
--- a/share/locale/ca.json
+++ b/desktop/src/onionshare/resources/locale/ca.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Fes servir el transport integrat meek_lite (Azure, necessita obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Compte: fer funcionar els ponts meek_lite suposa un cost molt gran per al Tor Project .<br><br>Feu-los servir només si no podeu connectar-vos a Tor directament, a través d'obfs4, o a través de ponts normals.",
"gui_settings_tor_bridges_custom_radio_option": "Fes servir ponts personalitzats",
- "gui_settings_tor_bridges_custom_label": "Podeu trobar-ne a <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Podeu trobar-ne a <a href=\"https://bridges.torproject.org/options?lang=ca\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Cap dels ponts que heu afegit funciona.\nComproveu-los o proveu d'afegir-ne de nous.",
"gui_settings_button_save": "Desa",
"gui_settings_button_cancel": "Cancel·la",
@@ -115,15 +115,15 @@
"settings_error_unreadable_cookie_file": "S'ha establert la connexió al controlador de Tor, però pot ser que la contrasenya sigui errònia o que faltin permisos de lectura en el fitxer de galetes.",
"settings_error_bundled_tor_not_supported": "La versió de Tor inclosa a OnionShare no funciona en mode de desenvolupador a Windows ni MacOS.",
"settings_error_bundled_tor_timeout": "La connexió està trigant molt. Podeu revisar que tingueu connexió a Internet i que el rellotge del sistema estigui en hora?",
- "settings_error_bundled_tor_broken": "OnionShare no s'ha pogut connectar a Tor en segon pla:\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare no s'ha pogut connectar a Tor:\n{}",
"settings_test_success": "S'ha connectat al controlador de Tor.\n\nVersió de Tor: {}\nCompatible amb serveis onion efímers: {}.\nCompatible amb autenticació del client: {}.\nCompatible amb adreces .onion de nova generació: {}.",
"error_tor_protocol_error": "Hi ha hagut un error amb Tor: {}",
"error_tor_protocol_error_unknown": "Hi ha hagut un error desconegut amb Tor",
"error_invalid_private_key": "Aquest tipus de clau privada no està suportat",
"connecting_to_tor": "S'està connectant a la xarxa Tor",
"update_available": "Hi ha una nova versió d'OnionShare.<a href='{}'>Feu clic aquí</a> per a obtenir-la.<br><br>Esteu usant {} i la més recent és {}.",
- "update_error_check_error": "No s'ha pogut comprovar si hi ha una versió més nova. La web d'OnionShare diu que l'última versió és '{}' però no s'ha pogut reconèixer…",
- "update_error_invalid_latest_version": "No s'ha pogut comprovar si hi ha una versió més nova. Pot ser que no estigueu connectat a Tor o que el web d'OnionShare estigui caigut?",
+ "update_error_check_error": "No s'ha pogut comprovar si hi ha una versió més nova. Pot ser que no estigueu connectat a Tor o que el web d'OnionShare estigui caigut?",
+ "update_error_invalid_latest_version": "No s'ha pogut comprovar si hi ha una versió més nova. La web d'OnionShare diu que l'última versió és '{}' però no s'ha pogut reconèixer…",
"update_not_available": "Aquesta és l'última versió d'OnionShare.",
"gui_tor_connection_ask": "Voleu anar a la configuració per a provar d'arreglar la connexió a Tor?",
"gui_tor_connection_ask_open_settings": "Sí",
@@ -242,5 +242,35 @@
"gui_settings_individual_downloads_label": "Desmarqueu per a permetre la baixada de fitxers individuals",
"systray_individual_file_downloaded_message": "S'ha visualitzat el fitxer individual {}",
"gui_settings_csp_header_disabled_option": "Desactiva la capçalera de la Política de Seguretat de Contingut",
- "gui_settings_website_label": "Configuració del lloc web"
+ "gui_settings_website_label": "Configuració del lloc web",
+ "gui_new_tab_share_button": "Comparteix arxius",
+ "gui_new_tab_tooltip": "Obre una pestanya nova",
+ "gui_new_tab": "Nova pestanya",
+ "mode_settings_website_disable_csp_checkbox": "Desactiva la capçalera de la política de seguretat de contingut (permet que el vostre lloc web usi recursos de tercers)",
+ "mode_settings_receive_data_dir_browse_button": "Navega",
+ "mode_settings_receive_data_dir_label": "Desa els fitxers a",
+ "mode_settings_share_autostop_sharing_checkbox": "Atura la compartició després que s'hagin enviat els fitxers (desmarqueu-ho per a permetre baixar fitxers individuals)",
+ "mode_settings_client_auth_checkbox": "Usa autorització del client",
+ "mode_settings_legacy_checkbox": "Usa una adreça antiga (servei ceba v2, no recomanat)",
+ "mode_settings_autostop_timer_checkbox": "Atura el servei ceba a una hora programada",
+ "mode_settings_autostart_timer_checkbox": "Inicia el servei ceba a una hora programada",
+ "mode_settings_public_checkbox": "No usis cap contrasenya",
+ "mode_settings_persistent_checkbox": "Desa aquesta pestanya i obre-la automàticament quan obri l'OnionShare",
+ "mode_settings_advanced_toggle_hide": "Amaga la configuració avançada",
+ "mode_settings_advanced_toggle_show": "Mostra la configuració avançada",
+ "gui_quit_warning_cancel": "Cancel·la",
+ "gui_quit_warning_description": "La compartició és activa en alguna de les pestanyes. Si sortiu, es tancaran totes les pestanyes. Esteu segur de voler sortir?",
+ "gui_quit_warning_title": "N'esteu segur?",
+ "gui_close_tab_warning_cancel": "Cancel·la",
+ "gui_close_tab_warning_close": "Tanca",
+ "gui_close_tab_warning_website_description": "Esteu hostatjant un lloc web. Esteu segur de voler tancar aquesta pestanya?",
+ "gui_close_tab_warning_receive_description": "Esteu en procés de rebre fitxers. Esteu segur de voler tancar aquesta pestanya?",
+ "gui_close_tab_warning_share_description": "Esteu en el procés d'enviar fitxers. Esteu segur de voler tancar aquesta pestanya?",
+ "gui_close_tab_warning_persistent_description": "Aquesta pestanya és persistent. Si la tanqueu, perdreu l'adreça ceba que està usant. Esteu segur de voler tancar-la?",
+ "gui_close_tab_warning_title": "N'esteu segur?",
+ "gui_new_tab_website_description": "Hostatgeu un lloc web ceba HTML estàtic en el vostre ordinador.",
+ "gui_new_tab_website_button": "Publicar un lloc web",
+ "gui_new_tab_receive_description": "Convertiu el vostre ordinador en un servei de fiters en línia. Les persones podran usar el navegador Tor per a enviar-vos fitxers al vostre ordinador.",
+ "gui_new_tab_receive_button": "Rebre fitxers",
+ "gui_new_tab_share_description": "Trieu els fitxers del vostre ordinador que voleu enviar a algú altre. La persona a qui voleu enviar els fitxers haurà d'usar el navegador Tor per a baixar-los del vostre equip."
}
diff --git a/share/locale/cs.json b/desktop/src/onionshare/resources/locale/cs.json
index 7a5a4749..7a5a4749 100644
--- a/share/locale/cs.json
+++ b/desktop/src/onionshare/resources/locale/cs.json
diff --git a/share/locale/da.json b/desktop/src/onionshare/resources/locale/da.json
index 1eac766b..3ecb16c2 100644
--- a/share/locale/da.json
+++ b/desktop/src/onionshare/resources/locale/da.json
@@ -61,7 +61,7 @@
"gui_settings_sharing_label": "Delingsindstillinger",
"gui_settings_close_after_first_download_option": "Stop deling efter filerne er blevet sendt",
"gui_settings_connection_type_label": "Hvordan skal OnionShare oprette forbindelse til Tor?",
- "gui_settings_connection_type_bundled_option": "Brug Tor-versionen som er indbygget i OnionShare",
+ "gui_settings_connection_type_bundled_option": "Brug den Tor-version som er indbygget i OnionShare",
"gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser",
"gui_settings_connection_type_control_port_option": "Opret forbindelse med kontrolport",
"gui_settings_connection_type_socket_file_option": "Opret forbindelse med sokkelfil",
@@ -78,7 +78,7 @@
"gui_settings_tor_bridges_obfs4_radio_option": "Brug indbyggede obfs4 udskiftelige transporter",
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Brug indbyggede obfs4 udskiftelige transporter (kræver obfs4proxy)",
"gui_settings_tor_bridges_custom_radio_option": "Brug tilpassede broer",
- "gui_settings_tor_bridges_custom_label": "Du kan få broer fra <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Du kan få broer fra <a href=\"https://bridges.torproject.org/options?lang=da\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Ingen at de broer du tilføjede virker.\nDobbeltklik på dem eller tilføj andre.",
"gui_settings_button_save": "Gem",
"gui_settings_button_cancel": "Annuller",
@@ -92,15 +92,15 @@
"settings_error_auth": "Forbundet til {}:{}, men kan ikke autentificere. Er det fordi det ikke er en Tor-kontroller?",
"settings_error_missing_password": "Forbundet til Tor-kontroller, men den kræver en adgangskode for at autentificere.",
"settings_error_unreadable_cookie_file": "Forbundet til Tor-kontrolleren, men adgangskoden kan være forkert, eller din bruger har ikke tilladelse til at læse cookiefilen.",
- "settings_error_bundled_tor_not_supported": "Brug af Tor-versionen som kom med OnionShare virker ikke i udviklertilstand på Windows eller macOS.",
+ "settings_error_bundled_tor_not_supported": "Brug af den Tor-version som kom med OnionShare virker ikke i udviklertilstand på Windows eller macOS.",
"settings_error_bundled_tor_timeout": "For længe om at oprette forbindelse til Tor. Måske har du ikke forbindelse til internettet, eller går dit systems ur forkert?",
- "settings_error_bundled_tor_broken": "OnionShare kunne ikke oprette forbindelse til Tor i baggrunden:\n{}",
- "settings_test_success": "Forbundet til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige onion-tjenester: {}.\nUnderstøtter klientautentifikation: {}.\nUnderstøtter næstegenerations .onion-adresser: {}.",
+ "settings_error_bundled_tor_broken": "OnionShare kunne ikke oprette forbindelse til Tor:\n{}",
+ "settings_test_success": "Forbundet til Tor-kontrolleren.\n\nTor version: {}\nUnderstøtter kortvarige oniontjenester: {}.\nUnderstøtter klientautentifikation: {}.\nUnderstøtter næstegenerations .onion-adresser: {}.",
"error_tor_protocol_error": "Der opstod en fejl med Tor: {}",
"connecting_to_tor": "Opretter forbindelse til Tor-netværket",
"update_available": "Der findes en ny OnionShare. <a href='{}'>Klik her</a> for at hente den.<br><br>Du bruger {} og den seneste er {}.",
- "update_error_check_error": "Kunne ikke søge efter nye version: OnionShare-webstedet siger at den seneste version er den ugenkendte '{}' …",
- "update_error_invalid_latest_version": "Kunne ikke søge efter ny version: Måske har du ikke forbindelse til Tor, eller er OnionShare-webstedet nede?",
+ "update_error_check_error": "Kunne ikke søge efter nye version: Måske har du ikke oprettet forbindelse til Tor eller også er OnionShare-webstedet nede?",
+ "update_error_invalid_latest_version": "Kunne ikke søge efter ny version: OnionShare-webstedet siger at den seneste version er den ugenkendelige '{}' …",
"update_not_available": "Du kører den seneste OnionShare.",
"gui_tor_connection_ask": "Åbn indstillingerne for at rette forbindelsen til Tor?",
"gui_tor_connection_ask_open_settings": "Ja",
@@ -145,7 +145,7 @@
"gui_no_downloads": "Ingen downloads endnu",
"error_tor_protocol_error_unknown": "Der opstod en ukendt fejl med Tor",
"error_invalid_private_key": "Den private nøgletype understøttes ikke",
- "gui_use_legacy_v2_onions_checkbox": "Brug forældede adresser",
+ "gui_use_legacy_v2_onions_checkbox": "Brug udgåede adresser",
"gui_status_indicator_share_stopped": "Klar til at dele",
"gui_status_indicator_share_working": "Starter …",
"gui_status_indicator_share_started": "Deler",
@@ -191,7 +191,7 @@
"gui_connect_to_tor_for_onion_settings": "Opret forbindelse til Tor for at se indstillinger for onion-tjeneste",
"error_cannot_create_data_dir": "Kunne ikke oprette OnionShare-datamappe: {}",
"receive_mode_data_dir": "Filer som sendes til dig vises i denne mappe: {}",
- "gui_settings_data_dir_label": "Gem filer til",
+ "gui_settings_data_dir_label": "Gem filer i",
"gui_settings_data_dir_browse_button": "Gennemse",
"systray_page_loaded_message": "OnionShare-adresse indlæst",
"systray_share_started_title": "Deling startet",
@@ -238,5 +238,54 @@
"gui_settings_individual_downloads_label": "Fravælg for at tillade download af individuelle filer",
"history_requests_tooltip": "{}-webanmodninger",
"gui_settings_csp_header_disabled_option": "Deaktivér indholdets header om sikkerhedspolitik",
- "gui_settings_website_label": "Webstedsindstillinger"
+ "gui_settings_website_label": "Webstedsindstillinger",
+ "gui_new_tab_share_description": "Vælg filer på din computer som skal sendes til andre. Personen eller dem du vil sende filer til skal bruge Tor Browser til at downloade dem fra dig.",
+ "mode_settings_website_disable_csp_checkbox": "Deaktivér Content Security Policy-header (giver dit websted mulighed for at bruge tredjepartsressourcer)",
+ "gui_new_tab_receive_description": "Brug din computer som en online-dropbox. Andre vil kunne bruge Tor Browser til at sende filer til din computer.",
+ "mode_settings_share_autostop_sharing_checkbox": "Stop deling efter filerne er blevet sendt (fravælg for at gøre det muligt at downloade individuelle filer)",
+ "mode_settings_legacy_checkbox": "Brug en udgået adresse (v2 oniontjeneste, anbefales ikke)",
+ "mode_settings_client_auth_checkbox": "Brug klientautentifikation",
+ "mode_settings_autostop_timer_checkbox": "Stop oniontjeneste på det planlagte tidspunkt",
+ "mode_settings_autostart_timer_checkbox": "Start oniontjeneste på det planlagte tidspunkt",
+ "mode_settings_persistent_checkbox": "Gem fanebladet og åbn det automatisk når jeg åbner OnionShare",
+ "gui_quit_warning_description": "Deling er aktiv i nogle af dine faneblade. Hvis du afslutter, så lukkes alle dine faneblade. Er du sikker på, at du vil afslutte?",
+ "gui_close_tab_warning_website_description": "Du fungerer som vært for et websted. Er du sikker på, at du vil lukke fanebladet?",
+ "gui_close_tab_warning_receive_description": "Du er ved at modtage filer. Er du sikker på, at du vil lukke fanebladet?",
+ "gui_close_tab_warning_share_description": "Du er ved at sende filer. Er du sikker på, at du vil lukke fanebladet?",
+ "gui_close_tab_warning_persistent_description": "Fanebladet er vedvarende. Hvis du lukker det, så mister du den onionadresse som det bruger. Er du sikker på, at du vil lukke det?",
+ "gui_new_tab_website_description": "Vær vært for et statisk HTML-onionwebsted fra din computer.",
+ "gui_new_tab_website_button": "Udgiv websted",
+ "gui_new_tab_receive_button": "Modtag filer",
+ "gui_new_tab_share_button": "Del filer",
+ "gui_new_tab_tooltip": "Åbn et nyt faneblad",
+ "mode_settings_receive_data_dir_browse_button": "Gennemse",
+ "mode_settings_receive_data_dir_label": "Gem filer i",
+ "mode_settings_public_checkbox": "Brug ikke en adgangskode",
+ "mode_settings_advanced_toggle_hide": "Skjul avancerede indstillinger",
+ "mode_settings_advanced_toggle_show": "Vis avancerede indstillinger",
+ "gui_quit_warning_cancel": "Annuller",
+ "gui_quit_warning_title": "Er du sikker?",
+ "gui_close_tab_warning_cancel": "Annuller",
+ "gui_close_tab_warning_close": "Luk",
+ "gui_close_tab_warning_title": "Er du sikker?",
+ "gui_new_tab": "Nyt faneblad",
+ "gui_tab_name_chat": "Chat",
+ "gui_tab_name_website": "Websted",
+ "gui_tab_name_receive": "Modtag",
+ "gui_tab_name_share": "Del",
+ "gui_new_tab_chat_button": "Chat anonymt",
+ "gui_open_folder_error": "Kunne ikke åbne mappen med xdg-open. Filen er her: {}",
+ "gui_qr_code_description": "Skan QR-koden med en QR-læser såsom kameraet i din telefon for at gøre det lettere at dele OnionShare-adressen med andre.",
+ "gui_qr_code_dialog_title": "QR-kode til OnionShare",
+ "gui_show_url_qr_code": "Vis QR-kode",
+ "gui_receive_flatpak_data_dir": "Da du installerede OnionShare med Flatpak, så skal du gemme filer til en mappe i ~/OnionShare.",
+ "gui_chat_stop_server": "Stop chatserver",
+ "gui_chat_start_server": "Start chatserver",
+ "gui_chat_stop_server_autostop_timer": "Stop chatserver ({})",
+ "gui_file_selection_remove_all": "Fjern alle",
+ "gui_remove": "Fjern",
+ "gui_main_page_share_button": "Begynd at dele",
+ "gui_main_page_receive_button": "Begynd at modtage",
+ "gui_main_page_website_button": "Begynd at være vært",
+ "gui_main_page_chat_button": "Begynd at chatte"
}
diff --git a/share/locale/de.json b/desktop/src/onionshare/resources/locale/de.json
index c50e3bfc..1194a677 100644
--- a/share/locale/de.json
+++ b/desktop/src/onionshare/resources/locale/de.json
@@ -10,7 +10,7 @@
"help_stay_open": "Den Server weiterlaufen lassen, nachdem die Dateien verschickt wurden",
"help_verbose": "Schreibe Fehler von OnionShare nach stdout und Webfehler auf die Festplatte",
"help_filename": "Liste der zu teilenden Dateien oder Ordner",
- "gui_drag_and_drop": "Dateien und Ordner hierher ziehen,\num sie zu teilen",
+ "gui_drag_and_drop": "Dateien und Ordner hierher ziehen, um sie zu teilen",
"gui_add": "Hinzufügen",
"gui_delete": "Löschen",
"gui_choose_items": "Auswählen",
@@ -19,7 +19,7 @@
"gui_copy_url": "Adresse kopieren",
"gui_downloads": "Bisherige Downloads",
"gui_copied_url": "OnionShare-Adresse wurde in die Zwischenablage kopiert",
- "gui_please_wait": "Startet … Klicken zum Abbrechen.",
+ "gui_please_wait": "Startet… Klicken zum Abbrechen.",
"timeout_download_still_running": "Warte auf Beendigung des Downloads",
"systray_menu_exit": "Beenden",
"gui_settings_authenticate_password_option": "Passwort",
@@ -48,8 +48,8 @@
"give_this_url_stealth": "Gib dem Empfänger diese URL und die HidServAuth-Zeile:",
"give_this_url_receive": "Gib diese URL dem Sender:",
"give_this_url_receive_stealth": "Gib diese URL und die HidServAuth-Zeile an den Sender:",
- "not_a_readable_file": "{0:s} ist eine schreibgeschützte Datei.",
- "no_available_port": "Es konnte kein freier Port gefunden werden, um den Verteildienst zu starten",
+ "not_a_readable_file": "{0:s} ist keine lesbare Datei.",
+ "no_available_port": "Es konnte kein freier verfügbarer Port gefunden werden, um OnionShare zu starten",
"close_on_autostop_timer": "Angehalten, da der automatische Timer abgelaufen ist",
"systray_upload_started_title": "OnionShare Upload wurde gestartet",
"systray_upload_started_message": "Ein Benutzer hat begonnen, Dateien auf deinen Computer hochzuladen",
@@ -57,29 +57,29 @@
"help_receive": "Empfange Dateien anstatt sie zu senden",
"gui_share_stop_server_autostop_timer": "Teilen beenden ({})",
"gui_share_stop_server_autostop_timer_tooltip": "Zeit läuft in {} Sekunden ab",
- "gui_settings_connection_type_control_port_option": "Verbinde über den control port",
- "gui_settings_connection_type_socket_file_option": "Verbinde über ein socket file",
- "gui_settings_control_port_label": "Control port",
- "gui_settings_socket_file_label": "Socket file",
- "gui_settings_socks_label": "SOCKS Port",
- "gui_settings_authenticate_no_auth_option": "Keine Authentifizierung, oder Authentifizierung per cookie",
+ "gui_settings_connection_type_control_port_option": "Verbinde über den Steuerungs-Port",
+ "gui_settings_connection_type_socket_file_option": "Verbinde über einen Socket-Datei",
+ "gui_settings_control_port_label": "Steuerungs-Port",
+ "gui_settings_socket_file_label": "Socket-Datei",
+ "gui_settings_socks_label": "SOCKS-Port",
+ "gui_settings_authenticate_no_auth_option": "Keine Authentifizierung, oder Authentifizierung per Cookie",
"gui_settings_tor_bridges_no_bridges_radio_option": "Keine Bridges benutzen",
- "gui_settings_tor_bridges_obfs4_radio_option": "Benutze eingebaute obfs4 pluggable transports",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Benutze eingebaute obfs4 pluggable transports (benötigt obfs4proxy)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Benutze eingebaute meek_lite (Amazon) pluggable transports",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Benutze eingebaute meek_lite (Azure) pluggable transports (benötigt obfs4proxy)",
- "gui_settings_tor_bridges_custom_radio_option": "Benutze benutzerdefinierte bridges",
- "gui_settings_tor_bridges_custom_label": "Bridges findest du unter <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Benutze integrierte „obfs4 pluggable transports“",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Benutze integrierte „obfs4 pluggable transports“ (benötigt obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Benutze integrierte „meek_lite (Amazon) pluggable transports“",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Benutze integrierte „meek_lite (Azure) pluggable transports“ (benötigt obfs4proxy)",
+ "gui_settings_tor_bridges_custom_radio_option": "Benutze benutzerdefinierte Bridges",
+ "gui_settings_tor_bridges_custom_label": "Bridges findest du unter <a href=\"https://bridges.torproject.org/options?lang=de\">https://bridges.torproject.org</a>",
"gui_settings_autostop_timer_checkbox": "Automatische Stoppuhr verwenden",
- "settings_error_auth": "Mit {}:{} verbinden aber nicht authentifiziert. Eventuell handelt es sich nicht um einen Tor controller?",
- "settings_error_missing_password": "Mit dem Tor controller verbunden, aber er benötigt ein Passwort zur Authentifizierung.",
- "connecting_to_tor": "Verbinde mit dem Tornetzwerk",
+ "settings_error_auth": "Mit {}:{} verbinden aber nicht authentifiziert. Eventuell handelt es sich nicht um einen Tor-Controller?",
+ "settings_error_missing_password": "Mit dem Tor-Controller verbunden, aber er benötigt ein Passwort zur Authentifizierung.",
+ "connecting_to_tor": "Verbinde mit dem Tor-Netzwerk",
"gui_tor_connection_ask_quit": "Beenden",
"gui_tor_connection_lost": "Verbindung zu Tor getrennt.",
"help_stealth": "Nutze Klientauthorisierung (fortgeschritten)",
"gui_receive_start_server": "Empfangsmodus starten",
"gui_receive_stop_server": "Empfangsmodus stoppen",
- "gui_receive_stop_server_autostop_timer": "Empfängermodus stoppen ({} verbleibend)",
+ "gui_receive_stop_server_autostop_timer": "Empfangsmodus stoppen ({} verbleibend)",
"gui_receive_stop_server_autostop_timer_tooltip": "Zeit läuft in {} ab",
"gui_no_downloads": "Bisher keine Downloads",
"gui_copied_url_title": "OnionShare-Adresse kopiert",
@@ -91,50 +91,50 @@
"gui_quit_title": "Nicht so schnell",
"gui_share_quit_warning": "Du versendest gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?",
"gui_receive_quit_warning": "Du empfängst gerade Dateien. Bist du sicher, dass du OnionShare beenden willst?",
- "error_rate_limit": "Jemand hat zu viele falsche Versuche gemacht, dein Passwort zu erraten, deswegen hat OnionShare den Server gestoppt. Starte die Freigabe erneut und sende dem Empfänger eine neue Adresse zur Freigabe.",
- "zip_progress_bar_format": "Komprimierung: %p%",
- "error_stealth_not_supported": "Um die Clientauthorisierung zu nutzen, benötigst du mindestens Tor 0.2.9.1-alpha (oder Tor Browser 6.5) und python3-stem 1.5.0.",
- "error_ephemeral_not_supported": "OnionShare benötigt mindestens Tor 0.2.7.1 als auch python3-stem 1.4.0.",
+ "error_rate_limit": "Jemand hat zu viele falsche Versuche gemacht, dein Passwort zu erraten, deswegen hat OnionShare die Freigabe gestoppt. Starte die Freigabe erneut und sende dem Empfänger eine neue OnionShare-Adresse.",
+ "zip_progress_bar_format": "Komprimiere: %p%",
+ "error_stealth_not_supported": "Um die Client-Authorisierung zu nutzen, benötigst du mindestens Tor 0.2.9.1-alpha (oder Tor Browser 6.5) und python3-stem 1.5.0.",
+ "error_ephemeral_not_supported": "OnionShare benötigt mindestens sowohl Tor 0.2.7.1 als auch python3-stem 1.4.0.",
"gui_settings_whats_this": "<a href='{0:s}'>Was ist das?</a>",
- "gui_settings_stealth_option": "Clientauthorisierung benutzen",
+ "gui_settings_stealth_option": "Client-Authorisierung benutzen",
"gui_settings_autoupdate_label": "Suche nach neuer Version",
"gui_settings_autoupdate_option": "Benachrichtige mich, wenn eine neue Version verfügbar ist",
"gui_settings_autoupdate_check_button": "Suche nach neuer Version",
"gui_settings_general_label": "Allgemeine Einstellungen",
"gui_settings_sharing_label": "Freigabe-Einstellungen",
- "gui_settings_connection_type_automatic_option": "Versuche Autokonfiguration mittels Tor Browser",
+ "gui_settings_connection_type_automatic_option": "Versuche automatische Konfiguration mittels Tor Browser",
"gui_settings_connection_type_test_button": "Verbindung zu Tor testen",
"gui_settings_authenticate_label": "Authentifizierungseinstellungen für Tor",
- "gui_settings_tor_bridges": "Unterstützung für Tor Bridges",
- "gui_settings_meek_lite_expensive_warning": "Achtung: Die meek_lite bridges sind für das Tor Projekt sehr kostspielig.<br><br> Nutze sie nur, wenn du dich nicht direkt, per obfs4 Transport oder über andere, normale bridges zum Tornetzwerk verbinden kannst.",
- "gui_settings_tor_bridges_invalid": "Keine der bridges, die du angegeben hast, funktionieren.\nÜberprüfe sie oder gebe Andere an.",
- "settings_error_unknown": "Kann nicht zum Tor controller verbinden, weil deine Einstellungen keinen Sinn ergeben.",
- "settings_error_automatic": "Kann nicht zum Tor controller verbinden. Läuft der Tor Browser (zum Download unter torproject.org) im Hintergrund?",
- "settings_error_socket_port": "Kann unter {}:{} nicht zum Tor controller verbinden.",
- "settings_error_unreadable_cookie_file": "Verbindung zum Tor controller hergestellt, aber dein Passwort ist falsch oder dein Nutzer darf die Cookiedatei nicht lesen.",
+ "gui_settings_tor_bridges": "Unterstützung für Tor-Bridges",
+ "gui_settings_meek_lite_expensive_warning": "Achtung: Die „meek_lite“-Bridges sind für das Tor-Projekt sehr kostspielig.<br><br> Nutze sie nur, wenn du dich nicht direkt, per obfs4-Transport oder über andere, normale Bridges zum Tor-Netzwerk verbinden kannst.",
+ "gui_settings_tor_bridges_invalid": "Keine der Bridges, die du angegeben hast, funktioniert.\nÜberprüfe sie oder gib andere an.",
+ "settings_error_unknown": "Kann nicht zum Tor-Controller verbinden, weil deine Einstellungen keinen Sinn ergeben.",
+ "settings_error_automatic": "Kann nicht zum Tor-Controller verbinden. Läuft der Tor Browser (kann von https://www.torproject.org/ heruntergeladen werden) im Hintergrund?",
+ "settings_error_socket_port": "Kann unter {}:{} nicht zum Tor-Controller verbinden.",
+ "settings_error_unreadable_cookie_file": "Verbindung zum Tor-Controller hergestellt, aber dein Passwort ist falsch oder dein Nutzer darf die Cookie-Datei nicht lesen.",
"settings_error_bundled_tor_not_supported": "Im Entwicklermodus auf Windows oder macOS kannst du nicht die Tor-Version nutzen, die mit OnionShare geliefert wird.",
- "settings_error_bundled_tor_timeout": "Die Verbindung zum Tornetzwerk braucht zu lang. Bist du vielleicht nicht mit dem Internet verbunden oder geht die Uhr auf deinem System falsch?",
- "settings_error_bundled_tor_broken": "OnionShare konnte im Hintergrund nicht mit Tor verbinden:\n{}",
- "settings_test_success": "Verbunden mit dem Tor controller.\n\nTor-Version: {}\nUnterstützt vorübergehende onion services: {}.\nUnterstützt Client-Authorisierung: {}.\nUnterstützt .onion-Adressen der nächsten Generation: {}.",
+ "settings_error_bundled_tor_timeout": "Die Verbindung zum Tor-Netzwerk braucht zu lang. Bist du vielleicht nicht mit dem Internet verbunden oder geht die Uhr auf deinem System falsch?",
+ "settings_error_bundled_tor_broken": "OnionShare konnte sich nicht mit Tor verbinden:\n{}",
+ "settings_test_success": "Verbunden mit dem Tor-Controller.\n\nTor-Version: {}\nUnterstützt vorübergehende Onion-Dienste: {}.\nUnterstützt Client-Authorisierung: {}.\nUnterstützt .onion-Adressen der nächsten Generation: {}.",
"error_tor_protocol_error": "Es gab einen Fehler mit Tor: {}",
"error_tor_protocol_error_unknown": "Es gab einen unbekannten Fehler mit Tor",
"error_invalid_private_key": "Diese Art von privatem Schlüssel wird nicht unterstützt",
- "update_available": "Es gibt eine neue Version von OnionShare. <a href='{}'>Klicke hier</a> um sie herunterzuladen.<br><br>Du benutzt {} und die neueste Version ist {}.",
- "update_error_check_error": "Konnte nicht nach neueren Versionen suchen: Die OnionShare-Seite sagt, die aktuelle Version ist die nicht erkennbare '{}'…",
- "update_error_invalid_latest_version": "Konnte nicht nach neueren Versionen suchen: Bist du vielleicht nicht mit dem Tornetzwerk verbunden oder ist die OnionShareSeite offline?",
+ "update_available": "Es gibt eine neue Version von OnionShare. <a href='{}'>Klicke hier</a>, um sie herunterzuladen.<br><br>Du benutzt {}, und die neueste Version ist {}.",
+ "update_error_check_error": "Konnte nicht nach neueren Versionen suchen: Bist du vielleicht nicht mit dem Tor-Netzwerk verbunden oder ist die OnionShare-Webseite offline?",
+ "update_error_invalid_latest_version": "Konnte nicht nach neueren Versionen suchen: Laut OnionShare-Webseite ist die neueste Version die nicht bestimmbare Version '{}'…",
"update_not_available": "Du benutzt bereits die neueste Version von OnionShare.",
- "gui_tor_connection_ask": "Einstellungen öffnen, um die Verbindung zum Tornetzwerk in Ordnung zu bringen?",
+ "gui_tor_connection_ask": "Einstellungen öffnen, um die Verbindung zum Tor-Netzwerk zu reparieren?",
"gui_tor_connection_ask_open_settings": "Ja",
- "gui_tor_connection_error_settings": "Versuche in den Einstellung zu ändern, wie sich OnionShare mit dem Tornetzwerk verbindet.",
+ "gui_tor_connection_error_settings": "Versuche in den Einstellungen zu ändern, wie sich OnionShare mit dem Tor-Netzwerk verbindet.",
"gui_tor_connection_canceled": "Konnte keine Verbindung zu Tor herstellen.\n\nStelle sicher, dass du mit dem Internet verbunden bist, öffne OnionShare erneut und richte die Verbindung zu Tor ein.",
"share_via_onionshare": "Teilen über OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Nutze das alte Adressformat",
"gui_save_private_key_checkbox": "Nutze eine gleichbleibende Adresse",
"gui_share_url_description": "<b>Jeder</b> mit dieser OnionShare-Adresse kann deine Dateien mit dem <b>Tor Browser</b> <b>herunterladen</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Jeder</b> mit dieser OnionShare-Adresse kann mit dem <b>Tor Browser</b> Dateien auf deinen Computer <b>hochladen</b>: <img src='{}' />",
- "gui_url_label_persistent": "Dieser Server wird nicht automatisch stoppen.<br><br>Jeder folgende Server wird die Adresse erneut nutzen. (Um Adressen nur einmal zu nutzen, schalte \"Nutze beständige Adressen\" in den Einstellungen aus.)",
- "gui_url_label_stay_open": "Dieser Server wird nicht automatisch stoppen.",
- "gui_url_label_onetime": "Dieser Server wird nach dem ersten vollständigen Download stoppen.",
+ "gui_url_label_persistent": "Diese Freigabe wird nicht automatisch stoppen.<br><br>Jede folgende Freigabe wird die Adresse erneut nutzen. (Um Adressen nur einmal zu nutzen, schalte \"Nutze beständige Adressen\" in den Einstellungen aus.)",
+ "gui_url_label_stay_open": "Diese Freigabe wird nicht automatisch stoppen.",
+ "gui_url_label_onetime": "Diese Freigabe wird nach dem ersten vollständigen Download stoppen.",
"gui_status_indicator_share_working": "Starte…",
"gui_status_indicator_share_started": "Teilen",
"gui_status_indicator_receive_stopped": "Bereit zum Empfangen",
@@ -148,7 +148,7 @@
"error_cannot_create_downloads_dir": "Konnte den Ordner für den Empfängermodus nicht erstellen: {}",
"receive_mode_downloads_dir": "Dateien, die dir geschickt werden, findest du in diesem Ordner: {}",
"receive_mode_warning": "Achtung: Im Empfängermodus können Leute Dateien auf deinen Computer laden. Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust oder wenn du genau weißt, was du tust.",
- "gui_receive_mode_warning": "Im Empfängermodus können Personen Dateien auf deinen Computer laden.<br><br><b>Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust oder wenn du genau weißt, was du tust.</b>",
+ "gui_receive_mode_warning": "Im Empfangsmodus können Personen Dateien auf deinen Computer laden.<br><br><b>Einige Dateien können die Kontrolle über deinen Computer übernehmen, wenn du sie öffnest. Öffne nur Dateien von Personen, denen du vertraust, oder wenn du genau weißt, was du tust.</b>",
"receive_mode_received_file": "Empfangen: {}",
"gui_mode_share_button": "Versende Dateien",
"gui_mode_receive_button": "Empfange Dateien",
@@ -171,12 +171,12 @@
"gui_settings_language_changed_notice": "Starte OnionShare neu, damit die neue Sprache übernommen wird.",
"help_config": "Ort deiner eigenen JSON Konfigurationsdatei (optional)",
"timeout_upload_still_running": "Warte bis Upload vollständig ist",
- "gui_settings_stealth_hidservauth_string": "Da dein privater Schlüssel jetzt gespeichert wurde um ihn später erneut zu nutzen, kannst du jetzt\nklicken um deinen HidServAuth zu kopieren.",
+ "gui_settings_stealth_hidservauth_string": "Da dein privater Schlüssel jetzt gespeichert wurde, um ihn später erneut zu nutzen, kannst du jetzt klicken, um deinen HidServAuth zu kopieren.",
"gui_settings_connection_type_bundled_option": "Die integrierte Tor-Version von OnionShare nutzen",
- "settings_error_socket_file": "Kann nicht mittels des Tor Controller Socket {} verbinden.",
- "gui_server_started_after_autostop_timer": "Die Zeit ist abgelaufen bevor der Server gestartet werden konnte.\nBitte starte einen erneuten Teilvorgang.",
- "gui_server_autostop_timer_expired": "Der Stop-Timer ist bereits abgelaufen. Bitte pass diesen an, um das Teilen zu starten.",
- "gui_status_indicator_share_stopped": "Bereit zum teilen",
+ "settings_error_socket_file": "Kann nicht mittels des Tor-Controller-Socket {} verbinden.",
+ "gui_server_started_after_autostop_timer": "Die Zeit ist abgelaufen, bevor der Server gestartet werden konnte. Bitte starte einen erneuten Teilvorgang.",
+ "gui_server_autostop_timer_expired": "Der automatische Stopp-Timer ist bereits abgelaufen. Bitte pass diesen an, um das Teilen zu starten.",
+ "gui_status_indicator_share_stopped": "Bereit zum Teilen",
"history_in_progress_tooltip": "{} läuft",
"receive_mode_upload_starting": "Hochladen von insgesamt {} beginnt",
"systray_page_loaded_title": "Seite geladen",
@@ -184,10 +184,10 @@
"gui_upload_finished": "{} hochgeladen",
"gui_add_files": "Dateien hinzufügen",
"gui_add_folder": "Ordner hinzufügen",
- "gui_connect_to_tor_for_onion_settings": "Verbinde dich mit Tor, um die Einstellungen für onion services zu sehen",
- "gui_url_label_onetime_and_persistent": "Dieser Server wird nicht automatisch stoppen. >br><br>Jeder nachfolgende Server wird die gleiche Adresse nutzen. (Um jedes mal eine andere Adresse zu nutzen, schalte \"Nutze eine gleichbleibende Adresse\" in den Einstellungen aus.)",
+ "gui_connect_to_tor_for_onion_settings": "Verbinde dich mit Tor, um die Einstellungen für die Onion-Dienste zu sehen",
+ "gui_url_label_onetime_and_persistent": "Diese Freigabe wird nicht automatisch stoppen. >br><br>Jede nachfolgende Freigabe wird die gleiche Adresse nutzen. (Um jedes Mal eine andere Adresse zu nutzen, schalte \"Nutze eine gleichbleibende Adresse\" in den Einstellungen aus.)",
"gui_settings_onion_label": "Adresseinstellungen",
- "error_cannot_create_data_dir": "Der Ordner für die OnionSharedateien konnte nicht erstellt werden: {}",
+ "error_cannot_create_data_dir": "Der Ordner für die OnionShare-Dateien konnte nicht erstellt werden: {}",
"receive_mode_data_dir": "Die Dateien, die dir geschickt wurden, findest du in folgendem Ordner: {}",
"gui_settings_data_dir_label": "Speichere Dateien in",
"gui_settings_data_dir_browse_button": "Durchsuchen",
@@ -201,26 +201,26 @@
"systray_receive_started_title": "Empfange",
"systray_receive_started_message": "Jemand sendet dir Dateien",
"gui_all_modes_history": "Verlauf",
- "gui_all_modes_clear_history": "Alle löschen",
+ "gui_all_modes_clear_history": "Liste leeren",
"gui_all_modes_transfer_started": "{} gestartet",
"gui_all_modes_transfer_finished_range": "{} - {} übertragen",
"gui_all_modes_transfer_finished": "{} übertragen",
"gui_all_modes_transfer_canceled_range": "{} - {} abgebrochen",
"gui_all_modes_transfer_canceled": "{} abgebrochen",
"gui_all_modes_progress_starting": "{0:s}, %p% (berechne)",
- "gui_share_mode_no_files": "Bisher keine Dateien versendet",
+ "gui_share_mode_no_files": "Noch keine Dateien versendet",
"gui_share_mode_autostop_timer_waiting": "Warte auf Abschluss des Sendens",
- "gui_receive_mode_no_files": "Bisher keine Dateien empfangen",
+ "gui_receive_mode_no_files": "Noch keine Dateien empfangen",
"gui_receive_mode_autostop_timer_waiting": "Warte auf Abschluss des Empfangs",
"gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
"gui_all_modes_progress_complete": "%p%, {0:s} vergangen.",
"gui_settings_autostart_timer_checkbox": "Automatische Startuhr verwenden",
- "gui_settings_autostart_timer": "Teilen starten bei:",
+ "gui_settings_autostart_timer": "Teilen starten um:",
"gui_waiting_to_start": "Geplant in {} zu starten. Klicken zum Abbrechen.",
- "gui_stop_server_autostop_timer_tooltip": "Stoptimer endet um {}",
- "gui_start_server_autostart_timer_tooltip": "Automatischer Stoptimer endet um {}",
- "gui_server_autostart_timer_expired": "Die geplante Zeit ist bereits vergangen. Bitte passe diese an, um das Teilen zu starten.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die Stopzeit kann nicht gleich oder früher als die Startzeit sein. Bitte passe die Zeiten an, um das Teilen zu starten.",
+ "gui_stop_server_autostop_timer_tooltip": "Automatischer Stopptimer endet um {}",
+ "gui_start_server_autostart_timer_tooltip": "Automatischer Stopptimer endet um {}",
+ "gui_server_autostart_timer_expired": "Die geplante Zeit ist bereits abgelaufen. Bitte passe diese an, um das Teilen zu starten.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Die automatische Stoppzeit kann nicht gleich oder früher als die Startzeit sein. Bitte passe die Zeiten an, um das Teilen zu starten.",
"gui_status_indicator_share_scheduled": "Geplant…",
"gui_status_indicator_receive_scheduled": "Geplant…",
"days_first_letter": "d",
@@ -240,5 +240,48 @@
"systray_individual_file_downloaded_title": "Individuelle Datei geladen",
"gui_settings_individual_downloads_label": "Abwählen, um den Download einzelner Dateien zu erlauben",
"history_requests_tooltip": "{} Web-Anfragen",
- "systray_individual_file_downloaded_message": "Individuelle Datei {} betrachtet"
+ "systray_individual_file_downloaded_message": "Individuelle Datei {} betrachtet",
+ "mode_settings_share_autostop_sharing_checkbox": "Dateifreigabe beenden, sobald alle Dateien versendet wurden (abwählen, um das Herunterladen einzelner Dateien zu erlauben)",
+ "mode_settings_website_disable_csp_checkbox": "Content-Security-Policy-Header deaktivieren (ermöglicht es, Ressourcen von Drittanbietern auf deiner Onion-Webseite einzubinden)",
+ "mode_settings_receive_data_dir_browse_button": "Durchsuchen",
+ "mode_settings_receive_data_dir_label": "Dateien speichern unter",
+ "mode_settings_client_auth_checkbox": "Benutze Client-Authorisierung",
+ "mode_settings_legacy_checkbox": "Benutze ein veraltetes Adressformat (Onion-Dienste-Adressformat v2, nicht empfohlen)",
+ "mode_settings_autostop_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt stoppen",
+ "mode_settings_autostart_timer_checkbox": "Onion-Dienst zu einem festgelegten Zeitpunkt starten",
+ "mode_settings_public_checkbox": "Kein Passwort verwenden",
+ "mode_settings_persistent_checkbox": "Speichere diesen Reiter und öffne ihn automatisch, wenn ich OnionShare starte",
+ "mode_settings_advanced_toggle_hide": "Erweiterte Einstellungen ausblenden",
+ "mode_settings_advanced_toggle_show": "Erweiterte Einstellungen anzeigen",
+ "gui_quit_warning_cancel": "Abbrechen",
+ "gui_quit_warning_description": "In einigen Reitern sind noch Dateifreigaben aktiv. Wenn du beendest, werden alle Reiter geschlossen. Möchtest du wirklich beenden?",
+ "gui_quit_warning_title": "Bist du sicher?",
+ "gui_close_tab_warning_cancel": "Abbrechen",
+ "gui_close_tab_warning_close": "Schließen",
+ "gui_close_tab_warning_website_description": "Du hostest gerade eine Webseite. Möchtest du diesen Reiter wirklich schließen?",
+ "gui_close_tab_warning_receive_description": "Du empfängst gerade Dateien. Möchtest du diesen Reiter wirklich schließen?",
+ "gui_close_tab_warning_share_description": "Du versendest gerade Dateien. Möchtest du diesen Reiter wirklich schließen?",
+ "gui_close_tab_warning_persistent_description": "Dies ist ein dauerhafter Reiter. Wenn du ihn schließt, verlierst du die dazugehörige Onion-Adresse. Möchtest du den Reiter wirklich schließen?",
+ "gui_close_tab_warning_title": "Bist du sicher?",
+ "gui_new_tab_website_description": "Hoste eine statische HTML-Onion-Webseite auf deinem Computer.",
+ "gui_new_tab_website_button": "Webseite veröffentlichen",
+ "gui_new_tab_receive_description": "Verwandle deinen Computer in eine Online-Packstation. Nutzer des Tor Browsers können dir Dateien auf deinen Computer schicken.",
+ "gui_new_tab_receive_button": "Dateien empfangen",
+ "gui_new_tab_share_description": "Wähle Dateien auf deinem Computer, um sie jemand anderem zu schicken. Die Empfänger benötigen den Tor Browser, um die Dateien empfangen zu können.",
+ "gui_new_tab_share_button": "Dateien teilen",
+ "gui_new_tab_tooltip": "Einen neuen Reiter öffnen",
+ "gui_new_tab": "Neuer Reiter",
+ "gui_settings_website_label": "Webseiten-Einstellung",
+ "gui_settings_csp_header_disabled_option": "Content-Security-Policy-Header deaktivieren",
+ "gui_tab_name_website": "Webseite",
+ "gui_tab_name_chat": "Chat",
+ "gui_tab_name_receive": "Empfangen",
+ "gui_tab_name_share": "Teilen",
+ "gui_file_selection_remove_all": "Alle entfernen",
+ "gui_remove": "Entfernen",
+ "gui_new_tab_chat_button": "Anonym chatten",
+ "gui_qr_code_dialog_title": "OnionShare QR-Code",
+ "gui_show_url_qr_code": "QR-Code anzeigen",
+ "gui_chat_stop_server": "Chatserver stoppen",
+ "gui_chat_start_server": "Chatserver starten"
}
diff --git a/share/locale/el.json b/desktop/src/onionshare/resources/locale/el.json
index 0fa50def..b4645890 100644
--- a/share/locale/el.json
+++ b/desktop/src/onionshare/resources/locale/el.json
@@ -99,7 +99,7 @@
"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\"> https://bridges.torproject.org</a>",
+ "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_invalid": "Δεν λειτούργησε κάποιο από τα bridges που προσθέσατε.\nΞαναελέγξτε τα ή προσθέστε άλλα.",
"gui_settings_button_save": "Αποθήκευση",
"gui_settings_button_cancel": "Ακύρωση",
@@ -114,7 +114,7 @@
"settings_error_missing_password": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.",
"settings_error_unreadable_cookie_file": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλα ο κωδικός πιθανόν να είναι λάθος, ή δεν επιτρέπεται στο χρήστη να διαβάζει αρχεία cookie.",
"settings_error_bundled_tor_not_supported": "Η χρήση της έκδοσης Tor που περιέχεται στο OnionShare δεν είναι συμβατή με το περιβάλλον προγραμματιστή σε Windows ή macOS.",
- "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor αργεί αρκετά. Ισως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι του συστήματος δεν ειναι σωστό;",
+ "settings_error_bundled_tor_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: {}",
diff --git a/share/locale/en.json b/desktop/src/onionshare/resources/locale/en.json
index 87cfd60f..b56c52d8 100644
--- a/share/locale/en.json
+++ b/desktop/src/onionshare/resources/locale/en.json
@@ -1,13 +1,11 @@
{
- "preparing_files": "Compressing files.",
"not_a_readable_file": "{0:s} is not a readable file.",
- "no_available_port": "Could not find an available port to start the onion service",
"other_page_loaded": "Address loaded",
"incorrect_password": "Incorrect password",
"close_on_autostop_timer": "Stopped because auto-stop timer ran out",
"closing_automatically": "Stopped because transfer is complete",
"large_filesize": "Warning: Sending a large share could take hours",
- "gui_drag_and_drop": "Drag and drop files and folders\nto start sharing",
+ "gui_drag_and_drop": "Drag and drop files and folders to start sharing",
"gui_add": "Add",
"gui_add_files": "Add Files",
"gui_add_folder": "Add Folder",
@@ -17,12 +15,14 @@
"gui_share_start_server": "Start sharing",
"gui_share_stop_server": "Stop sharing",
"gui_share_stop_server_autostop_timer": "Stop Sharing ({})",
+ "gui_chat_start_server": "Start chat server",
+ "gui_chat_stop_server": "Stop chat server",
"gui_stop_server_autostop_timer_tooltip": "Auto-stop timer ends at {}",
"gui_start_server_autostart_timer_tooltip": "Auto-start timer ends at {}",
"gui_receive_start_server": "Start Receive Mode",
"gui_receive_stop_server": "Stop Receive Mode",
"gui_receive_stop_server_autostop_timer": "Stop Receive Mode ({} remaining)",
- "gui_receive_flatpak_data_dir": "Because you installed OnionShare using flatpak, you must save files to a folder in ~/OnionShare.",
+ "gui_receive_flatpak_data_dir": "Because you installed OnionShare using Flatpak, you must save files to a folder in ~/OnionShare.",
"gui_copy_url": "Copy Address",
"gui_copy_hidservauth": "Copy HidServAuth",
"gui_canceled": "Canceled",
@@ -30,30 +30,19 @@
"gui_copied_url": "OnionShare address copied to clipboard",
"gui_copied_hidservauth_title": "Copied HidServAuth",
"gui_copied_hidservauth": "HidServAuth line copied to clipboard",
- "gui_show_url_qr_code": "Show QR code",
+ "gui_show_url_qr_code": "Show QR Code",
"gui_qr_code_dialog_title": "OnionShare QR Code",
"gui_qr_code_description": "Scan this QR code with a QR reader, such as the camera on your phone, in order to more easily share the OnionShare address with someone.",
"gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.",
"gui_please_wait": "Starting… Click to cancel.",
"error_rate_limit": "Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.",
"zip_progress_bar_format": "Compressing: %p%",
- "error_stealth_not_supported": "To use client authorization, you need at least both Tor 0.2.9.1-alpha (or Tor Browser 6.5) and python3-stem 1.5.0.",
- "error_ephemeral_not_supported": "OnionShare requires at least both Tor 0.2.7.1 and python3-stem 1.4.0.",
"gui_settings_window_title": "Settings",
- "gui_settings_whats_this": "<a href='{0:s}'>What's this?</a>",
- "gui_settings_stealth_option": "Use client authorization",
- "gui_settings_stealth_hidservauth_string": "Having saved your private key for reuse, means you can now click to copy your HidServAuth.",
"gui_settings_autoupdate_label": "Check for new version",
"gui_settings_autoupdate_option": "Notify me when a new version is available",
"gui_settings_autoupdate_timestamp": "Last checked: {}",
"gui_settings_autoupdate_timestamp_never": "Never",
"gui_settings_autoupdate_check_button": "Check for New Version",
- "gui_settings_general_label": "General settings",
- "gui_settings_onion_label": "Onion settings",
- "gui_settings_sharing_label": "Sharing settings",
- "gui_settings_close_after_first_download_option": "Stop sharing after files have been sent",
- "gui_settings_csp_header_disabled_option": "Disable Content Security Policy header",
- "gui_settings_individual_downloads_label": "Uncheck to allow downloading individual files",
"gui_settings_connection_type_label": "How should OnionShare connect to Tor?",
"gui_settings_connection_type_bundled_option": "Use the Tor version built into OnionShare",
"gui_settings_connection_type_automatic_option": "Attempt auto-configuration with Tor Browser",
@@ -80,23 +69,7 @@
"gui_settings_button_save": "Save",
"gui_settings_button_cancel": "Cancel",
"gui_settings_button_help": "Help",
- "gui_settings_autostop_timer_checkbox": "Use auto-stop timer",
- "gui_settings_autostop_timer": "Stop the share at:",
- "gui_settings_autostart_timer_checkbox": "Use auto-start timer",
- "gui_settings_autostart_timer": "Start the share at:",
- "settings_error_unknown": "Can't connect to Tor controller because your settings don't make sense.",
- "settings_error_automatic": "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?",
- "settings_error_socket_port": "Can't connect to the Tor controller at {}:{}.",
- "settings_error_socket_file": "Can't connect to the Tor controller using socket file {}.",
- "settings_error_auth": "Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?",
- "settings_error_missing_password": "Connected to Tor controller, but it requires a password to authenticate.",
- "settings_error_unreadable_cookie_file": "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file.",
- "settings_error_bundled_tor_not_supported": "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS.",
- "settings_error_bundled_tor_timeout": "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?",
- "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}",
"settings_test_success": "Connected to the Tor controller.\n\nTor version: {}\nSupports ephemeral onion services: {}.\nSupports client authentication: {}.\nSupports next-gen .onion addresses: {}.",
- "error_tor_protocol_error": "There was an error with Tor: {}",
- "error_tor_protocol_error_unknown": "There was an unknown error with Tor",
"connecting_to_tor": "Connecting to the Tor network",
"update_available": "New OnionShare out. <a href='{}'>Click here</a> to get it.<br><br>You are using {} and the latest is {}.",
"update_error_invalid_latest_version": "Could not check for new version: The OnionShare website is saying the latest version is the unrecognizable '{}'…",
@@ -113,9 +86,6 @@
"gui_server_autostart_timer_expired": "The scheduled time has already passed. Please adjust it to start sharing.",
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "The auto-stop time can't be the same or earlier than the auto-start time. Please adjust it to start sharing.",
"share_via_onionshare": "Share via OnionShare",
- "gui_connect_to_tor_for_onion_settings": "Connect to Tor to see onion service settings",
- "gui_use_legacy_v2_onions_checkbox": "Use legacy addresses",
- "gui_save_private_key_checkbox": "Use a persistent address",
"gui_share_url_description": "<b>Anyone</b> with this OnionShare address can <b>download</b> your files using the <b>Tor Browser</b>: <img src='{}' />",
"gui_website_url_description": "<b>Anyone</b> with this OnionShare address can <b>visit</b> your website using the <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Anyone</b> with this OnionShare address can <b>upload</b> files to your computer using the <b>Tor Browser</b>: <img src='{}' />",
@@ -138,14 +108,6 @@
"history_requests_tooltip": "{} web requests",
"error_cannot_create_data_dir": "Could not create OnionShare data folder: {}",
"gui_receive_mode_warning": "Receive mode lets people upload files to your computer.<br><br><b>Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.</b>",
- "gui_mode_share_button": "Share Files",
- "gui_mode_receive_button": "Receive Files",
- "gui_mode_website_button": "Publish Website",
- "gui_settings_receiving_label": "Receiving settings",
- "gui_settings_website_label": "Website settings",
- "gui_settings_data_dir_label": "Save files to",
- "gui_settings_data_dir_browse_button": "Browse",
- "gui_settings_public_mode_checkbox": "Public mode",
"gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}",
"gui_settings_language_label": "Preferred language",
"gui_settings_language_changed_notice": "Restart OnionShare for the new language to be applied.",
@@ -163,10 +125,6 @@
"gui_all_modes_history": "History",
"gui_all_modes_clear_history": "Clear All",
"gui_all_modes_transfer_started": "Started {}",
- "gui_all_modes_transfer_finished_range": "Transferred {} - {}",
- "gui_all_modes_transfer_finished": "Transferred {}",
- "gui_all_modes_transfer_canceled_range": "Canceled {} - {}",
- "gui_all_modes_transfer_canceled": "Canceled {}",
"gui_all_modes_progress_complete": "%p%, {0:s} elapsed.",
"gui_all_modes_progress_starting": "{0:s}, %p% (calculating)",
"gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
@@ -182,11 +140,17 @@
"gui_new_tab": "New Tab",
"gui_new_tab_tooltip": "Open a new tab",
"gui_new_tab_share_button": "Share Files",
- "gui_new_tab_share_description": "Choose files on your computer to send to someone else. The person or people who you want to send files to will need to use Tor Browser to download them from you.",
"gui_new_tab_receive_button": "Receive Files",
- "gui_new_tab_receive_description": "Turn your computer into an online dropbox. People will be able to use Tor Browser to send files to your computer.",
- "gui_new_tab_website_button": "Publish Website",
- "gui_new_tab_website_description": "Host a static HTML onion website from your computer.",
+ "gui_new_tab_website_button": "Host a Website",
+ "gui_new_tab_chat_button": "Chat Anonymously",
+ "gui_main_page_share_button": "Start Sharing",
+ "gui_main_page_receive_button": "Start Receiving",
+ "gui_main_page_website_button": "Start Hosting",
+ "gui_main_page_chat_button": "Start Chatting",
+ "gui_tab_name_share": "Share",
+ "gui_tab_name_receive": "Receive",
+ "gui_tab_name_website": "Website",
+ "gui_tab_name_chat": "Chat",
"gui_close_tab_warning_title": "Are you sure?",
"gui_close_tab_warning_persistent_description": "This tab is persistent. If you close it you'll lose the onion address that it's using. Are you sure you want to close it?",
"gui_close_tab_warning_share_description": "You're in the process of sending files. Are you sure you want to close this tab?",
@@ -209,5 +173,19 @@
"mode_settings_share_autostop_sharing_checkbox": "Stop sharing after files have been sent (uncheck to allow downloading individual files)",
"mode_settings_receive_data_dir_label": "Save files to",
"mode_settings_receive_data_dir_browse_button": "Browse",
- "mode_settings_website_disable_csp_checkbox": "Disable Content Security Policy header (allows your website to use third-party resources)"
+ "mode_settings_website_disable_csp_checkbox": "Don't send Content Security Policy header (allows your website to use third-party resources)",
+ "gui_all_modes_transfer_finished_range": "Transferred {} - {}",
+ "gui_all_modes_transfer_finished": "Transferred {}",
+ "gui_all_modes_transfer_canceled_range": "Canceled {} - {}",
+ "gui_all_modes_transfer_canceled": "Canceled {}",
+ "settings_error_unknown": "Can't connect to Tor controller because your settings don't make sense.",
+ "settings_error_automatic": "Could not connect to the Tor controller. Is Tor Browser (available from torproject.org) running in the background?",
+ "settings_error_socket_port": "Can't connect to the Tor controller at {}:{}.",
+ "settings_error_socket_file": "Can't connect to the Tor controller using socket file {}.",
+ "settings_error_auth": "Connected to {}:{}, but can't authenticate. Maybe this isn't a Tor controller?",
+ "settings_error_missing_password": "Connected to Tor controller, but it requires a password to authenticate.",
+ "settings_error_unreadable_cookie_file": "Connected to the Tor controller, but password may be wrong, or your user is not permitted to read the cookie file.",
+ "settings_error_bundled_tor_not_supported": "Using the Tor version that comes with OnionShare does not work in developer mode on Windows or macOS.",
+ "settings_error_bundled_tor_timeout": "Taking too long to connect to Tor. Maybe you aren't connected to the Internet, or have an inaccurate system clock?",
+ "settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}"
} \ No newline at end of file
diff --git a/share/locale/eo.json b/desktop/src/onionshare/resources/locale/eo.json
index ea3cef9c..ea3cef9c 100644
--- a/share/locale/eo.json
+++ b/desktop/src/onionshare/resources/locale/eo.json
diff --git a/share/locale/es.json b/desktop/src/onionshare/resources/locale/es.json
index 3c5c07f1..e101ae5b 100644
--- a/share/locale/es.json
+++ b/desktop/src/onionshare/resources/locale/es.json
@@ -4,48 +4,48 @@
"ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor",
"not_a_file": "{0:s} no es un archivo válido.",
"other_page_loaded": "Dirección cargada",
- "closing_automatically": "Se detuvo porque finalizó la transferencia",
+ "closing_automatically": "Detenido porque ya se completó la transferencia",
"help_local_only": "No usar Tor (sólo para desarrollo)",
"help_stay_open": "Continuar compartiendo luego que los archivos hayan sido enviados",
"help_verbose": "Enviar los errores de OnionShare a stdout, y los errores web al disco",
"help_filename": "Lista de archivos o carpetas para compartir",
- "gui_drag_and_drop": "Arrastre y coloque archivos y carpetas\npara comenzar a compartir",
+ "gui_drag_and_drop": "Arrastra y suelta archivos y carpetas para comenzar a compartir",
"gui_add": "Añadir",
"gui_delete": "Eliminar",
"gui_choose_items": "Elegir",
- "gui_share_start_server": "Comenzar a compartir",
- "gui_share_stop_server": "Dejar de compartir",
- "gui_copy_url": "Copiar la dirección",
+ "gui_share_start_server": "Comienza a compartir",
+ "gui_share_stop_server": "Deja de compartir",
+ "gui_copy_url": "Copiar Dirección",
"gui_downloads": "Historial de descargas",
- "gui_copied_url": "Se copió la dirección de OnionShare en el portapapeles",
+ "gui_copied_url": "Dirección OnionShare copiada al portapapeles",
"config_onion_service": "Configurando el servicio cebolla en el puerto {0:d}.",
"give_this_url_stealth": "Dale esta dirección y la línea de HidServAuth a la persona a la que le estás enviando el archivo:",
- "no_available_port": "No se pudo iniciar el servicio cebolla porque no había puerto disponible",
- "close_on_autostop_timer": "Se detuvo porque se acabó el temporizador de parada automática",
+ "no_available_port": "No se pudo encontrar un puerto disponible para iniciar el servicio cebolla",
+ "close_on_autostop_timer": "Detenido porque el temporizador de parada automática expiró",
"timeout_download_still_running": "Esperando a que se complete la descarga",
- "large_filesize": "Atención: enviar un archivo grande puede demorar horas",
+ "large_filesize": "Advertencia: Enviar un recurso compartido grande podría llevar horas",
"help_autostop_timer": "Dejar de compartir después de una determinada cantidad de segundos",
"help_stealth": "Usar autorización de cliente (avanzada)",
"help_config": "Ubicación del archivo de configuración JSON personalizado (opcional)",
- "gui_copied_url_title": "Se copió la dirección de OnionShare",
- "gui_copied_hidservauth": "Se copió el renglón de HidServAuth en el portapapeles",
- "gui_please_wait": "Comenzando… Pulse para cancelar.",
+ "gui_copied_url_title": "Dirección OnionShare Copiada",
+ "gui_copied_hidservauth": "Línea HidServAuth copiada al portapapeles",
+ "gui_please_wait": "Comenzando… Clic para cancelar.",
"gui_quit_title": "No tan rápido",
- "error_rate_limit": "Alguien ha intentado adivinar su contraseña demasiadas veces, por lo que OnionShare ha detenido el servidor. Inicie la compartición de nuevo y envíe una dirección nueva al receptor.",
- "zip_progress_bar_format": "Comprimiendo: %p %",
- "error_stealth_not_supported": "Para utilizar la autorización de cliente, necesita como mínimo Tor 0.2.9.1-alpha (o Tor Browser 6.5) y python3-stem 1.5.0.",
+ "error_rate_limit": "Alguien ha intentado adivinar tu contraseña demasiadas veces, por lo que OnionShare ha detenido al servidor. Inicia la compartición de nuevo y envía una dirección nueva al receptor.",
+ "zip_progress_bar_format": "Comprimiendo: %p%",
+ "error_stealth_not_supported": "Para utilizar autorización de cliente, necesitas al menos Tor 0.2.9.1-alpha (o Navegador Tor 6.5) y python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare necesita por lo menos Tor 0.2.7.1 y python3-stem 1.4.0.",
"gui_settings_window_title": "Configuración",
"gui_settings_stealth_option": "Utilizar autorización de cliente",
- "gui_settings_stealth_hidservauth_string": "Tras haber guardado su clave privada para reutilizarla, puede pulsar para copiar la ficha HidServAuth.",
- "gui_settings_autoupdate_label": "Buscar actualizaciones",
- "gui_settings_autoupdate_option": "Notificarme cuando haya una versión nueva disponible",
- "gui_settings_autoupdate_check_button": "Buscar actualizaciones",
- "gui_settings_connection_type_bundled_option": "Use la versión Tor incorporada en OnionShare",
+ "gui_settings_stealth_hidservauth_string": "Habiendo guardado tu clave privada para reutilizarla, ahora puedes hacer clic para copiar tu HidServAuth.",
+ "gui_settings_autoupdate_label": "Comprobar nuevas versiones",
+ "gui_settings_autoupdate_option": "Notifícame cuando haya una versión nueva disponible",
+ "gui_settings_autoupdate_check_button": "Comprobar Nueva Versión",
+ "gui_settings_connection_type_bundled_option": "Usa la versión de Tor incorporada en OnionShare",
"gui_settings_connection_type_automatic_option": "Intentar la configuración automática con el Navegador Tor",
"gui_settings_connection_type_test_button": "Probar la conexión a Tor",
- "gui_settings_tor_bridges": "Compatibilidad con puentes de Tor",
- "gui_settings_tor_bridges_invalid": "Ninguno de los puentes que ha añadido funciona.\nVuelva a verificarlos o añada otros.",
+ "gui_settings_tor_bridges": "Soporte para puentes Tor",
+ "gui_settings_tor_bridges_invalid": "No funciona ninguno de los puentes agregados.\nVuelve a comprobarlos o añade otros.",
"settings_saved": "Ajustes guardados en {}",
"give_this_url_receive": "Dele esta dirección al remitente:",
"give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:",
@@ -60,55 +60,55 @@
"systray_upload_started_title": "Subida OnionShare Iniciada",
"systray_upload_started_message": "Un usuario comenzó a subir archivos a tu computadora",
"help_receive": "Recibir recursos compartidos en lugar de enviarlos",
- "gui_share_stop_server_autostop_timer": "Dejar de compartir (quedan {})",
+ "gui_share_stop_server_autostop_timer": "Deja de compartir ({})",
"gui_share_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}",
- "gui_receive_start_server": "Iniciar el modo de recepción",
- "gui_receive_stop_server": "Detener el modo de recepción",
- "gui_receive_stop_server_autostop_timer": "Detener el modo de recepción (quedan {})",
+ "gui_receive_start_server": "Iniciar Modo de Recepción",
+ "gui_receive_stop_server": "Detener Modo de Recepción",
+ "gui_receive_stop_server_autostop_timer": "Detener Modo de Recepción (quedan {})",
"gui_receive_stop_server_autostop_timer_tooltip": "El temporizador de parada automática termina en {}",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_no_downloads": "Ninguna Descarga Todavía",
"gui_canceled": "Cancelado",
- "gui_copied_hidservauth_title": "Se copió la ficha de HidServAuth",
- "settings_error_unknown": "No se puede conectar con el controlador de Tor porque su configuración es incoherente.",
- "settings_error_automatic": "No se puede conectar con controlador Tor. ¿Se está ejecutando el Navegador Tor (disponible en torproject.org) en segundo plano?",
- "settings_error_socket_port": "No se puede conectar con el controlador de Tor en {}:{}.",
- "settings_error_socket_file": "No se puede conectar con el controlador de Tor mediante el archivo de socket {}.",
- "settings_error_auth": "Se conectó con {}:{}, pero no se puede autenticar. ¿Quizás este no sea un controlador de Tor?",
- "settings_error_missing_password": "Se conectó con el controlador de Tor, pero requiere una contraseña para autenticarse.",
- "settings_error_unreadable_cookie_file": "Se conectó con el controlador de Tor, pero puede que la contraseña sea incorrecta o que no tenga permiso de lectura del archivo de «cookie».",
+ "gui_copied_hidservauth_title": "HidServAuth Copiada",
+ "settings_error_unknown": "No se puede conectar al controlador Tor porque tu configuración no tiene sentido.",
+ "settings_error_automatic": "No se puede conectar al controlador Tor. ¿Se está ejecutando el Navegador Tor (disponible en torproject.org) en segundo plano?",
+ "settings_error_socket_port": "No se puede conectar al controlador Tor en {}:{}.",
+ "settings_error_socket_file": "No se puede conectar al controlador Tor usando el archivo de socket {}.",
+ "settings_error_auth": "Conectado con {}:{}, pero no se puede autenticar. ¿Quizás este no sea un controlador Tor?",
+ "settings_error_missing_password": "Conectado al controlador Tor, pero se requiere una contraseña para autenticar.",
+ "settings_error_unreadable_cookie_file": "Conectado al controlador Tor, pero la contraseña puede ser errónea, o a tu usuario no le es permitido leer el archivo cookie.",
"settings_error_bundled_tor_not_supported": "La versión de Tor que viene con OnionShare no funciona en el modo de desarrollador en Windows o macOS.",
"settings_error_bundled_tor_timeout": "La conexión con Tor está demorando demasiado. ¿Quizás el equipo está desconectado de Internet o el reloj no está en hora?",
- "settings_error_bundled_tor_broken": "OnionShare no pudo conectarse con Tor en segundo plano:\n{}",
- "settings_test_success": "Se conectó con el controlador de Tor.\n\nVersión de Tor: {}.\nAdmite servicios cebolla efímeros: {}.\nAdmite autenticación de cliente: {}.\nAdmite direcciones .onion de nueva generación: {}.",
- "error_tor_protocol_error": "Se produjo un error en Tor: {}",
- "error_tor_protocol_error_unknown": "Se produjo un error desconocido en Tor",
+ "settings_error_bundled_tor_broken": "OnionShare no pudo conectarse a Tor:\n{}",
+ "settings_test_success": "Se conectó con el controlador Tor.\n\nVersión de Tor: {}.\nAdmite servicios cebolla efímeros: {}.\nAdmite autenticación de cliente: {}.\nAdmite direcciones .onion de nueva generación: {}.",
+ "error_tor_protocol_error": "Hubo un error con Tor: {}",
+ "error_tor_protocol_error_unknown": "Hubo un error desconocido con Tor",
"error_invalid_private_key": "Este tipo de clave privada no está soportado",
- "connecting_to_tor": "Conectando con la red de Tor",
- "update_available": "Hay una versión nueva de OnionShare. <a href='{}'>Pulse aquí</a> para descargarla.<br><br>Utiliza la versión {}; la más reciente es la {}.",
- "update_error_check_error": "No se pudo buscar si hay actualizaciones: el sitio web de OnionShare comunica que la versión más reciente es «{}», pero eso es irreconocible.",
- "update_error_invalid_latest_version": "No se pudo buscar actualizaciones: ¿quizás no se ha conectado con Tor o el sitio web de OnionShare está caído?",
- "update_not_available": "Está ejecutando la versión más reciente de OnionShare.",
- "gui_tor_connection_ask": "¿Quiere abrir la configuración para arreglar la conexión con Tor?",
+ "connecting_to_tor": "Conectar a la red Tor",
+ "update_available": "Salió un OnionShare nuevo. <a href='{}'>Haz clic aquí</a> para obtenerlo.<br><br>Estás usando {} y el más reciente es {}.",
+ "update_error_check_error": "No se pudo comprobar si hay versiones nuevas: ¿Tal vez no estás conectado a Tor, o el sitio web de OnionShare está caído?",
+ "update_error_invalid_latest_version": "No se pudo comprobar si hay versiones nuevas: El sitio web de OnionShare dice que la última versión es la '{}', pero eso es irreconocible…",
+ "update_not_available": "Estás usando la versión más reciente de OnionShare.",
+ "gui_tor_connection_ask": "¿Abrir la configuración para arreglar la conexión a Tor?",
"gui_tor_connection_ask_open_settings": "Sí",
"gui_tor_connection_ask_quit": "Salir",
- "gui_tor_connection_error_settings": "Pruebe a cambiar la forma en que OnionShare se conecta con la red Tor en la configuración.",
- "gui_tor_connection_canceled": "No se pudo conectar con Tor.\n\nAsegúrese de haberse conectado a Internet, vuelva a abrir OnionShare y configure su conexión con Tor.",
+ "gui_tor_connection_error_settings": "Prueba cambiar la forma en que OnionShare se conecta a la red Tor en la configuración.",
+ "gui_tor_connection_canceled": "No se pudo conectar a Tor.\n\nAsegúrate de haber conectado a Internet, vuelve a abrir OnionShare y configura su conexión a Tor.",
"gui_tor_connection_lost": "Se desconectó de Tor.",
- "gui_server_started_after_autostop_timer": "El temporizador de parada automática expiró antes de que se iniciara el servidor.\nCree un recurso compartido nuevo.",
- "gui_server_autostop_timer_expired": "El temporizador de parada automática ya expiró.\nAjústelo para comenzar a compartir.",
+ "gui_server_started_after_autostop_timer": "El temporizador de parada automática expiró antes de que se iniciara el servidor. Por favor crea un recurso compartido nuevo.",
+ "gui_server_autostop_timer_expired": "El temporizador de parada automática ya expiró. Por favor ajústalo para comenzar a compartir.",
"share_via_onionshare": "Compartir con OnionShare",
- "gui_use_legacy_v2_onions_checkbox": "Usar direcciones antiguas",
+ "gui_use_legacy_v2_onions_checkbox": "Usar direcciones obsoletas",
"gui_save_private_key_checkbox": "Usar una dirección persistente",
- "gui_share_url_description": "<b>Cualquier persona </b> con esta dirección de OnionShare puede <b>descargar</b> tus archivos usando el <b>Navegador Tor</b>: <img src='{}' />",
- "gui_receive_url_description": "<b>Cualquiera</b> que tenga esta dirección de OnionShare puede <b>cargar</b> archivos a su equipo mediante el <b>navegador Tor</b>: <img src='{}' />",
- "gui_url_label_persistent": "Este recurso compartido no se detendrá automáticamente.<br><br>Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactive la opción «Usar dirección persistente» en Configuración.)",
+ "gui_share_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>descargar</b> tus archivos usando el <b>Navegador Tor</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>cargar</b> archivos a tu equipo usando el <b>Navegador Tor</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Este recurso compartido no se detendrá automáticamente.<br><br>Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)",
"gui_url_label_stay_open": "Este recurso compartido no se detendrá automáticamente.",
- "gui_url_label_onetime": "Este recurso compartido se detendrá después de la primera descarga.",
- "gui_url_label_onetime_and_persistent": "Este recurso compartido no se detendrá automáticamente.<br><br>Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactive la opción «Usar dirección persistente» en Configuración.)",
+ "gui_url_label_onetime": "Este recurso compartido se detendrá después de la primera operación completada.",
+ "gui_url_label_onetime_and_persistent": "Este recurso compartido no se detendrá automáticamente.<br><br>Cada recurso compartido subsiguiente reutilizará la dirección. (Para usar direcciones una sola vez, desactiva la opción «Usar dirección persistente» en la configuración.)",
"gui_status_indicator_share_stopped": "Listo para compartir",
"gui_status_indicator_share_working": "Comenzando.…",
- "gui_status_indicator_share_started": "Compartir",
+ "gui_status_indicator_share_started": "Compartiendo",
"gui_status_indicator_receive_stopped": "Listo para recibir",
"gui_status_indicator_receive_working": "Comenzando.…",
"gui_status_indicator_receive_started": "Recibiendo",
@@ -132,36 +132,36 @@
"gui_settings_autoupdate_timestamp_never": "Nunca",
"gui_settings_general_label": "Configuración general",
"gui_settings_sharing_label": "Configuración de compartición",
- "gui_settings_close_after_first_download_option": "Dejar de compartir luego de que los archivos se hayan enviado",
+ "gui_settings_close_after_first_download_option": "Dejar de compartir luego que los archivos hayan sido enviados",
"gui_settings_connection_type_label": "¿Cómo debería conectarse OnionShare a Tor?",
- "gui_settings_connection_type_control_port_option": "Conectar mediante el puerto de control",
- "gui_settings_connection_type_socket_file_option": "Conectar mediante un archivo de socket",
+ "gui_settings_connection_type_control_port_option": "Conectar usando el puerto de control",
+ "gui_settings_connection_type_socket_file_option": "Conectar usando un archivo de socket",
"gui_settings_control_port_label": "Puerto de control",
- "gui_settings_socket_file_label": "Archivo Socket",
+ "gui_settings_socket_file_label": "Archivo socket",
"gui_settings_socks_label": "Puerto SOCKS",
- "gui_settings_authenticate_label": "Configuración de autenticación Tor",
+ "gui_settings_authenticate_label": "Configuración de autenticación de Tor",
"gui_settings_authenticate_no_auth_option": "Sin autenticación, o autenticación por cookies",
"gui_settings_authenticate_password_option": "Contraseña",
"gui_settings_password_label": "Contraseña",
- "gui_settings_tor_bridges_no_bridges_radio_option": "No utilizar puentes",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "No usar puentes",
"gui_receive_quit_warning": "Aún está recibiendo archivos. ¿Confirma que quiere salir de OnionShare?",
- "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportes insertables obfs4 incorporados",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportes insertables obfs4 incorporados (requiere obfs4proxy)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizar transporte insertable incorporado meek_lite (Azure)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transporte insertable meek_lite (Azure) incorporado (requiere obfs4proxy)",
- "gui_settings_meek_lite_expensive_warning": "Atención: el funcionamiento de los puentes meek_lite es muy costoso para el Proyecto Tor.<br><br>Utilícelos solo si no puede conectarse con Tor directamente, a través de obfs4 o a través de puentes normales.",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportes conectables obfs4 incorporados",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportes conectables obfs4 incorporados (requiere obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportes conectables incorporados meek_lite (Azure)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportes conectables meek_lite (Azure) incorporados (requiere obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Advertencia: Los puentes meek_lite son muy costosos de correr para el Proyecto Tor.<br><br>Utilízalos solo si no puedes conectarte a Tor directamente, a través de transportes obfs4 u otros puentes normales.",
"gui_settings_tor_bridges_custom_radio_option": "Usar puentes personalizados",
- "gui_settings_tor_bridges_custom_label": "Puede obtener puentes en <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Puedes obtener puentes en <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
"gui_settings_button_save": "Guardar",
"gui_settings_button_cancel": "Cancelar",
"gui_settings_button_help": "Ayuda",
- "gui_settings_autostop_timer_checkbox": "Utilizar temporizador de parada",
- "gui_settings_autostop_timer": "Detener compartición en:",
+ "gui_settings_autostop_timer_checkbox": "Utilizar temporizador de parada automática",
+ "gui_settings_autostop_timer": "Detener compartición a las:",
"history_in_progress_tooltip": "{} en curso",
"history_completed_tooltip": "{} completado",
"error_cannot_create_downloads_dir": "No se ha podido crear la carpeta en modo de recepción: {}",
"error_downloads_dir_not_writable": "La carpeta del modo de recepción está protegida contra escritura: {}",
- "gui_receive_mode_warning": "El modo de recepción permite a la gente subir archivos a su ordenador.<br><br><b>Algunos archivos pueden potencialmente tomar el control de tu ordenador si los abres. Abre sólo cosas de personas en las que confíes, o si sabes lo que estás haciendo.</b>",
+ "gui_receive_mode_warning": "El modo de recepción permite que otras personas suban archivos a tu computadora.<br><br><b>Algunos archivos, potencialmente, podrían tomar control de tu computadora si los abres. Abre solo cosas de personas en las que confías, o si sabes lo que estás haciendo.</b>",
"receive_mode_upload_starting": "Ha comenzado la carga. Total: {}",
"receive_mode_received_file": "Recibido: {}",
"gui_mode_share_button": "Compartir archivos",
@@ -184,11 +184,11 @@
"gui_download_in_progress": "Descarga iniciada {}",
"gui_open_folder_error_nautilus": "No se puede abrir la carpeta porque nautilus no está disponible. El archivo está aquí: {}",
"gui_settings_language_label": "Idioma preferido",
- "gui_settings_language_changed_notice": "Reinicie OnionShare para que el idioma nuevo se aplique.",
+ "gui_settings_language_changed_notice": "Reinicia OnionShare para que se aplique el idioma nuevo.",
"gui_upload_finished_range": "Cargado {} a {}",
"timeout_upload_still_running": "Esperando a que se complete la subida",
- "gui_add_files": "Añadir archivos",
- "gui_add_folder": "Añadir carpeta",
+ "gui_add_files": "Añadir Archivos",
+ "gui_add_folder": "Añadir Carpeta",
"gui_connect_to_tor_for_onion_settings": "Conectarse a Tor para ver configuraciones de servicio cebolla",
"error_cannot_create_data_dir": "No se pudo crear carpeta de datos OnionShare: {}",
"receive_mode_data_dir": "Archivos enviados a usted aparecen en esta carpeta: {}",
@@ -200,9 +200,9 @@
"systray_share_completed_title": "Compartición completada",
"systray_share_completed_message": "Finalizó envío de archivos",
"systray_share_canceled_title": "Compartición cancelada",
- "systray_share_canceled_message": "Alguien canceló la recepción de sus archivos",
+ "systray_share_canceled_message": "Alguien canceló la recepción de tus archivos",
"systray_receive_started_title": "Recepción iniciada",
- "systray_receive_started_message": "Alguien le está enviando archivos",
+ "systray_receive_started_message": "Alguien te está enviando archivos",
"gui_all_modes_history": "Historial",
"gui_all_modes_clear_history": "Limpiar todo",
"gui_all_modes_transfer_started": "Iniciado {}",
@@ -213,26 +213,26 @@
"gui_all_modes_progress_eta": "{0:s}, TEA: {1:s}, %p%",
"gui_share_mode_no_files": "No se enviaron archivos todavía",
"gui_share_mode_autostop_timer_waiting": "Esperando a que termine el envío",
- "gui_receive_mode_no_files": "No se recibieron archivos todavía",
+ "gui_receive_mode_no_files": "Todavía no se ha recibido ningún archivo",
"gui_receive_mode_autostop_timer_waiting": "Esperando a que termine la recepción",
"gui_all_modes_transfer_canceled_range": "Cancelado {} - {}",
"gui_all_modes_transfer_canceled": "Cancelado {}",
- "gui_settings_onion_label": "Configuración de Onion",
+ "gui_settings_onion_label": "Configuración Onion",
"gui_stop_server_autostop_timer_tooltip": "El temporizador de parada automática finaliza a las {}",
"gui_start_server_autostart_timer_tooltip": "El temporizador de inicio automático finaliza a las {}",
- "gui_waiting_to_start": "Se programó el inicio en {}. Pulse para cancelar.",
+ "gui_waiting_to_start": "Inicio programado en {}. Clic para cancelar.",
"gui_settings_autostart_timer_checkbox": "Utilizar temporizador de inicio automático",
- "gui_settings_autostart_timer": "Iniciar compartición en:",
- "gui_server_autostart_timer_expired": "La hora agendada ya ha pasado. Ajústela para comenzar a compartir.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La hora de inicio automático no puede ser igual ni anterior a la de parada automática. Ajústela para comenzar a compartir.",
- "gui_status_indicator_share_scheduled": "Agendado…",
- "gui_status_indicator_receive_scheduled": "Agendado…",
+ "gui_settings_autostart_timer": "Iniciar compartición a las:",
+ "gui_server_autostart_timer_expired": "La hora programada ya ha pasado. Modifícala para comenzar a compartir.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "La hora de inicio automático no puede ser igual ni anterior a la de parada automática. Ajústala para comenzar a compartir.",
+ "gui_status_indicator_share_scheduled": "Programado…",
+ "gui_status_indicator_receive_scheduled": "Programado…",
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"invalid_password_guess": "Intento de contraseña incorrecto",
- "gui_website_url_description": "<b>Cualquiera</b> que tenga esta dirección de OnionShare puede <b>visitar</b> su sitio web mediante el <b>navegador Tor</b>: <img src='{}' />",
+ "gui_website_url_description": "<b>Cualquiera</b> con esta dirección OnionShare puede <b>visitar</b> tu sitio web usando el <b>Navegador Tor</b>: <img src='{}' />",
"gui_mode_website_button": "Publicar sitio web",
"systray_site_loaded_title": "Sitio web cargado",
"systray_site_loaded_message": "Sitio web de OnionShare cargado",
@@ -241,10 +241,59 @@
"gui_website_mode_no_files": "Aún no se han compartido sitios web",
"gui_visit_started": "Alguien ha visitado su sitio web {}",
"incorrect_password": "Contraseña incorrecta",
- "gui_settings_individual_downloads_label": "Desmarque esta opción para permitir descargar archivos individuales",
+ "gui_settings_individual_downloads_label": "Desmarca para permitir descargar archivos individuales",
"history_requests_tooltip": "{} solicitudes web",
"systray_individual_file_downloaded_title": "Archivo individual cargado",
"systray_individual_file_downloaded_message": "Archivo individual {} visto",
- "gui_settings_csp_header_disabled_option": "Desactivar cabecera de la Normativa de seguridad de contenido",
- "gui_settings_website_label": "Configuración de sitio web"
+ "gui_settings_csp_header_disabled_option": "Deshabilitar encabezado de Política de Seguridad de Contenido",
+ "gui_settings_website_label": "Configuración de sitio web",
+ "mode_settings_client_auth_checkbox": "Utilizar autorización de cliente",
+ "mode_settings_legacy_checkbox": "Usar una dirección obsoleta (servicio cebolla v2, no recomendado)",
+ "mode_settings_autostop_timer_checkbox": "Detener el servicio cebolla a una hora determinada",
+ "mode_settings_autostart_timer_checkbox": "Iniciar el servicio cebolla a una hora determinada",
+ "mode_settings_public_checkbox": "No usar contraseña",
+ "mode_settings_persistent_checkbox": "Guardar esta pestaña, y abrirla automáticamente cuando abra OnionShare",
+ "mode_settings_advanced_toggle_hide": "Ocultar la configuración avanzada",
+ "mode_settings_advanced_toggle_show": "Mostrar configuración avanzada",
+ "gui_quit_warning_cancel": "Cancelar",
+ "gui_quit_warning_description": "Compartir está activo en algunas de tus pestañas. Si sales, todas tus pestañas se cerrarán. ¿Estás seguro/a de que quieres salir?",
+ "gui_quit_warning_title": "¿Estás seguro/a?",
+ "gui_close_tab_warning_cancel": "Cancelar",
+ "gui_close_tab_warning_close": "Cerrar",
+ "gui_close_tab_warning_website_description": "Estás alojando un sitio web. ¿Estás seguro/a de que quieres cerrar esta pestaña?",
+ "gui_close_tab_warning_receive_description": "Estás en el proceso de recibir archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?",
+ "gui_close_tab_warning_share_description": "Estás en el proceso de enviar archivos. ¿Estás seguro/a de que quieres cerrar esta pestaña?",
+ "gui_close_tab_warning_persistent_description": "Esta pestaña es persistente. Si la cierras, perderás la dirección cebolla que usa. ¿Estás seguro/a de que quieres cerrarla?",
+ "gui_close_tab_warning_title": "¿Seguro?",
+ "gui_new_tab_website_description": "Hospedar un sitio cebolla HTML estático desde tu computadora.",
+ "gui_new_tab_website_button": "Alojar un sitio web",
+ "gui_new_tab_receive_description": "Convierte tu computadora en un buzón en línea. La gente podrá usar el Tor Browser para enviar archivos a tu ordenador.",
+ "gui_new_tab_receive_button": "Recibir archivos",
+ "gui_new_tab_share_button": "Compartir archivos",
+ "gui_new_tab_tooltip": "Abrir una pestaña nueva",
+ "gui_new_tab": "Nueva pestaña",
+ "gui_new_tab_share_description": "Elige los archivos de tu ordenador para enviarlos a otra persona. La persona o personas a las que quieras enviar los archivos tendrán que usar el Tor Browser para descargarlos de ti.",
+ "mode_settings_website_disable_csp_checkbox": "No enviar encabezado de Política de Seguridad de Contenido (permite que tu sitio web utilice recursos de terceros)",
+ "mode_settings_receive_data_dir_browse_button": "Navegar",
+ "mode_settings_receive_data_dir_label": "Guardar archivos en",
+ "mode_settings_share_autostop_sharing_checkbox": "Dejar de compartir después de haber enviado archivos (desmarcar para permitir la descarga de archivos individuales)",
+ "gui_tab_name_chat": "Chat",
+ "gui_tab_name_website": "Sitio web",
+ "gui_tab_name_receive": "Recibir",
+ "gui_tab_name_share": "Compartir",
+ "gui_new_tab_chat_button": "Chatear Anónimamente",
+ "gui_open_folder_error": "Fallo al abrir carpeta con xdg-open. El archivo está aquí: {}",
+ "gui_qr_code_description": "Escanea este código QR con un lector QR, como la cámara de tu teléfono para compartir la dirección OnionShare.",
+ "gui_qr_code_dialog_title": "Código QR de OnionShare",
+ "gui_show_url_qr_code": "Mostrar Código QR",
+ "gui_receive_flatpak_data_dir": "Al instalar OnionShare usando Flatpak, debes guardar los archivos en una carpeta en ~/OnionShare.",
+ "gui_chat_stop_server": "Detener servidor de chat",
+ "gui_chat_start_server": "Iniciar servidor de chat",
+ "gui_chat_stop_server_autostop_timer": "Detener Servidor de Chat ({})",
+ "gui_file_selection_remove_all": "Remover Todo",
+ "gui_remove": "Remover",
+ "gui_main_page_chat_button": "Empezar a charlar",
+ "gui_main_page_website_button": "Empezar a alojar",
+ "gui_main_page_receive_button": "Empezar a recibir",
+ "gui_main_page_share_button": "Empezar a compartir"
}
diff --git a/share/locale/fa.json b/desktop/src/onionshare/resources/locale/fa.json
index d18fe13f..5fe578e0 100644
--- a/share/locale/fa.json
+++ b/desktop/src/onionshare/resources/locale/fa.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت meek_lite (Azure) (نیازمند obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "هشدار: پل‌های meek_lite برای پروژه Tor بسیار هزینه بر هستند.<br><br> فقط در صورت ناتوانی در اتصال به Tor به صورت مستقیم، از طریق obfs4، یا دیگر پل‌ها از آن استفاده کنید.",
"gui_settings_tor_bridges_custom_radio_option": "استفاده از پل‌های کاستوم",
- "gui_settings_tor_bridges_custom_label": "می‌توانید از <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> پل دریافت کنید",
+ "gui_settings_tor_bridges_custom_label": "می‌توانید از <a href=\"https://bridges.torproject.org/options?lang=fa\">https://bridges.torproject.org</a> پل دریافت کنید",
"gui_settings_tor_bridges_invalid": "هیچ کدام از پل‌هایی که شما اضافه کردید کار نمی‌کند.\nآن‌ها را دوباره چک کنید یا پل‌های دیگری اضافه کنید.",
"gui_settings_button_save": "ذخیره",
"gui_settings_button_cancel": "لغو",
@@ -234,5 +234,6 @@
"gui_settings_individual_downloads_label": "برای دادن اجازه بارگیری پرونده‌ها مجزا، از انتخاب خارج کنید",
"history_requests_tooltip": "{} درخواست وب",
"gui_settings_csp_header_disabled_option": "غیرفعال‌سازی سرایند سیاست امنیت محتوا",
- "gui_settings_website_label": "تنظیمات سایت"
+ "gui_settings_website_label": "تنظیمات سایت",
+ "gui_new_tab_share_button": "اشتراک‌‌گذاری فایل‌ها"
}
diff --git a/share/locale/fi.json b/desktop/src/onionshare/resources/locale/fi.json
index 1dc1451f..c0a6f098 100644
--- a/share/locale/fi.json
+++ b/desktop/src/onionshare/resources/locale/fi.json
@@ -28,7 +28,7 @@
"give_this_url_receive_stealth": "Anna tämä osoite ja HidServAuth lähettäjälle:",
"not_a_readable_file": "{0:s} ei ole luettava tiedosto.",
"no_available_port": "Vapaata porttia onion palvelulle ei löydetty",
- "close_on_autostop_timer": "Pysäytetty koska auto-stop ajastin loppui",
+ "close_on_autostop_timer": "Automaattinen lopetusajastin pysäytti toiminnon",
"help_autostop_timer": "Lopeta jakaminen annetun sekunnin kuluttua",
"help_stealth": "Käytä asiakasvaltuutusta (edistynyt)",
"help_receive": "Vastaanota osia niiden lähettämisen sijaan",
@@ -37,21 +37,21 @@
"gui_add_folder": "Lisää kansio",
"gui_share_stop_server_autostop_timer": "Lopeta jakaminen ({})",
"gui_share_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu {} jälkeen",
- "gui_receive_start_server": "Aloita vastaanotto tila",
- "gui_receive_stop_server": "Lopeta vastaanotto tila",
- "gui_receive_stop_server_autostop_timer": "Lopeta vastaanotto tila ({} jäljellä)",
+ "gui_receive_start_server": "Aloita vastaanottotila",
+ "gui_receive_stop_server": "Lopeta vastaanottotila",
+ "gui_receive_stop_server_autostop_timer": "Lopeta vastaanottotila ({} jäljellä)",
"gui_receive_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu kello {}",
"gui_copy_hidservauth": "Kopioi HidServAuth",
- "gui_copied_url_title": "Kopioi OnionShare osoite",
+ "gui_copied_url_title": "Kopioi OnionShare-osoite",
"gui_copied_hidservauth_title": "HidServAuth kopioitu",
- "gui_copied_hidservauth": "HidServAuth rivi kopioitu leikepöydälle",
+ "gui_copied_hidservauth": "HidServAuth-rivi kopioitu leikepöydälle",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "Ei niin nopeasti",
"gui_share_quit_warning": "Olet lähettämässä tiedostoja. Haluatko varmasti lopettaa OnionSharen?",
"gui_receive_quit_warning": "Olet vastaanottamassa tiedostoja. Haluatko varmasti lopettaa OnionSharen?",
"gui_quit_warning_quit": "Lopeta",
"gui_quit_warning_dont_quit": "Peruuta",
- "error_rate_limit": "Joku on tehnyt liian monta väärää yritystä osoitteeseesi, mikä tarkoittaa, että he voisivat yrittää arvata sitä, joten OnionShare on pysäyttänyt palvelimen. Aloita jakaminen uudelleen ja lähetä vastaanottajalle uusi osoite jatkaaksesi.",
+ "error_rate_limit": "Joku on yrittänyt arvata salasanasi väärin liian monta kertaa, joten OnionShare on pysäyttänyt palvelimen. Aloita jakaminen uudelleen ja lähetä vastaanottajalle uusi osoite jatkaaksesi jakamista.",
"error_stealth_not_supported": "Asiakasvaltuuden käyttämiseen tarvitaan ainakin Tor 0.2.9.1-alpha (tai Tor Browser 6.5) ja python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionSharen käyttö vaatii ainakin Tor 0.2.7.1 ja python3-stem 1.4.0.",
"gui_settings_window_title": "Asetukset",
@@ -64,23 +64,23 @@
"gui_settings_autoupdate_timestamp_never": "ei koskaan",
"gui_settings_autoupdate_check_button": "Tarkista päivitykset",
"gui_settings_general_label": "Yleiset asetukset",
- "gui_settings_onion_label": "Onion asetukset",
- "gui_settings_sharing_label": "Jako asetukset",
+ "gui_settings_onion_label": "Onion-asetukset",
+ "gui_settings_sharing_label": "Jakoasetukset",
"gui_settings_close_after_first_download_option": "Lopeta jakaminen tiedostojen lähetyksen jälkeen",
"gui_settings_connection_type_label": "Miten OnionSharen kuuluisi yhdistää Tor:iin?",
- "gui_settings_connection_type_bundled_option": "Käytä OnionShareen sisäänrakennettua Tor versiota",
+ "gui_settings_connection_type_bundled_option": "Käytä OnionShareen sisäänrakennettua Tor-versiota",
"gui_settings_connection_type_automatic_option": "Kokeile automaattista konfigurointia Tor-selaimella",
"gui_settings_connection_type_control_port_option": "Yhdistä käyttämällä control porttia",
- "gui_settings_connection_type_socket_file_option": "Yhdistä käyttäen socket tiedostoa",
- "gui_settings_connection_type_test_button": "Testaa Tor yhteyttä",
+ "gui_settings_connection_type_socket_file_option": "Yhdistä käyttäen socket-tiedostoa",
+ "gui_settings_connection_type_test_button": "Testaa Tor-yhteyttä",
"gui_settings_control_port_label": "Control port",
- "gui_settings_socket_file_label": "Socket tiedosto",
- "gui_settings_socks_label": "SOCKS portti",
- "gui_settings_authenticate_label": "Tor todennus asetukset",
+ "gui_settings_socket_file_label": "Socket-tiedosto",
+ "gui_settings_socks_label": "SOCKS-portti",
+ "gui_settings_authenticate_label": "Tor-todennusasetukset",
"gui_settings_authenticate_no_auth_option": "Ei todentamista, tai evästeiden todentamista",
"gui_settings_authenticate_password_option": "Salasana",
"gui_settings_password_label": "Salasana",
- "gui_settings_tor_bridges": "Tor silta-solmu tuki",
+ "gui_settings_tor_bridges": "Tor-siltojen tuki",
"gui_settings_tor_bridges_no_bridges_radio_option": "Älä käytä silta-solmuja",
"gui_settings_tor_bridges_obfs4_radio_option": "Käytä sisäänrakennettuja obfs4-liitettäviä kuljetuksia",
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Käytä sisäänrakennettuja obfs4-liitettäviä kuljetuksia (vaatii obfs4proxyn)",
@@ -88,13 +88,13 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Käytä sisäänrakennettuja meek_lite (Azure)-liitettäviä kuljetuksia (vaatii obfs4proxyn)",
"gui_settings_meek_lite_expensive_warning": "Varoitus: Meek_lite-sillat ovat Tor-projektille erittäin kalliita. <br><br> Käytä niitä vain, jos et pysty muodostamaan yhteyttä suoraan Toriin, obfs4-kuljetusten tai muiden tavallisten silta-solmujen kautta.",
"gui_settings_tor_bridges_custom_radio_option": "Käytä mukautettuja silta-solmuja",
- "gui_settings_tor_bridges_custom_label": "Löydät silta-solmut osoitteesta <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
- "gui_settings_tor_bridges_invalid": "Mikään lisäämistäsi silta-solmuista ei toiminut\nUudellen tarkista ne tai lisää muita.",
+ "gui_settings_tor_bridges_custom_label": "Löydät silta-solmuja osoitteesta <a href=\"https://bridges.torproject.org/options?lang=fi\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Mikään lisäämistäsi silta-solmuista ei toiminut\nTarkista ne uudelleen tai lisää muita.",
"gui_settings_button_save": "Tallenna",
- "gui_settings_button_cancel": "Peruuttaa",
- "gui_settings_button_help": "Apua",
- "gui_settings_autostop_timer_checkbox": "Käytä auto-stop ajastinta",
- "gui_settings_autostop_timer": "Lopeta jakaminen kello:",
+ "gui_settings_button_cancel": "Peruuta",
+ "gui_settings_button_help": "Ohje",
+ "gui_settings_autostop_timer_checkbox": "Käytä automaattista lopetusajastinta",
+ "gui_settings_autostop_timer": "Lopeta jako aikaan:",
"settings_error_unknown": "Ei voi muodostaa yhteyttä Tor-ohjaimeen, koska asetuksesi eivät ole järkeviä.",
"settings_error_automatic": "Tor-ohjaimeen ei voitu muodostaa yhteyttä. Onko Tor Browser (saatavilla osoitteesta torproject.org) avoimena taustalla?",
"settings_error_socket_port": "Ei voi muodostaa yhteyttä Tor-ohjaimeen: {}:{}.",
@@ -104,30 +104,30 @@
"settings_error_unreadable_cookie_file": "Yhdistetty tor ohjaimeen, mutta salasana saattaa olla väärä, tai käyttäjä ei saa lukea evästetiedostoa.",
"settings_error_bundled_tor_not_supported": "OnionSharen mukana tulevan Tor version käyttäminen ei toimi Developer-tilassa Windowsissa tai MacOSissa.",
"settings_error_bundled_tor_timeout": "Yhdistäminen Tor:iin kestää lian kauan. Ehkä et ole yhteydessä nettiin, tai järjestelmäsi kello on epätarkka?",
- "settings_error_bundled_tor_broken": "OnionShare ei voinut yhdistää Tor:iin taustalla\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare ei voinut yhdistää Tor:iin\n{}",
"settings_test_success": "Yhditetty Tor ohjaimeen.\n\nTor versio: {}\nTykee lyhytaikaista onion palvelua: {}.\nTukee asiakas todennusta: {}.\nTukee uuden sukupolven .onion osoitteita: {}.",
"error_tor_protocol_error": "Tor-verkossa tapahtui virhe: {}",
"error_tor_protocol_error_unknown": "Tor-verkossa tapahtui tuntematon virhe",
"error_invalid_private_key": "Tätä yksityisen avaimen tyyppiä ei tueta",
"connecting_to_tor": "Yhdistetään Tor-verkkoon",
- "update_available": "Uusi OnionShare version on julkaistu. <a href='{}'>Paina tästä</a> ladataksesi sen.<br><br>Sinulla on versio {} ja uusin version on {}.",
- "update_error_check_error": "Päivityksien tarkistaminen epäonnistui: OnionShare-sivusto kertoo, että uusin versio on tunnistamaton '{}'…",
- "update_error_invalid_latest_version": "Päivityksien tarkistaminen epäonnistui: Ehkä et ole yhteydessä Tor-verkkoon, tai OnionShare-sivusto on alhaalla?",
+ "update_available": "Uusi OnionShare versio on julkaistu. <a href='{}'>Paina tästä</a> ladataksesi sen.<br><br>Käytät versiota {} ja uusin versio on {}.",
+ "update_error_check_error": "Ei pystytty tarkistamaan päivityksiä: Ehkä et ole yhteydessä Tor-verkkoon, tai OnionShare-nettisivu on kaatunut?",
+ "update_error_invalid_latest_version": "Päivityksien tarkistaminen epäonnistui: OnionShare-sivuston mukaan uusin versio on tuntematon '{}'…",
"update_not_available": "Sinulla on OnionSharen uusin versio.",
"gui_tor_connection_ask": "Avaa asetukset Tor-yhteyden selvittämiseksi?",
"gui_tor_connection_ask_open_settings": "Kyllä",
"gui_tor_connection_ask_quit": "Lopeta",
"gui_tor_connection_error_settings": "Yritä muuttaa miten OnionShare yhdistää Tor-verkkoon asetuksista.",
- "gui_tor_connection_canceled": "Tor-yhteyden muodostus epäonnistui.\n\nVarmista että sinulla on toimiva internet yhteys, jonka jälkeen uudelleen avaa OnionShare ja sen Tor-yhteys.",
+ "gui_tor_connection_canceled": "Tor-yhteyden muodostus epäonnistui.\n\nVarmista että sinulla on toimiva internet yhteys, jonka jälkeen avaa OnionShare uudelleen ja ota käyttöön sen Tor-yhteys.",
"gui_tor_connection_lost": "Tor-yhteys katkaistu.",
- "gui_server_started_after_autostop_timer": "Auto-stop ajastin loppui ennen palvelimen käynnistymistä.\nLuo uusi jako.",
- "gui_server_autostop_timer_expired": "Auto-stop ajastin loppui jo.\nPäivitä se jaon aloittamiseksi.",
- "share_via_onionshare": "OnionShare se",
+ "gui_server_started_after_autostop_timer": "Automaattinen lopeutusajastin pysäytti toiminnon ennen palvelimen käynnistymistä.\nLuo uusi jako.",
+ "gui_server_autostop_timer_expired": "Automaattinen pysäytysajastin päättyi jo.\nSäädä se jaon aloittamiseksi.",
+ "share_via_onionshare": "Jaa OnionSharella",
"gui_connect_to_tor_for_onion_settings": "Yhdistä Tor-verkkoon nähdäksesi onion palvelun asetukset",
"gui_use_legacy_v2_onions_checkbox": "Käytä vanhoja osoitteita",
"gui_save_private_key_checkbox": "Käytä pysyviä osoitteita",
- "gui_share_url_description": "<b>Kaikki</b> joilla on tämä OnionShare osoite voivat <b>ladata</b> tiedostojasi käyttämällä <b>Tor selainta</b>: <img src='{}' />",
- "gui_receive_url_description": "<b>Kaikki</b> joilla on tämä OnionShare osoite voivat <b>lähettää</b>tiedostoja tietokoneellesi käyttämällä <b>Tor selainta</b>: <img src='{}' />",
+ "gui_share_url_description": "<b>Kaikki</b> joilla on tämä OnionShare-osoite voivat <b>ladata</b> tiedostojasi käyttämällä <b>Tor-selainta</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Kaikki</b> joilla on tämä OnionShare-osoite voivat <b>lähettää</b>tiedostoja tietokoneellesi käyttämällä <b>Tor-selainta</b>: <img src='{}' />",
"gui_url_label_persistent": "Tämä jako ei pysähdy automaattisesti.<br><br>Jokainen seuraava jako käyttää osoitetta uudelleen. (Jos haluat käyttää kertaluontoisia osoitteita, sammuta \"Käytä pysyvää osoitetta\" asetuksissa.)",
"gui_url_label_stay_open": "Tämä jako ei pysähdy automaattisesti.",
"gui_url_label_onetime": "Tämä jako lopetetaan ensimmäisen valmistumisen jälkeen.",
@@ -146,30 +146,30 @@
"receive_mode_data_dir": "Sinulle lähetetyt tiedostot löytyvät tästä kansiosta: {}",
"receive_mode_warning": "Varoitus: Vastaanottotila antaa ihmisille mahdollisuuden ladata tiedostoja tietokoneeseen. Jotkin tiedostot voivat hallita tietokonettasi, jos avaat ne. Avaa vain tiedostot, joihin luotat, tai jos tiedät, mitä teet.",
"gui_receive_mode_warning": "Vastaanottotila antaa ihmisille mahdollisuuden ladata tiedostoja tietokoneellesi.<br><br><b>Jotkin tiedostot voivat hallita tietokonettasi, jos avaat ne. Avaa asioita vain ihmisiltä, joihin luotat, tai jos tiedät, mitä olet tekemässä. </b>",
- "receive_mode_upload_starting": "Lähetys jonka koko on {} alkaa",
+ "receive_mode_upload_starting": "Lähetys, jonka koko on {}, alkaa",
"receive_mode_received_file": "Vastaanotetaan: {}",
- "gui_mode_share_button": "Jaa Tiedostoja",
- "gui_mode_receive_button": "Vastaanota Tiedostoja",
+ "gui_mode_share_button": "Jaa tiedostoja",
+ "gui_mode_receive_button": "Vastaanota tiedostoja",
"gui_settings_receiving_label": "Vastaanoton asetukset",
"gui_settings_data_dir_label": "Tallenna tiedostot",
"gui_settings_data_dir_browse_button": "Selaa",
"gui_settings_public_mode_checkbox": "Julkinen tila",
"gui_open_folder_error_nautilus": "Kansiota ei voi avata, koska nautilus ei ole käytettävissä. Tiedosto on täällä: {}",
"gui_settings_language_label": "Haluttu kieli",
- "gui_settings_language_changed_notice": "Käynnistä OnionShare uudelleen, jotta kieli muuttuu.",
+ "gui_settings_language_changed_notice": "Käynnistä OnionShare uudelleen ottaaksesi uuden kielen käyttöön.",
"systray_menu_exit": "Lopeta",
- "systray_page_loaded_title": "Sivu Ladattu",
+ "systray_page_loaded_title": "Sivu ladattu",
"systray_page_loaded_message": "OnionShare-osoite ladattu",
- "systray_share_started_title": "Jako Aloitettu",
+ "systray_share_started_title": "Jako aloitettu",
"systray_share_started_message": "Tiedostojen lähettäminen jollekulle aloitetaan",
"systray_share_completed_title": "Jakaminen Valmis",
"systray_share_completed_message": "Tiedostojen lähetys valmis",
"systray_share_canceled_title": "Jako keskeytetty",
"systray_share_canceled_message": "Joku keskeytti tiedostojesi vastaanottamisen",
- "systray_receive_started_title": "Vastaanottaminen Aloitettu",
+ "systray_receive_started_title": "Vastaanottaminen aloitettu",
"systray_receive_started_message": "Joku lähettää tiedostoja sinulle",
"gui_all_modes_history": "Historia",
- "gui_all_modes_clear_history": "Tyhjennä",
+ "gui_all_modes_clear_history": "Tyhjennä kaikki",
"gui_all_modes_transfer_started": "Aloitettu {}",
"gui_all_modes_transfer_finished_range": "Siirretty {} - {}",
"gui_all_modes_transfer_finished": "Siirretty {}",
@@ -179,20 +179,58 @@
"gui_all_modes_progress_starting": "{0:s}, %p% (lasketaan)",
"gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
"gui_share_mode_no_files": "Yhtäkään tiedostoa ei ole lähetetty vielä",
- "gui_share_mode_autostop_timer_waiting": "Odotetaan lähettämisen valmistumista",
+ "gui_share_mode_autostop_timer_waiting": "Odotetaan lähetyksen valmistumista",
"gui_receive_mode_no_files": "Yhtäkään tiedostoa ei ole vastaanotettu vielä",
"gui_receive_mode_autostop_timer_waiting": "Odotetaan vastaanottamisen valmistumista",
- "gui_stop_server_autostop_timer_tooltip": "Auto-stop ajastin loppuu {} päästä",
- "gui_start_server_autostart_timer_tooltip": "Auto-start ajastin loppu {} päästä",
- "gui_waiting_to_start": "Ajastettu aloitus {} päästä. Peruuta napsauttamalla.",
- "gui_settings_autostart_timer_checkbox": "Käytä auto-start ajastinta",
+ "gui_stop_server_autostop_timer_tooltip": "Automaattinen pysäytysajastin loppuu {} kuluttua",
+ "gui_start_server_autostart_timer_tooltip": "Automaattinen aloitusajastin loppuu {} kuluttua",
+ "gui_waiting_to_start": "Ajastettu aloitus {} kuluttua. Peruuta napsauttamalla.",
+ "gui_settings_autostart_timer_checkbox": "Käytä automaattista aloitusajastinta",
"gui_settings_autostart_timer": "Aloita jakaminen:",
- "gui_server_autostart_timer_expired": "Aikataulu on jo kulunut. Päivitä se aloittaaksesi jakamisen.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Auto-stop aika ei voi olla sama tai aikaisempi kuin auto-start aika. Päivitä se aloittaaksesi jakamisen.",
+ "gui_server_autostart_timer_expired": "Ajastettu aika on jo mennyt. Säädä se aloittaaksesi jakamisen.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automaattinen pysätysaika ei voi olla sama tai aikaisempi kuin automaattinen aloitusaika. Säädä se aloittaaksesi jakamisen.",
"gui_status_indicator_share_scheduled": "Ajastettu…",
"gui_status_indicator_receive_scheduled": "Ajastettu…",
"days_first_letter": "pv",
"hours_first_letter": "t",
"minutes_first_letter": "min",
- "seconds_first_letter": "s"
+ "seconds_first_letter": "s",
+ "gui_website_url_description": "<b>Kaikki</b> voivat käyttää tätä OnionShare-osoitetta <b>vieraillakseen</b> verkkosivullasi käyttäen <b>Tor Browser-verkkoselainta</b>: <img src='{}' />",
+ "gui_mode_website_button": "Julkaise verkkosivu",
+ "gui_website_mode_no_files": "Yhtäkään verkkosivustoa ei ole vielä jaettu",
+ "incorrect_password": "väärä salasana",
+ "gui_settings_individual_downloads_label": "Poista rasti ruudusta salliaksesi yksittäisten tiedostojen lataamisen",
+ "history_requests_tooltip": "{} verkkopyyntöä",
+ "gui_settings_csp_header_disabled_option": "Poista Content Security Policy -otsake käytöstä",
+ "gui_settings_website_label": "Verkkosivun asetukset",
+ "mode_settings_receive_data_dir_browse_button": "Selaa",
+ "mode_settings_receive_data_dir_label": "Tallenna tiedostot",
+ "mode_settings_share_autostop_sharing_checkbox": "Lopeta jakaminen kun tiedostot on lähetetty (poista valinta malhdollistaaksesi yksittäisten tiedostojen jakamisen)",
+ "mode_settings_public_checkbox": "Älä käytä salasanaa",
+ "mode_settings_persistent_checkbox": "Tallenna tämä välilehti ja avaa se automaattisesti kun käynnistän OnionSharen",
+ "mode_settings_advanced_toggle_hide": "Piilota edistyneet asetukset",
+ "mode_settings_advanced_toggle_show": "Näytä edistyneet asetukset",
+ "gui_quit_warning_cancel": "Peruuta",
+ "gui_quit_warning_title": "Oletko varma?",
+ "gui_close_tab_warning_cancel": "Peruuta",
+ "gui_close_tab_warning_close": "Sulje",
+ "gui_close_tab_warning_title": "Oletko varma?",
+ "gui_new_tab_website_button": "Julkaise nettisivu",
+ "gui_new_tab_receive_button": "Vastaanota tiedostoja",
+ "gui_new_tab_share_description": "Valitse tietokoneeltasi tiedostot jotka haluat lähettää jollekin. Vastaanottajan pitää käyttää Tor-selainta ladatakseen tiedostot sinulta.",
+ "gui_new_tab_share_button": "Jaa tiedostoja",
+ "gui_new_tab_tooltip": "Avaa uusi välilehti",
+ "gui_new_tab": "Uusi välilehti",
+ "mode_settings_website_disable_csp_checkbox": "Poista 'Sisällön suojauskäytännön' otsikko käytöstä (mahdollistaa kolmansien osapuolien resurssien käytön nettisivussasi)",
+ "mode_settings_client_auth_checkbox": "Käytä asiakkaan valtuutusta",
+ "mode_settings_legacy_checkbox": "Käytä vanhaa osoitetta (v2 onion-palvelu, ei suositella)",
+ "mode_settings_autostop_timer_checkbox": "Lopeta onion-palvelu tiettyyn kellon aikaan",
+ "mode_settings_autostart_timer_checkbox": "Aloita onion-palvelu tiettyyn kellon aikaan",
+ "gui_quit_warning_description": "Jakaminen on päällä jollain välilehdillä. Jos lopetat, kaikki välilehtesi suljetaan. Oletko varma, että haluat lopettaa jakamisen?",
+ "gui_close_tab_warning_website_description": "Isännöit tällä hetkellä nettisivua. Oletko varma, että haluat sulkea tämän välilehden?",
+ "gui_close_tab_warning_receive_description": "Olet saamassa tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?",
+ "gui_close_tab_warning_share_description": "Olet lähettämässä tiedostoja. Oletko varma, että haluat sulkea tämän välilehden?",
+ "gui_close_tab_warning_persistent_description": "Tämä välilehti on pysyvä. Jos suljet sen, menetät sen käyttämän onion-osoitteen. Oletko varma, että haluat sulkea tämän välilehden?",
+ "gui_new_tab_website_description": "Isännöi staattinen HTML-onion-nettisivu tietokoneestasi.",
+ "gui_new_tab_receive_description": "Tee tietokoneestasi online-pudotuslaatikko. Tor-selainta voidaan käyttää tiedostojen lähettämiseen koneellesi."
}
diff --git a/share/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json
index c0baa245..6f356121 100644
--- a/share/locale/fr.json
+++ b/desktop/src/onionshare/resources/locale/fr.json
@@ -15,7 +15,7 @@
"help_stay_open": "Continuer le partage après l’envoi des fichiers",
"help_verbose": "Journaliser les erreurs d’OnionShare sur la sortie standard et les erreurs Web sur le disque",
"help_filename": "Liste des fichiers ou dossiers à partager",
- "gui_drag_and_drop": "Glisser-déposer des fichiers et dossiers\npour commencer le partage",
+ "gui_drag_and_drop": "Glisser-déposer des fichiers et dossiers pour commencer le partage",
"gui_add": "Ajouter",
"gui_delete": "Supprimer",
"gui_choose_items": "Sélectionner",
@@ -25,7 +25,7 @@
"gui_copy_hidservauth": "Copier HidServAuth",
"gui_downloads": "Historique de téléchargement",
"gui_canceled": "Annulé",
- "gui_copied_url": "L’adresse OnionShare a été copiée dans le presse-papiers",
+ "gui_copied_url": "L’adresse OnionShare a été copiée dans le presse-papiers",
"gui_please_wait": "Démarrage… Cliquez pour annuler.",
"gui_quit_warning_quit": "Quitter",
"gui_quit_warning_dont_quit": "Annuler",
@@ -41,12 +41,12 @@
"gui_copied_hidservauth_title": "HidServAuth a été copié",
"gui_settings_window_title": "Paramètres",
"gui_settings_autoupdate_timestamp": "Dernière vérification : {}",
- "gui_settings_close_after_first_download_option": "Arrêter le partage après envoi des fichiers",
- "gui_settings_connection_type_label": "Comment OnionShare devrait-il se connecter à Tor ?",
- "gui_settings_connection_type_control_port_option": "Se connecter en utilisant un port de contrôle",
+ "gui_settings_close_after_first_download_option": "Arrêter le partage après l’envoi des fichiers",
+ "gui_settings_connection_type_label": "Comment OnionShare devrait-il se connecter à Tor ?",
+ "gui_settings_connection_type_control_port_option": "Se connecter en utilisant le port de contrôle",
"gui_settings_connection_type_socket_file_option": "Se connecter en utilisant un fichier d’interface de connexion",
"gui_settings_socket_file_label": "Fichier d’interface de connexion",
- "gui_settings_socks_label": "Port SOCKS",
+ "gui_settings_socks_label": "Port SOCKS",
"gui_settings_authenticate_no_auth_option": "Pas d’authentification ou authentification par témoin",
"gui_settings_authenticate_password_option": "Mot de passe",
"gui_settings_password_label": "Mot de passe",
@@ -57,24 +57,24 @@
"gui_settings_autostop_timer": "Arrêter le partage à :",
"connecting_to_tor": "Connexion au réseau Tor",
"help_config": "Emplacement du fichier personnalisé de configuration JSON (facultatif)",
- "large_filesize": "Avertissement : envoyer un gros partage peut prendre des heures",
- "gui_copied_hidservauth": "La ligne HidServAuth a été copiée dans le presse-papiers",
+ "large_filesize": "Avertissement : Envoyer un partage volumineux peut prendre des heures",
+ "gui_copied_hidservauth": "La ligne HidServAuth a été copiée dans le presse-papiers",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
- "zip_progress_bar_format": "Compression : %p %",
- "error_ephemeral_not_supported": "OnionShare exige au moins Tor 0.2.7.1 et python3-stem 1.4.0.",
+ "zip_progress_bar_format": "Compression : %p%",
+ "error_ephemeral_not_supported": "OnionShare exige au moins et Tor 0.2.7.1 et python3-stem 1.4.0.",
"help_autostop_timer": "Arrêter le partage après un certain nombre de secondes",
"gui_tor_connection_error_settings": "Dans les paramètres, essayez de changer la façon dont OnionShare se connecte au réseau Tor.",
- "no_available_port": "Impossible de trouver un port disponible pour démarrer le service oignon",
+ "no_available_port": "Impossible de trouver un port disponible pour démarrer le service onion",
"gui_share_stop_server_autostop_timer": "Arrêter le partage ({})",
"systray_upload_started_title": "Envoi OnionShare démarré",
"systray_upload_started_message": "Une personne a commencé à envoyer des fichiers vers votre ordinateur",
"gui_no_downloads": "Pas encore de téléchargement",
- "gui_copied_url_title": "L’adresse OnionShare a été copiée",
+ "gui_copied_url_title": "L’adresse OnionShare a été copiée",
"gui_quit_title": "Pas si vite",
"gui_share_quit_warning": "Des fichiers sont en cours d’envoi. Voulez-vous vraiment quitter OnionShare ?",
"gui_receive_quit_warning": "Des fichiers sont en cours de réception. Voulez-vous vraiment quitter OnionShare ?",
- "gui_settings_whats_this": "<a href='{0:s}'>Qu’est-ce que c’est ?</a>",
- "gui_settings_autoupdate_label": "Vérifier les nouvelles versions",
+ "gui_settings_whats_this": "<a href='{0:s}'>Qu’est-ce que ceci ?</a>",
+ "gui_settings_autoupdate_label": "Vérifier la présence d’une nouvelle",
"gui_settings_autoupdate_option": "Me signaler toute nouvelle version",
"gui_settings_general_label": "Paramètres généraux",
"gui_settings_sharing_label": "Paramètres de partage",
@@ -82,7 +82,7 @@
"gui_settings_connection_type_automatic_option": "Essayer la configuration automatique avec le Navigateur Tor",
"gui_settings_connection_type_test_button": "Tester la connexion à Tor",
"gui_settings_control_port_label": "Port de contrôle",
- "gui_settings_authenticate_label": "Paramètres d’authentification à Tor",
+ "gui_settings_authenticate_label": "Paramètres d’authentification de Tor",
"gui_settings_tor_bridges": "Prise en charge des ponts de Tor",
"gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés",
"gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
@@ -96,7 +96,7 @@
"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": "La version de Tor intégrée dans OnionShare ne fonctionne pas en mode développeur sous Windows ou macOS.",
"settings_error_bundled_tor_timeout": "La connexion à Tor prend trop de temps. Êtes-vous connecté à Internet ? Votre horloge système est-elle mal réglée ?",
- "settings_error_bundled_tor_broken": "OnionShare n’a pas réussi à se connecter à Tor en arrière-plan :\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare n’a pas réussi à se connecter à Tor :\n{}",
"error_tor_protocol_error": "Une erreur est survenue avec Tor : {}",
"error_tor_protocol_error_unknown": "Une erreur inconnue est survenue avec Tor",
"error_invalid_private_key": "Ce type de clé privée n’est pas pris en charge",
@@ -154,13 +154,13 @@
"gui_download_upload_progress_eta": "{0:s}, Fin : {1:s}, %p%",
"error_rate_limit": "Quelqu’un a effectué trop de tentatives échouées pour deviner votre mot de passe, c’est pourquoi OnionShare a arrêté le serveur. Redémarrez le partage et envoyez au destinataire une nouvelle adresse pour partager.",
"error_stealth_not_supported": "Pour utiliser l’autorisation client, Tor 0.2.9.1-alpha (ou le Navigateur Tor 6.5) et python3-stem 1.5.0 ou versions ultérieures sont exigés.",
- "gui_settings_stealth_option": "Utiliser l’autorisation client",
+ "gui_settings_stealth_option": "Utiliser l’autorisation du client",
"timeout_upload_still_running": "En attente de la fin de l'envoi",
- "gui_settings_stealth_hidservauth_string": "Vous avez enregistré votre clé privée pour qu’elle puisse être réutilisée,\nvous pouvez maintenant cliquer pour copier votre HidServAuth.",
- "gui_settings_autoupdate_check_button": "Vérifier s’il existe une nouvelle version",
+ "gui_settings_stealth_hidservauth_string": "L’enregistrement de votre clé privée pour réutilisation signifie que vous pouvez maintenant cliquer pour copier votre HidServAuth.",
+ "gui_settings_autoupdate_check_button": "Vérifier la présence d’une nouvelle version",
"settings_test_success": "Vous êtes connecté au contrôleur Tor.\n\nVersion de Tor : {}\nPrend en charge les services onion éphémères : {}.\nPrend en charge l’authentification client : {}.\nPrend en charge la nouvelle génération d’adresses .onion : {}.",
- "update_error_check_error": "Impossible de vérifier l’existence d’une mise à jour : le site Web d’OnionShare indique que la dernière version ne peut pas être reconnue '{}'…",
- "update_error_invalid_latest_version": "Impossible de vérifier la présence d’une mise à jour : êtes-vous bien connecté à Tor ou le site Web d’OnionShare est-il hors service ?",
+ "update_error_check_error": "Impossible de vérifier l’existence d’une mise à jour : vous n’êtes peut-être pas connecté à Tor ou le site Web d’OnionShare est hors service ?",
+ "update_error_invalid_latest_version": "Impossible de vérifier la présence d’une mise à jour : le site Web d’OnionShare indique que la version la plus récente est la méconnaissable '{}'…",
"gui_tor_connection_ask": "Ouvrir les paramètres pour résoudre le problème de connexion à Tor ?",
"gui_tor_connection_canceled": "Impossible de se connecter à Tor.\n\nAssurez-vous d’être connecté à Internet, puis rouvrez OnionShare et configurez sa connexion à Tor.",
"gui_use_legacy_v2_onions_checkbox": "Utiliser les adresses héritées",
@@ -174,13 +174,13 @@
"systray_upload_page_loaded_message": "Une personne a chargé la page d'envoi",
"gui_share_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}",
"gui_receive_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}",
- "gui_settings_tor_bridges_obfs4_radio_option": "Utiliser les transports enfichables obfs4 intégrés",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Utiliser les transports enfichables obfs4 intégrés",
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utiliser les transports enfichables obfs4 intégrés (exige obfs4proxy)",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utiliser les transports enfichables meek_lite (Azure) intégrés",
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utiliser les transports enfichables meek_lite (Azure) intégrés (exige obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Avertissement : l’exploitation de ponts meek_lite demande beaucoup de ressources au Projet Tor.<br><br>Ne les utilisez que si vous ne pouvez pas vous connecter directement à Tor par les transports obfs4 ou autres ponts normaux.",
"gui_settings_autostop_timer_checkbox": "Utiliser une minuterie d’arrêt automatique",
- "gui_server_started_after_autostop_timer": "La minuterie d’arrêt automatique est arrivée au bout de son délai avant le démarrage du serveur.\nVeuillez mettre en place un nouveau partage.",
+ "gui_server_started_after_autostop_timer": "La minuterie d’arrêt automatique est arrivée au bout de son délai avant le démarrage du serveur. Veuillez mettre en place un nouveau partage.",
"gui_server_autostop_timer_expired": "La minuterie d’arrêt automatique est déjà arrivée au bout de son délai. Veuillez la modifier pour commencer le partage.",
"close_on_autostop_timer": "Arrêté, car la minuterie d’arrêt automatique est arrivée au bout de son délai",
"gui_add_files": "Ajouter des fichiers",
@@ -212,7 +212,7 @@
"gui_connect_to_tor_for_onion_settings": "Se connecter à Tor pour voir les paramètres du service onion",
"systray_share_completed_message": "L’envoi de fichiers est terminé",
"gui_all_modes_transfer_canceled": "Annulé le {}",
- "gui_settings_onion_label": "Paramètres onion",
+ "gui_settings_onion_label": "Paramètres onion",
"gui_all_modes_transfer_canceled_range": "Annulé {} - {}",
"gui_stop_server_autostop_timer_tooltip": "La minuterie d’arrêt automatique se termine à {}",
"gui_start_server_autostart_timer_tooltip": "La minuterie de démarrage automatique se termine à {}",
@@ -240,6 +240,55 @@
"history_requests_tooltip": "{} Requêtes Web",
"systray_individual_file_downloaded_title": "Le fichier individuel a été chargé",
"systray_individual_file_downloaded_message": "Le fichier individuel {} a été visualisé",
- "gui_settings_csp_header_disabled_option": "Désactiver l’en-tête Stratégie de sécurité du contenu",
- "gui_settings_website_label": "Paramètres des sites Web"
+ "gui_settings_csp_header_disabled_option": "Désactiver l’en-tête Politique de sécurité de contenu",
+ "gui_settings_website_label": "Paramètres des sites Web",
+ "gui_close_tab_warning_title": "Confirmez-vous ?",
+ "gui_new_tab_website_description": "Hébergez un site Web onion statique HTML à partir de votre ordinateur.",
+ "gui_new_tab_website_button": "Publier des sites Web",
+ "gui_new_tab_receive_description": "Transformez votre ordinateur en service de stockage fichiers. Les gens pourront utiliser le Navigateur Tor pour envoyer des fichiers vers votre ordinateur.",
+ "gui_new_tab_receive_button": "Recevoir des fichiers",
+ "gui_new_tab_share_description": "Choisissez sur votre ordinateur des fichiers à envoyer à quelqu’un d’autre. La ou les personnes à qui vous souhaitez envoyer des fichiers devront utiliser le Navigateur Tor pour les télécharger de vous.",
+ "gui_new_tab_share_button": "Partager des fichiers",
+ "gui_new_tab_tooltip": "Ouvrir un nouvel onglet",
+ "gui_new_tab": "Nouvel onglet",
+ "gui_close_tab_warning_persistent_description": "Cet onglet est persistant. Si vous le fermez, vous perdrez l’adresse onion qu’il utilise. Voulez-vous vraiment le fermer ?",
+ "mode_settings_autostop_timer_checkbox": "Arrêter un service onion à une heure prédéterminée",
+ "mode_settings_autostart_timer_checkbox": "Démarrer un service onion à une heure prédéterminée",
+ "mode_settings_website_disable_csp_checkbox": "Ne pas envoyer d’en-tête Politique de sécurité de contenu (permet à votre site Web d’utiliser des ressources tierces)",
+ "mode_settings_receive_data_dir_browse_button": "Parcourir",
+ "mode_settings_receive_data_dir_label": "Enregistrer les fichiers dans",
+ "mode_settings_share_autostop_sharing_checkbox": "Cesser le partage une fois que les fichiers ont été envoyés (décocher afin de permettre le téléchargement de fichiers individuels)",
+ "mode_settings_client_auth_checkbox": "Utiliser l’autorisation du client",
+ "mode_settings_legacy_checkbox": "Utiliser une ancienne adresse (service onion v2, non recommandée)",
+ "mode_settings_public_checkbox": "Ne pas utiliser un mot de passe",
+ "mode_settings_persistent_checkbox": "Enregistrer cet onglet et l’ouvrir automatiquement quand j’ouvre OnionShare",
+ "mode_settings_advanced_toggle_hide": "Cacher les paramètres avancés",
+ "mode_settings_advanced_toggle_show": "Afficher les paramètres avancés",
+ "gui_quit_warning_cancel": "Annuler",
+ "gui_quit_warning_description": "Le partage est actif dans certains de vos onglets. Si vous sortez, tous vos onglets seront fermés. Voulez-vous vraiment sortir ?",
+ "gui_quit_warning_title": "Confirmez-vous ?",
+ "gui_close_tab_warning_cancel": "Annuler",
+ "gui_close_tab_warning_close": "Fermer",
+ "gui_close_tab_warning_website_description": "Vous hébergez activement un site Web. Voulez-vous vraiment fermer cet onglet ?",
+ "gui_close_tab_warning_receive_description": "Vous êtes en train de recevoir des fichiers. Voulez-vous vraiment fermer cet onglet ?",
+ "gui_close_tab_warning_share_description": "Vous êtes en train d’envoyer des fichiers. Voulez-vous vraiment fermer cet onglet ?",
+ "gui_tab_name_chat": "Dialogue en ligne",
+ "gui_tab_name_website": "Site Web",
+ "gui_tab_name_receive": "Recevoir",
+ "gui_tab_name_share": "Partager",
+ "gui_new_tab_chat_button": "Dialoguer anonymement",
+ "gui_open_folder_error": "Échec d’ouverture du dossier avec xdg-open. Le fichier est ici : {}",
+ "gui_qr_code_description": "Balayez ce code QR avec un lecteur de code QR, tel que l’appareil photo votre appareil, afin de partager plus facilement l’adresse OnionShare avec quelqu’un.",
+ "gui_qr_code_dialog_title": "Code QR d’OnionShare",
+ "gui_show_url_qr_code": "Afficher le code QR",
+ "gui_receive_flatpak_data_dir": "Comme vous avez installé OnionShare grâce à Flatpak, vous devez enregistrer vos fichiers dans un sous-dossier de ~/OnionShare.",
+ "gui_chat_stop_server": "Arrêter le serveur de dialogue en ligne",
+ "gui_chat_start_server": "Démarrer le serveur de dialogue en ligne",
+ "gui_chat_stop_server_autostop_timer": "Arrêter le serveur de dialogue en ligne ({})",
+ "gui_file_selection_remove_all": "Tout supprimer",
+ "gui_remove": "Supprimer",
+ "gui_main_page_chat_button": "Lancer le dialogue en ligne",
+ "gui_main_page_website_button": "Lancer l’hébergement",
+ "gui_main_page_receive_button": "Lancer la réception",
+ "gui_main_page_share_button": "Lancer le partage"
}
diff --git a/share/locale/ga.json b/desktop/src/onionshare/resources/locale/ga.json
index f04e96e2..76e9d64a 100644
--- a/share/locale/ga.json
+++ b/desktop/src/onionshare/resources/locale/ga.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bain úsáid as córais iompair ionphlugáilte ionsuite meek_lite (Azure) (obfs4proxy de dhíth)",
"gui_settings_meek_lite_expensive_warning": "Rabhadh: Tá sé an-chostasach ar Thionscadal Tor na droichid meek_lite a chur ar fáil.<br><br>Iarraimid ort gan iad a úsáid má tá tú in ann ceangal díreach a bhunú le Tor, nó trí chóras iompair obfs4, nó trí dhroichead eile.",
"gui_settings_tor_bridges_custom_radio_option": "Úsáid droichid shaincheaptha",
- "gui_settings_tor_bridges_custom_label": "Is féidir leat droichid a fháil ó <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Is féidir leat droichid a fháil ó <a href=\"https://bridges.torproject.org/options?lang=ga\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Níl aon cheann de na droichid ag obair.\nSeiceáil arís iad, nó bain triail as droichid eile.",
"gui_settings_button_save": "Sábháil",
"gui_settings_button_cancel": "Cealaigh",
diff --git a/share/locale/gu.json b/desktop/src/onionshare/resources/locale/gu.json
index bd855bf9..15c7790d 100644
--- a/share/locale/gu.json
+++ b/desktop/src/onionshare/resources/locale/gu.json
@@ -1,20 +1,20 @@
{
"config_onion_service": "",
- "preparing_files": "",
+ "preparing_files": "કમ્પ્રેસિંગ ફાઇલો.",
"give_this_url": "",
"give_this_url_stealth": "",
"give_this_url_receive": "",
"give_this_url_receive_stealth": "",
"ctrlc_to_stop": "",
"not_a_file": "",
- "not_a_readable_file": "",
- "no_available_port": "",
- "other_page_loaded": "",
- "close_on_autostop_timer": "",
- "closing_automatically": "",
+ "not_a_readable_file": "{0: s} એ વાંચી શકાય તેવી ફાઇલ નથી.",
+ "no_available_port": "Onion સેવા શરૂ કરવા માટે ઉપલબ્ધ બંદર શોધી શકાયું નહીં",
+ "other_page_loaded": "સરનામું લોડ થયું",
+ "close_on_autostop_timer": "બંધ થયું કારણ કે સ્વત stop-સ્ટોપ ટાઇમર સમાપ્ત થઈ ગયો છે",
+ "closing_automatically": "અટક્યું કારણ કે સ્થાનાંતરણ પૂર્ણ છે",
"timeout_download_still_running": "",
"timeout_upload_still_running": "",
- "large_filesize": "",
+ "large_filesize": "ચેતવણી: મોટો શેર મોકલવામાં કલાકો લાગી શકે છે",
"systray_menu_exit": "",
"systray_download_started_title": "",
"systray_download_started_message": "",
@@ -32,8 +32,8 @@
"help_verbose": "",
"help_filename": "",
"help_config": "",
- "gui_drag_and_drop": "",
- "gui_add": "",
+ "gui_drag_and_drop": "ફાઇલો અને ફોલ્ડર્સ ખેંચો અને છોડો\nવહેંચણી શરૂ કરવા માટે",
+ "gui_add": "ઉમેરો",
"gui_delete": "",
"gui_choose_items": "",
"gui_share_start_server": "",
@@ -181,5 +181,8 @@
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "",
"gui_settings_language_label": "",
- "gui_settings_language_changed_notice": ""
+ "gui_settings_language_changed_notice": "",
+ "gui_add_files": "ફાઇલો ઉમેરો",
+ "gui_add_folder": "ફોલ્ડર ઉમેરો",
+ "incorrect_password": "ખોટો પાસવર્ડ"
}
diff --git a/share/locale/he.json b/desktop/src/onionshare/resources/locale/he.json
index 07840429..c0965d19 100644
--- a/share/locale/he.json
+++ b/desktop/src/onionshare/resources/locale/he.json
@@ -34,23 +34,23 @@
"help_config": "",
"gui_drag_and_drop": "",
"gui_add": "הוסף",
- "gui_add_files": "",
- "gui_add_folder": "",
- "gui_delete": "מחיקה",
- "gui_choose_items": "בחירה",
- "gui_share_start_server": "",
- "gui_share_stop_server": "",
- "gui_share_stop_server_autostop_timer": "",
+ "gui_add_files": "הוסף קבצים",
+ "gui_add_folder": "הוסף תיקייה",
+ "gui_delete": "מחק",
+ "gui_choose_items": "בחר",
+ "gui_share_start_server": "התחל לשתף",
+ "gui_share_stop_server": "הפסק לשתף",
+ "gui_share_stop_server_autostop_timer": "הפסק לשתף ({})",
"gui_share_stop_server_autostop_timer_tooltip": "",
"gui_receive_start_server": "",
"gui_receive_stop_server": "",
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
- "gui_copy_url": "",
+ "gui_copy_url": "העתק כתובת",
"gui_copy_hidservauth": "",
"gui_downloads": "",
"gui_no_downloads": "",
- "gui_canceled": "Canceled",
+ "gui_canceled": "מבוטל",
"gui_copied_url_title": "",
"gui_copied_url": "",
"gui_copied_hidservauth_title": "",
diff --git a/share/locale/hi.json b/desktop/src/onionshare/resources/locale/hi.json
index 9cfc310d..9cfc310d 100644
--- a/share/locale/hi.json
+++ b/desktop/src/onionshare/resources/locale/hi.json
diff --git a/desktop/src/onionshare/resources/locale/hr.json b/desktop/src/onionshare/resources/locale/hr.json
new file mode 100644
index 00000000..a5f56283
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/hr.json
@@ -0,0 +1,232 @@
+{
+ "preparing_files": "Komprimiranje datoteka.",
+ "not_a_readable_file": "{0:s} nije čitljiva datoteka.",
+ "no_available_port": "Priključak za pokretanje Onion usluge nije pronađen",
+ "other_page_loaded": "Adresa učitana",
+ "incorrect_password": "Neispravna lozinka",
+ "close_on_autostop_timer": "Zaustavljeno, jer je vrijeme timera za automatsko zaustavljanje isteklo",
+ "closing_automatically": "Zaustavljeno, jer je prijenos završen",
+ "large_filesize": "Upozorenje: Slanje velike količine podataka može trajati satima",
+ "gui_drag_and_drop": "Povuci i ispusti datoteke i mape koje želiš dijeliti",
+ "gui_add": "Dodaj",
+ "gui_add_files": "Dodaj datoteke",
+ "gui_add_folder": "Dodaj mapu",
+ "gui_delete": "Izbriši",
+ "gui_choose_items": "Odaberi",
+ "gui_share_start_server": "Pokreni dijeljenje",
+ "gui_share_stop_server": "Zaustavi dijeljenje",
+ "gui_share_stop_server_autostop_timer": "Zaustavi dijeljenje ({})",
+ "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko zaustavljanje završava pri {}",
+ "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_copy_url": "Kopiraj adresu",
+ "gui_copy_hidservauth": "Kopiraj HidServAuth",
+ "gui_canceled": "Prekinuto",
+ "gui_copied_url_title": "OnionShare adresa je kopirana",
+ "gui_copied_url": "OnionShare adresa je kopirana u međuspremnik",
+ "gui_copied_hidservauth_title": "HidServAuth kopirano",
+ "gui_copied_hidservauth": "HidServAuth redak je kopiran u međuspremnik",
+ "gui_waiting_to_start": "Planirano pokretanje za {}. Pritisni za prekid.",
+ "gui_please_wait": "Pokretanje … Pritisni za prekid.",
+ "gui_quit_title": "Ne tako brzo",
+ "gui_share_quit_warning": "Proces slanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?",
+ "gui_receive_quit_warning": "Proces primanja datoteka je u tijeku. Zaista želiš zatvoriti OnionShare?",
+ "gui_quit_warning_quit": "Izađi",
+ "gui_quit_warning_dont_quit": "Odustani",
+ "error_rate_limit": "Netko je prečesto pokušao pogoditi tvoju lozinku, pa je OnionShare zaustavio poslužitelja. Ponovo pokreni dijeljenje i primatelju pošalji novu adresu za dijeljenje.",
+ "zip_progress_bar_format": "Komprimiranje: %p %",
+ "error_stealth_not_supported": "Za korištenje autorizacije klijenta, potrebni su barem Tor 0.2.9.1-alpha (ili Tor Browser 6.5) i python3-stem 1.5.0.",
+ "error_ephemeral_not_supported": "OnionShare zahtijeva barem Tor 0.2.7.1 i python3-stem 1.4.0.",
+ "gui_settings_window_title": "Postavke",
+ "gui_settings_whats_this": "<a href='{0:s}'>Što je ovo?</a>",
+ "gui_settings_stealth_option": "Koristi autorizaciju klijenta",
+ "gui_settings_stealth_hidservauth_string": "Budući da je privatni ključ spremljen za ponovnu upotrebu, znači da sada možeš kopirati tvoj HidServAuth.",
+ "gui_settings_autoupdate_label": "Traži nove verzije",
+ "gui_settings_autoupdate_option": "Obavijesti me o novim verzijama",
+ "gui_settings_autoupdate_timestamp": "Zadnja provjera: {}",
+ "gui_settings_autoupdate_timestamp_never": "Nikada",
+ "gui_settings_autoupdate_check_button": "Traži nove verzije",
+ "gui_settings_general_label": "Opće postavke",
+ "gui_settings_onion_label": "Onion postavke",
+ "gui_settings_sharing_label": "Postavke za dijeljenje",
+ "gui_settings_close_after_first_download_option": "Zaustavi dijeljenje nakon što se datoteke pošalju",
+ "gui_settings_csp_header_disabled_option": "Isključi zaglavlje za politike sigurnosti sadržaja",
+ "gui_settings_individual_downloads_label": "Odznači, za preuzimanje pojedinačnih datoteka",
+ "gui_settings_connection_type_label": "Kako se OnionShare treba povezati s Torom?",
+ "gui_settings_connection_type_bundled_option": "Koristi verziju Tora koja je ugrađena u OnionShareu",
+ "gui_settings_connection_type_automatic_option": "Pokušaj automatsku konfiguraciju s Tor preglednikom",
+ "gui_settings_connection_type_control_port_option": "Poveži se koristeći kontrolni priključak",
+ "gui_settings_connection_type_socket_file_option": "Poveži se koristeći socket datoteku",
+ "gui_settings_connection_type_test_button": "Ispitaj vezu s Torom",
+ "gui_settings_control_port_label": "Kontrolni priključak",
+ "gui_settings_socket_file_label": "Socket datoteka",
+ "gui_settings_socks_label": "SOCKS priključak",
+ "gui_settings_authenticate_label": "Postavke za autentifikaciju na Tor",
+ "gui_settings_authenticate_no_auth_option": "Bez autentifikacije ili autentifikacija kolačićem",
+ "gui_settings_authenticate_password_option": "Lozinka",
+ "gui_settings_password_label": "Lozinka",
+ "gui_settings_tor_bridges": "Torova podrška za mostove",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Ne koristi mostove",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Koristi ugrađene obfs4 uključive prijenose",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Koristi ugrađene obfs4 uključive prijenose (potreban je obfs4proksi)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Koristi ugrađene meek_lite (Azure) uključive prijenose",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) uključive prijenose (potreban je obfs4proksi)",
+ "gui_settings_meek_lite_expensive_warning": "Upozorenje: meek_lite mostovi troše velike količine resursa za pokretanje Tor projekta.<br><br>Koristi ih samo ako se ne možeš povezati s Torom direktno putem obfs4 prijenosa ili drugih normalnih mostova.",
+ "gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove",
+ "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti na <a href=\"https://bridges.torproject.org/options?lang=hr\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Nijedan od dodanih mostova ne funkcionira.\nProvjeri ih ili dodaj druge.",
+ "gui_settings_button_save": "Spremi",
+ "gui_settings_button_cancel": "Odustani",
+ "gui_settings_button_help": "Pomoć",
+ "gui_settings_autostop_timer_checkbox": "Koristi timer za automatsko zaustavljanje",
+ "gui_settings_autostop_timer": "Zaustavi dijeljenje pri:",
+ "gui_settings_autostart_timer_checkbox": "Koristi timer za automatsko pokretanje",
+ "gui_settings_autostart_timer": "Pokreni dijeljenje pri:",
+ "settings_error_unknown": "Nije moguće povezivanje s Tor kontrolerom, jer tvoje postavke nemaju smisla.",
+ "settings_error_automatic": "Neuspjelo povezivanje s Tor kontrolerom. Radi li Tor preglednik (dostupan na torproject.org) u pozadini?",
+ "settings_error_socket_port": "Nije moguće povezivanje s Tor kontrolerom pri {}:{}.",
+ "settings_error_socket_file": "Nije moguće povezivanje s Tor kontrolerom pomoću socket datoteke {}.",
+ "settings_error_auth": "Povezan s {}:{}, ali autentifikacija nije moguća. Možda ovo nije Tor kontroler?",
+ "settings_error_missing_password": "Povezan s Tor kontrolerom, ali zahtijeva lozinku za autentifikaciju.",
+ "settings_error_unreadable_cookie_file": "Povezan s Tor kontrolerom, ali je lozinka možda pogrešna ili tvom korisniku nije dozvoljeno čitati datoteku kolačića.",
+ "settings_error_bundled_tor_not_supported": "Tor verzija koja se isporučuje s OnionShare ne radi u razvojnom modusu operacijskih sustava Windows ili macOS.",
+ "settings_error_bundled_tor_timeout": "Povezivanje s Torom traje predugo. Možda nemaš vezu s internetom ili imaš netočno postavljen sat sustava?",
+ "settings_error_bundled_tor_broken": "Neuspjelo povezivanje OnionShare-a s Torom:\n{}",
+ "settings_test_success": "Povezan s Tor kontrolerom.\n\nTor verzija: {}\nPodržava kratkotrajne Onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava .onion adrese sljedeće generacije: {}.",
+ "error_tor_protocol_error": "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 {}.",
+ "update_error_check_error": "Neuspjela pretraga za novom verzijom: možda nemaš vezu s Torom ili OnionShare web-stranica ne radi?",
+ "update_error_invalid_latest_version": "Neuspjela pretraga za novom verzijom: OnionShare web-stranica kaže, da je zadnja verzija neprepoznatljiva „{}” …",
+ "update_not_available": "Koristiš najnoviji OnionShare.",
+ "gui_tor_connection_ask": "Otvoriti postavke za podešavanje veze s Torom?",
+ "gui_tor_connection_ask_open_settings": "Da",
+ "gui_tor_connection_ask_quit": "Zatvori",
+ "gui_tor_connection_error_settings": "U postavkama promijeni način na koji se OnionShare povezuje s Tor mrežom.",
+ "gui_tor_connection_canceled": "Neuspjelo povezivanje s Torom.\n\nProvjeri vezu s internetom, a zatim ponovo pokreni OnionShare i postavi njegovu vezu s Torom.",
+ "gui_tor_connection_lost": "Prekinuta veza s Torom.",
+ "gui_server_started_after_autostop_timer": "Vrijeme timera za automatsko 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_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.",
+ "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",
+ "gui_save_private_key_checkbox": "Koristi trajnu adresu",
+ "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_status_indicator_share_stopped": "Spremno za dijeljenje",
+ "gui_status_indicator_share_working": "Pokretanje …",
+ "gui_status_indicator_share_scheduled": "Planirano …",
+ "gui_status_indicator_share_started": "Dijeljenje",
+ "gui_status_indicator_receive_stopped": "Spremno za primanje",
+ "gui_status_indicator_receive_working": "Pokretanje …",
+ "gui_status_indicator_receive_scheduled": "Planirano …",
+ "gui_status_indicator_receive_started": "Primanje",
+ "gui_file_info": "{} datoteke, {}",
+ "gui_file_info_single": "{} datoteka, {}",
+ "history_in_progress_tooltip": "{} u tijeku",
+ "history_completed_tooltip": "{} završeno",
+ "history_requests_tooltip": "{} web zahtjeva",
+ "error_cannot_create_data_dir": "Neuspjelo stvaranje mape za OnionShare podatke: {}",
+ "gui_receive_mode_warning": "Modus primanja dozvoljava korisnicima prenijeti datoteke na tvoje računalo.<br><br><b>Pri tome neke datoteke mogu preuzeti kontrolu nad tvojim računalom, ako ih otvoriš. Otvaraj samo stvari od ljudi kojima vjeruješ ili ako znaš što radiš.</b>",
+ "gui_mode_share_button": "Dijeli datoteke",
+ "gui_mode_receive_button": "Primaj datoteke",
+ "gui_mode_website_button": "Objavi web-stranicu",
+ "gui_settings_receiving_label": "Postavke za primanje",
+ "gui_settings_website_label": "Postavke za web-stranicu",
+ "gui_settings_data_dir_label": "Spremi datoteke u",
+ "gui_settings_data_dir_browse_button": "Pretraži",
+ "gui_settings_public_mode_checkbox": "Javni modus",
+ "gui_open_folder_error_nautilus": "Nije moguće otvoriti mapu, jer Nautilus nije dostupan. Datoteka je ovdje: {}",
+ "gui_settings_language_label": "Željeni jezik",
+ "gui_settings_language_changed_notice": "Za primjenu novog jezika, ponovo pokreni OnionShare.",
+ "systray_menu_exit": "Izađi",
+ "systray_page_loaded_title": "Stranica učitana",
+ "systray_page_loaded_message": "OnionShare adresa učitana",
+ "systray_share_started_title": "Dijeljenje pokrenuto",
+ "systray_share_started_message": "Počinje slanja datoteka nekome",
+ "systray_share_completed_title": "Dijeljenje završeno",
+ "systray_share_completed_message": "Završeno je slanje datoteka",
+ "systray_share_canceled_title": "Dijeljenje prekinuto",
+ "systray_share_canceled_message": "Netko je prekinuo primanje tvojih datoteka",
+ "systray_receive_started_title": "Primanje pokrenuto",
+ "systray_receive_started_message": "Netko ti šalje datoteke",
+ "gui_all_modes_history": "Kronologija",
+ "gui_all_modes_clear_history": "Izbriši sve",
+ "gui_all_modes_transfer_started": "Pokrenuto {}",
+ "gui_all_modes_transfer_finished_range": "Preneseno {} – {}",
+ "gui_all_modes_transfer_finished": "Preneseno {}",
+ "gui_all_modes_transfer_canceled_range": "Prekinuto {} – {}",
+ "gui_all_modes_transfer_canceled": "Prekinuto {}",
+ "gui_all_modes_progress_complete": "%p %, {0:s} proteklo.",
+ "gui_all_modes_progress_starting": "{0:s}, %p % (izračunavanje)",
+ "gui_all_modes_progress_eta": "{0:s}, procijenjeno: {1:s}, %p %",
+ "gui_share_mode_no_files": "Nijedna datoteka još nije poslana",
+ "gui_share_mode_autostop_timer_waiting": "Čeka se na završetak slanja",
+ "gui_website_mode_no_files": "Nijedna web-stranica još nije dijeljena",
+ "gui_receive_mode_no_files": "Nijedna datoteka još nije primljena",
+ "gui_receive_mode_autostop_timer_waiting": "Čeka se na završetak primanja",
+ "receive_mode_upload_starting": "Započinje prijenos ukupne veličine od {}",
+ "days_first_letter": "d",
+ "hours_first_letter": "h",
+ "minutes_first_letter": "m",
+ "seconds_first_letter": "s",
+ "mode_settings_website_disable_csp_checkbox": "Ne šalji zaglavlja politike sigurnosti sadržaja (omogućuje tvojim web-stranicama koristiti strane resurse)",
+ "mode_settings_receive_data_dir_browse_button": "Pregledaj",
+ "mode_settings_receive_data_dir_label": "Spremi datoteke u",
+ "mode_settings_share_autostop_sharing_checkbox": "Zaustavi 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_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",
+ "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke",
+ "mode_settings_advanced_toggle_show": "Prikaži napredne postavke",
+ "gui_quit_warning_cancel": "Odustani",
+ "gui_quit_warning_description": "Na nekim tvojim karticama je dijeljenje aktivno. Ako zatvoriš program, zatvorit će se sve kartice. Stvarno želiš zatvoriti program?",
+ "gui_quit_warning_title": "Stvarno?",
+ "gui_close_tab_warning_cancel": "Odustani",
+ "gui_close_tab_warning_close": "Zatvori",
+ "gui_close_tab_warning_website_description": "Imaš aktivni hosting za web-stranicu. Stvarno želiš zatvoriti ovu karticu?",
+ "gui_close_tab_warning_receive_description": "Trenutačno primaš datoteke. Stvarno želiš zatvoriti ovu karticu?",
+ "gui_close_tab_warning_share_description": "Trenutačno šalješ datoteke. Stvarno želiš zatvoriti ovu karticu?",
+ "gui_close_tab_warning_persistent_description": "Ovo je trajna kartica. Ako je zatvoriš, izgubit ćeš onion adresu koju koristi. Stvarno je želiš zatvoriti?",
+ "gui_close_tab_warning_title": "Stvarno?",
+ "gui_new_tab_website_description": "Postavi hosting za statičku HTML onion web-stranicu na tvom računalu.",
+ "gui_new_tab_website_button": "Objavi web-stranicu",
+ "gui_new_tab_share_description": "Odaberi datoteke na računalu koje nekome želiš poslati. Za preuzimanje tih datoteka, osoba ili ljudi kojima šalješ datoteke moraju koristiti Tor preglednik.",
+ "gui_new_tab_receive_description": "Pretvori svoje računalo u internetski dropbox. Ljudi će moći koristiti Tor preglednik za slanje datoteka na tvoje računalo.",
+ "gui_new_tab_receive_button": "Primaj datoteke",
+ "gui_new_tab_share_button": "Dijeli datoteke",
+ "gui_new_tab_tooltip": "Otvori novu karticu",
+ "gui_new_tab": "Nova kartica",
+ "gui_qr_code_description": "Skeniraj ovaj QR kȏd pomoću QR čitača, kao što je kamera na tvom telefonu, za lakše dijeljenje adrese OnionSharea.",
+ "gui_receive_flatpak_data_dir": "Budući da je tvoj OnionShare instaliran pomoću Flatpak-a, datoteke moraš spremiti u jednu mapu u ~/OnionShare.",
+ "gui_tab_name_chat": "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_chat_stop_server_autostop_timer": "Zaustavi poslužitelja za chat ({})",
+ "gui_tab_name_receive": "Primi",
+ "gui_open_folder_error": "Otvaranje mape s xdg-open nije uspjelo. Datoteka je ovdje: {}",
+ "gui_tab_name_website": "Web-stranica",
+ "gui_tab_name_share": "Dijeli",
+ "gui_qr_code_dialog_title": "OnionShare QR-kod",
+ "gui_show_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_website_button": "Pokreni hosting",
+ "gui_main_page_receive_button": "Pokreni primanje",
+ "gui_main_page_share_button": "Pokreni dijeljenje"
+}
diff --git a/desktop/src/onionshare/resources/locale/hu.json b/desktop/src/onionshare/resources/locale/hu.json
new file mode 100644
index 00000000..7d0f6766
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/hu.json
@@ -0,0 +1,196 @@
+{
+ "config_onion_service": "",
+ "preparing_files": "Fájlok tömörítése.",
+ "give_this_url": "",
+ "give_this_url_stealth": "",
+ "give_this_url_receive": "",
+ "give_this_url_receive_stealth": "",
+ "ctrlc_to_stop": "",
+ "not_a_file": "",
+ "not_a_readable_file": "{0:s} nem egy olvasható fájl.",
+ "no_available_port": "Nem található elérhető port az onion szolgáltatás indításához",
+ "other_page_loaded": "Cím betöltve",
+ "close_on_autostop_timer": "Leállítva, mert az auto-sop időzítő lejárt",
+ "closing_automatically": "Leállítva, mert az átvitel véget ért",
+ "timeout_download_still_running": "",
+ "large_filesize": "Figyelem: A nagyobb fájlok elküldése órákat vehet igénybe",
+ "systray_menu_exit": "Kilépés",
+ "systray_download_started_title": "",
+ "systray_download_started_message": "",
+ "systray_download_completed_title": "",
+ "systray_download_completed_message": "",
+ "systray_download_canceled_title": "",
+ "systray_download_canceled_message": "",
+ "systray_upload_started_title": "",
+ "systray_upload_started_message": "",
+ "help_local_only": "",
+ "help_stay_open": "",
+ "help_autostop_timer": "",
+ "help_stealth": "",
+ "help_receive": "",
+ "help_verbose": "",
+ "help_filename": "",
+ "help_config": "",
+ "gui_drag_and_drop": "Húzzon ide fájlt vagy mappát\na megosztás megkezdéséhez",
+ "gui_add": "Hozzáadás",
+ "gui_delete": "Törlés",
+ "gui_choose_items": "Kiválaszt",
+ "gui_share_start_server": "Megosztás kezdése",
+ "gui_share_stop_server": "Megosztás leállítása",
+ "gui_share_stop_server_autostop_timer": "Megosztás leállítása ({})",
+ "gui_share_stop_server_autostop_timer_tooltip": "",
+ "gui_receive_start_server": "Fogadó mód indítása",
+ "gui_receive_stop_server": "Fogadó mód leállítása",
+ "gui_receive_stop_server_autostop_timer": "Fogadó mód leállítása ({} van hátra)",
+ "gui_receive_stop_server_autostop_timer_tooltip": "",
+ "gui_copy_url": "Cím másolása",
+ "gui_copy_hidservauth": "HidServAuth másolása",
+ "gui_downloads": "",
+ "gui_no_downloads": "",
+ "gui_canceled": "Megszakítva",
+ "gui_copied_url_title": "OnionShare-cím másolva",
+ "gui_copied_url": "OnionShare-cím a vágólapra másolva",
+ "gui_copied_hidservauth_title": "HidServAuth másolva",
+ "gui_copied_hidservauth": "HidServAuth-sor a vágólapra másolva",
+ "gui_please_wait": "Indítás... Kattints a megszakításhoz.",
+ "gui_download_upload_progress_complete": "",
+ "gui_download_upload_progress_starting": "",
+ "gui_download_upload_progress_eta": "",
+ "version_string": "",
+ "gui_quit_title": "Állj csak meg",
+ "gui_share_quit_warning": "A fájlküldés folyamatban van. Biztosan kilépsz az OnionShare-ből?",
+ "gui_receive_quit_warning": "A fájlok fogadása folyamatban van. Biztosan kilépsz az OnionShare-ből?",
+ "gui_quit_warning_quit": "Kilépés",
+ "gui_quit_warning_dont_quit": "Mégse",
+ "error_rate_limit": "Valaki túl sokszor próbálta meg beírni a jelszavad, ezért az OnionShare leállította a szervert. Kezdj el újra megosztani és küldj új megosztási címet a fogadó félnek.",
+ "zip_progress_bar_format": "Tömörítés: %p%",
+ "error_stealth_not_supported": "A kliens-hitelesítés használatához szükséged van legalább ezekre: Tor 0.2.9.1-alpha (vagy Tor Browser 6.5) és python3-stem 1.5.0.",
+ "error_ephemeral_not_supported": "Az OnionShare minimális követelményei: Tor 0.2.7.1 és python3-stem 1.4.0.",
+ "gui_settings_window_title": "Beállítások",
+ "gui_settings_whats_this": "<a href='{0:s}'>Mi ez?</a>",
+ "gui_settings_stealth_option": "Kliens-hitelesítés használata",
+ "gui_settings_stealth_hidservauth_string": "Mivel elmentetted a titkos kulcsodat, mostantól kattintással másolhatod a HivServAuth-odat.",
+ "gui_settings_autoupdate_label": "Új verzió keresése",
+ "gui_settings_autoupdate_option": "Értesítést kérek, ha új verzió érhető el",
+ "gui_settings_autoupdate_timestamp": "Utoljára ellenőrizve: {}",
+ "gui_settings_autoupdate_timestamp_never": "Soha",
+ "gui_settings_autoupdate_check_button": "Új Verzió keresése",
+ "gui_settings_general_label": "Általános beállítások",
+ "gui_settings_sharing_label": "Megosztás beállításai",
+ "gui_settings_close_after_first_download_option": "Fejezze be a megosztást, ha a fájlokat elküldte",
+ "gui_settings_connection_type_label": "Hogyan csatlakozzon az OnionShare a Tor-hoz?",
+ "gui_settings_connection_type_bundled_option": "Beépített Tor-verzió használata",
+ "gui_settings_connection_type_automatic_option": "Automatikus konfiguráció a Tor-ral",
+ "gui_settings_connection_type_control_port_option": "Csatlakozás kontroll port által",
+ "gui_settings_connection_type_socket_file_option": "Szokettfájl használata",
+ "gui_settings_connection_type_test_button": "Tor-kapcsolat tesztelése",
+ "gui_settings_control_port_label": "Kontroll port",
+ "gui_settings_socket_file_label": "Szokettfájl",
+ "gui_settings_socks_label": "SOCKS port",
+ "gui_settings_authenticate_label": "Tor hitelesítési beállítások",
+ "gui_settings_authenticate_no_auth_option": "Nincs hitelesítés, vagy sütik általi hitelesítés",
+ "gui_settings_authenticate_password_option": "Jelszó",
+ "gui_settings_password_label": "Jelszó",
+ "gui_settings_tor_bridges": "Tor híd támogatása",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Ne használjon hidakat",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Beépített obfs4 pluggable transports használata",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Beépített obfs4 pluggable transports használata (obfs4proxy szükséges)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Beépített meek_lite (Azure) pluggable transports használata",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Beépített meek_lite (Azure) pluggable transports használata (obfs4proxy szükséges)",
+ "gui_settings_meek_lite_expensive_warning": "Figyelem: A meek_lite hidak fenntartása nagyon költséges a Tor Project számára.<br><br>Csak akkor használd őket, ha nem tudsz közetlenül a Tor-hoz csatlakozni az obfs4 vagy más hidak által.",
+ "gui_settings_tor_bridges_custom_radio_option": "Egyéb hidak használata",
+ "gui_settings_tor_bridges_custom_label": "Hidakat innen szerezhetsz: <a href=\"https://bridges.torproject.org/options?lang=hu\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Egyetlen híd sem működik.\nEllenőrizd őket, vagy adj hozzá újakat.",
+ "gui_settings_button_save": "Mentés",
+ "gui_settings_button_cancel": "Mégse",
+ "gui_settings_button_help": "Súgó",
+ "gui_settings_autostop_timer_checkbox": "Leállítás automata időzítővel",
+ "gui_settings_autostop_timer": "Megosztás leállítása ekkor:",
+ "settings_error_unknown": "Nem lehet csatlakozni a Tor-kontrollerhez, mert értelmetlenek a beállításaid.",
+ "settings_error_automatic": "Nem lehet csatlakozni a Tor-kontrollerhez. Fut-e a Tor böngésző (letölthető innen: torproject.org) a háttérben?",
+ "settings_error_socket_port": "Nem lehet csatlakozni a Tor-kontrollerhez itt: {}:{}.",
+ "settings_error_socket_file": "Nem lehet csatlakozni a Tor-kontrollerhez az alábbi szokettfájl használatával: {}.",
+ "settings_error_auth": "Csatlakozva itt: {}:{}, de nem hitelesíthető. Biztos, hogy ez egy Tor-kontroller?",
+ "settings_error_missing_password": "Csatlakozva a Tor-kontrollerhez, de a hitelesítéshez jelszó szükséges.",
+ "settings_error_unreadable_cookie_file": "Csatlakozva a Tor-kontrollerhez, de vagy a jelszó hibás, vagy a felhasználó nem jogosult a süti fájl olvasására.",
+ "settings_error_bundled_tor_not_supported": "Az OnionShare beépített Tor-verziója nem használható fejlesztői módban Windows ill. macOS alatt.",
+ "settings_error_bundled_tor_timeout": "Túl sok időbe telik csatlakozni a Tor-hoz. Lehet hogy nincs internetkapcsolatod, vagy a rendszer órája pontatlan?",
+ "settings_error_bundled_tor_broken": "Az OnionShare nem tudott a háttérben a Tor-hoz csatlakozni:\n{}",
+ "settings_test_success": "Csatlakozva a Tor-kontrollerhez.\n\nTor-verziószám: {}\nTámogatott ideiglenes Onion szolgáltatások: {}.\nTámogatott kliens-hitelesítés: {}.\nTámogatott újgenerációs .onion címek: {}.",
+ "error_tor_protocol_error": "Hiba a Tor-ral: {}",
+ "error_tor_protocol_error_unknown": "Ismeretlen hiba a Tor-ral",
+ "error_invalid_private_key": "",
+ "connecting_to_tor": "Csatlakozás a Tor-hálózathoz",
+ "update_available": "Új OnionShare-verzió érhető el. <a href='{}'>Kattints ide</a> a letöltéshez.<br><br>A te verziód {}, a mostani pedig {}.",
+ "update_error_check_error": "Nem sikerült az új verzió keresése: Az OnionShare weboldal szerint az új verzió '{}' ám az felismerhetetlen…",
+ "update_error_invalid_latest_version": "Nem sikerült az új verzió keresése: Lehet, hogy nem csatlakoztál a Tor-hoz, vagy az OnionShare oldal nem elérhető?",
+ "update_not_available": "A legújabb OnionShare-verziót használod.",
+ "gui_tor_connection_ask": "",
+ "gui_tor_connection_ask_open_settings": "Igen",
+ "gui_tor_connection_ask_quit": "Kilépés",
+ "gui_tor_connection_error_settings": "",
+ "gui_tor_connection_canceled": "",
+ "gui_tor_connection_lost": "",
+ "gui_server_started_after_autostop_timer": "",
+ "gui_server_autostop_timer_expired": "",
+ "share_via_onionshare": "",
+ "gui_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": "Megosztás",
+ "gui_status_indicator_receive_stopped": "",
+ "gui_status_indicator_receive_working": "",
+ "gui_status_indicator_receive_started": "Bevétel",
+ "gui_file_info": "",
+ "gui_file_info_single": "",
+ "history_in_progress_tooltip": "",
+ "history_completed_tooltip": "",
+ "info_in_progress_uploads_tooltip": "",
+ "info_completed_uploads_tooltip": "",
+ "error_cannot_create_downloads_dir": "",
+ "receive_mode_downloads_dir": "",
+ "receive_mode_warning": "",
+ "gui_receive_mode_warning": "",
+ "receive_mode_upload_starting": "",
+ "receive_mode_received_file": "",
+ "gui_mode_share_button": "",
+ "gui_mode_receive_button": "",
+ "gui_settings_receiving_label": "",
+ "gui_settings_downloads_label": "",
+ "gui_settings_downloads_button": "Tallózás",
+ "gui_settings_receive_allow_receiver_shutdown_checkbox": "",
+ "gui_settings_public_mode_checkbox": "",
+ "systray_close_server_title": "",
+ "systray_close_server_message": "",
+ "systray_page_loaded_title": "",
+ "systray_download_page_loaded_message": "",
+ "systray_upload_page_loaded_message": "",
+ "gui_uploads": "",
+ "gui_no_uploads": "",
+ "gui_clear_history": "Az összes törlése",
+ "gui_upload_in_progress": "",
+ "gui_upload_finished_range": "",
+ "gui_upload_finished": "",
+ "gui_download_in_progress": "",
+ "gui_open_folder_error_nautilus": "",
+ "gui_settings_language_label": "Előnyben részesített nyelv",
+ "gui_settings_language_changed_notice": "",
+ "gui_add_files": "Fájlok hozzáadása",
+ "gui_add_folder": "Mappák hozzáadása",
+ "gui_stop_server_autostop_timer_tooltip": "Auto-stop időzítő megáll: {}",
+ "gui_start_server_autostart_timer_tooltip": "Auto-start időzítő megáll: {}",
+ "incorrect_password": "Rossz jelszó",
+ "gui_settings_autostart_timer": "Megosztás indítása ekkor:",
+ "gui_settings_autostart_timer_checkbox": "Indítás automata időzítővel",
+ "gui_settings_individual_downloads_label": "Ne pipáld be az egyenkénti fájlletöltés engedélyezéséhez",
+ "gui_settings_csp_header_disabled_option": "Tartalombiztonsági Irányelvek-fejléc tiltása",
+ "gui_settings_onion_label": "Onion-beállítások",
+ "gui_waiting_to_start": "Indulás ütemezve: {}. Kattints a megszakításhoz."
+}
diff --git a/share/locale/id.json b/desktop/src/onionshare/resources/locale/id.json
index 8ead263f..44adac8b 100644
--- a/share/locale/id.json
+++ b/desktop/src/onionshare/resources/locale/id.json
@@ -37,11 +37,11 @@
"gui_choose_items": "Pilih",
"gui_share_start_server": "Mulai berbagi",
"gui_share_stop_server": "Berhenti berbagi",
- "gui_share_stop_server_autostop_timer": "Berhenti Berbagi ({}d tersisa)",
+ "gui_share_stop_server_autostop_timer": "Berhenti berbagi ({})",
"gui_share_stop_server_autostop_timer_tooltip": "",
"gui_receive_start_server": "Mulai Mode Menerima",
"gui_receive_stop_server": "Menghentikan Mode Menerima",
- "gui_receive_stop_server_autostop_timer": "Menghentikan Mode Menerima ({} tersisa)",
+ "gui_receive_stop_server_autostop_timer": "Menghentikan Mode Menerima ({}d tersisa)",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "Salin Alamat",
"gui_copy_hidservauth": "Salin HidServAuth",
@@ -185,5 +185,8 @@
"gui_add_files": "Tambahkan berkas",
"gui_add_folder": "Tambahkan Folder",
"gui_settings_onion_label": "Pengaturan Onion",
- "incorrect_password": "Password salah"
+ "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 {}"
}
diff --git a/share/locale/is.json b/desktop/src/onionshare/resources/locale/is.json
index d90213e1..5a04b251 100644
--- a/share/locale/is.json
+++ b/desktop/src/onionshare/resources/locale/is.json
@@ -11,7 +11,7 @@
"no_available_port": "Fann ekki tiltæka gátt til að hefja á onion-þjónustuna",
"other_page_loaded": "Vistfangi hlaðið inn",
"close_on_autostop_timer": "Stöðvað vegna þess að sjálfvirk niðurtalning endaði",
- "closing_automatically": "Stöðvað vegna þess að flutningi er lokið",
+ "closing_automatically": "Stöðvað vegna þess að flutningi er lokið",
"timeout_download_still_running": "",
"large_filesize": "Aðvörun: að senda stóra skrá getur tekið klukkustundir",
"systray_menu_exit": "Hætta",
@@ -31,7 +31,7 @@
"help_debug": "Skrá OnionShare-villur í stdout og vefvillur á disk",
"help_filename": "Listi yfir skrár eða möppur sem á að deila",
"help_config": "Staðsetning sérsniðinnar JSON-stillingaskrár (valfrjálst)",
- "gui_drag_and_drop": "Dragðu og slepptu skrám og möppum\ntil að hefja deilingu",
+ "gui_drag_and_drop": "Dragðu og slepptu skrám og möppum til að hefja deilingu",
"gui_add": "Bæta við",
"gui_delete": "Eyða",
"gui_choose_items": "Veldu",
@@ -99,8 +99,8 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Nota innbyggðar meek_lite (Azure) 'pluggable transport' tengileiðir (þarfnast obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Aðvörun: Að reka meek_lite brýrnar er kostnaðarsamt fyrir Tor-verkefnið.<br><br>Ekki nota þær nema þér takist ekki að tengjast beint við Tor, með obfs4 tengileið, eða öðrum venjulegum brúm.",
"gui_settings_tor_bridges_custom_radio_option": "Nota sérsniðnar brýr",
- "gui_settings_tor_bridges_custom_label": "Þú getur náð í brýr frá <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
- "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka. \nYfirfarðu þær eða bættu öðrum við.",
+ "gui_settings_tor_bridges_custom_label": "Þú getur náð í brýr frá <a href=\"https://bridges.torproject.org/options?lang=is\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Engar af brúnum sem þú bættir við virka.\nYfirfarðu þær eða bættu öðrum við.",
"gui_settings_button_save": "Vista",
"gui_settings_button_cancel": "Hætta við",
"gui_settings_button_help": "Hjálp",
@@ -115,15 +115,15 @@
"settings_error_unreadable_cookie_file": "Tengt við Tor-stýringuna, en lykilorðið gæti verið rangt eða að notandinn þinn hafi ekki heimild til að lesa vefkökuskrána.",
"settings_error_bundled_tor_not_supported": "Sé notuð Tor útgáfan sem er innbyggð í OnionShare, virkar hún ekki í þróunarham á Windows eða macOS.",
"settings_error_bundled_tor_timeout": "Það tekur of langan tíma að tengjast við Tor. Kannski er ekki tenging við internetið, nú eða að klukka kerfisins sé ekki rétt stillt?",
- "settings_error_bundled_tor_broken": "OnionShare gat ekki tengst við Tor í bakgrunni:\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare gat ekki tengst við Tor:\n{}",
"settings_test_success": "Tengt við Tor-stýringuna.\n\nTor útgáfa: {}\nStyður stuttlifandi onion-þjónustur: {}.\nStyður auðkenningu biðlaraforrits: {}.\nStyður næstu-kynslóðar .onion vistföng: {}.",
"error_tor_protocol_error": "Það kom upp villa í Tor: {}",
"error_tor_protocol_error_unknown": "Það kom uppóþekkt villa varðandi Tor",
"error_invalid_private_key": "Þessi gerð einkalykils er ekki studd",
"connecting_to_tor": "Tengist við Tor-netkerfið",
"update_available": "Ný útgáfa OnionShare er komin út. <a href='{}'>Smelltu hér</a> til að ná í hana.<br><br>Þú ert að nota útgáfu {} og sú nýjasta er {}.",
- "update_error_check_error": "Gat ekki athugað með nýja uppfærslu: vefsvæði OnionShare tilkynnir að nýjasta útgáfan sé hin óskiljanlega '{}'…",
- "update_error_invalid_latest_version": "Gat ekki athugað með nýjar uppfærslur: mögulega ertu ekki tengd(ur) við Tor eða að vefsvæði OnionShare sé óvirkt í augnablikinu?",
+ "update_error_check_error": "Gat ekki athugað með nýjar uppfærslur: mögulega ertu ekki tengd(ur) við Tor eða að vefsvæði OnionShare sé óvirkt í augnablikinu?",
+ "update_error_invalid_latest_version": "Gat ekki athugað með nýjar uppfærslu: vefsvæði OnionShare tilkynnir að nýjasta útgáfan sé hin óskiljanlega '{}'…",
"update_not_available": "Þú ert þegar að keyra nýjustu útgáfu OnionShare.",
"gui_tor_connection_ask": "Opna stillingarnar til að ráða fram úr tengingu við Tor?",
"gui_tor_connection_ask_open_settings": "Já",
@@ -234,5 +234,54 @@
"gui_settings_individual_downloads_label": "Taktu merkið úr til að leyfa niðurhal á stökum skrám",
"history_requests_tooltip": "{} vefbeiðnir",
"gui_settings_csp_header_disabled_option": "Gera haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan",
- "gui_settings_website_label": "Stillingar vefsvæðis"
+ "gui_settings_website_label": "Stillingar vefsvæðis",
+ "gui_new_tab_share_description": "Veldu skrár á tölvunni til að senda einhverjum öðrum. Sá eða þau sem þú ætlar að senda skrárnar þarf að nota Tor-vafrann til að sækja þær frá þér.",
+ "gui_new_tab_receive_description": "Breyttu tölvunni þinni í nettengt afhendingarhólf (dropbox). Fólk getur þá notað Tor-vafrann til að senda skrár inn á tölvuna þína.",
+ "mode_settings_persistent_checkbox": "Vista þennan flipa og opna hann sjálfkrafa þegar ég opna OnionShare",
+ "gui_close_tab_warning_persistent_description": "Þessi flipi er viðvarandi. Ef þú lokar honum muntu tapa onion-vistfanginu sem hann er að nota. Ertu viss að þú viljir loka honum?",
+ "gui_quit_warning_description": "Deiling er virk í sumum flipanna þinna. Ef þú hættir núna, lokast allir fliparnir. Ertu viss um að þú viljir hætta?",
+ "mode_settings_share_autostop_sharing_checkbox": "Hætta að deila eftir að skrár hafa verið sendar (taka merkið úr reitnum til að leyfa niðurhal á stökum skrám)",
+ "mode_settings_website_disable_csp_checkbox": "Gera haus fyrir öryggisstefnu efnis (Content Security Policy) óvirkan (gerir vefsvæðinu þínu kleift að nota tilföng frá utanaðkomandi aðilum)",
+ "gui_close_tab_warning_share_description": "Þú ert að senda skrár. Ertu viss um að þú viljir loka þessum flipa?",
+ "mode_settings_legacy_checkbox": "Nota eldri gerð vistfangs (onion-þjónusta af útgáfu 2, ekki mælt með því)",
+ "gui_close_tab_warning_website_description": "Þú ert að hýsa vefsvæði. Ertu viss um að þú viljir loka þessum flipa?",
+ "gui_close_tab_warning_receive_description": "Þú ert að taka á móti skrám. Ertu viss um að þú viljir loka þessum flipa?",
+ "gui_new_tab_website_description": "Hýstu statskt HTML onion-vefsvæði frá tölvunni þinni.",
+ "mode_settings_receive_data_dir_browse_button": "Skoða",
+ "mode_settings_public_checkbox": "Ekki nota lykilorð",
+ "mode_settings_receive_data_dir_label": "Vista skrár í",
+ "mode_settings_autostart_timer_checkbox": "Ræsa onion-þjónustu á áætluðum tíma",
+ "gui_quit_warning_title": "Ertu viss?",
+ "gui_new_tab_share_button": "Deila skrám",
+ "mode_settings_advanced_toggle_show": "Birta ítarlegar stillingar",
+ "gui_new_tab_tooltip": "Opna nýjan flipa",
+ "gui_new_tab_receive_button": "Taka á móti skrám",
+ "mode_settings_client_auth_checkbox": "Nota auðkenningu biðlaraforrits",
+ "mode_settings_advanced_toggle_hide": "Fela ítarlegar stillingar",
+ "gui_quit_warning_cancel": "Hætta við",
+ "gui_close_tab_warning_title": "Ertu viss?",
+ "gui_new_tab_website_button": "Hýsa vefsvæði",
+ "gui_new_tab": "Nýr flipi",
+ "gui_close_tab_warning_close": "Loka",
+ "gui_close_tab_warning_cancel": "Hætta við",
+ "mode_settings_autostop_timer_checkbox": "Stöðva onion-þjónustu á áætluðum tíma",
+ "gui_receive_flatpak_data_dir": "Þar sem þú settir OnionShare upp með því að nota Flatpak, þá verður þú að vista skrár í möppu undir ~/OnionShare.",
+ "gui_tab_name_receive": "Taka á móti",
+ "gui_chat_stop_server": "Stöðva spjallþjón",
+ "gui_chat_start_server": "Ræsa spjallþjón",
+ "gui_tab_name_chat": "Spjall",
+ "gui_tab_name_website": "Vefsvæði",
+ "gui_tab_name_share": "Deila",
+ "gui_open_folder_error": "Mistókst að opna möppu með xdg-open. Skráin er hér: {}",
+ "gui_qr_code_description": "Skannaðu þennan QR-kóða með QR-kóðalesara, svo sem eins og með myndavélinni á símanum þínum, svo auðveldara sé fyrir þig að deila OnionShare-vistfanginu með öðrum.",
+ "gui_remove": "Fjarlægja",
+ "gui_chat_stop_server_autostop_timer": "Stöðva spjallþjón ({})",
+ "gui_qr_code_dialog_title": "QR-kóði OnionShare",
+ "gui_file_selection_remove_all": "Fjarlægja allt",
+ "gui_show_url_qr_code": "Birta QR-kóða",
+ "gui_new_tab_chat_button": "Spjalla nafnlaust",
+ "gui_main_page_chat_button": "Hefja spjall",
+ "gui_main_page_website_button": "Hefja hýsingu",
+ "gui_main_page_receive_button": "Hefja móttöku",
+ "gui_main_page_share_button": "Hefja deilingu"
}
diff --git a/share/locale/it.json b/desktop/src/onionshare/resources/locale/it.json
index 7692ae6c..f6e25927 100644
--- a/share/locale/it.json
+++ b/desktop/src/onionshare/resources/locale/it.json
@@ -104,7 +104,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usare i trasporti integrati meek_lite (Azure) selezionabili",
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usare i trasporti integrati meek_lite (Azure) selezionabili (richiede obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Attenzione: i bridge meek_lite sono molto pesanti per l'esecuzione del progetto Tor.<br><br>Da usare solo se impossibile connettersi a Tor direttamente, con obfs4, o altri bridge normali.",
- "gui_settings_tor_bridges_custom_label": "Puoi prendere i bridge da <a href=\"https://bridges.torproject.org/options\">1 https://bridges.torproject.org</a>2",
+ "gui_settings_tor_bridges_custom_label": "Puoi prendere i bridge da <a href=\"https://bridges.torproject.org/options?lang=it\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nessuno dei bridge che hai aggiunto funzionano\nControllali nuovamente o aggiungine altri.",
"gui_settings_button_save": "Salva",
"gui_settings_button_cancel": "Cancella",
diff --git a/share/locale/ja.json b/desktop/src/onionshare/resources/locale/ja.json
index 66926c77..95ee43b7 100644
--- a/share/locale/ja.json
+++ b/desktop/src/onionshare/resources/locale/ja.json
@@ -102,7 +102,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "組み込みのmeek_lite (Azure) pluggable transportを使用する(obsf4proxy必要)",
"gui_settings_meek_lite_expensive_warning": "警告:meek_liteブリッジはTor Projectにとって維持費がかさむ<br><br>直接にTorと接続できない場合、あるいはobsf4ブリッジや他のブリッジが使用できない場合のみに使って下さい。",
"gui_settings_tor_bridges_custom_radio_option": "カスタムブリッジを使用する",
- "gui_settings_tor_bridges_custom_label": "<a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>からブリッジを入手できます",
+ "gui_settings_tor_bridges_custom_label": "<a href=\"https://bridges.torproject.org/options?lang=ja\">https://bridges.torproject.org</a>からブリッジを入手できます",
"gui_settings_tor_bridges_invalid": "全ての追加したブリッジは機能しませんでした。\n再確認して、あるいは他のを追加して下さい。",
"gui_settings_button_save": "保存",
"gui_settings_button_cancel": "キャンセル",
diff --git a/share/locale/ka.json b/desktop/src/onionshare/resources/locale/ka.json
index 9c41ed9f..9c41ed9f 100644
--- a/share/locale/ka.json
+++ b/desktop/src/onionshare/resources/locale/ka.json
diff --git a/share/locale/km.json b/desktop/src/onionshare/resources/locale/km.json
index 44dfde5a..44dfde5a 100644
--- a/share/locale/km.json
+++ b/desktop/src/onionshare/resources/locale/km.json
diff --git a/share/locale/ko.json b/desktop/src/onionshare/resources/locale/ko.json
index adda3a69..adda3a69 100644
--- a/share/locale/ko.json
+++ b/desktop/src/onionshare/resources/locale/ko.json
diff --git a/share/locale/lg.json b/desktop/src/onionshare/resources/locale/lg.json
index 96b5a0d1..96b5a0d1 100644
--- a/share/locale/lg.json
+++ b/desktop/src/onionshare/resources/locale/lg.json
diff --git a/desktop/src/onionshare/resources/locale/lt.json b/desktop/src/onionshare/resources/locale/lt.json
new file mode 100644
index 00000000..c1493f77
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/lt.json
@@ -0,0 +1,208 @@
+{
+ "preparing_files": "Glaudinami failai.",
+ "not_a_readable_file": "{0:s} nėra perskaitomas failas.",
+ "no_available_port": "",
+ "other_page_loaded": "Adresas įkeltas",
+ "incorrect_password": "Neteisingas slaptažodis",
+ "close_on_autostop_timer": "",
+ "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_add": "Pridėti",
+ "gui_add_files": "Pridėti failus",
+ "gui_add_folder": "Pridėti aplanką",
+ "gui_delete": "Ištrinti",
+ "gui_choose_items": "Pasirinkti",
+ "gui_share_start_server": "Pradėti bendrinti",
+ "gui_share_stop_server": "Nustoti bendrinti",
+ "gui_share_stop_server_autostop_timer": "Nustoti bendrinti ({})",
+ "gui_stop_server_autostop_timer_tooltip": "",
+ "gui_start_server_autostart_timer_tooltip": "",
+ "gui_receive_start_server": "Įjungti gavimo veikseną",
+ "gui_receive_stop_server": "Išjungti gavimo veikseną",
+ "gui_receive_stop_server_autostop_timer": "Išjungti gavimo veikseną (Liko {})",
+ "gui_copy_url": "Kopijuoti adresą",
+ "gui_copy_hidservauth": "",
+ "gui_canceled": "Atsisakyta",
+ "gui_copied_url_title": "OnionShare adresas nukopijuotas",
+ "gui_copied_url": "OnionShare adresas nukopijuotas į iškarpinę",
+ "gui_copied_hidservauth_title": "",
+ "gui_copied_hidservauth": "",
+ "gui_waiting_to_start": "",
+ "gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.",
+ "error_rate_limit": "",
+ "zip_progress_bar_format": "Glaudinama: %p%",
+ "error_stealth_not_supported": "",
+ "error_ephemeral_not_supported": "",
+ "gui_settings_window_title": "Nustatymai",
+ "gui_settings_whats_this": "<a href='{0:s}'>Kas tai?</a>",
+ "gui_settings_stealth_option": "",
+ "gui_settings_stealth_hidservauth_string": "",
+ "gui_settings_autoupdate_label": "",
+ "gui_settings_autoupdate_option": "",
+ "gui_settings_autoupdate_timestamp": "",
+ "gui_settings_autoupdate_timestamp_never": "Niekada",
+ "gui_settings_autoupdate_check_button": "",
+ "gui_settings_general_label": "Bendri nustatymai",
+ "gui_settings_onion_label": "",
+ "gui_settings_sharing_label": "",
+ "gui_settings_close_after_first_download_option": "",
+ "gui_settings_csp_header_disabled_option": "",
+ "gui_settings_individual_downloads_label": "",
+ "gui_settings_connection_type_label": "",
+ "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": "Įrašyti",
+ "gui_settings_button_cancel": "Atsisakyti",
+ "gui_settings_button_help": "Žinynas",
+ "gui_settings_autostop_timer_checkbox": "",
+ "gui_settings_autostop_timer": "",
+ "gui_settings_autostart_timer_checkbox": "",
+ "gui_settings_autostart_timer": "",
+ "settings_error_unknown": "",
+ "settings_error_automatic": "",
+ "settings_error_socket_port": "",
+ "settings_error_socket_file": "",
+ "settings_error_auth": "",
+ "settings_error_missing_password": "",
+ "settings_error_unreadable_cookie_file": "",
+ "settings_error_bundled_tor_not_supported": "",
+ "settings_error_bundled_tor_timeout": "",
+ "settings_error_bundled_tor_broken": "",
+ "settings_test_success": "",
+ "error_tor_protocol_error": "",
+ "error_tor_protocol_error_unknown": "",
+ "connecting_to_tor": "",
+ "update_available": "",
+ "update_error_invalid_latest_version": "",
+ "update_error_check_error": "",
+ "update_not_available": "",
+ "gui_tor_connection_ask": "",
+ "gui_tor_connection_ask_open_settings": "Taip",
+ "gui_tor_connection_ask_quit": "Išeiti",
+ "gui_tor_connection_error_settings": "",
+ "gui_tor_connection_canceled": "",
+ "gui_tor_connection_lost": "",
+ "gui_server_started_after_autostop_timer": "",
+ "gui_server_autostop_timer_expired": "",
+ "gui_server_autostart_timer_expired": "",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
+ "share_via_onionshare": "",
+ "gui_connect_to_tor_for_onion_settings": "",
+ "gui_use_legacy_v2_onions_checkbox": "",
+ "gui_save_private_key_checkbox": "",
+ "gui_share_url_description": "",
+ "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_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_mode_share_button": "",
+ "gui_mode_receive_button": "",
+ "gui_mode_website_button": "",
+ "gui_settings_receiving_label": "",
+ "gui_settings_website_label": "",
+ "gui_settings_data_dir_label": "",
+ "gui_settings_data_dir_browse_button": "",
+ "gui_settings_public_mode_checkbox": "",
+ "gui_open_folder_error_nautilus": "",
+ "gui_settings_language_label": "",
+ "gui_settings_language_changed_notice": "",
+ "systray_menu_exit": "",
+ "systray_page_loaded_title": "",
+ "systray_page_loaded_message": "",
+ "systray_share_started_title": "",
+ "systray_share_started_message": "",
+ "systray_share_completed_title": "",
+ "systray_share_completed_message": "",
+ "systray_share_canceled_title": "",
+ "systray_share_canceled_message": "",
+ "systray_receive_started_title": "",
+ "systray_receive_started_message": "",
+ "gui_all_modes_history": "",
+ "gui_all_modes_clear_history": "",
+ "gui_all_modes_transfer_started": "",
+ "gui_all_modes_transfer_finished_range": "",
+ "gui_all_modes_transfer_finished": "",
+ "gui_all_modes_transfer_canceled_range": "",
+ "gui_all_modes_transfer_canceled": "",
+ "gui_all_modes_progress_complete": "",
+ "gui_all_modes_progress_starting": "",
+ "gui_all_modes_progress_eta": "",
+ "gui_share_mode_no_files": "",
+ "gui_share_mode_autostop_timer_waiting": "",
+ "gui_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_share_description": "",
+ "gui_new_tab_receive_button": "",
+ "gui_new_tab_receive_description": "",
+ "gui_new_tab_website_button": "",
+ "gui_new_tab_website_description": "",
+ "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": ""
+}
diff --git a/share/locale/mk.json b/desktop/src/onionshare/resources/locale/mk.json
index b389c2a0..b389c2a0 100644
--- a/share/locale/mk.json
+++ b/desktop/src/onionshare/resources/locale/mk.json
diff --git a/share/locale/ms.json b/desktop/src/onionshare/resources/locale/ms.json
index 8fda843a..8fda843a 100644
--- a/share/locale/ms.json
+++ b/desktop/src/onionshare/resources/locale/ms.json
diff --git a/share/locale/nb.json b/desktop/src/onionshare/resources/locale/nb_NO.json
index ea0f3319..51a2ee76 100644
--- a/share/locale/nb.json
+++ b/desktop/src/onionshare/resources/locale/nb_NO.json
@@ -3,7 +3,7 @@
"ctrlc_to_stop": "Trykk Ctrl+C for å stoppe tjeneren",
"not_a_file": "{0:s} er ikke en fil.",
"gui_copied_url": "OnionShare-adresse kopiert til utklippstavle",
- "other_page_loaded": "En annen side har blitt lastet",
+ "other_page_loaded": "Adresse innlastet",
"config_onion_service": "Setter opp løk-tjeneste på port {0:d}.",
"preparing_files": "Pakker filer.",
"give_this_url_stealth": "Gi denne adressen og HidServAuth-linjen til mottakeren:",
@@ -32,7 +32,7 @@
"help_verbose": "Log OnionShare-feil til stdout, og vev-feil til disk",
"help_filename": "Liste over filer eller mapper å dele",
"help_config": "Egendefinert JSON-oppsettsfil (valgfri)",
- "gui_drag_and_drop": "Dra og slipp filer og mapper\nfor å starte deling",
+ "gui_drag_and_drop": "Dra og slipp filer og mapper for å starte deling",
"gui_add": "Legg til",
"gui_delete": "Slett",
"gui_choose_items": "Velg",
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Bruk innebygd pluggbare meek_lite (Azure) transporter (krever obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Advarsel: Meek-lite-broene er veldig kostbare å kjøre for Tor-prosjektet.<br><br>Kun bruk dem hvis direkte tilkobling til Tor ikke virker, via obfs-transporter, eller andre normale broer.",
"gui_settings_tor_bridges_custom_radio_option": "Bruk egendefinerte broer",
- "gui_settings_tor_bridges_custom_label": "Du kan hente broer fra <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Du kan hente broer fra <a href=\"https://bridges.torproject.org/options?lang=nb\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Ingen av broene du la til virker.\nDobbeltsjekk dem eller legg til andre.",
"gui_settings_button_save": "Lagre",
"gui_settings_button_cancel": "Avbryt",
@@ -123,8 +123,8 @@
"error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet",
"connecting_to_tor": "Kobler til Tor-nettverket",
"update_available": "Ny OnionShare-versjon tilgjenglig. <a href='{}'>Klikk her</a> for å laste den ned.<br><br>Du bruker {} og nyeste versjon er {}.",
- "update_error_check_error": "Kunne ikke sjekke etter ny versjon: OnionShare-nettsiden sier at siste versjon er det ugjenkjennelige \"{}\"…",
- "update_error_invalid_latest_version": "Kunne ikke sjekke etter ny versjon: Kanskje du ikke er koblet til Tor, eller kanskje OnionShare-nettsiden er nede?",
+ "update_error_check_error": "Kunne ikke sjekke etter ny versjon: Kanskje du ikke er tilknyttet Tor, eller OnionShare-nettsiden er nede?",
+ "update_error_invalid_latest_version": "Kunne ikke sjekke etter ny versjon: OnionShare-nettsiden melder at siste versjon er det ugjenkjennelige «{}»…",
"update_not_available": "Du kjører siste versjon av OnionShare.",
"gui_tor_connection_ask": "Åpne innstillingene for å ordne opp i tilkoblingen til Tor?",
"gui_tor_connection_ask_open_settings": "Ja",
@@ -132,7 +132,7 @@
"gui_tor_connection_error_settings": "Prøv å endre hvordan OnionShare kobler til Tor-nettverket i innstillingene.",
"gui_tor_connection_canceled": "Kunne ikke koble til Tor.\n\nForsikre deg om at du er koblet til Internett, åpne så OnionShare igjen, og sett opp dets tilkobling til Tor.",
"gui_tor_connection_lost": "Frakoblet fra Tor.",
- "gui_server_started_after_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet.\nLag en ny deling.",
+ "gui_server_started_after_autostop_timer": "Tidsavbruddsuret gikk ut før tjeneren startet. Lag en ny deling.",
"gui_server_autostop_timer_expired": "Tidsavbruddsuret har gått ut allerede. Juster det for å starte deling.",
"share_via_onionshare": "Del via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Bruk gammeldagse adresser",
@@ -243,5 +243,53 @@
"gui_settings_individual_downloads_label": "Forby nedlasting av enkeltfiler",
"history_requests_tooltip": "{} vevforespørsler",
"systray_individual_file_downloaded_title": "Enkeltfil innlastet",
- "systray_individual_file_downloaded_message": "Enkeltfil {} sett"
+ "systray_individual_file_downloaded_message": "Enkeltfil {} sett",
+ "mode_settings_advanced_toggle_hide": "Skjul avanserte innstillinger",
+ "mode_settings_advanced_toggle_show": "Vis avanserte innstillinger",
+ "gui_quit_warning_cancel": "Avbryt",
+ "gui_quit_warning_title": "Er du sikker?",
+ "gui_close_tab_warning_cancel": "Avbryt",
+ "gui_close_tab_warning_close": "Lukk",
+ "gui_close_tab_warning_title": "Er du sikker?",
+ "gui_new_tab_website_button": "Offentliggjør nettside",
+ "gui_new_tab_share_button": "Del filer",
+ "gui_new_tab_tooltip": "Åpne en ny fane",
+ "gui_new_tab": "Ny fane",
+ "gui_settings_website_label": "Nettsideinnstillinger",
+ "mode_settings_receive_data_dir_browse_button": "Utforsk",
+ "mode_settings_receive_data_dir_label": "Lagre filer i",
+ "gui_new_tab_receive_button": "Motta filer",
+ "mode_settings_autostop_timer_checkbox": "Stopp løktjeneste ved planlagt tidspunkt",
+ "mode_settings_autostart_timer_checkbox": "Start løktjeneste ved planlagt tidspunkt",
+ "mode_settings_public_checkbox": "Ikke bruk passord",
+ "gui_close_tab_warning_receive_description": "Du mottar filer. Er du sikker på at du vil lukke denne fanen?",
+ "gui_close_tab_warning_share_description": "Du sender filer. Er du sikker på at du vil lukke denne fanen?",
+ "gui_chat_stop_server": "Stopp sludringstjener",
+ "gui_chat_start_server": "Start sludringstjener",
+ "gui_chat_stop_server_autostop_timer": "Stopp sludringstjener ({})",
+ "gui_file_selection_remove_all": "Fjern alle",
+ "gui_remove": "Fjern",
+ "gui_quit_warning_description": "Deling er aktiv i noen av fanene dine. Hvis du avslutter, vil alle fanene dine lukkes. Er du sikker på at du vil avslutte?",
+ "gui_close_tab_warning_website_description": "Du deler en nettside akkurat nå. Er du sikker på at du vil lukke denne fanen?",
+ "gui_settings_csp_header_disabled_option": "Ikke send hode for innholdssikkerhetspraksis",
+ "mode_settings_website_disable_csp_checkbox": "Ikke send hode for innholdssikkerhetspraksis (tillater nettsiden din å bruke tredjepartsressurser)",
+ "mode_settings_legacy_checkbox": "Bruk en gammeldags adresse (v2-løktjeneste, anbefales ikke)",
+ "mode_settings_persistent_checkbox": "Del denne fanen og åpne den automatisk sammen med OnionShare",
+ "gui_open_folder_error": "Klarte ikke å åpne mappe med xdg-open. Filen er her: {}",
+ "gui_receive_flatpak_data_dir": "Fordi du har installert OnionShare som Flatpak må du lagre filer til en mappe i ~/OnionShare.",
+ "mode_settings_share_autostop_sharing_checkbox": "Stopp deling etter at filer er sendt (fravelg for å tillate nedlasting av individuelle filer)",
+ "mode_settings_client_auth_checkbox": "Bruk klient-identitetsgodkjennelse",
+ "gui_close_tab_warning_persistent_description": "Denne fanen er vedvarende. Hvis du lukker den vil du miste løk-adressen den bruker. Er du sikker på at du vil lukke den?",
+ "gui_tab_name_chat": "Sludring",
+ "gui_tab_name_website": "Nettside",
+ "gui_tab_name_receive": "Motta",
+ "gui_tab_name_share": "Del",
+ "gui_new_tab_chat_button": "Sludre anonymt",
+ "gui_qr_code_description": "Skann denne QR-koden med en QR-kodeleser (f.eks. kameraprogrammet på enheten din) for enklere deling av OnionShare-adressen med noen.",
+ "gui_qr_code_dialog_title": "OnionShare-QR-kode",
+ "gui_show_url_qr_code": "Vis QR-kode",
+ "gui_main_page_chat_button": "Start sludring",
+ "gui_main_page_website_button": "Start vertsjening",
+ "gui_main_page_receive_button": "Start mottak",
+ "gui_main_page_share_button": "Start deling"
}
diff --git a/share/locale/nl.json b/desktop/src/onionshare/resources/locale/nl.json
index 0d414bc6..352e282f 100644
--- a/share/locale/nl.json
+++ b/desktop/src/onionshare/resources/locale/nl.json
@@ -84,10 +84,10 @@
"settings_error_unreadable_cookie_file": "Verbonden met de Tor controller, maar het wachtwoord kan onjuist zijn, of je gebruiker heeft geen toestemming om het cookie bestand te lezen.",
"settings_error_bundled_tor_not_supported": "De Tor versie die is meegeleverd bij OnionShare werkt niet in de ontwikkelaarsmodus op Windows of macOS.",
"settings_error_bundled_tor_timeout": "Verbinden met Tor duurt te lang. Misschien is je computer niet verbonden met internet, of je hebt een inaccurate systeemklok?",
- "settings_error_bundled_tor_broken": "OnionShare kan niet verbinden met Tor op de achtergrond:\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare kan geen verbinding maken met Tor:\n{}",
"settings_test_success": "Verbonden met de Tor controller.\n\nTor versie: {}\nOndersteunt ephemeral onion services: {}.\nOndersteunt client authentication: {}.\nOndersteunt next-gen .onion addresses: {}.",
"error_tor_protocol_error": "Er was een fout met Tor: {}",
- "connecting_to_tor": "Verbinden met het Tor network",
+ "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?",
@@ -130,17 +130,17 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gebruik ingebouwde meek_lite (Azure) pluggable transports (vereist obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Waarschuwing: De meek_lite bridges zijn erg kostbaar voor het Tor Project om uit te voeren. <br><br> Gebruik ze alleen als je niet direct met Tor kan verbinden, via obfs4 transports, of andere normale bridges.",
"gui_settings_tor_bridges_custom_radio_option": "Gebruik custom bridges",
- "gui_settings_tor_bridges_custom_label": "Je kan bridges krijgen via <a href=\"https://bridges.torproject.org/options\">1https://bridges.torproject.org</a>2",
+ "gui_settings_tor_bridges_custom_label": "Je kan bridges krijgen via <a href=\"https://bridges.torproject.org/options?lang=nl\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Geen van de bridges die je hebt toegevoegd werken. \nControleer ze of voeg andere toe.",
"gui_settings_autostop_timer_checkbox": "Gebruik auto-stop timer",
"error_tor_protocol_error_unknown": "Er was een onbekende fout met Tor",
"error_invalid_private_key": "Dit type privésleutel wordt niet ondersteund",
"gui_tor_connection_lost": "De verbinding met Tor is verbroken.",
"gui_use_legacy_v2_onions_checkbox": "Gebruik ouderwetse adressen",
- "gui_save_private_key_checkbox": "Gebruik een blijvend 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_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_url_label_persistent": "Deze share stopt niet vanzelf. <br><br>Elke volgende share hergebruikt het adres. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)",
+ "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.",
"gui_url_label_onetime_and_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.)",
@@ -167,7 +167,7 @@
"gui_settings_receiving_label": "Instellingen voor Ontvangen",
"gui_settings_downloads_label": "Sla bestanden op naar",
"gui_settings_downloads_button": "Surf",
- "gui_settings_public_mode_checkbox": "Openbaarmodus",
+ "gui_settings_public_mode_checkbox": "Openbare modus",
"systray_close_server_title": "OnionShare Server Afgesloten",
"systray_close_server_message": "Een gebruiker heeft de server gestopt",
"systray_page_loaded_title": "Pagina Geladen",
@@ -180,7 +180,7 @@
"gui_upload_finished_range": "{} is naar {} gestuurd",
"gui_upload_finished": "Verzonden {}",
"gui_download_in_progress": "Downloaden Gestart {}",
- "gui_open_folder_error_nautilus": "Kan de map niet openen omdat nautilus niet beschikbaar is. Het bestand staat hier: {}",
+ "gui_open_folder_error_nautilus": "Kan de map niet openen, omdat nautilus niet beschikbaar is. Het bestand staat hier: {}",
"gui_settings_language_label": "Voorkeurstaal",
"gui_settings_language_changed_notice": "Herstart OnionShare om de nieuwe taal te gebruiken.",
"gui_add_files": "Voeg bestanden toe",
@@ -234,11 +234,26 @@
"systray_individual_file_downloaded_message": "Individueel bestand {} bekeken",
"gui_settings_website_label": "Instellingen voor website",
"error_cannot_create_data_dir": "Kon geen OnionShare datamap aanmaken: {}",
- "gui_all_modes_progress_eta": "{0:s}, Verwachte Aankomsttijd: {1:s}, %p%",
+ "gui_all_modes_progress_eta": " {0:s}, Verwachte aankomsttijd: {1:s}, %p%",
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
"history_requests_tooltip": "{} webverzoeken",
- "gui_settings_csp_header_disabled_option": "Schakel Content Security Policy header uit"
+ "gui_settings_csp_header_disabled_option": "Schakel Content Security Policy header uit",
+ "mode_settings_share_autostop_sharing_checkbox": "Stop met het delen van bestanden nadat ze verzonden zijn (afvinken om het downloaden van individuele bestanden toe te staan)",
+ "mode_settings_legacy_checkbox": "Gebruik een verouderd adres (v2 onion service, niet aanbevolen)",
+ "mode_settings_public_checkbox": "Geen wachtwoord gebruiken",
+ "mode_settings_advanced_toggle_hide": "Verberg geavanceerde instellingen",
+ "mode_settings_advanced_toggle_show": "Toon geavanceerde instellingen",
+ "gui_quit_warning_cancel": "Annuleren",
+ "gui_quit_warning_title": "Weet je het zeker?",
+ "gui_close_tab_warning_cancel": "Annuleren",
+ "gui_close_tab_warning_close": "Afsluiten",
+ "gui_close_tab_warning_receive_description": "Je bent bezig met bestanden ontvangen. Weet je zeker dat je dit tabblad wilt sluiten?",
+ "gui_close_tab_warning_share_description": "Je bent bezig bestanden te sturen. Weet je zeker dat je dit tabblad wilt sluiten?",
+ "gui_close_tab_warning_title": "Weet je het zeker?",
+ "gui_new_tab_website_description": "Host een statische HTML onion website vanaf je computer.",
+ "gui_new_tab_receive_button": "Bestanden ontvangen",
+ "gui_new_tab_share_description": "Kies bestanden op jouw computer om naar iemand anders te sturen. De persoon of personen waar je de bestanden naar wilt sturen moeten de Tor Browser gebruiken om jouw bestanden te downloaden."
}
diff --git a/share/locale/pa.json b/desktop/src/onionshare/resources/locale/pa.json
index 165e297b..165e297b 100644
--- a/share/locale/pa.json
+++ b/desktop/src/onionshare/resources/locale/pa.json
diff --git a/share/locale/pl.json b/desktop/src/onionshare/resources/locale/pl.json
index 33b0ea73..cced6241 100644
--- a/share/locale/pl.json
+++ b/desktop/src/onionshare/resources/locale/pl.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Użyj wbudowanych przenośnych transportów meek_lite (Azure) (wymaga obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Uwaga: Mostki meek_lite są bardzo kosztowne dla Tor Project.<br><br>Korzystaj z nich tylko wtedy, gdy nie możesz połączyć się bezpośrednio z siecią Tor, poprzez obsf4 albo przez inne normalne mostki.",
"gui_settings_tor_bridges_custom_radio_option": "Użyj niestandardowych mostków",
- "gui_settings_tor_bridges_custom_label": "Mostki możesz znaleźć na <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Mostki możesz znaleźć na <a href=\"https://bridges.torproject.org/options?lang=pl\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Żadne z dodanych przez Ciebie mostków nie działają.\nZweryfikuj je lub dodaj inne.",
"gui_settings_button_save": "Zapisz",
"gui_settings_button_cancel": "Anuluj",
@@ -122,7 +122,7 @@
"error_invalid_private_key": "Ten typ klucza prywatnego jest niewspierany",
"connecting_to_tor": "Łączę z siecią Tor",
"update_available": "Nowa wersja programu OnionShare jest dostępna. <a href='{}'>Naciśnij tutaj</a> aby ją ściągnąć.<br><br>Korzystasz z wersji {} a najnowszą jest {}.",
- "update_error_check_error": "Nie można sprawdzić czy są dostępne aktualizacje. Strona programu OnionShare mówi, że ostatnia wersja programu jest nierozpoznawalna '{}'…",
+ "update_error_check_error": "Nie można sprawdzić czy jest dostępna aktualizacja. Strona programu OnionShare mówi, że ostatnia wersja programu jest nierozpoznawalna '{}'…",
"update_error_invalid_latest_version": "Nie można sprawdzić nowej wersji: Może nie masz połączenia z Torem lub nie działa witryna OnionShare?",
"update_not_available": "Korzystasz z najnowszej wersji OnionShare.",
"gui_tor_connection_ask": "Otworzyć ustawienia w celu poprawy połączenia z Tor?",
@@ -132,8 +132,8 @@
"gui_tor_connection_canceled": "Nie można połączyć się z Tor.\n\nSprawdź połączenie z Internetem, następnie ponownie otwórz OnionShare i skonfiguruj połączenie z Tor.",
"gui_tor_connection_lost": "Odłączony od Tor.",
"gui_server_started_after_autostop_timer": "Czasomierz automatycznego rozpoczęcia wygasł przed uruchomieniem serwera. Utwórz nowy udział.",
- "gui_server_autostop_timer_expired": "Czasomierz automatycznego rozpoczęcia wygasł. Zaktualizuj go, aby rozpocząć udostępnianie.",
- "share_via_onionshare": "OnionShare'uj to",
+ "gui_server_autostop_timer_expired": "Czasomierz automatycznego rozpoczęcia wygasł. Dostosuj go, aby rozpocząć udostępnianie.",
+ "share_via_onionshare": "Udostępniaj przez OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Użyj starszych adresów",
"gui_save_private_key_checkbox": "Użyj stałego adresu",
"gui_share_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b> pobrać</b> Twoje pliki za pomocą przeglądarki <b>Tor Browser</b>: <img src='{}' />",
@@ -181,7 +181,7 @@
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "Nie można otworzyć folderu, ponieważ nautilus nie jest dostępny. Plik jest tutaj:{}",
"gui_settings_language_label": "Preferowany język",
- "gui_settings_language_changed_notice": "Uruchom ponownie aplikację OnionShare, aby zmiana języka zaczęła obowiązywać.",
+ "gui_settings_language_changed_notice": "Uruchom ponownie OnionShare, aby zastosować nowy język.",
"timeout_upload_still_running": "Czekam na ukończenie wysyłania",
"gui_add_files": "Dodaj pliki",
"gui_add_folder": "Dodaj foldery",
@@ -189,7 +189,7 @@
"gui_waiting_to_start": "Planowane rozpoczęcie w {}. Kliknij, aby anulować.",
"gui_settings_onion_label": "Ustawienia Onion",
"gui_settings_autostart_timer": "Rozpocznij udział w:",
- "gui_server_autostart_timer_expired": "Zaplanowany czas już minął. Zaktualizuj go, aby rozpocząć udostępnianie.",
+ "gui_server_autostart_timer_expired": "Zaplanowany czas już minął. Dostosuj go, aby rozpocząć udostępnianie.",
"gui_status_indicator_share_scheduled": "Zaplanowane…",
"gui_status_indicator_receive_scheduled": "Zaplanowane…",
"error_cannot_create_data_dir": "Nie można utworzyć folderu danych OnionShare: {}",
@@ -219,11 +219,19 @@
"gui_receive_mode_autostop_timer_waiting": "Czekam na zakończenie odbioru",
"gui_start_server_autostart_timer_tooltip": "Automatyczne rozpoczęcie zakończy się {}",
"gui_settings_autostart_timer_checkbox": "Użyj czasomierza automatycznego rozpoczęcia",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Czas automatycznego zakończenia nie może być równy bądź wcześniejszy niż czas automatycznego startu. Zaktualizuj go, aby rozpocząć udostępnianie.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Czas automatycznego zakończenia nie może być równy bądź wcześniejszy niż czas automatycznego startu. Dostosuj go, aby rozpocząć udostępnianie.",
"gui_connect_to_tor_for_onion_settings": "Połącz się z Tor, aby zobaczyć ustawienia usług onion",
"gui_all_modes_progress_eta": "{0:s}, pozostało: {1:s}, %p%",
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
- "seconds_first_letter": "s"
+ "seconds_first_letter": "s",
+ "incorrect_password": "Niepoprawne hasło",
+ "gui_settings_csp_header_disabled_option": "Wyłącz nagłówek Polityki Bezpieczeństwa Treści",
+ "gui_website_mode_no_files": "Jeszcze niczego nie udostępniłeś",
+ "gui_website_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b>odwiedzić</b> twoją stronę używając przeglądarki <b>Tor Browser</b>: <img src='{}' />\n",
+ "gui_settings_website_label": "Ustawienia Strony",
+ "history_requests_tooltip": "{} żądań z sieci",
+ "gui_mode_website_button": "Opublikuj Stronę",
+ "gui_settings_individual_downloads_label": "Odznacz, aby umożliwić pobieranie pojedynczych plików."
}
diff --git a/share/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json
index 13c10b6c..41d8b6ed 100644
--- a/share/locale/pt_BR.json
+++ b/desktop/src/onionshare/resources/locale/pt_BR.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportadores plugáveis meek_lite (Azure) já instalados (requer obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek_lite são muito custosas para o Projeto Tor.<br><br>Use-as somente se você não conseguir se conectar ao Tor diretamente, via transportadores obfs4 ou outras pontes comuns.",
"gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas",
- "gui_settings_tor_bridges_custom_label": "Você pode obter pontes em <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Você pode obter pontes em <a href=\"https://bridges.torproject.org/options?lang=pt_BR\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nenhuma das ponte adicionadas funciona.\nTente usá-las de novo ou adicione outras.",
"gui_settings_button_save": "Salvar",
"gui_settings_button_cancel": "Cancelar",
@@ -115,15 +115,15 @@
"settings_error_unreadable_cookie_file": "Conectado ao controlador Tor, mas talvez a senha esteja incorreta ou o seu usuário não possua autorização para ler o arquivo de cookie.",
"settings_error_bundled_tor_not_supported": "Não é possível usar a versão de Tor que vem junto com OnionShare, em modo 'programação', com Windows ou macOS.",
"settings_error_bundled_tor_timeout": "A conexão ao Tor está demorando muito. O seu computado está conectado à Internet e o seu relógio de sistema, ajustado?",
- "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor em segundo plano:\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}",
"settings_test_success": "Conectado ao controlador Tor.\n\nVersão do Tor: {}\nPossui suporte para serviços onion efêmeros: {}.\nPossui suporte para autenticação de cliente: {}.\nPossui suporte para a próxima geração de endereços .onion: {}.",
"error_tor_protocol_error": "Houve um erro com Tor: {}",
"error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com Tor",
"error_invalid_private_key": "Este tipo de chave privada não possui suporte",
"connecting_to_tor": "Conectando à rede Tor",
"update_available": "Atualização de OnionShare disponível. <a href='{}'>Clique aqui</a> para obtê-la.<br><br>Você está usando a versão {} e a última é {}.",
- "update_error_check_error": "Não foi possível verificar se há uma nova versão: o website do OnionShare está dizendo que a última versão é a irreconhecível '{}'…",
- "update_error_invalid_latest_version": "Não foi possível verificar se há uma nova versão: talvez você não esteja conectada ao Tor, ou talvez o website do OnionShare esteja fora do ar?",
+ "update_error_check_error": "Não foi possível verificar a nova versão: talvez você não esteja conectado ao Tor ou o site OnionShare esteja inativo?",
+ "update_error_invalid_latest_version": "Não foi possível verificar a nova versão: o site OnionShare está dizendo que a versão mais recente é a irreconhecível '{}'…",
"update_not_available": "Você está rodando a última versão de OnionShare.",
"gui_tor_connection_ask": "Abrir as configurações para consertar a conexão ao Tor?",
"gui_tor_connection_ask_open_settings": "Sim",
@@ -234,5 +234,35 @@
"gui_mode_website_button": "Publicar Website",
"gui_website_mode_no_files": "Nenhum website compartilhado ainda",
"history_requests_tooltip": "{} solicitações da web",
- "gui_settings_website_label": "Configurações do Website"
-} \ No newline at end of file
+ "gui_settings_website_label": "Configurações do Website",
+ "mode_settings_website_disable_csp_checkbox": "Desativar cabeçalho da política de segurança de conteúdo (permite que seu site use recursos de terceiros)",
+ "mode_settings_receive_data_dir_browse_button": "Navegar",
+ "mode_settings_receive_data_dir_label": "Salvar arquivos em",
+ "mode_settings_share_autostop_sharing_checkbox": "Interrompa o compartilhamento após o envio dos arquivos (desmarque para permitir o download de arquivos individuais)",
+ "mode_settings_client_auth_checkbox": "Usar autorização de cliente",
+ "mode_settings_legacy_checkbox": "Usar um endereço herdado (serviço de onion v2, não recomendado)",
+ "mode_settings_autostop_timer_checkbox": "Interromper o serviço de onion na hora programada",
+ "mode_settings_autostart_timer_checkbox": "Iniciar serviço de onion na hora programada",
+ "mode_settings_public_checkbox": "Não usar uma senha",
+ "mode_settings_persistent_checkbox": "Salvar essa guia e abra-a automaticamente quando eu abrir o OnionShare",
+ "mode_settings_advanced_toggle_hide": "Ocultar configurações avançadas",
+ "mode_settings_advanced_toggle_show": "Mostrar configurações avançadas",
+ "gui_quit_warning_cancel": "Cancelar",
+ "gui_quit_warning_description": "O compartilhamento está ativo em algumas de suas guias. Se você sair, todas as suas guias serão fechadas. Você tem certeza que quer sair?",
+ "gui_quit_warning_title": "Você tem certeza?",
+ "gui_close_tab_warning_cancel": "Cancelar",
+ "gui_close_tab_warning_close": "Fechar",
+ "gui_close_tab_warning_website_description": "Você está hospedando ativamente um site. Tem certeza de que deseja fechar esta guia?",
+ "gui_close_tab_warning_receive_description": "Você está recebendo arquivos. Tem certeza de que deseja fechar esta guia?",
+ "gui_close_tab_warning_share_description": "Você está enviando arquivos. Tem certeza de que deseja fechar esta guia?",
+ "gui_close_tab_warning_persistent_description": "Essa guia é persistente. Se você fechá-lo, perderá o endereço de onion que está usando. Tem certeza de que deseja fechá-lo?",
+ "gui_close_tab_warning_title": "Você tem certeza?",
+ "gui_new_tab_website_description": "Hospede um site estático de onion HTML a partir do seu computador.",
+ "gui_new_tab_website_button": "Publicar site",
+ "gui_new_tab_receive_description": "Transforme seu computador em uma caixa de depósito online. As pessoas poderão usar o Navegador Tor para enviar arquivos para o seu computador.",
+ "gui_new_tab_receive_button": "Receber arquivos",
+ "gui_new_tab_share_description": "Escolha os arquivos no seu computador para enviar para outra pessoa. A pessoa ou pessoas para quem você deseja enviar os arquivos precisarão usar o Navegador Tor para fazer o download deles.",
+ "gui_new_tab_share_button": "Compartilhar arquivos",
+ "gui_new_tab_tooltip": "Abrir uma nova aba",
+ "gui_new_tab": "Nova aba"
+}
diff --git a/share/locale/pt_PT.json b/desktop/src/onionshare/resources/locale/pt_PT.json
index 40ace5a8..2bf59741 100644
--- a/share/locale/pt_PT.json
+++ b/desktop/src/onionshare/resources/locale/pt_PT.json
@@ -1,6 +1,6 @@
{
"config_onion_service": "A configurar o serviço onion na porta {0:d}.",
- "preparing_files": "A comprimir ficheiros.",
+ "preparing_files": "A comprimir os ficheiros.",
"give_this_url": "Dar este endereço ao destinatário:",
"give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:",
"give_this_url_receive": "Dar este endereço ao remetente:",
@@ -10,8 +10,8 @@
"not_a_readable_file": "{0:s} não é um ficheiro legível.",
"no_available_port": "Não foi possível encontrar uma porta disponível para iniciar o serviço onion",
"other_page_loaded": "Endereço carregado",
- "close_on_autostop_timer": "Parado porque o cronómetro de paragem automática chegou a zero",
- "closing_automatically": "Parado porque a transferência está completa",
+ "close_on_autostop_timer": "Parado porque o cronómetro de paragem automática expirou",
+ "closing_automatically": "Parado porque a transferência está concluída",
"timeout_download_still_running": "",
"large_filesize": "Aviso: o envio de ficheiros grandes pode levar várias horas",
"systray_menu_exit": "Sair",
@@ -31,7 +31,7 @@
"help_debug": "Registar erros do OnionShare no stdout e erros de rede no disco",
"help_filename": "Lista de ficheiros ou pastas a partilhar",
"help_config": "Localização personalizada do ficheiro de configuração JSON (opcional)",
- "gui_drag_and_drop": "Arrastar ficheiros e pastas\npara começar a partilhá-los",
+ "gui_drag_and_drop": "Arrastar e largar ficheiros e pastas\npara começar a partilhar",
"gui_add": "Adicionar",
"gui_delete": "Eliminar",
"gui_choose_items": "Escolher",
@@ -39,101 +39,101 @@
"gui_share_stop_server": "Parar de partilhar",
"gui_share_stop_server_autostop_timer": "Parar de partilhar ({})",
"gui_share_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}",
- "gui_receive_start_server": "Começar modo de receber",
- "gui_receive_stop_server": "Parar modo de receber",
- "gui_receive_stop_server_autostop_timer": "Parar modo de receber ({} restantes)",
+ "gui_receive_start_server": "Iniciar Modo de Receber",
+ "gui_receive_stop_server": "Parar Modo de Receber",
+ "gui_receive_stop_server_autostop_timer": "Parar Modo de Receber ({} restantes)",
"gui_receive_stop_server_autostop_timer_tooltip": "O cronómetro automático de parar a partilha termina em {}",
- "gui_copy_url": "Copiar endereço",
+ "gui_copy_url": "Copiar Endereço",
"gui_copy_hidservauth": "Copiar HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
"gui_canceled": "Cancelado",
- "gui_copied_url_title": "Endereço OnionShare copiado",
+ "gui_copied_url_title": "Endereço OnionShare Copiado",
"gui_copied_url": "O endereço OnionShare foi copiado para área de transferência",
- "gui_copied_hidservauth_title": "HidServAuth copiado",
+ "gui_copied_hidservauth_title": "HidServAuth Copiado",
"gui_copied_hidservauth": "Linha HidServAuth copiada para a área de transferência",
- "gui_please_wait": "A começar… Clicar para cancelar.",
+ "gui_please_wait": "A iniciar… Clique para cancelar.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
"gui_download_upload_progress_eta": "",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "Mais devagar",
- "gui_share_quit_warning": "O envio dos seus ficheiros ainda não terminou. Mesmo assim quer sair do OnionShare?",
- "gui_receive_quit_warning": "Ainda não recebeu todos os seus ficheiros. Mesmo assim quer sair do OnionShare?",
+ "gui_share_quit_warning": "O envio dos seus ficheiros ainda não terminou. Tem a certeza que deseja sair do OnionShare?",
+ "gui_receive_quit_warning": "Ainda não recebeu todos os seus ficheiros. Tem a certeza que que deseja sair do OnionShare?",
"gui_quit_warning_quit": "Sair",
"gui_quit_warning_dont_quit": "Cancelar",
- "error_rate_limit": "Alguém tentou por várias vezes aceder ao seu endereço, o que talvez signifique que essa pessoa esteja tentando adivinhá-lo. Por isso o OnionShare interrompeu o servidor. Recomece a partilhar e envie um novo endereço ao seu destinatário para continuar a partilhar.",
+ "error_rate_limit": "Alguém tentou por várias vezes adivinhar a sua palavra-passe, por isso OnionShare parou o servidor. Inicie novamente a partilha e envie um novo endereço ao destinatário para partilhar.",
"zip_progress_bar_format": "A comprimir: %p%",
- "error_stealth_not_supported": "Para usar uma autorização de cliente, precisa pelo menos do Tor 0.2.9.1-alpha (ou do Tor Browser 6.5) e do python3-stem 1.5.0.",
+ "error_stealth_not_supported": "Para utilizar uma autorização de cliente, precisa pelo menos do Tor 0.2.9.1-alpha (ou do Tor Browser 6.5) e do python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare requer pelo menos do Tor 0.2.7.1 e do python3-stem 1.4.0.",
"gui_settings_window_title": "Configurações",
"gui_settings_whats_this": "<a href='{0:s}'>O que é isto?</a>",
- "gui_settings_stealth_option": "Usar autorização de cliente",
- "gui_settings_stealth_hidservauth_string": "Após guardar a sua chave privada para reutilização, pode clicar para copiar o seu HidServAuth.",
- "gui_settings_autoupdate_label": "Verificação de novas atualizações",
- "gui_settings_autoupdate_option": "Notificar-me quando existir uma nova versão disponível",
+ "gui_settings_stealth_option": "Utilizar autorização de cliente",
+ "gui_settings_stealth_hidservauth_string": "Depois de guardar a sua chave privada para reutilização, pode clicar para copiar o seu HidServAuth.",
+ "gui_settings_autoupdate_label": "Procurar por nova versão",
+ "gui_settings_autoupdate_option": "Notificar-me quando estiver disponível uma nova versão",
"gui_settings_autoupdate_timestamp": "Última verificação: {}",
"gui_settings_autoupdate_timestamp_never": "Nunca",
- "gui_settings_autoupdate_check_button": "Verificar se há atualizações",
+ "gui_settings_autoupdate_check_button": "Procurar por Nova Versão",
"gui_settings_general_label": "Configurações gerais",
"gui_settings_sharing_label": "Configurações de partilha",
- "gui_settings_close_after_first_download_option": "Parar de partilhar após terminar o envio dos ficheiros",
- "gui_settings_connection_type_label": "Como é que o OnionShare se deve conectar ao Tor?",
- "gui_settings_connection_type_bundled_option": "Usar a versão do Tor que vem no OnionShare",
+ "gui_settings_close_after_first_download_option": "Parar partilha depois de terminar o envio dos ficheiros",
+ "gui_settings_connection_type_label": "Como é que o OnionShare deve ligar ao Tor?",
+ "gui_settings_connection_type_bundled_option": "Utilizar a versão do Tor integrada no OnionShare",
"gui_settings_connection_type_automatic_option": "Tentar configurar automaticamente com o Tor Browser",
- "gui_settings_connection_type_control_port_option": "Conectar utilizando a porta de controlo",
- "gui_settings_connection_type_socket_file_option": "Conectar utilizando um ficheiro socket",
- "gui_settings_connection_type_test_button": "Testar a conexão ao Tor",
+ "gui_settings_connection_type_control_port_option": "Ligar utilizando a porta de controlo",
+ "gui_settings_connection_type_socket_file_option": "Ligar utilizando um ficheiro socket",
+ "gui_settings_connection_type_test_button": "Testar a Ligação ao Tor",
"gui_settings_control_port_label": "Porta de controlo",
"gui_settings_socket_file_label": "Ficheiro socket",
"gui_settings_socks_label": "Porta SOCKS",
- "gui_settings_authenticate_label": "Configurações de autenticação do Tor",
- "gui_settings_authenticate_no_auth_option": "Sem autenticação nem cookie de autenticação",
+ "gui_settings_authenticate_label": "Definições de autenticação do Tor",
+ "gui_settings_authenticate_no_auth_option": "Sem autenticação, ou autenticação por cookie",
"gui_settings_authenticate_password_option": "Palavra-passe",
"gui_settings_password_label": "Palavra-passe",
- "gui_settings_tor_bridges": "Suporte a pontes Tor",
- "gui_settings_tor_bridges_no_bridges_radio_option": "Não usar pontes",
- "gui_settings_tor_bridges_obfs4_radio_option": "Usar transportadores plugáveis obfs4 já instalados",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Usar transportadores plugáveis obfs4 já instalados (requer obfs4proxy)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Usar transportadores plugáveis meek_lite (Azure) instalados",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Usar transportadores plugáveis meek_lite (Azure) instalados (requer obfs4proxy)",
- "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek_lite são muito dispendiosas para o Projeto Tor.<br><br>Use-as apenas se não conseguir conectar-se à rede Tor diretamente, via transportadores obfs4 ou outras pontes comuns.",
- "gui_settings_tor_bridges_custom_radio_option": "Usar pontes personalizadas",
- "gui_settings_tor_bridges_custom_label": "Pode obter pontes em <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges": "Suporte de ponte do Tor",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Não utilizar pontes",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Utilizar transportes ligáveis obfs4 integrados",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis obfs4 integrados (requer obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utilizar transportes ligáveis meek_lite (Azure) integrados",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utilizar transportes ligáveis meek_lite (Azure) integrados (requer obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Aviso: as pontes meek_lite são muito dispendiosas para o Projeto Tor.<br><br>Utilize-as apenas se não conseguir ligar diretamente ao Tor, via transportes obfs4, ou outras pontes normais.",
+ "gui_settings_tor_bridges_custom_radio_option": "Utilizar pontes personalizadas",
+ "gui_settings_tor_bridges_custom_label": "Pode obter pontes em <a href=\"https://bridges.torproject.org/options?lang=pt_PT\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nenhuma das pontes que adicionou funciona.\nVerifique se estão corretas ou adicione outras.",
"gui_settings_button_save": "Guardar",
"gui_settings_button_cancel": "Cancelar",
"gui_settings_button_help": "Ajuda",
- "gui_settings_autostop_timer_checkbox": "Usar cronómetro de paragem automática",
+ "gui_settings_autostop_timer_checkbox": "Utilizar cronómetro de paragem automática",
"gui_settings_autostop_timer": "Parar a partilha em:",
- "settings_error_unknown": "Não foi possível conectar ao controlador Tor porque as suas configurações não fazem sentido.",
- "settings_error_automatic": "Não foi possível conectar ao controlador do Tor. O Tor Browser (disponível no site torproject.org) está a ser executado em segundo plano?",
- "settings_error_socket_port": "Não foi possível conectar ao controlador do Tor em {}:{}.",
- "settings_error_socket_file": "Não foi possível conectar ao controlador Tor usando o ficheiro de socket {}.",
- "settings_error_auth": "Conectado a {}:{}, mas não foi possível autenticar. Talvez não seja um controlador Tor?",
- "settings_error_missing_password": "Conectado ao controlador Tor, mas é preciso ter uma palavra-passe para autenticar.",
- "settings_error_unreadable_cookie_file": "Conectado ao controlador Tor, mas talvez a palavra-passe esteja incorreta ou o seu utilizador não tem autorização para ler o ficheiro do cookie.",
- "settings_error_bundled_tor_not_supported": "Não é possível usar a versão do Tor que vem com o OnionShare em modo 'programação', com Windows ou macOS.",
- "settings_error_bundled_tor_timeout": "A conexão ao Tor está a demorar muito. Está conectado à Internet e o relógio do computador está correto?",
- "settings_error_bundled_tor_broken": "O OnionShare não consegui conectar-se ao Tor em segundo plano:\n{}",
- "settings_test_success": "Conectado ao controlador Tor.\n\nVersão do Tor: {}\nSuporte a serviços onion efémeros: {}.\nSuporte a autenticação de cliente: {}.\nSuporte à próxima geração de endereços .onion: {}.",
- "error_tor_protocol_error": "Houve um erro com Tor: {}",
- "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com Tor",
+ "settings_error_unknown": "Não é possível ligar ao controlador Tor porque as suas definições não fazem sentido.",
+ "settings_error_automatic": "Não foi possível ligar ao controlador Tor. O Tor Browser (disponível em torproject.org) está a ser executado em segundo plano?",
+ "settings_error_socket_port": "Não é possível ligar ao controlador Tor em {}:{}.",
+ "settings_error_socket_file": "Não é possível ligar ao controlador Tor utilizando o ficheiro socket {}.",
+ "settings_error_auth": "Ligado a {}:{}, mas não é possível autenticar. Talvez não seja um controlador Tor?",
+ "settings_error_missing_password": "Ligado ao controlador Tor, mas este requer uma palavra-passe para autenticar.",
+ "settings_error_unreadable_cookie_file": "Ligado ao controlador Tor, mas a palavra-passe pode estar incorreta, ou o seu utilizador não tem autorização para ler o ficheiro do cookie.",
+ "settings_error_bundled_tor_not_supported": "Utilizar a versão do Tor que vem com o OnionShare não funciona no modo de 'programação' no Windows ou macOS.",
+ "settings_error_bundled_tor_timeout": "A ligação ao Tor está a demorar muito. Talvez não esteja ligado à Internet, ou o relógio do sistema está incorreto?",
+ "settings_error_bundled_tor_broken": "OnionShare não pôde se conectar ao Tor:\n{}",
+ "settings_test_success": "Ligado ao controlador Tor.\n\nVersão do Tor: {}\nSuporta serviços onion efémeros: {}.\nSuporta autenticação de cliente: {}.\nSuporta próxima geração de endereços .onion: {}.",
+ "error_tor_protocol_error": "Ocorreu um erro com o Tor: {}",
+ "error_tor_protocol_error_unknown": "Ocorreu um erro desconhecido com o Tor",
"error_invalid_private_key": "Este tipo de chave privada não é suportada",
- "connecting_to_tor": "A conectar à rede Tor",
- "update_available": "Está disponível uma nova versão do OnionShare. <a href='{}'>Clique aqui</a> para obtê-la.<br><br>Está a usar a versão {} e a última versão é a {}.",
- "update_error_check_error": "Não foi possível verificar se existem novas versões: o site do OnionShare está a comunicar que a última versão é a irreconhecível '{}'…",
- "update_error_invalid_latest_version": "Não foi possível verificar se existe uma nova versão: talvez não esteja conectada ao Tor ou talvez o site do OnionShare esteja desligado?",
- "update_not_available": "Está a usar a última versão do OnionShare.",
- "gui_tor_connection_ask": "Abrir as configurações para corrigir a conexão ao Tor?",
+ "connecting_to_tor": "A ligar à rede Tor",
+ "update_available": "Disponível nova versão do OnionShare. <a href='{}'>Clique aqui</a> para obtê-la.<br><br>Está a utilizar a versão {}, e a versão mais recente é a {}.",
+ "update_error_check_error": "Não foi possível procurar por nova versão: Talvez não esteja ligado ao Tor, ou o ''site'' da Web OnionShare está em baixo?",
+ "update_error_invalid_latest_version": "Não foi possível procurar por nova versão: o ''site'' da Web OnionShare está a dizer que a última versão não é reconhecida '{}'…",
+ "update_not_available": "Está a utilizar a versão mais recente do OnionShare.",
+ "gui_tor_connection_ask": "Abrir as definições para corrigir a ligação ao Tor?",
"gui_tor_connection_ask_open_settings": "Sim",
"gui_tor_connection_ask_quit": "Sair",
- "gui_tor_connection_error_settings": "Tente mudar nas configurações a forma como OnionShare se conecta à rede Tor.",
- "gui_tor_connection_canceled": "Não foi possível conectar à rede Tor.\n\nVerifique se está conectado à Internet e então abra o OnionShare novamente e configure a sua conexão à rede Tor.",
+ "gui_tor_connection_error_settings": "Tente alterar nas definições o modo como o OnionShare liga à rede Tor.",
+ "gui_tor_connection_canceled": "Não foi possível ligar à rede Tor.\n\nCertifique-se se está ligado à Internet, depois reabra o OnionShare e configure a sua ligação ao Tor.",
"gui_tor_connection_lost": "Desconectado da rede Tor.",
"gui_server_started_after_autostop_timer": "O cronómetro de paragem automática atingiu o tempo limite antes do servidor iniciar. Crie uma nova partilha.",
- "gui_server_autostop_timer_expired": "O cronómetro de paragem automática atingiu o tempo limite. Altere-o para começar uma nova partilha.",
- "share_via_onionshare": "Partilhar utilizando o OnionShare",
+ "gui_server_autostop_timer_expired": "O cronómetro de paragem automática expirou. Por favor, ajuste-o para começar a partilhar.",
+ "share_via_onionshare": "Partilhar via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Usar endereços antigos",
"gui_save_private_key_checkbox": "Usar um endereço persistente",
"gui_share_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>descarregar</b> os seus ficheiros utilizando o <b>Tor Browser</b>: <img src='{}' />",
@@ -157,19 +157,19 @@
"error_cannot_create_downloads_dir": "",
"receive_mode_downloads_dir": "",
"receive_mode_warning": "Atenção: o modo de receção permite que as pessoas enviem ficheiros para o seu computador. Alguns ficheiros podem tomar o controlo do seu computador se os abrir. Apenas abra ficheiros enviados por pessoas que confia ou se souber o que está a fazer.",
- "gui_receive_mode_warning": "O modo de receção permite que as pessoas enviem ficheiros para o seu computador.<br><br><b>Alguns ficheiros podem tomar o controlo do seu computador se os abrir. Apenas abra ficheiros enviados por pessoas que confia ou se souber o que está a fazer.</b>",
- "receive_mode_upload_starting": "Está a começar um envio com um tamanho total de {}",
+ "gui_receive_mode_warning": "O modo de receção permite que as pessoas enviem ficheiros para o seu computador.<br><br><b>Alguns ficheiros podem potencialmente tomar o controlo do seu computador se os abrir. Abra apenas ficheiros enviados por pessoas que confia ou se souber o que está a fazer.</b>",
+ "receive_mode_upload_starting": "A iniciar o envio com um tamanho total de {}",
"receive_mode_received_file": "Recebido: {}",
- "gui_mode_share_button": "Partilhar ficheiros",
- "gui_mode_receive_button": "Receber ficheiros",
- "gui_settings_receiving_label": "Configurações de receber",
+ "gui_mode_share_button": "Partilhar Ficheiros",
+ "gui_mode_receive_button": "Receber Ficheiros",
+ "gui_settings_receiving_label": "Definições de \"receber\"",
"gui_settings_downloads_label": "",
"gui_settings_downloads_button": "Navegar",
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
"gui_settings_public_mode_checkbox": "Modo público",
"systray_close_server_title": "",
"systray_close_server_message": "",
- "systray_page_loaded_title": "Página carregada",
+ "systray_page_loaded_title": "Página Carregada",
"systray_download_page_loaded_message": "",
"systray_upload_page_loaded_message": "",
"gui_uploads": "",
@@ -179,54 +179,76 @@
"gui_upload_finished_range": "",
"gui_upload_finished": "",
"gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "Não foi possível abrir a pasta porque o Nautilus não está disponível. O ficheiro está em: {}",
+ "gui_open_folder_error_nautilus": "Não é possível abrir a pasta porque o Nautilus não está disponível. O ficheiro está em: {}",
"gui_settings_language_label": "Idioma preferido",
- "gui_settings_language_changed_notice": "Reiniciar o OnionShare para que a alteração do idioma surta efeito.",
- "gui_add_files": "Adicionar ficheiros",
- "gui_add_folder": "Adicionar pasta",
- "gui_settings_onion_label": "Configurações onion",
+ "gui_settings_language_changed_notice": "Reiniciar o OnionShare para o novo idioma seja aplicado.",
+ "gui_add_files": "Adicionar Ficheiros",
+ "gui_add_folder": "Adicionar Pasta",
+ "gui_settings_onion_label": "Definições do onion",
"gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion",
"error_cannot_create_data_dir": "Não foi possível criar a pasta de dados do OnionShare: {}",
"receive_mode_data_dir": "Os ficheiros enviados para si aparecem nesta pasta: {}",
"gui_settings_data_dir_label": "Guardar ficheiros em",
- "gui_settings_data_dir_browse_button": "Navegar",
- "systray_page_loaded_message": "O endereço do OnionShare foi carregado",
- "systray_share_started_title": "Partilha iniciada",
- "systray_share_started_message": "A começar a enviar ficheiros para alguém",
- "systray_share_completed_title": "Partilha completa",
+ "gui_settings_data_dir_browse_button": "Explorar",
+ "systray_page_loaded_message": "Endereço do OnionShare carregado",
+ "systray_share_started_title": "Partilha Iniciada",
+ "systray_share_started_message": "A iniciar o envio dos ficheiros para alguém",
+ "systray_share_completed_title": "Partilha Concluída",
"systray_share_completed_message": "O envio dos ficheiros terminou",
- "systray_share_canceled_title": "Partilha cancelada",
+ "systray_share_canceled_title": "Partilha Cancelada",
"systray_share_canceled_message": "Alguém cancelou a receção dos seus ficheiros",
- "systray_receive_started_title": "Receção iniciada",
- "systray_receive_started_message": "Alguém lhe está a enviar ficheiros",
+ "systray_receive_started_title": "Receção Iniciada",
+ "systray_receive_started_message": "Alguém está a enviar-lhe ficheiros",
"gui_all_modes_history": "Histórico",
- "gui_all_modes_clear_history": "Limpar tudo",
+ "gui_all_modes_clear_history": "Limpar Tudo",
"gui_all_modes_transfer_started": "Iniciado em {}",
- "gui_all_modes_transfer_finished_range": "Transferido em {} - {}",
- "gui_all_modes_transfer_finished": "Transferido em {}",
- "gui_all_modes_transfer_canceled_range": "Cancelado em {} - {}",
- "gui_all_modes_transfer_canceled": "Cancelado em {}",
+ "gui_all_modes_transfer_finished_range": "Transferido {} - {}",
+ "gui_all_modes_transfer_finished": "Transferido {}",
+ "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}",
+ "gui_all_modes_transfer_canceled": "Cancelado {}",
"gui_all_modes_progress_complete": "%p%, {0:s} decorrido.",
"gui_all_modes_progress_starting": "{0:s}, %p% (a calcular)",
"gui_all_modes_progress_eta": "{0:s}, tempo restante estimado: {1:s}, %p%",
- "gui_share_mode_no_files": "Ainda não foi enviado nenhum ficheiro",
+ "gui_share_mode_no_files": "Ainda não foram enviados ficheiros",
"gui_share_mode_timeout_waiting": "A esperar que termine o envio",
- "gui_receive_mode_no_files": "Ainda sem ficheiros recebidos",
+ "gui_receive_mode_no_files": "Ainda não foram recebidos ficheiros",
"gui_receive_mode_timeout_waiting": "A esperar que termine a receção",
"gui_stop_server_autostop_timer_tooltip": "O cronómetro de paragem automática termina em {}",
"gui_start_server_autostart_timer_tooltip": "O cronómetro de início automático começa em {}",
"gui_waiting_to_start": "Agendado para iniciar em {}. Clique para cancelar.",
"gui_settings_autostart_timer_checkbox": "Usar cronómetro de início automático",
"gui_settings_autostart_timer": "Iniciar a partilha em:",
- "gui_server_autostart_timer_expired": "O tempo agendado já passou. Por favor atualize para começar a partilhar.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O tempo de paragem automática não pode ser o mesmo que o tempo de início automático. Por favor atualize-o para começar a partilhar.",
+ "gui_server_autostart_timer_expired": "O tempo agendado já passou. Por favor, ajuste-o para começar a partilhar.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "O tempo de paragem automática não pode ser o mesmo que o tempo do início automático. Por favor, ajuste-o para começar a partilhar.",
"gui_status_indicator_share_scheduled": "Agendado…",
"gui_status_indicator_receive_scheduled": "Agendado…",
- "gui_share_mode_autostop_timer_waiting": "A esperar que termine de enviar",
- "gui_receive_mode_autostop_timer_waiting": "A esperar que termine de receber",
+ "gui_share_mode_autostop_timer_waiting": "A aguardar que o envio termine",
+ "gui_receive_mode_autostop_timer_waiting": "A aguardar que o recebimento termine",
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
"seconds_first_letter": "s",
- "incorrect_password": "Senha incorreta"
+ "incorrect_password": "Palavra-passe incorreta",
+ "gui_settings_individual_downloads_label": "Desmarque para permitir a transferência de ficheiros individuais",
+ "gui_settings_csp_header_disabled_option": "Desativar cabeçalho da Política de Segurança de Conteúdo",
+ "mode_settings_autostop_timer_checkbox": "Parar serviço Onion na hora agendada",
+ "mode_settings_autostart_timer_checkbox": "Iniciar serviço Onion na hora agendada",
+ "mode_settings_public_checkbox": "Não utilizar uma palavra-passe",
+ "mode_settings_advanced_toggle_hide": "Ocultar definições avançadas",
+ "mode_settings_advanced_toggle_show": "Mostrar definições avançadas",
+ "gui_quit_warning_cancel": "Cancelar",
+ "gui_quit_warning_title": "Tem a certeza?",
+ "gui_close_tab_warning_cancel": "Cancelar",
+ "gui_close_tab_warning_close": "Fechar",
+ "gui_close_tab_warning_title": "Tem a certeza?",
+ "gui_new_tab_website_button": "Publicar Site da Web",
+ "gui_new_tab_receive_button": "Receber Ficheiros",
+ "gui_new_tab_share_button": "Partilhar Ficheiros",
+ "gui_new_tab_tooltip": "Abrir um novo separador",
+ "gui_new_tab": "Novo Separador",
+ "gui_website_mode_no_files": "Ainda Sem Site da Web Partilhado",
+ "gui_settings_website_label": "Definições do ''site'' da Web",
+ "gui_mode_website_button": "Publicar Site da Web",
+ "history_requests_tooltip": "{} pedidos da Web",
+ "gui_website_url_description": "<b>Qualquer</b> pessoa com um endereço do OnionShare pode <b>visitar</b> o sue ''site'' da Web utilizando o <b>Tor Browser</b>: <img src='{}' />"
}
diff --git a/share/locale/ro.json b/desktop/src/onionshare/resources/locale/ro.json
index c6b9c4d0..d4e43f04 100644
--- a/share/locale/ro.json
+++ b/desktop/src/onionshare/resources/locale/ro.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Folosiți transporturi conectabile meek_lite (Azure) încorporate (necesită obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Avertisment: podurile meek_lite sunt foarte costisitoare pentru rularea Proiectului Tor. <br> <br> Utilizați-le numai dacă nuvă puteți conecta direct la Tor, prin transporturi obfs4 sau alte poduri normale.",
"gui_settings_tor_bridges_custom_radio_option": "Folosiți poduri personalizate",
- "gui_settings_tor_bridges_custom_label": "Puteți obține poduri de la <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Puteți obține poduri de la <a href=\"https://bridges.torproject.org/options?lang=ro\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Niciunul din podurile adăugate nu funcționează.\nVerificați-le încă o dată sau adăugați altele.",
"gui_settings_button_save": "Salvare",
"gui_settings_button_cancel": "Anulare",
diff --git a/share/locale/ru.json b/desktop/src/onionshare/resources/locale/ru.json
index 12bc9ed1..4f38ff37 100644
--- a/share/locale/ru.json
+++ b/desktop/src/onionshare/resources/locale/ru.json
@@ -80,7 +80,7 @@
"gui_quit_title": "Не так быстро",
"gui_share_quit_warning": "Идёт процесс отправки файлов. Уверены, что хотите завершить работу OnionShare?",
"gui_receive_quit_warning": "Идёт процесс получения файлов. Уверены, что хотите завершить работу OnionShare?",
- "error_rate_limit": "Кто-то совершил слишком много попыток подключения к Вашему серверу отправки файлов. Возможно, его пытаются вычислить. OnionShare остановил сервер. Отправьте Ваши данные повторно и перешлите получателю новый адрес.",
+ "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.",
@@ -111,7 +111,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные транспорты meek_lite (Azure) (необходим obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_lite очень затратно для Tor Project.<br><br>Используйте их только если не можете подключиться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".",
"gui_settings_tor_bridges_custom_radio_option": "Использовать пользовательские \"мосты\"",
- "gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь: <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь: <a href=\"https://bridges.torproject.org/options?lang=ru\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работает.\nПроверьте их снова или добавьте другие.",
"gui_settings_autostop_timer_checkbox": "Использовать стоп-таймер",
"gui_settings_autostop_timer": "Остановить отправку в:",
@@ -131,7 +131,7 @@
"error_invalid_private_key": "Этот приватный ключ не поддерживается",
"connecting_to_tor": "Подключение к сети Tor",
"update_available": "Вышла новая версия OnionShare. Для загрузки <a href='{}'>нажмите сюда</a>.<br><br>Вы используется версию {}, наиболее свежая версия {}.",
- "update_error_check_error": "Ошибка проверки новых версий: сайт OnionShare сообщает, что не удалось распознать наиболее свежую версию '{}'…",
+ "update_error_check_error": "Ошибка проверки новой версии: сайт OnionShare сообщает, что не удалось распознать наиболее свежую версию '{}'…",
"update_error_invalid_latest_version": "Ошибка проверки новой версии: возможно, вы не подключены к Tor, или сайт OnionShare не работает?",
"update_not_available": "Вы используете наиболее свежую версию OnionShare.",
"gui_tor_connection_ask": "Перейти в раздел \"Настройки\" для решения проблем с подключением к Tor?",
@@ -139,8 +139,8 @@
"gui_tor_connection_canceled": "Ошибка подключения к Tor.\n\nПожалуйста, убедитесь что подключены к сети Интернет. Откройте OnionShare снова и настройте подключение к Tor.",
"gui_tor_connection_lost": "Отключено от Tor.",
"gui_server_started_after_autostop_timer": "Время стоп-таймера истекло до того, как сервер был запущен. Пожалуйста, отправьте файлы заново.",
- "gui_server_autostop_timer_expired": "Время стоп-таймера истекло. Пожалуйста, обновите его для начала отправки.",
- "share_via_onionshare": "OnionShare это",
+ "gui_server_autostop_timer_expired": "Время стоп-таймера истекло. Пожалуйста, отрегулируйте его для начала отправки.",
+ "share_via_onionshare": "Поделиться через OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса",
"gui_save_private_key_checkbox": "Используйте постоянный адрес",
"gui_share_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>скачать</b> Ваши файлы при помощи <b>Tor Browser</b>: <img src='{}' />",
@@ -218,12 +218,20 @@
"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_server_autostart_timer_expired": "Запланированное время уже прошло. Пожалуйста, отрегулируйте его для начала отправки.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Время окончания не может быть раньше времени начала. Пожалуйста, отрегулируйте его для начала отправки.",
"gui_status_indicator_share_scheduled": "По расписанию…",
"gui_status_indicator_receive_scheduled": "По расписанию…",
"days_first_letter": "д",
"hours_first_letter": "ч",
"minutes_first_letter": "м",
- "seconds_first_letter": "с"
+ "seconds_first_letter": "с",
+ "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_settings_individual_downloads_label": "Снимите флажок чтобы разрешить скачивание отдельных файлов",
+ "history_requests_tooltip": "{} веб запросы",
+ "gui_settings_csp_header_disabled_option": "Отключить проверку Политики Безопасности Содержимого",
+ "gui_settings_website_label": "Настройки Веб-сайта"
}
diff --git a/share/locale/sl.json b/desktop/src/onionshare/resources/locale/sl.json
index 70e04baa..70e04baa 100644
--- a/share/locale/sl.json
+++ b/desktop/src/onionshare/resources/locale/sl.json
diff --git a/share/locale/sn.json b/desktop/src/onionshare/resources/locale/sn.json
index 4ee1a03b..4ee1a03b 100644
--- a/share/locale/sn.json
+++ b/desktop/src/onionshare/resources/locale/sn.json
diff --git a/share/locale/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json
index 7fc22ce2..18dfad44 100644
--- a/share/locale/sr_Latn.json
+++ b/desktop/src/onionshare/resources/locale/sr_Latn.json
@@ -75,7 +75,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Koristi ugrađene meek_lite (Azure) dodatne prenose (potreban obfs4proksi)",
"gui_settings_meek_lite_expensive_warning": "Upozorenje: meek_lite mostovi su vrlo skupi za Tor projekat da ih koristi.<br><br>Koristi ih samo ako ne možeš da se povežeš na Tor direktno, preko obfs4 transporta ili drugih redovnih mostova.",
"gui_settings_tor_bridges_custom_radio_option": "Koristi prilagođene mostove",
- "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Mostove možeš dobiti od <a href=\"https://bridges.torproject.org/options?lang=sr_Latn\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nijedan od mostova koje si dodao ne funkcioniše.\nProveri ih ponovo ili dodaj druge.",
"gui_settings_button_save": "Sačuvaj",
"gui_settings_button_cancel": "Odustani",
diff --git a/share/locale/sv.json b/desktop/src/onionshare/resources/locale/sv.json
index 03edfeb9..0015652a 100644
--- a/share/locale/sv.json
+++ b/desktop/src/onionshare/resources/locale/sv.json
@@ -9,7 +9,7 @@
"not_a_file": "{0:s} är inte en giltig fil.",
"not_a_readable_file": "{0:s} är inte en läsbar fil.",
"no_available_port": "Kunde inte hitta en ledig port för att starta onion-tjänsten",
- "other_page_loaded": "Adress laddad",
+ "other_page_loaded": "Adress inläst",
"close_on_autostop_timer": "Stoppad för att tiden för den automatiska stopp-tidtagaren löpte ut",
"closing_automatically": "Stoppad för att hämtningen är klar",
"timeout_download_still_running": "Väntar på att nedladdningen ska bli klar",
@@ -32,19 +32,19 @@
"help_verbose": "Logga OnionShare fel till stdout och webbfel till hårddisken",
"help_filename": "Lista filer och mappar att dela",
"help_config": "Egenvald sökväg för JSON konfigurationsfil (valfri)",
- "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att börja delning",
+ "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att starta delning",
"gui_add": "Lägg till",
- "gui_delete": "Radera",
+ "gui_delete": "Ta bort",
"gui_choose_items": "Välj",
- "gui_share_start_server": "Börja dela",
+ "gui_share_start_server": "Starta delning",
"gui_share_stop_server": "Avbryt delning",
- "gui_share_stop_server_autostop_timer": "Sluta dela ({})",
+ "gui_share_stop_server_autostop_timer": "Stoppa delning ({})",
"gui_share_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}",
- "gui_receive_start_server": "Starta mottagarläge",
- "gui_receive_stop_server": "Avsluta mottagarläge",
- "gui_receive_stop_server_autostop_timer": "Avsluta mottagarläge ({} kvarstår)",
+ "gui_receive_start_server": "Starta mottagningsläge",
+ "gui_receive_stop_server": "Stoppa mottagningsläge",
+ "gui_receive_stop_server_autostop_timer": "Avsluta mottagningsläge ({} kvarstår)",
"gui_receive_stop_server_autostop_timer_tooltip": "Automatiska stopp-tidtagaren avslutar vid {}",
- "gui_copy_url": "Kopiera Adress",
+ "gui_copy_url": "Kopiera adress",
"gui_copy_hidservauth": "Kopiera HidServAuth",
"gui_downloads": "Nedladdningshistorik",
"gui_no_downloads": "Inga Nedladdningar Än",
@@ -53,7 +53,7 @@
"gui_copied_url": "OnionShare-adress kopierad till urklipp",
"gui_copied_hidservauth_title": "HidServAuth Kopierad",
"gui_copied_hidservauth": "HidServAuth-rad kopierad till urklipp",
- "gui_please_wait": "Börjar... klicka för att avbryta.",
+ "gui_please_wait": "Startar... klicka för att avbryta.",
"gui_download_upload_progress_complete": "%p%, {0:s} förflutit.",
"gui_download_upload_progress_starting": "{0:s}, %p% (beräknar)",
"gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%",
@@ -63,7 +63,7 @@
"gui_receive_quit_warning": "Du håller på att ta emot filer. Är du säker på att du vill avsluta OnionShare?",
"gui_quit_warning_quit": "Avsluta",
"gui_quit_warning_dont_quit": "Avbryt",
- "error_rate_limit": "Någon har gjort för många felaktiga försök att gissa ditt lösenord, därför har OnionShare har stoppat servern. Börja dela igen och skicka mottagaren en ny adress att dela.",
+ "error_rate_limit": "Någon har gjort för många felaktiga försök att gissa ditt lösenord, därför har OnionShare stoppat servern. Starta delning igen och skicka mottagaren en ny adress att dela.",
"zip_progress_bar_format": "Komprimerar: %p%",
"error_stealth_not_supported": "För att använda klientauktorisering behöver du minst både Tor 0.2.9.1-alpha (eller Tor Browser 6.5) och python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare kräver minst både Tor 0.2.7.1 och python3-stem 1.4.0.",
@@ -100,7 +100,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Använd inbyggda meek_lite (Azure) pluggbara transporter (kräver obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Varning: meek_lite-broarna är mycket kostsamma för att Tor-projektet ska kunna köras.<br><br> Använd dem endast om det inte går att ansluta till Tor direkt, via obfs4-transporter eller andra normala broar.",
"gui_settings_tor_bridges_custom_radio_option": "Använd anpassade broar",
- "gui_settings_tor_bridges_custom_label": "Du kan få broar från <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_label": "Du kan få broar från <a href=\"https://bridges.torproject.org/options?lang=sv\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Ingen av broarna du lagt till arbete.\nDubbelkolla dem eller lägga till andra.",
"gui_settings_button_save": "Spara",
"gui_settings_button_cancel": "Avbryt",
@@ -116,38 +116,38 @@
"settings_error_unreadable_cookie_file": "Ansluten till Tor-regulatorn, men lösenordet kan vara fel, eller din användare är inte tillåtet att läsa kakfilen.",
"settings_error_bundled_tor_not_supported": "Användning av Tor-versionen som följer med OnionShare fungerar inte i utvecklarläge på Windows eller macOS.",
"settings_error_bundled_tor_timeout": "Det tar för lång tid att ansluta till Tor. Kanske är du inte ansluten till Internet, eller har en felaktig systemklocka?",
- "settings_error_bundled_tor_broken": "OnionShare kunde inte ansluta till Tor i bakgrunden:\n{}",
+ "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_unknown": "Det fanns ett okänt fel med Tor",
"error_invalid_private_key": "Denna privata nyckeltyp stöds inte",
"connecting_to_tor": "Ansluter till Tor-nätverket",
"update_available": "Ny OnionShare utgiven. <a href='{}'>Klicka här</a> för att få den.<br><br>Du använder {} och den senaste är {}.",
- "update_error_check_error": "Det gick inte att söka efter ny version: OnionShare-webbplatsen säger att den senaste versionen är den oigenkännliga '{}'…",
- "update_error_invalid_latest_version": "Det gick inte att söka efter ny version: Kanske är du inte ansluten till Tor, eller är OnionShare-webbplatsen nere?",
+ "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_open_settings": "Ja",
"gui_tor_connection_ask_quit": "Avsluta",
- "gui_tor_connection_error_settings": "Försök ändra hur OnionShare ansluter till Tor-nätverket i inställningarna.",
+ "gui_tor_connection_error_settings": "Försök att ändra hur OnionShare ansluter till Tor-nätverket i inställningarna.",
"gui_tor_connection_canceled": "Kunde inte ansluta till Tor.\n\nSe till att du är ansluten till Internet, öppna sedan OnionShare igen och ställ in anslutningen till Tor.",
"gui_tor_connection_lost": "Frånkopplad från Tor.",
- "gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-tidtagaren löpte ut innan servern startade.\nVänligen gör en ny delning.",
- "gui_server_autostop_timer_expired": "Tiden för den automatiska stopp-tidtagaren löpte redan ut. Vänligen justera den för att börja dela.",
+ "gui_server_started_after_autostop_timer": "Tiden för den automatiska stopp-tidtagaren löpte ut innan servern startades.\nVänligen gör en ny delning.",
+ "gui_server_autostop_timer_expired": "Den automatiska stopp-tidtagaren har redan löpt ut. Vänligen justera den för att starta delning.",
"share_via_onionshare": "Dela med OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Använd äldre adresser",
"gui_save_private_key_checkbox": "Använd en beständig adress",
"gui_share_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>hämta</b> dina filer med hjälp av <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>skicka</b> filer till din dator med hjälp av <b>Tor Browser</b>: <img src='{}' />",
- "gui_url_label_persistent": "Denna delning kommer inte automatiskt att sluta.<br>< br>Varje efterföljande delning återanvänder adressen. (För att använda engångsadresser, stäng av \"använd beständig adress\" i inställningarna.)",
- "gui_url_label_stay_open": "Denna delning kommer inte automatiskt att sluta.",
+ "gui_url_label_persistent": "Den här delningen kommer inte automatiskt att avslutas.<br>< br>Varje efterföljande delning återanvänder adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)",
+ "gui_url_label_stay_open": "Denna delning kommer inte automatiskt att avslutas.",
"gui_url_label_onetime": "Denna delning kommer att sluta efter första slutförandet.",
- "gui_url_label_onetime_and_persistent": "Denna delning kommer inte automatiskt att sluta.<br>< br>Varje efterföljande delning kommer att återanvända adressen. (För att använda engångsadresser, stäng av \"använd beständig adress\" i inställningarna.)",
+ "gui_url_label_onetime_and_persistent": "Den här delningen kommer inte automatiskt att avslutas.<br>< br>Varje efterföljande delning kommer att återanvända adressen. (För att använda engångsadresser, stäng av \"Använd beständig adress\" i inställningarna.)",
"gui_status_indicator_share_stopped": "Redo att dela",
- "gui_status_indicator_share_working": "Börjar…",
+ "gui_status_indicator_share_working": "Startar…",
"gui_status_indicator_share_started": "Delar",
"gui_status_indicator_receive_stopped": "Redo att ta emot",
- "gui_status_indicator_receive_working": "Börjar…",
+ "gui_status_indicator_receive_working": "Startar…",
"gui_status_indicator_receive_started": "Tar emot",
"gui_file_info": "{} filer, {}",
"gui_file_info_single": "{} fil, {}",
@@ -158,7 +158,7 @@
"error_cannot_create_downloads_dir": "Det gick inte att skapa mappen mottagningsläge: {}",
"receive_mode_downloads_dir": "Filer som skickas till dig visas i den här mappen: {}",
"receive_mode_warning": "Varning: Mottagningsläge låter personer skicka filer till din dator. Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Bara öppna saker från personer du litar på, eller om du vet vad du gör.",
- "gui_receive_mode_warning": "Mottagarläge låter personer skicka filer till din dator.<br><br><b>Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Bara öppna saker från personer du litar på, eller om du vet vad du gör.</h>",
+ "gui_receive_mode_warning": "Mottagningsläget låter personer skicka filer till din dator.<br><br><b>Vissa filer kan potentiellt ta kontroll över din dator om du öppnar dem. Öppna endast saker från personer du litar på eller om du vet vad du gör.</h>",
"receive_mode_upload_starting": "Sändning av total storlek {} börjar",
"receive_mode_received_file": "Mottaget: {}",
"gui_mode_share_button": "Dela filer",
@@ -187,11 +187,11 @@
"gui_connect_to_tor_for_onion_settings": "Anslut till Tor för att se onion-tjänst-inställningar",
"error_cannot_create_data_dir": "Det gick inte att skapa OnionShare-datamapp: {}",
"receive_mode_data_dir": "Filer som skickas till dig visas i den här mappen: {}",
- "gui_settings_data_dir_label": "Spara filer till",
+ "gui_settings_data_dir_label": "Spara filer i",
"gui_settings_data_dir_browse_button": "Bläddra",
"systray_page_loaded_message": "OnionShare-adress lästes in",
- "systray_share_started_title": "Delning börjades",
- "systray_share_started_message": "Börjar skicka filer till någon",
+ "systray_share_started_title": "Delningen startades",
+ "systray_share_started_message": "Startar sändning av filer till någon",
"systray_share_completed_title": "Delning klar",
"systray_share_completed_message": "Filerna skickades",
"systray_share_canceled_title": "Delning avbruten",
@@ -200,7 +200,7 @@
"systray_receive_started_message": "Någon skickar filer till dig",
"gui_all_modes_history": "Historik",
"gui_all_modes_clear_history": "Rensa alla",
- "gui_all_modes_transfer_started": "Började {}",
+ "gui_all_modes_transfer_started": "Startades {}",
"gui_all_modes_transfer_finished_range": "Överförd {} - {}",
"gui_all_modes_transfer_finished": "Överförd {}",
"gui_all_modes_progress_complete": "%p%, {0} förflutit.",
@@ -209,17 +209,17 @@
"gui_share_mode_no_files": "Inga filer har skickats än",
"gui_share_mode_autostop_timer_waiting": "Väntar på att avsluta sändningen",
"gui_receive_mode_no_files": "Inga filer har mottagits ännu",
- "gui_receive_mode_autostop_timer_waiting": "Väntar på att avsluta mottagande",
+ "gui_receive_mode_autostop_timer_waiting": "Väntar på att ta emot mottagningen",
"gui_all_modes_transfer_canceled_range": "Avbröt {} - {}",
"gui_all_modes_transfer_canceled": "Avbröt {}",
"gui_settings_onion_label": "Inställningar för Onion",
- "gui_stop_server_autostop_timer_tooltip": "Auto-stop timern slutar vid {}",
- "gui_start_server_autostart_timer_tooltip": "Auto-start timer slutar vid {}",
+ "gui_stop_server_autostop_timer_tooltip": "Automatisk stopp-tidtagare slutar vid {}",
+ "gui_start_server_autostart_timer_tooltip": "Automatisk start-tidtagare slutar vid {}",
"gui_waiting_to_start": "Planerad för att starta i {}. Klicka för att avbryta.",
- "gui_settings_autostart_timer_checkbox": "Använd automatisk start tidtagare",
- "gui_settings_autostart_timer": "Börja dela vid:",
- "gui_server_autostart_timer_expired": "Den schemalagda tiden har redan passerat. Vänligen justera den för att börja dela.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än automatiska starttiden. Vänligen justera den för att börja dela.",
+ "gui_settings_autostart_timer_checkbox": "Använd automatisk start-tidtagare",
+ "gui_settings_autostart_timer": "Starta delning vid:",
+ "gui_server_autostart_timer_expired": "Den schemalagda tiden har redan passerat. Vänligen justera den för att starta delning.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än den automatiska starttiden. Vänligen justera den för att starta delning.",
"gui_status_indicator_share_scheduled": "Planerad…",
"gui_status_indicator_receive_scheduled": "Planerad…",
"days_first_letter": "d",
@@ -233,12 +233,43 @@
"systray_site_loaded_message": "OnionShare-webbplats inläst",
"systray_website_started_title": "Börjar dela webbplats",
"systray_website_started_message": "Någon besöker din webbplats",
- "gui_website_mode_no_files": "Ingen webbplats delad ännu",
+ "gui_website_mode_no_files": "Ingen webbplats delas ännu",
"gui_visit_started": "Någon har besökt din webbplats {}",
"incorrect_password": "Felaktigt lösenord",
"gui_settings_individual_downloads_label": "Avmarkera för att tillåta hämtning av enskilda filer",
"history_requests_tooltip": "{} webbförfrågningar",
"systray_individual_file_downloaded_title": "Enskild fil inläst",
"systray_individual_file_downloaded_message": "Individuell fil {} visad",
- "gui_settings_website_label": "Webbplatsinställningar"
+ "gui_settings_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?",
+ "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_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_advanced_toggle_hide": "Dölj avancerade inställningar",
+ "mode_settings_advanced_toggle_show": "Visa avancerade inställningar",
+ "gui_quit_warning_cancel": "Avbryt",
+ "gui_quit_warning_description": "Delning är aktiv i några av dina flikar. Om du avslutar stängs alla dina flikar. Är du säker på att du vill avsluta?",
+ "gui_quit_warning_title": "Är du säker?",
+ "gui_close_tab_warning_cancel": "Avbryt",
+ "gui_close_tab_warning_close": "Stäng",
+ "gui_close_tab_warning_website_description": "Du är aktivt värd för en webbplats. Är du säker på att du vill stänga 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_title": "Är du säker?",
+ "gui_new_tab_website_description": "Var värd till en statisk HTML-onionwebbplats från din dator.",
+ "gui_new_tab_website_button": "Publicera webbplats",
+ "gui_new_tab_receive_description": "Förvandla din dator till en dropbox på nätet. Personer kommer att kunna använda Tor Browser för att skicka filer till din dator.",
+ "gui_new_tab_receive_button": "Ta emot filer",
+ "gui_new_tab_share_description": "Välj filer på din dator för att skicka till någon annan. Den eller de personer som du vill skicka filer till måste använda Tor Browser för att hämta dem från dig.",
+ "gui_new_tab_share_button": "Dela filer",
+ "gui_new_tab_tooltip": "Öppna en ny flik",
+ "gui_new_tab": "Ny flik"
}
diff --git a/share/locale/sw.json b/desktop/src/onionshare/resources/locale/sw.json
index 74707f3c..74707f3c 100644
--- a/share/locale/sw.json
+++ b/desktop/src/onionshare/resources/locale/sw.json
diff --git a/share/locale/te.json b/desktop/src/onionshare/resources/locale/te.json
index 9f738318..9f738318 100644
--- a/share/locale/te.json
+++ b/desktop/src/onionshare/resources/locale/te.json
diff --git a/share/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json
index 7eeb7b1f..ac652abf 100644
--- a/share/locale/tr.json
+++ b/desktop/src/onionshare/resources/locale/tr.json
@@ -10,7 +10,7 @@
"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şımı başlatmak için dosya\nve klasörleri sürükleyip buraya bırakın",
+ "gui_drag_and_drop": "Paylaşmaya başlamak için dosya ve klasörleri sürükleyip bırakın",
"gui_add": "Ekle",
"gui_delete": "Sil",
"gui_choose_items": "Seçin",
@@ -88,7 +88,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Hazır meek_lite (Azure) değiştirilebilir taşıyıcıları kullanılsın (obfs4proxy gerektirir)",
"gui_settings_meek_lite_expensive_warning": "Uyarı: meek_lit köprülerini çalıştırmak Tor Projesine pahalıya patlıyor.<br><br>Bu köprüleri yalnız Tor ile doğrudan ya da obfs4 ve diğer normal köprüler üzerinden bağlantı kuramıyorsanız kullanın.",
"gui_settings_tor_bridges_custom_radio_option": "Özel köprüler kullanılsın",
- "gui_settings_tor_bridges_custom_label": "Köprüleri <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> adresinden alabilirsiniz",
+ "gui_settings_tor_bridges_custom_label": "Köprüleri <a href=\"https://bridges.torproject.org/options?lang=tr\">https://bridges.torproject.org</a> adresinden alabilirsiniz",
"gui_settings_tor_bridges_invalid": "Eklediğiniz köprülerin hiçbiri çalışmıyor.\nİki kez denetleyin ya da başka köprüler ekleyin.",
"gui_settings_button_save": "Kaydet",
"gui_settings_button_cancel": "İptal",
@@ -104,15 +104,15 @@
"settings_error_unreadable_cookie_file": "Tor denetleyicisi ile bağlantı kuruldu, ancak parola yanlış ya da kullanıcının çerez dosyasını okumasına izin verilmiyor.",
"settings_error_bundled_tor_not_supported": "OnionShare üzerinde gelen Tor sürümü, Windows ya da macOS üzerinde geliştirici kipinde çalışmaz.",
"settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?",
- "settings_error_bundled_tor_broken": "OnionShare, Tor ile arka planda bağlantı kuramadı:\n{}",
+ "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_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı",
"error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor",
"connecting_to_tor": "Tor ağı ile bağlantı kuruluyor",
"update_available": "Yeni bir OnionShare sürümü yayınlanmış. Almak için <a href='{}'>buraya tıklayın</a>.<br><br>Kullandığınız sürüm {}, Son sürüm {}.",
- "update_error_check_error": "Yeni sürüm denetimi yapılamadı: OnionShare web sitesi en son sürümün anlaşılamayan '{}' olduğunu bildiriyor…",
- "update_error_invalid_latest_version": "Yeni sürüm denetlenemedi: Tor bağlantınız kesik ya da OnionShare web sitesi kapalı olabilir mi?",
+ "update_error_check_error": "Yeni sürüm denetlenemedi: Tor bağlantınız kesik ya da OnionShare web sitesi kapalı olabilir mi?",
+ "update_error_invalid_latest_version": "Yeni sürüm denetlenemedi: OnionShare web sitesi en son sürümün anlaşılamayan '{}' olduğunu bildiriyor…",
"update_not_available": "En son OnionShare sürümünü kullanıyorsunuz.",
"gui_tor_connection_ask": "Tor bağlantı sorunlarını çözmek için ayarlar açılsın mı?",
"gui_tor_connection_ask_open_settings": "Evet",
@@ -120,7 +120,7 @@
"gui_tor_connection_error_settings": "OnionShare ayarlarından Tor ağı ile bağlantı kurma yöntemini değiştirmeyi deneyin.",
"gui_tor_connection_canceled": "Tor bağlantısı kurulamadı.\n\nİnternet bağlantınızın çalıştığından emin olduktan sonra OnionShare uygulamasını yeniden açın ve Tor bağlantısını kurun.",
"gui_tor_connection_lost": "Tor bağlantısı kesildi.",
- "gui_server_started_after_autostop_timer": "Otomatik durdurma sayacı, sunucu başlamadan önce sona erdi.\nLütfen yeni bir paylaşım yapın.",
+ "gui_server_started_after_autostop_timer": "Otomatik durdurma sayacı, sunucu başlamadan önce sona erdi. Lütfen yeni bir paylaşım yapın.",
"gui_server_autostop_timer_expired": "Otomatik durma sayacı zaten sona ermiş. Paylaşmaya başlamak için sayacı ayarlayın.",
"share_via_onionshare": "OnionShare ile paylaş",
"gui_connect_to_tor_for_onion_settings": "Onion hizmet ayarlarını görmek için Tor bağlantısı kurun",
@@ -128,10 +128,10 @@
"gui_save_private_key_checkbox": "Kalıcı bir adres kullanılsın",
"gui_share_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Tarayıcıyı</b> kullanarak dosyalarınızı <b>indirebilir</b>: <img src='{}' />",
"gui_receive_url_description": "Bu OnionShare adresine sahip olan <b>herkes</b> <b>Tor Tarayıcıyı</b> kullanarak dosyaları <b>yükleyebilir</b>: <img src='{}' />",
- "gui_url_label_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.<br><br>Sonraki her paylaşım adresi yeniden kullanır (Bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini devre dışı bırakın).",
+ "gui_url_label_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.<br><br>Sonraki her paylaşım adresi yeniden kullanır (Bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini devre dışı bırakın.)",
"gui_url_label_stay_open": "Bu paylaşım otomatik olarak durdurulmayacak.",
"gui_url_label_onetime": "Bu paylaşım bir kez tamamlandıktan sonra durdurulur.",
- "gui_url_label_onetime_and_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.<br><br>Sonraki her paylaşım adresi yeniden kullanır (Bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini devre dışı bırakın).",
+ "gui_url_label_onetime_and_persistent": "Bu paylaşım otomatik olarak durdurulmayacak.<br><br>Sonraki her paylaşım adresi yeniden kullanır (Bir kerelik adresleri kullanmak için, ayarlardan \"Kalıcı adres kullanılsın\" seçeneğini devre dışı bırakın.)",
"gui_status_indicator_share_stopped": "Paylaşmaya hazır",
"gui_status_indicator_share_working": "Başlatılıyor…",
"gui_status_indicator_share_started": "Paylaşılıyor",
@@ -152,7 +152,7 @@
"gui_mode_receive_button": "Alınan Dosyalar",
"gui_settings_receiving_label": "Alma ayarları",
"gui_settings_data_dir_label": "Dosyaları şuraya kaydet",
- "gui_settings_data_dir_browse_button": "Gözat",
+ "gui_settings_data_dir_browse_button": "Göz at",
"gui_settings_public_mode_checkbox": "Herkese açık kip",
"gui_open_folder_error_nautilus": "Nautilus kullanılamadığından klasör açılamıyor. Dosya burada: {}",
"gui_settings_language_label": "Kullanılacak dil",
@@ -184,11 +184,11 @@
"gui_receive_mode_timeout_waiting": "Almayı bitirmek için bekleniyor",
"gui_stop_server_autostop_timer_tooltip": "Otomatik durdurma sayacı bitişi {}",
"gui_start_server_autostart_timer_tooltip": "Otomatik başlatma sayacı bitişi {}",
- "gui_waiting_to_start": "{} içinde başlamaya zamanlanmış. İptal etmek için tıklayın.",
+ "gui_waiting_to_start": "{} içinde başlamaya zamanlanmış. İptal etmek için tıklayın.",
"gui_settings_autostart_timer_checkbox": "Otomatik başlatma sayacı kullanılsın",
"gui_settings_autostart_timer": "Paylaşımı başlatma zamanı:",
- "gui_server_autostart_timer_expired": "Zamanlanan süre zaten bitti. Paylaşmaya başlamak için ayarlayın.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Otomatik durdurma zamanı, otomatik başlatma zamanı ile aynı veya daha önce olamaz. Paylaşmaya başlamak için ayarlayın.",
+ "gui_server_autostart_timer_expired": "Zamanlanan süre zaten geçti. Paylaşmaya başlamak için ayarlayın.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Otomatik durdurma zamanı, otomatik başlatma zamanı ile aynı veya daha önce olamaz. Paylaşmaya başlamak için ayarlayın.",
"gui_status_indicator_share_scheduled": "Zamanlanmış…",
"gui_status_indicator_receive_scheduled": "Zamanlanmış…",
"gui_share_mode_autostop_timer_waiting": "Gönderme işleminin bitmesi bekleniyor",
@@ -202,8 +202,56 @@
"gui_mode_website_button": "Web Sitesini Yayınla",
"gui_website_mode_no_files": "Henüz Paylaşılan Web Sitesi Yok",
"incorrect_password": "Hatalı Parola",
- "gui_settings_individual_downloads_label": "Tekil dosyaları indirmeye izin vermek için işareti kaldırın",
+ "gui_settings_individual_downloads_label": "Dosyaların tek tek indirilmesine izin vermek için işareti kaldırın",
"history_requests_tooltip": "{} web isteği",
- "gui_settings_csp_header_disabled_option": "İçerik Güvenlik Politikası Üstbilgisini Kaldır",
- "gui_settings_website_label": "Website ayarları"
+ "gui_settings_csp_header_disabled_option": "İçerik Güvenlik Politikası başlığını devre dışı bırak",
+ "gui_settings_website_label": "Website ayarları",
+ "mode_settings_website_disable_csp_checkbox": "İçerik Güvenlik Politikası başlığını devre dışı bırak (web sitenizin üçüncü taraf kaynaklarını kullanmasına izin verir)",
+ "mode_settings_receive_data_dir_browse_button": "Göz at",
+ "mode_settings_receive_data_dir_label": "Dosyaları şuraya kaydet",
+ "mode_settings_share_autostop_sharing_checkbox": "Dosyalar gönderildikten sonra paylaşımı durdur (dosyaların tek tek indirilmesine izin vermek için işareti kaldırın)",
+ "mode_settings_client_auth_checkbox": "İstemci kimlik doğrulaması kullanılsın",
+ "mode_settings_legacy_checkbox": "Eski bir adres kullan (v2 onion hizmeti, tavsiye edilmez)",
+ "mode_settings_autostop_timer_checkbox": "Onion hizmetini planlanan zamanda durdur",
+ "mode_settings_autostart_timer_checkbox": "Onion hizmetini planlanan zamanda başlat",
+ "mode_settings_public_checkbox": "Parola kullanma",
+ "mode_settings_persistent_checkbox": "Bu sekmeyi kaydet ve OnionShare'i açtığımda otomatik olarak aç",
+ "mode_settings_advanced_toggle_hide": "Gelişmiş ayarları gizle",
+ "mode_settings_advanced_toggle_show": "Gelişmiş ayarları göster",
+ "gui_quit_warning_cancel": "İptal",
+ "gui_quit_warning_description": "Bazı sekmelerinizde paylaşım etkin. Çıkarsanız tüm sekmeleriniz kapanacaktır. Çıkmak istediğinizden emin misiniz?",
+ "gui_quit_warning_title": "Emin misiniz?",
+ "gui_close_tab_warning_cancel": "İptal",
+ "gui_close_tab_warning_close": "Kapat",
+ "gui_close_tab_warning_website_description": "Aktif olarak bir web sitesi barındırıyorsunuz. Bu sekmeyi kapatmak istediğinizden emin misiniz?",
+ "gui_close_tab_warning_receive_description": "Dosya alma işlemi devam ediyor. Bu sekmeyi kapatmak istediğinizden emin misiniz?",
+ "gui_close_tab_warning_share_description": "Dosya gönderme işlemi devam ediyor. Bu sekmeyi kapatmak istediğinizden emin misiniz?",
+ "gui_close_tab_warning_persistent_description": "Bu sekme kalıcıdır. Kapatırsanız, kullandığı onion adresini kaybedeceksiniz. Kapatmak istediğinizden emin misiniz?",
+ "gui_new_tab_website_description": "Bilgisayarınızda statik bir HTML onion web sitesi barındırın.",
+ "gui_new_tab_website_button": "Web Sitesi Yayınla",
+ "gui_new_tab_receive_description": "Bilgisayarınızı çevrim içi bir dropbox'a dönüştürün. İnsanlar bilgisayarınıza dosya göndermek için Tor Browser kullanabilecekler.",
+ "gui_new_tab_receive_button": "Alınan Dosyalar",
+ "gui_new_tab_share_description": "Başka birine göndermek için bilgisayarınızdaki dosyaları seçin. Dosya göndermek istediğiniz kişi veya kişilerin sizden indirmek için Tor Browser kullanması gerekecektir.",
+ "gui_new_tab_share_button": "Paylaşılan Dosyalar",
+ "gui_close_tab_warning_title": "Emin misiniz?",
+ "gui_new_tab_tooltip": "Yeni bir sekme aç",
+ "gui_new_tab": "Yeni Sekme",
+ "gui_remove": "Kaldır",
+ "gui_file_selection_remove_all": "Tümünü Kaldır",
+ "gui_chat_start_server": "Sohbet sunucusu 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",
+ "gui_qr_code_dialog_title": "OnionShare QR Kodu",
+ "gui_qr_code_description": "OnionShare adresini bir başkasıyla daha kolay paylaşmak için bu QR kodunu telefonunuzdaki kamera gibi bir QR okuyucuyla tarayın.",
+ "gui_open_folder_error": "Klasör xdg-open ile açılamadı. Dosya burada: {}",
+ "gui_new_tab_chat_button": "Anonim Sohbet",
+ "gui_main_page_share_button": "Paylaşımı Başlat",
+ "gui_main_page_receive_button": "Almayı Başlat",
+ "gui_main_page_website_button": "Barındırmayı Başlat",
+ "gui_main_page_chat_button": "Sohbeti Başlat",
+ "gui_tab_name_share": "Paylaş",
+ "gui_tab_name_receive": "Al",
+ "gui_tab_name_website": "Web Sitesi",
+ "gui_tab_name_chat": "Sohbet"
}
diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json
new file mode 100644
index 00000000..418b3f47
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/uk.json
@@ -0,0 +1,232 @@
+{
+ "preparing_files": "Стиснення файлів.",
+ "not_a_readable_file": "{0:s} - файл що не читається.",
+ "no_available_port": "Не вдалося знайти доступний порт для запуску onion служби",
+ "other_page_loaded": "Адресу завантажено",
+ "close_on_autostop_timer": "Зупинено, оскільки збіг час таймера автоспину",
+ "closing_automatically": "Зупинено, оскільки передавання виконано",
+ "large_filesize": "Увага: надсилання великого об'єму може тривати години",
+ "gui_drag_and_drop": "Перетягніть файли та теки для надсилання",
+ "gui_add": "Додати",
+ "gui_add_files": "Додати Файли",
+ "gui_add_folder": "Додати Теку",
+ "gui_delete": "Видалити",
+ "gui_choose_items": "Вибрати",
+ "gui_share_start_server": "Почати ділитися",
+ "gui_share_stop_server": "Зупинити надсилання",
+ "gui_share_stop_server_autostop_timer": "Зупинити надсилання ({})",
+ "gui_stop_server_autostop_timer_tooltip": "Таймер автоспину спливає о {}",
+ "gui_start_server_autostart_timer_tooltip": "Таймер автостарту спливає о {}",
+ "gui_receive_start_server": "Запустити режим отримання",
+ "gui_receive_stop_server": "Зупинити режим отримання",
+ "gui_receive_stop_server_autostop_timer": "Зупинити режим отримання ({} залишилось)",
+ "gui_copy_url": "Копіювати Адресу",
+ "gui_copy_hidservauth": "Копіювати HidServAuth",
+ "gui_canceled": "Скасовано",
+ "gui_copied_url_title": "Адресу OnionShare копійовано",
+ "gui_copied_url": "Адресу OnionShare копійовано до буферу обміну",
+ "gui_copied_hidservauth_title": "Скопійовано HidServAuth",
+ "gui_copied_hidservauth": "Рядок HidServAuth копійовано до буфера обміну",
+ "gui_waiting_to_start": "Заплановано почати за {}. Натисніть для скасування.",
+ "gui_please_wait": "Початок... Натисніть для скасування.",
+ "gui_quit_title": "Не так швидко",
+ "gui_share_quit_warning": "Відбувається передача файлів. Ви впевнені, що бажаєте вийти з OnionShare?",
+ "gui_receive_quit_warning": "Відбувається отримання файлів. Ви впевнені, що бажаєте вийти з OnionShare?",
+ "gui_quit_warning_quit": "Вийти",
+ "gui_quit_warning_dont_quit": "Відміна",
+ "error_rate_limit": "Хтось здійснив занадто багато невдалих спроб підключитися до вашого сервера, тому OnionShare зупинив сервер. Почніть ділитися знову і надішліть одержувачу нову адресу надсилання.",
+ "zip_progress_bar_format": "Стиснення: %p%",
+ "error_stealth_not_supported": "Для авторизації клієнта, вам потрібні принаймні Tor 0.2.9.1-alpha(або Tor Browser 6.5) і python3-stem 1.5.0.",
+ "error_ephemeral_not_supported": "OnionShare потребує принаймні Tor 0.2.7.1 і python3-stem 1.4.0.",
+ "gui_settings_window_title": "Налаштування",
+ "gui_settings_whats_this": "<a href='{0:s}'>Що це?</a>",
+ "gui_settings_stealth_option": "Використовувати авторизацію клієнта",
+ "gui_settings_stealth_hidservauth_string": "Зберігши свій закритий ключ для повторного користування, ви можете копіювати HidServAuth.",
+ "gui_settings_autoupdate_label": "Перевірити наявність оновлень",
+ "gui_settings_autoupdate_option": "Повідомляти про наявність нової версії",
+ "gui_settings_autoupdate_timestamp": "Попередня перевірка: {}",
+ "gui_settings_autoupdate_timestamp_never": "Ніколи",
+ "gui_settings_autoupdate_check_button": "Перевірити наявність оновлень",
+ "gui_settings_general_label": "Загальні параметри",
+ "gui_settings_onion_label": "Параметри Onion",
+ "gui_settings_sharing_label": "Параметри надсилання",
+ "gui_settings_close_after_first_download_option": "Припинити ділитися, якщо файли надіслано",
+ "gui_settings_connection_type_label": "Як OnionShare повинен з'єднуватися з Tor?",
+ "gui_settings_connection_type_bundled_option": "Використовувати вбудовану в OnionShare версію Tor",
+ "gui_settings_connection_type_automatic_option": "Намагатися автоматично налаштувати за допомогою Tor Browser",
+ "gui_settings_connection_type_control_port_option": "Під'єднатися через порт керування",
+ "gui_settings_connection_type_socket_file_option": "Під'єднатися через файл сокета",
+ "gui_settings_connection_type_test_button": "Перевірити з'єднання з Tor",
+ "gui_settings_control_port_label": "Порт керування",
+ "gui_settings_socket_file_label": "Файл сокета",
+ "gui_settings_socks_label": "SOCKS порт",
+ "gui_settings_authenticate_label": "Параметри автентифікації Tor",
+ "gui_settings_authenticate_no_auth_option": "Без автентифікації або автентифікація через cookie",
+ "gui_settings_authenticate_password_option": "Пароль",
+ "gui_settings_password_label": "Пароль",
+ "gui_settings_tor_bridges": "Підтримка мосту Tor",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Не застосовувати мости",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Застосовувати вбудовані obfs4 під'єднувані транспорти",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Застосовувати вбудовані obfs4 під'єднувані транспорти (вимагає obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Застосовувати вбудовані meek_lite (Azure) під'єднувані транспорти (вимагає obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek_lite заважкі для Tor Project. <br> <br>Користуйтеся ними лише якщо не вдається з'єднатися з Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.",
+ "gui_settings_tor_bridges_custom_radio_option": "Застосовувати власні мости",
+ "gui_settings_tor_bridges_custom_label": "Ви можете отримати мости з <a href=\"https://bridges.torproject.org/options?lang=uk\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Жоден з доданих мостів не працює.\nДвічі перевірте їх або додайте інші.",
+ "gui_settings_button_save": "Зберегти",
+ "gui_settings_button_cancel": "Скасувати",
+ "gui_settings_button_help": "Допомога",
+ "gui_settings_autostop_timer_checkbox": "Використовувати таймер автоспину",
+ "gui_settings_autostop_timer": "Зупинити надсилання о:",
+ "gui_settings_autostart_timer_checkbox": "Використовувати таймер автозапуску",
+ "gui_settings_autostart_timer": "Почати ділитися о:",
+ "settings_error_unknown": "Не вдалося з'єднатися з контролером Tor, оскільки налаштування беззмістовні.",
+ "settings_error_automatic": "Не вдалося під'єднатися до контролера Tor. Чи запущено Tor браузер (доступний з torproject.org) у фоні?",
+ "settings_error_socket_port": "Не вдалося з'єднатися з контролером Tor за {}: {}.",
+ "settings_error_socket_file": "Не вдалося з'єднатися з контролером Tor за допомогою сокет файлу {}.",
+ "settings_error_auth": "З'єднано з {}:{}, але не вдається автентифікувати. Можливо це не Tor контролер?",
+ "settings_error_missing_password": "З'єднано з контролером Tor, але він вимагає пароль автентифікації.",
+ "settings_error_unreadable_cookie_file": "З'єднано з контролером Тор, але пароль може бути неправильним, або у вас немає прав на читання файлів cookie.",
+ "settings_error_bundled_tor_not_supported": "Використання Tor версії, яка поставляється з OnionShare не працює в режимі розробника на Windows або macOS.",
+ "settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, відсутнє з'єднання з Інтернетом або у вас неточний системний час?",
+ "settings_error_bundled_tor_broken": "OnionShare не вдалося з'єднатися з Tor:\n{}",
+ "settings_test_success": "З'єднано з контроллером Tor.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.",
+ "error_tor_protocol_error": "Сталася помилка з Tor: {}",
+ "error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor",
+ "connecting_to_tor": "З'єднання з мережею Tor",
+ "update_available": "Випущено новий OnionShare. <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_server_started_after_autostop_timer": "Таймер автоспину збіг до початку роботи сервера. Будь ласка, почніть ділитися знову.",
+ "gui_server_autostop_timer_expired": "Час автоспину не може бути однаковим або раніше часу автозапуску. Будь ласка, оновіть його, щоб почати надсилання.",
+ "gui_server_autostart_timer_expired": "Запланований час збіг. Будь ласка, оновіть його, щоб почати надсилання.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Таймер автоспину вже збіг. Будь ласка, оновіть його, щоб почати надсилання.",
+ "share_via_onionshare": "Поділитися через OnionShare",
+ "gui_connect_to_tor_for_onion_settings": "З'єднайтеся з Tor, щоб побачити параметри служби onion",
+ "gui_use_legacy_v2_onions_checkbox": "Використовувати застарілі адреси",
+ "gui_save_private_key_checkbox": "Використовувати постійну адресу",
+ "gui_share_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> ваші файли, через <b>Tor Browser</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> файли до вашого комп'ютера через <b>Tor Browser</b>: <img src='{}' />",
+ "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_scheduled": "Заплановано…",
+ "gui_status_indicator_share_started": "Надсилання",
+ "gui_status_indicator_receive_stopped": "Готово до отримання",
+ "gui_status_indicator_receive_working": "Початок…",
+ "gui_status_indicator_receive_scheduled": "Заплановано…",
+ "gui_status_indicator_receive_started": "Отримання",
+ "gui_file_info": "{} файлів, {}",
+ "gui_file_info_single": "{} файл, {}",
+ "history_in_progress_tooltip": "{} в процесі",
+ "history_completed_tooltip": "{} завершено",
+ "error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}",
+ "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо впевнені в своїх діях.</b>",
+ "gui_mode_share_button": "Поділитися файлами",
+ "gui_mode_receive_button": "Отримання Файлів",
+ "gui_settings_receiving_label": "Параметри отримання",
+ "gui_settings_data_dir_label": "Зберігати файли до",
+ "gui_settings_data_dir_browse_button": "Огляд",
+ "gui_settings_public_mode_checkbox": "Загальнодоступний режим",
+ "gui_open_folder_error_nautilus": "Неможливо відкрити теку бо nautilus недоступний. Файл розташовано: {}",
+ "gui_settings_language_label": "Бажана мова",
+ "gui_settings_language_changed_notice": "Перезапустіть OnionShare для зміни мови.",
+ "systray_menu_exit": "Вийти",
+ "systray_page_loaded_title": "Сторінку Завантажено",
+ "systray_page_loaded_message": "OnionShare адресу завантажено",
+ "systray_share_started_title": "Надсилання почалося",
+ "systray_share_started_message": "Початок надсилання комусь файлів",
+ "systray_share_completed_title": "Надсилання виконано",
+ "systray_share_completed_message": "Завершено надсилання файлів",
+ "systray_share_canceled_title": "Надсилання скасовано",
+ "systray_share_canceled_message": "Хтось скасував отримання ваших файлів",
+ "systray_receive_started_title": "Отримання Розпочато",
+ "systray_receive_started_message": "Хтось надсилає вам файли",
+ "gui_all_modes_history": "Історія",
+ "gui_all_modes_clear_history": "Очистити Все",
+ "gui_all_modes_transfer_started": "Розпочато {}",
+ "gui_all_modes_transfer_finished_range": "Передано {} - {}",
+ "gui_all_modes_transfer_finished": "Передано {}",
+ "gui_all_modes_transfer_canceled_range": "Скасовано {} - {}",
+ "gui_all_modes_transfer_canceled": "Скасовано {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} минуло.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (обчислення)",
+ "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
+ "gui_share_mode_no_files": "Поки що нічого не надіслано",
+ "gui_share_mode_autostop_timer_waiting": "Очікування завершення надсилання",
+ "gui_receive_mode_no_files": "Поки що нічого не отримано",
+ "gui_receive_mode_autostop_timer_waiting": "Очікування завершення отримання",
+ "receive_mode_upload_starting": "Завантаження об'ємом {} починається",
+ "days_first_letter": "д",
+ "hours_first_letter": "г",
+ "minutes_first_letter": "х",
+ "seconds_first_letter": "с",
+ "gui_website_url_description": "<b>Будь-хто</b> за допомогою цієї адреси OnionShare може <b>відвідати</b> ваш вебсайт через <b>Tor Browser</b>: <img src='{}' />",
+ "gui_mode_website_button": "Опублікувати вебсайт",
+ "gui_website_mode_no_files": "Немає опублікованих вебсайтів",
+ "incorrect_password": "Неправильний пароль",
+ "gui_settings_individual_downloads_label": "Приберіть позначку, щоб дозволити завантаження окремих файлів",
+ "history_requests_tooltip": "{} вебзапити",
+ "gui_settings_csp_header_disabled_option": "Відключити заголовок Політики захисту вмісту (CSP)",
+ "gui_settings_website_label": "Налаштування вебсайту",
+ "gui_close_tab_warning_persistent_description": "Це усталена вкладка. Якщо ви закриєте її, ви втратите onion-адресу, яку вона використовує. Ви впевнені, що хочете закрити її?",
+ "gui_close_tab_warning_website_description": "Ви маєте активний розміщений вебсайт. Ви впевнені, що хочете закрити цю вкладку?",
+ "gui_new_tab_website_description": "Розмістіть статичний onion HTML-вебсайт на вашому комп'ютері.",
+ "mode_settings_receive_data_dir_browse_button": "Вибрати",
+ "mode_settings_website_disable_csp_checkbox": "Не надсилати заголовок політики безпеки вмісту (дозволяє вебсайту застосовувати сторонні ресурси)",
+ "mode_settings_receive_data_dir_label": "Зберігати файли до",
+ "mode_settings_share_autostop_sharing_checkbox": "Закрити доступ, коли файли надіслано (приберіть позначку, щоб дозволити завантаження окремих файлів)",
+ "mode_settings_client_auth_checkbox": "Застосовувати авторизацію клієнта",
+ "mode_settings_legacy_checkbox": "Користуватися застарілою адресою (служба onion v2, не рекомендовано)",
+ "mode_settings_autostop_timer_checkbox": "Зупинити службу onion у запланований час",
+ "mode_settings_autostart_timer_checkbox": "Запускати службу onion у запланований час",
+ "mode_settings_public_checkbox": "Не використовувати пароль",
+ "mode_settings_persistent_checkbox": "Зберегти цю вкладку та автоматично відкривати її, коли я відкриваю OnionShare",
+ "mode_settings_advanced_toggle_hide": "Сховати розширені налаштування",
+ "mode_settings_advanced_toggle_show": "Показати розширені налаштування",
+ "gui_quit_warning_description": "На деяких ваших вкладках триває обмін файлами. Якщо ви вийдете, це призведе до закриття всіх вкладок. Ви справді хочете вийти?",
+ "gui_close_tab_warning_receive_description": "Триває отримання файлів. Ви впевнені, що хочете закрити цю вкладку?",
+ "gui_close_tab_warning_share_description": "Триває надсилання ваших файлів. Ви впевнені, що хочете закрити цю вкладку?",
+ "gui_new_tab_website_button": "Опублікувати вебсайт",
+ "gui_new_tab_receive_description": "Перетворіть ваш комп’ютер на онлайн-обмінник. Люди зможуть надсилати файли на ваш комп’ютер за допомогою браузера Tor.",
+ "gui_new_tab_receive_button": "Отримання файлів",
+ "gui_new_tab_share_button": "Надсилання файлів",
+ "gui_new_tab_share_description": "Виберіть файли на вашому комп'ютері, щоб надіслати їх іншому користувачу. Особа або люди, яким ви хочете надіслати файли, повинні скористатись переглядачем Tor для їхнього отримання.",
+ "gui_quit_warning_cancel": "Скасувати",
+ "gui_quit_warning_title": "Ви впевнені?",
+ "gui_close_tab_warning_cancel": "Скасувати",
+ "gui_close_tab_warning_close": "Закрити",
+ "gui_close_tab_warning_title": "Ви впевнені?",
+ "gui_new_tab_tooltip": "Відкрити нову вкладку",
+ "gui_new_tab": "Нова вкладка",
+ "gui_file_selection_remove_all": "Вилучити всі",
+ "gui_remove": "Вилучити",
+ "gui_new_tab_chat_button": "Анонімне спілкування",
+ "gui_open_folder_error": "Не вдалося відкрити теку за допомогою xdg- open. Файл тут: {}",
+ "gui_tab_name_chat": "Спілкування",
+ "gui_tab_name_website": "Вебсайт",
+ "gui_tab_name_receive": "Отримати",
+ "gui_tab_name_share": "Поділитися",
+ "gui_qr_code_description": "Скануйте цей QR-код за допомогою зчитувача QR, наприклад камери на телефоні, щоб простіше надіслати комусь адресу OnionShare.",
+ "gui_receive_flatpak_data_dir": "Оскільки ви встановили OnionShare за допомогою Flatpak, ви повинні зберігати файли в теці ~/OnionShare.",
+ "gui_chat_stop_server": "Зупинити сервер чату",
+ "gui_chat_start_server": "Запустити сервер чату",
+ "gui_chat_stop_server_autostop_timer": "Зупинити сервер чату ({})",
+ "gui_qr_code_dialog_title": "QR-код OnionShare",
+ "gui_show_url_qr_code": "Показати QR-код",
+ "gui_main_page_share_button": "Почати надсилання",
+ "gui_main_page_chat_button": "Почати спілкуватися в чаті",
+ "gui_main_page_website_button": "Почати хостинг",
+ "gui_main_page_receive_button": "Почати отримання"
+}
diff --git a/share/locale/wo.json b/desktop/src/onionshare/resources/locale/wo.json
index 89d732b3..89d732b3 100644
--- a/share/locale/wo.json
+++ b/desktop/src/onionshare/resources/locale/wo.json
diff --git a/share/locale/yo.json b/desktop/src/onionshare/resources/locale/yo.json
index 96b5a0d1..96b5a0d1 100644
--- a/share/locale/yo.json
+++ b/desktop/src/onionshare/resources/locale/yo.json
diff --git a/share/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json
index 3f3cbbf7..072499a1 100644
--- a/share/locale/zh_Hans.json
+++ b/desktop/src/onionshare/resources/locale/zh_Hans.json
@@ -10,8 +10,8 @@
"not_a_readable_file": "{0:s} 不是可读文件。",
"no_available_port": "找不到可用于开启 onion 服务的端口",
"other_page_loaded": "地址已加载完成",
- "close_on_autostop_timer": "已停止,因为定时器计时结束,自动停止",
- "closing_automatically": "已停止,因为传输已完成",
+ "close_on_autostop_timer": "因为定时器计时结束,已自动停止",
+ "closing_automatically": "传输已完成,已自动停止",
"timeout_download_still_running": "",
"large_filesize": "警告:发送大的共享文件可能会花费数小时",
"systray_menu_exit": "退出",
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "使用内置的 meek_lite (Azure) pluggable transports(需要obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "警告:meek_lite 网桥会对 Tor 的运行产生极大负担。<br><br>仅在无法直接连接至 Tor,通过 obfs4 transports 连接,或通过其他网桥连接时使用。",
"gui_settings_tor_bridges_custom_radio_option": "使用自定义网桥",
- "gui_settings_tor_bridges_custom_label": "您可以从 <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> 获得网桥",
+ "gui_settings_tor_bridges_custom_label": "您可以从 <a href=\"https://bridges.torproject.org/options?lang=zh_CN\">https://bridges.torproject.org</a> 获得网桥",
"gui_settings_tor_bridges_invalid": "您所添加的网桥均无法工作。\n请再次检查或添加其它网桥。",
"gui_settings_button_save": "保存",
"gui_settings_button_cancel": "取消",
@@ -115,15 +115,15 @@
"settings_error_unreadable_cookie_file": "已连接至 Tor 控制器,但密码可能错误,或您的用户没有读取 cookie 文件的权限。",
"settings_error_bundled_tor_not_supported": "OnionShare 自带的 Tor 版本无法在 Windows 或 macOS 下运行开发者模式。",
"settings_error_bundled_tor_timeout": "连接至 Tor 的时间过长。也许您未连接至互联网,或是系统时间不准确?",
- "settings_error_bundled_tor_broken": "OnionShare 无法在后台连接至 Tor\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare 无法连接至 Tor\n{}",
"settings_test_success": "已连接至 Tor 控制器。\n\nTor版本:{}\n支持短期 onion 服务:{}。\n支持客户端认证:{}。\n支持下一代 .onion 地址:{}。",
"error_tor_protocol_error": "Tor 发生错误:{}",
"error_tor_protocol_error_unknown": "Tor 发生未知错误",
"error_invalid_private_key": "不支持这种类型的私钥",
"connecting_to_tor": "正在连接至 Tor 网络",
"update_available": "有新版本的 OnionShare 可用:<a href='{}'>点击这里</a>以获取。<br><br>您正在使用的版本为 {},最新版本为 {}。",
- "update_error_check_error": "无法检查更新:OnionShare 网站显示最新版本是无法识别的 '{}'……",
- "update_error_invalid_latest_version": "无法检查更新:也许您没有连接至 Tor,或 OnionShare 网站瘫痪了?",
+ "update_error_check_error": "无法检查更新:可能是您没有连接到Tor,或者OnionShare瘫痪了?",
+ "update_error_invalid_latest_version": "无法检查更新:OnionShare 网站说最新版本无法识别'{}'…",
"update_not_available": "您正在运行最新版本的 OnionShare。",
"gui_tor_connection_ask": "打开设置以整理与 Tor 的连接?",
"gui_tor_connection_ask_open_settings": "好",
@@ -233,5 +233,41 @@
"gui_settings_individual_downloads_label": "取消选择来允许下载单独的文件",
"history_requests_tooltip": "{}个网络请求",
"gui_settings_csp_header_disabled_option": "禁用内容安全策略标题",
- "gui_settings_website_label": "网站设置"
+ "gui_settings_website_label": "网站设置",
+ "mode_settings_website_disable_csp_checkbox": "取消Content Security Policy头(允许您的网站使用三方资源)",
+ "mode_settings_receive_data_dir_browse_button": "浏览",
+ "mode_settings_receive_data_dir_label": "保存文件到",
+ "mode_settings_share_autostop_sharing_checkbox": "文件传送完后停止共享(取消选中可允许下载单个文件)",
+ "mode_settings_client_auth_checkbox": "使用客户端认证",
+ "mode_settings_legacy_checkbox": "使用旧地址(v2 onion服务,不推荐)",
+ "mode_settings_autostop_timer_checkbox": "定时停止onion服务",
+ "mode_settings_autostart_timer_checkbox": "定时起动onion服务",
+ "mode_settings_public_checkbox": "不使用密码",
+ "mode_settings_persistent_checkbox": "保存此标签,并在打开OnionShare时自动打开它。",
+ "mode_settings_advanced_toggle_hide": "隐藏高级选项",
+ "mode_settings_advanced_toggle_show": "显示高级选项",
+ "gui_quit_warning_cancel": "取消",
+ "gui_quit_warning_description": "有的标签中有激活的共享,如果退出,所有的标签将关闭。您确定要退出吗?",
+ "gui_quit_warning_title": "您确定吗?",
+ "gui_close_tab_warning_cancel": "取消",
+ "gui_close_tab_warning_close": "关闭",
+ "gui_close_tab_warning_website_description": "您正在托管一个网站,确定要关闭此标签吗?",
+ "gui_close_tab_warning_receive_description": "您正在接收文件,确定要关闭此标签吗?",
+ "gui_close_tab_warning_share_description": "您正在发送文件,确定要关闭此标签吗?",
+ "gui_close_tab_warning_persistent_description": "此标签是持久的, 如果关闭它,将会丢失它正在使用的onion地址。 您确定要关闭它吗?",
+ "gui_close_tab_warning_title": "您确定吗?",
+ "gui_new_tab_website_description": "从您的计算机托管一个静态HTML的onion网站。",
+ "gui_new_tab_website_button": "发布网站",
+ "gui_new_tab_receive_description": "将您的计算机变成一个在线的dropbox。 人们将能够使用Tor浏览器将文件发送到您的计算机。",
+ "gui_new_tab_receive_button": "接收文件",
+ "gui_new_tab_share_description": "选择计算机上的文件发送给别人。 您要将文件发送给的那些人需要使用Tor浏览器来从您这里下载文件。",
+ "gui_new_tab_share_button": "共享文件",
+ "gui_new_tab_tooltip": "打开一个新标签",
+ "gui_new_tab": "新建标签",
+ "gui_show_url_qr_code": "显示二维码",
+ "gui_receive_flatpak_data_dir": "因为你用Flatpack安装的OnionShare,你需要把文件储存到在~/OnionShare里的一个文件夹里。",
+ "gui_chat_stop_server": "停止言论服务器",
+ "gui_chat_start_server": "开始言论服务器",
+ "gui_file_selection_remove_all": "删除所有",
+ "gui_remove": "删除"
}
diff --git a/share/locale/zh_Hant.json b/desktop/src/onionshare/resources/locale/zh_Hant.json
index 2ef90d43..20fd1a90 100644
--- a/share/locale/zh_Hant.json
+++ b/desktop/src/onionshare/resources/locale/zh_Hant.json
@@ -99,7 +99,7 @@
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "使月內建的 meek_lite (Azure) pluggable transports (需要 obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "警告: The meek_lite bridges are very costly for the Tor Project to run.<br><br>Only use them if unable to connect to Tor directly, via obfs4 transports, or other normal bridges.",
"gui_settings_tor_bridges_custom_radio_option": "使用自定義的bridges",
- "gui_settings_tor_bridges_custom_label": "你可以從 <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>取得bridges",
+ "gui_settings_tor_bridges_custom_label": "你可以從 <a href=\"https://bridges.torproject.org/options?lang=zh_TW\">https://bridges.torproject.org</a>取得bridges",
"gui_settings_tor_bridges_invalid": "您新增的bridges無效。\n請再次檢查他們或新增其他的。",
"gui_settings_button_save": "保存",
"gui_settings_button_cancel": "取消",
@@ -115,7 +115,7 @@
"settings_error_unreadable_cookie_file": "已連接到Tor controller,但是密碼錯誤,或是您沒有讀取cookie檔案的權限。",
"settings_error_bundled_tor_not_supported": "OnionShare附帶的Tor版本並不適用於Windows或macOS上的開發人員模式。",
"settings_error_bundled_tor_timeout": "Tor連接超時。您可能沒有連接網路,或是系統時間設定錯誤?",
- "settings_error_bundled_tor_broken": "OnionShare無法在背景連接到Tor:\n{}",
+ "settings_error_bundled_tor_broken": "OnionShare 無法在背景連接到Tor:\n{}",
"settings_test_success": "已連接到Tor controller。\n\nTor版本: {}\n支援短期onion服務: {}.\n支援客戶端認證: {}.\n支援新一代.onion地址: {}.",
"error_tor_protocol_error": "Tor發生錯誤: {}",
"error_tor_protocol_error_unknown": "Tor發生了未知的錯誤",
@@ -235,5 +235,19 @@
"gui_website_mode_no_files": "尚未分享網站",
"gui_settings_individual_downloads_label": "取消選取以允許下載個別的檔案",
"history_requests_tooltip": "{}個網頁請求",
- "gui_settings_website_label": "網站設定"
+ "gui_settings_website_label": "網站設定",
+ "mode_settings_receive_data_dir_browse_button": "瀏覽",
+ "mode_settings_receive_data_dir_label": "儲存檔案至",
+ "mode_settings_public_checkbox": "不要使用密碼",
+ "mode_settings_advanced_toggle_hide": "隱藏進階設定",
+ "gui_close_tab_warning_title": "您確定?",
+ "gui_quit_warning_cancel": "取消",
+ "gui_quit_warning_title": "您確定?",
+ "gui_close_tab_warning_cancel": "取消",
+ "gui_close_tab_warning_close": "關閉",
+ "gui_new_tab_share_description": "選擇要寄送給他人的檔案。接收您傳送檔案的人需要使用Tor 瀏覽器才能下載檔案。",
+ "gui_new_tab_receive_button": "接收檔案",
+ "gui_new_tab": "新分頁",
+ "gui_new_tab_tooltip": "開啟新分頁",
+ "gui_new_tab_share_button": "分享檔案"
}
diff --git a/desktop/src/onionshare/resources/onionshare-128.png b/desktop/src/onionshare/resources/onionshare-128.png
new file mode 100644
index 00000000..856ab4e7
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-128.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare-16.png b/desktop/src/onionshare/resources/onionshare-16.png
new file mode 100644
index 00000000..dea20940
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-16.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare-256.png b/desktop/src/onionshare/resources/onionshare-256.png
new file mode 100644
index 00000000..b47cd94a
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-256.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare-32.png b/desktop/src/onionshare/resources/onionshare-32.png
new file mode 100644
index 00000000..14c849c9
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-32.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare-512.png b/desktop/src/onionshare/resources/onionshare-512.png
new file mode 100644
index 00000000..a4810d04
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-512.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare-64.png b/desktop/src/onionshare/resources/onionshare-64.png
new file mode 100644
index 00000000..8468dc52
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare-64.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare.icns b/desktop/src/onionshare/resources/onionshare.icns
new file mode 100644
index 00000000..f65ad12d
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare.icns
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare.ico b/desktop/src/onionshare/resources/onionshare.ico
new file mode 100644
index 00000000..dcde4f1f
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare.ico
Binary files differ
diff --git a/desktop/src/onionshare/resources/onionshare.png b/desktop/src/onionshare/resources/onionshare.png
new file mode 100644
index 00000000..a4810d04
--- /dev/null
+++ b/desktop/src/onionshare/resources/onionshare.png
Binary files differ
diff --git a/onionshare_gui/settings_dialog.py b/desktop/src/onionshare/settings_dialog.py
index f8cb4204..5f37bda1 100644
--- a/onionshare_gui/settings_dialog.py
+++ b/desktop/src/onionshare/settings_dialog.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,20 +17,23 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
+
+from PySide2 import QtCore, QtWidgets, QtGui
import sys
import platform
import datetime
import re
import os
-from onionshare import strings, common
-from onionshare.settings import Settings
-from onionshare.onion import *
+from onionshare_cli import common
+from onionshare_cli.settings import Settings
+from onionshare_cli.onion import *
+from . import strings
from .widgets import Alert
from .update_checker import *
from .tor_connection_dialog import TorConnectionDialog
+from .gui_common import GuiCommon
class SettingsDialog(QtWidgets.QDialog):
@@ -38,7 +41,7 @@ class SettingsDialog(QtWidgets.QDialog):
Settings dialog.
"""
- settings_saved = QtCore.pyqtSignal()
+ settings_saved = QtCore.Signal()
def __init__(self, common):
super(SettingsDialog, self).__init__()
@@ -49,9 +52,7 @@ class SettingsDialog(QtWidgets.QDialog):
self.setModal(True)
self.setWindowTitle(strings._("gui_settings_window_title"))
- self.setWindowIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
- )
+ self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
self.system = platform.system()
@@ -102,7 +103,7 @@ class SettingsDialog(QtWidgets.QDialog):
language_names.sort()
for language_name in language_names:
locale = language_names_to_locales[language_name]
- self.language_combobox.addItem(language_name, QtCore.QVariant(locale))
+ self.language_combobox.addItem(language_name, locale)
language_layout = QtWidgets.QHBoxLayout()
language_layout.addWidget(language_label)
language_layout.addWidget(self.language_combobox)
@@ -459,7 +460,7 @@ class SettingsDialog(QtWidgets.QDialog):
self._update_autoupdate_timestamp(autoupdate_timestamp)
locale = self.old_settings.get("locale")
- locale_index = self.language_combobox.findData(QtCore.QVariant(locale))
+ locale_index = self.language_combobox.findData(locale)
self.language_combobox.setCurrentIndex(locale_index)
connection_type = self.old_settings.get("connection_type")
@@ -664,9 +665,14 @@ class SettingsDialog(QtWidgets.QDialog):
else:
tor_status_update_func = None
- onion = Onion(self.common, use_tmp_dir=True)
+ onion = Onion(
+ self.common,
+ use_tmp_dir=True,
+ get_tor_paths=self.common.gui.get_tor_paths,
+ )
onion.connect(
- custom_settings=settings, tor_status_update_func=tor_status_update_func,
+ custom_settings=settings,
+ tor_status_update_func=tor_status_update_func,
)
# If an exception hasn't been raised yet, the Tor settings work
@@ -892,7 +898,7 @@ class SettingsDialog(QtWidgets.QDialog):
@staticmethod
def open_help():
- help_url = "https://github.com/micahflee/onionshare/wiki"
+ help_url = "https://docs.onionshare.org/"
QtGui.QDesktopServices.openUrl(QtCore.QUrl(help_url))
def settings_from_fields(self):
diff --git a/onionshare/strings.py b/desktop/src/onionshare/strings.py
index 0ea2ba24..ce9207da 100644
--- a/onionshare/strings.py
+++ b/desktop/src/onionshare/strings.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -25,7 +25,7 @@ strings = {}
translations = {}
-def load_strings(common):
+def load_strings(common, locale_dir):
"""
Loads translated strings and fallback to English
if the translation does not exist.
@@ -35,7 +35,6 @@ def load_strings(common):
# Load all translations
translations = {}
for locale in common.settings.available_locales:
- locale_dir = common.get_resource_path("locale")
filename = os.path.join(locale_dir, f"{locale}.json")
with open(filename, encoding="utf-8") as f:
translations[locale] = json.load(f)
diff --git a/onionshare_gui/tab/__init__.py b/desktop/src/onionshare/tab/__init__.py
index ca346a7d..162d13aa 100644
--- a/onionshare_gui/tab/__init__.py
+++ b/desktop/src/onionshare/tab/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,4 +17,5 @@ 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/>.
"""
+
from .tab import Tab
diff --git a/onionshare_gui/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py
index fc79d0ad..f92632f0 100644
--- a/onionshare_gui/tab/mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,15 +17,16 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.common import AutoStopTimer
+from PySide2 import QtCore, QtWidgets, QtGui
+
+from onionshare_cli.common import AutoStopTimer
from .history import IndividualFileHistoryItem
from .mode_settings_widget import ModeSettingsWidget
from ..server_status import ServerStatus
+from ... import strings
from ...threads import OnionThread, AutoStartTimer
from ...widgets import Alert
@@ -35,14 +36,14 @@ class Mode(QtWidgets.QWidget):
The class that all modes inherit from
"""
- start_server_finished = QtCore.pyqtSignal()
- stop_server_finished = QtCore.pyqtSignal()
- starting_server_step2 = QtCore.pyqtSignal()
- starting_server_step3 = QtCore.pyqtSignal()
- starting_server_error = QtCore.pyqtSignal(str)
- starting_server_early = QtCore.pyqtSignal()
- set_server_active = QtCore.pyqtSignal(bool)
- change_persistent = QtCore.pyqtSignal(int, bool)
+ start_server_finished = QtCore.Signal()
+ stop_server_finished = QtCore.Signal()
+ starting_server_step2 = QtCore.Signal()
+ starting_server_step3 = QtCore.Signal()
+ starting_server_error = QtCore.Signal(str)
+ starting_server_early = QtCore.Signal()
+ set_server_active = QtCore.Signal(bool)
+ change_persistent = QtCore.Signal(int, bool)
def __init__(self, tab):
super(Mode, self).__init__()
@@ -93,17 +94,10 @@ class Mode(QtWidgets.QWidget):
self.starting_server_early.connect(self.start_server_early)
self.starting_server_error.connect(self.start_server_error)
- # Header
- # Note: It's up to the downstream Mode to add this to its layout
- self.header_label = QtWidgets.QLabel()
- self.header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
- self.header_label.setAlignment(QtCore.Qt.AlignHCenter)
-
# Primary action
# Note: It's up to the downstream Mode to add this to its layout
self.primary_action_layout = QtWidgets.QVBoxLayout()
self.primary_action_layout.addWidget(self.mode_settings_widget)
- self.primary_action_layout.addWidget(self.server_status)
self.primary_action = QtWidgets.QWidget()
self.primary_action.setLayout(self.primary_action_layout)
diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
new file mode 100644
index 00000000..25a02969
--- /dev/null
+++ b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
@@ -0,0 +1,154 @@
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <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 ....gui_common import GuiCommon
+
+
+class ChatMode(Mode):
+ """
+ Parts of the main window UI for sharing files.
+ """
+
+ success = QtCore.Signal()
+ error = QtCore.Signal(str)
+
+ def init(self):
+ """
+ Custom initialization for ChatMode.
+ """
+ # Create the Web object
+ self.web = Web(self.common, True, self.settings, "chat")
+
+ # Chat image
+ self.image_label = QtWidgets.QLabel()
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path("images/mode_chat.png"))
+ )
+ )
+ self.image_label.setFixedSize(300, 300)
+ image_layout = QtWidgets.QVBoxLayout()
+ image_layout.addStretch()
+ image_layout.addWidget(self.image_label)
+ image_layout.addStretch()
+ self.image = QtWidgets.QWidget()
+ self.image.setLayout(image_layout)
+
+ # Server status
+ self.server_status.set_mode("chat")
+ self.server_status.server_started_finished.connect(self.update_primary_action)
+ self.server_status.server_stopped.connect(self.update_primary_action)
+ self.server_status.server_canceled.connect(self.update_primary_action)
+ # Tell server_status about web, then update
+ self.server_status.web = self.web
+ self.server_status.update()
+
+ # Header
+ header_label = QtWidgets.QLabel(strings._("gui_new_tab_chat_button"))
+ header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
+
+ # Top bar
+ top_bar_layout = QtWidgets.QHBoxLayout()
+ top_bar_layout.addStretch()
+
+ # 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.server_status)
+ self.main_layout.addStretch()
+ self.main_layout.addWidget(MinimumWidthWidget(700))
+
+ # Column layout
+ self.column_layout = QtWidgets.QHBoxLayout()
+ self.column_layout.addWidget(self.image)
+ self.column_layout.addLayout(self.main_layout)
+
+ # Wrapper layout
+ self.wrapper_layout = QtWidgets.QVBoxLayout()
+ self.wrapper_layout.addLayout(self.column_layout)
+ self.setLayout(self.wrapper_layout)
+
+ def get_stop_server_autostop_timer_text(self):
+ """
+ Return the string to put on the stop server button, if there's an auto-stop timer
+ """
+ return strings._("gui_share_stop_server_autostop_timer")
+
+ def autostop_timer_finished_should_stop_server(self):
+ """
+ The auto-stop timer expired, should we stop the server? Returns a bool
+ """
+
+ self.server_status.stop_server()
+ self.server_status_label.setText(strings._("close_on_autostop_timer"))
+ return True
+
+ def start_server_custom(self):
+ """
+ Starting the server.
+ """
+ # Reset web counters
+ self.web.chat_mode.cur_history_id = 0
+ self.web.reset_invalid_passwords()
+
+ def start_server_step2_custom(self):
+ """
+ Step 2 in starting the server. Zipping up files.
+ """
+ # Continue
+ self.starting_server_step3.emit()
+ self.start_server_finished.emit()
+
+ def cancel_server_custom(self):
+ """
+ Log that the server has been cancelled
+ """
+ self.common.log("ChatMode", "cancel_server")
+
+ def handle_tor_broke_custom(self):
+ """
+ Connection to Tor broke.
+ """
+ self.primary_action.hide()
+
+ def on_reload_settings(self):
+ """
+ We should be ok to re-enable the 'Start Receive Mode' button now.
+ """
+ self.primary_action.show()
+
+ def update_primary_action(self):
+ self.common.log("ChatMode", "update_primary_action")
diff --git a/onionshare_gui/tab/mode/file_selection.py b/desktop/src/onionshare/tab/mode/file_selection.py
index 5a9e5d59..54d9ea83 100644
--- a/onionshare_gui/tab/mode/file_selection.py
+++ b/desktop/src/onionshare/tab/mode/file_selection.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,50 +17,64 @@ 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 os
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
+import os
+from PySide2 import QtCore, QtWidgets, QtGui
+from ... import strings
from ...widgets import Alert, AddFileDialog
+from ...gui_common import GuiCommon
-class DropHereLabel(QtWidgets.QLabel):
+class DropHereWidget(QtWidgets.QWidget):
"""
When there are no files or folders in the FileList yet, display the
'drop files here' message and graphic.
"""
- def __init__(self, common, parent, image=False):
- self.parent = parent
- super(DropHereLabel, self).__init__(parent=parent)
-
+ def __init__(self, common, image_filename, header_text, w, h, parent):
+ super(DropHereWidget, self).__init__(parent)
self.common = common
-
self.setAcceptDrops(True)
- self.setAlignment(QtCore.Qt.AlignCenter)
- if image:
- self.setPixmap(
- QtGui.QPixmap.fromImage(
- QtGui.QImage(
- self.common.get_resource_path("images/logo_transparent.png")
- )
- )
- )
- else:
- self.setText(strings._("gui_drag_and_drop"))
- self.setStyleSheet(
- self.common.gui.css["share_file_selection_drop_here_label"]
+ self.image_label = QtWidgets.QLabel(parent=self)
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path(image_filename))
)
+ )
+ self.image_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.image_label.show()
+ self.header_label = QtWidgets.QLabel(parent=self)
+ self.header_label.setText(header_text)
+ self.header_label.setStyleSheet(
+ self.common.gui.css["share_file_selection_drop_here_header_label"]
+ )
+ self.header_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.header_label.show()
+
+ self.text_label = QtWidgets.QLabel(parent=self)
+ self.text_label.setText(strings._("gui_drag_and_drop"))
+ self.text_label.setStyleSheet(
+ self.common.gui.css["share_file_selection_drop_here_label"]
+ )
+ self.text_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.text_label.show()
+
+ self.resize(w, h)
self.hide()
def dragEnterEvent(self, event):
- self.parent.drop_here_image.hide()
- self.parent.drop_here_text.hide()
+ self.hide()
event.accept()
+ def resize(self, w, h):
+ self.setGeometry(0, 0, w, h)
+ self.image_label.setGeometry(0, 0, w, h - 100)
+ self.header_label.setGeometry(0, 340, w, h - 340)
+ self.text_label.setGeometry(0, 410, w, h - 410)
+
class DropCountLabel(QtWidgets.QLabel):
"""
@@ -90,21 +104,26 @@ class FileList(QtWidgets.QListWidget):
The list of files and folders in the GUI.
"""
- files_dropped = QtCore.pyqtSignal()
- files_updated = QtCore.pyqtSignal()
+ files_dropped = QtCore.Signal()
+ files_updated = QtCore.Signal()
- def __init__(self, common, parent=None):
+ def __init__(self, common, background_image_filename, header_text, parent=None):
super(FileList, self).__init__(parent)
-
self.common = common
-
self.setAcceptDrops(True)
+
self.setIconSize(QtCore.QSize(32, 32))
self.setSortingEnabled(True)
self.setMinimumHeight(160)
self.setSelectionMode(QtWidgets.QAbstractItemView.ExtendedSelection)
- self.drop_here_image = DropHereLabel(self.common, self, True)
- self.drop_here_text = DropHereLabel(self.common, self, False)
+ self.drop_here = DropHereWidget(
+ self.common,
+ background_image_filename,
+ header_text,
+ self.width(),
+ self.height(),
+ self,
+ )
self.drop_count = DropCountLabel(self.common, self)
self.resizeEvent(None)
self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
@@ -115,11 +134,9 @@ class FileList(QtWidgets.QListWidget):
"""
# file list should have a background image if empty
if self.count() == 0:
- self.drop_here_image.show()
- self.drop_here_text.show()
+ self.drop_here.show()
else:
- self.drop_here_image.hide()
- self.drop_here_text.hide()
+ self.drop_here.hide()
def server_started(self):
"""
@@ -144,9 +161,7 @@ class FileList(QtWidgets.QListWidget):
"""
When the widget is resized, resize the drop files image and text.
"""
- offset = 70
- self.drop_here_image.setGeometry(0, 0, self.width(), self.height() - offset)
- self.drop_here_text.setGeometry(0, offset, self.width(), self.height() - offset)
+ self.drop_here.resize(self.width(), self.height())
if self.count() > 0:
# Add and delete an empty item, to force all items to get redrawn
@@ -177,7 +192,7 @@ class FileList(QtWidgets.QListWidget):
size_hint = self.drop_count.sizeHint()
self.drop_count.setGeometry(
- self.width() - size_hint.width() - 10,
+ self.width() - size_hint.width() - 30,
self.height() - size_hint.height() - 10,
size_hint.width(),
size_hint.height(),
@@ -276,7 +291,7 @@ class FileList(QtWidgets.QListWidget):
item.item_button.setDefault(False)
item.item_button.setFlat(True)
item.item_button.setIcon(
- QtGui.QIcon(self.common.get_resource_path("images/file_delete.png"))
+ QtGui.QIcon(GuiCommon.get_resource_path("images/file_delete.png"))
)
item.item_button.clicked.connect(delete_item)
item.item_button.setSizePolicy(
@@ -313,7 +328,7 @@ class FileSelection(QtWidgets.QVBoxLayout):
delete the files and folders.
"""
- def __init__(self, common, parent):
+ def __init__(self, common, background_image_filename, header_text, parent):
super(FileSelection, self).__init__()
self.common = common
@@ -322,7 +337,7 @@ class FileSelection(QtWidgets.QVBoxLayout):
self.server_on = False
# File list
- self.file_list = FileList(self.common)
+ self.file_list = FileList(self.common, background_image_filename, header_text)
self.file_list.itemSelectionChanged.connect(self.update)
self.file_list.files_dropped.connect(self.update)
self.file_list.files_updated.connect(self.update)
diff --git a/onionshare_gui/tab/mode/history.py b/desktop/src/onionshare/tab/mode/history.py
index 51d9c267..3e9c0571 100644
--- a/onionshare_gui/tab/mode/history.py
+++ b/desktop/src/onionshare/tab/mode/history.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,14 +17,16 @@ 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 time
import subprocess
import os
from datetime import datetime
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare import strings
+from ... import strings
from ...widgets import Alert
+from ...gui_common import GuiCommon
class HistoryItem(QtWidgets.QWidget):
@@ -119,7 +121,7 @@ class ShareHistoryItem(HistoryItem):
self.progress_bar.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.progress_bar.setAlignment(QtCore.Qt.AlignHCenter)
self.progress_bar.setMinimum(0)
- self.progress_bar.setMaximum(total_bytes)
+ self.progress_bar.setMaximum(total_bytes / 1024)
self.progress_bar.setValue(0)
self.progress_bar.setStyleSheet(
self.common.gui.css["downloads_uploads_progress_bar"]
@@ -138,8 +140,8 @@ class ShareHistoryItem(HistoryItem):
def update(self, downloaded_bytes):
self.downloaded_bytes = downloaded_bytes
- self.progress_bar.setValue(downloaded_bytes)
- if downloaded_bytes == self.progress_bar.total_bytes:
+ self.progress_bar.setValue(downloaded_bytes / 1024)
+ if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024):
pb_fmt = strings._("gui_all_modes_progress_complete").format(
self.common.format_seconds(time.time() - self.started)
)
@@ -198,7 +200,7 @@ class ReceiveHistoryItemFile(QtWidgets.QWidget):
# Folder button
folder_pixmap = QtGui.QPixmap.fromImage(
- QtGui.QImage(self.common.get_resource_path("images/open_folder.png"))
+ QtGui.QImage(GuiCommon.get_resource_path("images/open_folder.png"))
)
folder_icon = QtGui.QIcon(folder_pixmap)
self.folder_button = QtWidgets.QPushButton()
@@ -322,8 +324,8 @@ class ReceiveHistoryItem(HistoryItem):
total_uploaded_bytes += data["progress"][filename]["uploaded_bytes"]
# Update the progress bar
- self.progress_bar.setMaximum(self.content_length)
- self.progress_bar.setValue(total_uploaded_bytes)
+ self.progress_bar.setMaximum(self.content_length / 1024)
+ self.progress_bar.setValue(total_uploaded_bytes / 1024)
elapsed = datetime.now() - self.started
if elapsed.seconds < 10:
@@ -339,6 +341,8 @@ class ReceiveHistoryItem(HistoryItem):
estimated_time_remaining,
)
+ self.progress_bar.setFormat(pb_fmt)
+
# Using list(progress) to avoid "RuntimeError: dictionary changed size during iteration"
for filename in list(data["progress"]):
# Add a new file if needed
@@ -451,7 +455,7 @@ class IndividualFileHistoryItem(HistoryItem):
else:
self.total_bytes = data["filesize"]
self.progress_bar.setMinimum(0)
- self.progress_bar.setMaximum(data["filesize"])
+ self.progress_bar.setMaximum(data["filesize"] / 1024)
self.progress_bar.total_bytes = data["filesize"]
# Start at 0
@@ -460,8 +464,8 @@ class IndividualFileHistoryItem(HistoryItem):
def update(self, downloaded_bytes):
self.downloaded_bytes = downloaded_bytes
- self.progress_bar.setValue(downloaded_bytes)
- if downloaded_bytes == self.progress_bar.total_bytes:
+ self.progress_bar.setValue(downloaded_bytes / 1024)
+ if (downloaded_bytes / 1024) == (self.progress_bar.total_bytes / 1024):
self.status_code_label.setText("200")
self.status_code_label.setStyleSheet(
self.common.gui.css["history_individual_file_status_code_label_2xx"]
@@ -696,9 +700,9 @@ class History(QtWidgets.QWidget):
Update the 'completed' widget.
"""
if self.completed_count == 0:
- image = self.common.get_resource_path("images/history_completed_none.png")
+ image = GuiCommon.get_resource_path("images/history_completed_none.png")
else:
- image = self.common.get_resource_path("images/history_completed.png")
+ image = GuiCommon.get_resource_path("images/history_completed.png")
self.completed_label.setText(f'<img src="{image}" /> {self.completed_count}')
self.completed_label.setToolTip(
strings._("history_completed_tooltip").format(self.completed_count)
@@ -709,9 +713,9 @@ class History(QtWidgets.QWidget):
Update the 'in progress' widget.
"""
if self.in_progress_count == 0:
- image = self.common.get_resource_path("images/history_in_progress_none.png")
+ image = GuiCommon.get_resource_path("images/history_in_progress_none.png")
else:
- image = self.common.get_resource_path("images/history_in_progress.png")
+ image = GuiCommon.get_resource_path("images/history_in_progress.png")
self.in_progress_label.setText(
f'<img src="{image}" /> {self.in_progress_count}'
@@ -725,9 +729,9 @@ class History(QtWidgets.QWidget):
Update the 'web requests' widget.
"""
if self.requests_count == 0:
- image = self.common.get_resource_path("images/history_requests_none.png")
+ image = GuiCommon.get_resource_path("images/history_requests_none.png")
else:
- image = self.common.get_resource_path("images/history_requests.png")
+ image = GuiCommon.get_resource_path("images/history_requests.png")
self.requests_label.setText(f'<img src="{image}" /> {self.requests_count}')
self.requests_label.setToolTip(
diff --git a/onionshare_gui/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
index ed224589..39226540 100644
--- a/onionshare_gui/tab/mode/mode_settings_widget.py
+++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,9 +17,10 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets
-from onionshare import strings
+from PySide2 import QtCore, QtWidgets
+
+from ... import strings
class ModeSettingsWidget(QtWidgets.QWidget):
@@ -27,7 +28,7 @@ class ModeSettingsWidget(QtWidgets.QWidget):
All of the common settings for each mode are in this widget
"""
- change_persistent = QtCore.pyqtSignal(int, bool)
+ change_persistent = QtCore.Signal(int, bool)
def __init__(self, common, tab, mode_settings):
super(ModeSettingsWidget, self).__init__()
diff --git a/onionshare_gui/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
index 92cd17fa..95d1ecbe 100644
--- a/onionshare_gui/tab/mode/receive_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,15 +17,17 @@ 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 os
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.web import Web
+from onionshare_cli.web import Web
from ..history import History, ToggleHistory, ReceiveHistoryItem
from .. import Mode
+from .... import strings
from ....widgets import MinimumWidthWidget, Alert
+from ....gui_common import GuiCommon
class ReceiveMode(Mode):
@@ -40,8 +42,18 @@ class ReceiveMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "receive")
- # Header
- self.header_label.setText(strings._("gui_new_tab_receive_button"))
+ # Receive image
+ self.image_label = QtWidgets.QLabel()
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path("images/mode_receive.png"))
+ )
+ )
+ self.image_label.setFixedSize(250, 250)
+ image_layout = QtWidgets.QVBoxLayout()
+ image_layout.addWidget(self.image_label)
+ self.image = QtWidgets.QWidget()
+ self.image.setLayout(image_layout)
# Settings
data_dir_label = QtWidgets.QLabel(
@@ -76,7 +88,7 @@ class ReceiveMode(Mode):
self.common,
QtGui.QPixmap.fromImage(
QtGui.QImage(
- self.common.get_resource_path("images/receive_icon_transparent.png")
+ GuiCommon.get_resource_path("images/receive_icon_transparent.png")
)
),
strings._("gui_receive_mode_no_files"),
@@ -89,14 +101,16 @@ class ReceiveMode(Mode):
self.common,
self,
self.history,
+ QtGui.QIcon(GuiCommon.get_resource_path("images/receive_icon_toggle.png")),
QtGui.QIcon(
- self.common.get_resource_path("images/receive_icon_toggle.png")
- ),
- QtGui.QIcon(
- self.common.get_resource_path("images/receive_icon_toggle_selected.png")
+ GuiCommon.get_resource_path("images/receive_icon_toggle_selected.png")
),
)
+ # Header
+ header_label = QtWidgets.QLabel(strings._("gui_new_tab_receive_button"))
+ header_label.setStyleSheet(self.common.gui.css["mode_header_label"])
+
# Receive mode warning
receive_warning = QtWidgets.QLabel(strings._("gui_receive_mode_warning"))
receive_warning.setMinimumHeight(80)
@@ -109,20 +123,29 @@ class ReceiveMode(Mode):
# Main layout
self.main_layout = QtWidgets.QVBoxLayout()
- self.main_layout.addLayout(top_bar_layout)
+ self.main_layout.addWidget(header_label)
self.main_layout.addWidget(receive_warning)
self.main_layout.addWidget(self.primary_action)
- self.main_layout.addStretch()
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumWidthWidget(525))
+
+ # Row layout
+ content_row = QtWidgets.QHBoxLayout()
+ content_row.addLayout(self.main_layout)
+ 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.addWidget(self.server_status)
+ row_layout.addStretch()
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
- self.column_layout.addLayout(self.main_layout)
+ self.column_layout.addLayout(row_layout)
self.column_layout.addWidget(self.history, stretch=1)
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
index a81f83d4..ccf85dbd 100644
--- a/onionshare_gui/tab/mode/share_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,19 +17,21 @@ 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 os
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.onion import *
-from onionshare.common import Common
-from onionshare.web import Web
+from onionshare_cli.onion import *
+from onionshare_cli.common import Common
+from onionshare_cli.web import Web
-from ..file_selection import FileSelection
from .threads import CompressThread
from .. import Mode
+from ..file_selection import FileSelection
from ..history import History, ToggleHistory, ShareHistoryItem
+from .... import strings
from ....widgets import Alert, MinimumWidthWidget
+from ....gui_common import GuiCommon
class ShareMode(Mode):
@@ -47,9 +49,6 @@ class ShareMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "share")
- # Header
- self.header_label.setText(strings._("gui_new_tab_share_button"))
-
# Settings
self.autostop_sharing_checkbox = QtWidgets.QCheckBox()
self.autostop_sharing_checkbox.clicked.connect(
@@ -68,7 +67,12 @@ class ShareMode(Mode):
)
# File selection
- self.file_selection = FileSelection(self.common, self)
+ self.file_selection = FileSelection(
+ self.common,
+ "images/mode_share.png",
+ strings._("gui_new_tab_share_button"),
+ self,
+ )
if self.filenames:
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
@@ -99,7 +103,7 @@ class ShareMode(Mode):
self.common,
QtGui.QPixmap.fromImage(
QtGui.QImage(
- self.common.get_resource_path("images/share_icon_transparent.png")
+ GuiCommon.get_resource_path("images/share_icon_transparent.png")
)
),
strings._("gui_share_mode_no_files"),
@@ -127,9 +131,9 @@ class ShareMode(Mode):
self.common,
self,
self.history,
- QtGui.QIcon(self.common.get_resource_path("images/share_icon_toggle.png")),
+ QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")),
QtGui.QIcon(
- self.common.get_resource_path("images/share_icon_toggle_selected.png")
+ GuiCommon.get_resource_path("images/share_icon_toggle_selected.png")
),
)
@@ -153,6 +157,7 @@ class ShareMode(Mode):
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.server_status)
self.main_layout.addWidget(MinimumWidthWidget(700))
# Column layout
@@ -162,7 +167,6 @@ class ShareMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
@@ -423,7 +427,7 @@ class ShareMode(Mode):
class ZipProgressBar(QtWidgets.QProgressBar):
- update_processed_size_signal = QtCore.pyqtSignal(int)
+ update_processed_size_signal = QtCore.Signal(int)
def __init__(self, common, total_files_size):
super(ZipProgressBar, self).__init__()
diff --git a/onionshare_gui/tab/mode/share_mode/threads.py b/desktop/src/onionshare/tab/mode/share_mode/threads.py
index 414c7be1..860c2d26 100644
--- a/onionshare_gui/tab/mode/share_mode/threads.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/threads.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,7 +17,8 @@ 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/>.
"""
-from PyQt5 import QtCore
+
+from PySide2 import QtCore
class CompressThread(QtCore.QThread):
@@ -25,8 +26,8 @@ class CompressThread(QtCore.QThread):
Compresses files to be shared
"""
- success = QtCore.pyqtSignal()
- error = QtCore.pyqtSignal(str)
+ success = QtCore.Signal()
+ error = QtCore.Signal(str)
def __init__(self, mode):
super(CompressThread, self).__init__()
diff --git a/onionshare_gui/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
index 6199812c..325b22f1 100644
--- a/onionshare_gui/tab/mode/website_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,21 +17,23 @@ 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 os
import random
import string
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.onion import *
-from onionshare.common import Common
-from onionshare.web import Web
+from onionshare_cli.onion import *
+from onionshare_cli.common import Common
+from onionshare_cli.web import Web
-from ..file_selection import FileSelection
from .. import Mode
+from ..file_selection import FileSelection
from ..history import History, ToggleHistory
+from .... import strings
from ....widgets import Alert, MinimumWidthWidget
+from ....gui_common import GuiCommon
class WebsiteMode(Mode):
@@ -39,8 +41,8 @@ class WebsiteMode(Mode):
Parts of the main window UI for sharing files.
"""
- success = QtCore.pyqtSignal()
- error = QtCore.pyqtSignal(str)
+ success = QtCore.Signal()
+ error = QtCore.Signal(str)
def init(self):
"""
@@ -49,9 +51,6 @@ class WebsiteMode(Mode):
# Create the Web object
self.web = Web(self.common, True, self.settings, "website")
- # Header
- self.header_label.setText(strings._("gui_new_tab_website_button"))
-
# Settings
self.disable_csp_checkbox = QtWidgets.QCheckBox()
self.disable_csp_checkbox.clicked.connect(self.disable_csp_checkbox_clicked)
@@ -68,7 +67,12 @@ class WebsiteMode(Mode):
)
# File selection
- self.file_selection = FileSelection(self.common, self)
+ self.file_selection = FileSelection(
+ self.common,
+ "images/mode_website.png",
+ strings._("gui_new_tab_website_button"),
+ self,
+ )
if self.filenames:
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
@@ -99,7 +103,7 @@ class WebsiteMode(Mode):
self.common,
QtGui.QPixmap.fromImage(
QtGui.QImage(
- self.common.get_resource_path("images/share_icon_transparent.png")
+ GuiCommon.get_resource_path("images/share_icon_transparent.png")
)
),
strings._("gui_website_mode_no_files"),
@@ -130,9 +134,9 @@ class WebsiteMode(Mode):
self.common,
self,
self.history,
- QtGui.QIcon(self.common.get_resource_path("images/share_icon_toggle.png")),
+ QtGui.QIcon(GuiCommon.get_resource_path("images/share_icon_toggle.png")),
QtGui.QIcon(
- self.common.get_resource_path("images/share_icon_toggle_selected.png")
+ GuiCommon.get_resource_path("images/share_icon_toggle_selected.png")
),
)
@@ -153,6 +157,7 @@ class WebsiteMode(Mode):
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.server_status)
self.main_layout.addWidget(MinimumWidthWidget(700))
# Column layout
@@ -162,7 +167,6 @@ class WebsiteMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QVBoxLayout()
- self.wrapper_layout.addWidget(self.header_label)
self.wrapper_layout.addLayout(self.column_layout)
self.setLayout(self.wrapper_layout)
diff --git a/onionshare_gui/tab/server_status.py b/desktop/src/onionshare/tab/server_status.py
index 9bfbce78..29c72300 100644
--- a/onionshare_gui/tab/server_status.py
+++ b/desktop/src/onionshare/tab/server_status.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,15 +17,16 @@ 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 PyQt5 import QtCore, QtWidgets, QtGui
-from PyQt5.QtCore import Qt
-
-from onionshare import strings
+from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2.QtCore import Qt
+from .. import strings
from ..widgets import Alert
from ..widgets import QRCodeDialog
+from ..gui_common import GuiCommon
class ServerStatus(QtWidgets.QWidget):
@@ -33,13 +34,13 @@ class ServerStatus(QtWidgets.QWidget):
The server status chunk of the GUI.
"""
- server_started = QtCore.pyqtSignal()
- server_started_finished = QtCore.pyqtSignal()
- server_stopped = QtCore.pyqtSignal()
- server_canceled = QtCore.pyqtSignal()
- button_clicked = QtCore.pyqtSignal()
- url_copied = QtCore.pyqtSignal()
- hidservauth_copied = QtCore.pyqtSignal()
+ server_started = QtCore.Signal()
+ server_started_finished = QtCore.Signal()
+ server_stopped = QtCore.Signal()
+ server_canceled = QtCore.Signal()
+ button_clicked = QtCore.Signal()
+ url_copied = QtCore.Signal()
+ hidservauth_copied = QtCore.Signal()
STATUS_STOPPED = 0
STATUS_WORKING = 1
@@ -129,8 +130,12 @@ class ServerStatus(QtWidgets.QWidget):
url_layout.addLayout(url_buttons_layout)
# Add the widgets
+ button_layout = QtWidgets.QHBoxLayout()
+ button_layout.addWidget(self.server_button)
+ button_layout.addStretch()
+
layout = QtWidgets.QVBoxLayout()
- layout.addWidget(self.server_button)
+ layout.addLayout(button_layout)
layout.addLayout(url_layout)
self.setLayout(layout)
@@ -170,7 +175,7 @@ class ServerStatus(QtWidgets.QWidget):
"""
self.url_description.show()
- info_image = self.common.get_resource_path("images/info.png")
+ info_image = GuiCommon.get_resource_path("images/info.png")
if self.mode == self.common.gui.MODE_SHARE:
self.url_description.setText(
@@ -243,6 +248,7 @@ class ServerStatus(QtWidgets.QWidget):
self.url.hide()
self.copy_url_button.hide()
self.copy_hidservauth_button.hide()
+ self.show_url_qr_code_button.hide()
self.mode_settings_widget.update_ui()
@@ -269,6 +275,8 @@ class ServerStatus(QtWidgets.QWidget):
self.server_button.setText(strings._("gui_share_start_server"))
elif self.mode == self.common.gui.MODE_WEBSITE:
self.server_button.setText(strings._("gui_share_start_server"))
+ elif self.mode == self.common.gui.MODE_CHAT:
+ self.server_button.setText(strings._("gui_chat_start_server"))
else:
self.server_button.setText(strings._("gui_receive_start_server"))
self.server_button.setToolTip("")
@@ -281,6 +289,8 @@ class ServerStatus(QtWidgets.QWidget):
self.server_button.setText(strings._("gui_share_stop_server"))
elif self.mode == self.common.gui.MODE_WEBSITE:
self.server_button.setText(strings._("gui_share_stop_server"))
+ elif self.mode == self.common.gui.MODE_CHAT:
+ self.server_button.setText(strings._("gui_chat_stop_server"))
else:
self.server_button.setText(strings._("gui_receive_stop_server"))
elif self.status == self.STATUS_WORKING:
@@ -314,17 +324,17 @@ class ServerStatus(QtWidgets.QWidget):
if self.settings.get("general", "autostart_timer"):
if self.local_only:
self.autostart_timer_datetime = (
- self.mode_settings_widget.autostart_timer_widget.dateTime().toPyDateTime()
+ self.mode_settings_widget.autostart_timer_widget.dateTime().toPython()
)
else:
self.autostart_timer_datetime = (
self.mode_settings_widget.autostart_timer_widget.dateTime()
- .toPyDateTime()
+ .toPython()
.replace(second=0, microsecond=0)
)
# If the timer has actually passed already before the user hit Start, refuse to start the server.
if (
- QtCore.QDateTime.currentDateTime().toPyDateTime()
+ QtCore.QDateTime.currentDateTime().toPython()
> self.autostart_timer_datetime
):
can_start = False
@@ -336,18 +346,18 @@ class ServerStatus(QtWidgets.QWidget):
if self.settings.get("general", "autostop_timer"):
if self.local_only:
self.autostop_timer_datetime = (
- self.mode_settings_widget.autostop_timer_widget.dateTime().toPyDateTime()
+ self.mode_settings_widget.autostop_timer_widget.dateTime().toPython()
)
else:
# Get the timer chosen, stripped of its seconds. This prevents confusion if the share stops at (say) 37 seconds past the minute chosen
self.autostop_timer_datetime = (
self.mode_settings_widget.autostop_timer_widget.dateTime()
- .toPyDateTime()
+ .toPython()
.replace(second=0, microsecond=0)
)
# If the timer has actually passed already before the user hit Start, refuse to start the server.
if (
- QtCore.QDateTime.currentDateTime().toPyDateTime()
+ QtCore.QDateTime.currentDateTime().toPython()
> self.autostop_timer_datetime
):
can_start = False
diff --git a/onionshare_gui/tab/tab.py b/desktop/src/onionshare/tab/tab.py
index 5d1fde55..6a7624b9 100644
--- a/onionshare_gui/tab/tab.py
+++ b/desktop/src/onionshare/tab/tab.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,31 +17,72 @@ 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 queue
-from PyQt5 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.onionshare import OnionShare
-from onionshare.web import Web
-from onionshare.mode_settings import ModeSettings
+from onionshare_cli.onionshare import OnionShare
+from onionshare_cli.web import Web
+from onionshare_cli.mode_settings import ModeSettings
from .mode.share_mode import ShareMode
from .mode.receive_mode import ReceiveMode
from .mode.website_mode import WebsiteMode
+from .mode.chat_mode import ChatMode
from .server_status import ServerStatus
+from .. import strings
+from ..gui_common import GuiCommon
from ..widgets import Alert
+class NewTabButton(QtWidgets.QPushButton):
+ def __init__(self, common, image_filename, title, text):
+ super(NewTabButton, self).__init__()
+ self.common = common
+
+ self.setFixedSize(280, 280)
+
+ # Image
+ self.image_label = QtWidgets.QLabel(parent=self)
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path(image_filename))
+ )
+ )
+ self.image_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.image_label.setStyleSheet(self.common.gui.css["new_tab_button_image"])
+ self.image_label.setGeometry(0, 0, self.width(), 200)
+ self.image_label.show()
+
+ # Title
+ self.title_label = QtWidgets.QLabel(title, parent=self)
+ self.title_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.title_label.setStyleSheet(self.common.gui.css["new_tab_title_text"])
+ self.title_label.setGeometry(
+ (self.width() - 250) / 2, self.height() - 100, 250, 30
+ )
+ self.title_label.show()
+
+ # Text
+ self.text_label = QtWidgets.QLabel(text, parent=self)
+ self.text_label.setAlignment(QtCore.Qt.AlignCenter)
+ self.text_label.setStyleSheet(self.common.gui.css["new_tab_button_text"])
+ self.text_label.setGeometry(
+ (self.width() - 200) / 2, self.height() - 50, 200, 30
+ )
+ self.text_label.show()
+
+
class Tab(QtWidgets.QWidget):
"""
A GUI tab, you know, sort of like in a web browser
"""
- change_title = QtCore.pyqtSignal(int, str)
- change_icon = QtCore.pyqtSignal(int, str)
- change_persistent = QtCore.pyqtSignal(int, bool)
+ change_title = QtCore.Signal(int, str)
+ change_icon = QtCore.Signal(int, str)
+ change_persistent = QtCore.Signal(int, bool)
def __init__(
self,
@@ -66,56 +107,83 @@ class Tab(QtWidgets.QWidget):
# Start the OnionShare app
self.app = OnionShare(common, self.common.gui.onion, self.common.gui.local_only)
- # Widgets to display on a new tab
- self.share_button = QtWidgets.QPushButton(strings._("gui_new_tab_share_button"))
- self.share_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
- share_description = QtWidgets.QLabel(strings._("gui_new_tab_share_description"))
- share_description.setWordWrap(True)
+ # An invisible widget, used for hiding the persistent tab icon
+ self.invisible_widget = QtWidgets.QWidget()
+ self.invisible_widget.setFixedSize(0, 0)
+
+ # Onionshare logo
+ self.image_label = QtWidgets.QLabel()
+ self.image_label.setPixmap(
+ QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path("images/logo_text.png"))
+ )
+ )
+ self.image_label.setFixedSize(160, 40)
+ image_layout = QtWidgets.QVBoxLayout()
+ image_layout.addWidget(self.image_label)
+ image_layout.addStretch()
+ self.image = QtWidgets.QWidget()
+ self.image.setLayout(image_layout)
+
+ # New tab buttons
+ self.share_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_share.png",
+ strings._("gui_new_tab_share_button"),
+ strings._("gui_main_page_share_button"),
+ )
self.share_button.clicked.connect(self.share_mode_clicked)
- self.receive_button = QtWidgets.QPushButton(
- strings._("gui_new_tab_receive_button")
+ self.receive_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_receive.png",
+ strings._("gui_new_tab_receive_button"),
+ strings._("gui_main_page_receive_button"),
)
- self.receive_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
self.receive_button.clicked.connect(self.receive_mode_clicked)
- receive_description = QtWidgets.QLabel(
- strings._("gui_new_tab_receive_description")
- )
- receive_description.setWordWrap(True)
- self.website_button = QtWidgets.QPushButton(
- strings._("gui_new_tab_website_button")
+ self.website_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_website.png",
+ strings._("gui_new_tab_website_button"),
+ strings._("gui_main_page_website_button"),
)
- self.website_button.setStyleSheet(self.common.gui.css["mode_new_tab_button"])
self.website_button.clicked.connect(self.website_mode_clicked)
- website_description = QtWidgets.QLabel(
- strings._("gui_new_tab_website_description")
+
+ self.chat_button = NewTabButton(
+ self.common,
+ "images/mode_new_tab_chat.png",
+ strings._("gui_new_tab_chat_button"),
+ strings._("gui_main_page_chat_button"),
)
- website_description.setWordWrap(True)
+ self.chat_button.clicked.connect(self.chat_mode_clicked)
+
+ new_tab_top_layout = QtWidgets.QHBoxLayout()
+ new_tab_top_layout.addStretch()
+ new_tab_top_layout.addWidget(self.share_button)
+ new_tab_top_layout.addWidget(self.receive_button)
+ new_tab_top_layout.addStretch()
+
+ new_tab_bottom_layout = QtWidgets.QHBoxLayout()
+ new_tab_bottom_layout.addStretch()
+ new_tab_bottom_layout.addWidget(self.website_button)
+ new_tab_bottom_layout.addWidget(self.chat_button)
+ new_tab_bottom_layout.addStretch()
new_tab_layout = QtWidgets.QVBoxLayout()
- new_tab_layout.addStretch(1)
- new_tab_layout.addWidget(self.share_button)
- new_tab_layout.addWidget(share_description)
- new_tab_layout.addSpacing(50)
- new_tab_layout.addWidget(self.receive_button)
- new_tab_layout.addWidget(receive_description)
- new_tab_layout.addSpacing(50)
- new_tab_layout.addWidget(self.website_button)
- new_tab_layout.addWidget(website_description)
- new_tab_layout.addStretch(3)
-
- new_tab_inner = QtWidgets.QWidget()
- new_tab_inner.setFixedWidth(500)
- new_tab_inner.setLayout(new_tab_layout)
-
- new_tab_outer_layout = QtWidgets.QHBoxLayout()
- new_tab_outer_layout.addStretch()
- new_tab_outer_layout.addWidget(new_tab_inner)
- new_tab_outer_layout.addStretch()
+ new_tab_layout.addStretch()
+ new_tab_layout.addLayout(new_tab_top_layout)
+ new_tab_layout.addLayout(new_tab_bottom_layout)
+ new_tab_layout.addStretch()
+
+ new_tab_img_layout = QtWidgets.QHBoxLayout()
+ new_tab_img_layout.addWidget(self.image)
+ new_tab_img_layout.addStretch(1)
+ new_tab_img_layout.addLayout(new_tab_layout)
+ new_tab_img_layout.addStretch(2)
self.new_tab = QtWidgets.QWidget()
- self.new_tab.setLayout(new_tab_outer_layout)
+ self.new_tab.setLayout(new_tab_img_layout)
self.new_tab.show()
# Layout
@@ -133,7 +201,7 @@ class Tab(QtWidgets.QWidget):
self.persistent_image_label.setPixmap(
QtGui.QPixmap.fromImage(
QtGui.QImage(
- self.common.get_resource_path("images/persistent_enabled.png")
+ GuiCommon.get_resource_path("images/persistent_enabled.png")
)
)
)
@@ -199,7 +267,7 @@ class Tab(QtWidgets.QWidget):
self.share_mode.server_status.url_copied.connect(self.copy_url)
self.share_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth)
- self.change_title.emit(self.tab_id, strings._("gui_new_tab_share_button"))
+ self.change_title.emit(self.tab_id, strings._("gui_tab_name_share"))
self.update_server_status_indicator()
self.timer.start(500)
@@ -236,7 +304,7 @@ class Tab(QtWidgets.QWidget):
self.copy_hidservauth
)
- self.change_title.emit(self.tab_id, strings._("gui_new_tab_receive_button"))
+ self.change_title.emit(self.tab_id, strings._("gui_tab_name_receive"))
self.update_server_status_indicator()
self.timer.start(500)
@@ -273,7 +341,40 @@ class Tab(QtWidgets.QWidget):
self.copy_hidservauth
)
- self.change_title.emit(self.tab_id, strings._("gui_new_tab_website_button"))
+ self.change_title.emit(self.tab_id, strings._("gui_tab_name_website"))
+
+ self.update_server_status_indicator()
+ self.timer.start(500)
+
+ def chat_mode_clicked(self):
+ self.common.log("Tab", "chat_mode_clicked")
+ self.mode = self.common.gui.MODE_CHAT
+ self.new_tab.hide()
+
+ self.chat_mode = ChatMode(self)
+ self.chat_mode.change_persistent.connect(self.change_persistent)
+
+ self.layout.addWidget(self.chat_mode)
+ self.chat_mode.show()
+
+ self.chat_mode.init()
+ self.chat_mode.server_status.server_started.connect(
+ self.update_server_status_indicator
+ )
+ self.chat_mode.server_status.server_stopped.connect(
+ self.update_server_status_indicator
+ )
+ self.chat_mode.start_server_finished.connect(
+ self.update_server_status_indicator
+ )
+ self.chat_mode.stop_server_finished.connect(self.update_server_status_indicator)
+ self.chat_mode.stop_server_finished.connect(self.stop_server_finished)
+ self.chat_mode.start_server_finished.connect(self.clear_message)
+ self.chat_mode.server_status.button_clicked.connect(self.clear_message)
+ self.chat_mode.server_status.url_copied.connect(self.copy_url)
+ self.chat_mode.server_status.hidservauth_copied.connect(self.copy_hidservauth)
+
+ self.change_title.emit(self.tab_id, strings._("gui_tab_name_chat"))
self.update_server_status_indicator()
self.timer.start(500)
@@ -337,6 +438,25 @@ class Tab(QtWidgets.QWidget):
self.set_server_status_indicator_started(
strings._("gui_status_indicator_receive_started")
)
+ elif self.mode == self.common.gui.MODE_CHAT:
+ # Chat mode
+ if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED:
+ self.set_server_status_indicator_stopped(
+ strings._("gui_status_indicator_receive_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")
+ )
+ else:
+ self.set_server_status_indicator_working(
+ strings._("gui_status_indicator_receive_working")
+ )
+ elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED:
+ self.set_server_status_indicator_started(
+ strings._("gui_status_indicator_receive_started")
+ )
def set_server_status_indicator_stopped(self, label_text):
self.change_icon.emit(self.tab_id, "images/server_stopped.png")
@@ -486,6 +606,8 @@ class Tab(QtWidgets.QWidget):
return self.share_mode
elif self.mode == self.common.gui.MODE_RECEIVE:
return self.receive_mode
+ elif self.mode == self.common.gui.MODE_CHAT:
+ return self.chat_mode
else:
return self.website_mode
else:
diff --git a/onionshare_gui/tab_widget.py b/desktop/src/onionshare/tab_widget.py
index 1ef82cad..2e85febf 100644
--- a/onionshare_gui/tab_widget.py
+++ b/desktop/src/onionshare/tab_widget.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,13 +17,15 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.mode_settings import ModeSettings
+from PySide2 import QtCore, QtWidgets, QtGui
+from onionshare_cli.mode_settings import ModeSettings
+
+from . import strings
from .tab import Tab
from .threads import EventHandlerThread
+from .gui_common import GuiCommon
class TabWidget(QtWidgets.QTabWidget):
@@ -31,7 +33,7 @@ class TabWidget(QtWidgets.QTabWidget):
A custom tab widget, that has a "+" button for adding new tabs
"""
- bring_to_front = QtCore.pyqtSignal()
+ bring_to_front = QtCore.Signal()
def __init__(self, common, system_tray, status_bar):
super(TabWidget, self).__init__()
@@ -48,8 +50,7 @@ class TabWidget(QtWidgets.QTabWidget):
# Define the new tab button
self.new_tab_button = QtWidgets.QPushButton("+", parent=self)
self.new_tab_button.setFlat(True)
- self.new_tab_button.setAutoFillBackground(True)
- self.new_tab_button.setFixedSize(30, 30)
+ self.new_tab_button.setFixedSize(40, 30)
self.new_tab_button.clicked.connect(self.new_tab_clicked)
self.new_tab_button.setStyleSheet(
self.common.gui.css["tab_widget_new_tab_button"]
@@ -66,6 +67,8 @@ class TabWidget(QtWidgets.QTabWidget):
self.setMovable(True)
self.setTabsClosable(True)
self.setUsesScrollButtons(True)
+ self.setDocumentMode(True)
+ self.setStyleSheet(self.common.gui.css["tab_widget"])
self.tabCloseRequested.connect(self.close_tab)
@@ -99,7 +102,7 @@ class TabWidget(QtWidgets.QTabWidget):
# If there are so many tabs it scrolls, move the button to the left of the scroll buttons
if tabs_width > self.width():
- pos.setX(self.width() - 61)
+ pos.setX(self.width() - 65)
else:
# Otherwise move the button to the right of the tabs
pos.setX(self.tabBar().sizeHint().width())
@@ -141,6 +144,7 @@ class TabWidget(QtWidgets.QTabWidget):
self.add_tab(mode_settings)
def add_tab(self, mode_settings=None):
+ self.common.log("TabWidget", "add_tab", f"mode_settings: {mode_settings}")
tab = Tab(self.common, self.current_tab_id, self.system_tray, self.status_bar)
tab.change_title.connect(self.change_title)
tab.change_icon.connect(self.change_icon)
@@ -165,9 +169,14 @@ class TabWidget(QtWidgets.QTabWidget):
def change_icon(self, tab_id, icon_path):
index = self.indexOf(self.tabs[tab_id])
- self.setTabIcon(index, QtGui.QIcon(self.common.get_resource_path(icon_path)))
+ self.setTabIcon(index, QtGui.QIcon(GuiCommon.get_resource_path(icon_path)))
def change_persistent(self, tab_id, is_persistent):
+ self.common.log(
+ "TabWidget",
+ "change_persistent",
+ f"tab_id: {tab_id}, is_persistent: {is_persistent}",
+ )
index = self.indexOf(self.tabs[tab_id])
if is_persistent:
self.tabBar().setTabButton(
@@ -176,10 +185,8 @@ class TabWidget(QtWidgets.QTabWidget):
self.tabs[tab_id].persistent_image_label,
)
else:
- invisible_widget = QtWidgets.QWidget()
- invisible_widget.setFixedSize(0, 0)
self.tabBar().setTabButton(
- index, QtWidgets.QTabBar.LeftSide, invisible_widget
+ index, QtWidgets.QTabBar.LeftSide, self.tabs[tab_id].invisible_widget
)
self.save_persistent_tabs()
@@ -243,7 +250,7 @@ class TabBar(QtWidgets.QTabBar):
A custom tab bar
"""
- move_new_tab_button = QtCore.pyqtSignal()
+ move_new_tab_button = QtCore.Signal()
def __init__(self):
super(TabBar, self).__init__()
diff --git a/onionshare_gui/threads.py b/desktop/src/onionshare/threads.py
index 29554039..338bbf27 100644
--- a/onionshare_gui/threads.py
+++ b/desktop/src/onionshare/threads.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,13 +17,13 @@ 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 time
import json
import os
-from PyQt5 import QtCore
+from PySide2 import QtCore
-from onionshare import strings
-from onionshare.onion import (
+from onionshare_cli.onion import (
TorTooOld,
TorErrorInvalidSetting,
TorErrorAutomatic,
@@ -36,15 +36,17 @@ from onionshare.onion import (
BundledTorTimeout,
)
+from . import strings
+
class OnionThread(QtCore.QThread):
"""
Starts the onion service, and waits for it to finish
"""
- success = QtCore.pyqtSignal()
- success_early = QtCore.pyqtSignal()
- error = QtCore.pyqtSignal(str)
+ success = QtCore.Signal()
+ success_early = QtCore.Signal()
+ error = QtCore.Signal(str)
def __init__(self, mode):
super(OnionThread, self).__init__()
@@ -112,8 +114,8 @@ class WebThread(QtCore.QThread):
Starts the web service
"""
- success = QtCore.pyqtSignal()
- error = QtCore.pyqtSignal(str)
+ success = QtCore.Signal()
+ error = QtCore.Signal(str)
def __init__(self, mode):
super(WebThread, self).__init__()
@@ -131,8 +133,8 @@ class AutoStartTimer(QtCore.QThread):
Waits for a prescribed time before allowing a share to start
"""
- success = QtCore.pyqtSignal()
- error = QtCore.pyqtSignal(str)
+ success = QtCore.Signal()
+ error = QtCore.Signal(str)
def __init__(self, mode, canceled=False):
super(AutoStartTimer, self).__init__()
@@ -178,8 +180,8 @@ class EventHandlerThread(QtCore.QThread):
{"type": "new_share_tab", "filenames": ["file1", "file2"]}
"""
- new_tab = QtCore.pyqtSignal()
- new_share_tab = QtCore.pyqtSignal(list)
+ new_tab = QtCore.Signal()
+ new_share_tab = QtCore.Signal(list)
def __init__(self, common):
super(EventHandlerThread, self).__init__()
diff --git a/onionshare_gui/tor_connection_dialog.py b/desktop/src/onionshare/tor_connection_dialog.py
index 9c17e65c..d5fa72a0 100644
--- a/onionshare_gui/tor_connection_dialog.py
+++ b/desktop/src/onionshare/tor_connection_dialog.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,11 +17,13 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
-from onionshare.onion import *
+from PySide2 import QtCore, QtWidgets, QtGui
+from onionshare_cli.onion import *
+
+from . import strings
+from .gui_common import GuiCommon
from .widgets import Alert
@@ -30,7 +32,7 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
Connecting to Tor dialog.
"""
- open_settings = QtCore.pyqtSignal()
+ open_settings = QtCore.Signal()
def __init__(self, common, custom_settings=False):
super(TorConnectionDialog, self).__init__(None)
@@ -45,9 +47,7 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
self.common.log("TorConnectionDialog", "__init__")
self.setWindowTitle("OnionShare")
- self.setWindowIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
- )
+ self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
self.setModal(True)
self.setFixedSize(400, 150)
@@ -123,10 +123,10 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
class TorConnectionThread(QtCore.QThread):
- tor_status_update = QtCore.pyqtSignal(str, str)
- connected_to_tor = QtCore.pyqtSignal()
- canceled_connecting_to_tor = QtCore.pyqtSignal()
- error_connecting_to_tor = QtCore.pyqtSignal(str)
+ tor_status_update = QtCore.Signal(str, str)
+ connected_to_tor = QtCore.Signal()
+ canceled_connecting_to_tor = QtCore.Signal()
+ error_connecting_to_tor = QtCore.Signal(str)
def __init__(self, common, settings, dialog):
super(TorConnectionThread, self).__init__()
diff --git a/onionshare_gui/update_checker.py b/desktop/src/onionshare/update_checker.py
index 452bcb5b..be7a5e01 100644
--- a/onionshare_gui/update_checker.py
+++ b/desktop/src/onionshare/update_checker.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,15 +17,16 @@ 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/>.
"""
-from PyQt5 import QtCore
+
+from PySide2 import QtCore
import datetime, time, socket, re, platform
import socks
from distutils.version import LooseVersion as Version
-from onionshare.settings import Settings
-from onionshare.onion import Onion
+from onionshare_cli.settings import Settings
+from onionshare_cli.onion import Onion
-from onionshare import strings
+from . import strings
class UpdateCheckerCheckError(Exception):
@@ -56,10 +57,10 @@ class UpdateChecker(QtCore.QObject):
Only check at most once per day, unless force is True.
"""
- update_available = QtCore.pyqtSignal(str, str, str)
- update_not_available = QtCore.pyqtSignal()
- update_error = QtCore.pyqtSignal()
- update_invalid_version = QtCore.pyqtSignal(str)
+ update_available = QtCore.Signal(str, str, str)
+ update_not_available = QtCore.Signal()
+ update_error = QtCore.Signal()
+ update_invalid_version = QtCore.Signal(str)
def __init__(self, common, onion):
super(UpdateChecker, self).__init__()
@@ -182,10 +183,10 @@ class UpdateChecker(QtCore.QObject):
class UpdateThread(QtCore.QThread):
- update_available = QtCore.pyqtSignal(str, str, str)
- update_not_available = QtCore.pyqtSignal()
- update_error = QtCore.pyqtSignal()
- update_invalid_version = QtCore.pyqtSignal(str)
+ update_available = QtCore.Signal(str, str, str)
+ update_not_available = QtCore.Signal()
+ update_error = QtCore.Signal()
+ update_invalid_version = QtCore.Signal(str)
def __init__(self, common, onion, force=False):
super(UpdateThread, self).__init__()
diff --git a/onionshare_gui/widgets.py b/desktop/src/onionshare/widgets.py
index 58ddd1b5..6fffd77f 100644
--- a/onionshare_gui/widgets.py
+++ b/desktop/src/onionshare/widgets.py
@@ -2,7 +2,7 @@
"""
OnionShare | https://onionshare.org/
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -17,10 +17,14 @@ 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/>.
"""
-from PyQt5 import QtCore, QtWidgets, QtGui
-from onionshare import strings
+
+from PySide2 import QtCore, QtWidgets, QtGui
import qrcode
+from . import strings
+from .gui_common import GuiCommon
+
+
class Alert(QtWidgets.QMessageBox):
"""
An alert box dialog.
@@ -41,9 +45,7 @@ class Alert(QtWidgets.QMessageBox):
self.common.log("Alert", "__init__")
self.setWindowTitle("OnionShare")
- self.setWindowIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
- )
+ self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
self.setText(message)
self.setIcon(icon)
self.setStandardButtons(buttons)
@@ -102,8 +104,7 @@ class Image(qrcode.image.base.BaseImage):
self.width = width
self.box_size = box_size
size = (width + border * 2) * box_size
- self._image = QtGui.QImage(
- size, size, QtGui.QImage.Format_RGB16)
+ self._image = QtGui.QImage(size, size, QtGui.QImage.Format_RGB16)
self._image.fill(QtCore.Qt.white)
def pixmap(self):
@@ -114,8 +115,10 @@ class Image(qrcode.image.base.BaseImage):
painter.fillRect(
(col + self.border) * self.box_size,
(row + self.border) * self.box_size,
- self.box_size, self.box_size,
- QtCore.Qt.black)
+ self.box_size,
+ self.box_size,
+ QtCore.Qt.black,
+ )
def save(self, stream, kind=None):
pass
@@ -135,17 +138,14 @@ class QRCodeDialog(QtWidgets.QDialog):
self.common.log("QrCode", "__init__")
self.qr_label = QtWidgets.QLabel(self)
- self.qr_label.setPixmap(
- qrcode.make(self.text, image_factory=Image).pixmap())
+ self.qr_label.setPixmap(qrcode.make(self.text, image_factory=Image).pixmap())
self.qr_label_description = QtWidgets.QLabel(self)
self.qr_label_description.setText(strings._("gui_qr_code_description"))
self.qr_label_description.setWordWrap(True)
self.setWindowTitle(strings._("gui_qr_code_dialog_title"))
- self.setWindowIcon(
- QtGui.QIcon(self.common.get_resource_path("images/logo.png"))
- )
+ self.setWindowIcon(QtGui.QIcon(GuiCommon.get_resource_path("images/logo.png")))
layout = QtWidgets.QVBoxLayout(self)
layout.addWidget(self.qr_label)
layout.addWidget(self.qr_label_description)
diff --git a/desktop/src/setup.py b/desktop/src/setup.py
new file mode 100644
index 00000000..59b09b29
--- /dev/null
+++ b/desktop/src/setup.py
@@ -0,0 +1,80 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+OnionShare | https://onionshare.org/
+
+Copyright (C) 2014-2020 Micah Lee, et al. <micah@micahflee.com>
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+"""
+
+# This setup.py file is used for flatpak packaging. For other packaging,
+# OnionShare uses briefcase.
+
+import os
+import setuptools
+
+with open(
+ os.path.join(
+ os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "pyproject.toml"
+ )
+) as f:
+ for line in f.readlines():
+ if line.startswith("version = "):
+ version = line.split('"')[1]
+ break
+
+setuptools.setup(
+ name="onionshare",
+ version=version,
+ description="OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service.",
+ author="Micah Lee",
+ author_email="micah@micahflee.com",
+ maintainer="Micah Lee",
+ maintainer_email="micah@micahflee.com",
+ url="https://onionshare.org",
+ license="GPLv3",
+ keywords="onion, share, onionshare, tor, anonymous, web server",
+ classifiers=[
+ "Programming Language :: Python :: 3",
+ "Framework :: Flask",
+ "Topic :: Communications :: File Sharing",
+ "Topic :: Security :: Cryptography",
+ "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
+ "Intended Audience :: End Users/Desktop",
+ "Operating System :: OS Independent",
+ "Environment :: Web Environment",
+ ],
+ packages=[
+ "onionshare",
+ "onionshare.tab",
+ "onionshare.tab.mode",
+ "onionshare.tab.mode.share_mode",
+ "onionshare.tab.mode.receive_mode",
+ "onionshare.tab.mode.website_mode",
+ "onionshare.tab.mode.chat_mode",
+ ],
+ package_data={
+ "onionshare": [
+ "resources/*",
+ "resources/images/*",
+ "resources/locale/*",
+ ]
+ },
+ entry_points={
+ "console_scripts": [
+ "onionshare = onionshare:main",
+ ],
+ },
+)
diff --git a/desktop/tests/__init__.py b/desktop/tests/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/desktop/tests/__init__.py
diff --git a/desktop/tests/conftest.py b/desktop/tests/conftest.py
new file mode 100644
index 00000000..65d13fa6
--- /dev/null
+++ b/desktop/tests/conftest.py
@@ -0,0 +1,222 @@
+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, QtGui
+
+
+@staticmethod
+def qWait(t, qtapp):
+ end = datetime.now() + timedelta(milliseconds=t)
+ while datetime.now() < end:
+ qtapp.processEvents()
+
+
+# Monkeypatch qWait, because PySide2 doesn't have it
+# https://stackoverflow.com/questions/17960159/qwait-analogue-in-pyside
+QtTest.QTest.qWait = qWait
+
+# Allow importing onionshare_cli from the source tree
+sys.path.insert(
+ 0,
+ os.path.join(
+ os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),
+ "cli",
+ ),
+)
+
+from onionshare_cli import common, web, settings
+
+
+# The temporary directory for CLI tests
+test_temp_dir = None
+
+
+def pytest_addoption(parser):
+ parser.addoption(
+ "--runtor", action="store_true", default=False, help="run tor tests"
+ )
+
+
+def pytest_collection_modifyitems(config, items):
+ if not config.getoption("--runtor"):
+ # --runtor given in cli: do not skip tor tests
+ skip_tor = pytest.mark.skip(reason="need --runtor option to run")
+ for item in items:
+ if "tor" in item.keywords:
+ item.add_marker(skip_tor)
+
+
+@pytest.fixture
+def temp_dir():
+ """Creates a persistent temporary directory for the CLI tests to use"""
+ global test_temp_dir
+ if not test_temp_dir:
+ test_temp_dir = tempfile.mkdtemp()
+ return test_temp_dir
+
+
+@pytest.fixture
+def temp_dir_1024(temp_dir):
+ """ Create a temporary directory that has a single file of a
+ particular size (1024 bytes).
+ """
+
+ new_temp_dir = tempfile.mkdtemp(dir=temp_dir)
+ tmp_file, tmp_file_path = tempfile.mkstemp(dir=new_temp_dir)
+ with open(tmp_file, "wb") as f:
+ f.write(b"*" * 1024)
+ return new_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
+ particular size (1024 bytes). The temporary directory (including
+ the file inside) will be deleted after fixture usage.
+ """
+
+ with tempfile.TemporaryDirectory(dir=temp_dir) as new_temp_dir:
+ tmp_file, tmp_file_path = tempfile.mkstemp(dir=new_temp_dir)
+ with open(tmp_file, "wb") as f:
+ f.write(b"*" * 1024)
+ yield new_temp_dir
+
+
+@pytest.fixture
+def temp_file_1024(temp_dir):
+ """ Create a temporary file of a particular size (1024 bytes). """
+
+ with tempfile.NamedTemporaryFile(delete=False, dir=temp_dir) as tmp_file:
+ tmp_file.write(b"*" * 1024)
+ return tmp_file.name
+
+
+# pytest > 2.9 only needs @pytest.fixture
+@pytest.yield_fixture
+def temp_file_1024_delete(temp_dir):
+ """
+ Create a temporary file of a particular size (1024 bytes).
+ The temporary file will be deleted after fixture usage.
+ """
+
+ with tempfile.NamedTemporaryFile(dir=temp_dir, delete=False) as tmp_file:
+ tmp_file.write(b"*" * 1024)
+ tmp_file.flush()
+ tmp_file.close()
+ yield tmp_file.name
+
+
+# pytest > 2.9 only needs @pytest.fixture
+@pytest.yield_fixture(scope="session")
+def custom_zw():
+ zw = web.share_mode.ZipWriter(
+ common.Common(),
+ zip_filename=common.Common.random_string(4, 6),
+ processed_size_callback=lambda _: "custom_callback",
+ )
+ yield zw
+ zw.close()
+ os.remove(zw.zip_filename)
+
+
+# pytest > 2.9 only needs @pytest.fixture
+@pytest.yield_fixture(scope="session")
+def default_zw():
+ zw = web.share_mode.ZipWriter(common.Common())
+ yield zw
+ zw.close()
+ tmp_dir = os.path.dirname(zw.zip_filename)
+ try:
+ shutil.rmtree(tmp_dir, ignore_errors=True)
+ except:
+ pass
+
+
+@pytest.fixture
+def locale_en(monkeypatch):
+ monkeypatch.setattr("locale.getdefaultlocale", lambda: ("en_US", "UTF-8"))
+
+
+@pytest.fixture
+def locale_fr(monkeypatch):
+ monkeypatch.setattr("locale.getdefaultlocale", lambda: ("fr_FR", "UTF-8"))
+
+
+@pytest.fixture
+def locale_invalid(monkeypatch):
+ monkeypatch.setattr("locale.getdefaultlocale", lambda: ("xx_XX", "UTF-8"))
+
+
+@pytest.fixture
+def locale_ru(monkeypatch):
+ monkeypatch.setattr("locale.getdefaultlocale", lambda: ("ru_RU", "UTF-8"))
+
+
+@pytest.fixture
+def platform_darwin(monkeypatch):
+ monkeypatch.setattr("platform.system", lambda: "Darwin")
+
+
+@pytest.fixture # (scope="session")
+def platform_linux(monkeypatch):
+ monkeypatch.setattr("platform.system", lambda: "Linux")
+
+
+@pytest.fixture
+def platform_windows(monkeypatch):
+ monkeypatch.setattr("platform.system", lambda: "Windows")
+
+
+@pytest.fixture
+def sys_argv_sys_prefix(monkeypatch):
+ monkeypatch.setattr("sys.argv", [sys.prefix])
+
+
+@pytest.fixture
+def sys_frozen(monkeypatch):
+ monkeypatch.setattr("sys.frozen", True, raising=False)
+
+
+@pytest.fixture
+def sys_meipass(monkeypatch):
+ monkeypatch.setattr("sys._MEIPASS", os.path.expanduser("~"), raising=False)
+
+
+@pytest.fixture # (scope="session")
+def sys_onionshare_dev_mode(monkeypatch):
+ monkeypatch.setattr("sys.onionshare_dev_mode", True, raising=False)
+
+
+@pytest.fixture
+def time_time_100(monkeypatch):
+ monkeypatch.setattr("time.time", lambda: 100)
+
+
+@pytest.fixture
+def time_strftime(monkeypatch):
+ monkeypatch.setattr("time.strftime", lambda _: "Jun 06 2013 11:05:00")
+
+
+@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/tests/gui_base_test.py b/desktop/tests/gui_base_test.py
index fa503faa..214da945 100644
--- a/tests/gui_base_test.py
+++ b/desktop/tests/gui_base_test.py
@@ -8,19 +8,20 @@ import shutil
import base64
import tempfile
import secrets
+import platform
-from PyQt5 import QtCore, QtTest, QtWidgets
+from PySide2 import QtCore, QtTest, QtWidgets
-from onionshare import strings
-from onionshare.common import Common
-from onionshare.settings import Settings
-from onionshare.onion import Onion
-from onionshare.web import Web
+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_gui import Application, MainWindow, GuiCommon
-from onionshare_gui.tab.mode.share_mode import ShareMode
-from onionshare_gui.tab.mode.receive_mode import ReceiveMode
-from onionshare_gui.tab.mode.website_mode import WebsiteMode
+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 import strings
class GuiBaseTest(unittest.TestCase):
@@ -81,11 +82,12 @@ class GuiBaseTest(unittest.TestCase):
def verify_new_tab(self, tab):
# Make sure the new tab widget is showing, and no mode has been started
- QtTest.QTest.qWait(1000)
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
self.assertTrue(tab.new_tab.isVisible())
self.assertFalse(hasattr(tab, "share_mode"))
self.assertFalse(hasattr(tab, "receive_mode"))
self.assertFalse(hasattr(tab, "website_mode"))
+ self.assertFalse(hasattr(tab, "chat_mode"))
def new_share_tab(self):
tab = self.gui.tabs.widget(0)
@@ -194,7 +196,7 @@ class GuiBaseTest(unittest.TestCase):
"onionshare", tab.get_mode().web.password
),
)
- QtTest.QTest.qWait(2000)
+ QtTest.QTest.qWait(2000, self.gui.qtapp)
if type(tab.get_mode()) == ShareMode:
# Download files
@@ -208,7 +210,7 @@ class GuiBaseTest(unittest.TestCase):
"onionshare", tab.get_mode().web.password
),
)
- QtTest.QTest.qWait(2000)
+ QtTest.QTest.qWait(2000, self.gui.qtapp)
# Indicator should be visible, have a value of "1"
self.assertTrue(tab.get_mode().toggle_history.indicator_label.isVisible())
@@ -254,7 +256,7 @@ class GuiBaseTest(unittest.TestCase):
def server_is_started(self, tab, startup_time=2000):
"""Test that the server has started"""
- QtTest.QTest.qWait(startup_time)
+ QtTest.QTest.qWait(startup_time, self.gui.qtapp)
# Should now be in SERVER_STARTED state
self.assertEqual(tab.get_mode().server_status.status, 2)
@@ -275,9 +277,17 @@ class GuiBaseTest(unittest.TestCase):
def add_button_visible(self, tab):
"""Test that the add button should be visible"""
- self.assertTrue(
- tab.get_mode().server_status.file_selection.add_button.isVisible()
- )
+ if platform.system() == "Darwin":
+ self.assertTrue(
+ tab.get_mode().server_status.file_selection.add_files_button.isVisible()
+ )
+ self.assertTrue(
+ tab.get_mode().server_status.file_selection.add_folder_button.isVisible()
+ )
+ else:
+ self.assertTrue(
+ tab.get_mode().server_status.file_selection.add_button.isVisible()
+ )
def url_description_shown(self, tab):
"""Test that the URL label is showing"""
@@ -299,7 +309,10 @@ class GuiBaseTest(unittest.TestCase):
def have_show_qr_code_button(self, tab):
"""Test that the Show QR Code URL button is shown and that it loads a QR Code Dialog"""
- self.assertTrue(tab.get_mode().server_status.show_url_qr_code_button.isVisible())
+ self.assertTrue(
+ tab.get_mode().server_status.show_url_qr_code_button.isVisible()
+ )
+
def accept_dialog():
window = tab.common.gui.qtapp.activeWindow()
if window:
@@ -358,10 +371,19 @@ class GuiBaseTest(unittest.TestCase):
):
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
+ self.assertFalse(
+ tab.get_mode().server_status.show_url_qr_code_button.isVisible()
+ )
+ self.assertFalse(tab.get_mode().server_status.copy_url_button.isVisible())
+ self.assertFalse(tab.get_mode().server_status.url.isVisible())
+ self.assertFalse(tab.get_mode().server_status.url_description.isVisible())
+ self.assertFalse(
+ tab.get_mode().server_status.copy_hidservauth_button.isVisible()
+ )
def web_server_is_stopped(self, tab):
"""Test that the web server also stopped"""
- QtTest.QTest.qWait(800)
+ QtTest.QTest.qWait(800, self.gui.qtapp)
try:
requests.get(f"http://127.0.0.1:{tab.app.port}/")
@@ -401,9 +423,17 @@ class GuiBaseTest(unittest.TestCase):
def add_remove_buttons_hidden(self, tab):
"""Test that the add and remove buttons are hidden when the server starts"""
- self.assertFalse(
- tab.get_mode().server_status.file_selection.add_button.isVisible()
- )
+ if platform.system() == "Darwin":
+ self.assertFalse(
+ tab.get_mode().server_status.file_selection.add_files_button.isVisible()
+ )
+ self.assertFalse(
+ tab.get_mode().server_status.file_selection.add_folder_button.isVisible()
+ )
+ else:
+ self.assertFalse(
+ tab.get_mode().server_status.file_selection.add_button.isVisible()
+ )
self.assertFalse(
tab.get_mode().server_status.file_selection.remove_button.isVisible()
)
@@ -425,7 +455,7 @@ class GuiBaseTest(unittest.TestCase):
def server_timed_out(self, tab, wait):
"""Test that the server has timed out after the timer ran out"""
- QtTest.QTest.qWait(wait)
+ QtTest.QTest.qWait(wait, self.gui.qtapp)
# We should have timed out now
self.assertEqual(tab.get_mode().server_status.status, 0)
diff --git a/desktop/tests/run.bat b/desktop/tests/run.bat
new file mode 100644
index 00000000..20dfe160
--- /dev/null
+++ b/desktop/tests/run.bat
@@ -0,0 +1,4 @@
+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
diff --git a/desktop/tests/run.sh b/desktop/tests/run.sh
new file mode 100755
index 00000000..4a01dfb8
--- /dev/null
+++ b/desktop/tests/run.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+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
diff --git a/tests/test_gui_receive.py b/desktop/tests/test_gui_receive.py
index bd9cf491..848b2f11 100644
--- a/tests/test_gui_receive.py
+++ b/desktop/tests/test_gui_receive.py
@@ -2,9 +2,10 @@ import pytest
import os
import requests
import shutil
+import sys
from datetime import datetime, timedelta
-from PyQt5 import QtCore, QtTest
+from PySide2 import QtCore, QtTest
from .gui_base_test import GuiBaseTest
@@ -18,7 +19,7 @@ class TestReceive(GuiBaseTest):
"""Test that we can upload the file"""
# Wait 2 seconds to make sure the filename, based on timestamp, isn't accidentally reused
- QtTest.QTest.qWait(2000)
+ QtTest.QTest.qWait(2000, self.gui.qtapp)
files = {"file[]": open(file_to_upload, "rb")}
url = f"http://127.0.0.1:{tab.app.port}/upload"
@@ -45,7 +46,7 @@ class TestReceive(GuiBaseTest):
),
)
- QtTest.QTest.qWait(1000)
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
# Make sure the file is within the last 10 seconds worth of fileames
exists = False
@@ -69,7 +70,7 @@ class TestReceive(GuiBaseTest):
def upload_file_should_fail(self, tab):
"""Test that we can't upload the file when permissions are wrong, and expected content is shown"""
- QtTest.QTest.qWait(1000)
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
files = {"file[]": open(self.tmpfile_test, "rb")}
url = f"http://127.0.0.1:{tab.app.port}/upload"
@@ -170,7 +171,6 @@ class TestReceive(GuiBaseTest):
# Tests
- @pytest.mark.gui
def test_clear_all_button(self):
"""
Clear all history items should work
@@ -182,7 +182,6 @@ class TestReceive(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_autostop_timer(self):
"""
Test autostop timer
@@ -200,7 +199,6 @@ class TestReceive(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_upload(self):
"""
Test uploading files
@@ -212,7 +210,7 @@ class TestReceive(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
+ @pytest.mark.skipif(sys.platform == "win32", reason="Windows doesn't have chmod")
def test_upload_non_writable_dir(self):
"""
Test uploading files to a non-writable directory
@@ -223,7 +221,6 @@ class TestReceive(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_public_upload(self):
"""
Test uploading files in public mode
@@ -236,7 +233,7 @@ class TestReceive(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
+ @pytest.mark.skipif(sys.platform == "win32", reason="Windows doesn't have chmod")
def test_public_upload_non_writable_dir(self):
"""
Test uploading files to a non-writable directory in public mode
diff --git a/tests/test_gui_share.py b/desktop/tests/test_gui_share.py
index 846a5034..0e521d52 100644
--- a/tests/test_gui_share.py
+++ b/desktop/tests/test_gui_share.py
@@ -4,7 +4,7 @@ import requests
import tempfile
import zipfile
-from PyQt5 import QtCore, QtTest
+from PySide2 import QtCore, QtTest
from .gui_base_test import GuiBaseTest
@@ -83,15 +83,15 @@ class TestShare(GuiBaseTest):
),
)
- tmp_file = tempfile.NamedTemporaryFile()
- with open(tmp_file.name, "wb") as f:
- f.write(r.content)
+ tmp_file = tempfile.NamedTemporaryFile("wb", delete=False)
+ tmp_file.write(r.content)
+ tmp_file.close()
- zip = zipfile.ZipFile(tmp_file.name)
- QtTest.QTest.qWait(50)
- self.assertEqual("onionshare", zip.read("test.txt").decode("utf-8"))
+ z = zipfile.ZipFile(tmp_file.name)
+ QtTest.QTest.qWait(5, self.gui.qtapp)
+ self.assertEqual("onionshare", z.read("test.txt").decode("utf-8"))
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
def individual_file_is_viewable_or_not(self, tab):
"""
@@ -135,14 +135,15 @@ class TestShare(GuiBaseTest):
),
)
- tmp_file = tempfile.NamedTemporaryFile()
- with open(tmp_file.name, "wb") as f:
- f.write(r.content)
+ tmp_file = tempfile.NamedTemporaryFile("wb", delete=False)
+ tmp_file.write(r.content)
+ tmp_file.close()
with open(tmp_file.name, "r") as f:
self.assertEqual("onionshare", f.read())
+ os.remove(tmp_file.name)
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
def hit_401(self, tab):
"""Test that the server stops after too many 401s, or doesn't when in public mode"""
@@ -189,7 +190,7 @@ class TestShare(GuiBaseTest):
def scheduled_service_started(self, tab, wait):
"""Test that the server has timed out after the timer ran out"""
- QtTest.QTest.qWait(wait)
+ QtTest.QTest.qWait(wait, self.gui.qtapp)
# We should have started now
self.assertEqual(tab.get_mode().server_status.status, 2)
@@ -200,14 +201,19 @@ class TestShare(GuiBaseTest):
self.add_remove_buttons_hidden(tab)
self.mode_settings_widget_is_hidden(tab)
self.set_autostart_timer(tab, 10)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
QtTest.QTest.mousePress(
tab.get_mode().server_status.server_button, QtCore.Qt.LeftButton
)
- QtTest.QTest.qWait(100)
+ QtTest.QTest.qWait(100, self.gui.qtapp)
QtTest.QTest.mouseRelease(
tab.get_mode().server_status.server_button, QtCore.Qt.LeftButton
)
- self.assertEqual(tab.get_mode().server_status.status, 0)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ self.assertEqual(
+ tab.get_mode().server_status.status,
+ tab.get_mode().server_status.STATUS_STOPPED,
+ )
self.server_is_stopped(tab)
self.web_server_is_stopped(tab)
@@ -301,7 +307,6 @@ class TestShare(GuiBaseTest):
# Tests
- @pytest.mark.gui
def test_autostart_and_autostop_timer_mismatch(self):
"""
If autostart timer is after autostop timer, a warning should be thrown
@@ -326,7 +331,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_autostart_timer(self):
"""
Autostart timer should automatically start
@@ -348,7 +352,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_autostart_timer_too_short(self):
"""
Autostart timer should throw a warning if the scheduled time is too soon
@@ -366,14 +369,13 @@ class TestShare(GuiBaseTest):
self.run_all_share_mode_setup_tests(tab)
# Set a low timeout
self.set_autostart_timer(tab, 2)
- QtTest.QTest.qWait(2200)
+ QtTest.QTest.qWait(2200, self.gui.qtapp)
QtCore.QTimer.singleShot(200, accept_dialog)
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
self.close_all_tabs()
- @pytest.mark.gui
def test_autostart_timer_cancel(self):
"""
Test canceling a scheduled share
@@ -388,7 +390,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_clear_all_history_button(self):
"""
Test clearing all history items
@@ -401,7 +402,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_remove_all_file_selection_button(self):
"""
Test remove all file items at once
@@ -413,7 +413,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_public_mode(self):
"""
Public mode shouldn't have a password
@@ -426,7 +425,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_without_autostop_sharing(self):
"""
Disable autostop sharing after first download
@@ -439,7 +437,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_download(self):
"""
Test downloading in share mode
@@ -451,7 +448,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_individual_files_without_autostop_sharing(self):
"""
Test downloading individual files with autostop sharing disabled
@@ -464,7 +460,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_individual_files(self):
"""
Test downloading individual files
@@ -476,7 +471,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_large_download(self):
"""
Test a large download
@@ -497,7 +491,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_persistent_password(self):
"""
Test a large download
@@ -516,7 +509,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_autostop_timer(self):
"""
Test the autostop timer
@@ -535,7 +527,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_autostop_timer_too_short(self):
"""
Test the autostop timer when the timeout is too short
@@ -553,14 +544,13 @@ class TestShare(GuiBaseTest):
self.run_all_share_mode_setup_tests(tab)
# Set a low timeout
self.set_timeout(tab, 2)
- QtTest.QTest.qWait(2100)
+ QtTest.QTest.qWait(2100, self.gui.qtapp)
QtCore.QTimer.singleShot(2200, accept_dialog)
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
self.close_all_tabs()
- @pytest.mark.gui
def test_unreadable_file(self):
"""
Sharing an unreadable file should throw a warning
@@ -581,7 +571,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_401_triggers_ratelimit(self):
"""
Rate limit should be triggered
@@ -601,7 +590,6 @@ class TestShare(GuiBaseTest):
self.close_all_tabs()
- @pytest.mark.gui
def test_401_public_skips_ratelimit(self):
"""
Public mode should skip the rate limit
diff --git a/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
index eda30f79..4ebbdffb 100644
--- a/tests/test_gui_tabs.py
+++ b/desktop/tests/test_gui_tabs.py
@@ -1,7 +1,7 @@
import pytest
import os
-from PyQt5 import QtCore, QtTest, QtWidgets
+from PySide2 import QtCore, QtTest, QtWidgets
from .gui_base_test import GuiBaseTest
@@ -20,7 +20,7 @@ class TestTabs(GuiBaseTest):
tab.get_mode().server_status.status,
tab.get_mode().server_status.STATUS_WORKING,
)
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
self.assertEqual(
tab.get_mode().server_status.status,
tab.get_mode().server_status.STATUS_STARTED,
@@ -51,7 +51,7 @@ class TestTabs(GuiBaseTest):
# Click the persistent checkbox
tab.get_mode().server_status.mode_settings_widget.persistent_checkbox.click()
- QtTest.QTest.qWait(100)
+ QtTest.QTest.qWait(100, self.gui.qtapp)
# There should be a persistent settings file now
self.assertTrue(os.path.exists(tab.settings.filename))
@@ -83,18 +83,15 @@ class TestTabs(GuiBaseTest):
# Tests
- @pytest.mark.gui
def test_01_common_tests(self):
"""Run all common tests"""
self.run_all_common_setup_tests()
- @pytest.mark.gui
def test_02_starts_with_one_new_tab(self):
"""There should be one "New Tab" tab open"""
self.assertEqual(self.gui.tabs.count(), 1)
self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
- @pytest.mark.gui
def test_03_new_tab_button_opens_new_tabs(self):
"""Clicking the "+" button should open new tabs"""
self.assertEqual(self.gui.tabs.count(), 1)
@@ -103,7 +100,6 @@ class TestTabs(GuiBaseTest):
self.gui.tabs.new_tab_button.click()
self.assertEqual(self.gui.tabs.count(), 4)
- @pytest.mark.gui
def test_04_close_tab_button_closes_tabs(self):
"""Clicking the "x" button should close tabs"""
self.assertEqual(self.gui.tabs.count(), 4)
@@ -112,7 +108,6 @@ class TestTabs(GuiBaseTest):
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.assertEqual(self.gui.tabs.count(), 1)
- @pytest.mark.gui
def test_05_closing_last_tab_opens_new_one(self):
"""Closing the last tab should open a new tab"""
self.assertEqual(self.gui.tabs.count(), 1)
@@ -129,7 +124,6 @@ class TestTabs(GuiBaseTest):
self.assertEqual(self.gui.tabs.count(), 1)
self.assertTrue(self.gui.tabs.widget(0).new_tab.isVisible())
- @pytest.mark.gui
def test_06_new_tab_mode_buttons_show_correct_modes(self):
"""Clicking the mode buttons in a new tab should change the mode of the tab"""
@@ -138,21 +132,27 @@ class TestTabs(GuiBaseTest):
self.gui.tabs.widget(1).share_button.click()
self.assertFalse(self.gui.tabs.widget(1).new_tab.isVisible())
self.assertTrue(self.gui.tabs.widget(1).share_mode.isVisible())
- self.assertEqual(self.gui.status_bar.server_status_label.text(), 'Ready to share')
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to share"
+ )
# New tab, receive files
self.gui.tabs.new_tab_button.click()
self.gui.tabs.widget(2).receive_button.click()
self.assertFalse(self.gui.tabs.widget(2).new_tab.isVisible())
self.assertTrue(self.gui.tabs.widget(2).receive_mode.isVisible())
- self.assertEqual(self.gui.status_bar.server_status_label.text(), 'Ready to receive')
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to receive"
+ )
# New tab, publish website
self.gui.tabs.new_tab_button.click()
self.gui.tabs.widget(3).website_button.click()
self.assertFalse(self.gui.tabs.widget(3).new_tab.isVisible())
self.assertTrue(self.gui.tabs.widget(3).website_mode.isVisible())
- self.assertEqual(self.gui.status_bar.server_status_label.text(), 'Ready to share')
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to share"
+ )
# Close tabs
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
@@ -160,43 +160,36 @@ class TestTabs(GuiBaseTest):
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
- @pytest.mark.gui
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"""
tab = self.new_share_tab_with_files()
self.close_tab_with_active_server(tab)
- @pytest.mark.gui
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"""
tab = self.new_receive_tab()
self.close_tab_with_active_server(tab)
- @pytest.mark.gui
def test_09_close_website_tab_while_server_started_should_warn(self):
"""Closing a website mode tab when the server is running should throw a warning"""
tab = self.new_website_tab_with_files()
self.close_tab_with_active_server(tab)
- @pytest.mark.gui
def test_10_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)
- @pytest.mark.gui
def test_11_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)
- @pytest.mark.gui
def test_12_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)
- @pytest.mark.gui
def test_13_quit_with_server_started_should_warn(self):
"""Quitting OnionShare with any active servers should show a warning"""
tab = self.new_share_tab()
@@ -211,7 +204,7 @@ class TestTabs(GuiBaseTest):
tab.get_mode().server_status.status,
tab.get_mode().server_status.STATUS_WORKING,
)
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
self.assertEqual(
tab.get_mode().server_status.status,
tab.get_mode().server_status.STATUS_STARTED,
diff --git a/tests/test_gui_website.py b/desktop/tests/test_gui_website.py
index 80c74dea..164aa07d 100644
--- a/tests/test_gui_website.py
+++ b/desktop/tests/test_gui_website.py
@@ -4,7 +4,7 @@ import requests
import shutil
from datetime import datetime, timedelta
-from PyQt5 import QtCore, QtTest
+from PySide2 import QtCore, QtTest
from .gui_base_test import GuiBaseTest
@@ -25,7 +25,7 @@ class TestWebsite(GuiBaseTest):
),
)
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
self.assertTrue("This is a test website hosted by OnionShare" in r.text)
def check_csp_header(self, tab):
@@ -41,7 +41,7 @@ class TestWebsite(GuiBaseTest):
),
)
- QtTest.QTest.qWait(500)
+ QtTest.QTest.qWait(500, self.gui.qtapp)
if tab.settings.get("website", "disable_csp"):
self.assertFalse("Content-Security-Policy" in r.headers)
else:
@@ -87,7 +87,6 @@ class TestWebsite(GuiBaseTest):
# Tests
- @pytest.mark.gui
def test_website(self):
"""
Test website mode
@@ -96,7 +95,6 @@ class TestWebsite(GuiBaseTest):
self.run_all_website_mode_download_tests(tab)
self.close_all_tabs()
- @pytest.mark.gui
def test_csp_enabled(self):
"""
Test disabling CSP
diff --git a/dev_scripts/onionshare-gui b/dev_scripts/onionshare-gui
deleted file mode 100755
index 40ab742c..00000000
--- a/dev_scripts/onionshare-gui
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
-# Load onionshare module and resources from the source code tree
-import os, sys
-sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
-sys.onionshare_dev_mode = True
-
-import onionshare_gui
-onionshare_gui.main()
diff --git a/docs/Makefile b/docs/Makefile
new file mode 100644
index 00000000..d0c3cbf1
--- /dev/null
+++ b/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 00000000..fe026802
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,38 @@
+# OnionShare Documentation
+
+All these commands must be run from the `docs` folder.
+
+You must have the python dependencies installed to build the docs:
+
+```sh
+poetry install
+```
+
+To build HTML docs:
+
+```sh
+poetry run make html
+```
+
+Then open `docs/build/html/index.html` in a browser to see it.
+
+To update all of the translations and build all the html, run:
+
+```sh
+poetry run ./build.sh
+```
+
+You will end up with the documentation in all supported locales in `docs/localized_html`.
+
+Here's how preparing translations works:
+
+```sh
+# Generate .po files in build/gettext
+make gettext
+
+# Create a new blank German locale in source/locale, based on .po files
+sphinx-intl update -p build/gettext -l de
+
+# Build German translated document
+make -e SPHINXOPTS="-D language='de'" html
+```
diff --git a/docs/build.sh b/docs/build.sh
new file mode 100755
index 00000000..f120fab7
--- /dev/null
+++ b/docs/build.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+
+VERSION=`cat ../share/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"
+
+# Generate English .po files
+make gettext
+rm -rf gettext > /dev/null
+cp -r build/gettext gettext
+
+# Update all .po files for all locales
+for LOCALE in $LOCALES; do
+ sphinx-intl update -p build/gettext -l $LOCALE
+done
+
+# Build all locales
+rm -rf build/html build/docs > /dev/null
+mkdir -p build/docs/$VERSION
+
+make html
+mv build/html build/docs/$VERSION/en
+
+for LOCALE in $LOCALES; do
+ make -e SPHINXOPTS="-D language='$LOCALE'" html
+ mv build/html build/docs/$VERSION/$LOCALE
+done
+
+# Redirect to English by default
+echo '<html><head><meta http-equiv="refresh" content="0; url=en/" /><script>document.location="en/"</script></head></html>' > build/docs/$VERSION/index.html
+
+# Redirect to latest version
+echo '<html><head><meta http-equiv="refresh" content="0; url='$VERSION'/en/" /><script>document.location="'$VERSION'/en/"</script></head></html>' > build/docs/index.html
diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree
new file mode 100644
index 00000000..3a21850b
--- /dev/null
+++ b/docs/gettext/.doctrees/advanced.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree
new file mode 100644
index 00000000..9985cf37
--- /dev/null
+++ b/docs/gettext/.doctrees/develop.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle
new file mode 100644
index 00000000..d7ebd020
--- /dev/null
+++ b/docs/gettext/.doctrees/environment.pickle
Binary files differ
diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree
new file mode 100644
index 00000000..ec327d02
--- /dev/null
+++ b/docs/gettext/.doctrees/features.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree
new file mode 100644
index 00000000..7fe3c6d9
--- /dev/null
+++ b/docs/gettext/.doctrees/help.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree
new file mode 100644
index 00000000..c716ae3f
--- /dev/null
+++ b/docs/gettext/.doctrees/index.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree
new file mode 100644
index 00000000..43677bc4
--- /dev/null
+++ b/docs/gettext/.doctrees/install.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree
new file mode 100644
index 00000000..62107b01
--- /dev/null
+++ b/docs/gettext/.doctrees/security.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree
new file mode 100644
index 00000000..737471c7
--- /dev/null
+++ b/docs/gettext/.doctrees/tor.doctree
Binary files differ
diff --git a/docs/gettext/advanced.pot b/docs/gettext/advanced.pot
new file mode 100644
index 00000000..15b92627
--- /dev/null
+++ b/docs/gettext/advanced.pot
@@ -0,0 +1,153 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid "By default, everything in OnionShare is temporary. As soon as you close an OnionShare tab its address no longer exists and can't be used again. But sometimes you might want an OnionShare service to be persistent. For example, this would be useful if you want to host a website that can keep the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid "To make any tab persistent, check the \"Save this tab, and automatically open it when I open OnionShare\" box before starting the server. When a tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid "When you quit OnionShare and then open it again, your saved tabs will start out open. You'll have to manually start each service, but when you do they will start with the same OnionShare address, and with the same password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid "If you save a tab, a copy of that tab's onion service secret key will be stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid "By default, all OnionShare services are protected with the username `onionshare` and a randomly-generated password. If someone makes 20 wrong guesses of the password, your onion service is automatically stopped to prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid "But sometimes you might want your OnionShare service to be accessible to the public. For example, if you want to set up an OnionShare receive service so the public can securely and anonymously send you files. In this case, it's better to disable the password altogether. If you don't do this, someone can force your server to stop just by making 20 wrong guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid "To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid "OnionShare supports scheduling exactly when a service should start and stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid "If you scheduled a service to start in the future, when you click the start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid "In addition to its graphical interface, OnionShare has a command line interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid "If you installed OnionShare using the Flatpak package, unfortunately the command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid "If you installed OnionShare using an operating system package, you can just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid "If you really want to use it anyway, you can set up a Windows development environment (see :ref:`starting_development`) and then run this in a command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid "OnionShare uses v3 Tor onion services by default. These are modern onion addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid "But it still has support for v2 onion addresses, the old type of onion addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid "OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid "To use legacy addresses, before starting a server click \"Show advanced settings\" in its tab and check the \"Use a legacy address (v2 onion service, not recommended)\" box. In legacy mode you can optionally enable 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:148
+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 soon be removed from OnionShare as well."
+msgstr ""
diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot
new file mode 100644
index 00000000..cd1bfc11
--- /dev/null
+++ b/docs/gettext/develop.pot
@@ -0,0 +1,177 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid "OnionShare has an open Keybase team that we use to discuss the project, including asking questions, sharing ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, you need to download the `Keybase app <https://keybase.io/download>`_, make an account, and `join this team <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid "OnionShare also has a `mailing list <https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid "OnionShare source code is in this git repository: https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid "When you're ready to contribute code, open a pull request in the GitHub repository and one of the project maintainers will review it and possible ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid "OnionShare is developed in Python. To get started, you should clone the git repository at https://github.com/micahflee/onionshare/ and then consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid "This can be useful when learning the chain of events that occur when using the application or the value of certain variables before and after they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid "In this case, you load the URL ``http://onionshare:eject-snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid "If you want to obtain debug output from the ``onionshare-gui.exe`` in Windows, you will need to edit ``install\\pyinstaller.spec`` and change ``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid "Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to comment out the ``signtool`` commands in the ``build_exe.bat`` and the ``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid "After this, you can run ``onionshare-gui.exe -v`` from a command prompt to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid "Most of the OnionShare is translatable. You can help make it easier to use and more familiar and welcoming for people around the globe. The Localization Lab has some `documentation about translating OnionShare <https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid "OnionShare uses Weblate to keep track of translations. You can view the OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid "To help translate, make a Hosted Weblate account and start contributing to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid "Sometimes the original English strings could be improved, making them easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid "If you have suggestions for a better English string, please open a GitHub issue rather than commenting in Weblate. This ensures the upstream developers will definitely see the suggestion, and can potentially modify the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid "Here is the current translation status. If you want start a translation in a language not to be found here, please write us to the mailing list: onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid "Duplicate the line that begins with ``Comment=``. Add the language code to the new line so it becomes ``Comment[lang]=`` (lang should be your language). You can see what language codes are used for translation by looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
diff --git a/docs/gettext/features.pot b/docs/gettext/features.pot
new file mode 100644
index 00000000..4fef3fe5
--- /dev/null
+++ b/docs/gettext/features.pot
@@ -0,0 +1,226 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid "OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid "You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid "The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid "With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid "Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid "You can use OnionShare to securely and anonymously send files and folders to people. Just open a share tab, drag in the files and folders you wish to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27
+#: ../../source/features.rst:91
+msgid "After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid "By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the \"Stop sharing after files have been sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid "Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid "When you're ready to share, click the \"Start sharing\" button. You can always click \"Stop sharing\", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid "Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid "That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files directly from your computer by clicking the \"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid "This will start the OnionShare service. Anyone that loads this address in Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid "You can also click the down arrow icon in the top-right corner to show the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in your home folder on your computer, and they get automatically organized into separate subfolders based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid "Setting up an OnionShare receiving service is useful for journalists and others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid "Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid "If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid "If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid "You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid "If you add an ``index.html`` file, when someone loads your website it will render this page. 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:89
+msgid "If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid "By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the \"Disable Content Security Policy header (allows your website to use third-party resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid "If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that you can resume the website with the same address if you close OnionShare and re-open it later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid "If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid "You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. Just open a chat tab and click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid "After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid "If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid "OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid "Because OnionShare relies on Tor onion services, connections between 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:144
+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
new file mode 100644
index 00000000..0996bae3
--- /dev/null
+++ b/docs/gettext/help.pot
@@ -0,0 +1,57 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid "This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid "If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid "If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid "See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project."
+msgstr ""
diff --git a/docs/gettext/index.pot b/docs/gettext/index.pot
new file mode 100644
index 00000000..edd6e67d
--- /dev/null
+++ b/docs/gettext/index.pot
@@ -0,0 +1,25 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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/gettext/install.pot b/docs/gettext/install.pot
new file mode 100644
index 00000000..58bedab2
--- /dev/null
+++ b/docs/gettext/install.pot
@@ -0,0 +1,101 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\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 "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid "Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid "Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid "You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid "Windows, macOS, and source packaged 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:34
+msgid "In order to verify signatures, you must have GnuPG installed. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid "You can find the signatures (``.asc`` files), as well as Windows, macOS, 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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid "If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid "If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful."
+msgstr ""
diff --git a/docs/gettext/security.pot b/docs/gettext/security.pot
new file mode 100644
index 00000000..2bf3fb0a
--- /dev/null
+++ b/docs/gettext/security.pot
@@ -0,0 +1,61 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid "First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service 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, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses 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.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents."
+msgstr ""
diff --git a/docs/gettext/sphinx.pot b/docs/gettext/sphinx.pot
new file mode 100644
index 00000000..05bdc208
--- /dev/null
+++ b/docs/gettext/sphinx.pot
@@ -0,0 +1,25 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
diff --git a/docs/gettext/tor.pot b/docs/gettext/tor.pot
new file mode 100644
index 00000000..5f7adb04
--- /dev/null
+++ b/docs/gettext/tor.pot
@@ -0,0 +1,137 @@
+# 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.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"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 "There are several options for how OnionShare should connect to Tor. You can change them in Settings, which you can get to by clicking the gear icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid "This is the default way that OnionShare connects to Tor, and it's also the simplest and most reliable way. For this reason, it's recommended for most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid "When you open OnionShare, it will launch a Tor process in the background that's configured specifically for OnionShare to use. This Tor process won't interfere with other Tor processes on your computer, so you're free to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid "You can configure OnionShare to connect to the Tor that comes with Tor Browser. First, `download Tor Browser <https://www.torproject.org>`_ here if you don't already have it. With this setting selected, you need to keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid "This is fairly advanced. You'll need to know how edit plaintext files and do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid "Download the Tor Windows Expert Bundle, which you can get `from here <https://www.torproject.org/download/tor/>`_. Extract the zip file and copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename the folder to ``tor-win32``, so that inside that folder is the ``Data`` and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid "Make up a control port password. I'm going to use ``comprised stumble rummage work avenging construct volatile`` as my password. Now open a command prompt as an administrator, and use ``tor.exe --hash-password`` to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid "The hashed password output is displayed after some warnings (which you can ignore). In my case, it was ``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid "Now create a new text file at ``C:\\Program Files (x86)\\tor-win32\\torrc`` and put this in it, replacing the ``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid "In your administrator command prompt, install tor as a service using the appropriate ``torrc`` file you just created (see `here <https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid "Open OnionShare. Click the Settings icon. Under \"How should OnionShare connect to Tor?\" choose \"Connect using control port\", and set the control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor authentication options\" choose \"Password\" and set the password to your password, in my case ``comprised stumble rummage work avenging construct volatile``. Click the \"Test Settings\" button. If all goes well, you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid "First, install `Homebrew <http://brew.sh/>`_ if you don't already have it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid "Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie authentication\". Click the \"Test Settings\" button. If all goes well, you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid "First, install the tor package. If you're using Debian, Ubuntu, or a similar Linux distro, I recommend you use Tor Project's `official repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid "Add your user to the ``debian-tor`` group by running this command (replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid "Reboot your computer. After it boots up again, open OnionShare. Click the Settings icon. Under \"How should OnionShare connect to Tor?\" choose \"Connect using socket file\", and set the socket file to be ``/var/run/tor/control``. Under \"Tor authentication options\" choose \"No authentication, or cookie authentication\". Click the \"Test Settings\" button. If all goes well, you should see successfully connect to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
diff --git a/docs/make.bat b/docs/make.bat
new file mode 100644
index 00000000..6247f7e2
--- /dev/null
+++ b/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.http://sphinx-doc.org/
+ exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/docs/poetry.lock b/docs/poetry.lock
new file mode 100644
index 00000000..2593b9d4
--- /dev/null
+++ b/docs/poetry.lock
@@ -0,0 +1,464 @@
+[[package]]
+category = "main"
+description = "A configurable sidebar-enabled Sphinx theme"
+name = "alabaster"
+optional = false
+python-versions = "*"
+version = "0.7.12"
+
+[[package]]
+category = "main"
+description = "Internationalization utilities"
+name = "babel"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "2.8.0"
+
+[package.dependencies]
+pytz = ">=2015.7"
+
+[[package]]
+category = "main"
+description = "Python package for providing Mozilla's CA Bundle."
+name = "certifi"
+optional = false
+python-versions = "*"
+version = "2020.6.20"
+
+[[package]]
+category = "main"
+description = "Universal encoding detector for Python 2 and 3"
+name = "chardet"
+optional = false
+python-versions = "*"
+version = "3.0.4"
+
+[[package]]
+category = "main"
+description = "Composable command line interface toolkit"
+name = "click"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "7.1.2"
+
+[[package]]
+category = "main"
+description = "Cross-platform colored terminal text."
+marker = "sys_platform == \"win32\""
+name = "colorama"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "0.4.3"
+
+[[package]]
+category = "main"
+description = "Docutils -- Python Documentation Utilities"
+name = "docutils"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "0.16"
+
+[[package]]
+category = "main"
+description = "Internationalized Domain Names in Applications (IDNA)"
+name = "idna"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "2.10"
+
+[[package]]
+category = "main"
+description = "Getting image size from png/jpeg/jpeg2000/gif file"
+name = "imagesize"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "1.2.0"
+
+[[package]]
+category = "main"
+description = "A very fast and expressive template engine."
+name = "jinja2"
+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"
+
+[package.extras]
+i18n = ["Babel (>=0.8)"]
+
+[[package]]
+category = "main"
+description = "Safely add untrusted strings to HTML/XML markup."
+name = "markupsafe"
+optional = false
+python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*"
+version = "1.1.1"
+
+[[package]]
+category = "main"
+description = "Core utilities for Python packages"
+name = "packaging"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
+version = "20.4"
+
+[package.dependencies]
+pyparsing = ">=2.0.2"
+six = "*"
+
+[[package]]
+category = "main"
+description = "Pygments is a syntax highlighting package written in Python."
+name = "pygments"
+optional = false
+python-versions = ">=3.5"
+version = "2.7.1"
+
+[[package]]
+category = "main"
+description = "Python parsing module"
+name = "pyparsing"
+optional = false
+python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
+version = "2.4.7"
+
+[[package]]
+category = "main"
+description = "World timezone definitions, modern and historical"
+name = "pytz"
+optional = false
+python-versions = "*"
+version = "2020.1"
+
+[[package]]
+category = "main"
+description = "Python HTTP for Humans."
+name = "requests"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
+version = "2.24.0"
+
+[package.dependencies]
+certifi = ">=2017.4.17"
+chardet = ">=3.0.2,<4"
+idna = ">=2.5,<3"
+urllib3 = ">=1.21.1,<1.25.0 || >1.25.0,<1.25.1 || >1.25.1,<1.26"
+
+[package.extras]
+security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
+socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7)", "win-inet-pton"]
+
+[[package]]
+category = "main"
+description = "Python 2 and 3 compatibility utilities"
+name = "six"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
+version = "1.15.0"
+
+[[package]]
+category = "main"
+description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms."
+name = "snowballstemmer"
+optional = false
+python-versions = "*"
+version = "2.0.0"
+
+[[package]]
+category = "main"
+description = "Python documentation generator"
+name = "sphinx"
+optional = false
+python-versions = ">=3.5"
+version = "3.2.1"
+
+[package.dependencies]
+Jinja2 = ">=2.3"
+Pygments = ">=2.0"
+alabaster = ">=0.7,<0.8"
+babel = ">=1.3"
+colorama = ">=0.3.5"
+docutils = ">=0.12"
+imagesize = "*"
+packaging = "*"
+requests = ">=2.5.0"
+setuptools = "*"
+snowballstemmer = ">=1.1"
+sphinxcontrib-applehelp = "*"
+sphinxcontrib-devhelp = "*"
+sphinxcontrib-htmlhelp = "*"
+sphinxcontrib-jsmath = "*"
+sphinxcontrib-qthelp = "*"
+sphinxcontrib-serializinghtml = "*"
+
+[package.extras]
+docs = ["sphinxcontrib-websupport"]
+lint = ["flake8 (>=3.5.0)", "flake8-import-order", "mypy (>=0.780)", "docutils-stubs"]
+test = ["pytest", "pytest-cov", "html5lib", "typed-ast", "cython"]
+
+[[package]]
+category = "main"
+description = "Sphinx utility that make it easy to translate and to apply translation."
+name = "sphinx-intl"
+optional = false
+python-versions = ">=3.5"
+version = "2.0.1"
+
+[package.dependencies]
+babel = "*"
+click = "*"
+setuptools = "*"
+sphinx = "*"
+
+[package.extras]
+test = ["pytest", "mock"]
+transifex = ["transifex_client (>=0.11)"]
+
+[[package]]
+category = "main"
+description = "Read the Docs theme for Sphinx"
+name = "sphinx-rtd-theme"
+optional = false
+python-versions = "*"
+version = "0.5.0"
+
+[package.dependencies]
+sphinx = "*"
+
+[package.extras]
+dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version"]
+
+[[package]]
+category = "main"
+description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books"
+name = "sphinxcontrib-applehelp"
+optional = false
+python-versions = ">=3.5"
+version = "1.0.2"
+
+[package.extras]
+lint = ["flake8", "mypy", "docutils-stubs"]
+test = ["pytest"]
+
+[[package]]
+category = "main"
+description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document."
+name = "sphinxcontrib-devhelp"
+optional = false
+python-versions = ">=3.5"
+version = "1.0.2"
+
+[package.extras]
+lint = ["flake8", "mypy", "docutils-stubs"]
+test = ["pytest"]
+
+[[package]]
+category = "main"
+description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files"
+name = "sphinxcontrib-htmlhelp"
+optional = false
+python-versions = ">=3.5"
+version = "1.0.3"
+
+[package.extras]
+lint = ["flake8", "mypy", "docutils-stubs"]
+test = ["pytest", "html5lib"]
+
+[[package]]
+category = "main"
+description = "A sphinx extension which renders display math in HTML via JavaScript"
+name = "sphinxcontrib-jsmath"
+optional = false
+python-versions = ">=3.5"
+version = "1.0.1"
+
+[package.extras]
+test = ["pytest", "flake8", "mypy"]
+
+[[package]]
+category = "main"
+description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document."
+name = "sphinxcontrib-qthelp"
+optional = false
+python-versions = ">=3.5"
+version = "1.0.3"
+
+[package.extras]
+lint = ["flake8", "mypy", "docutils-stubs"]
+test = ["pytest"]
+
+[[package]]
+category = "main"
+description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)."
+name = "sphinxcontrib-serializinghtml"
+optional = false
+python-versions = ">=3.5"
+version = "1.1.4"
+
+[package.extras]
+lint = ["flake8", "mypy", "docutils-stubs"]
+test = ["pytest"]
+
+[[package]]
+category = "main"
+description = "HTTP library with thread-safe connection pooling, file post, and more."
+name = "urllib3"
+optional = false
+python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4"
+version = "1.25.10"
+
+[package.extras]
+brotli = ["brotlipy (>=0.6.0)"]
+secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "pyOpenSSL (>=0.14)", "ipaddress"]
+socks = ["PySocks (>=1.5.6,<1.5.7 || >1.5.7,<2.0)"]
+
+[metadata]
+content-hash = "7ebd064a3d4ab4b070421d125fc0104f9fe02661335c39e042b477f7b7a9ac9e"
+python-versions = "~3.6"
+
+[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"},
+]
+babel = [
+ {file = "Babel-2.8.0-py2.py3-none-any.whl", hash = "sha256:d670ea0b10f8b723672d3a6abeb87b565b244da220d76b4dba1b66269ec152d4"},
+ {file = "Babel-2.8.0.tar.gz", hash = "sha256:1aac2ae2d0d8ea368fa90906567f5c08463d98ade155c0c4bfedd6a0f7160e38"},
+]
+certifi = [
+ {file = "certifi-2020.6.20-py2.py3-none-any.whl", hash = "sha256:8fc0819f1f30ba15bdb34cceffb9ef04d99f420f68eb75d901e9560b8749fc41"},
+ {file = "certifi-2020.6.20.tar.gz", hash = "sha256:5930595817496dd21bb8dc35dad090f1c2cd0adfaf21204bf6732ca5d8ee34d3"},
+]
+chardet = [
+ {file = "chardet-3.0.4-py2.py3-none-any.whl", hash = "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"},
+ {file = "chardet-3.0.4.tar.gz", hash = "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae"},
+]
+click = [
+ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"},
+ {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"},
+]
+colorama = [
+ {file = "colorama-0.4.3-py2.py3-none-any.whl", hash = "sha256:7d73d2a99753107a36ac6b455ee49046802e59d9d076ef8e47b61499fa29afff"},
+ {file = "colorama-0.4.3.tar.gz", hash = "sha256:e96da0d330793e2cb9485e9ddfd918d456036c7149416295932478192f4436a1"},
+]
+docutils = [
+ {file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"},
+ {file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
+]
+idna = [
+ {file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
+ {file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
+]
+imagesize = [
+ {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
+ {file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
+]
+jinja2 = [
+ {file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
+ {file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"},
+]
+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"},
+]
+packaging = [
+ {file = "packaging-20.4-py2.py3-none-any.whl", hash = "sha256:998416ba6962ae7fbd6596850b80e17859a5753ba17c32284f67bfff33784181"},
+ {file = "packaging-20.4.tar.gz", hash = "sha256:4357f74f47b9c12db93624a82154e9b120fa8293699949152b22065d556079f8"},
+]
+pygments = [
+ {file = "Pygments-2.7.1-py3-none-any.whl", hash = "sha256:307543fe65c0947b126e83dd5a61bd8acbd84abec11f43caebaf5534cbc17998"},
+ {file = "Pygments-2.7.1.tar.gz", hash = "sha256:926c3f319eda178d1bd90851e4317e6d8cdb5e292a3386aac9bd75eca29cf9c7"},
+]
+pyparsing = [
+ {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"},
+ {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"},
+]
+pytz = [
+ {file = "pytz-2020.1-py2.py3-none-any.whl", hash = "sha256:a494d53b6d39c3c6e44c3bec237336e14305e4f29bbf800b599253057fbb79ed"},
+ {file = "pytz-2020.1.tar.gz", hash = "sha256:c35965d010ce31b23eeb663ed3cc8c906275d6be1a34393a1d73a41febf4a048"},
+]
+requests = [
+ {file = "requests-2.24.0-py2.py3-none-any.whl", hash = "sha256:fe75cc94a9443b9246fc7049224f75604b113c36acb93f87b80ed42c44cbb898"},
+ {file = "requests-2.24.0.tar.gz", hash = "sha256:b3559a131db72c33ee969480840fff4bb6dd111de7dd27c8ee1f820f4f00231b"},
+]
+six = [
+ {file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
+ {file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
+]
+snowballstemmer = [
+ {file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"},
+ {file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"},
+]
+sphinx = [
+ {file = "Sphinx-3.2.1-py3-none-any.whl", hash = "sha256:ce6fd7ff5b215af39e2fcd44d4a321f6694b4530b6f2b2109b64d120773faea0"},
+ {file = "Sphinx-3.2.1.tar.gz", hash = "sha256:321d6d9b16fa381a5306e5a0b76cd48ffbc588e6340059a729c6fdd66087e0e8"},
+]
+sphinx-intl = [
+ {file = "sphinx-intl-2.0.1.tar.gz", hash = "sha256:b25a6ec169347909e8d983eefe2d8adecb3edc2f27760db79b965c69950638b4"},
+ {file = "sphinx_intl-2.0.1-py3.8.egg", hash = "sha256:2ff97cba0e4e43249e339a3c29dd2f5b63c25ce794050aabca320ad95f5c5b55"},
+]
+sphinx-rtd-theme = [
+ {file = "sphinx_rtd_theme-0.5.0-py2.py3-none-any.whl", hash = "sha256:373413d0f82425aaa28fb288009bf0d0964711d347763af2f1b65cafcb028c82"},
+ {file = "sphinx_rtd_theme-0.5.0.tar.gz", hash = "sha256:22c795ba2832a169ca301cd0a083f7a434e09c538c70beb42782c073651b707d"},
+]
+sphinxcontrib-applehelp = [
+ {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"},
+ {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"},
+]
+sphinxcontrib-devhelp = [
+ {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"},
+ {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"},
+]
+sphinxcontrib-htmlhelp = [
+ {file = "sphinxcontrib-htmlhelp-1.0.3.tar.gz", hash = "sha256:e8f5bb7e31b2dbb25b9cc435c8ab7a79787ebf7f906155729338f3156d93659b"},
+ {file = "sphinxcontrib_htmlhelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:3c0bc24a2c41e340ac37c85ced6dafc879ab485c095b1d65d2461ac2f7cca86f"},
+]
+sphinxcontrib-jsmath = [
+ {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"},
+ {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"},
+]
+sphinxcontrib-qthelp = [
+ {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"},
+ {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"},
+]
+sphinxcontrib-serializinghtml = [
+ {file = "sphinxcontrib-serializinghtml-1.1.4.tar.gz", hash = "sha256:eaa0eccc86e982a9b939b2b82d12cc5d013385ba5eadcc7e4fed23f4405f77bc"},
+ {file = "sphinxcontrib_serializinghtml-1.1.4-py2.py3-none-any.whl", hash = "sha256:f242a81d423f59617a8e5cf16f5d4d74e28ee9a66f9e5b637a18082991db5a9a"},
+]
+urllib3 = [
+ {file = "urllib3-1.25.10-py2.py3-none-any.whl", hash = "sha256:e7983572181f5e1522d9c98453462384ee92a0be7fac5f1413a1e35c56cc0461"},
+ {file = "urllib3-1.25.10.tar.gz", hash = "sha256:91056c15fa70756691db97756772bb1eb9678fa585d9184f24534b100dc60f4a"},
+]
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
new file mode 100644
index 00000000..9cc7bcc2
--- /dev/null
+++ b/docs/pyproject.toml
@@ -0,0 +1,17 @@
+[tool.poetry]
+name = "onionshare-docs"
+version = "0.1.0"
+description = ""
+authors = ["Micah Lee <micah@micahflee.com>"]
+
+[tool.poetry.dependencies]
+python = "~3.6"
+sphinx = "^3.2.1"
+sphinx-rtd-theme = "^0.5.0"
+sphinx-intl = "^2.0.1"
+
+[tool.poetry.dev-dependencies]
+
+[build-system]
+requires = ["poetry>=0.12"]
+build-backend = "poetry.masonry.api"
diff --git a/docs/source/_static/apple-logo.png b/docs/source/_static/apple-logo.png
new file mode 100644
index 00000000..c2cadc12
--- /dev/null
+++ b/docs/source/_static/apple-logo.png
Binary files differ
diff --git a/docs/source/_static/custom.css b/docs/source/_static/custom.css
new file mode 100644
index 00000000..18f242b3
--- /dev/null
+++ b/docs/source/_static/custom.css
@@ -0,0 +1,21 @@
+.wy-nav-top {
+ background-color: #4e0d4e;
+}
+
+.wy-side-nav-search {
+ background-color: #5f0f5f;
+}
+
+.wy-nav-content a:link,
+.wy-nav-content a:visited {
+ color: #2980b9;
+}
+
+.wy-nav-content a:active,
+.wy-nav-content a:hover {
+ color: #3091d1;
+}
+
+.wy-nav-content div[role=navigation] {
+ display: none;
+} \ No newline at end of file
diff --git a/docs/source/_static/favicon.ico b/docs/source/_static/favicon.ico
new file mode 100644
index 00000000..63e65d8b
--- /dev/null
+++ b/docs/source/_static/favicon.ico
Binary files differ
diff --git a/docs/source/_static/linux-logo.png b/docs/source/_static/linux-logo.png
new file mode 100644
index 00000000..0cfca2e8
--- /dev/null
+++ b/docs/source/_static/linux-logo.png
Binary files differ
diff --git a/docs/source/_static/logo.png b/docs/source/_static/logo.png
new file mode 100644
index 00000000..1479eed0
--- /dev/null
+++ b/docs/source/_static/logo.png
Binary files differ
diff --git a/docs/source/_static/screenshots/advanced-save-tabs.png b/docs/source/_static/screenshots/advanced-save-tabs.png
new file mode 100644
index 00000000..18788167
--- /dev/null
+++ b/docs/source/_static/screenshots/advanced-save-tabs.png
Binary files differ
diff --git a/docs/source/_static/screenshots/advanced-schedule-start-timer.png b/docs/source/_static/screenshots/advanced-schedule-start-timer.png
new file mode 100644
index 00000000..e633fb37
--- /dev/null
+++ b/docs/source/_static/screenshots/advanced-schedule-start-timer.png
Binary files differ
diff --git a/docs/source/_static/screenshots/advanced-schedule-stop-timer.png b/docs/source/_static/screenshots/advanced-schedule-stop-timer.png
new file mode 100644
index 00000000..4938f00b
--- /dev/null
+++ b/docs/source/_static/screenshots/advanced-schedule-stop-timer.png
Binary files differ
diff --git a/docs/source/_static/screenshots/chat-sharing.png b/docs/source/_static/screenshots/chat-sharing.png
new file mode 100644
index 00000000..b4e8406f
--- /dev/null
+++ b/docs/source/_static/screenshots/chat-sharing.png
Binary files differ
diff --git a/docs/source/_static/screenshots/chat-torbrowser.png b/docs/source/_static/screenshots/chat-torbrowser.png
new file mode 100644
index 00000000..79e0fd5f
--- /dev/null
+++ b/docs/source/_static/screenshots/chat-torbrowser.png
Binary files differ
diff --git a/docs/source/_static/screenshots/chat.png b/docs/source/_static/screenshots/chat.png
new file mode 100644
index 00000000..aad601a1
--- /dev/null
+++ b/docs/source/_static/screenshots/chat.png
Binary files differ
diff --git a/docs/source/_static/screenshots/receive-sharing.png b/docs/source/_static/screenshots/receive-sharing.png
new file mode 100644
index 00000000..5ab44ecd
--- /dev/null
+++ 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
new file mode 100644
index 00000000..0ad381d5
--- /dev/null
+++ 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
new file mode 100644
index 00000000..799c7879
--- /dev/null
+++ b/docs/source/_static/screenshots/receive.png
Binary files differ
diff --git a/docs/source/_static/screenshots/settings.png b/docs/source/_static/screenshots/settings.png
new file mode 100644
index 00000000..6b705496
--- /dev/null
+++ b/docs/source/_static/screenshots/settings.png
Binary files differ
diff --git a/docs/source/_static/screenshots/share-files.png b/docs/source/_static/screenshots/share-files.png
new file mode 100644
index 00000000..d0d5f280
--- /dev/null
+++ b/docs/source/_static/screenshots/share-files.png
Binary files differ
diff --git a/docs/source/_static/screenshots/share-sharing.png b/docs/source/_static/screenshots/share-sharing.png
new file mode 100644
index 00000000..6f3f41ae
--- /dev/null
+++ b/docs/source/_static/screenshots/share-sharing.png
Binary files differ
diff --git a/docs/source/_static/screenshots/share-torbrowser.png b/docs/source/_static/screenshots/share-torbrowser.png
new file mode 100644
index 00000000..ac0f4983
--- /dev/null
+++ b/docs/source/_static/screenshots/share-torbrowser.png
Binary files differ
diff --git a/docs/source/_static/screenshots/share.png b/docs/source/_static/screenshots/share.png
new file mode 100644
index 00000000..f03c68ba
--- /dev/null
+++ b/docs/source/_static/screenshots/share.png
Binary files differ
diff --git a/docs/source/_static/screenshots/tabs.png b/docs/source/_static/screenshots/tabs.png
new file mode 100644
index 00000000..8b96ace2
--- /dev/null
+++ b/docs/source/_static/screenshots/tabs.png
Binary files differ
diff --git a/docs/source/_static/screenshots/website-files.png b/docs/source/_static/screenshots/website-files.png
new file mode 100644
index 00000000..4bd293b2
--- /dev/null
+++ b/docs/source/_static/screenshots/website-files.png
Binary files differ
diff --git a/docs/source/_static/screenshots/website.png b/docs/source/_static/screenshots/website.png
new file mode 100644
index 00000000..d745cf6a
--- /dev/null
+++ b/docs/source/_static/screenshots/website.png
Binary files differ
diff --git a/docs/source/_static/windows-logo.png b/docs/source/_static/windows-logo.png
new file mode 100644
index 00000000..c9389bac
--- /dev/null
+++ b/docs/source/_static/windows-logo.png
Binary files differ
diff --git a/docs/source/_templates/versions.html b/docs/source/_templates/versions.html
new file mode 100644
index 00000000..761e2add
--- /dev/null
+++ b/docs/source/_templates/versions.html
@@ -0,0 +1,25 @@
+<div class="rst-versions" data-toggle="rst-versions" role="note" aria-label="versions">
+ <span class="rst-current-version" data-toggle="rst-current-version">
+ <span class="fa fa-book">OnionShare</span>
+ v: {{ current_version }}
+ <span class="fa fa-caret-down"></span>
+ </span>
+ <div class="rst-other-versions">
+ {%- if versions %}
+ <dl>
+ <dt>{{ _('Versions') }}</dt>
+ {%- for name in versions %}
+ <dd><a href="../../{{ name }}">{{ name }}</a></dd>
+ {%- endfor %}
+ </dl>
+ {%- endif %}
+ {%- if langs %}
+ <dl>
+ <dt>{{ _('Languages') }}</dt>
+ {%- for name, code in langs %}
+ <dd><a href="../{{ code }}/">{{ name }}</a></dd>
+ {%- endfor %}
+ </dl>
+ {%- endif %}
+ </div>
+</div> \ No newline at end of file
diff --git a/docs/source/advanced.rst b/docs/source/advanced.rst
new file mode 100644
index 00000000..c4375bea
--- /dev/null
+++ b/docs/source/advanced.rst
@@ -0,0 +1,148 @@
+Advanced usage
+==============
+
+.. _save_tabs:
+
+Save tabs
+---------
+
+By default, everything in OnionShare is temporary. As soon as you close an OnionShare tab its address no longer exists and can't be used again. But sometimes you might want an OnionShare service to be persistent. For example, this would be useful if you want to host a website that can keep the same URL even if you reboot your computer.
+
+To make any tab persistent, check the "Save this tab, and automatically open it when I open OnionShare" box before starting the server. When a tab is saved a purple pin icon appears to the left of its server status.
+
+.. image:: _static/screenshots/advanced-save-tabs.png
+
+When you quit OnionShare and then open it again, your saved tabs will start out open. You'll have to manually start each service, but when you do they will start with the same OnionShare address, and with the same password.
+
+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.
+
+.. _disable_passwords:
+
+Disable passwords
+-----------------
+
+By default, all OnionShare services are protected with the username `onionshare` and a randomly-generated password. If someone makes 20 wrong guesses of the password, your onion service is automatically stopped to prevent a brute force attack against the OnionShare service.
+
+But sometimes you might want your OnionShare service to be accessible to the public. For example, if you want to set up an OnionShare receive service so the public can securely and anonymously send you files. In this case, it's better to disable the password altogether. If you don't do this, someone can force your server to stop just by making 20 wrong guesses of your password, even if they know the correct password.
+
+To disable 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.
+
+Scheduled times
+---------------
+
+OnionShare supports scheduling exactly when a service should start and stop. Before starting 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 desired dates and times.
+
+If you scheduled a service to start in the future, when you click the start button you will see a timer counting down until it will start. 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.
+
+**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.
+
+.. image:: _static/screenshots/advanced-schedule-start-timer.png
+
+**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.
+
+.. image:: _static/screenshots/advanced-schedule-stop-timer.png
+
+Command line interface
+----------------------
+
+In addition to its graphical interface, OnionShare has a command line interface.
+
+Linux
+^^^^^
+
+If you installed OnionShare using the Flatpak package, unfortunately the command line interface isn't supported.
+
+If you installed OnionShare using an operating system package, you can just run ``onionshare`` from the terminal.
+
+macOS
+^^^^^
+
+Make a symbolic link to the OnionShare command line binary like this::
+
+ ln -s /Applications/OnionShare.app/Contents/MacOS/onionshare /usr/local/bin
+
+Now you can run ``onionshare`` from the terminal.
+
+Windows
+^^^^^^^
+
+The command line interface isn't supported in Windows.
+
+If you really want to use it anyway, you can set up a Windows development environment (see :ref:`starting_development`) and then run this in a command prompt::
+
+ poetry run python dev_scripts\onionshare
+
+Usage
+^^^^^
+
+You can see command line documentation by running ``onionshare --help``::
+
+ $ onionshare --help
+ OnionShare 2.3 | https://onionshare.org/
+
+ @@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
+ @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
+ @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
+ @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
+ @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
+ @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
+ @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
+ @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
+ @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
+ @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
+ @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@
+
+ usage: onionshare [-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 ...]]
+
+ positional arguments:
+ filename List of files or folders to share
+
+ optional arguments:
+ -h, --help show this help message and exit
+ --receive Receive files
+ --website Publish website
+ --chat Start chat server
+ --local-only Don't use Tor (only for development)
+ --connect-timeout SECONDS
+ 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
+ --public Don't use a password
+ --auto-start-timer SECONDS
+ Start onion service at scheduled time (N seconds from now)
+ --auto-stop-timer SECONDS
+ 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
+ --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)
+ -v, --verbose Log OnionShare errors to stdout, and web errors to disk
+
+Legacy addresses
+----------------
+
+OnionShare uses v3 Tor onion services by default. These are modern onion addresses that have 56 characters, for example::
+
+ uf3wmtpbstcupvrrsetrtct7qcmnqvdcsxqzxthxbx2y7tidatxye7id.onion
+
+But it still has support for v2 onion addresses, the old type of onion addresses that have 16 characters, for example::
+
+ lc7j6u55vhrh45eq.onion
+
+OnionShare calls v2 onion addresses "legacy addresses". v3 onion addresses are more secure, and using legacy addresses is not recommended.
+
+To use legacy addresses, before starting a server click "Show advanced settings" in its tab and check the "Use a legacy address (v2 onion service, not recommended)" box. In legacy mode you can optionally enable 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.
+
+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 soon be removed from OnionShare as well.
diff --git a/docs/source/conf.py b/docs/source/conf.py
new file mode 100644
index 00000000..a8d0393e
--- /dev/null
+++ b/docs/source/conf.py
@@ -0,0 +1,34 @@
+import sphinx_rtd_theme
+import sphinx_intl
+
+
+project = "OnionShare"
+author = copyright = "Micah Lee, et al."
+version = release = "2.3"
+
+extensions = ["sphinx_rtd_theme"]
+templates_path = ["_templates"]
+exclude_patterns = []
+
+languages = [
+ ("Español", "es"),
+ ("English", "en"),
+ ("Українська", "uk"),
+]
+
+versions = ["2.3"]
+
+html_theme = "sphinx_rtd_theme"
+html_logo = "_static/logo.png"
+html_favicon = "_static/favicon.ico"
+html_theme_options = {}
+html_context = {"langs": languages, "versions": versions, "current_version": release}
+html_static_path = ["_static"]
+html_css_files = ["custom.css"]
+html_show_sourcelink = False
+html_show_sphinx = False
+
+# sphinx-intl
+language = "en"
+locale_dirs = ["locale/"]
+gettext_compact = False
diff --git a/docs/source/develop.rst b/docs/source/develop.rst
new file mode 100644
index 00000000..2c36f48b
--- /dev/null
+++ b/docs/source/develop.rst
@@ -0,0 +1,200 @@
+Developing OnionShare
+=====================
+
+.. _collaborating:
+
+Collaborating
+-------------
+
+OnionShare has an open Keybase team that we use to discuss the project, including asking questions, sharing ideas and designs, and making plans for future development. (It's also an easy way to send end-to-end encrypted direct messages to others in the OnionShare community, like OnionShare addresses.) To use Keybase, you need to download the `Keybase app <https://keybase.io/download>`_, make an account, and `join this team <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, click "Join a Team", and type "onionshare".
+
+OnionShare also has a `mailing list <https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers and and designers to discuss the project.
+
+Contributing code
+-----------------
+
+OnionShare source code is in this git repository: https://github.com/micahflee/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 that you'd like to develop.
+
+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 possible ask questions, request changes, reject it, or merge it into the project.
+
+.. _starting_development:
+
+Starting development
+--------------------
+
+OnionShare is developed in Python. To get started, you should clone the git repository at https://github.com/micahflee/onionshare/ and then consult the ``BUILD.md`` file.
+
+That file contains the technical instructions and commands necessary:
+
+* Install dependencies for your platform
+* Run OnionShare from the source tree, without building a package
+* Building packages
+* Making a release of OnionShare
+
+Debugging tips
+--------------
+
+Verbose mode
+^^^^^^^^^^^^
+
+When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::
+
+ $ poetry run ./dev_scripts/onionshare -v test.txt
+ OnionShare 2.3 | https://onionshare.org/
+
+ @@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
+ @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
+ @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
+ @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
+ @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
+ @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
+ @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
+ @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
+ @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
+ @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
+ @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@
+
+ [Aug 23 2020 22:37:06] Settings.__init__
+ [Aug 23 2020 22:37:06] Settings.load
+ [Aug 23 2020 22:37:06] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [Aug 23 2020 22:37:06] ModeSettings.load: creating /home/user/.config/onionshare/persistent/opacity-joining-sappiness.json
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: general.public = False
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: general.autostart_timer = 0
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: general.autostop_timer = 0
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: general.legacy = False
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: general.client_auth = False
+ [Aug 23 2020 22:37:06] ModeSettings.set: updating opacity-joining-sappiness: share.autostop_sharing = True
+ [Aug 23 2020 22:37:06] Web.__init__: is_gui=False, mode=share
+ [Aug 23 2020 22:37:06] Web.generate_static_url_path: new static_url_path is /static_4kanwd4mt5mcqmpsbptviv3tbq
+ [Aug 23 2020 22:37:06] ShareModeWeb.init
+ [Aug 23 2020 22:37:06] Onion.__init__
+ [Aug 23 2020 22:37:06] Onion.connect
+ [Aug 23 2020 22:37:06] Settings.__init__
+ [Aug 23 2020 22:37:06] Settings.load
+ [Aug 23 2020 22:37:06] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [Aug 23 2020 22:37:06] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpig895mfl
+ Connecting to the Tor network: 100% - Done
+ [Aug 23 2020 22:37:14] Onion.connect: Connected to tor 0.4.3.6
+ [Aug 23 2020 22:37:14] Settings.load
+ [Aug 23 2020 22:37:14] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [Aug 23 2020 22:37:14] Web.generate_password: saved_password=None
+ [Aug 23 2020 22:37:14] Web.generate_password: built random password: "barrel-unseated"
+ [Aug 23 2020 22:37:14] OnionShare.__init__
+ [Aug 23 2020 22:37:14] OnionShare.start_onion_service
+ [Aug 23 2020 22:37:14] Onion.start_onion_service: port=17605
+ [Aug 23 2020 22:37:14] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
+ [Aug 23 2020 22:37:16] ModeSettings.set: updating opacity-joining-sappiness: general.service_id = ttxidvsv4pqzrarvtlojk435vver6wgifrw4pucyzgj2hb3qu6pf6fqd
+ [Aug 23 2020 22:37:16] ModeSettings.set: updating opacity-joining-sappiness: onion.private_key = IGzO65Mi9grG7HlLD9ky82O/vWvu3WVByTqCLpZgV0iV2XaSDAqWazNHKkkP18/7jyZZyXwbLo4qOCiYLudlRA==
+ Compressing files.
+ [Aug 23 2020 22:37:16] ShareModeWeb.init
+ [Aug 23 2020 22:37:16] ShareModeWeb.set_file_info_custom
+ [Aug 23 2020 22:37:16] ShareModeWeb.build_zipfile_list
+ [Aug 23 2020 22:37:16] Web.start: port=17605
+ * Running on http://127.0.0.1:17605/ (Press CTRL+C to quit)
+
+ Give this address to the recipient:
+ http://onionshare:barrel-unseated@ttxidvsv4pqzrarvtlojk435vver6wgifrw4pucyzgj2hb3qu6pf6fqd.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')
+
+This can be useful when learning the chain of events that occur when using the application or the value of certain variables before and after they are manipulated.
+
+Local only
+^^^^^^^^^^
+
+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::
+
+ $ poetry run ./dev_scripts/onionshare --local-only --receive
+ OnionShare 2.3 | https://onionshare.org/
+
+ @@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
+ @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
+ @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
+ @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
+ @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
+ @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
+ @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
+ @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
+ @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
+ @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
+ @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@@@@@@@@@@@
+ @@@@@@@@@
+
+ * Running on http://127.0.0.1:17614/ (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:eject-snack@127.0.0.1:17614
+
+ Press Ctrl+C to stop the server
+
+In this case, you load the URL ``http://onionshare:eject-snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of using Tor Browser.
+
+Debugging in Windows
+^^^^^^^^^^^^^^^^^^^^
+
+If you want to obtain debug output from the ``onionshare-gui.exe`` in Windows, you will need to edit ``install\pyinstaller.spec`` and change ``console=False`` to ``console=True``.
+
+Then rebuild the EXE with ``install\build_exe.bat`` (you may need to comment out the ``signtool`` commands in the ``build_exe.bat`` and the ``onionshare.nsi`` files, as per the ``BUILD.md`` instructions).
+
+After this, you can run ``onionshare-gui.exe -v`` from a command prompt to see the debug output.
+
+Contributing translations
+-------------------------
+
+Most of the OnionShare is translatable. You can help make it easier to use and more familiar and welcoming for people around the globe. The Localization Lab has some `documentation about translating OnionShare <https://wiki.localizationlab.org/index.php/OnionShare>`_.
+
+OnionShare uses Weblate to keep track of translations. You can view the OnionShare project here: https://hosted.weblate.org/projects/onionshare/
+
+To help translate, make a Hosted Weblate account and start contributing to that project.
+
+Suggestions for original English strings
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Sometimes the original English strings could be improved, making them easier to translate into other languages.
+
+If you have suggestions for a better English string, please open a GitHub issue rather than commenting in Weblate. This ensures the upstream developers will definitely see the suggestion, and can potentially modify the string via the usual code review processes.
+
+Status of translations
+^^^^^^^^^^^^^^^^^^^^^^
+Here is the current translation status. If you want start a translation in a language not to be found here, please write us to the mailing list: onionshare-dev@lists.riseup.net
+
+.. image:: https://hosted.weblate.org/widgets/onionshare/-/translations/multi-auto.svg
+
+Translate the .desktop file
+^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+You can also translate the ``install/onionshare.desktop`` file.
+
+Duplicate the line that begins with ``Comment=``. Add the language code to the new line so it becomes ``Comment[lang]=`` (lang should be your language). You can see what language codes are used for translation by looking at the ``share/locale/*.json`` filenames::
+
+ Comment=Original string
+ Comment[da]=Danish translation of the original string
+
+Do the same for other untranslated lines. \ No newline at end of file
diff --git a/docs/source/features.rst b/docs/source/features.rst
new file mode 100644
index 00000000..07ff7d21
--- /dev/null
+++ b/docs/source/features.rst
@@ -0,0 +1,144 @@
+.. _how_it_works:
+
+How OnionShare works
+====================
+
+OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_.
+
+By default, OnionShare web addresses are protected with a random password. A typical OnionShare address might look something like this::
+
+ http://onionshare:constrict-purity@by4im3ir5nsvygprmjq74xwplrkdgt44qmeapxawwikxacmr3dqzyjad.onion
+
+You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_.
+
+The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service.
+
+With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time.
+
+Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information.
+
+Share Files
+-----------
+
+You can use OnionShare to securely and anonymously send files and folders to people. Just open a share tab, drag in the files and folders you wish to share, and click "Start sharing".
+
+.. image:: _static/screenshots/share.png
+
+After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing.
+
+.. image:: _static/screenshots/share-files.png
+
+By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the "Stop sharing after files have been sent (uncheck to allow downloading individual files)" box.
+
+Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of the files.
+
+When you're ready to share, click the "Start sharing" button. You can always click "Stop sharing", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you.
+
+.. image:: _static/screenshots/share-sharing.png
+
+Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app.
+
+That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files directly from your computer by clicking the "Download Files" link in the corner.
+
+.. image:: _static/screenshots/share-torbrowser.png
+
+Receive Files
+-------------
+
+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 files to get downloaded and other settings, and then click "Start Receive Mode".
+
+.. image:: _static/screenshots/receive.png
+
+This will start the OnionShare service. Anyone that loads this address in Tor Browser will be able to upload files to your computer.
+
+.. image:: _static/screenshots/receive-sharing.png
+
+You can also click the down arrow 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.
+
+.. 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 your home folder on your computer, and they get 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 that need 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.
+
+Use at your own risk
+^^^^^^^^^^^^^^^^^^^^
+
+Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk.
+
+If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM.
+
+Tips for running a receive service
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis.
+
+If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`).
+
+Host a Website
+--------------
+
+You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click "Start sharing".
+
+.. image:: _static/screenshots/website.png
+
+If you add an ``index.html`` file, when someone loads your website it will render this page. 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.)
+
+If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them.
+
+After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing.
+
+.. image:: _static/screenshots/website-files.png
+
+Content Security Policy
+^^^^^^^^^^^^^^^^^^^^^^^
+
+By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page.
+
+If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the "Disable Content Security Policy header (allows your website to use third-party resources)" box before starting the service.
+
+Tips for running a website service
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that you can resume the website with the same address if you close OnionShare and re-open it later.
+
+If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`).
+
+Chat Anonymously
+----------------
+
+You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. Just open a chat tab and click "Start chat server".
+
+.. image:: _static/screenshots/chat.png
+
+After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address.
+
+.. image:: _static/screenshots/chat-sharing.png
+
+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 set their security level to Standard or Safer instead of Safest.
+
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere.
+
+.. image:: _static/screenshots/chat-torbrowser.png
+
+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.
+
+However, if you create an OnionShare chat room and securely send the address only to a small group of trusted friends using encrypted messages, then you can be reasonably confident that the people who join the chat room are your friends.
+
+How is this useful?
+^^^^^^^^^^^^^^^^^^^
+
+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.
+
+If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem.
+
+OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity.
+
+How does the encryption work?
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+Because OnionShare relies on Tor onion services, connections between 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.
+
+OnionShare doesn't implement any chat encryption on its own. It relies on the Tor onion service's encryption instead. \ No newline at end of file
diff --git a/docs/source/help.rst b/docs/source/help.rst
new file mode 100644
index 00000000..3c138d6a
--- /dev/null
+++ b/docs/source/help.rst
@@ -0,0 +1,24 @@
+Getting Help
+============
+
+If you need help with OnionShare, please follow the instructions below.
+
+Read this website
+-----------------
+
+This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions.
+
+Check the GitHub issues
+-----------------------
+
+If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution.
+
+Submit an issue yourself
+------------------------
+
+If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_.
+
+Join our Keybase team
+---------------------
+
+See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project. \ No newline at end of file
diff --git a/docs/source/index.rst b/docs/source/index.rst
new file mode 100644
index 00000000..55d874e3
--- /dev/null
+++ b/docs/source/index.rst
@@ -0,0 +1,17 @@
+OnionShare's documentation
+==========================
+
+.. image:: _static/screenshots/tabs.png
+
+OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network.
+
+.. toctree::
+ :maxdepth: 2
+
+ install
+ features
+ advanced
+ tor
+ help
+ security
+ develop
diff --git a/docs/source/install.rst b/docs/source/install.rst
new file mode 100644
index 00000000..a8383e35
--- /dev/null
+++ b/docs/source/install.rst
@@ -0,0 +1,66 @@
+Installation
+============
+
+Install on Windows or macOS
+---------------------------
+
+You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_.
+
+For added security, see :ref:`verifying_sigs`.
+
+.. _linux:
+
+Install in Linux with Flatpak
+-----------------------------
+
+There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox.
+
+Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution.
+
+Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_.
+
+.. _verifying_sigs:
+
+Verifying PGP signatures
+------------------------
+
+You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like.
+
+Signing key
+^^^^^^^^^^^
+
+Windows, macOS, and source packaged 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>`_.
+
+In order to verify signatures, you must have GnuPG installed. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_.
+
+Signatures
+^^^^^^^^^^
+
+You can find the signatures (``.asc`` files), as well as Windows, macOS, 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>`_.
+
+Verifying
+^^^^^^^^^
+
+Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::
+
+ gpg --verify OnionShare-2.2.pkg.asc OnionShare-2.2.pkg
+
+Or for Windows in a command prompt like this::
+
+ gpg.exe --verify onionshare-2.2-setup.exe.asc onionshare-2.2-setup.exe
+
+An expected output might look like this::
+
+ gpg: Signature made Tue 19 Feb 2019 09:25:28 AM AEDT using RSA key ID CD994F73
+ gpg: Good signature from "Micah Lee <micah@micahflee.com>"
+ gpg: aka "Micah Lee <micah@firstlook.org>"
+ gpg: aka "Micah Lee <micah@freedom.press>"
+ gpg: aka "Micah Lee <micah.lee@firstlook.org>"
+ gpg: aka "Micah Lee <micah.lee@theintercept.com>"
+ gpg: WARNING: This key is not certified with a trusted signature!
+ gpg: There is no indication that the signature belongs to the owner.
+ Primary key fingerprint: 927F 419D 7EC8 2C2F 149C 1BD1 403C 2657 CD99 4F73
+
+If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)
+
+If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful. \ No newline at end of file
diff --git a/docs/source/locale/ar/LC_MESSAGES/advanced.po b/docs/source/locale/ar/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/develop.po b/docs/source/locale/ar/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/features.po b/docs/source/locale/ar/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ar/LC_MESSAGES/help.po b/docs/source/locale/ar/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/index.po b/docs/source/locale/ar/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ar/LC_MESSAGES/install.po b/docs/source/locale/ar/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/security.po b/docs/source/locale/ar/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/sphinx.po b/docs/source/locale/ar/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ar/LC_MESSAGES/tor.po b/docs/source/locale/ar/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ar/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/advanced.po b/docs/source/locale/ca/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/develop.po b/docs/source/locale/ca/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/features.po b/docs/source/locale/ca/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ca/LC_MESSAGES/help.po b/docs/source/locale/ca/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/index.po b/docs/source/locale/ca/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ca/LC_MESSAGES/install.po b/docs/source/locale/ca/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/security.po b/docs/source/locale/ca/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/sphinx.po b/docs/source/locale/ca/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ca/LC_MESSAGES/tor.po b/docs/source/locale/ca/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ca/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/advanced.po b/docs/source/locale/da/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/develop.po b/docs/source/locale/da/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/features.po b/docs/source/locale/da/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/da/LC_MESSAGES/help.po b/docs/source/locale/da/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/index.po b/docs/source/locale/da/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/da/LC_MESSAGES/install.po b/docs/source/locale/da/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/security.po b/docs/source/locale/da/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/sphinx.po b/docs/source/locale/da/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/da/LC_MESSAGES/tor.po b/docs/source/locale/da/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/da/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/advanced.po b/docs/source/locale/de/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/develop.po b/docs/source/locale/de/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/features.po b/docs/source/locale/de/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/de/LC_MESSAGES/help.po b/docs/source/locale/de/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/index.po b/docs/source/locale/de/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/de/LC_MESSAGES/install.po b/docs/source/locale/de/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/security.po b/docs/source/locale/de/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/sphinx.po b/docs/source/locale/de/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/de/LC_MESSAGES/tor.po b/docs/source/locale/de/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/de/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/advanced.po b/docs/source/locale/el/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ 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
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/features.po b/docs/source/locale/el/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/el/LC_MESSAGES/help.po b/docs/source/locale/el/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/index.po b/docs/source/locale/el/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/el/LC_MESSAGES/install.po b/docs/source/locale/el/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/security.po b/docs/source/locale/el/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/sphinx.po b/docs/source/locale/el/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/el/LC_MESSAGES/tor.po b/docs/source/locale/el/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/el/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/advanced.po b/docs/source/locale/en/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/develop.po b/docs/source/locale/en/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/features.po b/docs/source/locale/en/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/en/LC_MESSAGES/help.po b/docs/source/locale/en/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/index.po b/docs/source/locale/en/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/en/LC_MESSAGES/install.po b/docs/source/locale/en/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/security.po b/docs/source/locale/en/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/sphinx.po b/docs/source/locale/en/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/en/LC_MESSAGES/tor.po b/docs/source/locale/en/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/en/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/es/LC_MESSAGES/advanced.po b/docs/source/locale/es/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..ed59fb86
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/advanced.po
@@ -0,0 +1,304 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-20 11:48-0700\n"
+"PO-Revision-Date: 2020-09-22 13:39+0000\n"
+"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\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.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr "Uso avanzado"
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr "Guardar pestañas"
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+"Por defecto, todo es temporario en OnionShare. Cuando cierras una pestaña"
+" OnionShare su dirección no existe más, y no se puede usar de nuevo. Pero"
+" a veces podrías querer que un servicio OnionShare sea persistente. Por "
+"ejemplo, esto sería útil si quieres alojar un sitio web que tenga la "
+"misma URL cuando reinicies tu computadora."
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+"Para hacer una pestaña persistente, marca la casilla \"Guardar esta "
+"pestaña, y abrirla automáticamente cuando abra OnionShare\" antes de "
+"iniciar el servidor. Cuando se guarda una pestaña, un ícono púrpura de un"
+" pin aparece a la izquierda de su estado de servidor."
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"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."
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+"Si guardas una pestaña, una copia de la clave secreta del servicio onion "
+"de la misma se almacenará en tu computadora con tus ajustes de "
+"OnionShare."
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr "Deshabilitar contraseñas"
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of 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 aleatoriamente. "
+"Si alguien intenta adivinar 20 veces la contraseña, y es incorrecta, tu "
+"servicio onion se detiene automáticamente para prevenir un ataque de "
+"fuerza bruta al servicio OnionShare."
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+"Pero a veces podrías querer que tu servicio OnionShare sea accesible al "
+"público. Por ejemplo, si quieres establecer un servicio OnionShare de "
+"recepción con el fin de que el público pueda enviarte archivos segura y "
+"anónimamente. En este caso, es mejor deshabilitar del todo la contraseña."
+" Si no haces esto, alguien puede forzar la detención de tu servidor "
+"haciendo solo 20 suposiciones incorrectas de tu contraseña, aún si conoce"
+" la correcta."
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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 ""
+"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."
+
+#: ../../source/advanced.rst:31
+msgid "Scheduled times"
+msgstr "Tiempos programados"
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+"OnionShare soporta la programación exacta de cuándo un servicio debiera "
+"arrancar y detenerse. Antes de iniciar el 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:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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 de inicio 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:37
+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 ""
+"**Programar un servicio OnionShare para iniciarse automáticamente puede "
+"ser usado como pulsador de hombre muerto**, en donde tu servicio se hará "
+"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:41
+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 quieres compartir "
+"documentos secretos mientras te aseguras que no estarán disponibles en "
+"Internet por más de unos pocos días."
+
+#: ../../source/advanced.rst:46
+msgid "Command line interface"
+msgstr "Interfaz de línea de comando"
+
+#: ../../source/advanced.rst:48
+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."
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr "Linux"
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+"Lamentablemente, si instalaste OnionShare usando el paquete Flatpak la "
+"interfaz de línea de comando no está soportada."
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+"Si instalaste OnionShare usando un paquete del sistema operativo, puedes "
+"ejecutar ``onionshare`` desde una terminal."
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr "macOS"
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+"Haz un vínculo simbólico al ejecutable OnionShare de línea de comando de "
+"esta manera::"
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr "Ahora puedes ejecutar ``onionshare`` desde una terminal."
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr "Windows"
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr "La interfaz de línea de comando no está soportada en Windows."
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+"Si quieres usarla igualmente, puedes establecer un entorno Windows de "
+"desarrollo (mira :ref:`starting_development`), y luego ejecutar esto en "
+"una ventana de línea de comando::"
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr "Uso"
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+"Puedes ver la documentación de línea de comando ejecutando ``onionshare "
+"--help``::"
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr "Direcciones antiguas"
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+"OnionShare usa servicios onion Tor v3 por defecto. Estas son direcciones "
+"onion modernas que tienen 56 caracteres, por ejemplo::"
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+"Pero aún tiene soporte para direcciones onion v2, el viejo tipo de "
+"direcciones onion que tienen 16 caracteres, por ejemplo::"
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+"OnionShare llama a las direcciones onion v2 \"direcciones antiguas\". Las"
+" direcciones onion v3 son más seguras, y usar direcciones antiguas no "
+"está recomendado."
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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 ""
+"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. Para cambiarlo debes arrancar un servicio separado en una "
+"pestaña separada."
+
+#: ../../source/advanced.rst:148
+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 soon be removed from OnionShare as "
+"well."
+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 pronto se removerán de OnionShare"
+" también."
diff --git a/docs/source/locale/es/LC_MESSAGES/develop.po b/docs/source/locale/es/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..779264dc
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/develop.po
@@ -0,0 +1,325 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: 2020-09-18 06:51+0000\n"
+"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\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.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr "Desarrollando OnionShare"
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr "Colaborando"
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <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 que usamos para discutir el "
+"proyecto, incluyendo hacer preguntas, compartir ideas y diseños, y hacer "
+"planes para desarrollo futuro. (También es una manera fácil de enviar "
+"mensajes directos cifrados de extremo a extremo a otros en la comunidad "
+"OnionShare, como direcciones OnionShare). Para usar Keybase, necesitas "
+"descargar la `aplicación Keybase <https://keybase.io/download>`_, crear "
+"una cuenta, y `unirte a este equipo "
+"<https://keybase.io/team/onionshare>`_. Dentro de la aplicación, vé hacia"
+" Equipos, haz clic en \"Unirte a un Equipo\", y tipea \"onionshare\"."
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+"OnionShare también tiene una `lista de correo "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ para "
+"desarrolladores y diseñafores para discutir el proyecto."
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr "Contribuyendo código"
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+"El código fuente de OnionShare está en este repositorio git: "
+"https://github.com/micahflee/onionshare"
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+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 debieras revisar todos las `cuestiones abiertas "
+"<https://github.com/micahflee/onionshare/issues>`_ en GitHub para ver si "
+"hay alguna a la cual te gustaría desarrollar."
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" 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."
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr "Iniciando el desarrollo"
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+"OnionShare está desarrollado en Python. Para empezar, debieras clonar el "
+"repositorio git en https://github.com/micahflee/onionshare/, y consultar "
+"luego al archivo ``BUILD.md``."
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr "Ese archivo contiene las instrucciones técnicas y los comandos necesarios:"
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr "Instala las dependencias para tu plataforma"
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr "Ejecuta OnionShare desde el árbol fuente, sin construir un paquete"
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr "Construyendo paquetes"
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr "Haciendo un lanzamiento de OnionShare"
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr "Consejos para depuración"
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr "Modo detallado"
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+"Durante el desarrollo, es conveniente ejecutar OnionShare desde un "
+"terminal y agregar el modificador ``--verbose`` (o ``-v``) al comando. "
+"Esto imprimirá un montón de mensajes útiles al 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:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+"Puedes agregar tus propios mensajes de depuración ejecutando el método "
+"``Common.log`` desde ``onionshare/common.py``. Por ejemplo:"
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application 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 la aplicación o el valor de ciertas variables antes y después de que"
+" sean manipuladas."
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr "Solo local"
+
+#: ../../source/develop.rst:120
+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 es lento, y a menudo es conveniente saltear el inicio de servicios "
+"onion sin excepción durante el desarrollo. Puedes hacer esto con el "
+"modoficador ``--local-only``. Por ejemplo:"
+
+#: ../../source/develop.rst:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+"En este caso, cargas el URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` en un navegador web normal como Firefox, en vez "
+"de usar al Navegador Tor."
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr "Depurando en Windows"
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+"Si quieres obtener la salida de depuración del ``onionshare-gui.exe`` en "
+"Windows, nececitarás editar ``install\\pyinstaller.spec`` y cambiar "
+"``console=False`` a ``console=True``."
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+"Luego, recompilar el EXE con ``install\\build_exe.bat`` (podrías "
+"necesitar comentar los comandos ``signtool`` en los archivos "
+"``build_exe.bat`` y ``onionshare.nsi``, según las instrucciones en "
+"``BUILD.md``)."
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+"Después de esto, puedes ejecutar ``onionshare-gui.exe -v`` desde una "
+"ventana de línea de comando para ver la salida de depuración."
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr "Contribuyendo traducciones"
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+"La mayor parte de OnionShare es traducible. Puedes ayudar a hacerlo más "
+"fácil de usar y más familiar y acogedor para las personas alrededor del "
+"globo. Localization Lab tiene alguna `documentación acerca de traducir "
+"OnionShare <https://wiki.localizationlab.org/index.php/OnionShare>`_."
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+"OnionShare usa Weblate para llevar un registro de las traducciones. "
+"Puedes ver el proyecto OnionShare aquí: "
+"https://hosted.weblate.org/projects/onionshare/"
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+"Para ayudar a traducir, crea una cuenta Hosted Weblate y empieza a "
+"contribuir a ese proyecto."
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr "Sugerencias para cadenas de caracteres en el original en Inglés"
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+"A veces las cadenas de caracteres en el original en Inglés podrían ser "
+"mejoradas, haciéndolas más fáciles de traducir a otros lenguajes."
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+"Si tienes sugerencias para una mejor cadena de caracteres en Inglés, por "
+"favor abre una cuestión en GitHub en vez de comentar en Weblate. Esto "
+"asegura que los desarrolladores en el nivel superior definitivamente "
+"verán la sugerencia, y pueden modificarla potencialmente a través de los "
+"procesos usuales de revisión de código."
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr "Estado de las traducciones"
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us 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"
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr "Traduce el archivo .desktop"
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr "También puedes traducir el archivo ``install/onionshare.desktop``."
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+"Duplica la línea que empieza con ``Comment=``. Agrega el código de "
+"lenguaje a la nueva línea, que entonces se transforma en "
+"``Comment[lang]=`` (lang debiera ser tu lenguaje). Puedes ver qué códigos"
+" de lenguaje son usados para traducción mirando a los nombres de archivos"
+" en ``share/locale/*.json``:"
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr "Haz lo mismo para otras líneas no traducidas."
diff --git a/docs/source/locale/es/LC_MESSAGES/features.po b/docs/source/locale/es/LC_MESSAGES/features.po
new file mode 100644
index 00000000..4e2ff5b0
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/features.po
@@ -0,0 +1,399 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-17 05:25+0000\n"
+"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\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.3-dev\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr "Cómo funciona OnionShare"
+
+#: ../../source/features.rst:6
+msgid "OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_."
+msgstr ""
+"OnionShare funciona iniciando servidores web localmente en tu propia "
+"computadora, y haciéndolos accesibles a otras peesonas como `servicios onion "
+"<https://community.torproject.org/onion-services/>`_`Tor <https://www."
+"torproject.org/>`_ ."
+
+#: ../../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 ""
+"Por defecto, las direcciones web OnionShare están protegidas con una "
+"contraseña aleatoria. Una dirección OnionShare típica podría parecerse a "
+"algo como esto:"
+
+#: ../../source/features.rst:12
+msgid "You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/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 mensaje de Twitter o Facebook, dependiendo "
+"de tu `modelo de amenaza <https://ssd.eff.org/en/module/your-security-"
+"plan>`_."
+
+#: ../../source/features.rst:14
+msgid "The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+"Luego , 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 "With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time."
+msgstr ""
+"Con OnionShare, *tu propia computadora es el servidor web*. Si ejecutas "
+"OnionShare en tu portátil para enviarle archivos a alguien, y luego la "
+"suspendes antes de que los archivos hayan sido descargados, el servicio no "
+"estará disponible hasta que finalice la suspensión en tu portátil y se "
+"conecte de nuevo a Internet. OnionShare funciona mejor cuando trabaja con "
+"personas en tiempo real."
+
+#: ../../source/features.rst:18
+msgid "Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information."
+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."
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr "Comparte archivos"
+
+#: ../../source/features.rst:23
+msgid "You can use OnionShare to securely and anonymously send files and folders to people. Just open a share tab, drag in the files and folders you wish to share, and click \"Start sharing\"."
+msgstr ""
+"Puedes usar OnionShare para enviar archivos y carpetas a las personas en "
+"forma segura y anónima. Solo abre una pestaña de compartición, arrastra "
+"hacia ella los archivos y carpetas que deseas compartir, y haz clic en "
+"\"Iniciar compartición\"."
+
+#: ../../source/features.rst:27
+#: ../../source/features.rst:91
+msgid "After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing."
+msgstr ""
+"Después 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 "By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the \"Stop sharing after files have been sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+"Por defecto, tan pronto como alguien termine de descargar tus archivos, "
+"OnionShare detendrá automáticamente al servidor, removiendo completamente al "
+"sitio web de Internet. Si quieres permitir que múltiples personas descarguen "
+"estos archivos, desmarca la casilla \"Detener la compartición luego que los "
+"archivos hayan sido enviados (desmarca para permitir la descarga de archivos "
+"individuales)\"."
+
+#: ../../source/features.rst:33
+msgid "Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of 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."
+
+#: ../../source/features.rst:35
+msgid "When you're ready to share, click the \"Start sharing\" button. You can always click \"Stop sharing\", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you."
+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 de flecha hacia arriba en la esquina superior "
+"derecha para mostrar el historial y el progreso de las personas que están "
+"descargando archivos."
+
+#: ../../source/features.rst:39
+msgid "Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app."
+msgstr ""
+"Ahora que tienes un sitio web que está compartiendo archivos, copia la "
+"dirección y envíasela a la persona que quieres que los reciba. Si estos "
+"necesitan permanecer seguros, deberías usar una aplicación de mensajería "
+"cifrada."
+
+#: ../../source/features.rst:41
+msgid "That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files 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."
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr "Recibir Archivos"
+
+#: ../../source/features.rst:48
+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 files to get downloaded 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\"."
+
+#: ../../source/features.rst:52
+msgid "This will start the OnionShare service. Anyone that loads this address in 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."
+
+#: ../../source/features.rst:56
+msgid "You can also click the down arrow 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 de flecha hacia abajo en la esquina "
+"superior derecha para mostrar el historial y el progreso de las personas "
+"enviándote archivos."
+
+#: ../../source/features.rst:58
+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:62
+msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in your home folder on your computer, and they get automatically organized into separate subfolders based on the time that the files get uploaded."
+msgstr ""
+"Cuando alguien sube archivos al servicio de recepción en tu computadora, son "
+"guardados por defecto en una subcarpeta de tu carpeta personal llamada "
+"``OnionShare``, y son organizados automáticamente en subcarpetas separadas "
+"basándose en la hora en la que los archivos son subidos."
+
+#: ../../source/features.rst:64
+msgid "Setting up an OnionShare receiving service is useful for journalists and others that need 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 ""
+"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:67
+msgid "Use at your own risk"
+msgstr "Úsalo a tu propio riesgo"
+
+#: ../../source/features.rst:69
+msgid "Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk."
+msgstr ""
+"De la misma manera que con adjuntos maliciosos en correos electrónicos, es "
+"posible que alguien pudiera intentar hackear tu computadora subiendo un "
+"archivo malicioso a tu servicio. OnionShare no añade ningún mecanismo de "
+"seguridad para proteger a tu sistema de archivos maliciosos, por lo que su "
+"uso es a tu propio riesgo."
+
+#: ../../source/features.rst:71
+msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM."
+msgstr ""
+"Si recibes un documento de Office o un PDF a través de OnionShare, puedes "
+"convertirlos en PDFs que sabes que serán seguros para abrir usando `"
+"Dangerzone <https://dangerzone.rocks/>`_. También puedes protegerte al abrir "
+"documentos en los que no confías haciéndolo en `Tails <https://tails.boum."
+"org/>`_ o en una Máquina Virtual descartable `Qubes <https://qubes-os.org/"
+">`_."
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr "Consejos para correr un servicio de recepción"
+
+#: ../../source/features.rst:76
+msgid "If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's 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."
+
+#: ../../source/features.rst:78
+msgid "If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`)."
+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:`disable_passwords`)."
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr "Aloja un Sitio Web"
+
+#: ../../source/features.rst:83
+msgid "You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+"Puedes usar OnionShare para alojar un sitio web con HTML estático solo con "
+"un clic. 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:87
+msgid "If you add an ``index.html`` file, when someone loads your website it will render this page. 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 ""
+"Si añades un archivo ``index.html``, cuando alguien cargue tu sitio web "
+"representará gráficamente a esta página. También deberías incluir cualquier "
+"otro archivo HTML, CSS, JavaScript o imágenes que constituyan al sitio web. ("
+"Ten en cuenta que OnionShare solamente soporta el alojamiento de sitios web "
+"*estáticos*. No puede alojar sitios web que ejecuten código o usen bases de "
+"datos. Por lo que no puedes, por ejemplo, usar WordPress.)"
+
+#: ../../source/features.rst:89
+msgid "If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them."
+msgstr ""
+"Si no tienes un archivo ``index.html``, entonces mostrará un listado de "
+"directorio, y las personas que lo carguen podrán mirar a través de los "
+"archivos y descargarlos."
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr "Política de Seguridad de Contenido"
+
+#: ../../source/features.rst:98
+msgid "By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page."
+msgstr ""
+"Por defecto, OnionShare te ayudará a asegurar tu sitio web estableciendo un "
+"estricto encabezado de `Política de Seguridad de Contenido <https://en."
+"wikipedia.org/wiki/Content_Security_Policy>`_. Sin embargo, esto evitará que "
+"el contenido de terceros sea cargado dentro de la página web."
+
+#: ../../source/features.rst:100
+msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the \"Disable 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."
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr "Consejos para correr un servicio de sitio web"
+
+#: ../../source/features.rst:105
+msgid "If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that 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. También deberías "
+"guardar 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:107
+msgid "If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+"Si planeas que tu sitio web sea visto por el público, deberías ejecutarlo "
+"como servicio público (see :ref:`disable_passwords`)."
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr "Chat Anónimo"
+
+#: ../../source/features.rst:112
+msgid "You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. 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 o deja rastro alguno. Solo abre una "
+"pestaña de chat y haz clic en \"Iniciar servidor de chat\"."
+
+#: ../../source/features.rst:116
+msgid "After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address."
+msgstr ""
+"Después que inicies al servidor, copia la dirección OnionShare y envíala a "
+"las personas que se unirán a este cuarto anónimo de chat. Si es importante "
+"limitar exactamente quién puede unirse, deberías usar una aplicación cifrada "
+"de mensajería para enviar la dirección OnionShare."
+
+#: ../../source/features.rst:120
+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 set their security level to 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'."
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere."
+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 Intro. 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:126
+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 ""
+"En un cuarto de chat OnionShare, todos son anónimos. Cualquiera puede "
+"cambiar su nombre a cualquier cosa, y no hay manera de confirmar la "
+"identidad de nadie."
+
+#: ../../source/features.rst:128
+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, then you can be reasonably confident that the people who join 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 "
+"personas que se unan a él son tus amigos."
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr "¿Cómo es que esto es útil?"
+
+#: ../../source/features.rst:133
+msgid "If you need to already be using an encrypted messaging app, what's the point of an OnionShare chat room to begin with? It leaves less traces."
+msgstr ""
+"Si para empezar ya necesitas estar usando una aplicación de mensajería "
+"cifrada, ¿cuál es el punto de un cuarto de chat OnionShare? Deja menos "
+"rastros."
+
+#: ../../source/features.rst:135
+msgid "If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem."
+msgstr ""
+"Si envías un mensaje a un grupo de Signal, por ejemplo, una copia del mismo "
+"termina en cada dispositivo (los teléfonos y computadoras, si configuran "
+"Signal Desktop) de cada miembro del grupo. Aún si están habilitados los "
+"mensajes evanescentes, es difícil confirmar que todas las copias de los "
+"mismos fueron realmente borradas de todos los dispositivos, y de cualquier "
+"otro lugar (como bases de datos de notificaciones) en que pudieran haber "
+"sido guardadas. Los cuartos de chat OnionShare no almacenan ningún mensaje "
+"en ningún lado, por lo que esto no es un problema."
+
+#: ../../source/features.rst:137
+msgid "OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
+msgstr ""
+"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."
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr "¿Cómo funciona el cifrado?"
+
+#: ../../source/features.rst:142
+msgid "Because OnionShare relies on Tor onion services, connections between 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 ""
+"Como OnionShare cuenta con 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 WebSockets, a través de "
+"sus conexiones onion E2EE."
+
+#: ../../source/features.rst:144
+msgid "OnionShare doesn't implement any chat encryption on its own. It relies on the Tor onion service's encryption instead."
+msgstr ""
+"OnionShare no implementa ningún cifrado de chat por sí mismo. En vez, cuenta "
+"con el cifrado del servicio onion de Tor."
diff --git a/docs/source/locale/es/LC_MESSAGES/help.po b/docs/source/locale/es/LC_MESSAGES/help.po
new file mode 100644
index 00000000..dad96235
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/help.po
@@ -0,0 +1,75 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-14 21:36+0000\n"
+"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\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.3-dev\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr "Obteniendo Ayuda"
+
+#: ../../source/help.rst:4
+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."
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr "Lee este sitio web"
+
+#: ../../source/help.rst:9
+msgid "This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions."
+msgstr ""
+"Este sitio web está lleno de 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:12
+msgid "Check the GitHub issues"
+msgstr "Comprueba las cuestiones con GitHub"
+
+#: ../../source/help.rst:14
+msgid "If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution."
+msgstr ""
+"Si no puedes encontrar una solución 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:17
+msgid "Submit an issue yourself"
+msgstr "Envía una cuestión"
+
+#: ../../source/help.rst:19
+msgid "If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an 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 cusestió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:22
+msgid "Join our Keybase team"
+msgstr "Únete a nuestro equipo Keybase"
+
+#: ../../source/help.rst:24
+msgid "See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project."
+msgstr ""
+"Mira :ref:`collaborating` por instrucciones acerca de cómo unirse a nuestro "
+"equipo Keybase, al cual usamos para discutir el proyecto."
diff --git a/docs/source/locale/es/LC_MESSAGES/index.po b/docs/source/locale/es/LC_MESSAGES/index.po
new file mode 100644
index 00000000..dc691b19
--- /dev/null
+++ b/docs/source/locale/es/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\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-09-14 21:36+0000\n"
+"Last-Translator: emma peel <emma.peel@riseup.net>\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.3-dev\n"
+
+#: ../../source/index.rst:2
+msgid "OnionShare's documentation"
+msgstr "Documentación de 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 es una herramienta de código abierto que te permite compartir "
+"archivos de forma segura y anónima, alojar sitios web y charlar con amigos "
+"usando la red Tor."
diff --git a/docs/source/locale/es/LC_MESSAGES/install.po b/docs/source/locale/es/LC_MESSAGES/install.po
new file mode 100644
index 00000000..41624bdf
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/install.po
@@ -0,0 +1,144 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-14 21:36+0000\n"
+"Last-Translator: Zuhualime Akoochimoya <zakooch@protonmail.ch>\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.3-dev\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr "Instalación"
+
+#: ../../source/install.rst:5
+msgid "Install on Windows or macOS"
+msgstr "Instalar en Windows o macOS"
+
+#: ../../source/install.rst:7
+msgid "You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_."
+msgstr ""
+"Puedes descargar OnionShare para Windows o macOS desde la página web de `"
+"OnionShare <https://onionshare.org/>`_."
+
+#: ../../source/install.rst:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr "Para mayor seguridad, lee :ref:`verifying_sigs`."
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr "Instalar en Linux con Flatpak"
+
+#: ../../source/install.rst:16
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox."
+msgstr ""
+"Hay varias formas de instalar OnionShare en Linux, pero recomendamos "
+"utilizar el paquete Flatpak. Flatpak garantiza que las dependencias serán "
+"siempre las más recientes y ejecutará OnionShare dentro de un contenedor "
+"aislado."
+
+#: ../../source/install.rst:18
+msgid "Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution."
+msgstr ""
+"Instala ``flatpak`` y añade el repositorio Flathub siguiendo `estas "
+"instrucciones <https://flatpak.org/setup/>`_ para tu distribución Linux."
+
+#: ../../source/install.rst:20
+msgid "Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+"Luego instala OnionShare desde Flathub siguiendo `estas instrucciones "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr "Verificar firmas PGP"
+
+#: ../../source/install.rst:27
+msgid "You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+"Puedes asegurate de que el paquete con el código fuente, el de Windows o el "
+"de macOS que descargaste es correcto y no ha sido manipulado verificando su "
+"firma PGP. Para Windows y macOS este paso es opcional, y provee defensa en "
+"profundidad: los instaladores también incluyen sus firmas específicas del "
+"sistema operativo, y puedes confiar solo en ellas si así lo deseas."
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr "Clave de firma"
+
+#: ../../source/install.rst:32
+msgid "Windows, macOS, and source packaged 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 ""
+"Los paquetes para Windows, macOS, y el código fuente están firmados por "
+"Micah Lee, el desarrollador principal, usando su clave PGP pública con "
+"huella digital ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. Puedes "
+"descargar la clave de Micah `desde el servidor de claves keys.openpgp.org "
+"<https://keys.openpgp.org/vks/v1/by-fingerprint/"
+"927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+
+#: ../../source/install.rst:34
+msgid "In order to verify signatures, you must have GnuPG installed. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+"Con el fin de verificar firmas, debes tener GnuPG instalado. Para macOS "
+"probablemente quieras `GPGTools <https://gpgtools.org/>`_, y para Windows, `"
+"Gpg4win <https://www.gpg4win.org/>`_."
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr "Firmas"
+
+#: ../../source/install.rst:39
+msgid "You can find the signatures (``.asc`` files), as well as Windows, macOS, 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 ""
+"Puedes encontrar las firmas (archivos ``.asc``), como así también los "
+"paquetes para Windows, macOS y el código fuente, en https://onionshare.org/"
+"dist/ en las carpetas nombradas por cada versión de OnionShare. También "
+"puedes encontrarlas en la `página de Lanzamientos de GitHub <https://github."
+"com/micahflee/onionshare/releases>`_."
+
+#: ../../source/install.rst:42
+msgid "Verifying"
+msgstr "Verificando"
+
+#: ../../source/install.rst:44
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::"
+msgstr ""
+"Una vez que hayas importado la clave pública de Micah dentro de tu llavero "
+"GnuPG, descargado el ejecutable y la firma ``.asc``, puedes verificar el "
+"ejecutable para macOS en un terminal como sigue:"
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr "O para Windows en una línea de comando como sigue:"
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr "Una salida esperada puede lucir como esta:"
+
+#: ../../source/install.rst:64
+msgid "If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+"Si no ves 'Good signature from', entonces podría haber un problema con la "
+"integridad del archivo (malicioso u otra causa), y tal vez no debieras "
+"instalar el paquete. (La ADVERTENCIA mostrada arriba no es un problema con "
+"el paquete: solamente significa que no has definido ningún nivel de "
+"'confianza' con respecto a la clave PGP de Micah en sí misma.)"
+
+#: ../../source/install.rst:66
+msgid "If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful."
+msgstr ""
+"Si quieres aprender más acerca de la verificación de firmas PGP, las guías "
+"para `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ y "
+"el `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures."
+"html.en>`_ podrían ser útiles."
diff --git a/docs/source/locale/es/LC_MESSAGES/security.po b/docs/source/locale/es/LC_MESSAGES/security.po
new file mode 100644
index 00000000..6fad2771
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/security.po
@@ -0,0 +1,116 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-14 21:36+0000\n"
+"Last-Translator: emma peel <emma.peel@riseup.net>\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.3-dev\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr "Diseño de seguridad"
+
+#: ../../source/security.rst:4
+msgid "First read :ref:`how_it_works` to understand the basics of how OnionShare works."
+msgstr ""
+"Primero lee :ref:`how_it_works` para entender las bases de cómo funciona "
+"OnionShare."
+
+#: ../../source/security.rst:6
+msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
+msgstr ""
+"Como cualquier software, OnionShare podría contener errores o "
+"vulnerabilidades."
+
+#: ../../source/security.rst:9
+msgid "What OnionShare protects against"
+msgstr "Contra qué te protege OnionShare"
+
+#: ../../source/security.rst:11
+msgid "**Third parties don't have access to anything that happens in OnionShare.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data."
+msgstr ""
+"**Ningún tercero tiene acceso a lo que pasa en OnionShare.** Cuando usas "
+"OnionShare, alojas servicios directamente en tu computadora. Por ejemplo, "
+"cuando compartes archivos con OnionShare, no los subes a ningún servidor, y "
+"cuando inicias un cuarto de chat OnionShare, tu computadora es el servidor. "
+"Las maneras tradicionales de compartir archivos o configurar sitios web y "
+"cuartos de chat requieren confiar en un servicio con acceso a tus datos."
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service key."
+msgstr ""
+"**Quienes estén observando la red no pueden espiar nada de lo que pasa en "
+"tránsito en OnionShare.** Debido a que las conexiones entre los servicios "
+"onion de Tor y el Navegador Tor están cifradas de extremo a extremo, ningún "
+"atacante puede espiar qué es lo que pasa en un servicio OnionShare. Si el "
+"espía está posicionado en el extremo del usuario de OnionShare, el extremo "
+"del usuario del Navegador Tor, o es un nodo Tor malicioso, solamente verá "
+"tráfico Tor. Si el espía es un nodo de encuentro malicioso usado para "
+"conectar al Navegador Tor con el servicio onion de OnionShare, el tráfico "
+"estará cifrado usando la clave del servicio onion."
+
+#: ../../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 ""
+"**El anonimato de los usuarios de OnionShare está protegido por Tor.** "
+"OnionShare y el Navegador Tor protegen el anonimato de los usuarios. En la "
+"medida en que el usuario de OnionShare comunique anónimamente la dirección "
+"OnionShare con los usuarios del Navegador Tor, ni éstos ni los espías pueden "
+"saber la identidad del usuario de OnionShare."
+
+#: ../../source/security.rst:17
+msgid "**If an attacker learns about the onion service, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses before OnionShare stops the server, preventing brute force attacks against the password."
+msgstr ""
+"**Si un atacante encuentra el servicio onion, aún así no puede acceder a "
+"nada.** Ha habido ataques en contra de la red Tor que pueden enumerar "
+"servicios onion. Aún si alguien descubre la dirección .onion de un servicio "
+"onion de OnionShare, no puede accederla sin conocer también la contraseña "
+"aleatoria del servicio (a menos, por supuesto, que el usuario de OnionShare "
+"elija deshabilitarla y hacerla pública). La contraseña es generada eligiendo "
+"dos palabras aleatorias de una lista de 6800, lo cual significa que hay 6800^"
+"2, o cerca de 46 millones de contraseñas posibles. Pero pueden hacer "
+"solamente 20 intentos fallidos antes de que OnionShare pare el servidor, "
+"evitando ataques de fuerza bruta para conseguir la contraseña."
+
+#: ../../source/security.rst:20
+msgid "What OnionShare doesn't protect against"
+msgstr "Contra qué no te protege OnionShare"
+
+#: ../../source/security.rst:22
+msgid "**Communicating the OnionShare address might not be secure.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+"**Comunicar la dirección de OnionShare podría no ser seguro.** El usuario de "
+"OnionShare es responsable de comunicar en forma segura la dirección de "
+"OnionShare con las personas. Si lo hace de forma insegura (tal como a través "
+"de un mensaje de correo electrónico, mientras que éste está siendo "
+"monitoreado por un atacante), el espía sabrá que está usando OnionShare. Si "
+"el atacante carga la dirección en el Navegador Tor antes que el receptor "
+"legítimo lo haga, puede acceder al servicio. Si este riesgo es posible "
+"dentro del modelo de amenaza del usuario, debes encontrar una manera más "
+"segura de comunicar la dirección, tal como en un correo electrónico, charla "
+"o llamadas cifradas de voz. Esto no es necesario en casos donde OnionShare "
+"está siendo usado para algo que no es secreto."
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents."
+msgstr ""
+"**Comunicar la dirección de OnionShare podría no ser anónimo.** Mientras que "
+"OnionShare y el Navegador Tor permiten el anonimato, si el usuario desea "
+"permanecer anónimo, debe tomar pasos extra para asegurarlo cuando comunica "
+"la dirección de OnionShare. Por ejemplo, podría necesitar usar Tor para "
+"crear un nuevo correo electrónico o cuenta de charla anónimos, y accederla "
+"solamente sobre Tor para compartir la dirección. Esto no es necesario en "
+"casos donde no haya necesidad de proteger el anonimato, tales como con "
+"colegas que se conocen entre sí, y comparten documentos de trabajo."
diff --git a/docs/source/locale/es/LC_MESSAGES/sphinx.po b/docs/source/locale/es/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..1b6e29d0
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-14 21:36+0000\n"
+"Last-Translator: emma peel <emma.peel@riseup.net>\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.3-dev\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr "Versiones"
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr "Idiomas"
diff --git a/docs/source/locale/es/LC_MESSAGES/tor.po b/docs/source/locale/es/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..65c4b704
--- /dev/null
+++ b/docs/source/locale/es/LC_MESSAGES/tor.po
@@ -0,0 +1,291 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: 2020-09-20 02:39+0000\n"
+"Last-Translator: emma peel <emma.peel@riseup.net>\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.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr "Conectar a Tor"
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+"Hay varias opciones para conectar OnionShare a Tor. Puedes cambiarlas en "
+"Ajustes, accesibles haciendo clic en el ícono del engranaje abajo a la "
+"derecha de la ventana."
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr "Usar la versión de Tor incluida con OnionShare"
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+"Esta es la manera predeterminada en la que OnionShare se conecta a Tor, y "
+"también es la más simple y confiable. Por esta razón se recomienda para la "
+"mayoría de los usuarios."
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+"Cuando abres OnionShare se inicia un proceso Tor en segundo plano que está "
+"configurado específicamente para su uso. Este proceso Tor no interferirá con "
+"otros procesos Tor en tu computadora, por lo que eres libre de correr al "
+"Navegador Tor o usar un Tor de sistema en segundo plano."
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr "Intentar configuración automática con el Navegador Tor"
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+"Puedes configurar OnionShare para conectar al Tor que viene con el Navegador "
+"Tor. Primero, `descarga el Navegador Tor <https://www.torproject.org>`_ aquí "
+"si aún no lo tienes. Con este ajuste seleccionado, necesitas mantener el "
+"Navegador Tor abierto en segundo plano mientras estás usando OnionShare."
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr "Usar un Tor de sistema en Windows"
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+"Esto es bastante avanzado. Necesitarás saber cómo editar archivos de "
+"texto y hacer cosas como administrador."
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+"Descarga el Paquete Experto de Tor para Windows, que puedes obtener `de aquí "
+"<https://www.torproject.org/download/tor/>`_. Extrae el archivo zip, copia "
+"la carpeta extraída a ``C:\\Program Files (x86)\\``, y renómbrala a ``tor-"
+"win32``; dentro de esa carpeta están las subcarpetas ``Data`` y ``Tor``."
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+"Inventa una contraseña para el puerto de control. Voy a usar ``comprised "
+"stumble rummage work avenging construct volatile`` como la mía. Ahora "
+"abre una ventana para línea de comando como administrador, y usa "
+"``tor.exe --hash-password`` para generar un hash de tu contraseña. Por "
+"ejemplo:"
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+"La salida del hash de la contraseña se ve después de algunas advertencias ("
+"que puedes ignorar). En mi caso, fue "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+"Ahora crea un nuevo archivo de texto en ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` y escríbelo en él, reemplazando el ``HashedControlPassword`` "
+"con el que acabas de generar:"
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+"En tu ventana de línea de comando como administrador, instala tor como "
+"servicio usando el archivo ``torrc`` apropiado que acabas de crear (mira `"
+"aquí <https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ para más "
+"información sobre cómo hacerlo). De esta manera::"
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr "¡Ahora estás ejecutando un Tor de sistema en Windows!"
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+"Abre OnionShare. Haz clic en el ícono Ajustes. Debajo de \"¿Cómo debiera "
+"conectarse a Tor OnionShare?\" elije \"Conectar usando el puerto de control\""
+", y establece el equipo del puerto de control a ``127.0.0.1``, y el puerto a "
+"``9051``. Bajo \"Opciones de autenticación de Tor\" elije \"Contraseña\" y "
+"escribe la tuya, en mi caso ``comprised stumble rummage work avenging "
+"construct volatile``. Haz clic en el botón \"Probar Ajustes\". Si todo va "
+"bien, debieras ver que se conectó exitosamente a tor."
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr "Usar un Tor de sistema en macOS"
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+"Primero, instala `Homebrew <http://brew.sh/>`_ si es que todavía no lo "
+"tienes. Luego, instala Tor::"
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr "Ahora configura Tor para permitir conexiones desde OnionShare::"
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr "E inicia el servicio Tor de sistema::"
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+"Abre OnionShare. Haz clic en el ícono Ajustes. Bajo \"¿Cómo debiera "
+"conectarse a Tor OnionShare?\" elije \"Conectar usando un archivo "
+"socket\", y establécelo a ``/usr/local/var/run/tor/control.socket``. Bajo"
+" \"Opciones de autenticación de Tor\" elije \"Sin autenticación, o "
+"autenticación por cookies\". Haz clic en el botón \"Probar Ajustes\". Si "
+"todo va bien, debieras ver que se conectó exitosamente a tor."
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr "Usando un Tor de sistema en Linux"
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+"Primero, instala el paquete tor. Si estás usando Debian, Ubuntu o una "
+"distribución de Linux similar, te recomiendo que uses el `repositorio "
+"oficial <https://2019.www.torproject.org/docs/debian.html.en>`_ del Tor "
+"Project. Por ejemplo, en Ubuntu 20.04::"
+
+#: ../../source/tor.rst:78
+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 ""
+"Luego, agrega tu usuario al grupo que corre el proceso Tor (en el caso de"
+" Debian y Ubuntu, ``debian-tor``) y configura OnionShare para conectarse "
+"al archivo socket de control de tu Tor de sistema."
+
+#: ../../source/tor.rst:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+"Agrega tu usuario al grupo ``debian-tor`` ejecutando este comando (reemplaza "
+"``username`` con tu nombre de usuario real)::"
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+"Reinicia tu computadora. Luego de que vuelva a arrancar, abre OnionShare."
+" Haz clic en el ícono Ajustes. Bajo \"¿Cómo debiera conectarse a Tor "
+"OnionShare?\" elije \"Conectar usando un archivo socket\", y establécelo "
+"a ``/var/run/tor/control``. Bajo \"Opciones de autenticación de Tor\" "
+"elije \"Sin autenticación, o autenticación por cookies\". Haz clic en el "
+"botón \"Probar Ajustes\". Si todo va bien, debieras ver que se conectó "
+"exitosamente a Tor."
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr "Usar puentes Tor"
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+"Si ru acceso a Internet está censurado, puedes configurar OnionShare para"
+" conectarse a la red Tor usando `puentes Tor "
+"<https://2019.www.torproject.org/docs/bridges.html.en>`_. Si OnionShare "
+"se conecta exitosamente a Tor, no necesitas usar un puente."
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr "Para configurar puentes, abre los ajustes de OnionShare."
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+"Puedes usar los transportes conectables obfs4 o meek_lite (Azure) "
+"incorporados, o puentes personalizados, los cuales puedes obtener de la "
+"`BridgeDB <https://bridges.torproject.org/>`_ de Tor. Si necesitas usar "
+"un puente, debieras intentar primero con los obfs4 incorporados."
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr "Usando un Tor de sistema en macOS"
diff --git a/docs/source/locale/fa/LC_MESSAGES/advanced.po b/docs/source/locale/fa/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/develop.po b/docs/source/locale/fa/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/features.po b/docs/source/locale/fa/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/fa/LC_MESSAGES/help.po b/docs/source/locale/fa/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/index.po b/docs/source/locale/fa/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/fa/LC_MESSAGES/install.po b/docs/source/locale/fa/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/security.po b/docs/source/locale/fa/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/sphinx.po b/docs/source/locale/fa/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/fa/LC_MESSAGES/tor.po b/docs/source/locale/fa/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/fa/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/fr/LC_MESSAGES/advanced.po b/docs/source/locale/fr/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..3dd70b07
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/advanced.po
@@ -0,0 +1,228 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11:48-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language: fr\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/fr/LC_MESSAGES/develop.po b/docs/source/locale/fr/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..9ce95cc9
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/develop.po
@@ -0,0 +1,257 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language: fr\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/fr/LC_MESSAGES/features.po b/docs/source/locale/fr/LC_MESSAGES/features.po
new file mode 100644
index 00000000..ae1dae49
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/features.po
@@ -0,0 +1,226 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"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"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid "OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid "You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid "The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid "With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid "Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid "You can use OnionShare to securely and anonymously send files and folders to people. Just open a share tab, drag in the files and folders you wish to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27
+#: ../../source/features.rst:91
+msgid "After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid "By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the \"Stop sharing after files have been sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid "Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid "When you're ready to share, click the \"Start sharing\" button. You can always click \"Stop sharing\", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid "Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid "That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files directly from your computer by clicking the \"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid "This will start the OnionShare service. Anyone that loads this address in Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid "You can also click the down arrow icon in the top-right corner to show the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in your home folder on your computer, and they get automatically organized into separate subfolders based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid "Setting up an OnionShare receiving service is useful for journalists and others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid "Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid "If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid "If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid "You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid "If you add an ``index.html`` file, when someone loads your website it will render this page. 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:89
+msgid "If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid "By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the \"Disable Content Security Policy header (allows your website to use third-party resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid "If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that you can resume the website with the same address if you close OnionShare and re-open it later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid "If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid "You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. Just open a chat tab and click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid "After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid "If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid "OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid "Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/fr/LC_MESSAGES/help.po b/docs/source/locale/fr/LC_MESSAGES/help.po
new file mode 100644
index 00000000..35a6d1d3
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/help.po
@@ -0,0 +1,57 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"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"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid "This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid "If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid "If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid "See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project."
+msgstr ""
diff --git a/docs/source/locale/fr/LC_MESSAGES/index.po b/docs/source/locale/fr/LC_MESSAGES/index.po
new file mode 100644
index 00000000..7e229643
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/index.po
@@ -0,0 +1,25 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \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"
+"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"
+
+#: ../../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/fr/LC_MESSAGES/install.po b/docs/source/locale/fr/LC_MESSAGES/install.po
new file mode 100644
index 00000000..0d7d00a6
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/install.po
@@ -0,0 +1,101 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"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"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid "Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid "Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid "You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid "Windows, macOS, and source packaged 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:34
+msgid "In order to verify signatures, you must have GnuPG installed. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid "You can find the signatures (``.asc`` files), as well as Windows, macOS, 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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid "If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid "If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful."
+msgstr ""
diff --git a/docs/source/locale/fr/LC_MESSAGES/security.po b/docs/source/locale/fr/LC_MESSAGES/security.po
new file mode 100644
index 00000000..3fc4ecd6
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/security.po
@@ -0,0 +1,61 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"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"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid "First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service 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, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses 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.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents."
+msgstr ""
diff --git a/docs/source/locale/fr/LC_MESSAGES/sphinx.po b/docs/source/locale/fr/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..32df696b
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/sphinx.po
@@ -0,0 +1,25 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"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"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
diff --git a/docs/source/locale/fr/LC_MESSAGES/tor.po b/docs/source/locale/fr/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..f16b041c
--- /dev/null
+++ b/docs/source/locale/fr/LC_MESSAGES/tor.po
@@ -0,0 +1,217 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language: fr\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/advanced.po b/docs/source/locale/ga/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/develop.po b/docs/source/locale/ga/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/features.po b/docs/source/locale/ga/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ga/LC_MESSAGES/help.po b/docs/source/locale/ga/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/index.po b/docs/source/locale/ga/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ga/LC_MESSAGES/install.po b/docs/source/locale/ga/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/security.po b/docs/source/locale/ga/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/sphinx.po b/docs/source/locale/ga/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ga/LC_MESSAGES/tor.po b/docs/source/locale/ga/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ga/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/advanced.po b/docs/source/locale/is/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/develop.po b/docs/source/locale/is/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/features.po b/docs/source/locale/is/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/is/LC_MESSAGES/help.po b/docs/source/locale/is/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/index.po b/docs/source/locale/is/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/is/LC_MESSAGES/install.po b/docs/source/locale/is/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/security.po b/docs/source/locale/is/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/sphinx.po b/docs/source/locale/is/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/is/LC_MESSAGES/tor.po b/docs/source/locale/is/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/is/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/advanced.po b/docs/source/locale/it/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/develop.po b/docs/source/locale/it/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/features.po b/docs/source/locale/it/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/it/LC_MESSAGES/help.po b/docs/source/locale/it/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/index.po b/docs/source/locale/it/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/it/LC_MESSAGES/install.po b/docs/source/locale/it/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/security.po b/docs/source/locale/it/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/sphinx.po b/docs/source/locale/it/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/it/LC_MESSAGES/tor.po b/docs/source/locale/it/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/it/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/advanced.po b/docs/source/locale/ja/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/develop.po b/docs/source/locale/ja/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/features.po b/docs/source/locale/ja/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ja/LC_MESSAGES/help.po b/docs/source/locale/ja/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/index.po b/docs/source/locale/ja/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ja/LC_MESSAGES/install.po b/docs/source/locale/ja/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/security.po b/docs/source/locale/ja/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/sphinx.po b/docs/source/locale/ja/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ja/LC_MESSAGES/tor.po b/docs/source/locale/ja/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ja/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/advanced.po b/docs/source/locale/nb_NO/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..17c39735
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/advanced.po
@@ -0,0 +1,228 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11:48-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language: nb_NO\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/develop.po b/docs/source/locale/nb_NO/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..d1799dfc
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/develop.po
@@ -0,0 +1,257 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language: nb_NO\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/features.po b/docs/source/locale/nb_NO/LC_MESSAGES/features.po
new file mode 100644
index 00000000..e97263f1
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/features.po
@@ -0,0 +1,226 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid "OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid "You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid "The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid "With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid "Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid "You can use OnionShare to securely and anonymously send files and folders to people. Just open a share tab, drag in the files and folders you wish to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27
+#: ../../source/features.rst:91
+msgid "After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid "By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the \"Stop sharing after files have been sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid "Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid "When you're ready to share, click the \"Start sharing\" button. You can always click \"Stop sharing\", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid "Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid "That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files directly from your computer by clicking the \"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid "This will start the OnionShare service. Anyone that loads this address in Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid "You can also click the down arrow icon in the top-right corner to show the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in your home folder on your computer, and they get automatically organized into separate subfolders based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid "Setting up an OnionShare receiving service is useful for journalists and others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid "Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid "If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid "If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid "You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid "If you add an ``index.html`` file, when someone loads your website it will render this page. 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:89
+msgid "If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid "By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the \"Disable Content Security Policy header (allows your website to use third-party resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid "If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that you can resume the website with the same address if you close OnionShare and re-open it later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid "If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid "You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. Just open a chat tab and click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid "After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid "If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid "OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid "Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/nb_NO/LC_MESSAGES/help.po b/docs/source/locale/nb_NO/LC_MESSAGES/help.po
new file mode 100644
index 00000000..6499d5ec
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/help.po
@@ -0,0 +1,57 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid "This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid "If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid "If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an GitHub account <https://help.github.com/articles/signing-up-for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid "See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project."
+msgstr ""
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/index.po b/docs/source/locale/nb_NO/LC_MESSAGES/index.po
new file mode 100644
index 00000000..9dfa67f6
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/index.po
@@ -0,0 +1,25 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: none\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\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/nb_NO/LC_MESSAGES/install.po b/docs/source/locale/nb_NO/LC_MESSAGES/install.po
new file mode 100644
index 00000000..ddc85512
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/install.po
@@ -0,0 +1,101 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: nb_NO\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 "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid "Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid "Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid "You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid "Windows, macOS, and source packaged 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:34
+msgid "In order to verify signatures, you must have GnuPG installed. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid "You can find the signatures (``.asc`` files), as well as Windows, macOS, 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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid "If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid "If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful."
+msgstr ""
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/security.po b/docs/source/locale/nb_NO/LC_MESSAGES/security.po
new file mode 100644
index 00000000..f8e68082
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/security.po
@@ -0,0 +1,61 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid "First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service 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, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses 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.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents."
+msgstr ""
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/sphinx.po b/docs/source/locale/nb_NO/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..cf3d2f1c
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/sphinx.po
@@ -0,0 +1,25 @@
+# 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\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/tor.po b/docs/source/locale/nb_NO/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..642f6a64
--- /dev/null
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/tor.po
@@ -0,0 +1,235 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: 2020-09-14 21:36+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"Language: nb_NO\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"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr "Tilkobling til Tor"
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+"Det er flere måter å få OnionShare til å koble til Tor-nettverket. Du kan"
+" endre dem i «Innstillinger», som du kommer til ved å trykke på "
+"tannhjulsikonet nederst til høyre i vinduet."
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr "Bruk Tor som det kommer innebygd i OnionShare"
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+"Dette er den forvalgte måten OnionShare kobler til Tor, og det er også "
+"den enkleste og mest pålitelige måten. Derfor er det også anbefalt for de"
+" fleste brukerne."
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+"Når du åpner OnionShare, vil det starte en Tor-prosess i bakgrunnen som "
+"er satt opp spesifikt for bruk med OnionShare. Denne Tor-prosessen har "
+"ikke innvirkning på andre Tor-prosesser på datamaskinen din, så du kan "
+"kjøre en Tor-nettleser eller bruke systemets Tor i bakgrunnen."
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr "Forsøk automatisk oppsett med Tor-nettleseren"
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+"Du kan sette opp OnionShare til å koble til Tor som den kommer levert med"
+" Tor-nettleseren. Først `last ned Tor-nettleseren "
+"<https://www.torproject.org/download/languages/>`_ hvis du ikke har den "
+"allerede. Med denne innstillingen må du ha Tor-nettleseren åpen i "
+"bakgrunnen mens du bruker OnionShare."
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr "Bruk av systemets Tor i Windows"
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+"Dette er ganske avansert. Du må vite hvordan du redigerer filer i "
+"klartekst og gjøre ting som administrator."
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+#, fuzzy
+msgid "Using a system Tor in macOS"
+msgstr "Bruk av systemets Tor i Windows"
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr "Bruk av systemets Tor på Linux"
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr "Bruk av Tor-broer"
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr "For å sette opp broer, åpne OnionShare-innstillingene."
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr "Bruk av systemets Tor på macOS"
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/advanced.po b/docs/source/locale/nl/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/develop.po b/docs/source/locale/nl/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/features.po b/docs/source/locale/nl/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/nl/LC_MESSAGES/help.po b/docs/source/locale/nl/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" 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
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/nl/LC_MESSAGES/install.po b/docs/source/locale/nl/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/security.po b/docs/source/locale/nl/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/sphinx.po b/docs/source/locale/nl/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/nl/LC_MESSAGES/tor.po b/docs/source/locale/nl/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/nl/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/advanced.po b/docs/source/locale/pl/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/develop.po b/docs/source/locale/pl/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/features.po b/docs/source/locale/pl/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/pl/LC_MESSAGES/help.po b/docs/source/locale/pl/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/index.po b/docs/source/locale/pl/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/pl/LC_MESSAGES/install.po b/docs/source/locale/pl/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/security.po b/docs/source/locale/pl/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/sphinx.po b/docs/source/locale/pl/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/pl/LC_MESSAGES/tor.po b/docs/source/locale/pl/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/pl/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/develop.po b/docs/source/locale/pt_BR/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/features.po b/docs/source/locale/pt_BR/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/pt_BR/LC_MESSAGES/help.po b/docs/source/locale/pt_BR/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/index.po b/docs/source/locale/pt_BR/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/pt_BR/LC_MESSAGES/install.po b/docs/source/locale/pt_BR/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/security.po b/docs/source/locale/pt_BR/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/sphinx.po b/docs/source/locale/pt_BR/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/pt_BR/LC_MESSAGES/tor.po b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/pt_BR/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/advanced.po b/docs/source/locale/pt_PT/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/develop.po b/docs/source/locale/pt_PT/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/features.po b/docs/source/locale/pt_PT/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/pt_PT/LC_MESSAGES/help.po b/docs/source/locale/pt_PT/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/index.po b/docs/source/locale/pt_PT/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/pt_PT/LC_MESSAGES/install.po b/docs/source/locale/pt_PT/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/security.po b/docs/source/locale/pt_PT/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/sphinx.po b/docs/source/locale/pt_PT/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/pt_PT/LC_MESSAGES/tor.po b/docs/source/locale/pt_PT/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/pt_PT/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/advanced.po b/docs/source/locale/ro/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/develop.po b/docs/source/locale/ro/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/features.po b/docs/source/locale/ro/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ro/LC_MESSAGES/help.po b/docs/source/locale/ro/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/index.po b/docs/source/locale/ro/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ro/LC_MESSAGES/install.po b/docs/source/locale/ro/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/security.po b/docs/source/locale/ro/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/sphinx.po b/docs/source/locale/ro/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ro/LC_MESSAGES/tor.po b/docs/source/locale/ro/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ro/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/advanced.po b/docs/source/locale/ru/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ 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
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/features.po b/docs/source/locale/ru/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/ru/LC_MESSAGES/help.po b/docs/source/locale/ru/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/index.po b/docs/source/locale/ru/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/ru/LC_MESSAGES/install.po b/docs/source/locale/ru/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/security.po b/docs/source/locale/ru/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/sphinx.po b/docs/source/locale/ru/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/ru/LC_MESSAGES/tor.po b/docs/source/locale/ru/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/ru/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/advanced.po b/docs/source/locale/sr@latin/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/develop.po b/docs/source/locale/sr@latin/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/features.po b/docs/source/locale/sr@latin/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/sr@latin/LC_MESSAGES/help.po b/docs/source/locale/sr@latin/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/index.po b/docs/source/locale/sr@latin/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/sr@latin/LC_MESSAGES/install.po b/docs/source/locale/sr@latin/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/security.po b/docs/source/locale/sr@latin/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po b/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/sr@latin/LC_MESSAGES/tor.po b/docs/source/locale/sr@latin/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/sr@latin/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/advanced.po b/docs/source/locale/sv/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/develop.po b/docs/source/locale/sv/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/features.po b/docs/source/locale/sv/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/sv/LC_MESSAGES/help.po b/docs/source/locale/sv/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/index.po b/docs/source/locale/sv/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/sv/LC_MESSAGES/install.po b/docs/source/locale/sv/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/security.po b/docs/source/locale/sv/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/sphinx.po b/docs/source/locale/sv/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/sv/LC_MESSAGES/tor.po b/docs/source/locale/sv/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/sv/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/advanced.po b/docs/source/locale/te/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/develop.po b/docs/source/locale/te/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/features.po b/docs/source/locale/te/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/te/LC_MESSAGES/help.po b/docs/source/locale/te/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/index.po b/docs/source/locale/te/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/te/LC_MESSAGES/install.po b/docs/source/locale/te/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/security.po b/docs/source/locale/te/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/sphinx.po b/docs/source/locale/te/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/te/LC_MESSAGES/tor.po b/docs/source/locale/te/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/te/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/advanced.po b/docs/source/locale/tr/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/develop.po b/docs/source/locale/tr/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/features.po b/docs/source/locale/tr/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/tr/LC_MESSAGES/help.po b/docs/source/locale/tr/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/index.po b/docs/source/locale/tr/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/tr/LC_MESSAGES/install.po b/docs/source/locale/tr/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/security.po b/docs/source/locale/tr/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/sphinx.po b/docs/source/locale/tr/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/tr/LC_MESSAGES/tor.po b/docs/source/locale/tr/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/tr/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/uk/LC_MESSAGES/advanced.po b/docs/source/locale/uk/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..2aa4cb0f
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/advanced.po
@@ -0,0 +1,298 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-20 11:48-0700\n"
+"PO-Revision-Date: 2020-09-20 23:40+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr "Розширене використання"
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr "Збереження вкладок"
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+"Типово, все в OnionShare є тимчасовим. Тільки-но ви закриєте вкладку "
+"OnionShare, її адреса більше не існує і не може бути використана знову. "
+"Але іноді вам може знадобитися служба OnionShare, яка буде постійною. "
+"Наприклад, це буде корисно, якщо ви хочете розмістити вебсайт, який може "
+"зберегти ту саму URL-адресу, навіть якщо ви перезавантажите комп’ютер."
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+"Щоб зробити будь-яку вкладку постійною, позначте \"Зберегти цю вкладку та"
+" автоматично відкривати її, коли я відкриваю OnionShare\" перед запуском "
+"сервера. Коли вкладку збережено, ліворуч від стану сервера з’являється "
+"фіолетова піктограма у вигляді шпильки."
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+"Коли ви вийдете з OnionShare, а потім знову відкриєте його, збережені "
+"вкладки почнуть відкриватися. Вам доведеться власноруч запускати кожну "
+"службу, але коли ви це зробите, вони запустяться з тієї ж адреси "
+"OnionShare і з тим же паролем."
+
+#: ../../source/advanced.rst:17
+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."
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr "Вимкнення паролів"
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+"Типово усі служби OnionShare захищено іменем користувача `onionshare` та "
+"випадково сформованим паролем. Якщо хтось зробить 20 неправильних спроб "
+"введення пароля, вашу службу onion буди зупинено автоматично, щоб "
+"запобігти грубому нападу на службу OnionShare."
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+"Але іноді вам може знадобитися, щоб ваша служба OnionShare була "
+"загальнодоступною. Наприклад, якщо ви хочете налаштувати службу отримання"
+" OnionShare, щоб інші могли безпечно та анонімно надсилати вам файли. У "
+"цьому випадку краще взагалі вимкнути пароль. Якщо ви цього не зробите, "
+"хтось може змусити ваш сервер зупинитися, просто зробивши 20 неправильних"
+" спроб введення паролю, навіть якщо вони знають правильний пароль."
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr "Запланований час"
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+"OnionShare підтримує планування, коли саме служба повинна запускатися та "
+"зупинятися. Перш ніж запускати сервер, натисніть \"Показати розширені "
+"налаштування\" на його вкладці, а потім позначте \"Запускати службу onion"
+" у запланований час\", \"Зупинити службу onion у запланований час\" або "
+"обидва і встановіть бажані дати та час."
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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 для автоматичного запуску може "
+"використовуватися як кнопка мерця**, де вашу службу буде оприлюднено в "
+"певний час у майбутньому, якщо з вами щось станеться. Якщо з вами нічого "
+"не відбувається, ви можете вимкнути службу до запланованого запуску."
+
+#: ../../source/advanced.rst:41
+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 може бути корисним "
+"для обмеження надсилання**, наприклад, якщо ви хочете поділитися таємними"
+" документами й буди певними, що вони не доступні в Інтернеті впродовж "
+"більше кількох днів."
+
+#: ../../source/advanced.rst:46
+msgid "Command line interface"
+msgstr "Інтерфейс командного рядка"
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr "Окрім графічного інтерфейсу, OnionShare має інтерфейс командного рядка."
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr "Linux"
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+"Якщо встановити OnionShare за допомогою пакунку Flatpak, на жаль, "
+"інтерфейс командного рядка не підтримуватиметься."
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+"Якщо ви встановили OnionShare за допомогою пакунка операційної системи, "
+"ви можете просто запустити ``onionshare`` з термінала."
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr "macOS"
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+"Зробіть символічне посилання на двійковий OnionShare у командному рядку "
+"подібно до цього ::"
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr "Тепер ви можете запустити ``onionshare`` з термінала."
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr "Windows"
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr "Інтерфейс командного рядка не підтримується в Windows."
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+"Якщо ви все ж хочете ним скористатися, ви можете налаштувати середовище "
+"розробки Windows (подробиці :ref:`starting_development`), а потім "
+"запустити його в командному рядку::"
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr "Користування"
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+"Ви можете переглянути документацію командного рядка, запустивши "
+"``onionshare --help``::"
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr "Застарілі адреси"
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+"Типово, OnionShare використовує служби onion Tor v3. Це сучасні адреси "
+"onion, що мають 56 символів, наприклад::"
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+"Але він все ще підтримує адреси onion v2, старий тип адрес onion, які "
+"мають 16 символів, наприклад::"
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+"OnionShare називає адреси onion v2 \"застарілими адресами\". Адреси onion"
+" v3 безпечніші, а вживання старих адрес не рекомендовано."
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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 ""
+"Щоб вживати застарілі адреси, перед запуском сервера натисніть \"Показати"
+" розширені налаштування\" на його вкладці та позначте \"Користуватися "
+"застарілою адресою (служба onion v2, не рекомендовано)\". У застарілому "
+"режимі ви можете додатково ввімкнути автентифікацію клієнта Tor. Після "
+"запуску сервера у застарілому режимі ви не зможете вилучити застарілий "
+"режим у цій вкладці. Натомість ви повинні запустити окрему службу в "
+"окремій вкладці."
+
+#: ../../source/advanced.rst:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+"Проєкт Tor планує `повністю припинити роботу службами onion v2 "
+"<https://blog.torproject.org/v2-deprecation-timeline>`_ 15 жовтня 2021 "
+"р., а застарілі служби onion також скоро буде вилучено з OnionShare."
diff --git a/docs/source/locale/uk/LC_MESSAGES/develop.po b/docs/source/locale/uk/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..c60595af
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/develop.po
@@ -0,0 +1,328 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: 2020-09-20 02:39+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr "Розробка OnionShare"
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr "Співпраця"
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <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\"."
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<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>` _ для розробників та дизайнерів для обговорення "
+"проєкту."
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr "Внесок до кодової бази"
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+"Джерельний код OnionShare знаходиться у цьому сховищі git: https://github."
+"com/micahflee/onionshare"
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+"Якщо ви хочете допомогти кодом OnionShare, приєднайтеся до команди Keybase і "
+"поставте питання про те, над чим ви думаєте працювати. Ви також повинні "
+"переглянути всі `відкриті запити <https://github.com/micahflee/onionshare/"
+"issues>`_ на GitHub, щоб побачити, чи є такі, які ви хотіли б розробляти."
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+"Коли ви будете готові внести код, відкрийте запит надсилання до сховища "
+"GitHub і один із супровідників проєкту перегляне його та, можливо, поставить "
+"питання, попросить змінити щось, відхилить його або об’єднає з проєктом."
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr "Початок розробки"
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+"OnionShare розроблено на Python. Спочатку клонуйте сховище git за адресою "
+"https://github.com/micahflee/onionshare/, а потім перегляньте настанови у "
+"файлі ``BUILD.md``."
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr "Цей файл містить необхідні технічні настанови та команди:"
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr "Встановіть залежності для вашої платформи"
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr "Запустіть OnionShare з джерельного коду без створення пакунка"
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr "Створення пакунків"
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr "Випуск версії OnionShare"
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr "Поради щодо зневадження"
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr "Детальний режим"
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+"Під час розробки зручно запускати OnionShare з термінала та додати до "
+"команди прапор ``--verbose`` (або ``-v``). До термінала виводитиметься "
+"багато корисних повідомлень, наприклад, про ініціалізацію певних об'єктів, "
+"про події (наприклад, натискання кнопок, збереження або перезавантаження "
+"параметрів) та інші подробиці для зневаджування. Наприклад::"
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+"Ви можете додати власні повідомлення про зневадження, запустивши метод "
+"``Common.log`` з ``onionshare/common.py``. Наприклад::"
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+"Це може бути корисно для вивчення ланцюжка подій, що відбуваються під час "
+"користування програмою, або значень певних змінних до та після того, як ними "
+"маніпулюють."
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr "Лише локальні"
+
+#: ../../source/develop.rst:120
+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``. "
+"Наприклад::"
+
+#: ../../source/develop.rst:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+"У цьому випадку ви завантажуєте URL-адресу ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` у звичайному переглядачі, як-от Firefox, замість "
+"користування Tor Browser."
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr "Зневадження на Windows"
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+"Якщо ви хочете отримати вихідні дані зневадження з ``onionshare-gui.exe`` у "
+"Windows, вам потрібно змінити ``install\\pyinstaller.spec`` й змінити "
+"``console=False`` на ``console=True``."
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+"Потім перезберіть EXE за допомогою ``install\\build_exe.bat`` (можливо, вам "
+"доведеться закоментувати команди ``signtool`` у файлах ``build_exe.bat`` та "
+"``onionshare.nsi``, відповідно до настанов ``BUILD.md``)."
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+"Після цього ви можете запустити ``onionshare-gui.exe -v`` з командного "
+"рядка, щоб побачити подробиці зневадження."
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr "Допомога з перекладами"
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+"Більшість програм OnionShare можна перекласти. Ви можете допомогти зробити "
+"його простішим у користуванні та звичнішим і приємнішим для людей по всьому "
+"світу. Лабораторія локалізації має `документацію щодо перекладу OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+"OnionShare використовує Weblate для відстеження перекладів. Ви можете "
+"переглянути проєкт OnionShare тут: https://hosted.weblate.org/projects/"
+"onionshare/"
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+"Щоб допомогти перекласти, створіть обліковий запис на Hosted Weblate і "
+"почніть допомагати цьому проєкту."
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr "Пропозиції для джерельних рядків англійською"
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+"Іноді джерельні англійські рядки можна вдосконалити, щоб спростити їхній "
+"переклад іншими мовами."
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+"Якщо маєте пропозиції щодо поліпшення англійського рядка, відкрийте "
+"пропозицію на GitHub, а не коментуйте на Weblate. Це гарантує, що "
+"розробники, що працюють над проєктом, напевно побачать пропозицію та зможуть "
+"потенційно змінити рядок за допомогою звичайних процесів перегляду коду."
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr "Стан перекладів"
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+"Ось поточний стан перекладу. Якщо ви хочете розпочати переклад мовою, якої "
+"тут немає, будь ласка, напишіть нам до списку розсилки: onionshare-dev@lists."
+"riseup.net"
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr "Перекладіть файл .desktop"
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr "Ви також можете перекласти файл ``install/onionshare.desktop``."
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+"Дублюйте рядок, який починається на ``Comment=``. Додайте код мови до нового "
+"рядка, щоб він став ``Comment[lang]=`` (lang повинен бути вашою мовою). Ви "
+"можете побачити, які мовні коди використовуються для перекладу, переглянувши "
+"назви файлів ::"
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr "Зробіть те ж саме для інших неперекладених рядків."
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
diff --git a/docs/source/locale/uk/LC_MESSAGES/features.po b/docs/source/locale/uk/LC_MESSAGES/features.po
new file mode 100644
index 00000000..7db18a70
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/features.po
@@ -0,0 +1,389 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-20 02:39+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr "Як працює OnionShare"
+
+#: ../../source/features.rst:6
+msgid "OnionShare works by starting web servers locally on your own computer and making them accessible to other people as `Tor <https://www.torproject.org/>`_ `onion services <https://community.torproject.org/onion-services/>`_."
+msgstr ""
+"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 "You're responsible for securely sharing that URL using a communication channel of your choice like in an encrypted chat message, or using something less secure like a Twitter or Facebook message, depending on your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+"Ви несете відповідальність за безпечний доступ до цієї URL-адреси за "
+"допомогою вибраного вами каналу зв'язку, як-от у зашифрованому повідомленні "
+"чату, або за використання менш захищеного повідомлення, наприклад "
+"повідомлення Twitter або Facebook, залежно від вашої `моделі загрози "
+"<https://ssd.eff.org/en/module/your-security-plan>`_."
+
+#: ../../source/features.rst:14
+msgid "The people who you send the URL to must then copy and paste it into `Tor Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+"Люди, яким ви надсилаєте URL-адресу, повинні копіювати та вставити її до `"
+"Tor Browser <https://www.torproject.org/>`_, щоб отримати доступ до служби "
+"OnionShare."
+
+#: ../../source/features.rst:16
+msgid "With OnionShare, *your own computer is the web server*. If you run OnionShare on your laptop to send someone files, and then suspend your laptop before the files have been downloaded, the service will not be available until your laptop is unsuspended and connected to the internet again. OnionShare works best when working with people in real-time."
+msgstr ""
+"За допомогою OnionShare *ваш власний комп'ютер є вебсервером*. Якщо ви "
+"запустили OnionShare на своєму ноутбуці, щоб надіслати комусь файли, а потім "
+"призупинили роботу ноутбука до того, як файли буде завантажено, служба буде "
+"недоступна, доки ваш ноутбук не буде увімкнено та знову під’єднано до "
+"Інтернету. OnionShare найкраще працює для роботи з людьми в режимі реального "
+"часу."
+
+#: ../../source/features.rst:18
+msgid "Because your own computer is the web server, *no third party can access anything that happens in OnionShare*, not even the developers of OnionShare. It's completely private. And because OnionShare is based on Tor onion services too, it also protects your anonymity. See the :doc:`security design </security>` for more information."
+msgstr ""
+"Оскільки ваш власний комп'ютер є вебсервером, *ніхто сторонній не може "
+"отримати доступ до будь-чого, що відбувається в OnionShare*, навіть "
+"розробники OnionShare. Це цілковито приватно. Оскільки OnionShare теж "
+"базується на onion службах Tor, вашу анонімність також захищено. Докладніше "
+"про це :doc:`security design </security>`."
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr "Надсилання файлів"
+
+#: ../../source/features.rst:23
+msgid "You can use OnionShare to securely and anonymously send files and folders to people. Just 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:91
+msgid "After you add files, you'll see some settings. Make sure you choose the setting you're interested in first before you start sharing."
+msgstr ""
+"Після додавання файлів з'являться параметри. Перш ніж почати ділитися, обов’"
+"язково виберіть параметр, який вам потрібен."
+
+#: ../../source/features.rst:31
+msgid "By default, as soon as someone finishes downloading your files, OnionShare will automatically stop the server, completely removing the website from the internet. If you want to allow multiple people to download these files, uncheck the \"Stop sharing after files have been sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+"Типово, як тільки хтось закінчує завантажувати ваші файли, OnionShare "
+"автоматично зупиняє сервер, повністю вилучивши вебсайт з Інтернету. Якщо ви "
+"хочете дозволити кільком людям завантажувати ці файли, приберіть позначку "
+"біля пункту \"Закрити доступ, коли файли надіслано (приберіть позначку, щоб "
+"дозволити завантаження окремих файлів)\"."
+
+#: ../../source/features.rst:33
+msgid "Also, if you uncheck this box, people will be able to download individual files that you share rather than a single compressed version of all of the files."
+msgstr ""
+"Крім того, якщо прибрати цю позначку, користувачі зможуть завантажувати "
+"окремі файли, якими ви ділитесь, а не одну стиснуту версію всіх файлів."
+
+#: ../../source/features.rst:35
+msgid "When you're ready to share, click the \"Start sharing\" button. You can always click \"Stop sharing\", or quit OnionShare, to immediate take the website down. You can also click the up arrow icon in the top-right corner to show the history and progress of people downloading files from you."
+msgstr ""
+"Коли ви будете готові поділитися, натисніть кнопку \"Почати ділитися\". Ви "
+"завжди можете натиснути \"Зупинити надсилання\" або вийти з OnionShare, щоб "
+"негайно вимкнути вебсайт. Ви також можете натиснути піктограму зі стрілкою "
+"вгору у верхньому правому куті, щоб побачити історію та поступ надсилання "
+"файлів."
+
+#: ../../source/features.rst:39
+msgid "Now that you have a website that's sharing files, copy the address and send it to the person you want to receive the files. If the files need to stay secure, you should use an encrypted messaging app."
+msgstr ""
+"Тепер, коли у вас є вебсайт, з якого надсилаються файли, копіюйте адресу та "
+"надішліть її особі, якій ви хочете надіслати файли. Якщо файли повинні "
+"залишатися в безпеці, вам варто скористатися програмою зашифрованих "
+"повідомлень."
+
+#: ../../source/features.rst:41
+msgid "That person then must load the address in Tor Browser. After logging in with the random password that's included in the web address, they will be able to download the files directly from your computer by clicking the \"Download Files\" link in the corner."
+msgstr ""
+"Потім ця особа повинна завантажити адресу в Tor Browser. Після входу за "
+"випадковим паролем, який міститься у вебадресі, вони зможуть завантажити "
+"файли безпосередньо з вашого комп’ютера, натиснувши посилання \"Завантажити "
+"файли\" в кутку."
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr "Отримання файлів"
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other settings, and then click \"Start Receive Mode\"."
+msgstr ""
+"Ви можете використовувати OnionShare, щоб дозволити людям анонімно "
+"завантажувати файли безпосередньо на ваш комп’ютер, по суті, перетворивши "
+"його на анонімну скриньку. Відкрийте вкладку отримання, виберіть, куди "
+"потрібно завантажувати файли, та інші параметри, а потім натисніть "
+"\"Запустити режим отримання\"."
+
+#: ../../source/features.rst:52
+msgid "This will start the OnionShare service. Anyone that loads this address in Tor Browser will be able to upload files to your computer."
+msgstr ""
+"Запуститься служба OnionShare. Той, хто завантажить цю адресу в Tor Browser, "
+"зможе завантажувати файли на ваш комп’ютер."
+
+#: ../../source/features.rst:56
+msgid "You can also click the down arrow icon in the top-right corner to show the history and progress of people sending files to you."
+msgstr ""
+"Також можна клацнути піктограму зі стрілкою вниз у верхньому правому куті, "
+"щоб побачити історію і перебіг надсилання файлів."
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr "Ось як це виглядає для когось, хто надсилає вам файли."
+
+#: ../../source/features.rst:62
+msgid "When someone uploads files to your receive service, by default they get saved to a folder called ``OnionShare`` in your home folder on your computer, and they get automatically organized into separate subfolders based on the time that the files get uploaded."
+msgstr ""
+"Коли хтось завантажує файли до вашої службу отримання, типово вони "
+"зберігаються у теці з назвою ``OnionShare`` у вашій домашній теці на вашому "
+"комп'ютері та автоматично впорядковуються до окремих підтек залежно від часу "
+"завантаження файлів."
+
+#: ../../source/features.rst:64
+msgid "Setting up an OnionShare receiving service is useful for journalists and others that need 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 ""
+"Налаштування служби приймання OnionShare корисно для журналістів та інших "
+"осіб, яким потрібно безпечно приймати документи від анонімних джерел. "
+"Використовуючи таким чином, OnionShare як легку, простішу, не настільки "
+"безпечну версію `SecureDrop <https://securedrop.org/>`_, системи подання "
+"таємних повідомлень викривачів."
+
+#: ../../source/features.rst:67
+msgid "Use at your own risk"
+msgstr "Використовуйте на власний ризик"
+
+#: ../../source/features.rst:69
+msgid "Just like with malicious email attachments, it's possible that someone could try to hack 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, so use at your own risk."
+msgstr ""
+"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, хтось "
+"може спробує зламати ваш комп’ютер, завантаживши шкідливий файл до вашої "
+"служби OnionShare. OnionShare не додає жодних механізмів безпеки, щоб "
+"захистити вашу систему від шкідливих файлів, тому використовуйте її на свій "
+"страх і ризик."
+
+#: ../../source/features.rst:71
+msgid "If you receive an Office document or a PDF through OnionShare, you can convert these documents into PDFs that you know 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/>`_ disposable VM."
+msgstr ""
+"Якщо ви отримали документ Office або PDF-файл за допомогою OnionShare, ці "
+"документи можна перетворити на PDF-файли, які можна безпечно відкрити за "
+"допомогою `Dangerzone <https://dangerzone.rocks/>`_. Ви також можете "
+"захистити себе під час відкриття ненадійних документів, відкривши їх в "
+"одноразових віртуальних машинах `Tails <https://tails.boum.org/>`_ або в `"
+"Qubes <https://qubes-os.org/>`_."
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr "Поради щодо запуску служби отримання"
+
+#: ../../source/features.rst:76
+msgid "If you want to host your own anonymous dropbox using OnionShare, it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis."
+msgstr ""
+"Якщо ви хочете розмістити свою власну анонімну скриньку за допомогою "
+"OnionShare, рекомендовано робити це на окремому виділеному комп’ютері, який "
+"завжди ввімкнено та під'єднано до Інтернету, а не на тому, яким ви "
+"користуєтеся регулярно."
+
+#: ../../source/features.rst:78
+msgid "If you intend on advertising the OnionShare address on your website or social media profiles, then you should save the tab (see :ref:`save_tabs`) and run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+"Якщо ви маєте намір рекламувати адресу OnionShare на своєму вебсайті або в "
+"профілях соціальних мереж, вам слід зберегти вкладку (докладніше "
+":ref:`save_tabs`) і запустити її як загальнодоступну службу (докладніше "
+":ref:`disable_passwords`)."
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr "Розміщення вебсайту"
+
+#: ../../source/features.rst:83
+msgid "You can use OnionShare to host a static HTML website with just a click. Just open a website tab, drag in the files and folders that make up the static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+"Ви можете використовувати OnionShare для розміщення статичного вебсайту HTML "
+"лише одним натисканням миші. Просто відкрийте вкладку вебсайту, перетягніть "
+"файли та теки, що складають статичний вебсайт і натисніть кнопку \"Почати "
+"ділитися\", коли будете готові."
+
+#: ../../source/features.rst:87
+msgid "If you add an ``index.html`` file, when someone loads your website it will render this page. 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 ""
+"Якщо ви додасте файл ``index.html``, коли хтось завантажить ваш вебсайт, він "
+"покаже цю сторінку. Слід також включити будь-які інші файли HTML, файли CSS, "
+"файли JavaScript та зображення, що складають вебсайт. (Зверніть увагу, що "
+"OnionShare підтримує розміщення лише *статичних* вебсайтів. Він не може "
+"розміщувати вебсайти, які виконують код або використовують бази даних. Тож "
+"ви не можете, наприклад, використовувати WordPress.)"
+
+#: ../../source/features.rst:89
+msgid "If you don't have an ``index.html`` file, then it will show a directory listing instead, and people who load it can look through the files and download them."
+msgstr ""
+"Якщо у вас немає файлу ``index.html`` замість нього буде показано список "
+"каталогів, а люди, які завантажують його, зможуть оглядати файли та "
+"завантажувати їх."
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr "Політика безпеки вмісту"
+
+#: ../../source/features.rst:98
+msgid "By default OnionShare will help secure your website by setting a strict `Content Security Police <https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However this will prevent third-party content from loading inside the web page."
+msgstr ""
+"Типово OnionShare допоможе захистити ваш вебсайт, встановивши надійний "
+"заголовок `Content Security Police <https://en.wikipedia.org/wiki/"
+"Content_Security_Policy>`_. Однак, це запобігає завантаженню сторонніх "
+"матеріалів на вебсторінку."
+
+#: ../../source/features.rst:100
+msgid "If you want to load content from third-party websites, like assets or JavaScript libraries from CDNs, then you must check the \"Disable Content Security Policy header (allows your website to use third-party resources)\" box before starting the service."
+msgstr ""
+"Якщо ви хочете завантажити вміст зі сторонніх вебсайтів, як-от активи або "
+"бібліотеки JavaScript із CDN, то перед запуском служби потрібно встановити "
+"позначку \"Не надсилати заголовок політики безпеки вмісту (дозволяє вебсайту "
+"застосовувати сторонні ресурси)\"."
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr "Поради щодо запуску служби розміщення вебсайту"
+
+#: ../../source/features.rst:105
+msgid "If you want to host a long-term website using OnionShare (that isn't just to quickly show someone something), it's recommended that you do it on a separate, dedicated computer that's always powered on and connected to the internet, and not on the one you use on a regular basis. You should also save the tab (see :ref:`save_tabs`) so that 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:107
+msgid "If your website is intended to be viewed by the public, you should run it as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+"Якщо ваш вебсайт призначено для загального перегляду, вам слід запустити "
+"його як загальнодоступну службу (подробиці :ref:`disable_passwords`)."
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr "Спілкуйтеся таємно"
+
+#: ../../source/features.rst:112
+msgid "You can use OnionShare to set up a completely anonymous, secure chat room that doesn't log anything or leave any traces. Just open a chat tab and click \"Start chat server\"."
+msgstr ""
+"Ви можете застосовувати OnionShare для створення цілковито анонімної, "
+"захищеної кімнати чату, яка нічого не реєструє та не залишає слідів. Просто "
+"відкрийте вкладку чату та натисніть \"Запустити сервер чату\"."
+
+#: ../../source/features.rst:116
+msgid "After you start the server, copy the OnionShare address and send it to the people who will join this anonymous chat room. If it's important to limit exactly who can join, you should use an encrypted messaging app to send the OnionShare address."
+msgstr ""
+"Після запуску сервера копіюйте адресу OnionShare і надішліть її людям, які "
+"приєднаються до цієї анонімної кімнати чату. Якщо важливо обмежити коло, хто "
+"може приєднатися, ви повинні використовувати зашифровані програми обміну "
+"повідомленнями для надсилання адреси OnionShare."
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of Safest."
+msgstr ""
+"Люди можуть приєднатися до чату, завантаживши його адресу OnionShare у Tor "
+"Browser. Для чату потрібен JavasScript, тому всі, хто хоче взяти участь, "
+"повинні встановити рівень безпеки на Стандартний або Безпечніший замість "
+"Найбезпечніший."
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if others were already chatting in the room, because the chat history isn't saved anywhere."
+msgstr ""
+"Коли хтось приєднується до чату, йому присвоюється випадкове ім'я. Вони "
+"можуть змінити своє ім’я, ввівши нове ім’я у полі на лівій панелі та "
+"натиснувши клавішу Enter. Попередні повідомлення взагалі не з'являться, "
+"навіть якщо інші вже спілкувалися в чаті, оскільки історія чату ніде не "
+"зберігається."
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join the chat room are your friends."
+msgstr ""
+"Однак, якщо ви створюєте чат OnionShare і безпечно надсилаєте адресу лише "
+"невеликій групі надійних друзів за допомогою зашифрованих повідомлень, то ви "
+"можете бути обґрунтовано впевнені, що люди, які приєднуються до чату, є "
+"вашими друзями."
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr "Чим це корисно?"
+
+#: ../../source/features.rst:133
+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? Він залишає менше "
+"слідів."
+
+#: ../../source/features.rst:135
+msgid "If you send a message to a Signal group, for example, a copy of your message ends up on each device (the phones and computers, if they set up Signal Desktop) of each member of the group. Even if disappearing messages is enabled, it's hard to confirm that all copies of the messages were 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 this isn't a problem."
+msgstr ""
+"Наприклад, якщо ви надсилаєте повідомлення до групи в Signal, копія "
+"повідомлення потрапляє на кожен пристрій (телефони та комп’ютери, якщо на "
+"них встановлено Signal для комп'ютерів) кожного з учасників групи. Навіть "
+"якщо ввімкнено повідомлення що зникають, важко впевнитися, що всі копії "
+"повідомлень було фактично видалено з усіх пристроїв та з будь-яких інших "
+"місць (наприклад, баз даних сповіщень), до яких вони могли бути збережені. "
+"Чати OnionShare ніде не зберігають жодних повідомлень, тому це не проблема."
+
+#: ../../source/features.rst:137
+msgid "OnionShare chat rooms can also be useful for anonymous people wanting to chat securely with someone without needing to create any accounts. For example, a source can send an OnionShare address to a journalist using a disposable email address, and then wait for the journalist to join the chat room, all without compromosing their anonymity."
+msgstr ""
+"Чати OnionShare також можуть бути корисними для анонімних людей, які хочуть "
+"безпечно спілкуватися з кимось, не створюючи жодних облікових записів. "
+"Наприклад, джерело може надіслати журналісту адресу OnionShare за допомогою "
+"одноразової адреси електронної пошти, а потім зачекати, поки журналіст "
+"приєднається до чату і все це без шкоди для їхньої анонімности."
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr "Як працює шифрування?"
+
+#: ../../source/features.rst:142
+msgid "Because OnionShare relies on Tor onion services, connections between 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 ""
+"Оскільки OnionShare покладається на onion служби Tor, з’єднання між Tor "
+"Browser та OnionShare захищено наскрізним шифруванням (E2EE). Коли хтось "
+"публікує повідомлення в кімнаті чату OnionShare, він надсилає його на сервер "
+"через E2EE onion з'єднання, який потім надсилає його всім іншим учасникам "
+"чату за допомогою WebSockets через їхні E2EE onion з'єднання."
+
+#: ../../source/features.rst:144
+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."
diff --git a/docs/source/locale/uk/LC_MESSAGES/help.po b/docs/source/locale/uk/LC_MESSAGES/help.po
new file mode 100644
index 00000000..9f5d80e6
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/help.po
@@ -0,0 +1,73 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-18 06:51+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr "Довідка"
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr "Якщо вам потрібна допомога з OnionShare, виконайте ці настанови."
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr "Ознайомтеся з цим вебсайтом"
+
+#: ../../source/help.rst:9
+msgid "This website is full of instructions on how to use OnionShare. Look through all of the sections first to see if it answers your questions."
+msgstr ""
+"Цей вебсайт наповнено настановами щодо користування OnionShare. Спочатку "
+"перегляньте всі розділи, щоб дізнатися, чи відповідає він на ваші питання."
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr "Перегляньте наявні проблеми на GitHub"
+
+#: ../../source/help.rst:14
+msgid "If you can't find a solution in this website, please check the `GitHub issues <https://github.com/micahflee/onionshare/issues>`_. It's possible that someone else has encountered the same problem and has either raised it with the developers, or maybe even posted a solution."
+msgstr ""
+"Якщо ви не можете знайти розв'язок на цьому вебсайті, перегляньте `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. Можливо, хтось "
+"інший зіткнувся з тією ж проблемою, або запитав про неї у розробників, або, "
+"можливо, навіть опублікував розв'язок."
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr "Поставте своє питання"
+
+#: ../../source/help.rst:19
+msgid "If you can't find a solution to your problem, or you wish to ask a question or suggest a new feature, please `submit an issue <https://github.com/micahflee/onionshare/issues/new>`_. This requires `creating an 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:22
+msgid "Join our Keybase team"
+msgstr "Долучайтесь до нашої команди Keybase"
+
+#: ../../source/help.rst:24
+msgid "See :ref:`collaborating` for instructions on how to join our Keybase team that we use to discuss the project."
+msgstr ""
+"Читайте про :ref:`співпрацю`, щоб отримати вказівки щодо приєднання до нашої "
+"команди Keybase, яку ми використовуємо для обговорення проєкту."
diff --git a/docs/source/locale/uk/LC_MESSAGES/index.po b/docs/source/locale/uk/LC_MESSAGES/index.po
new file mode 100644
index 00000000..1e3d6b41
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/index.po
@@ -0,0 +1,31 @@
+# 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\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-09-14 23:50+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/index.rst:2
+msgid "OnionShare's documentation"
+msgstr "Документація OnionShare"
+
+#: ../../source/index.rst:6
+msgid "OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network."
+msgstr ""
+"OnionShare — це засіб з відкритим кодом, який дозволяє безпечно та анонімно "
+"обмінюватися файлами, розміщувати вебсайти та спілкуватися з друзями за "
+"допомогою мережі Tor."
diff --git a/docs/source/locale/uk/LC_MESSAGES/install.po b/docs/source/locale/uk/LC_MESSAGES/install.po
new file mode 100644
index 00000000..20212bb9
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/install.po
@@ -0,0 +1,144 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-18 06:51+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr "Встановлення"
+
+#: ../../source/install.rst:5
+msgid "Install on Windows or macOS"
+msgstr "Встановлення на Windows або macOS"
+
+#: ../../source/install.rst:7
+msgid "You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_."
+msgstr ""
+"Ви можете завантажити OnionShare для Windows та macOS із вебсайту `"
+"OnionShare website <https://onionshare.org/>`_."
+
+#: ../../source/install.rst:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr "Для додаткової безпеки перегляньте :ref:`verifying_sigs`."
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr "Встановлення на Linux за допомогою Flatpak"
+
+#: ../../source/install.rst:16
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use the Flatpak package. Flatpak ensures that you'll always use the most latest dependencies and run OnionShare inside of a sandbox."
+msgstr ""
+"Існують різні способи встановлення OnionShare для Linux, але рекомендованим "
+"способом є використання пакунку Flatpak. Flatpak гарантує, що ви завжди "
+"будете користуватися найновішими залежностями та запускати OnionShare "
+"всередині пісочниці."
+
+#: ../../source/install.rst:18
+msgid "Make sure you have ``flatpak`` installed and the Flathub repository added by following `these instructions <https://flatpak.org/setup/>`_ for your Linux distribution."
+msgstr ""
+"Переконайтесь, що у вас встановлено ``flatpak`` та додано сховище Flathub, "
+"дотримуючись `цих настанов <https://flatpak.org/setup/>`_ для вашого "
+"дистрибутива Linux."
+
+#: ../../source/install.rst:20
+msgid "Then install OnionShare from Flathub by following `the instructions here <https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+"Потім встановіть OnionShare із Flathub, дотримуючись `цих настанов "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr "Перевірка підписів PGP"
+
+#: ../../source/install.rst:27
+msgid "You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+"Ви можете переконатися, що завантажений пакунок для Windows, macOS або "
+"джерельний пакунок є законним і не підробленим, перевіривши його підпис PGP. "
+"Для Windows та macOS цей крок є необов’язковим, але забезпечує додатковий "
+"захист: встановлювачі також включають свої підписи для конкретної "
+"операційної системи, тож ви можете просто покластись лише на них, якщо "
+"хочете."
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr "Ключ підпису"
+
+#: ../../source/install.rst:32
+msgid "Windows, macOS, and source packaged 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 ""
+"Пакунки Windows, macOS та джерельні пакунки підписано основним розробником "
+"Micah Lee його відкритим ключем PGP із цифровим відбитком "
+"`927F419D7EC82C2F149C1BD1403C2657CD994F73``. Ви можете завантажити ключ "
+"Micah з сервера ключів keys.openpgp.org keyserver <https://keys.openpgp.org/"
+"vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+
+#: ../../source/install.rst:34
+msgid "In order to verify signatures, you must have GnuPG installed. For macOS you 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/>`_."
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr "Підписи"
+
+#: ../../source/install.rst:39
+msgid "You can find the signatures (``.asc`` files), as well as Windows, macOS, 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 ""
+"Ви можете знайти підписи (файли ``.asc``), а також пакунки Windows, macOS та "
+"джерельні пакунки за адресою https://onionshare.org/dist/ у теках, названих "
+"для кожної версії OnionShare. Ви також можете знайти їх на `сторінці "
+"випусків GitHub <https://github.com/micahflee/onionshare/releases>`_."
+
+#: ../../source/install.rst:42
+msgid "Verifying"
+msgstr "Перевірка"
+
+#: ../../source/install.rst:44
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary, and downloaded the ``.asc`` signature, you can verify the binary for macOS in terminal like this::"
+msgstr ""
+"Після того, як відкритий ключ Micah додано до вашої збірки ключів GnuPG, "
+"завантажено двійковий файл і завантажено підпис ``.asc``, ви можете "
+"перевірити двійковий файл для macOS в терміналі в такий спосіб::"
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr "Або для Windows у командному рядку у такий спосіб::"
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr "Очікуваний результат може виглядати так::"
+
+#: ../../source/install.rst:64
+msgid "If you don't see 'Good signature from', then there might be a problem with the integrity of the file (malicious or otherwise), and you perhaps should not install the package. (The WARNING shown above, is not a problem with the package: it only means you have not defined any level of 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+"Якщо ви не бачите 'Good signature from', можливо, проблема з цілісністю "
+"файлу (шкідлива чи інша), і, можливо, вам не слід встановлювати пакунок. ("
+"Вказане раніше ПОПЕРЕДЖЕННЯ не є проблемою з пакунком: воно означає лише, що "
+"ви не визначили жодного рівня 'довіри' щодо самого ключа PGP від Micah.)"
+
+#: ../../source/install.rst:66
+msgid "If you want to learn more about verifying PGP signatures, guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html.en>`_ may be helpful."
+msgstr ""
+"Якщо ви хочете дізнатися докладніше про перевірку підписів PGP, настанови "
+"для `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ та "
+"`Tor Project <https://2019.www.torproject.org/docs/verifying-signatures.html."
+"en>`_ можуть допомогти."
diff --git a/docs/source/locale/uk/LC_MESSAGES/security.po b/docs/source/locale/uk/LC_MESSAGES/security.po
new file mode 100644
index 00000000..7e1deb57
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/security.po
@@ -0,0 +1,118 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-18 06:51+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr "Побудова безпеки"
+
+#: ../../source/security.rst:4
+msgid "First read :ref:`how_it_works` to understand the basics of how OnionShare works."
+msgstr ""
+"Спочатку прочитайте :ref:`how_it_works`, щоб зрозуміти основи роботи "
+"OnionShare."
+
+#: ../../source/security.rst:6
+msgid "Like all software, OnionShare may contain bugs or vulnerabilities."
+msgstr ""
+"Як і все програмне забезпечення, OnionShare може містити вади або "
+"вразливості."
+
+#: ../../source/security.rst:9
+msgid "What OnionShare protects against"
+msgstr "Від чого захищає OnionShare"
+
+#: ../../source/security.rst:11
+msgid "**Third parties don't have access to anything that happens in OnionShare.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data."
+msgstr ""
+"**Сторонні особи не мають доступу до всього, що відбувається в OnionShare.** "
+"Коли ви користуєтеся OnionShare, ви розміщуєте служби безпосередньо на "
+"своєму комп’ютері. Наприклад, коли ви ділитесь файлами з OnionShare, ви не "
+"завантажуєте ці файли на жоден сервер, а коли ви запускаєте кімнату чату "
+"OnionShare, ваш комп'ютер сам є сервером чату. Традиційні способи обміну "
+"файлами або розгортання вебсайтів та чатів вимагають довіри до служби з "
+"доступом до ваших даних."
+
+#: ../../source/security.rst:13
+msgid "**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service key."
+msgstr ""
+"**Мережні підслуховувачі не можуть шпигувати за тим, що відбувається в "
+"OnionShare під час передачі.** Оскільки зв’язки між службами onion Tor і Tor "
+"Browser захищено наскрізним шифруванням, жоден зловмисник з мережі не може "
+"підслуховувати те, що відбувається в службі OnionShare. Якщо підслуховувача "
+"розміщено на боці користувача OnionShare, на боці користувача Tor Browser "
+"або на шкідливому вузлі Tor, вони бачитимуть лише трафік Tor. Якщо "
+"підслуховувач — це зловмисний вузол зустрічі, який використовується для "
+"з'єднання Tor Browser зі службою onion OnionShare, трафік буде зашифровано "
+"за допомогою ключа служби onion."
+
+#: ../../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 ""
+"**Анонімність користувачів OnionShare захищено Tor.** OnionShare і Tor "
+"Browser захищають анонімність користувачів. Поки користувач OnionShare "
+"анонімно з'єднується за допомогою адреси OnionShare з користувачами Tor "
+"Browser, користувачі Tor Browser та підслуховувачі не можуть дізнатись особу "
+"користувача OnionShare."
+
+#: ../../source/security.rst:17
+msgid "**If an attacker learns about the onion service, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses before OnionShare stops the server, preventing brute force attacks against the password."
+msgstr ""
+"**Якщо зловмисник досліджує службу onion, він все одно не може ні до чого "
+"отримати доступ.** Існують атаки проти мережі Tor, які можуть вираховувати "
+"служби onion. Навіть якщо хтось виявить адресу .onion служби onion "
+"OnionShare, він не зможе отримати до неї доступ, не знаючи також випадкового "
+"пароля служби (якщо, звичайно, користувачі OnionShare не вирішать вимкнути "
+"пароль та зробити його загальнодоступним). Пароль створюється шляхом вибору "
+"двох випадкових слів з переліку з 6800 слів, тобто 6800^2, або близько 46 "
+"мільйонів можливих паролів. Але вони можуть зробити лише 20 неправильних "
+"спроб, перш ніж OnionShare зупинить сервер, запобігаючи грубим намаганням "
+"зламати пароль."
+
+#: ../../source/security.rst:20
+msgid "What OnionShare doesn't protect against"
+msgstr "Від чого OnionShare не захищає"
+
+#: ../../source/security.rst:22
+msgid "**Communicating the OnionShare address might not be secure.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+"** Зв’язок з адресою OnionShare може бути ненадійним.** Користувач "
+"OnionShare несе відповідальність за безпечне передавання адреси OnionShare "
+"людям. Якщо вони надсилають його ненадійно (наприклад, через повідомлення "
+"електронної пошти, і їх електронна пошта контролюється зловмисником), "
+"підслуховувач дізнається, що вони використовують OnionShare. Якщо зловмисник "
+"завантажує адресу в Tor Browser раніше за законного одержувача, він зможе "
+"отримати доступ до служби. Якщо цей ризик є загрозливим для користувачів, їм "
+"необхідно знайти безпечніший спосіб передачі адреси, наприклад, зашифрованим "
+"електронним листом, чатом чи голосовим дзвінком. Це не обов'язково у "
+"випадках, коли OnionShare не використовується для чогось таємного."
+
+#: ../../source/security.rst:24
+msgid "**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents."
+msgstr ""
+"** Зв'язок з адресою OnionShare може бути не анонімним.** Хоча OnionShare і "
+"Tor Browser дозволяють отримати анонімність, якщо користувачі бажають "
+"залишатись анонімними, їм необхідно вжити додаткових заходів для "
+"забезпечення цього, під час повідомлення адреси OnionShare. Наприклад, їм "
+"може знадобитися використовувати Tor для створення нового анонімного "
+"облікового запису електронної пошти чи чату і входити до них лише через Tor, "
+"щоб користуватися ними для повідомлення адреси. Це не потрібно у випадках, "
+"коли немає потреби захищати анонімність, наприклад, колеги, які знають один "
+"одного, обмінюючись робочими документами."
diff --git a/docs/source/locale/uk/LC_MESSAGES/sphinx.po b/docs/source/locale/uk/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f975c617
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/sphinx.po
@@ -0,0 +1,28 @@
+# 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\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-03 11:37-0700\n"
+"PO-Revision-Date: 2020-09-14 23:50+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr "Версії"
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr "Мови"
diff --git a/docs/source/locale/uk/LC_MESSAGES/tor.po b/docs/source/locale/uk/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..77513c75
--- /dev/null
+++ b/docs/source/locale/uk/LC_MESSAGES/tor.po
@@ -0,0 +1,292 @@
+# 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>, 2020.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2020-09-17 09:38-0700\n"
+"PO-Revision-Date: 2020-09-20 02:39+0000\n"
+"Last-Translator: ihor_ck <igor_ck@outlook.com>\n"
+"Language-Team: none\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.3-dev\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr "З'єднання з Tor"
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+"Існує кілька способів з'єднання OnionShare з мережею Tor. Ви можете змінити "
+"їх у параметрах, до яких можна перейти, натиснувши піктограму шестірні внизу "
+"праворуч вікна."
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr "Використовуйте Tor, який постачається в комплекті з OnionShare"
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+"Це типовий і водночас найпростіший та найнадійніший спосіб з'єднання "
+"OnionShare з Tor. З цієї причини рекомендуємо його для більшості "
+"користувачів."
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+"Коли ви відкриєте OnionShare, він запустить процес Tor у фоновому режимі, "
+"який спеціально налаштований для використання OnionShare. Цей процес Tor не "
+"заважатиме іншим процесам Tor на вашому комп'ютері, тому ви можете запустити "
+"Tor Browser або використовувати системний Tor у фоновому режимі."
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr "Спробуйте автоматичну конфігурацію за допомогою Tor Browser"
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+"Ви можете налаштувати OnionShare для під'єднання до Tor, який постачається з "
+"Tor Browser. Спочатку `завантажте Tor Browser <https://www.torproject.org>`_ "
+"звідси, якщо у вас його ще немає. Якщо вибрано цей параметр, вам потрібно "
+"залишати Tor Browser відкритим у фоновому режимі під час користування "
+"OnionShare."
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr "Користування системним Tor на Windows"
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+"Це досить просунуто. Вам потрібно знати, як редагувати файли зі звичайним "
+"текстом та виконувати дії від імені адміністратором."
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+"Завантажте набір експерта Tor для Windows, який ви можете отримати `звідси "
+"<https://www.torproject.org/download/tor/>`_. Розархівуйте zip-файл і "
+"скопіюйте видобуту теку в ``C:\\Program Files (x86)\\`` і перейменуйте теку "
+"в ``tor-win32``, так що всередині цієї теки будуть теки ``Data`` та ``Tor``."
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+"Створіть пароль контрольного порту. Я буду використовувати своїм паролем ``"
+"comprised stumble rummage work avenging construct volatile``. Тепер "
+"відкрийте командний рядок як адміністратор і використовуйте ``tor.exe --hash-"
+"password``, щоб створити хеш вашого пароля. Наприклад::"
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+"Вивід хешованого пароля показано після деяких попереджень (якими ви можете "
+"знехтувати). У моєму випадку це було "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+"Тепер створіть новий текстовий файл в ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` та помістіть його до теки, замінивши ``HashedControlPassword``"
+" на той, який ви щойно створили:"
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+"В командному рядку адміністратора встановіть tor як службу, використовуючи "
+"відповідний файл ``torrc``, який ви щойно створили (дивіться `тут "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ для отримання "
+"додаткових подробиць про це). Як це::"
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr "Тепер ви використовуєте системний Tor на Windows!"
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+"Відкрийте OnionShare. Клацніть піктограму Параметри. У розділі \"Як "
+"OnionShare повинен з'єднуватися з Tor?\" виберіть \"Під'єднатися через порт "
+"керування\" та встановіть хостом порту управління ``127.0.0.1``, а портом "
+"``9051``. У розділі \"Параметри автентифікації Tor\" виберіть \"Пароль\" і "
+"встановіть пароль для свого пароля, в моєму випадку ``comprised stumble "
+"rummage work avenging construct volatile``. Натисніть кнопку \"Параметри "
+"тестування\". Якщо все піде добре, ви побачите успішне з'єднання з tor."
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr "Користування системним Tor на macOS"
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+"Спочатку встановіть `Homebrew, <http://brew.sh/>`_ якщо у вас його ще немає. "
+"Потім встановіть Tor::"
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr "Тепер налаштуйте Tor, щоб дозволити з'єднання з OnionShare::"
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr "І запустіть системну Tor-службу::"
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+"Відкрийте OnionShare. Клацніть піктограму Параметри. У розділі \"Як "
+"OnionShare повинен з'єднуватися з Tor?\" виберіть \"Під'єднуватися через "
+"файл сокета\" та встановіть для файлу сокета шлях ``/usr/local/var/run/tor/"
+"control.socket``. У розділі \"Параметри автентифікації Tor\" виберіть \"Без "
+"автентифікації або автентифікація через cookie\". Натисніть кнопку \"Тест "
+"налаштувань\". Якщо все піде добре, ви побачите успішне з'єднання з tor."
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr "Користування системним Tor на Linux"
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+"Спочатку встановіть пакунок tor. Якщо ви використовуєте Debian, Ubuntu або "
+"подібний дистрибутив Linux, я раджу вам використовувати `офіційне сховище "
+"<https://2019.www.torproject.org/docs/debian.html.en>`_. Наприклад, в Ubuntu "
+"20.04::"
+
+#: ../../source/tor.rst:78
+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 ""
+"Потім додайте користувача до групи, яка запускає процес Tor (у випадку з "
+"Debian і Ubuntu, ``debian-tor``) і налаштуйте OnionShare для під'єднання до "
+"файлу керування сокетом Tor вашої системи."
+
+#: ../../source/tor.rst:80
+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:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+"Перезавантажте комп'ютер. Після повторного завантаження відкрийте "
+"OnionShare. Клацніть піктограму Параметри. У розділі \"Як OnionShare повинен "
+"з'єднуватися з Tor?\" виберіть \"Під'єднуватися через файл сокета\" та "
+"встановіть для файлу сокета шлях ``/var/run/tor/control``. У розділі "
+"\"Параметри автентифікації Tor\" виберіть \"Без автентифікації або "
+"автентифікація через cookie\". Натисніть кнопку \"Тест налаштувань\". Якщо "
+"все піде добре, ви побачите успішне підключення до Tor."
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr "Користування мостами Tor"
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, 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:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr "Щоб налаштувати мости, відкрийте параметри OnionShare."
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+"Ви можете використовувати вбудовані під'єднувані транспорти obfs4, вбудовані "
+"під'єднувані транспорти meek_lite (Azure) або власні мости, які ви можете "
+"отримати від Tor `BridgeDB <https://bridges.torproject.org/>`_. Якщо вам "
+"потрібно використовувати міст, ви повинні спершу спробувати вбудовані obfs4."
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/advanced.po b/docs/source/locale/zh_CN/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/develop.po b/docs/source/locale/zh_CN/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/features.po b/docs/source/locale/zh_CN/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/zh_CN/LC_MESSAGES/help.po b/docs/source/locale/zh_CN/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/index.po b/docs/source/locale/zh_CN/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/zh_CN/LC_MESSAGES/install.po b/docs/source/locale/zh_CN/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/security.po b/docs/source/locale/zh_CN/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po b/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/zh_CN/LC_MESSAGES/tor.po b/docs/source/locale/zh_CN/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/zh_CN/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/advanced.po b/docs/source/locale/zh_TW/LC_MESSAGES/advanced.po
new file mode 100644
index 00000000..c3847657
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/advanced.po
@@ -0,0 +1,227 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-20 11: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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/advanced.rst:2
+msgid "Advanced usage"
+msgstr ""
+
+#: ../../source/advanced.rst:7
+msgid "Save tabs"
+msgstr ""
+
+#: ../../source/advanced.rst:9
+msgid ""
+"By default, everything in OnionShare is temporary. As soon as you close "
+"an OnionShare tab its address no longer exists and can't be used again. "
+"But sometimes you might want an OnionShare service to be persistent. For "
+"example, this would be useful if you want to host a website that can keep"
+" the same URL even if you reboot your computer."
+msgstr ""
+
+#: ../../source/advanced.rst:11
+msgid ""
+"To make any tab persistent, check the \"Save this tab, and automatically "
+"open it when I open OnionShare\" box before starting the server. When a "
+"tab is saved a purple pin icon appears to the left of its server status."
+msgstr ""
+
+#: ../../source/advanced.rst:15
+msgid ""
+"When you quit OnionShare and then open it again, your saved tabs will "
+"start out open. You'll have to manually start each service, but when you "
+"do they will start with the same OnionShare address, and with the same "
+"password."
+msgstr ""
+
+#: ../../source/advanced.rst:17
+msgid ""
+"If you save a tab, a copy of that tab's onion service secret key will be "
+"stored on your computer with your OnionShare settings."
+msgstr ""
+
+#: ../../source/advanced.rst:22
+msgid "Disable passwords"
+msgstr ""
+
+#: ../../source/advanced.rst:24
+msgid ""
+"By default, all OnionShare services are protected with the username "
+"`onionshare` and a randomly-generated password. If someone makes 20 wrong"
+" guesses of the password, your onion service is automatically stopped to "
+"prevent a brute force attack against the OnionShare service."
+msgstr ""
+
+#: ../../source/advanced.rst:26
+msgid ""
+"But sometimes you might want your OnionShare service to be accessible to "
+"the public. For example, if you want to set up an OnionShare receive "
+"service so the public can securely and anonymously send you files. In "
+"this case, it's better to disable the password altogether. If you don't "
+"do this, someone can force your server to stop just by making 20 wrong "
+"guesses of your password, even if they know the correct password."
+msgstr ""
+
+#: ../../source/advanced.rst:28
+msgid ""
+"To disable 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:31
+msgid "Scheduled times"
+msgstr ""
+
+#: ../../source/advanced.rst:33
+msgid ""
+"OnionShare supports scheduling exactly when a service should start and "
+"stop. Before starting 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 desired dates and times."
+msgstr ""
+
+#: ../../source/advanced.rst:35
+msgid ""
+"If you scheduled a service to start in the future, when you click the "
+"start button you will see a timer counting down until it will start. 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:37
+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:41
+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:46
+msgid "Command line interface"
+msgstr ""
+
+#: ../../source/advanced.rst:48
+msgid ""
+"In addition to its graphical interface, OnionShare has a command line "
+"interface."
+msgstr ""
+
+#: ../../source/advanced.rst:51
+msgid "Linux"
+msgstr ""
+
+#: ../../source/advanced.rst:53
+msgid ""
+"If you installed OnionShare using the Flatpak package, unfortunately the "
+"command line interface isn't supported."
+msgstr ""
+
+#: ../../source/advanced.rst:55
+msgid ""
+"If you installed OnionShare using an operating system package, you can "
+"just run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:58
+msgid "macOS"
+msgstr ""
+
+#: ../../source/advanced.rst:60
+msgid "Make a symbolic link to the OnionShare command line binary like this::"
+msgstr ""
+
+#: ../../source/advanced.rst:64
+msgid "Now you can run ``onionshare`` from the terminal."
+msgstr ""
+
+#: ../../source/advanced.rst:67
+msgid "Windows"
+msgstr ""
+
+#: ../../source/advanced.rst:69
+msgid "The command line interface isn't supported in Windows."
+msgstr ""
+
+#: ../../source/advanced.rst:71
+msgid ""
+"If you really want to use it anyway, you can set up a Windows development"
+" environment (see :ref:`starting_development`) and then run this in a "
+"command prompt::"
+msgstr ""
+
+#: ../../source/advanced.rst:76
+msgid "Usage"
+msgstr ""
+
+#: ../../source/advanced.rst:78
+msgid "You can see command line documentation by running ``onionshare --help``::"
+msgstr ""
+
+#: ../../source/advanced.rst:134
+msgid "Legacy addresses"
+msgstr ""
+
+#: ../../source/advanced.rst:136
+msgid ""
+"OnionShare uses v3 Tor onion services by default. These are modern onion "
+"addresses that have 56 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:140
+msgid ""
+"But it still has support for v2 onion addresses, the old type of onion "
+"addresses that have 16 characters, for example::"
+msgstr ""
+
+#: ../../source/advanced.rst:144
+msgid ""
+"OnionShare calls v2 onion addresses \"legacy addresses\". v3 onion "
+"addresses are more secure, and using legacy addresses is not recommended."
+msgstr ""
+
+#: ../../source/advanced.rst:146
+msgid ""
+"To use legacy addresses, before starting a server click \"Show advanced "
+"settings\" in its tab and check the \"Use a legacy address (v2 onion "
+"service, not recommended)\" box. In legacy mode you can optionally enable"
+" 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:148
+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 soon be removed from OnionShare as "
+"well."
+msgstr ""
+
+#~ msgid "Make a symbolic link to the OnionShare command line binary line this::"
+#~ msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/develop.po b/docs/source/locale/zh_TW/LC_MESSAGES/develop.po
new file mode 100644
index 00000000..f20ff51c
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/develop.po
@@ -0,0 +1,256 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/develop.rst:2
+msgid "Developing OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:7
+msgid "Collaborating"
+msgstr ""
+
+#: ../../source/develop.rst:9
+msgid ""
+"OnionShare has an open Keybase team that we use to discuss the project, "
+"including asking questions, sharing ideas and designs, and making plans "
+"for future development. (It's also an easy way to send end-to-end "
+"encrypted direct messages to others in the OnionShare community, like "
+"OnionShare addresses.) To use Keybase, you need to download the `Keybase "
+"app <https://keybase.io/download>`_, make an account, and `join this team"
+" <https://keybase.io/team/onionshare>`_. Within the app, go to Teams, "
+"click \"Join a Team\", and type \"onionshare\"."
+msgstr ""
+
+#: ../../source/develop.rst:11
+msgid ""
+"OnionShare also has a `mailing list "
+"<https://lists.riseup.net/www/subscribe/onionshare-dev>`_ for developers "
+"and and designers to discuss the project."
+msgstr ""
+
+#: ../../source/develop.rst:14
+msgid "Contributing code"
+msgstr ""
+
+#: ../../source/develop.rst:16
+msgid ""
+"OnionShare source code is in this git repository: "
+"https://github.com/micahflee/onionshare"
+msgstr ""
+
+#: ../../source/develop.rst:18
+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 that you'd like to develop."
+msgstr ""
+
+#: ../../source/develop.rst:20
+msgid ""
+"When you're ready to contribute code, open a pull request in the GitHub "
+"repository and one of the project maintainers will review it and possible"
+" ask questions, request changes, reject it, or merge it into the project."
+msgstr ""
+
+#: ../../source/develop.rst:25
+msgid "Starting development"
+msgstr ""
+
+#: ../../source/develop.rst:27
+msgid ""
+"OnionShare is developed in Python. To get started, you should clone the "
+"git repository at https://github.com/micahflee/onionshare/ and then "
+"consult the ``BUILD.md`` file."
+msgstr ""
+
+#: ../../source/develop.rst:29
+msgid "That file contains the technical instructions and commands necessary:"
+msgstr ""
+
+#: ../../source/develop.rst:31
+msgid "Install dependencies for your platform"
+msgstr ""
+
+#: ../../source/develop.rst:32
+msgid "Run OnionShare from the source tree, without building a package"
+msgstr ""
+
+#: ../../source/develop.rst:33
+msgid "Building packages"
+msgstr ""
+
+#: ../../source/develop.rst:34
+msgid "Making a release of OnionShare"
+msgstr ""
+
+#: ../../source/develop.rst:37
+msgid "Debugging tips"
+msgstr ""
+
+#: ../../source/develop.rst:40
+msgid "Verbose mode"
+msgstr ""
+
+#: ../../source/develop.rst:42
+msgid ""
+"When developing, it's convenient to run OnionShare from a terminal and "
+"add the ``--verbose`` (or ``-v``) flag to the command. This will print 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 information. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:111
+msgid ""
+"You can add your own debug messages by running the ``Common.log`` method "
+"from ``onionshare/common.py``. For example::"
+msgstr ""
+
+#: ../../source/develop.rst:115
+msgid ""
+"This can be useful when learning the chain of events that occur when "
+"using the application or the value of certain variables before and after "
+"they are manipulated."
+msgstr ""
+
+#: ../../source/develop.rst:118
+msgid "Local only"
+msgstr ""
+
+#: ../../source/develop.rst:120
+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:157
+msgid ""
+"In this case, you load the URL ``http://onionshare:eject-"
+"snack@127.0.0.1:17614`` in a normal web browser like Firefox, instead of "
+"using Tor Browser."
+msgstr ""
+
+#: ../../source/develop.rst:160
+msgid "Debugging in Windows"
+msgstr ""
+
+#: ../../source/develop.rst:162
+msgid ""
+"If you want to obtain debug output from the ``onionshare-gui.exe`` in "
+"Windows, you will need to edit ``install\\pyinstaller.spec`` and change "
+"``console=False`` to ``console=True``."
+msgstr ""
+
+#: ../../source/develop.rst:164
+msgid ""
+"Then rebuild the EXE with ``install\\build_exe.bat`` (you may need to "
+"comment out the ``signtool`` commands in the ``build_exe.bat`` and the "
+"``onionshare.nsi`` files, as per the ``BUILD.md`` instructions)."
+msgstr ""
+
+#: ../../source/develop.rst:166
+msgid ""
+"After this, you can run ``onionshare-gui.exe -v`` from a command prompt "
+"to see the debug output."
+msgstr ""
+
+#: ../../source/develop.rst:169
+msgid "Contributing translations"
+msgstr ""
+
+#: ../../source/develop.rst:171
+msgid ""
+"Most of the OnionShare is translatable. You can help make it easier to "
+"use and more familiar and welcoming for people around the globe. The "
+"Localization Lab has some `documentation about translating OnionShare "
+"<https://wiki.localizationlab.org/index.php/OnionShare>`_."
+msgstr ""
+
+#: ../../source/develop.rst:173
+msgid ""
+"OnionShare uses Weblate to keep track of translations. You can view the "
+"OnionShare project here: https://hosted.weblate.org/projects/onionshare/"
+msgstr ""
+
+#: ../../source/develop.rst:175
+msgid ""
+"To help translate, make a Hosted Weblate account and start contributing "
+"to that project."
+msgstr ""
+
+#: ../../source/develop.rst:178
+msgid "Suggestions for original English strings"
+msgstr ""
+
+#: ../../source/develop.rst:180
+msgid ""
+"Sometimes the original English strings could be improved, making them "
+"easier to translate into other languages."
+msgstr ""
+
+#: ../../source/develop.rst:182
+msgid ""
+"If you have suggestions for a better English string, please open a GitHub"
+" issue rather than commenting in Weblate. This ensures the upstream "
+"developers will definitely see the suggestion, and can potentially modify"
+" the string via the usual code review processes."
+msgstr ""
+
+#: ../../source/develop.rst:185
+msgid "Status of translations"
+msgstr ""
+
+#: ../../source/develop.rst:186
+msgid ""
+"Here is the current translation status. If you want start a translation "
+"in a language not to be found here, please write us to the mailing list: "
+"onionshare-dev@lists.riseup.net"
+msgstr ""
+
+#: ../../source/develop.rst:191
+msgid "Translate the .desktop file"
+msgstr ""
+
+#: ../../source/develop.rst:193
+msgid "You can also translate the ``install/onionshare.desktop`` file."
+msgstr ""
+
+#: ../../source/develop.rst:195
+msgid ""
+"Duplicate the line that begins with ``Comment=``. Add the language code "
+"to the new line so it becomes ``Comment[lang]=`` (lang should be your "
+"language). You can see what language codes are used for translation by "
+"looking at the ``share/locale/*.json`` filenames::"
+msgstr ""
+
+#: ../../source/develop.rst:200
+msgid "Do the same for other untranslated lines."
+msgstr ""
+
+#~ msgid ""
+#~ "OnionShare is developed in Python. To"
+#~ " get started, you should close the"
+#~ " git repository at "
+#~ "https://github.com/micahflee/onionshare/ and then "
+#~ "consult the ``BUILD.md`` file."
+#~ msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/features.po b/docs/source/locale/zh_TW/LC_MESSAGES/features.po
new file mode 100644
index 00000000..29841dd8
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/features.po
@@ -0,0 +1,382 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/features.rst:4
+msgid "How OnionShare works"
+msgstr ""
+
+#: ../../source/features.rst:6
+msgid ""
+"OnionShare works by starting web servers locally on your own computer and"
+" making them accessible to other people as `Tor "
+"<https://www.torproject.org/>`_ `onion services "
+"<https://community.torproject.org/onion-services/>`_."
+msgstr ""
+
+#: ../../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 ""
+
+#: ../../source/features.rst:12
+msgid ""
+"You're responsible for securely sharing that URL using a communication "
+"channel of your choice like in an encrypted chat message, or using "
+"something less secure like a Twitter or Facebook message, depending on "
+"your `threat model <https://ssd.eff.org/en/module/your-security-plan>`_."
+msgstr ""
+
+#: ../../source/features.rst:14
+msgid ""
+"The people who you send the URL to must then copy and paste it into `Tor "
+"Browser <https://www.torproject.org/>`_ to access the OnionShare service."
+msgstr ""
+
+#: ../../source/features.rst:16
+msgid ""
+"With OnionShare, *your own computer is the web server*. If you run "
+"OnionShare on your laptop to send someone files, and then suspend your "
+"laptop before the files have been downloaded, the service will not be "
+"available until your laptop is unsuspended and connected to the internet "
+"again. OnionShare works best when working with people in real-time."
+msgstr ""
+
+#: ../../source/features.rst:18
+msgid ""
+"Because your own computer is the web server, *no third party can access "
+"anything that happens in OnionShare*, not even the developers of "
+"OnionShare. It's completely private. And because OnionShare is based on "
+"Tor onion services too, it also protects your anonymity. See the "
+":doc:`security design </security>` for more information."
+msgstr ""
+
+#: ../../source/features.rst:21
+msgid "Share Files"
+msgstr ""
+
+#: ../../source/features.rst:23
+msgid ""
+"You can use OnionShare to securely and anonymously send files and folders"
+" to people. Just open a share tab, drag in the files and folders you wish"
+" to share, and click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:27 ../../source/features.rst:91
+msgid ""
+"After you add files, you'll see some settings. Make sure you choose the "
+"setting you're interested in first before you start sharing."
+msgstr ""
+
+#: ../../source/features.rst:31
+msgid ""
+"By default, as soon as someone finishes downloading your files, "
+"OnionShare will automatically stop the server, completely removing the "
+"website from the internet. If you want to allow multiple people to "
+"download these files, uncheck the \"Stop sharing after files have been "
+"sent (uncheck to allow downloading individual files)\" box."
+msgstr ""
+
+#: ../../source/features.rst:33
+msgid ""
+"Also, if you uncheck this box, people will be able to download individual"
+" files that you share rather than a single compressed version of all of "
+"the files."
+msgstr ""
+
+#: ../../source/features.rst:35
+msgid ""
+"When you're ready to share, click the \"Start sharing\" button. You can "
+"always click \"Stop sharing\", or quit OnionShare, to immediate take the "
+"website down. You can also click the up arrow icon in the top-right "
+"corner to show the history and progress of people downloading files from "
+"you."
+msgstr ""
+
+#: ../../source/features.rst:39
+msgid ""
+"Now that you have a website that's sharing files, copy the address and "
+"send it to the person you want to receive the files. If the files need to"
+" stay secure, you should use an encrypted messaging app."
+msgstr ""
+
+#: ../../source/features.rst:41
+msgid ""
+"That person then must load the address in Tor Browser. After logging in "
+"with the random password that's included in the web address, they will be"
+" able to download the files directly from your computer by clicking the "
+"\"Download Files\" link in the corner."
+msgstr ""
+
+#: ../../source/features.rst:46
+msgid "Receive Files"
+msgstr ""
+
+#: ../../source/features.rst:48
+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 files to get downloaded and other "
+"settings, and then click \"Start Receive Mode\"."
+msgstr ""
+
+#: ../../source/features.rst:52
+msgid ""
+"This will start the OnionShare service. Anyone that loads this address in"
+" Tor Browser will be able to upload files to your computer."
+msgstr ""
+
+#: ../../source/features.rst:56
+msgid ""
+"You can also click the down arrow icon in the top-right corner to show "
+"the history and progress of people sending files to you."
+msgstr ""
+
+#: ../../source/features.rst:58
+msgid "Here is what it looks like for someone sending you files."
+msgstr ""
+
+#: ../../source/features.rst:62
+msgid ""
+"When someone uploads files to your receive service, by default they get "
+"saved to a folder called ``OnionShare`` in your home folder on your "
+"computer, and they get automatically organized into separate subfolders "
+"based on the time that the files get uploaded."
+msgstr ""
+
+#: ../../source/features.rst:64
+msgid ""
+"Setting up an OnionShare receiving service is useful for journalists and "
+"others that need 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:67
+msgid "Use at your own risk"
+msgstr ""
+
+#: ../../source/features.rst:69
+msgid ""
+"Just like with malicious email attachments, it's possible that someone "
+"could try to hack 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, so use at your own risk."
+msgstr ""
+
+#: ../../source/features.rst:71
+msgid ""
+"If you receive an Office document or a PDF through OnionShare, you can "
+"convert these documents into PDFs that you know 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/>`_ "
+"disposable VM."
+msgstr ""
+
+#: ../../source/features.rst:74
+msgid "Tips for running a receive service"
+msgstr ""
+
+#: ../../source/features.rst:76
+msgid ""
+"If you want to host your own anonymous dropbox using OnionShare, it's "
+"recommended that you do it on a separate, dedicated computer that's "
+"always powered on and connected to the internet, and not on the one you "
+"use on a regular basis."
+msgstr ""
+
+#: ../../source/features.rst:78
+msgid ""
+"If you intend on advertising the OnionShare address on your website or "
+"social media profiles, then you should save the tab (see "
+":ref:`save_tabs`) and run it as a public service (see "
+":ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:81
+msgid "Host a Website"
+msgstr ""
+
+#: ../../source/features.rst:83
+msgid ""
+"You can use OnionShare to host a static HTML website with just a click. "
+"Just open a website tab, drag in the files and folders that make up the "
+"static website, and click when you're ready click \"Start sharing\"."
+msgstr ""
+
+#: ../../source/features.rst:87
+msgid ""
+"If you add an ``index.html`` file, when someone loads your website it "
+"will render this page. 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:89
+msgid ""
+"If you don't have an ``index.html`` file, then it will show a directory "
+"listing instead, and people who load it can look through the files and "
+"download them."
+msgstr ""
+
+#: ../../source/features.rst:96
+msgid "Content Security Policy"
+msgstr ""
+
+#: ../../source/features.rst:98
+msgid ""
+"By default OnionShare will help secure your website by setting a strict "
+"`Content Security Police "
+"<https://en.wikipedia.org/wiki/Content_Security_Policy>`_ header. However"
+" this will prevent third-party content from loading inside the web page."
+msgstr ""
+
+#: ../../source/features.rst:100
+msgid ""
+"If you want to load content from third-party websites, like assets or "
+"JavaScript libraries from CDNs, then you must check the \"Disable Content"
+" Security Policy header (allows your website to use third-party "
+"resources)\" box before starting the service."
+msgstr ""
+
+#: ../../source/features.rst:103
+msgid "Tips for running a website service"
+msgstr ""
+
+#: ../../source/features.rst:105
+msgid ""
+"If you want to host a long-term website using OnionShare (that isn't just"
+" to quickly show someone something), it's recommended that you do it on a"
+" separate, dedicated computer that's always powered on and connected to "
+"the internet, and not on the one you use on a regular basis. You should "
+"also save the tab (see :ref:`save_tabs`) so that you can resume the "
+"website with the same address if you close OnionShare and re-open it "
+"later."
+msgstr ""
+
+#: ../../source/features.rst:107
+msgid ""
+"If your website is intended to be viewed by the public, you should run it"
+" as a public service (see :ref:`disable_passwords`)."
+msgstr ""
+
+#: ../../source/features.rst:110
+msgid "Chat Anonymously"
+msgstr ""
+
+#: ../../source/features.rst:112
+msgid ""
+"You can use OnionShare to set up a completely anonymous, secure chat room"
+" that doesn't log anything or leave any traces. Just open a chat tab and "
+"click \"Start chat server\"."
+msgstr ""
+
+#: ../../source/features.rst:116
+msgid ""
+"After you start the server, copy the OnionShare address and send it to "
+"the people who will join this anonymous chat room. If it's important to "
+"limit exactly who can join, you should use an encrypted messaging app to "
+"send the OnionShare address."
+msgstr ""
+
+#: ../../source/features.rst:120
+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 set their security level to Standard or Safer instead of"
+" Safest."
+msgstr ""
+
+#: ../../source/features.rst:122
+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 enter. No chat history will get displayed at all, even if "
+"others were already chatting in the room, because the chat history isn't "
+"saved anywhere."
+msgstr ""
+
+#: ../../source/features.rst:126
+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:128
+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, then you can be reasonably confident that the people who join "
+"the chat room are your friends."
+msgstr ""
+
+#: ../../source/features.rst:131
+msgid "How is this useful?"
+msgstr ""
+
+#: ../../source/features.rst:133
+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:135
+msgid ""
+"If you send a message to a Signal group, for example, a copy of your "
+"message ends up on each device (the phones and computers, if they set up "
+"Signal Desktop) of each member of the group. Even if disappearing "
+"messages is enabled, it's hard to confirm that all copies of the messages"
+" were 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 this isn't a problem."
+msgstr ""
+
+#: ../../source/features.rst:137
+msgid ""
+"OnionShare chat rooms can also be useful for anonymous people wanting to "
+"chat securely with someone without needing to create any accounts. For "
+"example, a source can send an OnionShare address to a journalist using a "
+"disposable email address, and then wait for the journalist to join the "
+"chat room, all without compromosing their anonymity."
+msgstr ""
+
+#: ../../source/features.rst:140
+msgid "How does the encryption work?"
+msgstr ""
+
+#: ../../source/features.rst:142
+msgid ""
+"Because OnionShare relies on Tor onion services, connections between 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:144
+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/source/locale/zh_TW/LC_MESSAGES/help.po b/docs/source/locale/zh_TW/LC_MESSAGES/help.po
new file mode 100644
index 00000000..d965eb13
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/help.po
@@ -0,0 +1,72 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/help.rst:2
+msgid "Getting Help"
+msgstr ""
+
+#: ../../source/help.rst:4
+msgid "If you need help with OnionShare, please follow the instructions below."
+msgstr ""
+
+#: ../../source/help.rst:7
+msgid "Read this website"
+msgstr ""
+
+#: ../../source/help.rst:9
+msgid ""
+"This website is full of instructions on how to use OnionShare. Look "
+"through all of the sections first to see if it answers your questions."
+msgstr ""
+
+#: ../../source/help.rst:12
+msgid "Check the GitHub issues"
+msgstr ""
+
+#: ../../source/help.rst:14
+msgid ""
+"If you can't find a solution in this website, please check the `GitHub "
+"issues <https://github.com/micahflee/onionshare/issues>`_. It's possible "
+"that someone else has encountered the same problem and has either raised "
+"it with the developers, or maybe even posted a solution."
+msgstr ""
+
+#: ../../source/help.rst:17
+msgid "Submit an issue yourself"
+msgstr ""
+
+#: ../../source/help.rst:19
+msgid ""
+"If you can't find a solution to your problem, or you wish to ask a "
+"question or suggest a new feature, please `submit an issue "
+"<https://github.com/micahflee/onionshare/issues/new>`_. This requires "
+"`creating an GitHub account <https://help.github.com/articles/signing-up-"
+"for-a-new-github-account/>`_."
+msgstr ""
+
+#: ../../source/help.rst:22
+msgid "Join our Keybase team"
+msgstr ""
+
+#: ../../source/help.rst:24
+msgid ""
+"See :ref:`collaborating` for instructions on how to join our Keybase team"
+" that we use to discuss the project."
+msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/index.po b/docs/source/locale/zh_TW/LC_MESSAGES/index.po
new file mode 100644
index 00000000..2ad2653c
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/index.po
@@ -0,0 +1,29 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\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/zh_TW/LC_MESSAGES/install.po b/docs/source/locale/zh_TW/LC_MESSAGES/install.po
new file mode 100644
index 00000000..a2f5b321
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/install.po
@@ -0,0 +1,143 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Install on 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:9
+msgid "For added security, see :ref:`verifying_sigs`."
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "Install in Linux with Flatpak"
+msgstr ""
+
+#: ../../source/install.rst:16
+msgid ""
+"There are various ways to install OnionShare for Linux, but the "
+"recommended way is to use the Flatpak package. Flatpak ensures that "
+"you'll always use the most latest dependencies and run OnionShare inside "
+"of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:18
+msgid ""
+"Make sure you have ``flatpak`` installed and the Flathub repository added"
+" by following `these instructions <https://flatpak.org/setup/>`_ for your"
+" Linux distribution."
+msgstr ""
+
+#: ../../source/install.rst:20
+msgid ""
+"Then install OnionShare from Flathub by following `the instructions here "
+"<https://flathub.org/apps/details/org.onionshare.OnionShare>`_."
+msgstr ""
+
+#: ../../source/install.rst:25
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:27
+msgid ""
+"You can verify that the Windows, macOS, or source 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 installers also include their operating system-specific "
+"signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:32
+msgid ""
+"Windows, macOS, and source packaged 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:34
+msgid ""
+"In order to verify signatures, you must have GnuPG installed. For macOS "
+"you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows "
+"you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:37
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:39
+msgid ""
+"You can find the signatures (``.asc`` files), as well as Windows, macOS, "
+"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:42
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:44
+msgid ""
+"Once you have imported Micah's public key into your GnuPG keychain, "
+"downloaded the binary, and downloaded the ``.asc`` signature, you can "
+"verify the binary for macOS in terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:48
+msgid "Or for Windows in a command prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:52
+msgid "An expected output might look like this::"
+msgstr ""
+
+#: ../../source/install.rst:64
+msgid ""
+"If you don't see 'Good signature from', then there might be a problem "
+"with the integrity of the file (malicious or otherwise), and you perhaps "
+"should not install the package. (The WARNING shown above, is not a "
+"problem with the package: it only means you have not defined any level of"
+" 'trust' regarding Micah's PGP key itself.)"
+msgstr ""
+
+#: ../../source/install.rst:66
+msgid ""
+"If you want to learn more about verifying PGP signatures, guides for "
+"`Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and"
+" the `Tor Project <https://2019.www.torproject.org/docs/verifying-"
+"signatures.html.en>`_ may be helpful."
+msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/security.po b/docs/source/locale/zh_TW/LC_MESSAGES/security.po
new file mode 100644
index 00000000..13d11a17
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/security.po
@@ -0,0 +1,114 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/security.rst:2
+msgid "Security design"
+msgstr ""
+
+#: ../../source/security.rst:4
+msgid ""
+"First read :ref:`how_it_works` to understand the basics of 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.** When you use OnionShare, you host services directly on your"
+" computer. For example, when you share files with OnionShare, you don't "
+"upload these files to any server, and when you start an OnionShare chat "
+"room, your computer is the chat room server itself. Traditional ways of "
+"sharing files or setting up websites and chat rooms require trusting a "
+"service with access to your data."
+msgstr ""
+
+#: ../../source/security.rst:13
+msgid ""
+"**Network eavesdroppers can't spy on anything that happens in OnionShare "
+"in transit.** Because connections between Tor onion services and Tor "
+"Browser are end-to-end encrypted, no network attackers can eavesdrop on "
+"what happens in an OnionShare service. If the eavesdropper is positioned "
+"on the OnionShare user's end, the Tor Browser user's end, or is a "
+"malicious Tor node, they will only see Tor traffic. If the eavesdropper "
+"is a malicious rendezvous node used to connect Tor Browser with "
+"OnionShare's onion service, the traffic will be encrypted using the onion"
+" service 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, they still can't access "
+"anything.** There have been attacks against the Tor network that can "
+"enumerate onion services. Even if someone discovers the .onion address of"
+" an OnionShare onion service, they can't access it without also knowing "
+"the service's random password (unless, of course, the OnionShare users "
+"chooses to disable the password and make it public). The password is "
+"generated by choosing two random words from a list of 6800 words, meaning"
+" there are 6800^2, or about 46 million possible password. But they can "
+"only make 20 wrong guesses 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.** The "
+"OnionShare user is responsible for securely communicating the OnionShare "
+"address with people. If they send it insecurely (such as through an email"
+" message, and their email is being monitored by an attacker), the "
+"eavesdropper will learn that they're using OnionShare. If the attacker "
+"loads the address in Tor Browser before the legitimate recipient gets to "
+"it, they can access the service. If this risk fits the user's threat "
+"model, they must find a more secure way to communicate the address, such "
+"as in an encrypted email, chat, or voice call. This isn't necessary in "
+"cases where OnionShare is being used for something that isn't secret."
+msgstr ""
+
+#: ../../source/security.rst:24
+msgid ""
+"**Communicating the OnionShare address might not be anonymous.** While "
+"OnionShare and Tor Browser allow for anonymity, if the user wishes to "
+"remain anonymous they must take extra steps to ensure this while "
+"communicating the OnionShare address. For example, they might need to use"
+" Tor to create a new anonymous email or chat account, and only access it "
+"over Tor, to use for sharing the address. This isn't necessary in cases "
+"where there's no need to protect anonymity, such as co-workers who know "
+"each other sharing work documents."
+msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/sphinx.po b/docs/source/locale/zh_TW/LC_MESSAGES/sphinx.po
new file mode 100644
index 00000000..f2cc8ed5
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/sphinx.po
@@ -0,0 +1,27 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \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"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/_templates/versions.html:10
+msgid "Versions"
+msgstr ""
+
+#: ../../source/_templates/versions.html:18
+msgid "Languages"
+msgstr ""
+
diff --git a/docs/source/locale/zh_TW/LC_MESSAGES/tor.po b/docs/source/locale/zh_TW/LC_MESSAGES/tor.po
new file mode 100644
index 00000000..a4d227cd
--- /dev/null
+++ b/docs/source/locale/zh_TW/LC_MESSAGES/tor.po
@@ -0,0 +1,216 @@
+# 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>, 2020.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-17 09:38-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"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=utf-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Generated-By: Babel 2.8.0\n"
+
+#: ../../source/tor.rst:2
+msgid "Connecting to Tor"
+msgstr ""
+
+#: ../../source/tor.rst:4
+msgid ""
+"There are several options for how OnionShare should connect to Tor. You "
+"can change them in Settings, which you can get to by clicking the gear "
+"icon in the bottom-right of the window."
+msgstr ""
+
+#: ../../source/tor.rst:9
+msgid "Use Tor that is bundled with OnionShare"
+msgstr ""
+
+#: ../../source/tor.rst:11
+msgid ""
+"This is the default way that OnionShare connects to Tor, and it's also "
+"the simplest and most reliable way. For this reason, it's recommended for"
+" most users."
+msgstr ""
+
+#: ../../source/tor.rst:13
+msgid ""
+"When you open OnionShare, it will launch a Tor process in the background "
+"that's configured specifically for OnionShare to use. This Tor process "
+"won't interfere with other Tor processes on your computer, so you're free"
+" to run Tor Browser or use a system Tor in the background."
+msgstr ""
+
+#: ../../source/tor.rst:16
+msgid "Attempt automatic configuration with Tor Browser"
+msgstr ""
+
+#: ../../source/tor.rst:18
+msgid ""
+"You can configure OnionShare to connect to the Tor that comes with Tor "
+"Browser. First, `download Tor Browser <https://www.torproject.org>`_ here"
+" if you don't already have it. With this setting selected, you need to "
+"keep Tor Browser open in the background while you're using OnionShare."
+msgstr ""
+
+#: ../../source/tor.rst:21
+msgid "Using a system Tor in Windows"
+msgstr ""
+
+#: ../../source/tor.rst:23
+msgid ""
+"This is fairly advanced. You'll need to know how edit plaintext files and"
+" do stuff as an administrator."
+msgstr ""
+
+#: ../../source/tor.rst:25
+msgid ""
+"Download the Tor Windows Expert Bundle, which you can get `from here "
+"<https://www.torproject.org/download/tor/>`_. Extract the zip file and "
+"copy the extracted folder to ``C:\\Program Files (x86)\\``, and rename "
+"the folder to ``tor-win32``, so that inside that folder is the ``Data`` "
+"and ``Tor`` folders."
+msgstr ""
+
+#: ../../source/tor.rst:27
+msgid ""
+"Make up a control port password. I'm going to use ``comprised stumble "
+"rummage work avenging construct volatile`` as my password. Now open a "
+"command prompt as an administrator, and use ``tor.exe --hash-password`` "
+"to generate a hash of your password. For example::"
+msgstr ""
+
+#: ../../source/tor.rst:32
+msgid ""
+"The hashed password output is displayed after some warnings (which you "
+"can ignore). In my case, it was "
+"``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``."
+msgstr ""
+
+#: ../../source/tor.rst:34
+msgid ""
+"Now create a new text file at ``C:\\Program Files (x86)\\tor-"
+"win32\\torrc`` and put this in it, replacing the "
+"``HashedControlPassword`` with the one you just generated::"
+msgstr ""
+
+#: ../../source/tor.rst:39
+msgid ""
+"In your administrator command prompt, install tor as a service using the "
+"appropriate ``torrc`` file you just created (see `here "
+"<https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more "
+"information on doing this). Like this::"
+msgstr ""
+
+#: ../../source/tor.rst:43
+msgid "You're now running a system Tor in Windows!"
+msgstr ""
+
+#: ../../source/tor.rst:45
+msgid ""
+"Open OnionShare. Click the Settings icon. Under \"How should OnionShare "
+"connect to Tor?\" choose \"Connect using control port\", and set the "
+"control port host to ``127.0.0.1`` and the port to ``9051``. Under \"Tor "
+"authentication options\" choose \"Password\" and set the password to your"
+" password, in my case ``comprised stumble rummage work avenging construct"
+" volatile``. Click the \"Test Settings\" button. If all goes well, you "
+"should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:48
+msgid "Using a system Tor in macOS"
+msgstr ""
+
+#: ../../source/tor.rst:50
+msgid ""
+"First, install `Homebrew <http://brew.sh/>`_ if you don't already have "
+"it. Then, install Tor::"
+msgstr ""
+
+#: ../../source/tor.rst:54
+msgid "Now configure Tor to allow connections from OnionShare::"
+msgstr ""
+
+#: ../../source/tor.rst:61
+msgid "And start the system Tor service::"
+msgstr ""
+
+#: ../../source/tor.rst:65
+msgid ""
+"Open OnionShare. Click the Settings icon. 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 options\" choose \"No authentication, or cookie "
+"authentication\". Click the \"Test Settings\" button. If all goes well, "
+"you should see successfully connected to tor."
+msgstr ""
+
+#: ../../source/tor.rst:68
+msgid "Using a system Tor in Linux"
+msgstr ""
+
+#: ../../source/tor.rst:70
+msgid ""
+"First, install the tor package. If you're using Debian, Ubuntu, or a "
+"similar Linux distro, I recommend you use Tor Project's `official "
+"repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For "
+"example, in Ubuntu 20.04::"
+msgstr ""
+
+#: ../../source/tor.rst:78
+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:80
+msgid ""
+"Add your user to the ``debian-tor`` group by running this command "
+"(replace ``username`` with your actual username)::"
+msgstr ""
+
+#: ../../source/tor.rst:84
+msgid ""
+"Reboot your computer. After it boots up again, open OnionShare. Click the"
+" Settings icon. Under \"How should OnionShare connect to Tor?\" choose "
+"\"Connect using socket file\", and set the socket file to be "
+"``/var/run/tor/control``. Under \"Tor authentication options\" choose "
+"\"No authentication, or cookie authentication\". Click the \"Test "
+"Settings\" button. If all goes well, you should see successfully connect "
+"to Tor."
+msgstr ""
+
+#: ../../source/tor.rst:87
+msgid "Using Tor bridges"
+msgstr ""
+
+#: ../../source/tor.rst:89
+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 "
+"successfully connects to Tor, you don't need to use a bridge."
+msgstr ""
+
+#: ../../source/tor.rst:91
+msgid "To configure bridges, open OnionShare settings."
+msgstr ""
+
+#: ../../source/tor.rst:93
+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, you should try the built-in obfs4 ones first."
+msgstr ""
+
+#~ msgid "Using a system Tor in Mac OS X"
+#~ msgstr ""
+
diff --git a/docs/source/security.rst b/docs/source/security.rst
new file mode 100644
index 00000000..e7f4529b
--- /dev/null
+++ b/docs/source/security.rst
@@ -0,0 +1,24 @@
+Security design
+===============
+
+First read :ref:`how_it_works` to understand the basics of how OnionShare works.
+
+Like all software, OnionShare may contain bugs or vulnerabilities.
+
+What OnionShare protects against
+--------------------------------
+
+**Third parties don't have access to anything that happens in OnionShare.** When you use OnionShare, you host services directly on your computer. For example, when you share files with OnionShare, you don't upload these files to any server, and when you start an OnionShare chat room, your computer is the chat room server itself. Traditional ways of sharing files or setting up websites and chat rooms require trusting a service with access to your data.
+
+**Network eavesdroppers can't spy on anything that happens in OnionShare in transit.** Because connections between Tor onion services and Tor Browser are end-to-end encrypted, no network attackers can eavesdrop on what happens in an OnionShare service. If the eavesdropper is positioned on the OnionShare user's end, the Tor Browser user's end, or is a malicious Tor node, they will only see Tor traffic. If the eavesdropper is a malicious rendezvous node used to connect Tor Browser with OnionShare's onion service, the traffic will be encrypted using the onion service key.
+
+**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.
+
+**If an attacker learns about the onion service, they still can't access anything.** There have been attacks against the Tor network that can enumerate onion services. Even if someone discovers the .onion address of an OnionShare onion service, they can't access it without also knowing the service's random password (unless, of course, the OnionShare users chooses to disable the password and make it public). The password is generated by choosing two random words from a list of 6800 words, meaning there are 6800^2, or about 46 million possible password. But they can only make 20 wrong guesses before OnionShare stops the server, preventing brute force attacks against the password.
+
+What OnionShare doesn't protect against
+---------------------------------------
+
+**Communicating the OnionShare address might not be secure.** The OnionShare user is responsible for securely communicating the OnionShare address with people. If they send it insecurely (such as through an email message, and their email is being monitored by an attacker), the eavesdropper will learn that they're using OnionShare. If the attacker loads the address in Tor Browser before the legitimate recipient gets to it, they can access the service. If this risk fits the user's threat model, they must find a more secure way to communicate the address, such as in an encrypted email, chat, or voice call. This isn't necessary in cases where OnionShare is being used for something that isn't secret.
+
+**Communicating the OnionShare address might not be anonymous.** While OnionShare and Tor Browser allow for anonymity, if the user wishes to remain anonymous they must take extra steps to ensure this while communicating the OnionShare address. For example, they might need to use Tor to create a new anonymous email or chat account, and only access it over Tor, to use for sharing the address. This isn't necessary in cases where there's no need to protect anonymity, such as co-workers who know each other sharing work documents.
diff --git a/docs/source/tor.rst b/docs/source/tor.rst
new file mode 100644
index 00000000..5efe3dc0
--- /dev/null
+++ b/docs/source/tor.rst
@@ -0,0 +1,93 @@
+Connecting to Tor
+=================
+
+There are several options for how OnionShare should connect to Tor. You can change them in Settings, which you can get to by clicking the gear icon in the bottom-right of the window.
+
+.. image:: _static/screenshots/settings.png
+
+Use Tor that is bundled with OnionShare
+---------------------------------------
+
+This is the default way that OnionShare connects to Tor, and it's also the simplest and most reliable way. For this reason, it's recommended for most users.
+
+When you open OnionShare, it will launch a Tor process in the background that's configured specifically for OnionShare to use. This Tor process won't interfere with other Tor processes on your computer, so you're free to run Tor Browser or use a system Tor in the background.
+
+Attempt automatic configuration with Tor Browser
+------------------------------------------------
+
+You can configure OnionShare to connect to the Tor that comes with Tor Browser. First, `download Tor Browser <https://www.torproject.org>`_ here if you don't already have it. With this setting selected, you need to keep Tor Browser open in the background while you're using OnionShare.
+
+Using a system Tor in Windows
+-----------------------------
+
+This is fairly advanced. You'll need to know how edit plaintext files and do stuff as an administrator.
+
+Download the Tor Windows Expert Bundle, which you can get `from here <https://www.torproject.org/download/tor/>`_. Extract the zip file and copy the extracted folder to ``C:\Program Files (x86)\``, and rename the folder to ``tor-win32``, so that inside that folder is the ``Data`` and ``Tor`` folders.
+
+Make up a control port password. I'm going to use ``comprised stumble rummage work avenging construct volatile`` as my password. Now open a command prompt as an administrator, and use ``tor.exe --hash-password`` to generate a hash of your password. For example::
+
+ cd "C:\Program Files (x86)\tor-win32\Tor"
+ tor.exe --hash-password "comprised stumble rummage work avenging construct volatile"
+
+The hashed password output is displayed after some warnings (which you can ignore). In my case, it was ``16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF``.
+
+Now create a new text file at ``C:\Program Files (x86)\tor-win32\torrc`` and put this in it, replacing the ``HashedControlPassword`` with the one you just generated::
+
+ ControlPort 9051
+ HashedControlPassword 16:00322E903D96DE986058BB9ABDA91E010D7A863768635AC38E213FDBEF
+
+In your administrator command prompt, install tor as a service using the appropriate ``torrc`` file you just created (see `here <https://2019.www.torproject.org/docs/faq.html.en#NTService>`_ for more information on doing this). Like this::
+
+ tor.exe --service install -options -f "C:\Program Files (x86)\tor-win32\torrc"
+
+You're now running a system Tor in Windows!
+
+Open OnionShare. Click the Settings icon. Under "How should OnionShare connect to Tor?" choose "Connect using control port", and set the control port host to ``127.0.0.1`` and the port to ``9051``. Under "Tor authentication options" choose "Password" and set the password to your password, in my case ``comprised stumble rummage work avenging construct volatile``. Click the "Test Settings" button. If all goes well, you should see successfully connected to tor.
+
+Using a system Tor in macOS
+---------------------------
+
+First, install `Homebrew <http://brew.sh/>`_ if you don't already have it. Then, install Tor::
+
+ brew install tor
+
+Now configure Tor to allow connections from OnionShare::
+
+ mkdir -p /usr/local/var/run/tor
+ chmod 700 /usr/local/var/run/tor
+ echo 'SOCKSPort 9050' >> /usr/local/etc/tor/torrc
+ echo 'ControlPort unix:"/usr/local/var/run/tor/control.socket"' >> /usr/local/etc/tor/torrc
+
+And start the system Tor service::
+
+ brew services start tor
+
+Open OnionShare. Click the Settings icon. 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 options" choose "No authentication, or cookie authentication". Click the "Test Settings" button. If all goes well, you should see successfully connected to tor.
+
+Using a system Tor in Linux
+---------------------------
+
+First, install the tor package. If you're using Debian, Ubuntu, or a similar Linux distro, I recommend you use Tor Project's `official repository <https://2019.www.torproject.org/docs/debian.html.en>`_. For example, in Ubuntu 20.04::
+
+ sudo su -c "echo 'deb http://deb.torproject.org/torproject.org focal main' > /etc/apt/sources.list.d/torproject.list"
+ curl https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | gpg --import
+ gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
+ sudo apt-get update
+ sudo apt-get install -y tor deb.torproject.org-keyring
+
+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.
+
+Add your user to the ``debian-tor`` group by running this command (replace ``username`` with your actual username)::
+
+ sudo usermod -a -G debian-tor username
+
+Reboot your computer. After it boots up again, open OnionShare. Click the Settings icon. Under "How should OnionShare connect to Tor?" choose "Connect using socket file", and set the socket file to be ``/var/run/tor/control``. Under "Tor authentication options" choose "No authentication, or cookie authentication". Click the "Test Settings" button. If all goes well, you should see successfully connect to Tor.
+
+Using Tor bridges
+-----------------
+
+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 successfully connects to Tor, you don't need to use a bridge.
+
+To configure bridges, open OnionShare settings.
+
+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, you should try the built-in obfs4 ones first.
diff --git a/git-hooks/README.md b/git-hooks/README.md
deleted file mode 100644
index 0d8f80c9..00000000
--- a/git-hooks/README.md
+++ /dev/null
@@ -1,3 +0,0 @@
-To use these hooks, cp any of them to onionshare's `.git/hooks`.
-
-* `pre-push` runs the test suite, and will push if the tests pass.
diff --git a/git-hooks/pre-push b/git-hooks/pre-push
deleted file mode 100755
index 1d8e57f8..00000000
--- a/git-hooks/pre-push
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/bash
-
-# Pre-push hook. If you want to test with a different version of firefox, put
-# the path in the CFX_FIREFOX environment variable.
diff --git a/install/org.onionshare.OnionShare.appdata.xml b/install/org.onionshare.OnionShare.appdata.xml
deleted file mode 100644
index c9a0b11c..00000000
--- a/install/org.onionshare.OnionShare.appdata.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright 2018 Micah Lee <micah@micahflee.com> -->
-<component type="desktop-application">
- <id>org.onionshare.OnionShare</id>
- <metadata_license>CC0-1.0</metadata_license>
- <project_license>GPL-3.0</project_license>
- <name>OnionShare</name>
- <summary>Securely and anonymously share a file of any size</summary>
- <description>
- <p>
- 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.
- </p>
- <p>
- If you want to send files to someone, OnionShare hosts them on your own computer and uses a Tor onion service to make them temporarily accessible over the internet. The receiving user just needs to open the web address in Tor Browser to download the files. If you want to receive files, OnionShare hosts an anonymous dropbox directly on your computer and uses a Tor onion service to make it temporarily accessible over the internet. Other users can upload files to you from by loading the web address in Tor Browser.
- </p>
- </description>
- <launchable type="desktop-id">org.onionshare.OnionShare.desktop</launchable>
- <screenshots>
- <screenshot type="default">
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/screenshots/appdata-onionshare-share-server.png</image>
- <caption>Sharing files with OnionShare</caption>
- </screenshot>
- <screenshot>
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/screenshots/appdata-onionshare-share-client.png</image>
- <caption>Downloading OnionShare files using Tor Browser</caption>
- </screenshot>
- <screenshot>
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/screenshots/appdata-onionshare-receive-server.png</image>
- <caption>Receiving files with OnionShare</caption>
- </screenshot>
- <screenshot>
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/screenshots/appdata-onionshare-receive-client.png</image>
- <caption>Uploading files to OnionShare user using Tor Browser</caption>
- </screenshot>
- </screenshots>
- <url type="bugtracker">https://github.com/micahflee/onionshare/issues/</url>
- <url type="help">https://github.com/micahflee/onionshare/wiki/</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="stable" date="2019-10-13" version="2.2" />
- </releases>
-</component>
diff --git a/install/pyinstaller.spec b/install/pyinstaller.spec
deleted file mode 100644
index 7eeb5153..00000000
--- a/install/pyinstaller.spec
+++ /dev/null
@@ -1,67 +0,0 @@
-# -*- mode: python -*-
-
-import platform
-p = platform.system()
-
-version = open('share/version.txt').read().strip()
-
-a = Analysis(
- ['scripts/onionshare-pyinstaller'],
- pathex=['.'],
- binaries=None,
- datas=[
- ('../share/version.txt', 'share'),
- ('../share/wordlist.txt', 'share'),
- ('../share/torrc_template', 'share'),
- ('../share/torrc_template-obfs4', 'share'),
- ('../share/torrc_template-meek_lite_azure', 'share'),
- ('../share/images/*', 'share/images'),
- ('../share/locale/*', 'share/locale'),
- ('../share/static/*', 'share/static'),
- ('../share/templates/*', 'share/templates'),
- ('../share/static/css/*', 'share/static/css'),
- ('../share/static/img/*', 'share/static/img'),
- ('../share/static/js/*', 'share/static/js'),
- ('../install/licenses/*', 'licenses')
- ],
- hiddenimports=[],
- hookspath=[],
- runtime_hooks=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=None)
-
-pyz = PYZ(
- a.pure, a.zipped_data,
- cipher=None)
-
-exe = EXE(
- pyz,
- a.scripts,
- exclude_binaries=True,
- name='onionshare-gui',
- debug=False,
- strip=False,
- upx=True,
- console=False)
-
-coll = COLLECT(
- exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- strip=False,
- upx=True,
- name='onionshare')
-
-if p == 'Darwin':
- app = BUNDLE(
- coll,
- name='OnionShare.app',
- icon='onionshare.icns',
- bundle_identifier='com.micahflee.onionshare',
- info_plist={
- 'CFBundleShortVersionString': version,
- 'NSHighResolutionCapable': 'True'
- }
- )
diff --git a/install/qt-installer-script.js b/install/qt-installer-script.js
deleted file mode 100644
index e68a6005..00000000
--- a/install/qt-installer-script.js
+++ /dev/null
@@ -1,78 +0,0 @@
-// This script is here for convenience. Minify it and copy it into the
-// qt5 override-build section of snap/snapcraft.yaml
-
-function Controller() {
- installer.installationFinished.connect(proceed)
-}
-
-function logCurrentPage() {
- var pageName = page().objectName
- var pagePrettyTitle = page().title
- console.log('At page: ' + pageName + ' (' + pagePrettyTitle + ')')
-}
-
-function page() {
- return gui.currentPageWidget()
-}
-
-function proceed(button, delay) {
- gui.clickButton(button || buttons.NextButton, delay)
-}
-
-Controller.prototype.WelcomePageCallback = function () {
- logCurrentPage()
- proceed(buttons.NextButton, 2000)
-}
-
-Controller.prototype.CredentialsPageCallback = function () {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.IntroductionPageCallback = function () {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.TargetDirectoryPageCallback = function () {
- logCurrentPage()
- var dir = installer.environmentVariable('SNAPCRAFT_PART_INSTALL') + '/opt/Qt5.14.0'
- console.log('Installing to ' + dir)
- page().TargetDirectoryLineEdit.setText(dir)
- proceed()
-}
-
-Controller.prototype.ComponentSelectionPageCallback = function () {
- logCurrentPage()
- page().deselectAll()
- page().selectComponent('qt.qt5.5140.gcc_64')
- proceed()
-}
-
-Controller.prototype.LicenseAgreementPageCallback = function () {
- logCurrentPage()
- page().AcceptLicenseRadioButton.checked = true
- gui.clickButton(buttons.NextButton)
-}
-
-Controller.prototype.ReadyForInstallationPageCallback = function () {
- logCurrentPage()
- proceed()
-}
-
-Controller.prototype.PerformInstallationPageCallback = function () {
- logCurrentPage()
-}
-
-Controller.prototype.FinishedPageCallback = function () {
- logCurrentPage()
- proceed(buttons.FinishButton)
-}
-
-Controller.prototype.DynamicTelemetryPluginFormCallback = function () {
- logCurrentPage()
- console.log(Object.keys(page().TelemetryPluginForm.statisticGroupBox))
- var radioButtons = page().TelemetryPluginForm.statisticGroupBox
- radioButtons.disableStatisticRadioButton.checked = true
- proceed()
-} \ No newline at end of file
diff --git a/install/scripts/onionshare-pyinstaller b/install/scripts/onionshare-pyinstaller
deleted file mode 100644
index bd59b421..00000000
--- a/install/scripts/onionshare-pyinstaller
+++ /dev/null
@@ -1,44 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-import sys, os, platform
-
-# In macOS, allow both CLI and GUI depending on the filename of the binary
-# being executed
-if platform.system() == 'Darwin':
- # If the binary being executed is called 'onionshare', use CLI
- basename = os.path.basename(sys.argv[0])
- if basename == 'onionshare':
- import onionshare
- onionshare.main()
-
- # Otherwise, use GUI
- else:
- import onionshare_gui
- onionshare_gui.main()
-
-# Unfortunately this trick won't work in Windows because I want to set
-# console=False in the PyInstaller spec file, so there isn't a command prompt
-# open in the background every you run the GUI. Hopefully Windows can get
-# a built-in CLI when PyInstaller 3.3 comes out:
-# https://pyinstaller.readthedocs.io/en/stable/spec-files.html#multipackage-bundles
-else:
- import onionshare_gui
- onionshare_gui.main()
diff --git a/pyproject.toml b/pyproject.toml
deleted file mode 100644
index 891ab7c6..00000000
--- a/pyproject.toml
+++ /dev/null
@@ -1,39 +0,0 @@
-[tool.poetry]
-name = "onionshare"
-version = "2.2"
-description = "Securely and anonymously send and receive files, and publish onion sites"
-authors = ["Micah Lee <micah@micahflee.com>"]
-license = "GPLv3+"
-
-[tool.poetry.dependencies]
-python = "^3.6"
-Click = "*"
-Flask = "*"
-Flask-HTTPAuth = "*"
-pycryptodome = "*"
-PyQt5 = "5.14.0"
-PyQt5-sip = "*"
-PySocks = "*"
-requests = "*"
-stem = "*"
-urllib3 = "*"
-Werkzeug = "*"
-qrcode = "^6.1"
-
-[tool.poetry.dev-dependencies]
-atomicwrites = "*"
-attrs = "*"
-more-itertools = "*"
-pluggy = "*"
-py = "*"
-pytest = "*"
-pytest-faulthandler = "*"
-pytest-qt = "*"
-six = "*"
-urllib3 = "*"
-setuptools = "*"
-pyinstaller = {version = "*", platform = "darwin"}
-
-[build-system]
-requires = ["poetry>=0.12"]
-build-backend = "poetry.masonry.api"
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 0a8df87a..00000000
--- a/setup.cfg
+++ /dev/null
@@ -1,2 +0,0 @@
-[wheel]
-universal = 1 \ No newline at end of file
diff --git a/setup.py b/setup.py
deleted file mode 100644
index a2c18d0a..00000000
--- a/setup.py
+++ /dev/null
@@ -1,108 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
-import os, sys, platform, tempfile
-from setuptools import setup
-
-
-def file_list(path):
- files = []
- for filename in os.listdir(path):
- if os.path.isfile(os.path.join(path, filename)):
- files.append(os.path.join(path, filename))
- return files
-
-
-version = open("share/version.txt").read().strip()
-description = (
- """OnionShare is an open source tool for securely and anonymously sending and """
- """receiving files and publishing websites using Tor onion services. It works by """
- """starting a web server directly on your computer and making it accessible as """
- """an unguessable Tor web address that others can load in Tor Browser. It """
- """doesn't require setting up a separate server, using a third party service, or """
- """even logging into an account."""
-)
-author = "Micah Lee"
-author_email = "micah@micahflee.com"
-url = "https://github.com/micahflee/onionshare"
-license = "GPL v3"
-keywords = "onion, share, onionshare, tor, anonymous, web server"
-classifiers = [
- "Programming Language :: Python :: 3",
- "Framework :: Flask",
- "Topic :: Communications :: File Sharing",
- "Topic :: Security :: Cryptography",
- "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)",
- "Intended Audience :: End Users/Desktop",
- "Operating System :: OS Independent",
- "Environment :: Web Environment",
-]
-data_files = [
- ("share/applications", ["install/org.onionshare.OnionShare.desktop"],),
- ("share/icons/hicolor/scalable/apps", ["install/org.onionshare.OnionShare.svg"],),
- ("share/metainfo", ["install/org.onionshare.OnionShare.appdata.xml"],),
- ("share/onionshare", file_list("share")),
- ("share/onionshare/images", file_list("share/images")),
- ("share/onionshare/locale", file_list("share/locale")),
- ("share/onionshare/templates", file_list("share/templates"),),
- ("share/onionshare/static/css", file_list("share/static/css"),),
- ("share/onionshare/static/img", file_list("share/static/img"),),
- ("share/onionshare/static/js", file_list("share/static/js"),),
-]
-if not platform.system().endswith("BSD") and platform.system() != "DragonFly":
- data_files.append(
- (
- "share/nautilus-python/extensions/",
- ["install/scripts/onionshare-nautilus.py"],
- )
- )
-
-setup(
- name="onionshare",
- version=version,
- description=description,
- author=author,
- author_email=author_email,
- maintainer=author,
- maintainer_email=author_email,
- url=url,
- license=license,
- keywords=keywords,
- classifiers=classifiers,
- packages=[
- "onionshare",
- "onionshare.web",
- "onionshare_gui",
- "onionshare_gui.tab",
- "onionshare_gui.tab.mode",
- "onionshare_gui.tab.mode.share_mode",
- "onionshare_gui.tab.mode.receive_mode",
- "onionshare_gui.tab.mode.website_mode",
- ],
- entry_points={
- "console_scripts": [
- "onionshare = onionshare:main",
- "onionshare-gui = onionshare_gui:main",
- ],
- },
- data_files=data_files,
- include_data_files=True,
-)
diff --git a/share/locale/bn.json b/share/locale/bn.json
deleted file mode 100644
index f4560c9c..00000000
--- a/share/locale/bn.json
+++ /dev/null
@@ -1,216 +0,0 @@
-{
- "config_onion_service": "{0:d} পোর্টে onion সার্ভিস সেটাপ করা হচ্ছে।",
- "preparing_files": "ফাইলগুলোকে কমপ্রেস করা হচ্ছে।",
- "give_this_url": "প্রাপককে এই এড্রেসটি দিন:",
- "give_this_url_stealth": "প্রাপককে এই এড্রেস এবং HidServAuth লাইনটি দিন:",
- "give_this_url_receive": "প্রেরককে এই ঠিকানাটি দিন:",
- "give_this_url_receive_stealth": "প্রেরককে এই এড্রেস এবং HidServAuthটি দিন:",
- "ctrlc_to_stop": "সার্ভারটি বন্ধ করার জন্য Ctrl+C চাপুন",
- "not_a_file": "{0:s} ফাইলটি বৈধ নয়।",
- "not_a_readable_file": "{0:s} ফাইলটি পড়া যাচ্ছে না।",
- "no_available_port": "Onion সার্ভিস চালু করার জন্য কোন পোর্ট পাওয়া যাচ্ছে না",
- "other_page_loaded": "এড্রেস লোড হয়েছে",
- "close_on_autostop_timer": "বন্ধ করা হয়েছে কারণ অটো-স্টপ টাইমার এর সময় শেষ",
- "closing_automatically": "ট্রান্সফার শেষ তাই থেমে যাওয়া হলো",
- "timeout_download_still_running": "",
- "timeout_upload_still_running": "",
- "large_filesize": "সতর্কতা: বড় ফাইল পাঠাতে গেলে কয়েক ঘণ্টা লাগতে পারে",
- "systray_menu_exit": "প্রস্থান করুন",
- "systray_download_started_title": "",
- "systray_download_started_message": "",
- "systray_download_completed_title": "",
- "systray_download_completed_message": "",
- "systray_download_canceled_title": "",
- "systray_download_canceled_message": "",
- "systray_upload_started_title": "",
- "systray_upload_started_message": "",
- "help_local_only": "Tor ব্যবহার করবে না (শুধুমাত্র ডেভেলপারদের জন্য)",
- "help_stay_open": "ফাইলগুলো পাঠানো হয়ে গেলেও শেয়ার করা থামিও না",
- "help_autostop_timer": "নির্দিষ্ট সেকেন্ডের পর শেয়ার করা বন্ধ করে দিও",
- "help_stealth": "ক্লায়েন্ট অনুমোদন ব্যবহার করুন (উন্নততর)",
- "help_receive": "কোনকিছু শেয়ার না করে শুধু গ্রহণ করবে",
- "help_verbose": "OnionShare-এর এররগুলো stdout-এ দেখাও, আর ওয়েব এররগুলো ডিস্কে লগ করো",
- "help_filename": "শেয়ার করার জন্য ফাইল বা ফোল্ডারের লিস্ট",
- "help_config": "কাস্টম JSON কনফিগারেশন ফাইলের লোকেশন (যদি থাকে)",
- "gui_drag_and_drop": "শেয়ার করা শুরু করতে\nফাইল এবং ফোল্ডারগুলো ড্র্যাগ করে ড্রপ করুন",
- "gui_add": "সংযোজন করুন",
- "gui_delete": "মুছ",
- "gui_choose_items": "পছন্দ করুন",
- "gui_share_start_server": "শেয়ার করা শুরু করো",
- "gui_share_stop_server": "শেয়ার করা বন্ধ করো",
- "gui_share_stop_server_autostop_timer": "শেয়ার করা বন্ধ করো ({} সেকেন্ড বাকি)",
- "gui_share_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে",
- "gui_receive_start_server": "প্রাপ্ত মোড আরম্ভ করুন",
- "gui_receive_stop_server": "প্রাপ্ত মোড বন্ধ করুন",
- "gui_receive_stop_server_autostop_timer": "প্রাপ্ত মোড বন্ধ করুন ({}সে বাকি)",
- "gui_receive_stop_server_autostop_timer_tooltip": "টাইমার অনুযায়ী অটোমেটিক বন্ধ হবে {}-তে",
- "gui_copy_url": "এড্রেস কপি করো",
- "gui_copy_hidservauth": "HidServAuth কপি করো",
- "gui_downloads": "",
- "gui_no_downloads": "",
- "gui_canceled": "বাতিল করা হয়েছে",
- "gui_copied_url_title": "OnionShare এড্রেস কপি করা হয়েছে",
- "gui_copied_url": "OnionShare এড্রেসটি ক্লিপবোর্ডে কপি করা হয়েছে",
- "gui_copied_hidservauth_title": "HidServAuth কপি করা হয়েছে",
- "gui_copied_hidservauth": "HidServAuth লাইনটি ক্লিপবোর্ডে কপি করা হয়েছে",
- "gui_please_wait": "চালু করা হচ্ছে… বন্ধ করার জন্য এখানে ক্লিক করুন।",
- "gui_download_upload_progress_complete": "",
- "gui_download_upload_progress_starting": "",
- "gui_download_upload_progress_eta": "",
- "version_string": "OnionShare (অনিয়নশেয়ার) {0:s} | https://onionshare.org/",
- "gui_quit_title": "একটু দাড়ান",
- "gui_share_quit_warning": "আপনি ফাইল পাঠানোর মধ্যে আছেন। আপনি কি আসলেই OnionShare বন্ধ করতে চান?",
- "gui_receive_quit_warning": "আপনি ফাইল গ্রহণের মধ্যে আছেন। আপনি কি আসলেই OnionShare বন্ধ করতে চান?",
- "gui_quit_warning_quit": "প্রস্থান করুন",
- "gui_quit_warning_dont_quit": "বাতিল",
- "error_rate_limit": "কেউ একজন আপনার এড্রেসটিতে অসফলভাবে এক্সেস করার চেষ্টা করেছে, এর মানে তারা আপনার এড্রেসটি আন্দাজ করার চেষ্টা করছে, তাই OnionShare নিরাপত্তার জন্য সার্ভার বন্ধ করে দিয়েছে। নতুন করে শেয়ার করা শুরু করুন এবং প্রাপককে নতুন এড্রেসটি দিন।",
- "zip_progress_bar_format": "কমপ্রেস করা হচ্ছে: %p%",
- "error_stealth_not_supported": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করার জন্য, আপনার অন্তত Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
- "error_ephemeral_not_supported": "OnionShare ব্যবহার করার জন্য Tor 0.2.9.1-alpha (or Tor Browser 6.5) এবং python3-stem 1.5.0 দুটোই থাকতে হবে।",
- "gui_settings_window_title": "সেটিং",
- "gui_settings_whats_this": "<a href='{0:s}'>এটা কি?</a>",
- "gui_settings_stealth_option": "ক্লায়েন্ট অথোরাইজেশন ব্যবহার করো",
- "gui_settings_stealth_hidservauth_string": "আপনার প্রাইভেট কি সেভ করে থাকলে, এর মানে হলো এখন আপনি আপনার HidServAuth কপি করার জন্য ক্লিক করতে পারেন।",
- "gui_settings_autoupdate_label": "নতুন ভার্সন এসেছে কিনা দেখো",
- "gui_settings_autoupdate_option": "নতুন ভার্সন আসলে আমাকে জানাবে",
- "gui_settings_autoupdate_timestamp": "সবশেষ চেক করা হয়েছে: {}",
- "gui_settings_autoupdate_timestamp_never": "কখনো নয়",
- "gui_settings_autoupdate_check_button": "নতুন ভার্সন এসেছে কিনা দেখো",
- "gui_settings_general_label": "সাধারণ সেটিংস",
- "gui_settings_sharing_label": "শেয়ারের জন্য সেটিংস",
- "gui_settings_close_after_first_download_option": "ফাইল পাঠানো হলে শেয়ার করা বন্ধ করে দিও",
- "gui_settings_connection_type_label": "OnionShare কিভাবে Tor-এ কানেক্ট করবে?",
- "gui_settings_connection_type_bundled_option": "OnionShare-এর নিজস্ব Tor ভার্সনটি ব্যবহার করো",
- "gui_settings_connection_type_automatic_option": "Tor Browser থেকে অটোমেটিক কনফিগার করার চেষ্টা করো",
- "gui_settings_connection_type_control_port_option": "কন্ট্রোল পোর্ট ব্যবহার করে কানেক্ট করো",
- "gui_settings_connection_type_socket_file_option": "সকেট ফাইল দিয়ে কানেক্ট করো",
- "gui_settings_connection_type_test_button": "Tor-এর সাথে কানেকশন পরীক্ষা করো",
- "gui_settings_control_port_label": "নিয়ন্ত্রন পোর্ট",
- "gui_settings_socket_file_label": "সকেট ফাইল",
- "gui_settings_socks_label": "SOCKS পোর্ট",
- "gui_settings_authenticate_label": "Tor অথেনটিকেশন সেটিংস",
- "gui_settings_authenticate_no_auth_option": "অথেনটিকেশন ছাড়া, বা কুকি অথেনটিকেশন",
- "gui_settings_authenticate_password_option": "পাসওয়ার্ড",
- "gui_settings_password_label": "পাসওয়ার্ড",
- "gui_settings_tor_bridges": "Tor ব্রিজ সাপোর্ট",
- "gui_settings_tor_bridges_no_bridges_radio_option": "ব্রিজ ব্যবহার করো না",
- "gui_settings_tor_bridges_obfs4_radio_option": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "নিজস্ব obfs4 প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "নিজস্ব meek_lite (Azure) প্লাগেবল ট্রান্সপোর্ট ব্যবহার করো (obfs4proxy লাগবে)",
- "gui_settings_meek_lite_expensive_warning": "সতর্কতা: meek_lite ব্রিজ পরিচালনা করা Tor Project-এর জন্য অনেক ব্যয়বহুল।<br><br>এগুলো তখনই ব্যবহার করুন যখন Tor-এ সরাসরি কানেক্ট করতে পারছেন না, obfs4 ট্রান্সপোর্ট দিয়ে, অথবা অন্যান্য সাধারণ ব্রিজ দিয়ে।",
- "gui_settings_tor_bridges_custom_radio_option": "কাস্টম ব্রিজ ব্যবহার করো",
- "gui_settings_tor_bridges_custom_label": "ব্রিজ পেতে চাইলে <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> দেখুন",
- "gui_settings_tor_bridges_invalid": "আপনার দেয়া কোন ব্রিজই কাজ করছে না।\nআরেকবার চেক করে দেখুন বা নতুন ব্রিজ দিয়ে চেষ্টা করুন।",
- "gui_settings_button_save": "সেভ",
- "gui_settings_button_cancel": "বাতিল",
- "gui_settings_button_help": "সাহায্য",
- "gui_settings_autostop_timer_checkbox": "কানেকশন বন্ধ করার জন্য অটোমেটিক টাইমার ব্যবহার করো",
- "gui_settings_autostop_timer": "শেয়ার বন্ধ করুন:",
- "settings_error_unknown": "টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না কারণ আপনার বিন্যাসনসমূহ বোধগম্য নয় ।",
- "settings_error_automatic": "টর নিয়ন্ত্রকের সাথে সংযোগ স্থাপন করা যায়নি । টর ব্রাউজার (torproject.org থেকে পাওয়া যায়) ব্রাকগ্রাউন চলমান?",
- "settings_error_socket_port": "{}: {} এ টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারছি না ।",
- "settings_error_socket_file": "সকেট ফাইল {} ব্যবহার করে টর নিয়ন্ত্রকের সাথে সংযোগ করতে পারে না ।",
- "settings_error_auth": "{}: {}-এর সাথে সংযুক্ত, কিন্তু পরীক্ষা করা যাচ্ছে না । হয়তো এটা কোন টর নিয়ন্ত্রক নয়?",
- "settings_error_missing_password": "টর কন্ট্রোলার সাথে সংযুক্ত, কিন্তু তা প্রমাণীকরণ একটি পাসওয়ার্ড প্রয়োজন.",
- "settings_error_unreadable_cookie_file": "টর নিয়ন্ত্রকের সাথে সংযুক্ত, কিন্তু পাসওয়ার্ড ভুল হতে পারে, অথবা আপনার ব্যবহারকারীকে কুকি ফাইলে পড়ার অনুমতি দেওয়া হয়নি।",
- "settings_error_bundled_tor_not_supported": "OnionShare এর সাথে আসা টর সংস্করণটি ব্যবহার করে উইন্ডোজ বা ম্যাকোসে ডেভেলপার মোডে কাজ করে না।",
- "settings_error_bundled_tor_timeout": "টর সাথে সংযোগ করার জন্য খুব বেশি সময় লাগছে। হয়তো আপনি ইন্টারনেটের সাথে সংযুক্ত নন, অথবা একটি ভুল সিস্টেম ঘড়ি আছে?",
- "settings_error_bundled_tor_broken": "ব্যাকগ্রাউন্ডে OnionShare টর এর সাথে সংযুক্ত নয়:\n\n\n{}",
- "settings_test_success": "টর কন্ট্রোলার এর সঙ্গে যুক্ত হয়েছে ।\n\nটর সংস্করণ: {}\nOnion Services সেবা সমর্থন করে: {}.\nক্লায়েন্ট প্রমাণীকরণ সমর্থন করে: {}.\nnext-gen .onion ঠিকানাগুলো সমর্থন করে: {} ।",
- "error_tor_protocol_error": "টর-এ একটি ত্রুটি ছিল: {}",
- "error_tor_protocol_error_unknown": "টর-এ একটি অজানা ত্রুটি আছে",
- "error_invalid_private_key": "এই ব্যক্তিগত কী ধরন টি অসমর্থিত",
- "connecting_to_tor": "টর নেটওয়ার্কে সংযুক্ত হচ্ছে",
- "update_available": "নতুন OnionShare বের হয়েছে । এটি পেতে এখানে <a href='{}'>ক্লিক করুন</a> । <br><br>আপনি {} এবং সাম্প্রতিকতম {} ব্যবহার করছেন ।",
- "update_error_check_error": "নতুন সংস্করণের জন্য পরীক্ষা করা যায়নি: onionshare ওয়েবসাইট বলছে সাম্প্রতিক সংস্করণটি হচ্ছে অস্বীকৃত ' {} '…",
- "update_error_invalid_latest_version": "নতুন সংস্করণের জন্য পরীক্ষা করা যায়নি: হয়তো আপনি টর-এর সাথে সংযুক্ত নন, অথবা OnionShare ওয়েবসাইট বন্ধ আছে?",
- "update_not_available": "আপনি সর্বশেষ OnionShare চালাচ্ছেন ।",
- "gui_tor_connection_ask": "টর থেকে সংযোগ সাজাতে সেটিংস খুলুন?",
- "gui_tor_connection_ask_open_settings": "হ্যাঁ",
- "gui_tor_connection_ask_quit": "প্রস্থান করুন",
- "gui_tor_connection_error_settings": "কিভাবে onionshare সেটিংসে টর নেটওয়ার্ক সংযোগ করে পরিবর্তন করতে চেষ্টা করুন ।",
- "gui_tor_connection_canceled": "টর-এ সংযোগ করা যায়নি ।\n\nআপনি ইন্টারনেটের সাথে সংযুক্ত আছেন কিনা তা নিশ্চিত করুন, তারপর onionshare পুনরায় খুলুন এবং টর এর সংযোগটি সেট আপ করুন ।",
- "gui_tor_connection_lost": "টর থেকে বিচ্ছিন্ন ।",
- "gui_server_started_after_autostop_timer": "সার্ভার শুরু হওয়ার আগেই অটো স্টপ টাইমার শেষ হয়ে যায় ।\n\nঅনুগ্রহ করে একটি নতুন শেয়ার তৈরি করুন.",
- "gui_server_autostop_timer_expired": "অটো-স্টপ টাইমার ইতিমধ্যেই শেষ হয়ে গিয়েছে ।\n\nঅনুগ্রহ করে শেয়ারিং শুরু করতে এটি আপডেট করুন.",
- "share_via_onionshare": "এটি OnionShare",
- "gui_use_legacy_v2_onions_checkbox": "লিগ্যাসি ঠিকানাগুলি ব্যবহার করুন",
- "gui_save_private_key_checkbox": "একটি অবিরাম ঠিকানা ব্যবহার করুন",
- "gui_share_url_description": "এই OnionShare ঠিকানার সাথে <b>যে কেউ</b> <b>টর ব্রাউজার</b> ব্যবহার করে আপনার ফাইলগুলি <b>ডাউনলোড</b> করতে পারে:<img src='{}' />",
- "gui_receive_url_description": "এই OnionShare ঠিকানার সাথে <b>যে কেউ</b> <b>টর ব্রাউজার</b> ব্যবহার করে আপনার কম্পিউটারে ফাইলগুলি <b>আপলোড</b> করতে পারে:<img src='{}' />",
- "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_status_indicator_receive_stopped": "পাওয়ার জন্য প্রস্তুত",
- "gui_status_indicator_receive_working": "শুরু…",
- "gui_status_indicator_receive_started": "গ্রহণ",
- "gui_file_info": "{} ফাইল, {}",
- "gui_file_info_single": "{} ফাইল, {}",
- "history_in_progress_tooltip": "{} অগ্রসর হচ্ছে",
- "history_completed_tooltip": "{} সম্পূর্ণ",
- "info_in_progress_uploads_tooltip": "",
- "info_completed_uploads_tooltip": "",
- "error_cannot_create_downloads_dir": "",
- "receive_mode_downloads_dir": "",
- "receive_mode_warning": "সতর্কীকরণ: প্রাপ্ত মোড লোকজনকে আপনার কম্পিউটারে ফাইল আপলোড করতে দেয় । আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।",
- "gui_receive_mode_warning": "গ্রহণ মোডে লোকজন আপনার কম্পিউটারে ফাইলগুলো আপলোড করতে দেয় । <br><br><b>আপনি যদি তাদের খোলেন তবে কিছু ফাইল সম্ভবত আপনার কম্পিউটারের নিয়ন্ত্রণ নিতে পারে । শুধুমাত্র আপনি যে ব্যক্তিদের বিশ্বাস করেন, অথবা আপনি যদি জানেন আপনি কি করছেন তা শুধুমাত্র খোলা জিনিস ।</b>",
- "receive_mode_upload_starting": "মোট আকারের {} টি আপলোড শুরু হচ্ছে",
- "receive_mode_received_file": "প্রাপ্ত: {}",
- "gui_mode_share_button": "ফাইলগুলো শেয়ার করুন",
- "gui_mode_receive_button": "ফাইল গ্রহণ করা হচ্ছে",
- "gui_settings_receiving_label": "সেটিংস গ্রহণ করা হচ্ছে",
- "gui_settings_downloads_label": "",
- "gui_settings_downloads_button": "দেখা",
- "gui_settings_public_mode_checkbox": "সর্বজনীন মোড",
- "systray_close_server_title": "",
- "systray_close_server_message": "",
- "systray_page_loaded_title": "পৃষ্ঠা লোড করা হয়েছে",
- "systray_download_page_loaded_message": "",
- "systray_upload_page_loaded_message": "",
- "gui_uploads": "",
- "gui_no_uploads": "",
- "gui_clear_history": "",
- "gui_upload_in_progress": "",
- "gui_upload_finished_range": "",
- "gui_upload_finished": "",
- "gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "ফোল্ডার খোলা যাচ্ছে না কারণ nautilus বিদ্যমান নয় । ফাইলটি এখানে: {}",
- "gui_settings_language_label": "পছন্দনীয় ভাষা",
- "gui_settings_language_changed_notice": "আপনার ভাষার পরিবর্তন প্রভাব বিস্তার করার জন্য OnionShare পুনর্সূচনা করুন.",
- "gui_add_files": "ফাইল যোগ করো",
- "gui_add_folder": "ফোল্ডার যোগ করো",
- "gui_settings_onion_label": "Onion সেটিংস",
- "gui_connect_to_tor_for_onion_settings": "onion সেবা সেটিংস দেখতে টর এর সাথে সংযোগ করুন",
- "error_cannot_create_data_dir": "onionshare ডাটা ফোল্ডার তৈরি করা যায়নি: {}",
- "receive_mode_data_dir": "আপনার কাছে পাঠানো ফাইলসমূহ এই ফোল্ডারে প্রদর্শিত হয়েছে: {}",
- "gui_settings_data_dir_label": "ফাইল সংরক্ষণ করুন",
- "gui_settings_data_dir_browse_button": "ব্রাউজ",
- "systray_page_loaded_message": "onionshare ঠিকানা লোড করা হয়েছে",
- "systray_share_started_title": "শেয়ারিং শুরু করা হয়েছে",
- "systray_share_completed_title": "শেয়ারিং সম্পূর্ণ হয়েছে",
- "systray_share_completed_message": "ফাইল পাঠানো শেষ হয়েছে",
- "systray_share_canceled_title": "শেয়ারকরণ বাতিল করা হয়েছে",
- "systray_share_canceled_message": "কেউ আপনার ফাইল গ্রহণ করা বাতিল করেছে",
- "systray_receive_started_title": "গ্রহণ শুরু হয়েছে",
- "systray_receive_started_message": "কেউ আপনার কাছে ফাইল পাঠাচ্ছে",
- "gui_all_modes_history": "ইতিহাস",
- "gui_all_modes_clear_history": "সব পরিষ্কার করুন",
- "gui_all_modes_transfer_started": "{} শুরু হয়েছে",
- "systray_share_started_message": "কাউকে ফাইল পাঠাতে শুরু",
- "gui_all_modes_transfer_finished_range": "স্থানান্তরিত হয়েছে {} - {}",
- "gui_all_modes_transfer_finished": "স্থানান্তরিত {}",
- "gui_all_modes_transfer_canceled_range": "বাতিলকৃত {} - {}",
- "gui_all_modes_transfer_canceled": "বাতিলকৃত {}",
- "gui_all_modes_progress_complete": "%p%, {0: সে} অতিক্রান্ত হয়েছে ।",
- "gui_all_modes_progress_starting": "{0:সে}, %p% (গণনা করা হচ্ছে)",
- "gui_all_modes_progress_eta": "{0:সে}, ইটিএ: {1: সে}, %p%",
- "gui_share_mode_no_files": "এখনও কোন ফাইল পাঠানো হয়নি",
- "gui_share_mode_autostop_timer_waiting": "প্রেরণ শেষ করার জন্য অপেক্ষা করছে",
- "gui_receive_mode_no_files": "কোন ফাইল এখনও প্রাপ্ত হয়নি",
- "gui_receive_mode_autostop_timer_waiting": "প্রাপ্তির শেষ পর্যন্ত অপেক্ষা করছে"
-}
diff --git a/share/locale/hu.json b/share/locale/hu.json
deleted file mode 100644
index 3a6bba0c..00000000
--- a/share/locale/hu.json
+++ /dev/null
@@ -1,190 +0,0 @@
-{
- "config_onion_service": "",
- "preparing_files": "Fájlok tömörítése.",
- "give_this_url": "",
- "give_this_url_stealth": "",
- "give_this_url_receive": "",
- "give_this_url_receive_stealth": "",
- "ctrlc_to_stop": "",
- "not_a_file": "",
- "not_a_readable_file": "{0:s} nem egy olvasható fájl.",
- "no_available_port": "Nem található elérhető port az onion szolgáltatás indításához",
- "other_page_loaded": "Cím betöltve",
- "close_on_autostop_timer": "Leállítva, mert az auto-sop időzítő lejárt",
- "closing_automatically": "Leállítva, mert az átvitel véget ért",
- "timeout_download_still_running": "",
- "large_filesize": "",
- "systray_menu_exit": "Kilépés",
- "systray_download_started_title": "",
- "systray_download_started_message": "",
- "systray_download_completed_title": "",
- "systray_download_completed_message": "",
- "systray_download_canceled_title": "",
- "systray_download_canceled_message": "",
- "systray_upload_started_title": "",
- "systray_upload_started_message": "",
- "help_local_only": "",
- "help_stay_open": "",
- "help_autostop_timer": "",
- "help_stealth": "",
- "help_receive": "",
- "help_verbose": "",
- "help_filename": "",
- "help_config": "",
- "gui_drag_and_drop": "",
- "gui_add": "Hozzáadás",
- "gui_delete": "Törlés",
- "gui_choose_items": "Kiválaszt",
- "gui_share_start_server": "Megosztás kezdése",
- "gui_share_stop_server": "Megosztás leállítása",
- "gui_share_stop_server_autostop_timer": "Megosztás leállítása ({})",
- "gui_share_stop_server_autostop_timer_tooltip": "",
- "gui_receive_start_server": "Fogadó mód indítása",
- "gui_receive_stop_server": "Fogadó mód leállítása",
- "gui_receive_stop_server_autostop_timer": "",
- "gui_receive_stop_server_autostop_timer_tooltip": "",
- "gui_copy_url": "",
- "gui_copy_hidservauth": "",
- "gui_downloads": "",
- "gui_no_downloads": "",
- "gui_canceled": "",
- "gui_copied_url_title": "",
- "gui_copied_url": "",
- "gui_copied_hidservauth_title": "",
- "gui_copied_hidservauth": "",
- "gui_please_wait": "",
- "gui_download_upload_progress_complete": "",
- "gui_download_upload_progress_starting": "",
- "gui_download_upload_progress_eta": "",
- "version_string": "",
- "gui_quit_title": "",
- "gui_share_quit_warning": "",
- "gui_receive_quit_warning": "",
- "gui_quit_warning_quit": "Kilépés",
- "gui_quit_warning_dont_quit": "Megszakítás",
- "error_rate_limit": "",
- "zip_progress_bar_format": "",
- "error_stealth_not_supported": "",
- "error_ephemeral_not_supported": "",
- "gui_settings_window_title": "Beállítások",
- "gui_settings_whats_this": "",
- "gui_settings_stealth_option": "",
- "gui_settings_stealth_hidservauth_string": "",
- "gui_settings_autoupdate_label": "",
- "gui_settings_autoupdate_option": "",
- "gui_settings_autoupdate_timestamp": "",
- "gui_settings_autoupdate_timestamp_never": "Soha",
- "gui_settings_autoupdate_check_button": "",
- "gui_settings_general_label": "Általános beállítások",
- "gui_settings_sharing_label": "",
- "gui_settings_close_after_first_download_option": "",
- "gui_settings_connection_type_label": "",
- "gui_settings_connection_type_bundled_option": "",
- "gui_settings_connection_type_automatic_option": "",
- "gui_settings_connection_type_control_port_option": "",
- "gui_settings_connection_type_socket_file_option": "",
- "gui_settings_connection_type_test_button": "",
- "gui_settings_control_port_label": "Kontroll port",
- "gui_settings_socket_file_label": "",
- "gui_settings_socks_label": "",
- "gui_settings_authenticate_label": "",
- "gui_settings_authenticate_no_auth_option": "",
- "gui_settings_authenticate_password_option": "Password",
- "gui_settings_password_label": "Password",
- "gui_settings_tor_bridges": "",
- "gui_settings_tor_bridges_no_bridges_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
- "gui_settings_meek_lite_expensive_warning": "",
- "gui_settings_tor_bridges_custom_radio_option": "",
- "gui_settings_tor_bridges_custom_label": "",
- "gui_settings_tor_bridges_invalid": "",
- "gui_settings_button_save": "Mentés",
- "gui_settings_button_cancel": "Megszakítás",
- "gui_settings_button_help": "Súgó",
- "gui_settings_autostop_timer_checkbox": "",
- "gui_settings_autostop_timer": "",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
- "error_tor_protocol_error_unknown": "",
- "error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
- "gui_tor_connection_ask_open_settings": "Igen",
- "gui_tor_connection_ask_quit": "Kilépés",
- "gui_tor_connection_error_settings": "",
- "gui_tor_connection_canceled": "",
- "gui_tor_connection_lost": "",
- "gui_server_started_after_autostop_timer": "",
- "gui_server_autostop_timer_expired": "",
- "share_via_onionshare": "",
- "gui_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": "Megosztás",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
- "gui_status_indicator_receive_started": "Bevétel",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
- "info_in_progress_uploads_tooltip": "",
- "info_completed_uploads_tooltip": "",
- "error_cannot_create_downloads_dir": "",
- "receive_mode_downloads_dir": "",
- "receive_mode_warning": "",
- "gui_receive_mode_warning": "",
- "receive_mode_upload_starting": "",
- "receive_mode_received_file": "",
- "gui_mode_share_button": "",
- "gui_mode_receive_button": "",
- "gui_settings_receiving_label": "",
- "gui_settings_downloads_label": "",
- "gui_settings_downloads_button": "Tallózás",
- "gui_settings_receive_allow_receiver_shutdown_checkbox": "",
- "gui_settings_public_mode_checkbox": "",
- "systray_close_server_title": "",
- "systray_close_server_message": "",
- "systray_page_loaded_title": "",
- "systray_download_page_loaded_message": "",
- "systray_upload_page_loaded_message": "",
- "gui_uploads": "",
- "gui_no_uploads": "",
- "gui_clear_history": "Az összes törlése",
- "gui_upload_in_progress": "",
- "gui_upload_finished_range": "",
- "gui_upload_finished": "",
- "gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "",
- "gui_settings_language_label": "Előnyben részesített nyelv",
- "gui_settings_language_changed_notice": "",
- "gui_add_files": "Fájlok hozzáadása",
- "gui_add_folder": "Mappák hozzáadása",
- "gui_stop_server_autostop_timer_tooltip": "Auto-stop időzítő megáll: {}",
- "gui_start_server_autostart_timer_tooltip": "Auto-start időzítő megáll: {}",
- "incorrect_password": "Rossz jelszó"
-}
diff --git a/share/locale/uk.json b/share/locale/uk.json
deleted file mode 100644
index 93080c67..00000000
--- a/share/locale/uk.json
+++ /dev/null
@@ -1,183 +0,0 @@
-{
- "preparing_files": "Стискання файлів.",
- "not_a_readable_file": "{0:s} - файл що не читається.",
- "no_available_port": "Не вдалося знайти доступний порт для запуску onion служби",
- "other_page_loaded": "Адресу завантажено",
- "close_on_autostop_timer": "Зупинено, бо збіг час таймеру автоспину",
- "closing_automatically": "Зупинено, бо передачу виконано",
- "large_filesize": "Увага: відправлення великого об'єму може тривати години",
- "gui_drag_and_drop": "Перетягніть файли та теки\nдля поширення",
- "gui_add": "Додати",
- "gui_add_files": "Додати Файли",
- "gui_add_folder": "Додати Теку",
- "gui_delete": "Видалити",
- "gui_choose_items": "Вибрати",
- "gui_share_start_server": "Розпочати поширення",
- "gui_share_stop_server": "Припинити поширення",
- "gui_share_stop_server_autostop_timer": "Припинити поширення ({})",
- "gui_stop_server_autostop_timer_tooltip": "Таймеру автоспину спливає о {}",
- "gui_start_server_autostart_timer_tooltip": "Таймеру автостарту спливає о {}",
- "gui_receive_start_server": "Розпочати Режим Отримання",
- "gui_receive_stop_server": "Зупинити Режим Отримання",
- "gui_receive_stop_server_autostop_timer": "Зупинити Режим Отримання ({} залишилось)",
- "gui_copy_url": "Копіювати Адресу",
- "gui_copy_hidservauth": "Скопіювати HidServAuth",
- "gui_canceled": "Скасовано",
- "gui_copied_url_title": "Скопійовано Адресу OnionShare",
- "gui_copied_url": "Адресу OnionShare скопійовано до буферу обміну",
- "gui_copied_hidservauth_title": "Скопійовано HidServAuth",
- "gui_copied_hidservauth": "Рядок HidServAuth скопійовано до буферу обміну",
- "gui_waiting_to_start": "Заплановано почати за {}. Натисніть для скасування.",
- "gui_please_wait": "Початок... Натисніть для скасування.",
- "gui_quit_title": "Не так швидко",
- "gui_share_quit_warning": "Відбувається передача файлів. Ви впевнені, що бажаєте вийти з OnionShare?",
- "gui_receive_quit_warning": "Відбувається отримання файлів. Ви впевнені, що бажаєте вийти з OnionShare?",
- "gui_quit_warning_quit": "Вийти",
- "gui_quit_warning_dont_quit": "Відміна",
- "error_rate_limit": "Хтось здійснив занадто багато невдалих спроб підключитися до вашого серверу, тому OnionShare зупинив сервер. Розпочніть поширення знову і надішліть одержувачу нову адресу для поширення.",
- "zip_progress_bar_format": "Стискання: %p%",
- "error_stealth_not_supported": "Для авторизації клієнта, вам потрібні принаймні Tor 0.2.9.1-alpha(або Tor Browser 6.5) і python3-stem 1.5.0.",
- "error_ephemeral_not_supported": "OnionShare потребує принаймні Tor 0.2.7.1 і python3-stem 1.4.0.",
- "gui_settings_window_title": "Налаштування",
- "gui_settings_whats_this": "<a href='{0:s}'>Що це?</a>",
- "gui_settings_stealth_option": "Використовувати авторизацію клієнта",
- "gui_settings_stealth_hidservauth_string": "Після збереження вашого закритого ключа для повторного використання, ви можете скопіювати HidServAuth.",
- "gui_settings_autoupdate_label": "Перевірити на наявність оновлень",
- "gui_settings_autoupdate_option": "Повідомляти про наявність нової версії",
- "gui_settings_autoupdate_timestamp": "Востаннє перевірялось: {}",
- "gui_settings_autoupdate_timestamp_never": "Ніколи",
- "gui_settings_autoupdate_check_button": "Перевірити на наявність оновлень",
- "gui_settings_general_label": "Загальні параметри",
- "gui_settings_onion_label": "Параметри Onion",
- "gui_settings_sharing_label": "Параметри поширення",
- "gui_settings_close_after_first_download_option": "Припинити поширення після надсилання файлів",
- "gui_settings_connection_type_label": "Як OnionShare повинен підключатися до Tor?",
- "gui_settings_connection_type_bundled_option": "Використовувати вбудовану в OnionShare версію Tor",
- "gui_settings_connection_type_automatic_option": "Намагатися виконати авто-налаштування за допомогою Tor Browser",
- "gui_settings_connection_type_control_port_option": "Підключатися через порт управління",
- "gui_settings_connection_type_socket_file_option": "Підключатися через файл сокета",
- "gui_settings_connection_type_test_button": "Перевірити підключення до Tor",
- "gui_settings_control_port_label": "Порт управління",
- "gui_settings_socket_file_label": "Файл сокета",
- "gui_settings_socks_label": "SOCKS порт",
- "gui_settings_authenticate_label": "Параметри автентифікації Tor",
- "gui_settings_authenticate_no_auth_option": "Без автентифікації або автентифікація через cookie",
- "gui_settings_authenticate_password_option": "Пароль",
- "gui_settings_password_label": "Пароль",
- "gui_settings_tor_bridges": "Підтримка мосту Tor",
- "gui_settings_tor_bridges_no_bridges_radio_option": "Не використовувати мости",
- "gui_settings_tor_bridges_obfs4_radio_option": "Використовувати вбудовані obfs4 підключаємі транспорти",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Використовувати вбудовані obfs4 підключаємі транспорти (вимагає obfs4proxy)",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Використовувати вбудовані meek_lite (Azure) підключаємі транспорти",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Використовувати вбудовані meek_lite (Azure) підключаємі транспорти (вимагає obfs4proxy)",
- "gui_settings_meek_lite_expensive_warning": "Увага: Мости meek_lite є дуже дорогими для проекту Tor. <br> <br> Використовуйте їх тільки якщо не вдається підключитися до Tor безпосередньо, через obfs4 транспорти або інші звичайні мости.",
- "gui_settings_tor_bridges_custom_radio_option": "Використовувати налаштовані мости",
- "gui_settings_tor_bridges_custom_label": "Ви можете отримати мости з <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
- "gui_settings_tor_bridges_invalid": "Жоден з доданих мостів не працює.\nДвічі перевірте їх або додайте інші.",
- "gui_settings_button_save": "Зберегти",
- "gui_settings_button_cancel": "Скасувати",
- "gui_settings_button_help": "Допомога",
- "gui_settings_autostop_timer_checkbox": "Використовувати таймер автоспину",
- "gui_settings_autostop_timer": "Припинити поширення о:",
- "gui_settings_autostart_timer_checkbox": "Використовувати таймер автозапуску",
- "gui_settings_autostart_timer": "Розпочати поширення о:",
- "settings_error_unknown": "Не вдалося підключитися до контролера Tor, оскільки налаштування не мають сенсу.",
- "settings_error_automatic": "Не вдалося підключитися до контролера Tor. Чи Tor браузер (доступний з torproject.org) запущений?",
- "settings_error_socket_port": "Не вдалося підключитися до контролера Tor за {}: {}.",
- "settings_error_socket_file": "Не вдалося підключитися до контролера Tor за допомогою сокет файлу {}.",
- "settings_error_auth": "Підключений до {}:{}, але не можливо пройти автентифікацію. Чи це не Tor контролер?",
- "settings_error_missing_password": "Підключений до контролера Tor, але він вимагає пароль для автентифікації.",
- "settings_error_unreadable_cookie_file": "Підключений до контролера Тор, але пароль може бути неправильним, або у вас немає прав на читання файлів cookie.",
- "settings_error_bundled_tor_not_supported": "Використання Tor версії, яка поставляється з OnionShare не працює в режимі розробника на Windows або macOS.",
- "settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, ви не підключені до Інтернету або маєте неточний системний час?",
- "settings_error_bundled_tor_broken": "OnionShare не вдалося підключитися до Tor у фоновому режимі:\n{}",
- "settings_test_success": "Підключено до Tor контролера.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.",
- "error_tor_protocol_error": "Сталася помилка з Tor: {}",
- "error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor",
- "connecting_to_tor": "Підключення до мережі Tor",
- "update_available": "Новий OnionShare вийшов. <a href='{}'>Натисніть тут</a> щоб його отримати.<br><br>Ваша версія {}, а остання {}.",
- "update_error_check_error": "Не вдалося перевірити наявність нових версій: веб-сайт OnionShare повідомляє, що не вдалося розпізнати останню версію '{}'…",
- "update_error_invalid_latest_version": "Не вдалося перевірити наявність нової версії: можливо, ви не підключені до Tor або веб-сайт OnionShare не працює?",
- "update_not_available": "Ви використовуєте останню версію OnionShare.",
- "gui_tor_connection_ask": "Відкрити параметри для з'ясування підключення до Tor?",
- "gui_tor_connection_ask_open_settings": "Так",
- "gui_tor_connection_ask_quit": "Вийти",
- "gui_tor_connection_error_settings": "Спробуйте змінити в параметрах те як OnionShare підключається до мережі Tor.",
- "gui_tor_connection_canceled": "Не вдалося підключитися до Tor. \n\nПереконайтеся, що ви підключені до мережі Інтернет, відкрийте OnionShare знову і налаштуйте підключення до Tor.",
- "gui_tor_connection_lost": "Відключено від Tor.",
- "gui_server_started_after_autostop_timer": "Таймер автоспину збіг перед початком роботи сервера. Будь ласка, зробіть нове поширення.",
- "gui_server_autostop_timer_expired": "Час автоспину не може бути однаковим або раніше часу автоматичного запуску. Будь ласка, поновіть його, щоб почати поширення.",
- "gui_server_autostart_timer_expired": "Запланований час вже минув. Будь ласка, поновіть його, щоб почати поширення.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Таймер автоспину вже збіг. Будь ласка, поновіть його, щоб почати поширення.",
- "share_via_onionshare": "Поширюйте через OnionShare",
- "gui_connect_to_tor_for_onion_settings": "Підключіться до Tor, щоб побачити параметри служби onion",
- "gui_use_legacy_v2_onions_checkbox": "Використовувати адреси попередньої версії",
- "gui_save_private_key_checkbox": "Використовувати постійну адресу",
- "gui_share_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> ваші файли, використовуючи <b>Tor Browser</b>: <img src='{}' />",
- "gui_receive_url_description": "<b>Будь-хто</b>, за допомогою цієї адреси, може <b>завантажити</b> файли до вашого комп'ютеру, використовуючи <b>Tor Browser</b>: <img src='{}' />",
- "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_scheduled": "Заплановано…",
- "gui_status_indicator_share_started": "Поширення",
- "gui_status_indicator_receive_stopped": "Готовність до отримання",
- "gui_status_indicator_receive_working": "Початок…",
- "gui_status_indicator_receive_scheduled": "Заплановано…",
- "gui_status_indicator_receive_started": "Отримання",
- "gui_file_info": "{} файл(ів), {}",
- "gui_file_info_single": "{} файл(ів), {}",
- "history_in_progress_tooltip": "{} в процесі",
- "history_completed_tooltip": "{} завершено",
- "error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}",
- "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть забезпечити керування вашим комп'ютером, у разі їх відкриття. Відкривайте речі тільки від довірених осіб, або якщо твердо розумієте що ви робите.</b>",
- "gui_mode_share_button": "Поширення Файлів",
- "gui_mode_receive_button": "Отримання Файлів",
- "gui_settings_receiving_label": "Параметри отримання",
- "gui_settings_data_dir_label": "Зберігати файли до",
- "gui_settings_data_dir_browse_button": "Огляд",
- "gui_settings_public_mode_checkbox": "Публічний режим",
- "gui_open_folder_error_nautilus": "Неможливо відкрити теку бо nautilus недоступний. Файл розташовано: {}",
- "gui_settings_language_label": "Бажана мова",
- "gui_settings_language_changed_notice": "Перезапустіть OnionShare для зміни мови.",
- "systray_menu_exit": "Вийти",
- "systray_page_loaded_title": "Сторінку Завантажено",
- "systray_page_loaded_message": "OnionShare адресу завантажено",
- "systray_share_started_title": "Поширення Розпочато",
- "systray_share_started_message": "Початок посилання комусь файлів",
- "systray_share_completed_title": "Поширення Виконано",
- "systray_share_completed_message": "Завершено відправку файлів",
- "systray_share_canceled_title": "Поширення Скасовано",
- "systray_share_canceled_message": "Хтось скасував отримання ваших файлів",
- "systray_receive_started_title": "Отримання Розпочато",
- "systray_receive_started_message": "Хтось відправляє вам файли",
- "gui_all_modes_history": "Історія",
- "gui_all_modes_clear_history": "Очистити Все",
- "gui_all_modes_transfer_started": "Розпочато {}",
- "gui_all_modes_transfer_finished_range": "Передано {} - {}",
- "gui_all_modes_transfer_finished": "Передано {}",
- "gui_all_modes_transfer_canceled_range": "Скасовано {} - {}",
- "gui_all_modes_transfer_canceled": "Скасовано {}",
- "gui_all_modes_progress_complete": "%p%, {0:s} минуло.",
- "gui_all_modes_progress_starting": "{0:s}, %p% (розрахунок)",
- "gui_all_modes_progress_eta": "{0:s}, приблизно: {1:s}, %p%",
- "gui_share_mode_no_files": "Поки що нічого не відправлено",
- "gui_share_mode_autostop_timer_waiting": "Очікування завершення відправки",
- "gui_receive_mode_no_files": "Поки що нічого не отримано",
- "gui_receive_mode_autostop_timer_waiting": "Очікування завершення отримання",
- "receive_mode_upload_starting": "Завантаження об'ємом {} починається",
- "days_first_letter": "д",
- "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_mode_website_button": "Опублікувати веб-сайт",
- "gui_website_mode_no_files": "Немає опублікованих веб-сайтів",
- "incorrect_password": "Неправильний пароль",
- "gui_settings_individual_downloads_label": "Зніміть прапорець, щоб дозволити завантаження окремих файлів",
- "history_requests_tooltip": "{} веб-запити",
- "gui_settings_csp_header_disabled_option": "Відключити заголовок Політики захисту контенту (CSP)",
- "gui_settings_website_label": "Налаштування веб-сайту"
-}
diff --git a/share/version.txt b/share/version.txt
deleted file mode 100644
index 61618788..00000000
--- a/share/version.txt
+++ /dev/null
@@ -1 +0,0 @@
-2.2 \ No newline at end of file
diff --git a/stdeb.cfg b/stdeb.cfg
deleted file mode 100644
index 96fa3ba4..00000000
--- a/stdeb.cfg
+++ /dev/null
@@ -1,6 +0,0 @@
-[DEFAULT]
-Package3: onionshare
-Depends3: python3, python3-flask, python3-flask-httpauth, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python-nautilus, tor, obfs4proxy, python3-psutil
-Build-Depends: python3, python3-all, python3-pytest, python3-requests, python3-flask, python3-flask-httpauth, python3-stem, python3-pyqt5, python3-crypto, python3-socks, python3-distutils, python3-psutil
-Suite: disco
-X-Python3-Version: >= 3.6
diff --git a/tests/run.sh b/tests/run.sh
deleted file mode 100755
index 184dfc16..00000000
--- a/tests/run.sh
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/bash
-
-# The script runs python tests
-# Firstly, all CLI tests are run
-# Then, all the GUI tests are run individually
-# to avoid segmentation fault
-
-PARAMS=""
-
-while [ ! $# -eq 0 ]
-do
- case "$1" in
- --rungui)
- PARAMS="$PARAMS --rungui"
- ;;
- --runtor)
- PARAMS="$PARAMS --runtor"
- ;;
- esac
- shift
-done
-
-pytest $PARAMS -vvv ./tests/test_cli*.py || exit 1
-for filename in ./tests/test_gui_*.py; do
- pytest $PARAMS -vvv --no-qt-log $filename || exit 1
-done
diff --git a/tests/test_cli_strings.py b/tests/test_cli_strings.py
deleted file mode 100644
index 7ad65191..00000000
--- a/tests/test_cli_strings.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-OnionShare | https://onionshare.org/
-
-Copyright (C) 2014-2018 Micah Lee <micah@micahflee.com>
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.
-"""
-
-import types
-
-import pytest
-
-from onionshare import strings
-from onionshare.settings import Settings
-
-# # Stub get_resource_path so it finds the correct path while running tests
-# def get_resource_path(filename):
-# resources_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'share')
-# path = os.path.join(resources_dir, filename)
-# return path
-# common.get_resource_path = get_resource_path
-
-
-def test_underscore_is_function():
- assert callable(strings._) and isinstance(strings._, types.FunctionType)
-
-
-class TestLoadStrings:
- def test_load_strings_defaults_to_english(
- self, common_obj, locale_en, sys_onionshare_dev_mode
- ):
- """ load_strings() loads English by default """
- common_obj.settings = Settings(common_obj)
- strings.load_strings(common_obj)
- assert strings._("preparing_files") == "Compressing files."
-
- def test_load_strings_loads_other_languages(
- self, common_obj, locale_fr, sys_onionshare_dev_mode
- ):
- """ load_strings() loads other languages in different locales """
- common_obj.settings = Settings(common_obj)
- common_obj.settings.set("locale", "fr")
- strings.load_strings(common_obj)
- assert strings._("preparing_files") == "Compression des fichiers."
-
- def test_load_invalid_locale(
- self, common_obj, locale_invalid, sys_onionshare_dev_mode
- ):
- """ load_strings() raises a KeyError for an invalid locale """
- with pytest.raises(KeyError):
- common_obj.settings = Settings(common_obj)
- common_obj.settings.set("locale", "XX")
- strings.load_strings(common_obj)