aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiguel Jacq <mig@mig5.net>2021-05-11 14:40:07 +1000
committerMiguel Jacq <mig@mig5.net>2021-05-11 14:40:07 +1000
commitc91d67c0b050636cadfc39927a802acee27a24a6 (patch)
tree452a46143231bf5a28995ebf79da747c95973f77
parentb242ea5bde77025aacf72fb01cf8defffc945d14 (diff)
parent6dcdef6a155d10abece0f1a54a90109bf31e7e1e (diff)
downloadonionshare-c91d67c0b050636cadfc39927a802acee27a24a6.tar.gz
onionshare-c91d67c0b050636cadfc39927a802acee27a24a6.zip
Merge branch 'develop' into client_auth_v3
-rw-r--r--CHANGELOG.md6
-rw-r--r--LICENSE2
-rw-r--r--RELEASE.md2
-rw-r--r--cli/onionshare_cli/resources/templates/receive.html8
-rw-r--r--cli/onionshare_cli/settings.py7
-rw-r--r--cli/pyproject.toml2
-rwxr-xr-xdesktop/package/macos/build.py3
-rw-r--r--desktop/package/windows/build.py1
-rw-r--r--desktop/src/onionshare/resources/locale/el.json7
-rw-r--r--desktop/src/onionshare/resources/locale/en.json4
-rw-r--r--desktop/src/onionshare/resources/locale/es.json9
-rw-r--r--desktop/src/onionshare/resources/locale/fr.json7
-rw-r--r--desktop/src/onionshare/resources/locale/gl.json7
-rw-r--r--desktop/src/onionshare/resources/locale/id.json45
-rw-r--r--desktop/src/onionshare/resources/locale/is.json7
-rw-r--r--desktop/src/onionshare/resources/locale/nb_NO.json9
-rw-r--r--desktop/src/onionshare/resources/locale/pl.json4
-rw-r--r--desktop/src/onionshare/resources/locale/tr.json9
-rw-r--r--desktop/src/onionshare/resources/locale/uk.json9
-rw-r--r--desktop/src/onionshare/resources/locale/zh_Hans.json7
-rw-r--r--desktop/src/onionshare/tab/tab.py8
-rw-r--r--desktop/tests/gui_base_test.py13
-rwxr-xr-xdesktop/tests/run.sh3
-rw-r--r--desktop/tests/test_gui_chat.py75
-rw-r--r--desktop/tests/test_gui_tabs.py30
-rw-r--r--docs/README.md72
-rwxr-xr-xdocs/check-weblate.py153
-rw-r--r--docs/gettext/.doctrees/advanced.doctreebin30413 -> 30413 bytes
-rw-r--r--docs/gettext/.doctrees/develop.doctreebin35678 -> 37736 bytes
-rw-r--r--docs/gettext/.doctrees/environment.picklebin37841 -> 37975 bytes
-rw-r--r--docs/gettext/.doctrees/features.doctreebin47169 -> 47169 bytes
-rw-r--r--docs/gettext/.doctrees/help.doctreebin7679 -> 7679 bytes
-rw-r--r--docs/gettext/.doctrees/index.doctreebin3439 -> 3439 bytes
-rw-r--r--docs/gettext/.doctrees/install.doctreebin20613 -> 20613 bytes
-rw-r--r--docs/gettext/.doctrees/security.doctreebin13526 -> 13526 bytes
-rw-r--r--docs/gettext/.doctrees/tor.doctreebin30114 -> 30114 bytes
-rw-r--r--docs/gettext/develop.pot28
-rw-r--r--docs/poetry.lock162
-rw-r--r--docs/pyproject.toml1
-rw-r--r--docs/source/develop.rst197
-rw-r--r--docs/source/locale/id/LC_MESSAGES/index.po30
-rw-r--r--docs/source/locale/id/LC_MESSAGES/install.po105
-rw-r--r--docs/source/locale/nb_NO/LC_MESSAGES/security.po40
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/advanced.po15
-rw-r--r--docs/source/locale/tr/LC_MESSAGES/features.po49
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/advanced.po17
-rw-r--r--docs/source/locale/uk/LC_MESSAGES/features.po64
47 files changed, 992 insertions, 225 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6ac01275..25bdbe31 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,11 +2,13 @@
## 2.3.2
-* New feature: Receive mode supports custom titles
+* New feature: Custom titles can be set for OnionShare's various modes
* New feature: Receive mode supports notification webhooks
-* New feature: Receive mode supports submitting messages as well files
+* New feature: Receive mode supports submitting messages as well as files
* New feature: New ASCII art banner and prettier verbose output
* New feature: Partial support for range requests (pausing and resuming in HTTP)
+* Updated Tor to 0.4.5.7
+* Updated built-in obfs4 bridges
* Various bug fixes
## 2.3.1
diff --git a/LICENSE b/LICENSE
index c2dde1d3..ed4e5238 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-(Note: Third-party licenses can be found under install/licenses/.)
+(Note: Third-party licenses can be found under licenses/.)
OnionShare
Copyright (C) 2014-2021 Micah Lee, et al. <micah@micahflee.com>
diff --git a/RELEASE.md b/RELEASE.md
index 5d28a40f..e69a8184 100644
--- a/RELEASE.md
+++ b/RELEASE.md
@@ -14,6 +14,8 @@ Before making a release, you must update the version in these places:
- [ ] `docs/source/conf.py` (`version` at the top, and the `versions` list too)
- [ ] `snap/snapcraft.yaml`
+If you update flask-socketio, ensure that you also update the [socket.io.min.js](https://github.com/micahflee/onionshare/blob/develop/cli/onionshare_cli/resources/static/js/socket.io.min.js) file to a version that is [supported](https://flask-socketio.readthedocs.io/en/latest/#version-compatibility) by the updated version of flask-socketio.
+
Use tor binaries from the latest Tor Browser:
- [ ] `desktop/scripts/get-tor-osx.py`
diff --git a/cli/onionshare_cli/resources/templates/receive.html b/cli/onionshare_cli/resources/templates/receive.html
index c28813ea..159bfac5 100644
--- a/cli/onionshare_cli/resources/templates/receive.html
+++ b/cli/onionshare_cli/resources/templates/receive.html
@@ -21,11 +21,13 @@
{% if not disable_text and not disable_files %}
<p class="upload-header">Submit Files or Messages</p>
- <p class="upload-description">You can submit files, a message, or both</p>
+ <p class="upload-description">You can submit files, a message, or both.</p>
+ <p class="upload-description">Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.</p>
{% endif %}
{% if not disable_text and disable_files %}
<p class="upload-header">Submit Messages</p>
- <p class="upload-description">You can submit a message</p>
+ <p class="upload-description">You can submit a message.</p>
+ <p class="upload-description">Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.</p>
{% endif %}
{% if disable_text and not disable_files %}
<p class="upload-header">Submit Files</p>
@@ -61,4 +63,4 @@
<script async src="{{ static_url_path }}/js/receive.js" id="receive-script"></script>
</body>
-</html> \ No newline at end of file
+</html>
diff --git a/cli/onionshare_cli/settings.py b/cli/onionshare_cli/settings.py
index 59fcf8df..54a0fcd9 100644
--- a/cli/onionshare_cli/settings.py
+++ b/cli/onionshare_cli/settings.py
@@ -64,12 +64,13 @@ class Settings(object):
"da": "Dansk", # Danish
"nl": "Nederlands", # Dutch
"en": "English", # English
- "fi": "Suomi", # Finnish
+ # "fi": "Suomi", # Finnish
"fr": "Français", # French
"gl": "Galego", # Galician
"de": "Deutsch", # German
"el": "Ελληνικά", # Greek
"is": "Íslenska", # Icelandic
+ "id": "Bahasa Indonesia", # Indonesian
# "ga": "Gaeilge", # Irish
"it": "Italiano", # Italian
"ja": "日本語", # Japanese
@@ -79,10 +80,10 @@ class Settings(object):
"pl": "Polski", # Polish
"pt_BR": "Português (Brasil)", # Portuguese Brazil
"pt_PT": "Português (Portugal)", # Portuguese Portugal
- "sk": "Slovenčina", # Slovak
# "ro": "Română", # Romanian
"ru": "Русский", # Russian
- # "sr_Latn": "Srpska (latinica)", # Serbian (latin)
+ "sr_Latn": "Srpska (latinica)", # Serbian (latin)
+ "sk": "Slovenčina", # Slovak
"es": "Español", # Spanish
"sv": "Svenska", # Swedish
# "te": "తెలుగు", # Telugu
diff --git a/cli/pyproject.toml b/cli/pyproject.toml
index 2a03f351..5bec44a5 100644
--- a/cli/pyproject.toml
+++ b/cli/pyproject.toml
@@ -20,7 +20,7 @@ python = "^3.6"
click = "*"
flask = "*"
flask-httpauth = "*"
-flask-socketio = "*"
+flask-socketio = "5.0.1"
psutil = "*"
pysocks = "*"
requests = {extras = ["socks"], version = "^2.25.1"}
diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py
index ea1e90c9..2bfea3ad 100755
--- a/desktop/package/macos/build.py
+++ b/desktop/package/macos/build.py
@@ -67,7 +67,7 @@ def main():
print("○ Create app bundle")
run(["briefcase", "create"], desktop_dir)
- app_path = os.path.join(desktop_dir, "macOS", "OnionShare", "OnionShare.app")
+ app_path = os.path.join(desktop_dir, "macOS", "app", "OnionShare", "OnionShare.app")
print("○ Delete unused Qt5 frameworks from app bundle")
for framework in [
@@ -212,7 +212,6 @@ def main():
f"{app_path}/Contents/Resources/app_packages/PySide2/pyside2-lupdate",
f"{app_path}/Contents/Resources/app_packages/PySide2/rcc",
f"{app_path}/Contents/Resources/app_packages/PySide2/uic",
- f"{app_path}/Contents/Resources/Support/bin/python3",
app_path,
],
):
diff --git a/desktop/package/windows/build.py b/desktop/package/windows/build.py
index 5fc796d4..bbccbe46 100644
--- a/desktop/package/windows/build.py
+++ b/desktop/package/windows/build.py
@@ -196,6 +196,7 @@ def main():
os.path.join(
desktop_dir,
"windows",
+ "msi",
"OnionShare",
"src",
"app_packages",
diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json
index 1738b1bd..30021a5d 100644
--- a/desktop/src/onionshare/resources/locale/el.json
+++ b/desktop/src/onionshare/resources/locale/el.json
@@ -279,5 +279,10 @@
"gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος",
"gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.",
"gui_chat_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση του OnionShare μπορεί <b>να συμμετέχει στο chat</b> με χρήση του <b>Tor Browser</b>: <img src='{}' />",
- "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα."
+ "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα.",
+ "history_receive_read_message_button": "Ανάγνωση μηνύματος",
+ "mode_settings_receive_webhook_url_checkbox": "Χρήση ειδοποίησης webhook",
+ "mode_settings_receive_disable_files_checkbox": "Απενεργοποίηση της μεταφόρτωσης αρχείων",
+ "mode_settings_receive_disable_text_checkbox": "Απενεργοποίηση υποβολής κειμένου",
+ "mode_settings_title_label": "Προσαρμοσμένος τίτλος"
}
diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json
index 3fdca5c8..612478eb 100644
--- a/desktop/src/onionshare/resources/locale/en.json
+++ b/desktop/src/onionshare/resources/locale/en.json
@@ -102,6 +102,10 @@
"gui_status_indicator_receive_working": "Starting…",
"gui_status_indicator_receive_scheduled": "Scheduled…",
"gui_status_indicator_receive_started": "Receiving",
+ "gui_status_indicator_chat_stopped": "Ready to chat",
+ "gui_status_indicator_chat_working": "Starting…",
+ "gui_status_indicator_chat_scheduled": "Scheduled…",
+ "gui_status_indicator_chat_started": "Chatting",
"gui_file_info": "{} files, {}",
"gui_file_info_single": "{} file, {}",
"history_in_progress_tooltip": "{} in progress",
diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json
index 40eaf617..aad53b03 100644
--- a/desktop/src/onionshare/resources/locale/es.json
+++ b/desktop/src/onionshare/resources/locale/es.json
@@ -292,9 +292,14 @@
"gui_main_page_website_button": "Empezar a alojar",
"gui_main_page_receive_button": "Empezar a recibir",
"gui_main_page_share_button": "Empezar a compartir",
- "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>puede unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
+ "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
"error_port_not_available": "Puerto OnionShare no disponible",
"gui_rendezvous_cleanup_quit_early": "Salir Antes",
"gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.",
- "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color."
+ "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color.",
+ "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificación",
+ "history_receive_read_message_button": "Leer mensaje",
+ "mode_settings_receive_disable_files_checkbox": "Deshabilitar la subida de archivos",
+ "mode_settings_receive_disable_text_checkbox": "Deshabilitar el envío de texto",
+ "mode_settings_title_label": "Título personalizado"
}
diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json
index 5fe6e967..f99e48e7 100644
--- a/desktop/src/onionshare/resources/locale/fr.json
+++ b/desktop/src/onionshare/resources/locale/fr.json
@@ -291,5 +291,10 @@
"error_port_not_available": "Le port OnionShare n’est pas accessible",
"gui_rendezvous_cleanup_quit_early": "Fermer avant",
"gui_rendezvous_cleanup": "En attente de la fermeture des circuits Tor pour être certain que vos fichiers ont été transférés avec succès.\n\nCela pourrait prendre quelques minutes.",
- "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué."
+ "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué.",
+ "history_receive_read_message_button": "Lire le message",
+ "mode_settings_receive_webhook_url_checkbox": "Utiliser un point d’ancrage Web de notification",
+ "mode_settings_receive_disable_files_checkbox": "Désactiver le téléversement de fichiers",
+ "mode_settings_receive_disable_text_checkbox": "Désactiver l’envoi de texte",
+ "mode_settings_title_label": "Titre personnalisé"
}
diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json
index 8dfa398e..d5849f2d 100644
--- a/desktop/src/onionshare/resources/locale/gl.json
+++ b/desktop/src/onionshare/resources/locale/gl.json
@@ -188,5 +188,10 @@
"error_port_not_available": "Non está dispoñible o porto OnionShare",
"gui_rendezvous_cleanup_quit_early": "Saír axiña",
"gui_rendezvous_cleanup": "Agardando a que se pechen tódolos circuitos de Tor para ter certeza de que os ficheiros foron transferidos.\n\nEsto podería tardar un pouco.",
- "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor."
+ "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor.",
+ "error_tor_protocol_error": "Hai un erro con Tor: {}",
+ "history_receive_read_message_button": "Ler mensaxe",
+ "mode_settings_receive_disable_files_checkbox": "Desactivar a subida de ficheiros",
+ "mode_settings_receive_disable_text_checkbox": "Desactivar o envío de texto",
+ "mode_settings_title_label": "Título personalizado"
}
diff --git a/desktop/src/onionshare/resources/locale/id.json b/desktop/src/onionshare/resources/locale/id.json
index b9173f45..2645c503 100644
--- a/desktop/src/onionshare/resources/locale/id.json
+++ b/desktop/src/onionshare/resources/locale/id.json
@@ -109,11 +109,11 @@
"settings_error_auth": "Tersambung ke {}:{}, tetapi tidak bisa mengautentikasi. Mungkin ini bukan pengontrol Tor?",
"settings_error_missing_password": "Terhubung ke pengontrol Tor, tetapi memerlukan kata sandi untuk mengotentikasi.",
"settings_error_unreadable_cookie_file": "Terhubung ke pengontrol Tor, tetapi kata sandi mungkin salah, atau pengguna Anda tidak diizinkan untuk membaca file kuki.",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
+ "settings_error_bundled_tor_not_supported": "Menggunakan versi Tor bawaan OnioShare tidak bekerja dalam mode pengembang di Windows atau macOS.",
+ "settings_error_bundled_tor_timeout": "Terlalu lama terhubung ke Tor. Mungkin Anda tidak terhubung Internet, atau jam sistem tidak akurat?",
+ "settings_error_bundled_tor_broken": "OnioShare tidak dapat terhubung Tor:\n{}",
"settings_test_success": "Terhubung ke pengontrol Tor.\n\nVersi tor: {}\nMendukung layanan ephemeral onion: {}.\nMendukung otentikasi klien: {}.\nMendukung alamat .onion generasi berikutnya: {}.",
- "error_tor_protocol_error": "",
+ "error_tor_protocol_error": "Ada kesalahan dengan Tor: {}",
"error_tor_protocol_error_unknown": "",
"error_invalid_private_key": "",
"connecting_to_tor": "Menghubungkan ke jaringan Tor",
@@ -127,17 +127,17 @@
"gui_tor_connection_error_settings": "Coba ubah cara OnionShare terhubung ke jaringan Tor di pengaturan.",
"gui_tor_connection_canceled": "Tidak dapat terhubung ke Tor.\n\nPastikan Anda terhubung ke Internet, kemudian buka kembali OnionShare dan atur koneksinya ke Tor.",
"gui_tor_connection_lost": "Terputus dari Tor.",
- "gui_server_started_after_autostop_timer": "",
- "gui_server_autostop_timer_expired": "",
+ "gui_server_started_after_autostop_timer": "Timer berhenti otomatis habis sebelum server dimulai. Silakan buat pembagian baru.",
+ "gui_server_autostop_timer_expired": "Timer berhenti otomatis sudah habis. Silakan sesuaikan untuk mulai berbagi.",
"share_via_onionshare": "Bagikan via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
+ "gui_share_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunduh</b> berkas Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_receive_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunggah</b> berkas ke komputer Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.<br><br>Setiap pembagian selanjutnya menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)",
+ "gui_url_label_stay_open": "Pembagian ini tidak akan berhenti otomatis.",
+ "gui_url_label_onetime": "Pembagian ini akan berhenti setelah penyelesaian pertama.",
+ "gui_url_label_onetime_and_persistent": "Pembagian ini tidak akan berhenti otomatis.<br><br>Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)",
"gui_status_indicator_share_stopped": "Siap untuk berbagi",
"gui_status_indicator_share_working": "Memulai…",
"gui_status_indicator_share_started": "Berbagi",
@@ -153,7 +153,7 @@
"error_cannot_create_downloads_dir": "",
"receive_mode_downloads_dir": "",
"receive_mode_warning": "",
- "gui_receive_mode_warning": "",
+ "gui_receive_mode_warning": "Mode menerima membiarkan orang mengunggah berkas ke komputer Anda.<br><br><b>Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.</b>",
"receive_mode_upload_starting": "",
"receive_mode_received_file": "",
"gui_mode_share_button": "",
@@ -256,5 +256,22 @@
"gui_chat_stop_server": "Hentikan server obrolan",
"gui_chat_start_server": "Mulai server obrolan",
"gui_file_selection_remove_all": "Hapus Semua",
- "gui_remove": "Hapus"
+ "gui_remove": "Hapus",
+ "history_receive_read_message_button": "Baca Pesan",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Waktu berhenti otomatis tidak boleh sama atau lebih awal dari waktu mulai otomatis. Silakan sesuaikan untuk mulai berbagi.",
+ "gui_rendezvous_cleanup_quit_early": "Keluar Dini",
+ "gui_rendezvous_cleanup": "Menunggu sirkuit Tor menutup untuk memastikan berkas Anda telah berhasil ditransfer.\n\nIni mungkin perlu beberapa menit.",
+ "mode_settings_receive_webhook_url_checkbox": "Gunakan notifikasi webhook",
+ "mode_settings_receive_disable_files_checkbox": "Nonaktifkan pengunggahan berkas",
+ "mode_settings_receive_disable_text_checkbox": "Nonaktifkan pengiriman teks",
+ "mode_settings_title_label": "Judul kustom",
+ "gui_quit_warning_description": "Pembagian sedang aktif di beberapa tab Anda. Jika Anda keluar, seluruh tab Anda akan tertutup. Apakah Anda yakin mau keluar?",
+ "gui_close_tab_warning_close": "Tutup",
+ "gui_close_tab_warning_website_description": "Anda secara aktif menghosting situs web. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_receive_description": "Anda dalam proses menerima berkas. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_share_description": "Anda dalam proses mengirim berkas. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_persistent_description": "Tab ini persisten. Jika Anda menutup tab ini Anda akan kehilangan alamat onion yang sedang digunakan. Apakah Anda yakin mau menutup tab ini?",
+ "gui_chat_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>bergabung di ruang obrolan ini</b> menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_website_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunjungi</b> situs web Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi."
}
diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json
index d8896bb3..f027dfad 100644
--- a/desktop/src/onionshare/resources/locale/is.json
+++ b/desktop/src/onionshare/resources/locale/is.json
@@ -284,5 +284,10 @@
"error_port_not_available": "OnionShare-gátt ekki tiltæk",
"gui_rendezvous_cleanup_quit_early": "Hætta snemma",
"gui_rendezvous_cleanup": "Bíð eftir að Tor-rásir lokist svo öruggt sé að tekist hafi að flytja skrárnar þínar.\n\nÞetta gæti tekið nokkrar mínútur.",
- "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi."
+ "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi.",
+ "history_receive_read_message_button": "Lesa skilaboð",
+ "mode_settings_receive_webhook_url_checkbox": "Nota webhook fyrir tilkynningar",
+ "mode_settings_receive_disable_files_checkbox": "Gera innsendingu skráa óvirka",
+ "mode_settings_receive_disable_text_checkbox": "Gera innsendingu texta óvirka",
+ "mode_settings_title_label": "Sérsniðinn titill"
}
diff --git a/desktop/src/onionshare/resources/locale/nb_NO.json b/desktop/src/onionshare/resources/locale/nb_NO.json
index 6273c2f2..e854e76f 100644
--- a/desktop/src/onionshare/resources/locale/nb_NO.json
+++ b/desktop/src/onionshare/resources/locale/nb_NO.json
@@ -114,7 +114,7 @@
"settings_error_bundled_tor_timeout": "Det tar for lang tid å koble til Tor. Kanskje du ikke er koblet til Internett, eller har du kanskje en unøyaktig systemklokke?",
"settings_error_bundled_tor_broken": "OnionShare kunne ikke koble til Tor i bakgrunnen:\n{}",
"settings_test_success": "Koblet til Tor-kontrolleren.\n\nTor-versjon: {}.\nStøtter flyktige løk-tjenester: {}.\nStøtter klientidentifisering: {}.\nStøtter nestegenerasjons .onion-adresser: {}.",
- "error_tor_protocol_error": "Feil med Tor: {}",
+ "error_tor_protocol_error": "Det oppsto en feil med Tor: {}",
"error_tor_protocol_error_unknown": "Ukjent feil med Tor",
"error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet",
"connecting_to_tor": "Kobler til Tor-nettverket",
@@ -292,5 +292,10 @@
"error_port_not_available": "OnionShare-port ikke tilgjengelig",
"gui_rendezvous_cleanup_quit_early": "Avslutt tidlig",
"gui_rendezvous_cleanup": "Venter på at Tor-kretsene lukkes for å være sikker på at filene dine er overført.\n\nDette kan ta noen minutter.",
- "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus."
+ "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus.",
+ "history_receive_read_message_button": "Les melding",
+ "mode_settings_receive_webhook_url_checkbox": "Bruk varsling webhook",
+ "mode_settings_receive_disable_files_checkbox": "Deaktiver opplasting av filer",
+ "mode_settings_receive_disable_text_checkbox": "Deaktiver innsending av tekst",
+ "mode_settings_title_label": "Egendefinert tittel"
}
diff --git a/desktop/src/onionshare/resources/locale/pl.json b/desktop/src/onionshare/resources/locale/pl.json
index d143dadd..bd48bf13 100644
--- a/desktop/src/onionshare/resources/locale/pl.json
+++ b/desktop/src/onionshare/resources/locale/pl.json
@@ -7,10 +7,10 @@
"give_this_url_receive_stealth": "Przekaż ten adres i linijkę HidServAuth do nadawcy:",
"ctrlc_to_stop": "Przyciśnij kombinację klawiszy Ctrl i C aby zatrzymać serwer",
"not_a_file": "{0:s} nie jest prawidłowym plikiem.",
- "not_a_readable_file": "{0:s} nie jest plikiem do odczytu.",
+ "not_a_readable_file": "Nie można odczytać {0:s}.",
"no_available_port": "Nie można znaleźć dostępnego portu aby włączyć usługę onion",
"other_page_loaded": "Adres został wczytany",
- "close_on_autostop_timer": "Zatrzymano, ponieważ czasomierz automatycznego zatrzymania wygasł",
+ "close_on_autostop_timer": "Zatrzymano, ponieważ upłynął czas automatycznego zatrzymania",
"closing_automatically": "Zatrzymano, ponieważ transfer został zakończony",
"timeout_download_still_running": "Czekam na ukończenie pobierania",
"large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć kilka godzin",
diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json
index b5baca21..bc9a2acd 100644
--- a/desktop/src/onionshare/resources/locale/tr.json
+++ b/desktop/src/onionshare/resources/locale/tr.json
@@ -102,7 +102,7 @@
"settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?",
"settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}",
"settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.",
- "error_tor_protocol_error": "Tor ile ilgili bir sorun çıktı: {}",
+ "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}",
"error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı",
"error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor",
"connecting_to_tor": "Tor ağı ile bağlantı kuruluyor",
@@ -254,5 +254,10 @@
"error_port_not_available": "OnionShare bağlantı noktası kullanılamıyor",
"gui_rendezvous_cleanup_quit_early": "Erken Çık",
"gui_rendezvous_cleanup": "Dosyalarınızın başarıyla aktarıldığından emin olmak için Tor devrelerinin kapanması bekleniyor.\n\nBu, birkaç dakika sürebilir.",
- "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın."
+ "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın.",
+ "history_receive_read_message_button": "Mesajı Oku",
+ "mode_settings_receive_webhook_url_checkbox": "Bildirim web kancası kullan",
+ "mode_settings_receive_disable_files_checkbox": "Dosya yüklemeyi devre dışı bırak",
+ "mode_settings_receive_disable_text_checkbox": "Metin göndermeyi devre dışı bırak",
+ "mode_settings_title_label": "Özel başlık"
}
diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json
index b6546107..c53451f1 100644
--- a/desktop/src/onionshare/resources/locale/uk.json
+++ b/desktop/src/onionshare/resources/locale/uk.json
@@ -88,7 +88,7 @@
"settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, відсутнє з'єднання з Інтернетом або у вас неточний системний час?",
"settings_error_bundled_tor_broken": "OnionShare не вдалося з'єднатися з Tor:\n{}",
"settings_test_success": "З'єднано з контролером Tor.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.",
- "error_tor_protocol_error": "Сталася помилка з Tor: {}",
+ "error_tor_protocol_error": "Сталася помилка Tor: {}",
"error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor",
"connecting_to_tor": "З'єднання з мережею Tor",
"update_available": "Випущено новий OnionShare. <a href='{}'>Натисніть тут,</a> щоб його отримати.<br><br>Ваша версія {}, а найновіша {}.",
@@ -229,5 +229,10 @@
"error_port_not_available": "Порт OnionShare недоступний",
"gui_rendezvous_cleanup_quit_early": "Вийти раніше",
"gui_rendezvous_cleanup": "Очікування закриття схем Tor, щоб переконатися, що файли успішно передано.\n\nЦе може тривати кілька хвилин.",
- "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим."
+ "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим.",
+ "mode_settings_receive_webhook_url_checkbox": "Застосовувати мережні обробники сповіщень",
+ "history_receive_read_message_button": "Читати повідомлення",
+ "mode_settings_receive_disable_files_checkbox": "Вимкнути передавання файлів",
+ "mode_settings_receive_disable_text_checkbox": "Вимкнути надсилання тексту",
+ "mode_settings_title_label": "Власний заголовок"
}
diff --git a/desktop/src/onionshare/resources/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json
index 9f8aa7d6..d1d16723 100644
--- a/desktop/src/onionshare/resources/locale/zh_Hans.json
+++ b/desktop/src/onionshare/resources/locale/zh_Hans.json
@@ -281,5 +281,10 @@
"gui_chat_url_description": "<b>任何</b>有这个OnionShare地址的人均可 <b>加入这个聊天室</b>,方法是使用<b>Tor浏览器</b>:<img src='{}' />",
"gui_rendezvous_cleanup_quit_early": "提前退出",
"gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文件传输成功。\n\n这可能需要几分钟。",
- "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。"
+ "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。",
+ "history_receive_read_message_button": "读取消息",
+ "mode_settings_receive_webhook_url_checkbox": "使用通知 webhook",
+ "mode_settings_receive_disable_files_checkbox": "禁用上传文件",
+ "mode_settings_receive_disable_text_checkbox": "禁用提交文本",
+ "mode_settings_title_label": "自定义标题"
}
diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py
index 2d9b1a8c..062bf6b7 100644
--- a/desktop/src/onionshare/tab/tab.py
+++ b/desktop/src/onionshare/tab/tab.py
@@ -452,20 +452,20 @@ class Tab(QtWidgets.QWidget):
# Chat mode
if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED:
self.set_server_status_indicator_stopped(
- strings._("gui_status_indicator_receive_stopped")
+ strings._("gui_status_indicator_chat_stopped")
)
elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING:
if self.settings.get("general", "autostart_timer"):
self.set_server_status_indicator_working(
- strings._("gui_status_indicator_receive_scheduled")
+ strings._("gui_status_indicator_chat_scheduled")
)
else:
self.set_server_status_indicator_working(
- strings._("gui_status_indicator_receive_working")
+ strings._("gui_status_indicator_chat_working")
)
elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED:
self.set_server_status_indicator_started(
- strings._("gui_status_indicator_receive_started")
+ strings._("gui_status_indicator_chat_started")
)
def set_server_status_indicator_stopped(self, label_text):
diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py
index 31a3b792..53a66363 100644
--- a/desktop/tests/gui_base_test.py
+++ b/desktop/tests/gui_base_test.py
@@ -14,6 +14,7 @@ from onionshare import Application, MainWindow, GuiCommon
from onionshare.tab.mode.share_mode import ShareMode
from onionshare.tab.mode.receive_mode import ReceiveMode
from onionshare.tab.mode.website_mode import WebsiteMode
+from onionshare.tab.mode.chat_mode import ChatMode
from onionshare import strings
@@ -133,6 +134,17 @@ class GuiBaseTest(unittest.TestCase):
return tab
+ def new_chat_tab(self):
+ tab = self.gui.tabs.widget(0)
+ self.verify_new_tab(tab)
+
+ # Chat
+ tab.chat_button.click()
+ self.assertFalse(tab.new_tab.isVisible())
+ self.assertTrue(tab.chat_mode.isVisible())
+
+ return tab
+
def close_all_tabs(self):
for _ in range(self.gui.tabs.count()):
tab = self.gui.tabs.widget(0)
@@ -361,6 +373,7 @@ class GuiBaseTest(unittest.TestCase):
and not tab.settings.get("share", "autostop_sharing")
)
or (type(tab.get_mode()) == WebsiteMode)
+ or (type(tab.get_mode()) == ChatMode)
):
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
diff --git a/desktop/tests/run.sh b/desktop/tests/run.sh
index 833c1516..0f019b05 100755
--- a/desktop/tests/run.sh
+++ b/desktop/tests/run.sh
@@ -2,4 +2,5 @@
pytest -v tests/test_gui_tabs.py && \
pytest -v tests/test_gui_share.py && \
pytest -v tests/test_gui_receive.py && \
-pytest -v tests/test_gui_website.py
+pytest -v tests/test_gui_website.py && \
+pytest -v tests/test_gui_chat.py
diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py
new file mode 100644
index 00000000..7a19168b
--- /dev/null
+++ b/desktop/tests/test_gui_chat.py
@@ -0,0 +1,75 @@
+import requests
+
+from PySide2 import QtTest
+
+from .gui_base_test import GuiBaseTest
+
+
+class TestChat(GuiBaseTest):
+ # Shared test methods
+
+ def view_chat(self, tab):
+ """Test that we can view the chat room"""
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ if tab.settings.get("general", "public"):
+ r = requests.get(url)
+ else:
+ r = requests.get(
+ url,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ self.assertTrue("Chat <b>requires JavaScript</b>" in r.text)
+
+ cookies_dict = requests.utils.dict_from_cookiejar(r.cookies)
+ self.assertTrue("session" in cookies_dict.keys())
+
+ def change_username(self, tab):
+ """Test that we can change our username"""
+ url = f"http://127.0.0.1:{tab.app.port}/update-session-username"
+ data = {"username":"oniontest"}
+ if tab.settings.get("general", "public"):
+ r = requests.post(url, json=data)
+ else:
+ r = requests.post(
+ url,
+ json=data,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ jsonResponse = r.json()
+ self.assertTrue(jsonResponse["success"])
+ self.assertEqual(jsonResponse["username"], "oniontest")
+
+ def run_all_chat_mode_tests(self, tab):
+ """Tests in chat mode after starting a chat"""
+ self.server_working_on_start_button_pressed(tab)
+ self.server_status_indicator_says_starting(tab)
+ self.server_is_started(tab, startup_time=500)
+ self.web_server_is_running(tab)
+ self.have_a_password(tab)
+ self.url_description_shown(tab)
+ self.have_copy_url_button(tab)
+ self.have_show_qr_code_button(tab)
+ self.server_status_indicator_says_started(tab)
+ self.view_chat(tab)
+ self.change_username(tab)
+ self.server_is_stopped(tab)
+ self.web_server_is_stopped(tab)
+ self.server_status_indicator_says_closed(tab)
+
+ # Tests
+
+ def test_chat(self):
+ """
+ Test chat mode
+ """
+ tab = self.new_chat_tab()
+ self.run_all_chat_mode_tests(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
index 84558420..09f38bb4 100644
--- a/desktop/tests/test_gui_tabs.py
+++ b/desktop/tests/test_gui_tabs.py
@@ -153,11 +153,21 @@ class TestTabs(GuiBaseTest):
self.gui.status_bar.server_status_label.text(), "Ready to share"
)
+ # New tab, chat mode
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(4).chat_button.click()
+ self.assertFalse(self.gui.tabs.widget(4).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(4).chat_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to chat"
+ )
+
# Close tabs
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
def test_07_close_share_tab_while_server_started_should_warn(self):
"""Closing a share mode tab when the server is running should throw a warning"""
@@ -165,7 +175,7 @@ class TestTabs(GuiBaseTest):
self.close_tab_with_active_server(tab)
def test_08_close_receive_tab_while_server_started_should_warn(self):
- """Closing a recieve mode tab when the server is running should throw a warning"""
+ """Closing a receive mode tab when the server is running should throw a warning"""
tab = self.new_receive_tab()
self.close_tab_with_active_server(tab)
@@ -174,22 +184,32 @@ class TestTabs(GuiBaseTest):
tab = self.new_website_tab_with_files()
self.close_tab_with_active_server(tab)
- def test_10_close_persistent_share_tab_shows_warning(self):
+ def test_10_close_chat_tab_while_server_started_should_warn(self):
+ """Closing a chat mode tab when the server is running should throw a warning"""
+ tab = self.new_chat_tab()
+ self.close_tab_with_active_server(tab)
+
+ def test_11_close_persistent_share_tab_shows_warning(self):
"""Closing a share mode tab that's persistent should show a warning"""
tab = self.new_share_tab_with_files()
self.close_persistent_tab(tab)
- def test_11_close_persistent_receive_tab_shows_warning(self):
+ def test_12_close_persistent_receive_tab_shows_warning(self):
"""Closing a receive mode tab that's persistent should show a warning"""
tab = self.new_receive_tab()
self.close_persistent_tab(tab)
- def test_12_close_persistent_website_tab_shows_warning(self):
+ def test_13_close_persistent_website_tab_shows_warning(self):
"""Closing a website mode tab that's persistent should show a warning"""
tab = self.new_website_tab_with_files()
self.close_persistent_tab(tab)
- def test_13_quit_with_server_started_should_warn(self):
+ def test_14_close_persistent_chat_tab_shows_warning(self):
+ """Closing a chat mode tab that's persistent should show a warning"""
+ tab = self.new_chat_tab()
+ self.close_persistent_tab(tab)
+
+ def test_15_quit_with_server_started_should_warn(self):
"""Quitting OnionShare with any active servers should show a warning"""
tab = self.new_share_tab()
diff --git a/docs/README.md b/docs/README.md
index fe026802..029217bb 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -36,3 +36,75 @@ sphinx-intl update -p build/gettext -l de
# Build German translated document
make -e SPHINXOPTS="-D language='de'" html
```
+
+## Discoving which translations are >90% complete
+
+Each OnionShare release should only include a language if >90% of the strings have been translated into it. The script `check-weblate.py` script can be used to make a few hundreds weblate API requests to determine this for you automatically. It requires using your weblate API key, which you can find in your [user profile](https://hosted.weblate.org/accounts/profile/#api).
+
+```
+$ poetry run ./check-weblate.py $WEBLATE_API_KEY
+GET https://hosted.weblate.org/api/projects/onionshare/languages/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/hr/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/eo/
+GET https://hosted.weblate.org/api/translations/onionshare/translations/ja/
+<...snip...>
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/wo/ | error 404
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/ar/
+GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/it/
+
+App translations >= 100%
+=======================
+English (en), 100.0%
+
+App translations >= 90%
+=======================
+Arabic (ar), 95.0%
+Bengali (bn), 95.0%
+Catalan (ca), 93.5%
+Chinese (Simplified) (zh_Hans), 98.0%
+Chinese (Traditional) (zh_Hant), 95.0%
+Croatian (hr), 95.0%
+Danish (da), 94.5%
+Dutch (nl), 92.6%
+French (fr), 98.0%
+Galician (gl), 97.5%
+German (de), 95.0%
+Greek (el), 98.0%
+Icelandic (is), 98.0%
+Indonesian (id), 98.0%
+Italian (it), 94.5%
+Japanese (ja), 94.5%
+Kurdish (Central) (ckb), 94.5%
+Norwegian Bokmål (nb_NO), 98.0%
+Polish (pl), 95.0%
+Portuguese (Brazil) (pt_BR), 95.0%
+Portuguese (Portugal) (pt_PT), 92.6%
+Russian (ru), 95.0%
+Serbian (latin) (sr_Latn), 95.0%
+Slovak (sk), 94.5%
+Spanish (es), 98.0%
+Swedish (sv), 94.5%
+Turkish (tr), 98.0%
+Ukrainian (uk), 98.0%
+
+App translations >= 80%
+=======================
+Finnish (fi), 88.1%
+
+Docs translations >= 100%
+========================
+English (en), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Turkish (tr), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Ukrainian (uk), 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+
+Docs translations >= 90%
+========================
+
+
+Docs translations >= 80%
+========================
+German (de), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Greek (el), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Russian (ru), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+Spanish (es), 90.6%, 100.0%, 82.1%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%, 100.0%
+```
diff --git a/docs/check-weblate.py b/docs/check-weblate.py
new file mode 100755
index 00000000..c3e1be03
--- /dev/null
+++ b/docs/check-weblate.py
@@ -0,0 +1,153 @@
+#!/usr/bin/env python3
+import sys
+import httpx
+import asyncio
+import time
+
+
+api_token = None
+languages = {}
+app_translations = {}
+docs_translations = {}
+
+
+async def api(path):
+ url = f"https://hosted.weblate.org{path}"
+
+ async with httpx.AsyncClient() as client:
+ r = await client.get(
+ url, headers={"Authorization": f"Token {api_token}"}, timeout=30.0
+ )
+
+ if r.status_code == 200:
+ print(f"GET {url}")
+ return r.json()
+ else:
+ print(f"GET {url} | error {r.status_code}")
+ return None
+
+
+async def get_app_translation(lang_code):
+ global app_translations
+ obj = await api(f"/api/translations/onionshare/translations/{lang_code}/")
+ if obj:
+ app_translations[lang_code] = obj["translated_percent"]
+
+
+async def get_docs_translation(component, lang_code):
+ global docs_translations
+ obj = await api(f"/api/translations/onionshare/{component}/{lang_code}/")
+ if obj:
+ if component not in docs_translations:
+ docs_translations[component] = {}
+ docs_translations[component][lang_code] = obj["translated_percent"]
+
+
+async def app_percent_output(percent_min, percent_max=101):
+ out = []
+ for lang_code in languages:
+ if (
+ app_translations[lang_code] >= percent_min
+ and app_translations[lang_code] < percent_max
+ ):
+ out.append(
+ f"{languages[lang_code]} ({lang_code}), {app_translations[lang_code]}%"
+ )
+
+ out.sort()
+
+ print(f"App translations >= {percent_min}%")
+ print("=======================")
+ print("\n".join(out))
+
+ print("")
+
+
+async def docs_percent_output(percent_min, exclude=[]):
+ out = []
+ for lang_code in languages:
+ include_language = True
+ percentages = []
+
+ for component in docs_translations:
+ if lang_code not in docs_translations[component]:
+ include_language = False
+ break
+
+ percentages.append(docs_translations[component][lang_code])
+
+ if docs_translations[component][lang_code] < percent_min:
+ include_language = False
+ break
+
+ if include_language:
+ percentages = [f"{p}%" for p in percentages]
+ percentages = ", ".join(percentages)
+ out.append(f"{languages[lang_code]} ({lang_code}), {percentages}")
+
+ excluded = []
+ for s in out:
+ if s not in exclude:
+ excluded.append(s)
+
+ excluded.sort()
+
+ print(f"Docs translations >= {percent_min}%")
+ print("========================")
+ print("\n".join(excluded))
+
+ print("")
+ return excluded
+
+
+async def main():
+ global api_token, languages, app_translations, docs_translations
+
+ if len(sys.argv) != 2:
+ print(f"Usage: {sys.argv[0]} API_KEY")
+ print(
+ "You can find your personal API key at: https://hosted.weblate.org/accounts/profile/#api"
+ )
+ return
+
+ api_token = sys.argv[1]
+
+ # Get the list of languages in the OnionShare project
+ res = await api("/api/projects/onionshare/languages/")
+ for obj in res:
+ languages[obj["code"]] = obj["language"]
+
+ # Get the app translations for each language
+ await asyncio.gather(*[get_app_translation(lang_code) for lang_code in languages])
+
+ # Get the documentation translations for each component for each language
+ for component in [
+ "doc-advanced",
+ "doc-develop",
+ "doc-features",
+ "doc-help",
+ "doc-index",
+ "doc-install",
+ "doc-security",
+ "doc-sphinx",
+ "doc-tor",
+ ]:
+ docs_futures = []
+ for lang_code in languages:
+ docs_futures.append(get_docs_translation(component, lang_code))
+
+ await asyncio.gather(*docs_futures)
+
+ print("")
+
+ await app_percent_output(100)
+ await app_percent_output(90, 100)
+ await app_percent_output(80, 90)
+
+ out100 = await docs_percent_output(100)
+ out90 = await docs_percent_output(90, out100)
+ await docs_percent_output(80, out100 + out90)
+
+
+if __name__ == "__main__":
+ asyncio.run(main())
diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree
index f3300dc9..3a142d54 100644
--- a/docs/gettext/.doctrees/advanced.doctree
+++ b/docs/gettext/.doctrees/advanced.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree
index c50d1041..8c48f7e0 100644
--- a/docs/gettext/.doctrees/develop.doctree
+++ b/docs/gettext/.doctrees/develop.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle
index 4127bd0e..4b580f66 100644
--- a/docs/gettext/.doctrees/environment.pickle
+++ b/docs/gettext/.doctrees/environment.pickle
Binary files differ
diff --git a/docs/gettext/.doctrees/features.doctree b/docs/gettext/.doctrees/features.doctree
index d5025345..339a9870 100644
--- a/docs/gettext/.doctrees/features.doctree
+++ b/docs/gettext/.doctrees/features.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree
index 9af01519..32e71df0 100644
--- a/docs/gettext/.doctrees/help.doctree
+++ b/docs/gettext/.doctrees/help.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree
index bcb4fc44..6ae4d2f8 100644
--- a/docs/gettext/.doctrees/index.doctree
+++ b/docs/gettext/.doctrees/index.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree
index 5e50e29a..ec507658 100644
--- a/docs/gettext/.doctrees/install.doctree
+++ b/docs/gettext/.doctrees/install.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/security.doctree b/docs/gettext/.doctrees/security.doctree
index 7cd39d9e..0d5182b7 100644
--- a/docs/gettext/.doctrees/security.doctree
+++ b/docs/gettext/.doctrees/security.doctree
Binary files differ
diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree
index ca578150..378ebe7d 100644
--- a/docs/gettext/.doctrees/tor.doctree
+++ b/docs/gettext/.doctrees/tor.doctree
Binary files differ
diff --git a/docs/gettext/develop.pot b/docs/gettext/develop.pot
index 734070ed..8ef36381 100644
--- a/docs/gettext/develop.pot
+++ b/docs/gettext/develop.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: OnionShare 2.3.2\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"POT-Creation-Date: 2021-05-10 18:26-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"
@@ -72,54 +72,54 @@ msgstr ""
msgid "When developing, it's convenient to run OnionShare from a terminal and add the ``--verbose`` (or ``-v``) flag to the command. This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::"
msgstr ""
-#: ../../source/develop.rst:117
+#: ../../source/develop.rst:121
msgid "You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::"
msgstr ""
-#: ../../source/develop.rst:121
+#: ../../source/develop.rst:125
msgid "This can be useful when learning the chain of events that occur when using OnionShare, or the value of certain variables before and after they are manipulated."
msgstr ""
-#: ../../source/develop.rst:124
+#: ../../source/develop.rst:128
msgid "Local Only"
msgstr ""
-#: ../../source/develop.rst:126
+#: ../../source/develop.rst:130
msgid "Tor is slow, and it's often convenient to skip starting onion services altogether during development. You can do this with the ``--local-only`` flag. For example::"
msgstr ""
-#: ../../source/develop.rst:164
+#: ../../source/develop.rst:167
msgid "In this case, you load the URL ``http://onionshare:train-system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of using the Tor Browser."
msgstr ""
-#: ../../source/develop.rst:167
+#: ../../source/develop.rst:170
msgid "Contributing Translations"
msgstr ""
-#: ../../source/develop.rst:169
+#: ../../source/develop.rst:172
msgid "Help make OnionShare easier to use and more familiar and welcoming for people by translating it on `Hosted Weblate <https://hosted.weblate.org/projects/onionshare/>`_. Always keep the \"OnionShare\" in latin letters, and use \"OnionShare (localname)\" if needed."
msgstr ""
-#: ../../source/develop.rst:171
+#: ../../source/develop.rst:174
msgid "To help translate, make a Hosted Weblate account and start contributing."
msgstr ""
-#: ../../source/develop.rst:174
+#: ../../source/develop.rst:177
msgid "Suggestions for Original English Strings"
msgstr ""
-#: ../../source/develop.rst:176
+#: ../../source/develop.rst:179
msgid "Sometimes the original English strings are wrong, or don't match between the application and the documentation."
msgstr ""
-#: ../../source/develop.rst:178
+#: ../../source/develop.rst:181
msgid "File source string improvements by adding @kingu to your Weblate comment, or open a GitHub issue or pull request. The latter ensures all upstream developers see the suggestion, and can potentially modify the string via the usual code review processes."
msgstr ""
-#: ../../source/develop.rst:182
+#: ../../source/develop.rst:185
msgid "Status of Translations"
msgstr ""
-#: ../../source/develop.rst:183
+#: ../../source/develop.rst:186
msgid "Here is the current translation status. If you want start a translation in a language not yet started, please write to the mailing list: onionshare-dev@lists.riseup.net"
msgstr ""
diff --git a/docs/poetry.lock b/docs/poetry.lock
index 1be892f9..3bc4f44a 100644
--- a/docs/poetry.lock
+++ b/docs/poetry.lock
@@ -7,6 +7,14 @@ optional = false
python-versions = "*"
[[package]]
+name = "async-generator"
+version = "1.10"
+description = "Async generators and context managers for Python 3.5+"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[[package]]
name = "babel"
version = "2.9.0"
description = "Internationalization utilities"
@@ -50,6 +58,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
+name = "contextvars"
+version = "2.4"
+description = "PEP 567 Backport"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+immutables = ">=0.9"
+
+[[package]]
name = "docutils"
version = "0.16"
description = "Docutils -- Python Documentation Utilities"
@@ -58,6 +77,48 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
+name = "h11"
+version = "0.12.0"
+description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "httpcore"
+version = "0.13.3"
+description = "A minimal low-level HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+h11 = ">=0.11,<0.13"
+sniffio = ">=1.0.0,<2.0.0"
+
+[package.extras]
+http2 = ["h2 (>=3,<5)"]
+
+[[package]]
+name = "httpx"
+version = "0.18.1"
+description = "The next generation HTTP client."
+category = "main"
+optional = false
+python-versions = ">=3.6"
+
+[package.dependencies]
+async-generator = {version = "*", markers = "python_version < \"3.7\""}
+certifi = "*"
+httpcore = ">=0.13.0,<0.14.0"
+rfc3986 = {version = ">=1.3,<2", extras = ["idna2008"]}
+sniffio = "*"
+
+[package.extras]
+brotli = ["brotlicffi (>=1.0.0,<2.0.0)"]
+http2 = ["h2 (>=3.0.0,<4.0.0)"]
+
+[[package]]
name = "idna"
version = "2.10"
description = "Internationalized Domain Names in Applications (IDNA)"
@@ -74,6 +135,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
[[package]]
+name = "immutables"
+version = "0.15"
+description = "Immutable Collections"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.extras]
+test = ["flake8 (>=3.8.4,<3.9.0)", "pycodestyle (>=2.6.0,<2.7.0)"]
+
+[[package]]
name = "jinja2"
version = "2.11.2"
description = "A very fast and expressive template engine."
@@ -150,6 +222,20 @@ security = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)"]
socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"]
[[package]]
+name = "rfc3986"
+version = "1.5.0"
+description = "Validating URI References per RFC 3986"
+category = "main"
+optional = false
+python-versions = "*"
+
+[package.dependencies]
+idna = {version = "*", optional = true, markers = "extra == \"idna2008\""}
+
+[package.extras]
+idna2008 = ["idna"]
+
+[[package]]
name = "six"
version = "1.15.0"
description = "Python 2 and 3 compatibility utilities"
@@ -158,6 +244,17 @@ optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
[[package]]
+name = "sniffio"
+version = "1.2.0"
+description = "Sniff out which async library your code is running under"
+category = "main"
+optional = false
+python-versions = ">=3.5"
+
+[package.dependencies]
+contextvars = {version = ">=2.1", markers = "python_version < \"3.7\""}
+
+[[package]]
name = "snowballstemmer"
version = "2.0.0"
description = "This package provides 26 stemmers for 25 languages generated from Snowball algorithms."
@@ -314,13 +411,17 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"]
[metadata]
lock-version = "1.1"
python-versions = "^3.6"
-content-hash = "c10cf732636ae0ea2c57b2a5698505a78b3d396c1656a9cd23f3f86ac825c762"
+content-hash = "d146005969ffef66c679fac3bac5aeb4e03b1ec2852e1afefdfe4087a5be789c"
[metadata.files]
alabaster = [
{file = "alabaster-0.7.12-py2.py3-none-any.whl", hash = "sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359"},
{file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"},
]
+async-generator = [
+ {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"},
+ {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"},
+]
babel = [
{file = "Babel-2.9.0-py2.py3-none-any.whl", hash = "sha256:9d35c22fcc79893c3ecc85ac4a56cde1ecf3f19c540bba0922308a6c06ca6fa5"},
{file = "Babel-2.9.0.tar.gz", hash = "sha256:da031ab54472314f210b0adcff1588ee5d1d1d0ba4dbd07b94dba82bde791e05"},
@@ -341,10 +442,25 @@ colorama = [
{file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"},
{file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"},
]
+contextvars = [
+ {file = "contextvars-2.4.tar.gz", hash = "sha256:f38c908aaa59c14335eeea12abea5f443646216c4e29380d7bf34d2018e2c39e"},
+]
docutils = [
{file = "docutils-0.16-py2.py3-none-any.whl", hash = "sha256:0c5b78adfbf7762415433f5515cd5c9e762339e23369dbe8000d84a4bf4ab3af"},
{file = "docutils-0.16.tar.gz", hash = "sha256:c2de3a60e9e7d07be26b7f2b00ca0309c207e06c100f9cc2a94931fc75a478fc"},
]
+h11 = [
+ {file = "h11-0.12.0-py3-none-any.whl", hash = "sha256:36a3cb8c0a032f56e2da7084577878a035d3b61d104230d4bd49c0c6b555a9c6"},
+ {file = "h11-0.12.0.tar.gz", hash = "sha256:47222cb6067e4a307d535814917cd98fd0a57b6788ce715755fa2b6c28b56042"},
+]
+httpcore = [
+ {file = "httpcore-0.13.3-py3-none-any.whl", hash = "sha256:ff614f0ef875b9e5fe0bdd459b31ea0eea282ff12dc82add83d68b3811ee94ad"},
+ {file = "httpcore-0.13.3.tar.gz", hash = "sha256:5d674b57a11275904d4fd0819ca02f960c538e4472533620f322fc7db1ea0edc"},
+]
+httpx = [
+ {file = "httpx-0.18.1-py3-none-any.whl", hash = "sha256:ad2e3db847be736edc4b272c4d5788790a7e5789ef132fc6b5fef8aeb9e9f6e0"},
+ {file = "httpx-0.18.1.tar.gz", hash = "sha256:0a2651dd2b9d7662c70d12ada5c290abcf57373b9633515fe4baa9f62566086f"},
+]
idna = [
{file = "idna-2.10-py2.py3-none-any.whl", hash = "sha256:b97d804b1e9b523befed77c48dacec60e6dcb0b5391d57af6a65a312a90648c0"},
{file = "idna-2.10.tar.gz", hash = "sha256:b307872f855b18632ce0c21c5e45be78c0ea7ae4c15c828c20788b26921eb3f6"},
@@ -353,6 +469,23 @@ imagesize = [
{file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"},
{file = "imagesize-1.2.0.tar.gz", hash = "sha256:b1f6b5a4eab1f73479a50fb79fcf729514a900c341d8503d62a62dbc4127a2b1"},
]
+immutables = [
+ {file = "immutables-0.15-cp35-cp35m-macosx_10_14_x86_64.whl", hash = "sha256:6728f4392e3e8e64b593a5a0cd910a1278f07f879795517e09f308daed138631"},
+ {file = "immutables-0.15-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f0836cd3bdc37c8a77b192bbe5f41dbcc3ce654db048ebbba89bdfe6db7a1c7a"},
+ {file = "immutables-0.15-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8703d8abfd8687932f2a05f38e7de270c3a6ca3bd1c1efb3c938656b3f2f985a"},
+ {file = "immutables-0.15-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:b8ad986f9b532c026f19585289384b0769188fcb68b37c7f0bd0df9092a6ca54"},
+ {file = "immutables-0.15-cp36-cp36m-win_amd64.whl", hash = "sha256:6f117d9206165b9dab8fd81c5129db757d1a044953f438654236ed9a7a4224ae"},
+ {file = "immutables-0.15-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b75ade826920c4e490b1bb14cf967ac14e61eb7c5562161c5d7337d61962c226"},
+ {file = "immutables-0.15-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b7e13c061785e34f73c4f659861f1b3e4a5fd918e4395c84b21c4e3d449ebe27"},
+ {file = "immutables-0.15-cp37-cp37m-win_amd64.whl", hash = "sha256:3035849accee4f4e510ed7c94366a40e0f5fef9069fbe04a35f4787b13610a4a"},
+ {file = "immutables-0.15-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:b04fa69174e0c8f815f9c55f2a43fc9e5a68452fab459a08e904a74e8471639f"},
+ {file = "immutables-0.15-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:141c2e9ea515a3a815007a429f0b47a578ebeb42c831edaec882a245a35fffca"},
+ {file = "immutables-0.15-cp38-cp38-win_amd64.whl", hash = "sha256:cbe8c64640637faa5535d539421b293327f119c31507c33ca880bd4f16035eb6"},
+ {file = "immutables-0.15-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:a0a4e4417d5ef4812d7f99470cd39347b58cb927365dd2b8da9161040d260db0"},
+ {file = "immutables-0.15-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:3b15c08c71c59e5b7c2470ef949d49ff9f4263bb77f488422eaa157da84d6999"},
+ {file = "immutables-0.15-cp39-cp39-win_amd64.whl", hash = "sha256:2283a93c151566e6830aee0e5bee55fc273455503b43aa004356b50f9182092b"},
+ {file = "immutables-0.15.tar.gz", hash = "sha256:3713ab1ebbb6946b7ce1387bb9d1d7f5e09c45add58c2a2ee65f963c171e746b"},
+]
jinja2 = [
{file = "Jinja2-2.11.2-py2.py3-none-any.whl", hash = "sha256:f0a4641d3cf955324a89c04f3d94663aa4d638abe8f733ecd3582848e1c37035"},
{file = "Jinja2-2.11.2.tar.gz", hash = "sha256:89aab215427ef59c34ad58735269eb58b1a5808103067f7bb9d5836c651b3bb0"},
@@ -376,20 +509,39 @@ markupsafe = [
{file = "MarkupSafe-1.1.1-cp35-cp35m-win32.whl", hash = "sha256:6dd73240d2af64df90aa7c4e7481e23825ea70af4b4922f8ede5b9e35f78a3b1"},
{file = "MarkupSafe-1.1.1-cp35-cp35m-win_amd64.whl", hash = "sha256:9add70b36c5666a2ed02b43b335fe19002ee5235efd4b8a89bfcf9005bebac0d"},
{file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_6_intel.whl", hash = "sha256:24982cc2533820871eba85ba648cd53d8623687ff11cbb805be4ff7b4c971aff"},
+ {file = "MarkupSafe-1.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d53bc011414228441014aa71dbec320c66468c1030aae3a6e29778a3382d96e5"},
{file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:00bc623926325b26bb9605ae9eae8a215691f33cae5df11ca5424f06f2d1f473"},
{file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:717ba8fe3ae9cc0006d7c451f0bb265ee07739daf76355d06366154ee68d221e"},
+ {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:3b8a6499709d29c2e2399569d96719a1b21dcd94410a586a18526b143ec8470f"},
+ {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:84dee80c15f1b560d55bcfe6d47b27d070b4681c699c572af2e3c7cc90a3b8e0"},
+ {file = "MarkupSafe-1.1.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:b1dba4527182c95a0db8b6060cc98ac49b9e2f5e64320e2b56e47cb2831978c7"},
{file = "MarkupSafe-1.1.1-cp36-cp36m-win32.whl", hash = "sha256:535f6fc4d397c1563d08b88e485c3496cf5784e927af890fb3c3aac7f933ec66"},
{file = "MarkupSafe-1.1.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b1282f8c00509d99fef04d8ba936b156d419be841854fe901d8ae224c59f0be5"},
{file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_6_intel.whl", hash = "sha256:8defac2f2ccd6805ebf65f5eeb132adcf2ab57aa11fdf4c0dd5169a004710e7d"},
+ {file = "MarkupSafe-1.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:bf5aa3cbcfdf57fa2ee9cd1822c862ef23037f5c832ad09cfea57fa846dec193"},
{file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:46c99d2de99945ec5cb54f23c8cd5689f6d7177305ebff350a58ce5f8de1669e"},
{file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:ba59edeaa2fc6114428f1637ffff42da1e311e29382d81b339c1817d37ec93c6"},
+ {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:6fffc775d90dcc9aed1b89219549b329a9250d918fd0b8fa8d93d154918422e1"},
+ {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:a6a744282b7718a2a62d2ed9d993cad6f5f585605ad352c11de459f4108df0a1"},
+ {file = "MarkupSafe-1.1.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:195d7d2c4fbb0ee8139a6cf67194f3973a6b3042d742ebe0a9ed36d8b6f0c07f"},
{file = "MarkupSafe-1.1.1-cp37-cp37m-win32.whl", hash = "sha256:b00c1de48212e4cc9603895652c5c410df699856a2853135b3967591e4beebc2"},
{file = "MarkupSafe-1.1.1-cp37-cp37m-win_amd64.whl", hash = "sha256:9bf40443012702a1d2070043cb6291650a0841ece432556f784f004937f0f32c"},
{file = "MarkupSafe-1.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6788b695d50a51edb699cb55e35487e430fa21f1ed838122d722e0ff0ac5ba15"},
{file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:cdb132fc825c38e1aeec2c8aa9338310d29d337bebbd7baa06889d09a60a1fa2"},
{file = "MarkupSafe-1.1.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:13d3144e1e340870b25e7b10b98d779608c02016d5184cfb9927a9f10c689f42"},
+ {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:acf08ac40292838b3cbbb06cfe9b2cb9ec78fce8baca31ddb87aaac2e2dc3bc2"},
+ {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:d9be0ba6c527163cbed5e0857c451fcd092ce83947944d6c14bc95441203f032"},
+ {file = "MarkupSafe-1.1.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:caabedc8323f1e93231b52fc32bdcde6db817623d33e100708d9a68e1f53b26b"},
{file = "MarkupSafe-1.1.1-cp38-cp38-win32.whl", hash = "sha256:596510de112c685489095da617b5bcbbac7dd6384aeebeda4df6025d0256a81b"},
{file = "MarkupSafe-1.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e8313f01ba26fbbe36c7be1966a7b7424942f670f38e666995b88d012765b9be"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d73a845f227b0bfe8a7455ee623525ee656a9e2e749e4742706d80a6065d5e2c"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:98bae9582248d6cf62321dcb52aaf5d9adf0bad3b40582925ef7c7f0ed85fceb"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:2beec1e0de6924ea551859edb9e7679da6e4870d32cb766240ce17e0a0ba2014"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:7fed13866cf14bba33e7176717346713881f56d9d2bcebab207f7a036f41b850"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:6f1e273a344928347c1290119b493a1f0303c52f5a5eae5f16d74f48c15d4a85"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:feb7b34d6325451ef96bc0e36e1a6c0c1c64bc1fbec4b854f4529e51887b1621"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-win32.whl", hash = "sha256:22c178a091fc6630d0d045bdb5992d2dfe14e3259760e713c490da5323866c39"},
+ {file = "MarkupSafe-1.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:b7d644ddb4dbd407d31ffb699f1d140bc35478da613b441c582aeb7c43838dd8"},
{file = "MarkupSafe-1.1.1.tar.gz", hash = "sha256:29872e92839765e546828bb7754a68c418d927cd064fd4708fab9fe9c8bb116b"},
]
packaging = [
@@ -412,10 +564,18 @@ requests = [
{file = "requests-2.25.0-py2.py3-none-any.whl", hash = "sha256:e786fa28d8c9154e6a4de5d46a1d921b8749f8b74e28bde23768e5e16eece998"},
{file = "requests-2.25.0.tar.gz", hash = "sha256:7f1a0b932f4a60a1a65caa4263921bb7d9ee911957e0ae4a23a6dd08185ad5f8"},
]
+rfc3986 = [
+ {file = "rfc3986-1.5.0-py2.py3-none-any.whl", hash = "sha256:a86d6e1f5b1dc238b218b012df0aa79409667bb209e58da56d0b94704e712a97"},
+ {file = "rfc3986-1.5.0.tar.gz", hash = "sha256:270aaf10d87d0d4e095063c65bf3ddbc6ee3d0b226328ce21e036f946e421835"},
+]
six = [
{file = "six-1.15.0-py2.py3-none-any.whl", hash = "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced"},
{file = "six-1.15.0.tar.gz", hash = "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259"},
]
+sniffio = [
+ {file = "sniffio-1.2.0-py3-none-any.whl", hash = "sha256:471b71698eac1c2112a40ce2752bb2f4a4814c22a54a3eed3676bc0f5ca9f663"},
+ {file = "sniffio-1.2.0.tar.gz", hash = "sha256:c4666eecec1d3f50960c6bdf61ab7bc350648da6c126e3cf6898d8cd4ddcd3de"},
+]
snowballstemmer = [
{file = "snowballstemmer-2.0.0-py2.py3-none-any.whl", hash = "sha256:209f257d7533fdb3cb73bdbd24f436239ca3b2fa67d56f6ff88e86be08cc5ef0"},
{file = "snowballstemmer-2.0.0.tar.gz", hash = "sha256:df3bac3df4c2c01363f3dd2cfa78cce2840a79b9f1c2d2de9ce8d31683992f52"},
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
index 1b1cb289..fa1c3c55 100644
--- a/docs/pyproject.toml
+++ b/docs/pyproject.toml
@@ -9,6 +9,7 @@ python = "^3.6"
sphinx = "^3.2.1"
sphinx-rtd-theme = "^0.5.0"
sphinx-intl = "^2.0.1"
+httpx = "^0.18.1"
[tool.poetry.dev-dependencies]
diff --git a/docs/source/develop.rst b/docs/source/develop.rst
index ac8703d2..6ac1da61 100644
--- a/docs/source/develop.rst
+++ b/docs/source/develop.rst
@@ -41,79 +41,83 @@ When developing, it's convenient to run OnionShare from a terminal and add the `
This prints a lot of helpful messages to the terminal, such as when certain objects are initialized, when events occur (like buttons clicked, settings saved or reloaded), and other debug info. For example::
$ poetry run onionshare-cli -v ~/Documents/roms/nes/Q-bert\ \(USA\).nes
- OnionShare 2.3 | https://onionshare.org/
-
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
-
- [Nov 10 2020 20:50:35] Settings.__init__
- [Nov 10 2020 20:50:35] Settings.load
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
- [Nov 10 2020 20:50:35] ModeSettings.load: creating /home/user/.config/onionshare/persistent/abstain-reprogram-elevate.json
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.public = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostart_timer = 0
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.autostop_timer = 0
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.legacy = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: general.client_auth = False
- [Nov 10 2020 20:50:35] ModeSettings.set: updating abstain-reprogram-elevate: share.autostop_sharing = True
- [Nov 10 2020 20:50:35] Web.__init__: is_gui=False, mode=share
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
- [Nov 10 2020 20:50:35] Web.generate_static_url_path: new static_url_path is /static_qa7rlyxwnfodczrriv3tj5yeoq
- [Nov 10 2020 20:50:35] ShareModeWeb.init
- [Nov 10 2020 20:50:35] Onion.__init__
- [Nov 10 2020 20:50:35] Onion.connect
- [Nov 10 2020 20:50:35] Settings.__init__
- [Nov 10 2020 20:50:35] Settings.load
- [Nov 10 2020 20:50:35] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpz53ztq3m
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template
- [Nov 10 2020 20:50:35] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.2.dev1 │
+ │ │
+ │ https://onionshare.org/ │
+ ╰───────────────────────────────────────────╯
+
+ [May 10 2021 18:24:02] Settings.__init__
+ [May 10 2021 18:24:02] Settings.load
+ [May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
+ [May 10 2021 18:24:02] ModeSettings.load: creating /home/user/.config/onionshare/persistent/tattered-handgun-stress.json
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.title = None
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.public = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostart_timer = 0
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.autostop_timer = 0
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.legacy = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: general.client_auth = False
+ [May 10 2021 18:24:02] ModeSettings.set: updating tattered-handgun-stress: share.autostop_sharing = True
+ [May 10 2021 18:24:02] Web.__init__: is_gui=False, mode=share
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=static
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=static, path=/home/user/code/onionshare/cli/onionshare_cli/resources/static
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=templates
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=templates, path=/home/user/code/onionshare/cli/onionshare_cli/resources/templates
+ [May 10 2021 18:24:02] Web.generate_static_url_path: new static_url_path is /static_4yxrx2mzi5uzkblklpzd46mwke
+ [May 10 2021 18:24:02] ShareModeWeb.init
+ [May 10 2021 18:24:02] Onion.__init__
+ [May 10 2021 18:24:02] Onion.connect
+ [May 10 2021 18:24:02] Settings.__init__
+ [May 10 2021 18:24:02] Settings.load
+ [May 10 2021 18:24:02] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:02] Onion.connect: tor_data_directory_name=/home/user/.config/onionshare/tmp/tmpw6u0nz8l
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template
+ [May 10 2021 18:24:02] Common.get_resource_path: filename=torrc_template, path=/home/user/code/onionshare/cli/onionshare_cli/resources/torrc_template
Connecting to the Tor network: 100% - Done
- [Nov 10 2020 20:50:42] Onion.connect: Connected to tor 0.4.4.5
- [Nov 10 2020 20:50:42] Settings.load
- [Nov 10 2020 20:50:42] Web.generate_password: saved_password=None
- [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt
- [Nov 10 2020 20:50:42] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
- [Nov 10 2020 20:50:42] Web.generate_password: built random password: "pedometer-grower"
- [Nov 10 2020 20:50:42] OnionShare.__init__
- [Nov 10 2020 20:50:42] OnionShare.start_onion_service
- [Nov 10 2020 20:50:42] Onion.start_onion_service: port=17610
- [Nov 10 2020 20:50:42] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
- [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: general.service_id = x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad
- [Nov 10 2020 20:50:46] ModeSettings.set: updating abstain-reprogram-elevate: onion.private_key = uIXJzY+88tGSAXAjQxdwkzb2L7jHv467RIX1WDieVkFEZjEA7st2p/6uVCM4KM3L9PdShTPScuUv2IEbVQammA==
+ [May 10 2021 18:24:10] Onion.connect: Connected to tor 0.4.5.7
+ [May 10 2021 18:24:10] Settings.load
+ [May 10 2021 18:24:10] Settings.load: Trying to load /home/user/.config/onionshare/onionshare.json
+ [May 10 2021 18:24:10] Web.generate_password: saved_password=None
+ [May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt
+ [May 10 2021 18:24:10] Common.get_resource_path: filename=wordlist.txt, path=/home/user/code/onionshare/cli/onionshare_cli/resources/wordlist.txt
+ [May 10 2021 18:24:10] Web.generate_password: built random password: "tipping-colonize"
+ [May 10 2021 18:24:10] OnionShare.__init__
+ [May 10 2021 18:24:10] OnionShare.start_onion_service
+ [May 10 2021 18:24:10] Onion.start_onion_service: port=17645
+ [May 10 2021 18:24:10] Onion.start_onion_service: key_type=NEW, key_content=ED25519-V3
+ [May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: general.service_id = omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd
+ [May 10 2021 18:24:14] ModeSettings.set: updating tattered-handgun-stress: onion.private_key = 6PhomJCjlWicmOyAAe0wnQoEM3vcyHBivrRGDy0hzm900fW5ITDJ6iv2+tluLoueYj81MhmnYeTOHDm8UGOfhg==
Compressing files.
- [Nov 10 2020 20:50:46] ShareModeWeb.init
- [Nov 10 2020 20:50:46] ShareModeWeb.set_file_info_custom
- [Nov 10 2020 20:50:46] ShareModeWeb.build_zipfile_list
- [Nov 10 2020 20:50:46] Web.start: port=17610
- * Running on http://127.0.0.1:17610/ (Press CTRL+C to quit)
-
+ [May 10 2021 18:24:14] ShareModeWeb.init
+ [May 10 2021 18:24:14] ShareModeWeb.set_file_info_custom
+ [May 10 2021 18:24:14] ShareModeWeb.build_zipfile_list
+ [May 10 2021 18:24:14] Web.start: port=17645
+ * Running on http://127.0.0.1:17645/ (Press CTRL+C to quit)
+
Give this address to the recipient:
- http://onionshare:pedometer-grower@x5duatuhpiwfzb23iwpjanalvtxdhoj43ria44s53ryy5diywvbu24ad.onion
-
+ http://onionshare:tipping-colonize@omxjamkys6diqxov7lxru2upromdprxjuq3czdhen6hrshzd4sll2iyd.onion
+
Press Ctrl+C to stop the server
+
You can add your own debug messages by running the ``Common.log`` method from ``onionshare/common.py``. For example::
common.log('OnionShareGui', 'start_server', 'I ran here')
@@ -127,38 +131,37 @@ Tor is slow, and it's often convenient to skip starting onion services altogethe
You can do this with the ``--local-only`` flag. For example::
$ poetry run onionshare-cli --local-only --receive
- OnionShare 2.3 | https://onionshare.org/
-
- @@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ___ _
- @@@@@@ @@@@@@@@@@@@@ / _ \ (_)
- @@@@ @ @@@@@@@@@@@ | | | |_ __ _ ___ _ __
- @@@@@@@@ @@@@@@@@@@ | | | | '_ \| |/ _ \| '_ \
- @@@@@@@@@@@@ @@@@@@@@@@ \ \_/ / | | | | (_) | | | |
- @@@@@@@@@@@@@@@@ @@@@@@@@@ \___/|_| |_|_|\___/|_| |_|
- @@@@@@@@@ @@@@@@@@@@@@@@@@ _____ _
- @@@@@@@@@@ @@@@@@@@@@@@ / ___| |
- @@@@@@@@@@ @@@@@@@@ \ `--.| |__ __ _ _ __ ___
- @@@@@@@@@@@ @ @@@@ `--. \ '_ \ / _` | '__/ _ \
- @@@@@@@@@@@@@ @@@@@@ /\__/ / | | | (_| | | | __/
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ \____/|_| |_|\__,_|_| \___|
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@@@@@@@
- @@@@@@@@@@@@@@@@@@@
- @@@@@@@@@
-
- * Running on http://127.0.0.1:17635/ (Press CTRL+C to quit)
-
+ ╭───────────────────────────────────────────╮
+ │ * ▄▄█████▄▄ * │
+ │ ▄████▀▀▀████▄ * │
+ │ ▀▀█▀ ▀██▄ │
+ │ * ▄█▄ ▀██▄ │
+ │ ▄█████▄ ███ -+- │
+ │ ███ ▀█████▀ │
+ │ ▀██▄ ▀█▀ │
+ │ * ▀██▄ ▄█▄▄ * │
+ │ * ▀████▄▄▄████▀ │
+ │ ▀▀█████▀▀ │
+ │ -+- * │
+ │ ▄▀▄ ▄▀▀ █ │
+ │ █ █ ▀ ▀▄ █ │
+ │ █ █ █▀▄ █ ▄▀▄ █▀▄ ▀▄ █▀▄ ▄▀▄ █▄▀ ▄█▄ │
+ │ ▀▄▀ █ █ █ ▀▄▀ █ █ ▄▄▀ █ █ ▀▄█ █ ▀▄▄ │
+ │ │
+ │ v2.3.2.dev1 │
+ │ │
+ │ https://onionshare.org/ │
+ ╰───────────────────────────────────────────╯
+
+ * Running on http://127.0.0.1:17617/ (Press CTRL+C to quit)
+
Files sent to you appear in this folder: /home/user/OnionShare
-
+
Warning: Receive mode lets people upload files to your computer. Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.
-
+
Give this address to the sender:
- http://onionshare:train-system@127.0.0.1:17635
-
+ http://onionshare:ended-blah@127.0.0.1:17617
+
Press Ctrl+C to stop the server
In this case, you load the URL ``http://onionshare:train-system@127.0.0.1:17635`` in a normal web-browser like Firefox, instead of using the Tor Browser.
diff --git a/docs/source/locale/id/LC_MESSAGES/index.po b/docs/source/locale/id/LC_MESSAGES/index.po
new file mode 100644
index 00000000..776469e3
--- /dev/null
+++ b/docs/source/locale/id/LC_MESSAGES/index.po
@@ -0,0 +1,30 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.1\n"
+"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
+"POT-Creation-Date: 2021-02-22 14:18-0800\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
+"Last-Translator: Algustionesa Yoshi <algustionesa@gmail.com>\n"
+"Language-Team: none\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.7-dev\n"
+
+#: ../../source/index.rst:2
+msgid "OnionShare's documentation"
+msgstr "Dokumentasi OnionShare"
+
+#: ../../source/index.rst:6
+msgid "OnionShare is an open source tool that lets you securely and anonymously share files, host websites, and chat with friends using the Tor network."
+msgstr ""
+"OnionShare adalah perkakas sumber terbuka yang memungkinkan Anda secara aman "
+"dan anonim berbagi berkas, menghosting situs web, dan mengobrol dengan teman "
+"menggunakan jaringan Tor."
diff --git a/docs/source/locale/id/LC_MESSAGES/install.po b/docs/source/locale/id/LC_MESSAGES/install.po
new file mode 100644
index 00000000..41218fdf
--- /dev/null
+++ b/docs/source/locale/id/LC_MESSAGES/install.po
@@ -0,0 +1,105 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) Micah Lee, et al.
+# This file is distributed under the same license as the OnionShare package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: OnionShare 2.3.2\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2021-05-03 21:48-0700\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../../source/install.rst:2
+msgid "Installation"
+msgstr ""
+
+#: ../../source/install.rst:5
+msgid "Windows or macOS"
+msgstr ""
+
+#: ../../source/install.rst:7
+msgid "You can download OnionShare for Windows and macOS from the `OnionShare website <https://onionshare.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:12
+msgid "Install in Linux"
+msgstr ""
+
+#: ../../source/install.rst:14
+msgid "There are various ways to install OnionShare for Linux, but the recommended way is to use either the `Flatpak <https://flatpak.org/>`_ or the `Snap <https://snapcraft.io/>`_ package. Flatpak and Snap ensure that you'll always use the newest version and run OnionShare inside of a sandbox."
+msgstr ""
+
+#: ../../source/install.rst:17
+msgid "Snap support is built-in to Ubuntu and Fedora comes with Flatpak support, but which you use is up to you. Both work in all Linux distributions."
+msgstr ""
+
+#: ../../source/install.rst:19
+msgid "**Install OnionShare using Flatpak**: https://flathub.org/apps/details/org.onionshare.OnionShare"
+msgstr ""
+
+#: ../../source/install.rst:21
+msgid "**Install OnionShare using Snap**: https://snapcraft.io/onionshare"
+msgstr ""
+
+#: ../../source/install.rst:23
+msgid "You can also download and install PGP-signed ``.flatpak`` or ``.snap`` packages from https://onionshare.org/dist/ if you prefer."
+msgstr ""
+
+#: ../../source/install.rst:28
+msgid "Verifying PGP signatures"
+msgstr ""
+
+#: ../../source/install.rst:30
+msgid "You can verify that the package you download is legitimate and hasn't been tampered with by verifying its PGP signature. For Windows and macOS, this step is optional and provides defense in depth: the OnionShare binaries include operating system-specific signatures, and you can just rely on those alone if you'd like."
+msgstr ""
+
+#: ../../source/install.rst:34
+msgid "Signing key"
+msgstr ""
+
+#: ../../source/install.rst:36
+msgid "Packages are signed by Micah Lee, the core developer, using his PGP public key with fingerprint ``927F419D7EC82C2F149C1BD1403C2657CD994F73``. You can download Micah's key `from the keys.openpgp.org keyserver <https://keys.openpgp.org/vks/v1/by-fingerprint/927F419D7EC82C2F149C1BD1403C2657CD994F73>`_."
+msgstr ""
+
+#: ../../source/install.rst:38
+msgid "You must have GnuPG installed to verify signatures. For macOS you probably want `GPGTools <https://gpgtools.org/>`_, and for Windows you probably want `Gpg4win <https://www.gpg4win.org/>`_."
+msgstr ""
+
+#: ../../source/install.rst:41
+msgid "Signatures"
+msgstr ""
+
+#: ../../source/install.rst:43
+msgid "You can find the signatures (as ``.asc`` files), as well as Windows, macOS, Flatpak, Snap, and source packages, at https://onionshare.org/dist/ in the folders named for each version of OnionShare. You can also find them on the `GitHub Releases page <https://github.com/micahflee/onionshare/releases>`_."
+msgstr ""
+
+#: ../../source/install.rst:47
+msgid "Verifying"
+msgstr ""
+
+#: ../../source/install.rst:49
+msgid "Once you have imported Micah's public key into your GnuPG keychain, downloaded the binary and and ``.asc`` signature, you can verify the binary for macOS in a terminal like this::"
+msgstr ""
+
+#: ../../source/install.rst:53
+msgid "Or for Windows, in a command-prompt like this::"
+msgstr ""
+
+#: ../../source/install.rst:57
+msgid "The expected output looks like this::"
+msgstr ""
+
+#: ../../source/install.rst:69
+msgid "If you don't see 'Good signature from', there might be a problem with the integrity of the file (malicious or otherwise), and you should not install the package. (The \"WARNING:\" shown above, is not a problem with the package, it only means you haven't already defined any level of 'trust' of Micah's PGP key.)"
+msgstr ""
+
+#: ../../source/install.rst:71
+msgid "If you want to learn more about verifying PGP signatures, the guides for `Qubes OS <https://www.qubes-os.org/security/verifying-signatures/>`_ and the `Tor Project <https://support.torproject.org/tbb/how-to-verify-signature/>`_ may be useful."
+msgstr ""
diff --git a/docs/source/locale/nb_NO/LC_MESSAGES/security.po b/docs/source/locale/nb_NO/LC_MESSAGES/security.po
index 5f3a36b8..effe102a 100644
--- a/docs/source/locale/nb_NO/LC_MESSAGES/security.po
+++ b/docs/source/locale/nb_NO/LC_MESSAGES/security.po
@@ -8,14 +8,15 @@ msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2020-12-13 15:48-0800\n"
-"PO-Revision-Date: 2020-11-19 08:28+0000\n"
-"Last-Translator: Kurt Eilertsen <kurt@kheds.com>\n"
-"Language: nb_NO\n"
+"PO-Revision-Date: 2021-05-10 22:38+0000\n"
+"Last-Translator: Jonas Matisen <hdsumo@protonmail.ch>\n"
"Language-Team: none\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: nb_NO\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/security.rst:2
@@ -83,7 +84,6 @@ msgstr ""
"OnionShare-brukerens identitet."
#: ../../source/security.rst:17
-#, fuzzy
msgid ""
"**If an attacker learns about the onion service, it still can't access "
"anything.** Prior attacks against the Tor network to enumerate onion "
@@ -96,16 +96,15 @@ msgid ""
"OnionShare stops the server, preventing brute force attacks against the "
"password."
msgstr ""
-"**Hvis en angriper lærer om løktjenesten, har den fremdeles ikke tilgang "
-"til noe.** Tidligere angrep mot Tor-nettverket for å telle opp "
-"løktjenestene lot kun angriperen oppdage private .onion-adresser. Hvis en"
-" angriper oppdager en privat OnionShare-adresse, vil et passord beskytte "
-"dem fra å få tilgang til den (med mindre OnionShare-brukeren velger å "
-"skru den av, og gjøre den offentlig). Passordet genereres ved å velge to "
-"tilfeldige ord fra en liste med 6800 ord, noe som betyr 6800^2, eller "
-"omtrent 46 millioner mulige passord. Kun 20 feilaktige forsøk tillates "
-"før OnionShare stopper tjeneren, noe som forhindrer totalsøks-angrep mot "
-"possordet."
+"**Hvis en angriper lærer om løketjenesten, kan den fremdeles ikke få tilgang "
+"til noe. ** Tidligere angrep mot Tor-nettverket for å oppregne løketjenester "
+"tillot angriperen å oppdage private .onion-adresser. Hvis et angrep oppdager "
+"en privat OnionShare-adresse, vil et passord hindre dem i å få tilgang til "
+"den (med mindre OnionShare-brukeren velger å slå den av og gjøre den "
+"offentlig). Passordet genereres ved å velge to tilfeldige ord fra en liste "
+"på 6800 ord, noe som gir 6800², eller omtrent 46 millioner mulige passord. "
+"Bare 20 feil gjetninger kan gjøres før OnionShare stopper serveren, og "
+"forhindrer brute force-angrep mot passordet."
#: ../../source/security.rst:20
msgid "What OnionShare doesn't protect against"
@@ -135,7 +134,6 @@ msgstr ""
"brukes for noe som ikke er hemmelig."
#: ../../source/security.rst:24
-#, fuzzy
msgid ""
"**Communicating the OnionShare address might not be anonymous.** Extra "
"precautions must be taken to ensure the OnionShare address is "
@@ -143,11 +141,10 @@ msgid ""
" Tor, can be used to share the address. This isn't necessary unless "
"anonymity is a goal."
msgstr ""
-"**Kommunisering av OnionShare-adressen er ikke nødvendigivs anonym.** "
-"Ekstra forhåndsregler må tas for å forsikre at OnionShare-adressen "
-"kommuniseres anonymt. En ny e-post eller prat konto, som kun blir brukt "
-"over Tor, kan brukes til å dele adressen. Dette er ikke nødvendig med "
-"mindre anonymitet er et mål."
+"** Kommunikasjon av OnionShare-adressen er kanskje ikke anonym. ** Ekstra "
+"forholdsregler må tas for å sikre at OnionShare-adressen kommuniseres "
+"anonymt. En ny e-post eller chat-konto, kun tilgjengelig via Tor, kan brukes "
+"til å dele adressen. Dette er ikke nødvendig med mindre anonymitet er et mål."
#~ msgid "Security design"
#~ msgstr ""
@@ -255,4 +252,3 @@ msgstr ""
#~ "anonymity, such as co-workers who "
#~ "know each other sharing work documents."
#~ msgstr ""
-
diff --git a/docs/source/locale/tr/LC_MESSAGES/advanced.po b/docs/source/locale/tr/LC_MESSAGES/advanced.po
index 1b6217a9..b3ac8a80 100644
--- a/docs/source/locale/tr/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/tr/LC_MESSAGES/advanced.po
@@ -8,14 +8,15 @@ msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2021-05-03 21:48-0700\n"
-"PO-Revision-Date: 2021-01-09 15:33+0000\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language: tr\n"
"Language-Team: tr <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -115,7 +116,7 @@ msgstr ""
#: ../../source/advanced.rst:40
msgid "Custom Titles"
-msgstr ""
+msgstr "Özel Başlıklar"
#: ../../source/advanced.rst:42
msgid ""
@@ -123,12 +124,17 @@ msgid ""
"see the default title for the type of service. For example, the default "
"title of a chat service is \"OnionShare Chat\"."
msgstr ""
+"Öntanımlı olarak, insanlar Tor Browser'da bir OnionShare hizmeti "
+"yüklediklerinde, hizmet türü için öntanımlı başlığı görürler. Örneğin, bir "
+"sohbet hizmetinin öntanımlı başlığı \"OnionShare Chat\" 'tir."
#: ../../source/advanced.rst:44
msgid ""
"If you want to choose a custom title, set the \"Custom title\" setting "
"before starting a server."
msgstr ""
+"Özel bir başlık seçmek istiyorsanız, bir sunucu başlatmadan önce \"Özel "
+"başlık\" ayarını belirleyin."
#: ../../source/advanced.rst:47
msgid "Scheduled Times"
@@ -496,4 +502,3 @@ msgstr ""
#~ " services will soon be removed from"
#~ " OnionShare as well."
#~ msgstr ""
-
diff --git a/docs/source/locale/tr/LC_MESSAGES/features.po b/docs/source/locale/tr/LC_MESSAGES/features.po
index 9b71bcf9..4451ccdb 100644
--- a/docs/source/locale/tr/LC_MESSAGES/features.po
+++ b/docs/source/locale/tr/LC_MESSAGES/features.po
@@ -8,14 +8,15 @@ msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2021-05-03 21:48-0700\n"
-"PO-Revision-Date: 2021-01-10 16:32+0000\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
-"Language: tr\n"
"Language-Team: tr <LL@li.org>\n"
-"Plural-Forms: nplurals=2; plural=n != 1\n"
+"Language: tr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -174,7 +175,7 @@ msgstr ""
#: ../../source/features.rst:47
msgid "Receive Files and Messages"
-msgstr ""
+msgstr "Dosya ve Mesajları Alın"
#: ../../source/features.rst:49
msgid ""
@@ -183,10 +184,14 @@ msgid ""
"anonymous dropbox. Open a receive tab and choose the settings that you "
"want."
msgstr ""
+"OnionShare'i, kullanıcıların dosya ve mesajlarını anonim olarak doğrudan "
+"bilgisayarınıza göndermesine izin vermek için kullanabilirsiniz. Bir alma "
+"sekmesi açın ve istediğiniz ayarları seçin."
#: ../../source/features.rst:54
msgid "You can browse for a folder to save messages and files that get submitted."
msgstr ""
+"Gönderilen mesajları ve dosyaları kaydetmek için bir klasöre gidebilirsiniz."
#: ../../source/features.rst:56
msgid ""
@@ -194,6 +199,10 @@ msgid ""
"uploads, and you can check \"Disable uploading files\" if you want to "
"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
+"Yalnızca dosya yüklemelerine izin vermek istiyorsanız \"Metin göndermeyi "
+"devre dışı bırak\" seçeneğini işaretleyebilir ve anonim bir iletişim formu "
+"gibi yalnızca metin mesajlarının gönderilmesine izin vermek istiyorsanız "
+"\"Dosya yüklemeyi devre dışı bırak\" seçeneğini işaretleyebilirsiniz."
#: ../../source/features.rst:58
msgid ""
@@ -209,6 +218,17 @@ msgid ""
"your receive mode service, @webhookbot will send you a message on Keybase"
" letting you know as soon as it happens."
msgstr ""
+"Birisi OnionShare hizmetinize dosya veya mesaj gönderdiğinde "
+"bilgilendirilmek istiyorsanız, \"Bildirim web kancası kullan\" seçeneğini "
+"işaretleyebilir ve ardından bir web kancası URL'si seçebilirsiniz. Bu "
+"özelliği kullanırsanız, OnionShare, birisi dosya veya mesaj gönderdiğinde bu "
+"URL'ye bir HTTP POST isteğinde bulunacaktır. Örneğin, `Keybase "
+"<https://keybase.io/>`_ mesajlaşma uygulamasında şifreli bir metin mesajı "
+"almak istiyorsanız, `@webhookbot <https://keybase.io/webhookbot>`_ ile bir "
+"konuşma başlatabilir, ``!webhook create onionshare-alerts`` yazabilirsiniz "
+"ve bot size bir URL ile yanıt verecektir. Bunu bildirim web kancası URL'si "
+"olarak kullanın. Birisi alma modu hizmetinize bir dosya yüklerse, bu olur "
+"olmaz @webhookbot size Keybase'de bir mesaj göndererek haber verecektir."
#: ../../source/features.rst:63
msgid ""
@@ -217,6 +237,9 @@ msgid ""
" be able to submit files and messages which get uploaded to your "
"computer."
msgstr ""
+"Hazır olduğunuzda, \"Alma Modunu Başlat\" düğmesine tıklayın. Bu, OnionShare "
+"hizmetini başlatır. Bu adresi Tor Browser'larında yükleyen herkes, "
+"bilgisayarınıza yüklenecek olan dosyaları ve mesajları gönderebilir."
#: ../../source/features.rst:67
msgid ""
@@ -227,7 +250,6 @@ msgstr ""
" için sağ üst köşedeki \"↑\" simgesine tıklayabilirsiniz."
#: ../../source/features.rst:69
-#, fuzzy
msgid "Here is what it looks like for someone sending you files and messages."
msgstr "Size dosya gönderen birisi için şu şekilde görünür."
@@ -238,6 +260,10 @@ msgid ""
"folder on your computer, automatically organized into separate subfolders"
" based on the time that the files get uploaded."
msgstr ""
+"Biri alma hizmetinize dosya veya mesaj gönderdiğinde, öntanımlı olarak "
+"bilgisayarınızdaki ev klasöründe bulunan ``OnionShare`` adlı bir klasöre "
+"kaydedilir ve dosyaların yüklendiği zamana göre otomatik olarak ayrı alt "
+"klasörler halinde düzenlenir."
#: ../../source/features.rst:75
msgid ""
@@ -288,6 +314,8 @@ msgstr ""
#: ../../source/features.rst:84
msgid "However, it is always safe to open text messages sent through OnionShare."
msgstr ""
+"Ancak, OnionShare aracılığıyla gönderilen metin mesajlarını açmak her zaman "
+"güvenlidir."
#: ../../source/features.rst:87
msgid "Tips for running a receive service"
@@ -306,17 +334,17 @@ msgstr ""
"tavsiye edilir."
#: ../../source/features.rst:91
-#, fuzzy
msgid ""
"If you intend to put the OnionShare address on your website or social "
"media profiles, save the tab (see :ref:`save_tabs`) and run it as a "
"public service (see :ref:`turn_off_passwords`). It's also a good idea to "
"give it a custom title (see :ref:`custom_titles`)."
msgstr ""
-"OnionShare adresini web sitenize veya sosyal medya profillerinize koymayı"
-" düşünüyorsanız, sekmeyi kaydedin (:ref:`save_tabs` bölümüne bakın) ve "
-"herkese açık bir hizmet olarak çalıştırın (:ref:`turn_off_passwords` "
-"bölümüne bakın)."
+"OnionShare adresini web sitenize veya sosyal medya profillerinize koymayı "
+"düşünüyorsanız, sekmeyi kaydedin (:ref:`save_tabs`bölümüne bakın) ve herkese "
+"açık bir hizmet olarak çalıştırın (:ref:`turn_off_passwords` bölümüne bakın)"
+". Özel bir başlık vermek de iyi bir fikirdir (:ref:`custom_titles` bölümüne "
+"bakın)."
#: ../../source/features.rst:94
msgid "Host a Website"
@@ -994,4 +1022,3 @@ msgstr ""
#~ "klasöre kaydedilir ve dosyaların yüklenme "
#~ "zamanına göre otomatik olarak ayrı alt"
#~ " klasörler halinde düzenlenir."
-
diff --git a/docs/source/locale/uk/LC_MESSAGES/advanced.po b/docs/source/locale/uk/LC_MESSAGES/advanced.po
index ba769116..12402413 100644
--- a/docs/source/locale/uk/LC_MESSAGES/advanced.po
+++ b/docs/source/locale/uk/LC_MESSAGES/advanced.po
@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2021-05-03 21:48-0700\n"
-"PO-Revision-Date: 2020-11-17 10:28+0000\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
-"Language: uk\n"
"Language-Team: none\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/advanced.rst:2
@@ -115,7 +116,7 @@ msgstr ""
#: ../../source/advanced.rst:40
msgid "Custom Titles"
-msgstr ""
+msgstr "Власні заголовки"
#: ../../source/advanced.rst:42
msgid ""
@@ -123,12 +124,17 @@ msgid ""
"see the default title for the type of service. For example, the default "
"title of a chat service is \"OnionShare Chat\"."
msgstr ""
+"Усталено, коли користувачі завантажують службу OnionShare у браузері Tor, "
+"вони бачать типову назву для типу служби. Наприклад, типовою назвою чату є "
+"\"OnionShare Chat\"."
#: ../../source/advanced.rst:44
msgid ""
"If you want to choose a custom title, set the \"Custom title\" setting "
"before starting a server."
msgstr ""
+"Якщо потрібно вибрати власний заголовок, перед запуском сервера встановіть "
+"параметр «Власний заголовок»."
#: ../../source/advanced.rst:47
msgid "Scheduled Times"
@@ -407,4 +413,3 @@ msgstr ""
#~ " розробки Windows (подробиці "
#~ ":ref:`starting_development`), а потім запустити "
#~ "його в командному рядку::"
-
diff --git a/docs/source/locale/uk/LC_MESSAGES/features.po b/docs/source/locale/uk/LC_MESSAGES/features.po
index 7d81cb89..486fe5bc 100644
--- a/docs/source/locale/uk/LC_MESSAGES/features.po
+++ b/docs/source/locale/uk/LC_MESSAGES/features.po
@@ -8,15 +8,16 @@ msgstr ""
"Project-Id-Version: OnionShare 2.3\n"
"Report-Msgid-Bugs-To: onionshare-dev@lists.riseup.net\n"
"POT-Creation-Date: 2021-05-03 21:48-0700\n"
-"PO-Revision-Date: 2020-11-17 10:28+0000\n"
+"PO-Revision-Date: 2021-05-07 18:32+0000\n"
"Last-Translator: Ihor Hordiichuk <igor_ck@outlook.com>\n"
-"Language: uk\n"
"Language-Team: none\n"
-"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
-"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2\n"
+"Language: uk\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
+"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.7-dev\n"
"Generated-By: Babel 2.9.0\n"
#: ../../source/features.rst:4
@@ -174,7 +175,7 @@ msgstr ""
#: ../../source/features.rst:47
msgid "Receive Files and Messages"
-msgstr ""
+msgstr "Отримання файлів і повідомлень"
#: ../../source/features.rst:49
msgid ""
@@ -183,10 +184,14 @@ msgid ""
"anonymous dropbox. Open a receive tab and choose the settings that you "
"want."
msgstr ""
+"Ви можете використовувати OnionShare, щоб дозволити людям анонімно надсилати "
+"файли та повідомлення безпосередньо на ваш комп’ютер, по суті, перетворюючи "
+"їх на анонімний буфер. Відкрийте вкладку отримання та виберіть потрібні "
+"налаштування."
#: ../../source/features.rst:54
msgid "You can browse for a folder to save messages and files that get submitted."
-msgstr ""
+msgstr "Можете вибрати теку для збереження повідомлень і файлів, які надіслано."
#: ../../source/features.rst:56
msgid ""
@@ -194,6 +199,10 @@ msgid ""
"uploads, and you can check \"Disable uploading files\" if you want to "
"only allow submitting text messages, like for an anonymous contact form."
msgstr ""
+"Можете позначити «Вимкнути надсилання тексту», якщо хочете дозволити лише "
+"завантаження файлів, а також можете позначити «Вимкнути вивантаження файлів»"
+", якщо ви хочете дозволити надсилання лише текстових повідомлень, як для "
+"анонімної контактної форми."
#: ../../source/features.rst:58
msgid ""
@@ -209,6 +218,18 @@ msgid ""
"your receive mode service, @webhookbot will send you a message on Keybase"
" letting you know as soon as it happens."
msgstr ""
+"Ви можете позначити «Застосовувати мережні обробники сповіщень», а потім "
+"вибрати URL-адресу обробника, якщо хочете отримувати сповіщення, коли хтось "
+"надсилає файли або повідомлення до вашої служби OnionShare. Якщо ви "
+"увімкнете цю функцію, OnionShare робитиме запит HTTP POST на цю URL-адресу, "
+"коли хтось надсилає файли або повідомлення. Наприклад, якщо ви хочете "
+"отримати зашифровані текстові повідомлення в програмі обміну повідомленнями `"
+"Keybase <https://keybase.io/>`_, ви можете почати розмову з `@webhookbot "
+"<https://keybase.io/webhookbot>`_, введіть ``!webhook create onionshare-"
+"alerts``, і він відповідатиме через URL-адресу. Використовуйте її URL-"
+"адресою вебобробника сповіщень. Якщо хтось вивантажить файл до служби режиму "
+"отримання, @webhookbot надішле вам повідомлення на Keybase, яке повідомить "
+"вас, як тільки це станеться."
#: ../../source/features.rst:63
msgid ""
@@ -217,6 +238,10 @@ msgid ""
" be able to submit files and messages which get uploaded to your "
"computer."
msgstr ""
+"Коли все буде готово, натисніть кнопку «Запустити режим отримання». Це "
+"запустить службу OnionShare. Будь-хто, хто завантажує цю адресу у своєму "
+"браузері Tor, зможе надсилати файли та повідомлення, які завантажуються на "
+"ваш комп'ютер."
#: ../../source/features.rst:67
msgid ""
@@ -227,9 +252,8 @@ msgstr ""
"побачити журнал і перебіг надсилання файлів."
#: ../../source/features.rst:69
-#, fuzzy
msgid "Here is what it looks like for someone sending you files and messages."
-msgstr "Ось як це виглядає для когось, хто надсилає вам файли."
+msgstr "Ось як це виглядає для тих, хто надсилає вам файли та повідомлення."
#: ../../source/features.rst:73
msgid ""
@@ -238,6 +262,10 @@ msgid ""
"folder on your computer, automatically organized into separate subfolders"
" based on the time that the files get uploaded."
msgstr ""
+"Коли хтось надсилає файли або повідомлення до вашої служби отримання, типово "
+"вони зберігаються до теки ``OnionShare`` у домашній теці на вашому "
+"комп'ютері, автоматично впорядковуються в окремі підтеки залежно від часу "
+"передавання файлів."
#: ../../source/features.rst:75
msgid ""
@@ -264,10 +292,10 @@ msgid ""
"OnionShare service. OnionShare does not add any safety mechanisms to "
"protect your system from malicious files."
msgstr ""
-"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, "
-"хтось спробує зламати ваш комп’ютер, завантаживши шкідливий файл до вашої"
-" служби OnionShare. OnionShare не додає жодних механізмів безпеки, щоб "
-"захистити вашу систему від шкідливих файлів."
+"Як і у випадку зі шкідливими вкладеннями електронної пошти, можливо, хтось "
+"спробує зламати ваш комп’ютер, завантаживши шкідливий файл до вашої служби "
+"OnionShare. Вона не додає жодних механізмів безпеки для захисту вашої "
+"системи від шкідливих файлів."
#: ../../source/features.rst:82
msgid ""
@@ -288,6 +316,8 @@ msgstr ""
#: ../../source/features.rst:84
msgid "However, it is always safe to open text messages sent through OnionShare."
msgstr ""
+"Однак, відкривати текстові повідомлення, надіслані через OnionShare, завжди "
+"безпечно."
#: ../../source/features.rst:87
msgid "Tips for running a receive service"
@@ -306,17 +336,16 @@ msgstr ""
"користуєтеся регулярно."
#: ../../source/features.rst:91
-#, fuzzy
msgid ""
"If you intend to put the OnionShare address on your website or social "
"media profiles, save the tab (see :ref:`save_tabs`) and run it as a "
"public service (see :ref:`turn_off_passwords`). It's also a good idea to "
"give it a custom title (see :ref:`custom_titles`)."
msgstr ""
-"Якщо ви маєте намір рекламувати адресу OnionShare на своєму вебсайті або "
-"в профілях соціальних мереж, вам слід зберегти вкладку (докладніше "
-":ref:`save_tabs`) і запустити її як загальнодоступну службу (докладніше "
-":ref:`turn_off_passwords`)."
+"Якщо ви маєте намір розмістити адресу OnionShare на своєму вебсайті або в "
+"профілях суспільних мереж, вам слід зберегти вкладку (докладніше "
+":ref:`save_tabs`) і запустити її загальнодоступною службою (докладніше "
+":ref:`custom_titles`)."
#: ../../source/features.rst:94
msgid "Host a Website"
@@ -808,4 +837,3 @@ msgstr ""
#~ "вашій домашній теці вашого комп'ютера та"
#~ " автоматично впорядковуються до окремих "
#~ "підтек за часом завантаження файлів."
-