From f92928c9f9dc0046dc4244a448db1b78093c8475 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Thu, 6 May 2021 08:46:42 +1000 Subject: [PATCH 01/13] Update the LICENSE to reflect the current path to third party licenses --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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. From b3a820a5f1dfebbdb95cf1c5cb25c6927cff06e0 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Wed, 5 May 2021 20:39:14 -0700 Subject: [PATCH 02/13] Fix Windows and Mac build scripts --- desktop/package/macos/build.py | 3 +-- desktop/package/windows/build.py | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) 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", From f0e148ec0d0fc16af5a6c2c863e693a0f578848d Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Thu, 6 May 2021 17:00:59 +1000 Subject: [PATCH 03/13] Some small corrections and additions to the CHANGELOG for v2.3.2 --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 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 From 1ad8a5ff1d9a886427cde23db954f7081c4a2560 Mon Sep 17 00:00:00 2001 From: Saptak S Date: Fri, 7 May 2021 01:23:11 +0530 Subject: [PATCH 04/13] Pins flask-socketio to 5.0.1 in pyproject.toml Also updates the RELEASE.md to document the need to update the socket.io.min.js file whenever we want to update flask-socketio to ensure that they are compatible with each other, failing which, the chat stops works. --- RELEASE.md | 2 ++ cli/pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) 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/pyproject.toml b/cli/pyproject.toml index 6457a781..958d3434 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 = "*" pycryptodome = "*" pysocks = "*" From 5e2128106d87654fa66ed941d754901c5588ddbb Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Fri, 7 May 2021 10:53:13 +1000 Subject: [PATCH 05/13] Remind the user to submit contact info if they want a response to a message in Receive Mode --- cli/onionshare_cli/resources/templates/receive.html | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 %}

Submit Files or Messages

-

You can submit files, a message, or both

+

You can submit files, a message, or both.

+

Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.

{% endif %} {% if not disable_text and disable_files %}

Submit Messages

-

You can submit a message

+

You can submit a message.

+

Remember, you are accessing this service anonymously! Provide contact info if you want a response to the message.

{% endif %} {% if disable_text and not disable_files %}

Submit Files

@@ -61,4 +63,4 @@ - \ No newline at end of file + From bbe164471414a446e38bcd6775b9b860f3ccc28b Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Mon, 10 May 2021 06:27:23 +0200 Subject: [PATCH 06/13] Translated using Weblate (Polish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/pl/ MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated using Weblate (Indonesian) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (32 of 32 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (56 of 56 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (32 of 32 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (56 of 56 strings) Translated using Weblate (Turkish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/tr/ Added translation using Weblate (Indonesian) Translated using Weblate (Galician) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/gl/ Translated using Weblate (Ukrainian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/uk/ Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ Translated using Weblate (Indonesian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/id/ Translated using Weblate (Icelandic) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/is/ Translated using Weblate (Greek) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/el/ Translated using Weblate (Turkish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/tr/ Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Spanish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/es/ Added translation using Weblate (Indonesian) Co-authored-by: AO Localisation Lab Co-authored-by: Algustionesa Yoshi Co-authored-by: Eric Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: Oğuz Ersen Co-authored-by: Robert Obryk Co-authored-by: Sveinn í Felli Co-authored-by: Xosé M Co-authored-by: Zuhualime Akoochimoya Co-authored-by: george kitsoukakis Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/id/ Translation: OnionShare/Doc - Advanced Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Index --- .../src/onionshare/resources/locale/el.json | 7 +- .../src/onionshare/resources/locale/es.json | 9 +- .../src/onionshare/resources/locale/fr.json | 7 +- .../src/onionshare/resources/locale/gl.json | 7 +- .../src/onionshare/resources/locale/id.json | 45 +++++--- .../src/onionshare/resources/locale/is.json | 7 +- .../src/onionshare/resources/locale/pl.json | 4 +- .../src/onionshare/resources/locale/tr.json | 9 +- .../src/onionshare/resources/locale/uk.json | 9 +- .../onionshare/resources/locale/zh_Hans.json | 7 +- docs/source/locale/id/LC_MESSAGES/index.po | 30 +++++ docs/source/locale/id/LC_MESSAGES/install.po | 105 ++++++++++++++++++ docs/source/locale/tr/LC_MESSAGES/advanced.po | 15 ++- docs/source/locale/tr/LC_MESSAGES/features.po | 49 ++++++-- docs/source/locale/uk/LC_MESSAGES/advanced.po | 17 ++- docs/source/locale/uk/LC_MESSAGES/features.po | 64 ++++++++--- 16 files changed, 324 insertions(+), 67 deletions(-) create mode 100644 docs/source/locale/id/LC_MESSAGES/index.po create mode 100644 docs/source/locale/id/LC_MESSAGES/install.po diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json index 68b67d8e..ddf869d2 100644 --- a/desktop/src/onionshare/resources/locale/el.json +++ b/desktop/src/onionshare/resources/locale/el.json @@ -283,5 +283,10 @@ "gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος", "gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.", "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση του OnionShare μπορεί να συμμετέχει στο chat με χρήση του Tor Browser: ", - "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/es.json b/desktop/src/onionshare/resources/locale/es.json index 59f07406..ae5757ba 100644 --- a/desktop/src/onionshare/resources/locale/es.json +++ b/desktop/src/onionshare/resources/locale/es.json @@ -296,9 +296,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": "Cualquiera con esta dirección de OnionShare puede puede unirse a este cuarto de chat usando el Navegador Tor: ", + "gui_chat_url_description": "Cualquiera con esta dirección de OnionShare puede unirse a este cuarto de chat usando el Navegador Tor: ", "error_port_not_available": "Puerto OnionShare no disponible", "gui_rendezvous_cleanup_quit_early": "Salir Antes", "gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.", - "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color." + "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 42b3c39b..f23a11e9 100644 --- a/desktop/src/onionshare/resources/locale/fr.json +++ b/desktop/src/onionshare/resources/locale/fr.json @@ -295,5 +295,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 11848ca3..86fc7b8e 100644 --- a/desktop/src/onionshare/resources/locale/gl.json +++ b/desktop/src/onionshare/resources/locale/gl.json @@ -191,5 +191,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 5b966eeb..9980a479 100644 --- a/desktop/src/onionshare/resources/locale/id.json +++ b/desktop/src/onionshare/resources/locale/id.json @@ -113,11 +113,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", @@ -131,17 +131,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": "Siapa saja dengan alamat OnionShare ini dapat mengunduh berkas Anda menggunakan Tor Browser:", + "gui_receive_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunggah berkas ke komputer Anda menggunakan Tor Browser:", + "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.

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

Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", "gui_status_indicator_share_stopped": "Siap untuk berbagi", "gui_status_indicator_share_working": "Memulai…", "gui_status_indicator_share_started": "Berbagi", @@ -157,7 +157,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.

Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.", "receive_mode_upload_starting": "", "receive_mode_received_file": "", "gui_mode_share_button": "", @@ -260,5 +260,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": "Siapa saja dengan alamat OnionShare ini dapat bergabung di ruang obrolan ini menggunakan Tor Browser:", + "gui_website_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunjungi situs web Anda menggunakan Tor Browser:", + "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi." } diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json index 039b12f7..e8a3bf3b 100644 --- a/desktop/src/onionshare/resources/locale/is.json +++ b/desktop/src/onionshare/resources/locale/is.json @@ -288,5 +288,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/pl.json b/desktop/src/onionshare/resources/locale/pl.json index b44e5e13..61b07d8b 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 d3d09298..c646594f 100644 --- a/desktop/src/onionshare/resources/locale/tr.json +++ b/desktop/src/onionshare/resources/locale/tr.json @@ -106,7 +106,7 @@ "settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?", "settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}", "settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.", - "error_tor_protocol_error": "Tor ile ilgili bir sorun çıktı: {}", + "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}", "error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı", "error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor", "connecting_to_tor": "Tor ağı ile bağlantı kuruluyor", @@ -258,5 +258,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 0cd71586..316c2dc4 100644 --- a/desktop/src/onionshare/resources/locale/uk.json +++ b/desktop/src/onionshare/resources/locale/uk.json @@ -92,7 +92,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. Натисніть тут, щоб його отримати.

Ваша версія {}, а найновіша {}.", @@ -233,5 +233,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 a37d0c58..3268c622 100644 --- a/desktop/src/onionshare/resources/locale/zh_Hans.json +++ b/desktop/src/onionshare/resources/locale/zh_Hans.json @@ -285,5 +285,10 @@ "gui_chat_url_description": "任何有这个OnionShare地址的人均可 加入这个聊天室,方法是使用Tor浏览器:", "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/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 , 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 \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 , 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 `_." +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 `_ or the `Snap `_ 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 `_." +msgstr "" + +#: ../../source/install.rst:38 +msgid "You must have GnuPG installed to verify signatures. For macOS you probably want `GPGTools `_, and for Windows you probably want `Gpg4win `_." +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 `_." +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 `_ and the `Tor Project `_ may be useful." +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 \n" -"Language: tr\n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.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 \n" -"Language: tr\n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.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 " +"`_ mesajlaşma uygulamasında şifreli bir metin mesajı " +"almak istiyorsanız, `@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 \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 \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 `_, ви можете почати розмову з `@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 "" #~ "вашій домашній теці вашого комп'ютера та" #~ " автоматично впорядковуються до окремих " #~ "підтек за часом завантаження файлів." - From 772d12b4bbb1e33cf8b523cbbf70ab7e5bf6dfe7 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Mon, 10 May 2021 15:05:16 +1000 Subject: [PATCH 07/13] Add tests for Chat, and fix the server_status message bar when in Chat mode --- .../src/onionshare/resources/locale/en.json | 6 +- desktop/src/onionshare/tab/tab.py | 8 +- desktop/tests/gui_base_test.py | 13 ++++ desktop/tests/run.sh | 3 +- desktop/tests/test_gui_chat.py | 75 +++++++++++++++++++ desktop/tests/test_gui_tabs.py | 30 ++++++-- 6 files changed, 124 insertions(+), 11 deletions(-) create mode 100644 desktop/tests/test_gui_chat.py diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 8a69142c..a847264b 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -101,6 +101,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", @@ -198,4 +202,4 @@ "error_port_not_available": "OnionShare port not available", "history_receive_read_message_button": "Read Message", "error_tor_protocol_error": "There was an error with Tor: {}" -} \ No newline at end of file +} diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py index d39cf826..09982de9 100644 --- a/desktop/src/onionshare/tab/tab.py +++ b/desktop/src/onionshare/tab/tab.py @@ -452,20 +452,20 @@ class Tab(QtWidgets.QWidget): # Chat mode if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED: self.set_server_status_indicator_stopped( - strings._("gui_status_indicator_receive_stopped") + strings._("gui_status_indicator_chat_stopped") ) elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING: if self.settings.get("general", "autostart_timer"): self.set_server_status_indicator_working( - strings._("gui_status_indicator_receive_scheduled") + strings._("gui_status_indicator_chat_scheduled") ) else: self.set_server_status_indicator_working( - strings._("gui_status_indicator_receive_working") + strings._("gui_status_indicator_chat_working") ) elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED: self.set_server_status_indicator_started( - strings._("gui_status_indicator_receive_started") + strings._("gui_status_indicator_chat_started") ) def set_server_status_indicator_stopped(self, label_text): diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py index c6a5da2f..3a38ff8e 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 requires JavaScript" 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() From fc22850260aabf9b716d372004be5dc7a4befaaa Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 10 May 2021 15:36:53 -0700 Subject: [PATCH 08/13] Remove Finnish, add Indonesian and Serbian (latin) --- cli/onionshare_cli/settings.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) 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 From 1a1420aaaa0028a693613d795156f2a59bedf4e1 Mon Sep 17 00:00:00 2001 From: Hosted Weblate Date: Tue, 11 May 2021 00:38:55 +0200 Subject: [PATCH 09/13] =?UTF-8?q?Translated=20using=20Weblate=20(Norwegian?= =?UTF-8?q?=20Bokm=C3=A5l)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Currently translated at 100.0% (11 of 11 strings) Translated using Weblate (Norwegian Bokmål) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/nb_NO/ Translated using Weblate (Polish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/pl/ Translated using Weblate (Indonesian) Currently translated at 100.0% (2 of 2 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (32 of 32 strings) Translated using Weblate (Turkish) Currently translated at 100.0% (56 of 56 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (32 of 32 strings) Translated using Weblate (Ukrainian) Currently translated at 100.0% (56 of 56 strings) Translated using Weblate (Turkish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/tr/ Added translation using Weblate (Indonesian) Translated using Weblate (Galician) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/gl/ Translated using Weblate (Ukrainian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/uk/ Translated using Weblate (Chinese (Simplified)) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/zh_Hans/ Translated using Weblate (Indonesian) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/id/ Translated using Weblate (Icelandic) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/is/ Translated using Weblate (Greek) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/el/ Translated using Weblate (Turkish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/tr/ Translated using Weblate (French) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/fr/ Translated using Weblate (Spanish) Translate-URL: https://hosted.weblate.org/projects/onionshare/translations/es/ Added translation using Weblate (Indonesian) Co-authored-by: AO Localisation Lab Co-authored-by: Algustionesa Yoshi Co-authored-by: Eric Co-authored-by: Hosted Weblate Co-authored-by: Ihor Hordiichuk Co-authored-by: Jonas Matisen Co-authored-by: Oğuz Ersen Co-authored-by: Robert Obryk Co-authored-by: Sveinn í Felli Co-authored-by: Xosé M Co-authored-by: Zuhualime Akoochimoya Co-authored-by: george kitsoukakis Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-advanced/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/tr/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-features/uk/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-index/id/ Translate-URL: https://hosted.weblate.org/projects/onionshare/doc-security/nb_NO/ Translation: OnionShare/Doc - Advanced Translation: OnionShare/Doc - Features Translation: OnionShare/Doc - Index Translation: OnionShare/Doc - Security --- .../src/onionshare/resources/locale/el.json | 7 +- .../src/onionshare/resources/locale/es.json | 9 +- .../src/onionshare/resources/locale/fr.json | 7 +- .../src/onionshare/resources/locale/gl.json | 7 +- .../src/onionshare/resources/locale/id.json | 45 +++++--- .../src/onionshare/resources/locale/is.json | 7 +- .../onionshare/resources/locale/nb_NO.json | 9 +- .../src/onionshare/resources/locale/pl.json | 4 +- .../src/onionshare/resources/locale/tr.json | 9 +- .../src/onionshare/resources/locale/uk.json | 9 +- .../onionshare/resources/locale/zh_Hans.json | 7 +- docs/source/locale/id/LC_MESSAGES/index.po | 30 +++++ docs/source/locale/id/LC_MESSAGES/install.po | 105 ++++++++++++++++++ .../locale/nb_NO/LC_MESSAGES/security.po | 40 +++---- docs/source/locale/tr/LC_MESSAGES/advanced.po | 15 ++- docs/source/locale/tr/LC_MESSAGES/features.po | 49 ++++++-- docs/source/locale/uk/LC_MESSAGES/advanced.po | 17 ++- docs/source/locale/uk/LC_MESSAGES/features.po | 64 ++++++++--- 18 files changed, 349 insertions(+), 91 deletions(-) create mode 100644 docs/source/locale/id/LC_MESSAGES/index.po create mode 100644 docs/source/locale/id/LC_MESSAGES/install.po diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json index 68b67d8e..ddf869d2 100644 --- a/desktop/src/onionshare/resources/locale/el.json +++ b/desktop/src/onionshare/resources/locale/el.json @@ -283,5 +283,10 @@ "gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος", "gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.", "gui_chat_url_description": "Οποιοσδήποτε με αυτή τη διεύθυνση του OnionShare μπορεί να συμμετέχει στο chat με χρήση του Tor Browser: ", - "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/es.json b/desktop/src/onionshare/resources/locale/es.json index 59f07406..ae5757ba 100644 --- a/desktop/src/onionshare/resources/locale/es.json +++ b/desktop/src/onionshare/resources/locale/es.json @@ -296,9 +296,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": "Cualquiera con esta dirección de OnionShare puede puede unirse a este cuarto de chat usando el Navegador Tor: ", + "gui_chat_url_description": "Cualquiera con esta dirección de OnionShare puede unirse a este cuarto de chat usando el Navegador Tor: ", "error_port_not_available": "Puerto OnionShare no disponible", "gui_rendezvous_cleanup_quit_early": "Salir Antes", "gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.", - "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color." + "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 42b3c39b..f23a11e9 100644 --- a/desktop/src/onionshare/resources/locale/fr.json +++ b/desktop/src/onionshare/resources/locale/fr.json @@ -295,5 +295,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 11848ca3..86fc7b8e 100644 --- a/desktop/src/onionshare/resources/locale/gl.json +++ b/desktop/src/onionshare/resources/locale/gl.json @@ -191,5 +191,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 5b966eeb..9980a479 100644 --- a/desktop/src/onionshare/resources/locale/id.json +++ b/desktop/src/onionshare/resources/locale/id.json @@ -113,11 +113,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", @@ -131,17 +131,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": "Siapa saja dengan alamat OnionShare ini dapat mengunduh berkas Anda menggunakan Tor Browser:", + "gui_receive_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunggah berkas ke komputer Anda menggunakan Tor Browser:", + "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.

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

Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)", "gui_status_indicator_share_stopped": "Siap untuk berbagi", "gui_status_indicator_share_working": "Memulai…", "gui_status_indicator_share_started": "Berbagi", @@ -157,7 +157,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.

Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.", "receive_mode_upload_starting": "", "receive_mode_received_file": "", "gui_mode_share_button": "", @@ -260,5 +260,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": "Siapa saja dengan alamat OnionShare ini dapat bergabung di ruang obrolan ini menggunakan Tor Browser:", + "gui_website_url_description": "Siapa saja dengan alamat OnionShare ini dapat mengunjungi situs web Anda menggunakan Tor Browser:", + "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi." } diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json index 039b12f7..e8a3bf3b 100644 --- a/desktop/src/onionshare/resources/locale/is.json +++ b/desktop/src/onionshare/resources/locale/is.json @@ -288,5 +288,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 54db60df..f2ee1477 100644 --- a/desktop/src/onionshare/resources/locale/nb_NO.json +++ b/desktop/src/onionshare/resources/locale/nb_NO.json @@ -118,7 +118,7 @@ "settings_error_bundled_tor_timeout": "Det tar for lang tid å koble til Tor. Kanskje du ikke er koblet til Internett, eller har du kanskje en unøyaktig systemklokke?", "settings_error_bundled_tor_broken": "OnionShare kunne ikke koble til Tor i bakgrunnen:\n{}", "settings_test_success": "Koblet til Tor-kontrolleren.\n\nTor-versjon: {}.\nStøtter flyktige løk-tjenester: {}.\nStøtter klientidentifisering: {}.\nStøtter nestegenerasjons .onion-adresser: {}.", - "error_tor_protocol_error": "Feil med Tor: {}", + "error_tor_protocol_error": "Det oppsto en feil med Tor: {}", "error_tor_protocol_error_unknown": "Ukjent feil med Tor", "error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet", "connecting_to_tor": "Kobler til Tor-nettverket", @@ -296,5 +296,10 @@ "error_port_not_available": "OnionShare-port ikke tilgjengelig", "gui_rendezvous_cleanup_quit_early": "Avslutt tidlig", "gui_rendezvous_cleanup": "Venter på at Tor-kretsene lukkes for å være sikker på at filene dine er overført.\n\nDette kan ta noen minutter.", - "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus." + "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus.", + "history_receive_read_message_button": "Les melding", + "mode_settings_receive_webhook_url_checkbox": "Bruk varsling webhook", + "mode_settings_receive_disable_files_checkbox": "Deaktiver opplasting av filer", + "mode_settings_receive_disable_text_checkbox": "Deaktiver innsending av tekst", + "mode_settings_title_label": "Egendefinert tittel" } diff --git a/desktop/src/onionshare/resources/locale/pl.json b/desktop/src/onionshare/resources/locale/pl.json index b44e5e13..61b07d8b 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 d3d09298..c646594f 100644 --- a/desktop/src/onionshare/resources/locale/tr.json +++ b/desktop/src/onionshare/resources/locale/tr.json @@ -106,7 +106,7 @@ "settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?", "settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}", "settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.", - "error_tor_protocol_error": "Tor ile ilgili bir sorun çıktı: {}", + "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}", "error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı", "error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor", "connecting_to_tor": "Tor ağı ile bağlantı kuruluyor", @@ -258,5 +258,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 0cd71586..316c2dc4 100644 --- a/desktop/src/onionshare/resources/locale/uk.json +++ b/desktop/src/onionshare/resources/locale/uk.json @@ -92,7 +92,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. Натисніть тут, щоб його отримати.

Ваша версія {}, а найновіша {}.", @@ -233,5 +233,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 a37d0c58..3268c622 100644 --- a/desktop/src/onionshare/resources/locale/zh_Hans.json +++ b/desktop/src/onionshare/resources/locale/zh_Hans.json @@ -285,5 +285,10 @@ "gui_chat_url_description": "任何有这个OnionShare地址的人均可 加入这个聊天室,方法是使用Tor浏览器:", "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/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 , 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 \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 , 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 `_." +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 `_ or the `Snap `_ 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 `_." +msgstr "" + +#: ../../source/install.rst:38 +msgid "You must have GnuPG installed to verify signatures. For macOS you probably want `GPGTools `_, and for Windows you probably want `Gpg4win `_." +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 `_." +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 `_ and the `Tor Project `_ 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 \n" -"Language: nb_NO\n" +"PO-Revision-Date: 2021-05-10 22:38+0000\n" +"Last-Translator: Jonas Matisen \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 \n" -"Language: tr\n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.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 \n" -"Language: tr\n" "Language-Team: tr \n" -"Plural-Forms: nplurals=2; plural=n != 1\n" +"Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.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 " +"`_ mesajlaşma uygulamasında şifreli bir metin mesajı " +"almak istiyorsanız, `@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 \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 \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 `_, ви можете почати розмову з `@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 "" #~ "вашій домашній теці вашого комп'ютера та" #~ " автоматично впорядковуються до окремих " #~ "підтек за часом завантаження файлів." - From 919c717dbcb2398900e3a1e1a0dea198e9644e36 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 10 May 2021 18:05:41 -0700 Subject: [PATCH 10/13] Write script that uses the weblate API to help determine which languages are ready for a release --- docs/README.md | 61 ++++++++++++++++ docs/check-weblate.py | 146 +++++++++++++++++++++++++++++++++++++ docs/poetry.lock | 162 +++++++++++++++++++++++++++++++++++++++++- docs/pyproject.toml | 1 + 4 files changed, 369 insertions(+), 1 deletion(-) create mode 100755 docs/check-weblate.py diff --git a/docs/README.md b/docs/README.md index fe026802..b9f868ec 100644 --- a/docs/README.md +++ b/docs/README.md @@ -36,3 +36,64 @@ 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/he/ | error 404 +GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/en/ +GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/cs/ | error 404 + +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% +English (en), 100.0% +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 >= 75% +======================= +Finnish (fi), 88.1% + +Docs translations >= 90% +======================== +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 >= 75% +======================== +``` diff --git a/docs/check-weblate.py b/docs/check-weblate.py new file mode 100755 index 00000000..8283deea --- /dev/null +++ b/docs/check-weblate.py @@ -0,0 +1,146 @@ +#!/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}"}) + + 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=100): + 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, percent_max=100): + 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 + or docs_translations[component][lang_code] > percent_max + ): + 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}") + + out.sort() + + print(f"Docs translations >= {percent_min}%") + print("========================") + print("\n".join(out)) + + print("") + + +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(90) + await app_percent_output(75, 90) + + await docs_percent_output(90) + await docs_percent_output(75, 90) + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/docs/poetry.lock b/docs/poetry.lock index 1be892f9..3bc4f44a 100644 --- a/docs/poetry.lock +++ b/docs/poetry.lock @@ -6,6 +6,14 @@ category = "main" 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" @@ -49,6 +57,17 @@ category = "main" 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" @@ -57,6 +76,48 @@ category = "main" 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" @@ -73,6 +134,17 @@ category = "main" 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" @@ -149,6 +221,20 @@ urllib3 = ">=1.21.1,<1.27" 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" @@ -157,6 +243,17 @@ category = "main" 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" @@ -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] From 36b6a8c9de4ebba0f78f6bc47f566ddd56602b9d Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 10 May 2021 18:19:20 -0700 Subject: [PATCH 11/13] Fix check-weblate.py to accurately describe the levels of translations --- docs/README.md | 25 ++++++++++++++++++------- docs/check-weblate.py | 35 +++++++++++++++++++++-------------- 2 files changed, 39 insertions(+), 21 deletions(-) diff --git a/docs/README.md b/docs/README.md index b9f868ec..029217bb 100644 --- a/docs/README.md +++ b/docs/README.md @@ -48,9 +48,13 @@ 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/he/ | error 404 -GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/en/ -GET https://hosted.weblate.org/api/translations/onionshare/doc-tor/cs/ | error 404 +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% ======================= @@ -62,7 +66,6 @@ Chinese (Traditional) (zh_Hant), 95.0% Croatian (hr), 95.0% Danish (da), 94.5% Dutch (nl), 92.6% -English (en), 100.0% French (fr), 98.0% Galician (gl), 97.5% German (de), 95.0% @@ -84,16 +87,24 @@ Swedish (sv), 94.5% Turkish (tr), 98.0% Ukrainian (uk), 98.0% -App translations >= 75% +App translations >= 80% ======================= Finnish (fi), 88.1% -Docs translations >= 90% +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 >= 75% +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 index 8283deea..c3e1be03 100755 --- a/docs/check-weblate.py +++ b/docs/check-weblate.py @@ -15,7 +15,9 @@ 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}"}) + r = await client.get( + url, headers={"Authorization": f"Token {api_token}"}, timeout=30.0 + ) if r.status_code == 200: print(f"GET {url}") @@ -41,12 +43,12 @@ async def get_docs_translation(component, lang_code): docs_translations[component][lang_code] = obj["translated_percent"] -async def app_percent_output(percent_min, percent_max=100): +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 + and app_translations[lang_code] < percent_max ): out.append( f"{languages[lang_code]} ({lang_code}), {app_translations[lang_code]}%" @@ -61,7 +63,7 @@ async def app_percent_output(percent_min, percent_max=100): print("") -async def docs_percent_output(percent_min, percent_max=100): +async def docs_percent_output(percent_min, exclude=[]): out = [] for lang_code in languages: include_language = True @@ -74,10 +76,7 @@ async def docs_percent_output(percent_min, percent_max=100): percentages.append(docs_translations[component][lang_code]) - if ( - docs_translations[component][lang_code] < percent_min - or docs_translations[component][lang_code] > percent_max - ): + if docs_translations[component][lang_code] < percent_min: include_language = False break @@ -86,13 +85,19 @@ async def docs_percent_output(percent_min, percent_max=100): percentages = ", ".join(percentages) out.append(f"{languages[lang_code]} ({lang_code}), {percentages}") - out.sort() + 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(out)) + print("\n".join(excluded)) print("") + return excluded async def main(): @@ -135,11 +140,13 @@ async def main(): print("") - await app_percent_output(90) - await app_percent_output(75, 90) + await app_percent_output(100) + await app_percent_output(90, 100) + await app_percent_output(80, 90) - await docs_percent_output(90) - await docs_percent_output(75, 90) + out100 = await docs_percent_output(100) + out90 = await docs_percent_output(90, out100) + await docs_percent_output(80, out100 + out90) if __name__ == "__main__": From 8c932b1a3b5d221ad78937e1e380b45360d0e192 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 10 May 2021 18:26:06 -0700 Subject: [PATCH 12/13] Update dev examples in docs --- docs/source/develop.rst | 197 ++++++++++++++++++++-------------------- 1 file changed, 100 insertions(+), 97 deletions(-) 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. From 9603d5a2caab7bdc205b670564c750269b0512ba Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Mon, 10 May 2021 18:26:53 -0700 Subject: [PATCH 13/13] Build docs --- docs/gettext/.doctrees/advanced.doctree | Bin 30413 -> 30413 bytes docs/gettext/.doctrees/develop.doctree | Bin 35678 -> 37736 bytes docs/gettext/.doctrees/environment.pickle | Bin 37841 -> 37975 bytes docs/gettext/.doctrees/features.doctree | Bin 47169 -> 47169 bytes docs/gettext/.doctrees/help.doctree | Bin 7679 -> 7679 bytes docs/gettext/.doctrees/index.doctree | Bin 3439 -> 3439 bytes docs/gettext/.doctrees/install.doctree | Bin 20613 -> 20613 bytes docs/gettext/.doctrees/security.doctree | Bin 13526 -> 13526 bytes docs/gettext/.doctrees/tor.doctree | Bin 30114 -> 30114 bytes docs/gettext/develop.pot | 28 +++++++++++----------- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/gettext/.doctrees/advanced.doctree b/docs/gettext/.doctrees/advanced.doctree index f3300dc94ecbab1fa1d6ccad4b8325e873bb02d1..3a142d544a741e88d94907f6a4db6bea0a1d7e2b 100644 GIT binary patch delta 1225 zcmW-gJ*!wn5QaJT#wbKYB#1$8+<=0D#GT#Q*%<`?MhX#~+1a&-jeY)sg-Ep0MiC1k zqO71|DUw2hAB~;0Mbe8PIM?npXXkmp?mal}JvhF4@3`85XU|QPaTxFd9fl)2YMn)H z-#PwHWMEp#FfM|l4ps0eP;)P=Ys~%A$-}3K3sD{`w>}sPi8znmniv#~axFce`6CE(Jl z1-vvN&fUpK$SPFWA3gfnk)&jpy^LNFP|R%V)G-t+RNAQfjmOR|B;r7qEJXsfOjl{6 zxV0iOry=f-pZMf7S$wXxxDKf}`jVWXn1(CV&}ZMTKl%NUR#67UX@wXWopDjspz3Dv z+S>Hgts|9IyLk(X2vHWPnsCNOwReK1`}ZsNLt`0gqXSX!FK6~KOad{N2D#7u=hOK} zO`A2;Fuoc3sx~VW_O&`Ra;f|J+1Zh7VFVlsg8>IjgBl7w$NSco(Y|^0;%V~Ub8S@S z`CCduWQ~ToxX-HEX}^E%^OH27))3!WVPHVnuvKdr3oUxl+P?AJgtNHmIMK`*)H zIy{3B?(eQYexwK}s@Jn+QViFn)z;_CX537f_g^pncqI2anwRKEXsnclD}hHdJhRS~ z_s{U^X=;{Htqjpp(Tg)JkrHL1Nm60mezAR>WPo>&=~xg6qKOm^H(BC@ed7M7@#!_K zg^Lat1qDq&q(|taq}_l(Ke&D8?CR}zH!sg!@?Y8 zEmOIjZ?eZ!9lYiJ6HVkweBf**~YwMA|(g5bpRoS8H8%=2*`Tx<_6wy!?i&N9p*1ymb0G-+K^O*tbb zR_^Ebw!e1(ZGt|>^n%uNH`9V7(;5+ZTR$B=e%QSf9yp^019K7138Z+D?#Q{1_3*Ki zqrFla1tnXxiRg7?oGo#Vp~zKjz5K*4M|(VF>zxH$kjQupS0iLDihZ_qz7ra+ZiDT8A%&jF)>m|NFedbRcTQ>Vv!Mz%hRXi0$5 zbp!{HyiBC7+I4;U%$>tNwO40y7zNN;lbVu8z08)Cnynkpe!uO-GqXY+Gckffz=CRu z2$LwYtoq!oZKvK;l@mria8U>Go^4ni&`fpxe)2G81y?ok1WkfEvFEslz$%rlq1yWM z`Lyjh6IBJ*4jn@Q@d}o#1d5Q7d|f*|jjl$*%`8YL$S@_hJY`@kWY5#r&9h5~eOQ?k zVAIHsqo-k$cuejYq48MCGlqqpojlqS&AW0kLfi20p{?e7>eE`9z%FT1d zq9y{&NqVwwoM%}dyz;{FUOI_W0-7}rg#T6d+(0R%DizoL*M8e}#?Gx0w;Z0yU3;5C z2sH$Y2dDMjwWq@qVXpvTB*DE@9omZI6r@xM`qKLA^&huALFJ0w4KTV=4a0V?Do|C! zwtf8!ZyrL&S&eEfGa5S0o&ajE@w#-YUd~^ouXoM8K$GBc#1v4$TwS`5_gUkp^$+pk z>WqYW^7uZi3gN}k8X>_9;zz8weSYus?EHOsFJd&SCrgCQQQRexVjj>Xg#g*tzw+z0 zV-oE%Ruo2@VIB`JGI};jZD?8-Z+!9MuFxQi(jbSP6qkmvhL}O2XmnoRzV%0tkz`m7 z5+X;DNMV^1XK7sOV6C#gym9|%mykGHYSA{(-Gs7R%8exkE5rKuol8f1@D60Dhwz3K zK)8!oE0H-2@o@bxZXI^+GkDFVBvGeQuzA>{A5u^iE(+R! PD3UHiMc2vAZ!Z4__3&Rr diff --git a/docs/gettext/.doctrees/develop.doctree b/docs/gettext/.doctrees/develop.doctree index c50d1041d2dc9bfa453f37c034a9bcc31767e88c..8c48f7e04c3fca851a480802607603eb29e9491a 100644 GIT binary patch literal 37736 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 BS#baW literal 35678 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 diff --git a/docs/gettext/.doctrees/environment.pickle b/docs/gettext/.doctrees/environment.pickle index 4127bd0ea24a79e9f4e68d2b7bcd3898282c94ef..4b580f66ccbfdda004bfc999736e4b3067d244e0 100644 GIT binary patch literal 37975 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 J(^y(v{QuQuJ8=L2 literal 37841 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 Y1fiK*g9bq<;2?C*D0SWZ*>BJP9~j|=00000 delta 2212 zcmWlb&8wwH5yrV^?#y5&7zpUX8FF7_lo=9}>aOaKLPQKfM~DkWC7UF6byqWJHc?|- z%&1vN$PffM7sJ4iECfX(DzqOcE(}2z`VY7<+aQP;(1n|b&$+x@I3L|zUC-}%>b!Ax z_r~4bFW6E5HOo=k*PKkuqm)`U5vs=lP0u~E(mdwGjd!M}seo$$IdCtGlhmP9aB*A!4tHCXCvMD%U6j-CJMZo;|Z!Pc2jpI!BS5 zM8&OipR6PzOzZ6BSC2NS=7!sm){b`}&-AI)n)XRrY`yuRKkPOxns7tsnYuLdHV2bA zqxnosVZCCHAExPnL4x&oPwGA>t_tu>UukE&urY57wwFL337SZ9BT_p#O zRoC&ue>&PGUd}SZtdKgFq^@O5WzR%0dtCo`AS46Zwv2GzixqUOnULiz!x z)VO~Axv|>__DK~bF(96`g3MHTpduc%&$RRlFP;BLM4u=%fHQ}bP+LvOORY17RC=`2 z=j{5&uD)=3^YqH~v-?jx`S|{$PyX~I=2#eN))|xDvu<|Msm9uK!-Yeze6tM@UpsY#qC>hEm;~Jyj}9zP|HiSa=AMWioOLDs)_$ zqZ43ENpXIU`-?H`-+AW3`qeY{oZDK1v4bI-j53 zo7P;A4)CV|2?i;Apg9lN7S!AN^EZERyrFT1xF7&!hjgqHe~NO9U`9>r#?8;e`-ekD z$Qhv|2iqbB(v%eO4eBMWyWf5U&FKiYGCI(NB4DUy6cCsaXCy&gAAjL1=Qd$+aLXl! zBxF`YbU50*uyd!m{_^6x2_>zU;t%PWWucY z7-4S_SW}oiteY>tjI=4#QBBZ}ali;eZ$rTj(C8QeXPNnZ8)m(Ofcdd65nl!Y$D+^ArNBt)ong#*`()8E5Fp$W|xdqs%gz6aSAw)b46 zaHajH9}DZnS1#?gC=t+x!1VysP($JuhjTI50*G2~-WGHN%?Qp2+bj}n9JbBUU`aG- z^ob#Kvd?#3ItktIOr8J)q_u<@Riwn8kr^=fTX)cpOx7LBWks@L8%SV;35a%t(x-5J@oWWFpc-}C$g(QJijAReh*q}OIuX|sA>S&|c c4kPDhV8+5w$v)^9$KO#?rX#fBK diff --git a/docs/gettext/.doctrees/help.doctree b/docs/gettext/.doctrees/help.doctree index 9af01519792d30fa1740e266010d38c73b1e950b..32e71df09566673d8bf546c8d6f88874c16a598b 100644 GIT binary patch delta 352 zcmWlVy-fr$5Jt791%U_CJng_aSkAfTDp*vkkeX^uK!LF9%i(^$J$z4(i+FOO>Y^cFsIic>9HeS8 zacjOlY@Vj2gEb)?W9k@F7puY%HKLe9t)KHWEg6GjN-<&0h*gUt3YE}%;6B*v?&NJ= zM%n+`D^SGdDl~x7GqlJIwXDDAmqSP?AqBd6e{@M<2mk;8 delta 352 zcmWO1y-7tu5CveaJVh}OMN_%2gZbN;S**fbkloqcCX5WMKm%h75b<^(hIU~gy77VU zobz|{ck}VI>^ntPDngJ^(umyHp!>)}YO0oAp6__#I@EYzcajETJ?BozqEM>T zdsEo%4<475tw@a++9RN9`L(PLVRUjxlUGVMqp7mBgHo?lKY3z;LJWDze|k|Rz9#{45zx1WozgS8|?vxq1>qc*(rRFs@c MaV>3ozq&pC2ei6jga7~l diff --git a/docs/gettext/.doctrees/index.doctree b/docs/gettext/.doctrees/index.doctree index bcb4fc446b94780ec26590876a5bcb18222cd4de..6ae4d2f8e83dfff63f6f737166ba7ca09a74e74d 100644 GIT binary patch delta 121 zcmV~$y$!-J5C%{gf!HBcS~@%T*%uGM9O!<0lTlD2c?G15lNEUHT+ZeDPOGTV=;*;M z!?)0kj!;N7Co-GA^t`M^sd^S30Hc)Xq7hs?WM@Xjd|Y2?MUG*_zKIMFK{=bY=7sj% K$?E*vj{6_bF(dH+ delta 121 zcmWN}!41P83;;k;waN~8@$C;|W19gwM+7mRtdBk`u|lPclNFlZz3yDk_4^JHkVSxn ziYMyotr~Q-L|L$-(ENqhEs}W#L<9ClwS%JXg|#Tv)Q08xyl)})g2Z{J)XH_4tMEuB Nm#XnFo1e$A`~g6RBIN)8 diff --git a/docs/gettext/.doctrees/install.doctree b/docs/gettext/.doctrees/install.doctree index 5e50e29a5282058dd12e90f6510e368b880a9a1e..ec507658e59aadcb872831e59ec15559730f8839 100644 GIT binary patch delta 844 zcmWktKZ~D55azw}jzC0$5D^UCnj*1^vpci1GlfQ>9dn0D<}Z84%JBm6za--Es&~(ocG^8yx3Al z%hVbcm`uPqIA+i6=+!dhwtxT8-J`UIkEPa_T?yAT?qpa(J{PWH`|sEO+0uZ{!*!sF zQePr-;!yEky1{wHB|r z(SCg6)@cIP(#GloMyI9aQf)j?)zKPz+3($a@j+U>HLdJnc%zwJDx5C=D+7P&EEcdo`W^0IvR;m+S_mKnVI zw33xvK%F^Y>V$?i7d(IRRkQ}JG7(f6u>{y+=PW(fVzHm|{&V?nOEcQ1Q+lnd69*VW zR0eBnVP_@VU(sLN8P1G3q*#nt!RTS*(m76Ft*rf5{`^YHmz3Jz8Wsmt>BV6{NX1CV jW9r{;emO}^m#^T2VGpVH%OXy-ZYzF(&$hq%_RZDz(-ZFb delta 844 zcmWlXy{ex@5XO1W@f-pP5(Gssm{*I$O6O~LX9`nUD5kPalbzXJ@D99zgTeMMSVucC zBD@ettwjQhX5Cqi_8!sb1^R?JOaR1N$NbNT5R%cq zJ$-z6`}BPKYHvUWQ5=e*2vJv1o)fBwE$DPSJiB(j*WN}Mfm0d_=&(L(n?dSmiad@- z7x%Y)bew@UB{vB-G{))8aV>%|Djok^et)rdG__ENJ*i_v5kjTEcafZKvuYR7i`dh?HM#|bHop<;K5 zRSatd*IH;6?0pT!-W^<8 zUg5Cj0KlWZ{qNb%QxODX#Tw!)PM|8&hIz*k{dE7G?{-weutpX|gb~f^%$rMtMT6Qr z&Trkh+#9=zv6g8jZs?^cll2&Nv{w1}?ERl!OF&6)nZ!s#OuDb3o)2xUs`Ll~^(r>d6!g@+_GUK*y~QKEK?dwL+D3r9|P?bQPi?j^+Pr^3&HJ{=VZ7D61!2 zO#rQUXHMoYCpRO*AHMl09Zhs(HOev;=Aup+tC_sjdyRJdNPllTr`ldz`U(+I)=5s8 zNKZF8*p6rNYP*dMqx6Ogn(&D9suW!0ExR(7$ItcMYx`<*X;AB{k)Sp6fl_*=%?Avl i)UA?8Zyfk0VhkSE7~Y^ho}Vz`_I$YR~wR;yP6sYmv&ogv4aA^ z&_3+>)A`Sq(~Av+D}p0?T4v$wE9p3eKF`bVZAc@6xxi-UPzdj%2(T#?O8Nfb_5Edo z;-&-4=1iWvykN~$K&Sv@wLiW2ciCFgjIPYwgK?R8Pc;Y=M@x$R`_1R`c9bCV+3#~Dl7R><}`J;3dNHOtafk>e%0fZeAKvqM8?!euG;iQMD!n?hwF3%sXwv@U-md=v DESGfq delta 422 zcmWmBF>aJW3zwl9D00t_3u((h>47<7{C=maqc=FZq{Kk9N%v~oeLw#0B2?* z?#*Q(W}lr>9aZ#r`})JRpl<^dB`4m0U| z**C%nIsV@2^>!2T>R`S_!JF`o>+$1G GuKxj{q;|6a diff --git a/docs/gettext/.doctrees/tor.doctree b/docs/gettext/.doctrees/tor.doctree index ca578150da6a90b153016fbdf8fa73b1cffbd432..378ebe7d76579a5645f593dedee0b5182dfb3f4d 100644 GIT binary patch delta 1228 zcmW-hv5Q|t5Xbpl?h=9uF`|Va_YlRxW_NaGcLx!IB8YMpL4`DOGdr_3wl)!LBqU8@ zafMiVRzea_*1}G(^-oYNL~PP%Yvo+3$9wFX-S7AN`R?hX-RYy<*}dHcMbLp}RuHsm z3aPa!u5K_p)b((8d$+aO%18s*2~nGJo&>{SWS3#h*9RA#-`g}5HxjKThHPC@%Wl&$ zgIVpqzC8GJw`r~MZ8Xi5u?-R6R7)E=8N0(+FJ1a-f6Hj2BhswsXtQWGmrCB_sb;u- zd*W!fWo9iT(5F}I3`*1lCgv&)%YgOvQ&%r;V}eh|ZiyIas0gN-lN!??m$q&`^Ve?k z*;>r&sSiM(Mcfit&x2a{0A+pt?6uui$IN6^YXQJw&PrZuYOKA@(fj)2x%V$_{Kex>Af+KgkQhD`0f57S*BtgfdNMh z@Ioa|fB{_6sO#=4cP?ymmgJOlN*tbY>@lR{#IB*LiaW>uwV;Iyrj@vQ`Nlg zzxGRj<5S`%NsfxW4jH-RUP_i(Oj=v_UjJtAuyz#=YDhBb;Bc#iW>A%8BZzqK+G%8c zPKr0k7~B9dgLHu*EsofFf_3GM-}knh$XaWWtpS39BFsSqMR7)&eLeZst%D7dgl?YF z3u8FfN6s9vLaW^Z?UNtg`EP4zCCz3Dn_(2En=impCvoO?}aaiK` z5UG_?;$WnG{q*63y^Y9Q3IiM)#m*vi_N-pRe4OX7-n#K`$ZWBZiAIGKGna@k&gD65 zbQR~2`QYTuHUVHwuRPh{aM; zS%1p?kZA!Od&ticolHEKqi{LI$IQtm59i+-OyE{a){!(yZXJThHXyJqxy6O@j*xE#}kzg8Q zafMiVRzf^a*1}G(^-oYNL~PP%Yvmlg;yu_m`SK&}_9?Eo4-kbD!LJ z{r1@LZqwF4XC95&DfQMwOUd!txOZkaA!`nX2_Mb#!01pSyFgm8e&Qna*&k7 zXH7~@>wP%g+b*$n9A(O-<*qs=VPJqXrWMuoWcm1TYdB-Out7S7c+*K)AVZ%)A2O|n zul%yxg8DEilEq^M69u0wN5nGfG;Qm_t6%ROA=eskGRA+MO^p-J+0(FuqvrMY&9mKR z*&;~Olk^m$td*|0a3Jlidn)VtYrpSp5GXo&N+tM=G+GU==u8$PX~KH^je7@MMe7Yo zBJLPo#N*Y~%Y&@9a&?iQ_R zW}`zq7@rWmTR*+`-QK2QAXXbJZIBBJi?!$x$e06~uX}g?JvegYoO1*#vQMQ}nS%@T z)YJ^RoL<~IKYjh=cq>-2^y1Uih@<9?LohC9?Cwz3#mSA`=FaI-+?Y|2oKo0@;UMPW zhB0pasSo!zYNJ-@QJn~N_^Do}h7X=*)Fr{`x&OVjR+Vkkp2M)nY{U^pKd4~1l f2j7Pk6O|)dNk^fUMG}KifcH{3QCXjUcy#T5ZTn%R 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 \n" "Language-Team: LANGUAGE \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 `_. 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 ""