summaryrefslogtreecommitdiff
path: root/desktop
diff options
context:
space:
mode:
Diffstat (limited to 'desktop')
-rw-r--r--desktop/README.md4
-rwxr-xr-xdesktop/package/linux/build-appimage.py3
-rwxr-xr-xdesktop/package/macos/build.py3
-rw-r--r--desktop/package/windows/build.py4
-rw-r--r--desktop/pyproject.toml4
-rwxr-xr-xdesktop/scripts/check_lacked_trans.py5
-rwxr-xr-xdesktop/scripts/get-tor-osx.py9
-rw-r--r--desktop/scripts/get-tor-windows.py11
-rwxr-xr-xdesktop/scripts/rebuild-cli.py1
-rw-r--r--desktop/src/onionshare/__init__.py49
-rw-r--r--desktop/src/onionshare/gui_common.py58
-rw-r--r--desktop/src/onionshare/main_window.py2
-rw-r--r--desktop/src/onionshare/resources/images/open_message.pngbin0 -> 5403 bytes
-rw-r--r--desktop/src/onionshare/resources/locale/bn.json13
-rw-r--r--desktop/src/onionshare/resources/locale/da.json12
-rw-r--r--desktop/src/onionshare/resources/locale/de.json15
-rw-r--r--desktop/src/onionshare/resources/locale/el.json124
-rw-r--r--desktop/src/onionshare/resources/locale/en.json17
-rw-r--r--desktop/src/onionshare/resources/locale/es.json13
-rw-r--r--desktop/src/onionshare/resources/locale/fr.json15
-rw-r--r--desktop/src/onionshare/resources/locale/gl.json12
-rw-r--r--desktop/src/onionshare/resources/locale/hi.json41
-rw-r--r--desktop/src/onionshare/resources/locale/hr.json57
-rw-r--r--desktop/src/onionshare/resources/locale/id.json215
-rw-r--r--desktop/src/onionshare/resources/locale/is.json12
-rw-r--r--desktop/src/onionshare/resources/locale/it.json10
-rw-r--r--desktop/src/onionshare/resources/locale/lt.json218
-rw-r--r--desktop/src/onionshare/resources/locale/nb_NO.json9
-rw-r--r--desktop/src/onionshare/resources/locale/nl.json32
-rw-r--r--desktop/src/onionshare/resources/locale/pl.json9
-rw-r--r--desktop/src/onionshare/resources/locale/pt_BR.json12
-rw-r--r--desktop/src/onionshare/resources/locale/ru.json13
-rw-r--r--desktop/src/onionshare/resources/locale/si.json195
-rw-r--r--desktop/src/onionshare/resources/locale/sr_Latn.json57
-rw-r--r--desktop/src/onionshare/resources/locale/sv.json38
-rw-r--r--desktop/src/onionshare/resources/locale/tr.json29
-rw-r--r--desktop/src/onionshare/resources/locale/uk.json19
-rw-r--r--desktop/src/onionshare/resources/locale/yo.json37
-rw-r--r--desktop/src/onionshare/resources/locale/zh_Hans.json12
-rw-r--r--desktop/src/onionshare/settings_dialog.py39
-rw-r--r--desktop/src/onionshare/strings.py1
-rw-r--r--desktop/src/onionshare/tab/mode/__init__.py52
-rw-r--r--desktop/src/onionshare/tab/mode/chat_mode/__init__.py22
-rw-r--r--desktop/src/onionshare/tab/mode/file_selection.py4
-rw-r--r--desktop/src/onionshare/tab/mode/history.py88
-rw-r--r--desktop/src/onionshare/tab/mode/mode_settings_widget.py50
-rw-r--r--desktop/src/onionshare/tab/mode/receive_mode/__init__.py116
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/__init__.py12
-rw-r--r--desktop/src/onionshare/tab/mode/share_mode/threads.py5
-rw-r--r--desktop/src/onionshare/tab/mode/website_mode/__init__.py14
-rw-r--r--desktop/src/onionshare/tab/server_status.py18
-rw-r--r--desktop/src/onionshare/tab/tab.py15
-rw-r--r--desktop/src/onionshare/tab_widget.py12
-rw-r--r--desktop/src/onionshare/threads.py6
-rw-r--r--desktop/src/onionshare/tor_connection_dialog.py2
-rw-r--r--desktop/src/onionshare/update_checker.py8
-rw-r--r--desktop/src/onionshare/widgets.py9
-rw-r--r--desktop/src/org.onionshare.OnionShare.appdata.xml6
-rw-r--r--desktop/src/setup.py14
-rw-r--r--desktop/tests/conftest.py28
-rw-r--r--desktop/tests/gui_base_test.py34
-rwxr-xr-xdesktop/tests/run.sh3
-rw-r--r--desktop/tests/test_gui_chat.py98
-rw-r--r--desktop/tests/test_gui_receive.py73
-rw-r--r--desktop/tests/test_gui_share.py18
-rw-r--r--desktop/tests/test_gui_tabs.py31
-rw-r--r--desktop/tests/test_gui_website.py22
67 files changed, 1667 insertions, 522 deletions
diff --git a/desktop/README.md b/desktop/README.md
index 97d0fd30..4a59fe03 100644
--- a/desktop/README.md
+++ b/desktop/README.md
@@ -5,7 +5,7 @@
Start by getting the source code and changing to the `desktop` folder:
```sh
-git clone https://github.com/micahflee/onionshare.git
+git clone https://github.com/onionshare/onionshare.git
cd onionshare/desktop
```
@@ -15,6 +15,8 @@ cd onionshare/desktop
If you're using Linux, install `tor` and `obfs4proxy` from either the [official Debian repository](https://support.torproject.org/apt/tor-deb-repo/), or from your package manager.
+In Ubuntu 20.04 you also need the `libxcb-xinerama0` package installed.
+
#### macOS
Download and install Python 3.8.6 from https://www.python.org/downloads/release/python-386/. I downloaded `python-3.8.6-macosx10.9.pkg`. (You may need to also run `/Applications/Python\ 3.8/Install\ Certificates.command`.)
diff --git a/desktop/package/linux/build-appimage.py b/desktop/package/linux/build-appimage.py
index 73164b55..dfaba1b4 100755
--- a/desktop/package/linux/build-appimage.py
+++ b/desktop/package/linux/build-appimage.py
@@ -2,7 +2,6 @@
import os
import inspect
import subprocess
-import argparse
import shutil
import glob
@@ -44,4 +43,4 @@ def main():
if __name__ == "__main__":
- main() \ No newline at end of file
+ main()
diff --git a/desktop/package/macos/build.py b/desktop/package/macos/build.py
index ea1e90c9..2bfea3ad 100755
--- a/desktop/package/macos/build.py
+++ b/desktop/package/macos/build.py
@@ -67,7 +67,7 @@ def main():
print("○ Create app bundle")
run(["briefcase", "create"], desktop_dir)
- app_path = os.path.join(desktop_dir, "macOS", "OnionShare", "OnionShare.app")
+ app_path = os.path.join(desktop_dir, "macOS", "app", "OnionShare", "OnionShare.app")
print("○ Delete unused Qt5 frameworks from app bundle")
for framework in [
@@ -212,7 +212,6 @@ def main():
f"{app_path}/Contents/Resources/app_packages/PySide2/pyside2-lupdate",
f"{app_path}/Contents/Resources/app_packages/PySide2/rcc",
f"{app_path}/Contents/Resources/app_packages/PySide2/uic",
- f"{app_path}/Contents/Resources/Support/bin/python3",
app_path,
],
):
diff --git a/desktop/package/windows/build.py b/desktop/package/windows/build.py
index 59929070..bbccbe46 100644
--- a/desktop/package/windows/build.py
+++ b/desktop/package/windows/build.py
@@ -2,7 +2,6 @@
import os
import inspect
import subprocess
-import argparse
import shutil
import glob
@@ -197,6 +196,7 @@ def main():
os.path.join(
desktop_dir,
"windows",
+ "msi",
"OnionShare",
"src",
"app_packages",
@@ -212,7 +212,7 @@ def main():
]
print(f"○ Created unsigned installer: {msi_filename}")
- print(f"○ Signing installer")
+ print("○ Signing installer")
run(
[
"signtool.exe",
diff --git a/desktop/pyproject.toml b/desktop/pyproject.toml
index de52b2cd..fdb820b4 100644
--- a/desktop/pyproject.toml
+++ b/desktop/pyproject.toml
@@ -1,7 +1,7 @@
[tool.briefcase]
project_name = "OnionShare"
bundle = "org.onionshare"
-version = "2.3.1"
+version = "2.3.3"
url = "https://onionshare.org"
license = "GPLv3"
author = 'Micah Lee'
@@ -13,7 +13,7 @@ description = "Securely and anonymously share files, host websites, and chat wit
icon = "src/onionshare/resources/onionshare"
sources = ['src/onionshare']
requires = [
- "./onionshare_cli-2.3.1-py3-none-any.whl",
+ "./onionshare_cli-2.3.3-py3-none-any.whl",
"pyside2==5.15.1",
"qrcode"
]
diff --git a/desktop/scripts/check_lacked_trans.py b/desktop/scripts/check_lacked_trans.py
index 965b103b..2456c995 100755
--- a/desktop/scripts/check_lacked_trans.py
+++ b/desktop/scripts/check_lacked_trans.py
@@ -105,11 +105,10 @@ def main():
if src[quote_i] == '"':
quote = '"'
break
- elif src[quote_i] == "'":
+ if src[quote_i] == "'":
quote = "'"
break
- else:
- inc += 1
+ inc += 1
# find the starting quote
starting_i = src.find(quote, starting_i)
diff --git a/desktop/scripts/get-tor-osx.py b/desktop/scripts/get-tor-osx.py
index bf0cb5bc..a62703c8 100755
--- a/desktop/scripts/get-tor-osx.py
+++ b/desktop/scripts/get-tor-osx.py
@@ -24,23 +24,20 @@ This script downloads a pre-built tor binary to bundle with OnionShare.
In order to avoid a Mac gnupg dependency, I manually verify the signature
and hard-code the sha256 hash.
"""
-
import inspect
import os
import sys
import hashlib
-import zipfile
-import io
import shutil
import subprocess
import requests
def main():
- dmg_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0.10/TorBrowser-10.0.10-osx64_en-US.dmg"
- dmg_filename = "TorBrowser-10.0.10-osx64_en-US.dmg"
+ dmg_url = "https://dist.torproject.org/torbrowser/10.5.5/TorBrowser-10.5.5-osx64_en-US.dmg"
+ dmg_filename = "TorBrowser-10.0.18-osx64_en-US.dmg"
expected_dmg_sha256 = (
- "7ed73e94ccdfab76b8d96ddbac7828d3a7c77dd73b54c34e55666f3b6274d12a"
+ "f93d2174c58309d1d563deb3616fc3aec689b6eb0af4d70661b1695c26fc2af7"
)
# Build paths
diff --git a/desktop/scripts/get-tor-windows.py b/desktop/scripts/get-tor-windows.py
index 9cb8898c..92dfb540 100644
--- a/desktop/scripts/get-tor-windows.py
+++ b/desktop/scripts/get-tor-windows.py
@@ -23,7 +23,6 @@ This script downloads a pre-built tor binary to bundle with OnionShare.
In order to avoid a Windows gnupg dependency, I manually verify the signature
and hard-code the sha256 hash.
"""
-
import inspect
import os
import sys
@@ -34,10 +33,10 @@ import requests
def main():
- exe_url = "https://archive.torproject.org/tor-package-archive/torbrowser/10.0.10/torbrowser-install-10.0.10_en-US.exe"
- exe_filename = "torbrowser-install-10.0.10_en-US.exe"
+ exe_url = "https://dist.torproject.org/torbrowser/10.5.5/torbrowser-install-10.5.5_en-US.exe"
+ exe_filename = "torbrowser-install-10.5.5_en-US.exe"
expected_exe_sha256 = (
- "6cbd14a7232e4ae7f2718d9b7f377e1a7bb96506da21f1ac6f689a22fc5e53fe"
+ "5a0248f6be61e94467fd6f951eb85d653138dea5a8793de42c6edad1507f1ae7"
)
# Build paths
root_path = os.path.dirname(
@@ -75,7 +74,7 @@ def main():
"e",
"-y",
exe_path,
- "Browser\TorBrowser\Tor",
+ "Browser\\TorBrowser\\Tor",
"-o%s" % os.path.join(working_path, "Tor"),
]
).wait()
@@ -85,7 +84,7 @@ def main():
"e",
"-y",
exe_path,
- "Browser\TorBrowser\Data\Tor\geoip*",
+ "Browser\\TorBrowser\\Data\\Tor\\geoip*",
"-o%s" % os.path.join(working_path, "Data"),
]
).wait()
diff --git a/desktop/scripts/rebuild-cli.py b/desktop/scripts/rebuild-cli.py
index c13461bc..66582cf1 100755
--- a/desktop/scripts/rebuild-cli.py
+++ b/desktop/scripts/rebuild-cli.py
@@ -6,7 +6,6 @@ and installs it in the virtual environment.
import inspect
import os
-import sys
import glob
import subprocess
import shutil
diff --git a/desktop/src/onionshare/__init__.py b/desktop/src/onionshare/__init__.py
index 744f6979..9d8d8981 100644
--- a/desktop/src/onionshare/__init__.py
+++ b/desktop/src/onionshare/__init__.py
@@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
from __future__ import division
import os
import sys
-import platform
import argparse
import signal
import json
@@ -29,7 +28,11 @@ import psutil
import getpass
from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2.QtCore import Slot,Qt
+from PySide2.QtGui import QPalette, QColor
+
from onionshare_cli.common import Common
+from onionshare_cli.settings import Settings
from .gui_common import GuiCommon
from .widgets import Alert
@@ -48,7 +51,12 @@ class Application(QtWidgets.QApplication):
QtWidgets.QApplication.__init__(self, sys.argv)
# Check color mode on starting the app
- self.color_mode = self.get_color_mode()
+ self.color_mode = self.get_color_mode(common)
+
+ # Enable Dark Theme
+ if self.color_mode == "dark":
+ self.setDarkMode()
+
self.installEventFilter(self)
def eventFilter(self, obj, event):
@@ -66,23 +74,48 @@ class Application(QtWidgets.QApplication):
return False
return True
- def get_color_mode(self):
- return "dark" if self.is_dark_mode() else "light"
-
+ def setDarkMode(self):
+ self.setStyle("Fusion")
+ dark_palette = QPalette()
+ dark_palette.setColor(QPalette.Window, QColor(53, 53, 53))
+ dark_palette.setColor(QPalette.WindowText, Qt.white)
+ dark_palette.setColor(QPalette.Base, QColor(25, 25, 25))
+ dark_palette.setColor(QPalette.AlternateBase, QColor(53, 53, 53))
+ dark_palette.setColor(QPalette.ToolTipBase, Qt.white)
+ dark_palette.setColor(QPalette.ToolTipText, Qt.white)
+ dark_palette.setColor(QPalette.Text, Qt.white)
+ dark_palette.setColor(QPalette.Button, QColor(53, 53, 53))
+ dark_palette.setColor(QPalette.ButtonText, Qt.white)
+ dark_palette.setColor(QPalette.BrightText, Qt.red)
+ dark_palette.setColor(QPalette.Link, QColor(42, 130, 218))
+ dark_palette.setColor(QPalette.Highlight, QColor(42, 130, 218))
+ dark_palette.setColor(QPalette.HighlightedText, Qt.black)
+ self.setPalette(dark_palette)
+ self.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }")
+
+ def get_color_mode(self, common):
+ curr_settings = Settings(common)
+ curr_settings.load()
+ current_theme = curr_settings.get("theme")
+
+ if current_theme == 1:
+ return "light"
+ elif current_theme == 2:
+ return "dark"
+ else:
+ return "dark" if self.is_dark_mode() else "light"
def main():
"""
The main() function implements all of the logic that the GUI version of onionshare uses.
"""
common = Common()
+ common.display_banner()
# Required for macOS Big Sur: https://stackoverflow.com/a/64878899
if common.platform == "Darwin":
os.environ["QT_MAC_WANTS_LAYER"] = "1"
- # Display OnionShare banner
- print(f"OnionShare {common.version} | https://onionshare.org/")
-
# Start the Qt app
global qtapp
qtapp = Application(common)
diff --git a/desktop/src/onionshare/gui_common.py b/desktop/src/onionshare/gui_common.py
index cd576ea2..182d63f2 100644
--- a/desktop/src/onionshare/gui_common.py
+++ b/desktop/src/onionshare/gui_common.py
@@ -19,7 +19,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
-import inspect
import shutil
from pkg_resources import resource_filename
@@ -85,10 +84,25 @@ class GuiCommon:
header_color = "#4E064F" # purple in light
title_color = "#333333" # dark gray color in main window
stop_button_color = "#d0011b" # red button color for stopping server
+ new_tab_button_background = "#ffffff"
+ new_tab_button_border = "#efeff0"
+ new_tab_button_text_color = "#4e0d4e"
+ downloads_uploads_progress_bar_border_color = "#4E064F"
+ downloads_uploads_progress_bar_chunk_color = "#4E064F"
+ share_zip_progess_bar_border_color = "#4E064F"
+ share_zip_progess_bar_chunk_color = "#4E064F"
+ history_background_color = "#ffffff"
+ history_label_color = "#000000"
if color_mode == "dark":
header_color = "#F2F2F2"
title_color = "#F2F2F2"
stop_button_color = "#C32F2F"
+ new_tab_button_background = "#5F5F5F"
+ new_tab_button_border = "#878787"
+ new_tab_button_text_color = "#FFFFFF"
+ share_zip_progess_bar_border_color = "#F2F2F2"
+ history_background_color = "#191919"
+ history_label_color = "#ffffff"
return {
# OnionShareGui styles
@@ -188,9 +202,17 @@ class GuiCommon:
border: 0;
border-radius: 5px;
}""",
+ "downloads_uploads_not_empty": """
+ QWidget{
+ background-color: """
+ + history_background_color
+ +""";
+ }""",
"downloads_uploads_empty": """
QWidget {
- background-color: #ffffff;
+ background-color: """
+ + history_background_color
+ +""";
border: 1px solid #999999;
}
QWidget QLabel {
@@ -228,7 +250,7 @@ class GuiCommon:
"downloads_uploads_progress_bar": """
QProgressBar {
border: 1px solid """
- + header_color
+ + downloads_uploads_progress_bar_border_color
+ """;
background-color: #ffffff !important;
text-align: center;
@@ -237,10 +259,16 @@ class GuiCommon:
}
QProgressBar::chunk {
background-color: """
- + header_color
+ + downloads_uploads_progress_bar_chunk_color
+ """;
width: 10px;
}""",
+ "history_default_label" : """
+ QLabel {
+ color: """
+ + history_label_color
+ + """;
+ }""",
"history_individual_file_timestamp_label": """
QLabel {
color: #666666;
@@ -262,11 +290,17 @@ class GuiCommon:
""",
"new_tab_button_text": """
QLabel {
- border: 1px solid #efeff0;
+ border: 1px solid """
+ + new_tab_button_border
+ + """;
border-radius: 4px;
- background-color: #ffffff;
+ background-color: """
+ + new_tab_button_background
+ + """;
text-align: center;
- color: #4e0d4e;
+ color: """
+ + new_tab_button_text_color
+ + """;
}
""",
"new_tab_title_text": """
@@ -287,7 +321,7 @@ class GuiCommon:
"share_zip_progess_bar": """
QProgressBar {
border: 1px solid """
- + header_color
+ + share_zip_progess_bar_border_color
+ """;
background-color: #ffffff !important;
text-align: center;
@@ -296,7 +330,7 @@ class GuiCommon:
QProgressBar::chunk {
border: 0px;
background-color: """
- + header_color
+ + share_zip_progess_bar_chunk_color
+ """;
width: 10px;
}""",
@@ -354,6 +388,10 @@ class GuiCommon:
color: #666666;
font-size: 11px;
}""",
+ "receive_message_button": """
+ QPushButton {
+ padding: 5px 10px;
+ }""",
# Settings dialog
"settings_version": """
QLabel {
@@ -391,7 +429,7 @@ class GuiCommon:
elif self.common.platform == "Darwin":
base_path = self.get_resource_path("tor")
tor_path = os.path.join(base_path, "tor")
- obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy.exe")
+ obfs4proxy_file_path = os.path.join(base_path, "obfs4proxy")
tor_geo_ip_file_path = os.path.join(base_path, "geoip")
tor_geo_ipv6_file_path = os.path.join(base_path, "geoip6")
elif self.common.platform == "BSD":
diff --git a/desktop/src/onionshare/main_window.py b/desktop/src/onionshare/main_window.py
index 2f6e91d0..d87092b6 100644
--- a/desktop/src/onionshare/main_window.py
+++ b/desktop/src/onionshare/main_window.py
@@ -21,8 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import time
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.web import Web
-
from . import strings
from .tor_connection_dialog import TorConnectionDialog
from .settings_dialog import SettingsDialog
diff --git a/desktop/src/onionshare/resources/images/open_message.png b/desktop/src/onionshare/resources/images/open_message.png
new file mode 100644
index 00000000..6712ecf9
--- /dev/null
+++ b/desktop/src/onionshare/resources/images/open_message.png
Binary files differ
diff --git a/desktop/src/onionshare/resources/locale/bn.json b/desktop/src/onionshare/resources/locale/bn.json
index 98728896..519ed878 100644
--- a/desktop/src/onionshare/resources/locale/bn.json
+++ b/desktop/src/onionshare/resources/locale/bn.json
@@ -279,11 +279,20 @@
"gui_receive_flatpak_data_dir": "যেহেতু অনিওনশেয়ার ফ্ল্যাটপ্যাক দিয়ে ইন্সটল করেছো, তাই তোমাকে ~/OnionShare এ ফাইল সংরক্ষণ করতে হবে।",
"gui_rendezvous_cleanup": "তোমার ফাইলগুলি সফলভাবে স্থানান্তরিত হয়েছে তা নিশ্চিত হয়ে টর সার্কিট বন্ধের অপেক্ষা করা হচ্ছে।\n\nএটি কয়েক মিনিট সময় নিতে পারে।",
"gui_open_folder_error": "xdg-open দিয়ে ফোল্ডার খুলতে ব্যর্থ হয়েছে। ফাইলটি এখানে: {}",
- "gui_chat_url_description": "এই পেঁয়াজশেয়ার ঠিকানা দিয়ে <b>যে কেউ</b> <b>টর ব্রাউজার</b>: <img src='{}' /> ব্যবহার করে এই <b>চ্যাট রুমটিতে যোগ দিতে পারে</b>",
+ "gui_chat_url_description": "এই অনিওনশেয়ার ঠিকানা দিয়ে <b>যে কেউ</b> <b>টর ব্রাউজার</b>: <img src='{}' /> ব্যবহার করে এই <b>চ্যাট রুমটিতে যোগ দিতে পারে</b>",
"error_port_not_available": "অনিয়নশায়ার পোর্ট নেই",
"gui_rendezvous_cleanup_quit_early": "তাড়াতাড়ি বন্ধ করো",
"gui_main_page_chat_button": "চ্যাটিং শুরু করো",
"gui_main_page_website_button": "হোস্টিং শুরু করো",
"gui_main_page_receive_button": "গ্রহণ শুরু করো",
- "gui_color_mode_changed_notice": "নতুন রঙের মোড প্রয়োগ করার জন্য OnionShare পুনরারম্ভ করুন।"
+ "gui_color_mode_changed_notice": "নতুন রঙের মোড প্রয়োগ করার জন্য OnionShare পুনরারম্ভ করুন।",
+ "history_receive_read_message_button": "বার্তা পড়ুন",
+ "mode_settings_receive_webhook_url_checkbox": "বিজ্ঞপ্তি ওয়েবহুক ব্যবহার করুন",
+ "mode_settings_receive_disable_files_checkbox": "ফাইল আপলোড করা অক্ষম করুন",
+ "mode_settings_receive_disable_text_checkbox": "পাঠ্য জমা দেওয়া অক্ষম করুন",
+ "mode_settings_title_label": "কাস্টম শিরোনাম",
+ "gui_status_indicator_chat_started": "চ্যাট করছে",
+ "gui_status_indicator_chat_scheduled": "শিডিউল করা হয়েছে…",
+ "gui_status_indicator_chat_working": "শুরু…",
+ "gui_status_indicator_chat_stopped": "চ্যাট করতে প্রস্তুত"
}
diff --git a/desktop/src/onionshare/resources/locale/da.json b/desktop/src/onionshare/resources/locale/da.json
index 383b3d33..4bbdc94e 100644
--- a/desktop/src/onionshare/resources/locale/da.json
+++ b/desktop/src/onionshare/resources/locale/da.json
@@ -291,5 +291,15 @@
"gui_chat_url_description": "<b>Alle</b> med denne OnionShare-adresse kan <b>deltage i chatrummet</b> med <b>Tor Browser</b>: <img src='{}' />",
"error_port_not_available": "OnionShare-port ikke tilgængelig",
"gui_rendezvous_cleanup": "Venter på at Tor-kredsløb lukker for at være sikker på, at det lykkedes at overføre dine filer.\n\nDet kan tage noget tid.",
- "gui_rendezvous_cleanup_quit_early": "Afslut tidligt"
+ "gui_rendezvous_cleanup_quit_early": "Afslut tidligt",
+ "history_receive_read_message_button": "Læs meddelelse",
+ "mode_settings_receive_webhook_url_checkbox": "Brug underretningswebhook",
+ "mode_settings_receive_disable_files_checkbox": "Deaktivér upload af filer",
+ "mode_settings_receive_disable_text_checkbox": "Deaktivér indsendelse af tekst",
+ "mode_settings_title_label": "Tilpasset titel",
+ "gui_color_mode_changed_notice": "Genstart OnionShare for at anvende den nye farvetilstand.",
+ "gui_status_indicator_chat_started": "Chatter",
+ "gui_status_indicator_chat_scheduled": "Planlagt …",
+ "gui_status_indicator_chat_working": "Starter …",
+ "gui_status_indicator_chat_stopped": "Klar til at chatte"
}
diff --git a/desktop/src/onionshare/resources/locale/de.json b/desktop/src/onionshare/resources/locale/de.json
index 4f4a3c32..4f04dd5b 100644
--- a/desktop/src/onionshare/resources/locale/de.json
+++ b/desktop/src/onionshare/resources/locale/de.json
@@ -5,7 +5,7 @@
"not_a_file": "{0:s} ist keine gültige Datei.",
"other_page_loaded": "Daten geladen",
"closing_automatically": "Gestoppt, da die Übertragung erfolgreich beendet wurde",
- "large_filesize": "Achtung: Das Senden von großen Dateien kann sehr lange dauern",
+ "large_filesize": "Achtung: Das Senden von großen Dateien kann Stunden dauern",
"help_local_only": "Tor nicht verwenden (nur für Entwicklung)",
"help_stay_open": "Den Server weiterlaufen lassen, nachdem die Dateien verschickt wurden",
"help_verbose": "Schreibe Fehler von OnionShare nach stdout und Webfehler auf die Festplatte",
@@ -295,5 +295,14 @@
"error_port_not_available": "OnionShare-Port nicht verfügbar",
"gui_rendezvous_cleanup": "Warte darauf, dass alle Tor-Verbindungen beendet wurden, um den vollständigen Dateitransfer sicherzustellen.\n\nDies kann einige Minuten dauern.",
"gui_rendezvous_cleanup_quit_early": "Vorzeitig beenden",
- "gui_color_mode_changed_notice": "Starte OnionShare neu, damit der neue Farbmodus übernommen wird."
-}
+ "gui_color_mode_changed_notice": "OnionShare neustarten um den neuen Farbmodus zu aktivieren.",
+ "history_receive_read_message_button": "Nachricht gelesen",
+ "mode_settings_receive_webhook_url_checkbox": "Benutze Benachrichtigungs-WebHook",
+ "mode_settings_receive_disable_files_checkbox": "Datei-Übermittlung deaktivieren",
+ "mode_settings_receive_disable_text_checkbox": "Text-Übermittlung deaktivieren",
+ "mode_settings_title_label": "Benutzerdefinierter Titel",
+ "gui_status_indicator_chat_started": "Chatted",
+ "gui_status_indicator_chat_scheduled": "Geplant…",
+ "gui_status_indicator_chat_working": "Startet…",
+ "gui_status_indicator_chat_stopped": "Bereit zum Chatten"
+} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/el.json b/desktop/src/onionshare/resources/locale/el.json
index 20ae6323..173982a4 100644
--- a/desktop/src/onionshare/resources/locale/el.json
+++ b/desktop/src/onionshare/resources/locale/el.json
@@ -10,7 +10,7 @@
"not_a_readable_file": "Το {0:s} δεν είναι αναγνώσιμο αρχείο.",
"no_available_port": "Δεν βρέθηκε διαθέσιμη θύρα για να ξεκινήσει η υπηρεσία onion",
"other_page_loaded": "Η διεύθυνση φορτώθηκε",
- "close_on_autostop_timer": "Τερματίστηκε λόγω της αυτόματης διακοπής",
+ "close_on_autostop_timer": "Τερματίστηκε λόγω αυτόματης διακοπής",
"closing_automatically": "Τερματίστηκε λόγω ολοκλήρωσης της λήψης",
"timeout_download_still_running": "Αναμονή ολοκλήρωσης της λήψης",
"large_filesize": "Προειδοποίηση: Η αποστολή μεγάλου όγκου δεδομένων μπορεί να διαρκέσει ώρες",
@@ -39,8 +39,8 @@
"gui_share_stop_server": "Τερματισμός διαμοιρασμού",
"gui_share_stop_server_autostop_timer": "Διακοπή διαμοιρασμού ({})",
"gui_share_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}",
- "gui_receive_start_server": "Εκκίνηση κατάστασης λήψης",
- "gui_receive_stop_server": "Τερματισμός κατάστασης λήψης",
+ "gui_receive_start_server": "Εκκίνηση λειτουργίας λήψης",
+ "gui_receive_stop_server": "Τερματισμός λειτουργίας λήψης",
"gui_receive_stop_server_autostop_timer": "Διακοπή λειτουργίας λήψης (απομένουν {})",
"gui_receive_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματου τερματισμού τελειώνει σε {}",
"gui_copy_url": "Αντιγραφή διεύθυνσης",
@@ -49,9 +49,9 @@
"gui_no_downloads": "Καμία λήψη ως τώρα",
"gui_canceled": "Ακυρώθηκε",
"gui_copied_url_title": "Η διεύθυνση OnionShare αντιγράφτηκε",
- "gui_copied_url": "Η διεύθυνση OnionShare αντιγράφτηκε στον πίνακα",
+ "gui_copied_url": "Η διεύθυνση OnionShare αντιγράφτηκε στο πρόχειρο",
"gui_copied_hidservauth_title": "Το HidServAuth αντιγράφτηκε",
- "gui_copied_hidservauth": "Το HidServAuth αντιγράφτηκε στον πίνακα",
+ "gui_copied_hidservauth": "Το HidServAuth αντιγράφτηκε στο πρόχειρο",
"gui_please_wait": "Ξεκινάμε... Κάντε κλικ για ακύρωση.",
"gui_download_upload_progress_complete": "%p%, {0:s} πέρασαν.",
"gui_download_upload_progress_starting": "{0:s}, %p% (υπολογισμός)",
@@ -62,8 +62,8 @@
"gui_receive_quit_warning": "Αυτή τη στιγμή παραλαμβάνονται αρχείων. Είστε σίγουρος/η πώς θέλετε να κλείσετε το OnionShare;",
"gui_quit_warning_quit": "Έξοδος",
"gui_quit_warning_dont_quit": "Ακύρωση",
- "error_rate_limit": "Κάποιος/α έκανε πολλαπλές αποτυχημένες προσπάθειες να μαντέψει τον κωδικό σας. Γι' αυτό, το OnionShare σταμάτησε τον server. Ξεκινήστε πάλι το διαμοιρασμό και στείλτε στον/ην παραλήπτη/τρια μια νέα διεύθυνση για διαμοιρασμό.",
- "zip_progress_bar_format": "Συμπίεση: %p%",
+ "error_rate_limit": "Κάποιος/α προσπάθησε να μαντέψει τον κωδικό σας πολλές φορές. Για αυτό, το OnionShare τερματίστηκε αυτόματα. Πρέπει να ξεκινήσετε πάλι τον διαμοιρασμό και να στείλετε στον/ην παραλήπτη/τρια μια νέα διεύθυνση για να διαμοιραστούν αρχεία και μηνύματα μαζί σας.",
+ "zip_progress_bar_format": "Γίνεται συμπίεση: %p%",
"error_stealth_not_supported": "Για τη χρήση εξουσιοδότησης πελάτη, χρειάζεστε τουλάχιστον το Tor 0.2.9.1-alpha (ή τον Tor Browser 6.5) και το python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
"gui_settings_window_title": "Ρυθμίσεις",
@@ -71,7 +71,7 @@
"gui_settings_stealth_option": "Χρήση εξουσιοδότησης πελάτη",
"gui_settings_stealth_hidservauth_string": "Έχοντας αποθηκεύσει το ιδιωτικό σας κλειδί για επαναχρησιμοποίηση, μπορείτε πλέον να επιλέξετε την αντιγραφή του HidServAuth σας.",
"gui_settings_autoupdate_label": "Έλεγχος για νέα έκδοση",
- "gui_settings_autoupdate_option": "Ενημερώστε με όταν είναι διαθέσιμη μια νέα έκδοση",
+ "gui_settings_autoupdate_option": "Ενημερώστε με μόλις γίνει διαθέσιμη μια νέα έκδοση",
"gui_settings_autoupdate_timestamp": "Τελευταίος έλεγχος: {}",
"gui_settings_autoupdate_timestamp_never": "Ποτέ",
"gui_settings_autoupdate_check_button": "Έλεγχος για νέα έκδοση",
@@ -86,20 +86,20 @@
"gui_settings_connection_type_test_button": "Έλεγχος σύνδεσης με το Tor",
"gui_settings_control_port_label": "Πύλη ελέγχου",
"gui_settings_socket_file_label": "Αρχείο μετάβασης",
- "gui_settings_socks_label": "πύλη SOCKS",
+ "gui_settings_socks_label": "Πύλη SOCKS",
"gui_settings_authenticate_label": "Ρυθμίσεις επαλήθευσης Tor",
"gui_settings_authenticate_no_auth_option": "Χωρίς επαλήθευση ή επαλήθευση με cookie",
"gui_settings_authenticate_password_option": "Κωδικός",
"gui_settings_password_label": "Κωδικός",
- "gui_settings_tor_bridges": "Υποστήριξη Tor bridge",
- "gui_settings_tor_bridges_no_bridges_radio_option": "Να μη χρησιμοποιηθούν bridges",
+ "gui_settings_tor_bridges": "Υποστήριξη γεφυρών Tor",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Να μη χρησιμοποιηθούν γέφυρες",
"gui_settings_tor_bridges_obfs4_radio_option": "Να χρησιμοποιηθούν τα ενσωματωμένα obfs4 pluggable transports",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Να χρησιμοποιηθούν τα ενσωματωμένα obfs4 pluggable transports (απαιτείται το obfs4proxy)",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Να χρησιμοποιηθούν τα ενσωματωμένα obfs4 pluggable transports (απαιτείται το πρόγραμμα obfs4proxy)",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Να χρησιμοποιηθουν τα ενσωματωμένα meek_lite (Azure) pluggable transports",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Να χρησιμοποιηθούν τα ενσωματωμένα meek_lite (Azure) pluggable transports (απαιτείται το obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Να χρησιμοποιηθούν τα ενσωματωμένα meek_lite (Azure) pluggable transports (απαιτείται το πρόγραμμα obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Προσοχή: Τα meek_lite bridges επιβαρύνουν πολύ το Tor Project στη λειτουργία. <br><br> Χρησιμοποιήστε τα μόνο αν δεν μπορείτε να συνδεθείτε κατ' ευθείαν στο Tor μέσω obfs4 transports ή άλλων κανονικών bridges.",
- "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων bridges",
- "gui_settings_tor_bridges_custom_label": "Αποκτήστε bridges στο <a href=\"https://bridges.torproject.org/options?lang=el\"> https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_custom_radio_option": "Χρήση παραμετροποιημένων γεφυρών",
+ "gui_settings_tor_bridges_custom_label": "Αποκτήστε γέφυρες στο <a href=\"https://bridges.torproject.org/options?lang=el\"> https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Δεν λειτούργησε κάποιο από τα bridges που προσθέσατε.\nΞαναελέγξτε τα ή προσθέστε άλλα.",
"gui_settings_button_save": "Αποθήκευση",
"gui_settings_button_cancel": "Άκυρο",
@@ -107,30 +107,30 @@
"gui_settings_autostop_timer_checkbox": "Χρήση χρονομέτρου αυτόματης διακοπής",
"gui_settings_autostop_timer": "Διακοπή διαμοιρασμού σε:",
"settings_error_unknown": "Αποτυχία σύνδεσης στον ελεγκτή Tor, γιατί οι ρυθμίσεις σας δεν βγάζουν κανένα νόημα.",
- "settings_error_automatic": "Αδυναμία σύνδεσης στον ελεγκτή Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο;",
- "settings_error_socket_port": "Αδυναμία σύνδεσης στον ελεγκτή Tor στις {}:{}.",
- "settings_error_socket_file": "Αποτυχία σύνδεσης στον ελεγκτή Tor χρησιμοποιώντας το αρχείο socket {}.",
+ "settings_error_automatic": "Δεν ήταν δυνατή η σύνδεση στον ελεγκτή Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο;",
+ "settings_error_socket_port": "Δεν ήταν δυνατή η σύνδεση στον ελεγκτή Tor στις {}:{}.",
+ "settings_error_socket_file": "Δεν ήταν δυνατή η σύνδεση στον ελεγκτή Tor χρησιμοποιώντας το αρχείο socket {}.",
"settings_error_auth": "Εγινε σύνδεση με {}:{}, αλλα δεν μπορεί να γίνει πιστοποίηση. Ίσως δεν είναι ελεγκτής Tor;",
"settings_error_missing_password": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.",
- "settings_error_unreadable_cookie_file": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλα ο κωδικός πιθανόν να είναι λάθος, ή δεν επιτρέπεται στο χρήστη να διαβάζει αρχεία cookie.",
+ "settings_error_unreadable_cookie_file": "Έγινε σύνδεση με τον ελεγκτή Tor, αλλα ο κωδικός ενδέχεται να είναι λανθασμένος, ή δεν σας επιτρέπεται να διαβάζετε αρχεία cookie.",
"settings_error_bundled_tor_not_supported": "Η χρήση της έκδοσης Tor που περιέχεται στο OnionShare δεν είναι συμβατή με το περιβάλλον προγραμματιστή σε Windows ή macOS.",
- "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor αργεί αρκετά. Ισως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι του συστήματος δεν είναι σωστό;",
+ "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor καθυστερεί αρκετά. Ίσως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι του συστήματος δεν είναι ρυθμισμένο σωστά;",
"settings_error_bundled_tor_broken": "Το OnionShare δεν μπορεί να συνδεθεί με το Tor στο παρασκήνιο:\n{}",
- "settings_test_success": "Εγινε σύνδεση με τον ελεγκτή Tor.\n\nΕκδοση Tor: {}\nΥποστηρίζει εφήμερες υπηρεσίες onion: {}.\nΥποστηρίζει πιστοποίηση πελάτη: {}.\nΥποστηρίζει νέας γενιάς διευθύνσεις .onion: {}.",
- "error_tor_protocol_error": "Υπήρξε σφάλμα με το Tor: {}",
+ "settings_test_success": "Εγινε σύνδεση με τον ελεγκτή Tor.\n\nΕκδοση Tor: {}\nΥποστηρίζει εφήμερες υπηρεσίες onion: {}.\nΥποστηρίζει πιστοποίηση πελάτη: {}.\nΥποστηρίζει διευθύνσεις .onion νέας γενιάς: {}.",
+ "error_tor_protocol_error": "Προέκυψε σφάλμα με το Tor: {}",
"error_tor_protocol_error_unknown": "Υπήρξε άγνωστο σφάλμα με το Tor",
"error_invalid_private_key": "Αυτο το ιδιωτικό κλειδί δεν υποστηρίζεται",
"connecting_to_tor": "Γίνεται σύνδεση στο δίκτυο Tor",
- "update_available": "Βγήκε ενα νέο OnionShare. <a href='{}'>Κάντε κλικ εδώ</a> για να το λάβετε.<br><br>Χρησιμοποιείτε {} και το πιό πρόσφατο είναι το {}.",
- "update_error_check_error": "Δεν μπόρεσε να γίνει έλεγχος για νέα έκδοση: ίσως δεν είστε συνδεδεμένοι στο Tor ή ο ιστότοπος OnionShare είναι εκτός λειτουργίας;",
- "update_error_invalid_latest_version": "Δεν μπορεί να γίνει έλεγχος για νέα έκδοση: η ιστοσελίδα OnionShare αναφέρει ότι η τελευταία έκδοση είναι η μη αναγνωρίσιμη \"{}\"…",
- "update_not_available": "Έχετε την πιό πρόσφατη έκδοση του OnionShare.",
- "gui_tor_connection_ask": "Άνοιγμα των ρυθμίσεων για να επιλύσετε την σύνδεση με το Tor;",
+ "update_available": "Υπάρχει διαθέσιμη ενημέρωση. <a href='{}'>Κάντε κλικ εδώ</a> για να την αποκτήσετε.<br><br>Χρησιμοποιείτε την έκδοση {}, ενώ η πιο πρόσφατη είναι η {}.",
+ "update_error_check_error": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: ίσως δεν είστε συνδεδεμένος στο Tor ή ο ιστότοπος OnionShare είναι εκτός λειτουργίας;",
+ "update_error_invalid_latest_version": "Δεν ήταν δυνατός ο έλεγχος για ενημερώσεις: η ιστοσελίδα OnionShare αναφέρει ότι η πιο πρόσφατη έκδοση είναι η μη αναγνωρίσιμη \"{}\"…",
+ "update_not_available": "Χρησιμοποιείτε την πιο πρόσφατη έκδοση του OnionShare.",
+ "gui_tor_connection_ask": "Θα θέλατε να ανοίξετε τις ρυθμίσεις για να φτιάξετε την σύνδεσή σας με το Tor;",
"gui_tor_connection_ask_open_settings": "Ναι",
"gui_tor_connection_ask_quit": "Έξοδος",
- "gui_tor_connection_error_settings": "Προσπαθήστε να αλλάξετε τον τρόπο σύνδεσης του OnionShare με το δίκτυο Tor από τις ρυθμίσεις.",
- "gui_tor_connection_canceled": "Δεν μπόρεσε να γίνει σύνδεση στο Tor.\n\nΕλέγξτε ότι είστε συνδεδεμένος/η στο Διαδίκτυο, επανεκκινήστε το OnionShare και ρυθμίστε την σύνδεση με το Tor.",
- "gui_tor_connection_lost": "Έγινε αποσύνδεση από το Tor.",
+ "gui_tor_connection_error_settings": "Ίσως να ήταν καλή ιδέα να αλλάξετε τον τρόπο σύνδεσης του OnionShare με το δίκτυο Tor από τις ρυθμίσεις.",
+ "gui_tor_connection_canceled": "Δεν ήταν δυνατή η σύνδεση στο δίκτυο του Tor.\n\nΕλέγξτε ότι είστε συνδεδεμένος/η στο Διαδίκτυο, επανεκκινήστε το OnionShare και ρυθμίστε την σύνδεση με το Tor.",
+ "gui_tor_connection_lost": "Έγινε αποσύνδεση από το δίκτυο του Tor.",
"gui_server_started_after_autostop_timer": "Το χρονόμετρο αυτόματης διακοπής τελείωσε πριν την εκκίνηση του server. Παρακαλώ κάντε ένα νέο διαμοιρασμό.",
"gui_server_autostop_timer_expired": "Το χρονόμετρο αυτόματης διακοπής έχει ήδη τελειώσει. Παρακαλώ ρυθμίστε το για να ξεκινήσετε το διαμοιρασμό.",
"share_via_onionshare": "Μοιραστείτε μέσω OnionShare",
@@ -138,15 +138,15 @@
"gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης",
"gui_share_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί να <b>κατεβάσει</b> τα αρχεία σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare, μπορεί να <b>ανεβάσει</b> αρχεία στον υπολογιστή σας χρησιμοποιώντας το <b>Tor Browser</b>: <img src='{}' />",
- "gui_url_label_persistent": "Αυτός ο διαμοιρασμός δεν θα λήξει αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
- "gui_url_label_stay_open": "Αυτός ο διαμοιρασμός δε λήγει αυτόματα.",
+ "gui_url_label_persistent": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.<br><br>Όσοι μοιράζονται αρχεία μαζί σας θα μπορέσουν να ξαναχρησιμοποιήσουν αυτή τη διεύθυνση αργότερα. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "gui_url_label_stay_open": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.",
"gui_url_label_onetime": "Αυτός ο διαμοιρασμός θα σταματήσει μετά την πρώτη λήψη.",
- "gui_url_label_onetime_and_persistent": "Αυτός ο διαμοιρασμός δεν θα λήξει αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
- "gui_status_indicator_share_stopped": "Ετοιμο για διαμοιρασμό",
- "gui_status_indicator_share_working": "Ξεκινάει…",
- "gui_status_indicator_share_started": "Διαμοιράζει",
+ "gui_url_label_onetime_and_persistent": "Αυτή η σελίδα διαμοιρασμού δεν θα πάψει να λειτουργεί αυτόματα.<br><br>Οποιοσδήποτε επακόλουθος διαμοιρασμός θα επαναχρησιμοποιήσει αυτή τη διεύθυνση. (Για να χρησιμοποιήσετε διευθύνσεις μιας χρήσης, απενεργοποιήστε τη λειτουργία \"Χρήση μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "gui_status_indicator_share_stopped": "Έτοιμο για διαμοιρασμό",
+ "gui_status_indicator_share_working": "Εκκίνηση…",
+ "gui_status_indicator_share_started": "Γίνεται αποστολή",
"gui_status_indicator_receive_stopped": "Έτοιμο για λήψη",
- "gui_status_indicator_receive_working": "Ξεκινάει…",
+ "gui_status_indicator_receive_working": "Γίνεται εκκίνηση…",
"gui_status_indicator_receive_started": "Γίνεται λήψη",
"gui_file_info": "{} αρχεία, {}",
"gui_file_info_single": "{} αρχείο, {}",
@@ -186,7 +186,7 @@
"gui_add_files": "Προσθήκη αρχείων",
"gui_add_folder": "Προσθήκη φακέλου",
"gui_connect_to_tor_for_onion_settings": "Συνδεθείτε στο Tor για να δείτε τις ρυθμίσεις της υπηρεσίας onion",
- "error_cannot_create_data_dir": "Δεν μπόρεσε να δημιουργηθεί φάκελος δεδομένων OnionShare: {}",
+ "error_cannot_create_data_dir": "Δεν ήταν δυνατή η δημιουργία φακέλου δεδομένων OnionShare: {}",
"receive_mode_data_dir": "Τα αρχεία που στάλθηκαν σε εσας εμφανίζοντε στον φάκελο: {}",
"gui_settings_data_dir_label": "Αποθήκευση αρχείων σε",
"gui_settings_data_dir_browse_button": "Περιήγηση",
@@ -207,7 +207,7 @@
"gui_all_modes_progress_complete": "%p%, πέρασαν {0:s}.",
"gui_all_modes_progress_starting": "{0:s}, %p% (γίνεται υπολογισμός)",
"gui_all_modes_progress_eta": "{0:s}, Εκτιμώμενος χρόνος: {1:s}, %p%",
- "gui_share_mode_no_files": "Δεν στάλθηκαν ακόμα αρχεία",
+ "gui_share_mode_no_files": "Δεν έχουν αποσταλεί ακόμα αρχεία",
"gui_share_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της αποστολής",
"gui_receive_mode_no_files": "Δεν έχει γίνει λήψη αρχείων ακόμα",
"gui_receive_mode_autostop_timer_waiting": "Αναμένεται η ολοκλήρωση της λήψης",
@@ -216,27 +216,27 @@
"gui_all_modes_transfer_canceled": "Ακυρώθηκε {}",
"gui_stop_server_autostop_timer_tooltip": "Το χρονόμετρο αυτόματης διακοπής λήγει σε {}",
"gui_start_server_autostart_timer_tooltip": "Το χρονόμετρο αυτόματης εκκίνησης λήγει σε {}",
- "gui_waiting_to_start": "Προγραμματισμένο να ξεκινήσει σε {}. Πατήστε για ακύρωση.",
+ "gui_waiting_to_start": "Προγραμματισμένο να ξεκινήσει σε {}. Κάντε κλικ για ακύρωση.",
"gui_settings_autostart_timer_checkbox": "Χρήση χρονομέτρου αυτόματης έναρξης",
"gui_settings_autostart_timer": "Εκκίνηση διαμοιρασμού σε:",
"gui_server_autostart_timer_expired": "Η προγραμματισμένη ώρα έχει ήδη παρέλθει. Παρακαλώ ρυθμίστε τη για να ξεκινήσετε το διαμοιρασμό.",
"gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Η ώρα αυτόματης διακοπής δεν μπορεί να είναι ίδια ή νωρίτερα από την ώρα έναρξης. Παρακαλούμε ρυθμίστε τη για έναρξη του διαμοιρασμού.",
- "gui_status_indicator_share_scheduled": "Προγραμματισμένο…",
+ "gui_status_indicator_share_scheduled": "Δρομολόγηση…",
"gui_status_indicator_receive_scheduled": "Προγραμματισμένο…",
"days_first_letter": "ημ",
"hours_first_letter": "ώ",
"minutes_first_letter": "λ",
"seconds_first_letter": "δ",
- "gui_website_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί <b>να επισκεφτεί</b> την ιστοσελία χρησιμοποιώντας τον <b>Tor Browser</b>: <img src='{}' />",
+ "gui_website_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση OnionShare μπορεί <b>να επισκεφτεί</b> την ιστοσελίδα χρησιμοποιώντας τον <b>Tor Browser</b>: <img src='{}' />",
"gui_mode_website_button": "Δημοσίευση ιστοσελίδας",
- "gui_website_mode_no_files": "Η ιστοσελίδα δεν έχει μοιραστεί ακόμα",
- "incorrect_password": "Λάθος κωδικός πρόσβασης",
+ "gui_website_mode_no_files": "Δεν έχει γίνει διαμοιρασμός ιστοσελίδας ακόμα",
+ "incorrect_password": "Λάθος κωδικός",
"gui_settings_individual_downloads_label": "Απεπιλέξτε για να επιτρέψετε τη λήψη μεμονωμένων αρχείων",
"history_requests_tooltip": "{} αιτήματα δικτύου",
"gui_settings_csp_header_disabled_option": "Απενεργοποίηση της κεφαλίδας Content Security Policy",
"gui_settings_website_label": "Ρυθμίσεις ιστοσελίδας",
"gui_open_folder_error": "Το άνοιγμα του φακέλου με xdg-open απέτυχε. Το αρχείο βρίσκετε : {}",
- "gui_receive_flatpak_data_dir": "Επειδή εγκαταστήσατε το OnionShare με χρήση του Flatpak, πρέπει να αποθηκεύσετε τα αρχεία σε φάκελο ~/OnionShare.",
+ "gui_receive_flatpak_data_dir": "Επειδή έχετε εγκαταστήσει το OnionShare μέσω Flatpak, θα πρέπει να αποθηκεύσετε τα αρχεία μέσα σε έναν φάκελο στο ~/OnionShare.",
"gui_chat_stop_server": "Τερματισμός διακομιστή συνομιλίας",
"gui_chat_start_server": "Έναρξη διακομιστή συνομιλίας",
"mode_settings_website_disable_csp_checkbox": "Μην στέλνετε κεφαλίδα με περιεχόμενο από την πολιτικής ασφάλειας σας (επιτρέπει στην ιστοσελίδα σας να χρησιμοποιεί πόρους τρίτων)",
@@ -248,19 +248,19 @@
"mode_settings_autostop_timer_checkbox": "Προγραμματισμένος τερματισμός",
"mode_settings_autostart_timer_checkbox": "Προγραμματισμένη εκκίνηση",
"mode_settings_public_checkbox": "Χωρίς χρήση κωδικού πρόσβασης",
- "mode_settings_persistent_checkbox": "Αποθήκευση της καρτέλας και αυτόματο άνοιγμά της με την έναρξη του OnionShare.",
+ "mode_settings_persistent_checkbox": "Αποθήκευση της καρτέλας και αυτόματο άνοιγμά της με την έναρξη του OnionShare",
"mode_settings_advanced_toggle_hide": "Απόκρυψη προχωρημένων ρυθμίσεων",
"mode_settings_advanced_toggle_show": "Εμφάνιση προχωρημένων ρυθμίσεων",
"gui_quit_warning_cancel": "Άκυρο",
- "gui_quit_warning_description": "Είναι ενεργή η κοινή χρήση σε ορισμένες καρτέλες. Εάν κάνετε έξοδο, όλες οι καρτέλες σας θα κλείσουν. Είστε σίγουροι;",
- "gui_quit_warning_title": "Είστε σίγουροι;",
+ "gui_quit_warning_description": "Είναι ενεργή η κοινή χρήση σε ορισμένες καρτέλες. Εάν κάνετε έξοδο, όλες οι καρτέλες σας θα κλείσουν. Είστε σίγουρος/η;",
+ "gui_quit_warning_title": "Είστε σίγουρος/η;",
"gui_close_tab_warning_cancel": "Άκυρο",
"gui_close_tab_warning_close": "Κλείσιμο",
- "gui_close_tab_warning_website_description": "Φιλοξενείτε ενεργά έναν ιστότοπο. Είστε βέβαιοι ότι θέλετε να κλείσετε την καρτέλα;",
- "gui_close_tab_warning_receive_description": "Η λήψη αρχείων δεν ολοκληρώθηκε. Είστε βέβαιοι ότι θέλετε να κλείσετε την καρτέλα;",
- "gui_close_tab_warning_share_description": "Η αποστολή αρχείων δεν ολοκληρώθηκε. Είστε βέβαιοι ότι θέλετε να κλείσετε την καρτέλα;",
- "gui_close_tab_warning_persistent_description": "Η καρτέλα δεν είναι μόνιμη. Εάν την κλείσετε, θα χαθεί η διεύθυνση onion που χρησιμοποιεί. Είστε βέβαιοι ότι θέλετε να την κλείσετε;",
- "gui_close_tab_warning_title": "Είστε σίγουροι;",
+ "gui_close_tab_warning_website_description": "Φιλοξενείτε έναν ιστότοπο. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;",
+ "gui_close_tab_warning_receive_description": "Η λήψη αρχείων δεν έχει ολοκληρωθεί. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;",
+ "gui_close_tab_warning_share_description": "Η αποστολή αρχείων δεν έχει ολοκληρωθεί ακόμα. Είστε βέβαιος/η ότι θέλετε να κλείσετε την καρτέλα;",
+ "gui_close_tab_warning_persistent_description": "Η καρτέλα δεν είναι μόνιμη. Εάν την κλείσετε, θα χαθεί η διεύθυνση onion που χρησιμοποιείτε. Είστε βέβαιοι ότι θέλετε να την κλείσετε;",
+ "gui_close_tab_warning_title": "Είστε σίγουρος/η;",
"gui_tab_name_chat": "Συνομιλία",
"gui_tab_name_website": "Ιστότοπος",
"gui_tab_name_receive": "Λήψη",
@@ -270,9 +270,9 @@
"gui_main_page_receive_button": "Έναρξη λήψης",
"gui_main_page_share_button": "Έναρξη διαμοιρασμού",
"gui_new_tab_chat_button": "Συνομιλήστε ανώνυμα",
- "gui_new_tab_website_button": "Φιλοξενήστε έναν ιστότοπο",
+ "gui_new_tab_website_button": "Φιλοξενία ιστότοπου",
"gui_new_tab_receive_button": "Λήψη αρχείων",
- "gui_new_tab_share_button": "Διαμοιράστε αρχεία",
+ "gui_new_tab_share_button": "Διαμοιρασμός αρχείων",
"gui_new_tab_tooltip": "Άνοιγμα νέας καρτέλας",
"gui_new_tab": "Νέα καρτέλα",
"gui_qr_code_dialog_title": "Κώδικας QR OnionShare",
@@ -282,5 +282,15 @@
"error_port_not_available": "Η θύρα OnionShare δεν είναι διαθέσιμη",
"gui_rendezvous_cleanup_quit_early": "Πρόωρη έξοδος",
"gui_rendezvous_cleanup": "Αναμονή για τερματισμό των κυκλωμάτων του Tor για να βεβαιωθείτε ότι τα αρχεία σας έχουν μεταφερθεί με επιτυχία.\n\nΑυτό μπορεί να διαρκέσει λίγα λεπτά.",
- "gui_chat_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση του OnionShare μπορεί <b>να συμμετέχει στο chat</b> με χρήση του <b>Tor Browser</b>: <img src='{}' />"
-}
+ "gui_chat_url_description": "<b>Οποιοσδήποτε</b> με αυτή τη διεύθυνση του OnionShare μπορεί <b>να συμμετέχει στο δωμάτιο συνομιλίας</b> με χρήση του <b>Tor Browser</b>: <img src='{}' />",
+ "gui_color_mode_changed_notice": "Επανεκκινήστε το OnionShare για εφαρμοστεί το νέο χρώμα.",
+ "history_receive_read_message_button": "Ανάγνωση μηνύματος",
+ "mode_settings_receive_webhook_url_checkbox": "Χρήση ειδοποίησης webhook",
+ "mode_settings_receive_disable_files_checkbox": "Απενεργοποίηση της μεταφόρτωσης αρχείων",
+ "mode_settings_receive_disable_text_checkbox": "Απενεργοποίηση υποβολής κειμένου",
+ "mode_settings_title_label": "Προσαρμοσμένος τίτλος",
+ "gui_status_indicator_chat_started": "Σε συνομιλία",
+ "gui_status_indicator_chat_scheduled": "Δρομολόγηση…",
+ "gui_status_indicator_chat_working": "Εκκίνηση…",
+ "gui_status_indicator_chat_stopped": "Έτοιμο για συνομιλία"
+} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json
index f7b8f7bb..3a5c2ecd 100644
--- a/desktop/src/onionshare/resources/locale/en.json
+++ b/desktop/src/onionshare/resources/locale/en.json
@@ -33,6 +33,7 @@
"gui_show_url_qr_code": "Show QR Code",
"gui_qr_code_dialog_title": "OnionShare QR Code",
"gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.",
+ "gui_please_wait_no_button": "Starting…",
"gui_please_wait": "Starting… Click to cancel.",
"error_rate_limit": "Someone has made too many wrong attempts to guess your password, so OnionShare has stopped the server. Start sharing again and send the recipient a new address to share.",
"zip_progress_bar_format": "Compressing: %p%",
@@ -101,6 +102,10 @@
"gui_status_indicator_receive_working": "Starting…",
"gui_status_indicator_receive_scheduled": "Scheduled…",
"gui_status_indicator_receive_started": "Receiving",
+ "gui_status_indicator_chat_stopped": "Ready to chat",
+ "gui_status_indicator_chat_working": "Starting…",
+ "gui_status_indicator_chat_scheduled": "Scheduled…",
+ "gui_status_indicator_chat_started": "Chatting",
"gui_file_info": "{} files, {}",
"gui_file_info_single": "{} file, {}",
"history_in_progress_tooltip": "{} in progress",
@@ -110,6 +115,10 @@
"gui_receive_mode_warning": "Receive mode lets people upload files to your computer.<br><br><b>Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.</b>",
"gui_open_folder_error": "Failed to open folder with xdg-open. The file is here: {}",
"gui_settings_language_label": "Preferred language",
+ "gui_settings_theme_label": "Theme",
+ "gui_settings_theme_auto": "Auto",
+ "gui_settings_theme_light": "Light",
+ "gui_settings_theme_dark": "Dark",
"gui_settings_language_changed_notice": "Restart OnionShare for the new language to be applied.",
"gui_color_mode_changed_notice": "Restart OnionShare for the new color mode to be applied.",
"systray_menu_exit": "Quit",
@@ -165,6 +174,7 @@
"gui_quit_warning_cancel": "Cancel",
"mode_settings_advanced_toggle_show": "Show advanced settings",
"mode_settings_advanced_toggle_hide": "Hide advanced settings",
+ "mode_settings_title_label": "Custom title",
"mode_settings_persistent_checkbox": "Save this tab, and automatically open it when I open OnionShare",
"mode_settings_public_checkbox": "Don't use a password",
"mode_settings_autostart_timer_checkbox": "Start onion service at scheduled time",
@@ -174,6 +184,9 @@
"mode_settings_share_autostop_sharing_checkbox": "Stop sharing after files have been sent (uncheck to allow downloading individual files)",
"mode_settings_receive_data_dir_label": "Save files to",
"mode_settings_receive_data_dir_browse_button": "Browse",
+ "mode_settings_receive_disable_text_checkbox": "Disable submitting text",
+ "mode_settings_receive_disable_files_checkbox": "Disable uploading files",
+ "mode_settings_receive_webhook_url_checkbox": "Use notification webhook",
"mode_settings_website_disable_csp_checkbox": "Don't send Content Security Policy header (allows your website to use third-party resources)",
"gui_all_modes_transfer_finished_range": "Transferred {} - {}",
"gui_all_modes_transfer_finished": "Transferred {}",
@@ -191,5 +204,7 @@
"settings_error_bundled_tor_broken": "OnionShare could not connect to Tor:\n{}",
"gui_rendezvous_cleanup": "Waiting for Tor circuits to close to be sure your files have successfully transferred.\n\nThis might take a few minutes.",
"gui_rendezvous_cleanup_quit_early": "Quit Early",
- "error_port_not_available": "OnionShare port not available"
+ "error_port_not_available": "OnionShare port not available",
+ "history_receive_read_message_button": "Read Message",
+ "error_tor_protocol_error": "There was an error with Tor: {}"
} \ No newline at end of file
diff --git a/desktop/src/onionshare/resources/locale/es.json b/desktop/src/onionshare/resources/locale/es.json
index 59f07406..bc30af46 100644
--- a/desktop/src/onionshare/resources/locale/es.json
+++ b/desktop/src/onionshare/resources/locale/es.json
@@ -296,9 +296,18 @@
"gui_main_page_website_button": "Empezar a alojar",
"gui_main_page_receive_button": "Empezar a recibir",
"gui_main_page_share_button": "Empezar a compartir",
- "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>puede unirse a este cuarto de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
+ "gui_chat_url_description": "<b>Cualquiera</b> con esta dirección de OnionShare puede <b>unirse a esta sala de chat</b> usando el <b>Navegador Tor</b>: <img src='{}' />",
"error_port_not_available": "Puerto OnionShare no disponible",
"gui_rendezvous_cleanup_quit_early": "Salir Antes",
"gui_rendezvous_cleanup": "Esperando a que los circuitos Tor se cierren para asegurar que tus archivos se hayan transferido exitosamente.\n\nEsto puede llevar unos pocos minutos.",
- "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color."
+ "gui_color_mode_changed_notice": "Reiniciar OnionShare para que sea aplicado el nuevo modo de color.",
+ "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificaciones",
+ "history_receive_read_message_button": "Leer mensaje",
+ "mode_settings_receive_disable_files_checkbox": "Deshabilitar la subida de archivos",
+ "mode_settings_receive_disable_text_checkbox": "Deshabilitar el envío de texto",
+ "mode_settings_title_label": "Título personalizado",
+ "gui_status_indicator_chat_started": "Chateando",
+ "gui_status_indicator_chat_scheduled": "Programado…",
+ "gui_status_indicator_chat_working": "Iniciando…",
+ "gui_status_indicator_chat_stopped": "Listo para chatear"
}
diff --git a/desktop/src/onionshare/resources/locale/fr.json b/desktop/src/onionshare/resources/locale/fr.json
index b9b5cdcb..8c4bf20a 100644
--- a/desktop/src/onionshare/resources/locale/fr.json
+++ b/desktop/src/onionshare/resources/locale/fr.json
@@ -93,9 +93,9 @@
"settings_error_socket_file": "Impossible de se connecter au contrôleur Tor en utilisant le fichier d’interface de connexion {}.",
"settings_error_auth": "Connecté à {}:{}, mais il est impossible de s’authentifier. Est-ce bien un contrôleur Tor ?",
"settings_error_missing_password": "Vous êtes connecté au contrôleur Tor, mais il exige un mot de passe d’authentification.",
- "settings_error_unreadable_cookie_file": "Connecté au contrôleur Tor, mais le mot de passe est peut-être erroné ou votre utilisateur n’est pas autorisé à lire le fichier témoin.",
+ "settings_error_unreadable_cookie_file": "Vous êtes connecté au contrôleur Tor, mais le mot de passe est peut-être erroné ou votre utilisateur n’est pas autorisé à lire le fichier témoin.",
"settings_error_bundled_tor_not_supported": "Utiliser la version de Tor intégrée à OnionShare ne fonctionne pas en mode développeur sous Windows ou macOS.",
- "settings_error_bundled_tor_timeout": "La connexion à Tor prend trop de temps. Vous n’êtes peut-être pas connecté à Internet ou votre horloge système est mal réglée.",
+ "settings_error_bundled_tor_timeout": "La connexion à Tor prend trop de temps. Vous n’êtes peut-être pas connecté à Internet ou votre horloge système est-elle mal réglée ?",
"settings_error_bundled_tor_broken": "OnionShare n’a pas réussi à se connecter à Tor :\n{}",
"error_tor_protocol_error": "Une erreur est survenue avec Tor : {}",
"error_tor_protocol_error_unknown": "Une erreur inconnue est survenue avec Tor",
@@ -295,5 +295,14 @@
"error_port_not_available": "Le port OnionShare n’est pas accessible",
"gui_rendezvous_cleanup_quit_early": "Fermer avant",
"gui_rendezvous_cleanup": "En attente de la fermeture des circuits Tor pour être certain que vos fichiers ont été transférés avec succès.\n\nCela pourrait prendre quelques minutes.",
- "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué."
+ "gui_color_mode_changed_notice": "Redémarrez OnionShare pour que le nouveau mode chromatique soit appliqué.",
+ "history_receive_read_message_button": "Lire le message",
+ "mode_settings_receive_webhook_url_checkbox": "Utiliser un point d’ancrage Web de notification",
+ "mode_settings_receive_disable_files_checkbox": "Désactiver le téléversement de fichiers",
+ "mode_settings_receive_disable_text_checkbox": "Désactiver l’envoi de texte",
+ "mode_settings_title_label": "Titre personnalisé",
+ "gui_status_indicator_chat_started": "En conversation",
+ "gui_status_indicator_chat_scheduled": "Planifié…",
+ "gui_status_indicator_chat_working": "Démarrage…",
+ "gui_status_indicator_chat_stopped": "Prêt à dialoguer"
}
diff --git a/desktop/src/onionshare/resources/locale/gl.json b/desktop/src/onionshare/resources/locale/gl.json
index 11848ca3..67b095cc 100644
--- a/desktop/src/onionshare/resources/locale/gl.json
+++ b/desktop/src/onionshare/resources/locale/gl.json
@@ -191,5 +191,15 @@
"error_port_not_available": "Non está dispoñible o porto OnionShare",
"gui_rendezvous_cleanup_quit_early": "Saír axiña",
"gui_rendezvous_cleanup": "Agardando a que se pechen tódolos circuitos de Tor para ter certeza de que os ficheiros foron transferidos.\n\nEsto podería tardar un pouco.",
- "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor."
+ "gui_color_mode_changed_notice": "Reinicia OnionShare para aplicar o novo modo de cor.",
+ "error_tor_protocol_error": "Hai un erro con Tor: {}",
+ "history_receive_read_message_button": "Ler mensaxe",
+ "mode_settings_receive_disable_files_checkbox": "Desactivar a subida de ficheiros",
+ "mode_settings_receive_disable_text_checkbox": "Desactivar o envío de texto",
+ "mode_settings_title_label": "Título personalizado",
+ "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificación",
+ "gui_status_indicator_chat_started": "Conversando",
+ "gui_status_indicator_chat_scheduled": "Programado…",
+ "gui_status_indicator_chat_working": "Comezando…",
+ "gui_status_indicator_chat_stopped": "Preparado para conversar"
}
diff --git a/desktop/src/onionshare/resources/locale/hi.json b/desktop/src/onionshare/resources/locale/hi.json
index 9cfc310d..8efb9301 100644
--- a/desktop/src/onionshare/resources/locale/hi.json
+++ b/desktop/src/onionshare/resources/locale/hi.json
@@ -21,7 +21,7 @@
"help_verbose": "",
"help_filename": "",
"help_config": "",
- "gui_drag_and_drop": "साझा शुरू करने के लिए\nफाइलों एवं फोल्डरों को ड्रैग और ड्रॉप करें",
+ "gui_drag_and_drop": "साझा शुरू करने के लिए फाइलों एवं फोल्डरों को ड्रैग और ड्रॉप करें",
"gui_add": "जोड़ें",
"gui_add_files": "फाइल जोड़ें",
"gui_add_folder": "फोल्डर जोड़ें",
@@ -67,24 +67,24 @@
"gui_settings_sharing_label": "साझा सेटिंग्स",
"gui_settings_close_after_first_download_option": "इस फाइल को भेजने के बाद साझा बंद कर दें",
"gui_settings_connection_type_label": "OnionShare को Tor से कैसे जुड़ना चाहिए?",
- "gui_settings_connection_type_bundled_option": "",
- "gui_settings_connection_type_automatic_option": "",
- "gui_settings_connection_type_control_port_option": "",
- "gui_settings_connection_type_socket_file_option": "",
+ "gui_settings_connection_type_bundled_option": "OnionShare में निर्मित Tor संस्करण का उपयोग करें",
+ "gui_settings_connection_type_automatic_option": "Tor Browser के साथ ऑटो-कॉन्फ़िगरेशन का प्रयास करें",
+ "gui_settings_connection_type_control_port_option": "कंट्रोल पोर्ट का उपयोग करके कनेक्ट करें",
+ "gui_settings_connection_type_socket_file_option": "सॉकेट फ़ाइल का उपयोग करके कनेक्ट करें",
"gui_settings_connection_type_test_button": "",
- "gui_settings_control_port_label": "",
- "gui_settings_socket_file_label": "",
- "gui_settings_socks_label": "",
- "gui_settings_authenticate_label": "",
- "gui_settings_authenticate_no_auth_option": "",
+ "gui_settings_control_port_label": "कण्ट्रोल पोर्ट",
+ "gui_settings_socket_file_label": "सॉकेट फ़ाइल",
+ "gui_settings_socks_label": "SOCKS पोर्ट",
+ "gui_settings_authenticate_label": "Tor प्रमाणीकरण सेटिंग्स",
+ "gui_settings_authenticate_no_auth_option": "कोई प्रमाणीकरण या कुकी प्रमाणीकरण नहीं",
"gui_settings_authenticate_password_option": "",
"gui_settings_password_label": "",
- "gui_settings_tor_bridges": "",
- "gui_settings_tor_bridges_no_bridges_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
+ "gui_settings_tor_bridges": "Tor ब्रिज सपोर्ट",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "ब्रिड्जेस का प्रयोग न करें",
+ "gui_settings_tor_bridges_obfs4_radio_option": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "पहले से निर्मित obfs4 प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "पहले से निर्मित meek_lite (Azure) प्लगेबल ट्रांसपोर्टस का उपयोग करें (obfs4proxy अनिवार्य है)",
"gui_settings_meek_lite_expensive_warning": "",
"gui_settings_tor_bridges_custom_radio_option": "",
"gui_settings_tor_bridges_custom_label": "",
@@ -186,5 +186,12 @@
"gui_waiting_to_start": "{} में शुरू होने के लिए शेडयूल है। रद्द करने के लिए क्लिक करें।",
"incorrect_password": "पासवर्ड गलत है",
"gui_settings_individual_downloads_label": "विशिष्ट फाइलों के डाउनलोड को मंजूरी देने के लिए अचिन्हित करें",
- "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें"
+ "gui_settings_csp_header_disabled_option": "सामग्री सुरक्षा नियम हेडर को अक्षम करें",
+ "gui_show_url_qr_code": "क्यूआर कोड दिखाएं",
+ "gui_chat_stop_server": "चैट सर्वर बंद करें",
+ "gui_chat_start_server": "चैट सर्वर शुरू करें",
+ "gui_file_selection_remove_all": "सभी हटाएं",
+ "gui_remove": "हटाएं",
+ "gui_qr_code_dialog_title": "OnionShare क्यूआर कोड",
+ "gui_receive_flatpak_data_dir": "चूँकि आपने फ़्लैटपैक का उपयोग करके OnionShare स्थापित किया है, इसलिए आपको फ़ाइलों को ~/OnionShare फ़ोल्डर में सहेजना होगा।"
}
diff --git a/desktop/src/onionshare/resources/locale/hr.json b/desktop/src/onionshare/resources/locale/hr.json
index 6c399c89..29252c1d 100644
--- a/desktop/src/onionshare/resources/locale/hr.json
+++ b/desktop/src/onionshare/resources/locale/hr.json
@@ -4,8 +4,8 @@
"no_available_port": "Priključak za pokretanje Onion usluge nije pronađen",
"other_page_loaded": "Adresa učitana",
"incorrect_password": "Neispravna lozinka",
- "close_on_autostop_timer": "Zaustavljeno, jer je vrijeme timera za automatsko zaustavljanje isteklo",
- "closing_automatically": "Zaustavljeno, jer je prijenos završen",
+ "close_on_autostop_timer": "Prekinuto, jer je vrijeme timera za automatsko prekidanje isteklo",
+ "closing_automatically": "Prekinuto, jer je prijenos završen",
"large_filesize": "Upozorenje: Slanje velike količine podataka može trajati satima",
"gui_drag_and_drop": "Povuci i ispusti datoteke i mape koje želiš dijeliti",
"gui_add": "Dodaj",
@@ -14,13 +14,13 @@
"gui_delete": "Izbriši",
"gui_choose_items": "Odaberi",
"gui_share_start_server": "Pokreni dijeljenje",
- "gui_share_stop_server": "Zaustavi dijeljenje",
- "gui_share_stop_server_autostop_timer": "Zaustavi dijeljenje ({})",
- "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko zaustavljanje završava pri {}",
+ "gui_share_stop_server": "Prekini dijeljenje",
+ "gui_share_stop_server_autostop_timer": "Prekini dijeljenje ({})",
+ "gui_stop_server_autostop_timer_tooltip": "Timer za automatsko prekidanje završava u {}",
"gui_start_server_autostart_timer_tooltip": "Timer za automatsko pokretanje završava u {}",
"gui_receive_start_server": "Pokreni modus primanja",
- "gui_receive_stop_server": "Zaustavi modus primanja",
- "gui_receive_stop_server_autostop_timer": "Zaustavi modus primanja ({} preostalo)",
+ "gui_receive_stop_server": "Prekini modus primanja",
+ "gui_receive_stop_server_autostop_timer": "Prekini modus primanja ({} preostalo)",
"gui_copy_url": "Kopiraj adresu",
"gui_copy_hidservauth": "Kopiraj HidServAuth",
"gui_canceled": "Prekinuto",
@@ -95,7 +95,7 @@
"settings_error_bundled_tor_timeout": "Povezivanje s Torom traje predugo. Možda nemaš vezu s internetom ili imaš netočno postavljen sat sustava?",
"settings_error_bundled_tor_broken": "Neuspjelo povezivanje OnionShare-a s Torom:\n{}",
"settings_test_success": "Povezan s Tor kontrolerom.\n\nTor verzija: {}\nPodržava kratkotrajne Onion usluge: {}.\nPodržava autentifikaciju klijenta: {}.\nPodržava .onion adrese sljedeće generacije: {}.",
- "error_tor_protocol_error": "Greška s Torom: {}",
+ "error_tor_protocol_error": "Dogodila se greška s Torom: {}",
"error_tor_protocol_error_unknown": "Nepoznata greška s Torom",
"connecting_to_tor": "Povezivanje s Tor mrežom",
"update_available": "Objavljen je novi OnionShare. <a href='{}'>Pritisni ovdje</a> za preuzimanje.<br><br>Trenutačno koristiš verziju {}, a najnovija verzija je {}.",
@@ -108,10 +108,10 @@
"gui_tor_connection_error_settings": "U postavkama promijeni način na koji se OnionShare povezuje s Tor mrežom.",
"gui_tor_connection_canceled": "Neuspjelo povezivanje s Torom.\n\nProvjeri vezu s internetom, a zatim ponovo pokreni OnionShare i postavi njegovu vezu s Torom.",
"gui_tor_connection_lost": "Prekinuta veza s Torom.",
- "gui_server_started_after_autostop_timer": "Vrijeme timera za automatsko zaustavljanje je isteklo prije nego što je poslužitelj započeo. Izradi novo dijeljenje.",
- "gui_server_autostop_timer_expired": "Vrijeme timera za automatsko zaustavljanje je već isteklo. Za pokretanje dijeljenja, podesi vrijeme.",
+ "gui_server_started_after_autostop_timer": "Vrijeme timera za automatsko prekidanje je isteklo prije nego što je poslužitelj započeo. Izradi novo dijeljenje.",
+ "gui_server_autostop_timer_expired": "Vrijeme timera za automatsko prekidanje je već isteklo. Za pokretanje dijeljenja, podesi vrijeme.",
"gui_server_autostart_timer_expired": "Planirano vrijeme je već prošlo. Za pokretanje dijeljenja, podesi vrijeme.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vrijeme za automatsko zaustavljanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. Za pokretanje dijeljenja, podesi vrijeme.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Vrijeme za automatsko prekidanje ne može biti isto kao vrijeme za automatsko pokretanje ili ranije. Za pokretanje dijeljenja, podesi vrijeme.",
"share_via_onionshare": "Dijeli putem OnionSharea",
"gui_connect_to_tor_for_onion_settings": "Poveži se s Torom za prikaz postavki Onion usluge",
"gui_use_legacy_v2_onions_checkbox": "Koristi stare adrese",
@@ -119,10 +119,10 @@
"gui_share_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>preuzeti</b> tvoje datoteke koristeći <b>Tor preglednik</b>: <img src='{}' />",
"gui_website_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>posjetiti</b> tvoju web-stranicu koristeći <b>Tor preglednik</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Svatko</b> s ovom OnionShare adresom može <b>prenijeti</b> datoteke na tvoje računalo koristeći <b>Tor preglednik</b>: <img src='{}' />",
- "gui_url_label_persistent": "Ovo se dijeljenje neće automatski zaustaviti.<br><br>Svako naredno dijeljenje ponovo koristi istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)",
- "gui_url_label_stay_open": "Ovo se dijeljenje neće automatski zaustaviti.",
- "gui_url_label_onetime": "Ovo će se dijeljenje zaustaviti nakon prvog završavanja.",
- "gui_url_label_onetime_and_persistent": "Ovo se dijeljenje neće automatski zaustaviti.<br><br>Svako naredno dijeljenje ponovo će koristiti istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)",
+ "gui_url_label_persistent": "Ovo se dijeljenje neće automatski prekinuti.<br><br>Svako naredno dijeljenje koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)",
+ "gui_url_label_stay_open": "Ovo se dijeljenje neće automatski prekinuti.",
+ "gui_url_label_onetime": "Ovo će se dijeljenje prekinuti nakon prvog završavanja.",
+ "gui_url_label_onetime_and_persistent": "Ovo se dijeljenje neće automatski prekinuti.<br><br>Svako naredno dijeljenje će koristit će istu adresu. (Za korištenje jednokratne adrese, u postavkama isključi opciju „Koristi trajnu adresu”.)",
"gui_status_indicator_share_stopped": "Spremno za dijeljenje",
"gui_status_indicator_share_working": "Pokretanje …",
"gui_status_indicator_share_scheduled": "Planirano …",
@@ -183,10 +183,10 @@
"mode_settings_website_disable_csp_checkbox": "Ne šalji zaglavlja politike sigurnosti sadržaja (omogućuje tvojim web-stranicama koristiti strane resurse)",
"mode_settings_receive_data_dir_browse_button": "Pregledaj",
"mode_settings_receive_data_dir_label": "Spremi datoteke u",
- "mode_settings_share_autostop_sharing_checkbox": "Zaustavi dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)",
+ "mode_settings_share_autostop_sharing_checkbox": "Prekini dijeljenje nakon što se datoteke pošalju (deaktiviraj za preuzimanje pojedinačnih datoteka)",
"mode_settings_client_auth_checkbox": "Koristi autorizaciju klijenta",
"mode_settings_legacy_checkbox": "Koristi stare adrese (v2 onion usluge, ne preporučuje se)",
- "mode_settings_autostop_timer_checkbox": "Zaustavi onion uslugu u planirano vrijeme",
+ "mode_settings_autostop_timer_checkbox": "Prekini onion uslugu u planirano vrijeme",
"mode_settings_autostart_timer_checkbox": "Pokreni onion uslugu u planirano vrijeme",
"mode_settings_public_checkbox": "Nemoj koristiti lozinku",
"mode_settings_persistent_checkbox": "Spremi ovu karticu i automatski je otvori kad otvorim OnionShare",
@@ -212,10 +212,10 @@
"gui_new_tab": "Nova kartica",
"gui_qr_code_description": "Skeniraj ovaj QR kȏd pomoću QR čitača, kao što je kamera na tvom telefonu, za lakše dijeljenje adrese OnionSharea.",
"gui_receive_flatpak_data_dir": "Budući da je tvoj OnionShare instaliran pomoću Flatpak-a, datoteke moraš spremiti u jednu mapu u ~/OnionShare.",
- "gui_tab_name_chat": "Chat",
- "gui_new_tab_chat_button": "Anonimni chat",
- "gui_chat_start_server": "Pokreni poslužitelja za chat",
- "gui_chat_stop_server": "Zaustavi poslužitelja za chat",
+ "gui_tab_name_chat": "Razgovor",
+ "gui_new_tab_chat_button": "Razgovaraj anonimno",
+ "gui_chat_start_server": "Pokreni poslužitelja za razgovor",
+ "gui_chat_stop_server": "Prekini poslužitelja za razgovor",
"gui_chat_stop_server_autostop_timer": "Zaustavi poslužitelja za chat ({})",
"gui_tab_name_receive": "Primi",
"gui_open_folder_error": "Otvaranje mape s xdg-open nije uspjelo. Datoteka je ovdje: {}",
@@ -225,13 +225,22 @@
"gui_show_url_qr_code": "Prikaži QR-kod",
"gui_file_selection_remove_all": "Ukloni sve",
"gui_remove": "Ukloni",
- "gui_main_page_chat_button": "Pokreni chat",
+ "gui_main_page_chat_button": "Pokreni razgovor",
"gui_main_page_website_button": "Pokreni hosting",
"gui_main_page_receive_button": "Pokreni primanje",
"gui_main_page_share_button": "Pokreni dijeljenje",
- "gui_chat_url_description": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za chat</b> koristeći <b>Tor preglednik</b>: <img src='{}' />",
+ "gui_chat_url_description": "<b>Svatko</b> s ovom OnionShare adresom može se <b>pridružiti sobi za razgovor</b> koristeći <b>Tor preglednik</b>: <img src='{}' />",
"error_port_not_available": "OnionShare priključak nije dostupan",
"gui_rendezvous_cleanup_quit_early": "Prekini preuranjeno",
"gui_rendezvous_cleanup": "Čekanje na zatvarnje Tor lanaca, kako bi se osigurao uspješan prijenos datoteka.\n\nOvo može potrajati nekoliko minuta.",
- "gui_color_mode_changed_notice": "Za primjenu novog modusa boja ponovo pokreni OnionShare ."
+ "gui_color_mode_changed_notice": "Za primjenu novog modusa boja ponovo pokreni OnionShare .",
+ "history_receive_read_message_button": "Čitaj poruku",
+ "mode_settings_receive_disable_files_checkbox": "Onemogući prenošenje datoteka",
+ "mode_settings_receive_disable_text_checkbox": "Onemogući slanje teksta",
+ "mode_settings_title_label": "Prilagođeni naslov",
+ "gui_status_indicator_chat_scheduled": "Planirano …",
+ "gui_status_indicator_chat_working": "Pokretanje …",
+ "mode_settings_receive_webhook_url_checkbox": "Koristi automatsko obavještavanje",
+ "gui_status_indicator_chat_started": "Razgovor u tijeku",
+ "gui_status_indicator_chat_stopped": "Spremno za razgovor"
}
diff --git a/desktop/src/onionshare/resources/locale/id.json b/desktop/src/onionshare/resources/locale/id.json
index 44adac8b..f4c299c5 100644
--- a/desktop/src/onionshare/resources/locale/id.json
+++ b/desktop/src/onionshare/resources/locale/id.json
@@ -10,7 +10,7 @@
"not_a_readable_file": "{0:s} bukan berkas yang bisa dibaca.",
"no_available_port": "Tidak dapat menemukan porta yang tersedia untuk memulai layanan onion",
"other_page_loaded": "Alamat dimuat",
- "close_on_autostop_timer": "",
+ "close_on_autostop_timer": "Berhenti karena timer berhenti otomatis habis",
"closing_automatically": "Terhenti karena transfer telah tuntas",
"timeout_download_still_running": "",
"large_filesize": "Peringatan: Mengirim dalam jumlah besar dapat memakan waktu berjam-jam",
@@ -31,7 +31,7 @@
"help_verbose": "Catat kesalahan OnionShare ke stdout, dan kesalahan web ke disk",
"help_filename": "Daftar berkas atau folder untuk dibagikan",
"help_config": "",
- "gui_drag_and_drop": "Seret dan lepas berkas dan folder\nuntuk mulai berbagi",
+ "gui_drag_and_drop": "Seret dan lepas berkas dan folder untuk mulai berbagi",
"gui_add": "Tambahkan",
"gui_delete": "Hapus",
"gui_choose_items": "Pilih",
@@ -62,7 +62,7 @@
"gui_receive_quit_warning": "Anda sedang dalam proses menerima berkas. Apakah Anda yakin ingin menghentikan OnionShare?",
"gui_quit_warning_quit": "Keluar",
"gui_quit_warning_dont_quit": "Batal",
- "error_rate_limit": "",
+ "error_rate_limit": "Seseorang berusaha berulang kali untuk menebak kata sandi Anda, jadi OnionShare telah menghentikan server. Mulailah berbagi lagi dan kirim penerima alamat baru untuk dibagikan.",
"zip_progress_bar_format": "Mengompresi: %p%",
"error_stealth_not_supported": "Untuk menggunakan otorisasi klien, Anda perlu setidaknya Tor 0.2.9.1-alpha (atau Tor Browser 6.5) dan python3-stem 1.5.0.",
"error_ephemeral_not_supported": "OnionShare memerlukan setidaknya Tor 0.2.7.1 dan python3-stem 1.4.0.",
@@ -79,10 +79,10 @@
"gui_settings_sharing_label": "Pengaturan berbagi",
"gui_settings_close_after_first_download_option": "Berhenti berbagi setelah berkas telah terkirim",
"gui_settings_connection_type_label": "Bagaimana seharusnya OnionShare terhubung ke Tor?",
- "gui_settings_connection_type_bundled_option": "",
+ "gui_settings_connection_type_bundled_option": "Gunakan versi Tor yang terintegrasi dengan OnionShare",
"gui_settings_connection_type_automatic_option": "Mencoba konfigurasi otomatis dengan Tor Browser",
"gui_settings_connection_type_control_port_option": "Menghubungkan menggunakan porta kontrol",
- "gui_settings_connection_type_socket_file_option": "",
+ "gui_settings_connection_type_socket_file_option": "Hubungkan menggunakan file socket",
"gui_settings_connection_type_test_button": "Menguji sambungan ke Tor",
"gui_settings_control_port_label": "Port kontrol",
"gui_settings_socket_file_label": "Berkas soket",
@@ -91,73 +91,73 @@
"gui_settings_authenticate_no_auth_option": "Tidak ada otentikasi, atau otentikasi kuki",
"gui_settings_authenticate_password_option": "Sandi",
"gui_settings_password_label": "Sandi",
- "gui_settings_tor_bridges": "",
- "gui_settings_tor_bridges_no_bridges_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
- "gui_settings_meek_lite_expensive_warning": "",
- "gui_settings_tor_bridges_custom_radio_option": "",
- "gui_settings_tor_bridges_custom_label": "",
- "gui_settings_tor_bridges_invalid": "",
+ "gui_settings_tor_bridges": "Dukungan Tor bridge",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Jangan gunakan bridges",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Gunakan obfs4 pluggable transports bawaan",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Gunakan obfs4 pluggable transports bawaan (memerlukan obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Gunakan meek_lite (Azure) pluggable transports bawaan",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Gunakan meek_lite (Azure) pluggable transports bawaan (memerlukan obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Peringatan: meek_lite sangat mahal untuk dijalankan oleh Tor Project. <br><br>Gunakan hanya jika tidak dapat terhubung ke Tor secara langsung, melalui obfs4 transports,, atau bridge normal lainnya.",
+ "gui_settings_tor_bridges_custom_radio_option": "Gunakan bridge kustom",
+ "gui_settings_tor_bridges_custom_label": "Anda bisa mendapatkan bridge dari <a href=\"https://bridges.torproject.org/options\"> https://bridges.torproject.org </a>",
+ "gui_settings_tor_bridges_invalid": "Tak satu pun dari bridge yang Anda tambahkan bekerja.\nPeriksa kembali atau tambahkan yang lain.",
"gui_settings_button_save": "Simpan",
"gui_settings_button_cancel": "Batal",
- "gui_settings_button_help": "",
+ "gui_settings_button_help": "Bantuan",
"gui_settings_autostop_timer_checkbox": "",
"gui_settings_autostop_timer": "",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
+ "settings_error_unknown": "Tidak dapat tersambung ke pengontrol Tor karena pengaturan Anda tidak masuk akal.",
+ "settings_error_automatic": "Tidak dapat terhubung ke pengontrol Tor. Apakah Tor Browser (unduh di torproject.org) berjalan di latar belakang?",
+ "settings_error_socket_port": "Tidak dapat tersambung ke pengontrol Tor di {}:{}.",
+ "settings_error_socket_file": "Tidak dapat tersambung ke pengontrol Tor menggunakan file soket {}.",
+ "settings_error_auth": "Tersambung ke {}:{}, tetapi tidak bisa mengautentikasi. Mungkin ini bukan pengontrol Tor?",
+ "settings_error_missing_password": "Terhubung ke pengontrol Tor, tetapi memerlukan kata sandi untuk mengotentikasi.",
+ "settings_error_unreadable_cookie_file": "Terhubung ke pengontrol Tor, tetapi kata sandi mungkin salah, atau pengguna Anda tidak diizinkan untuk membaca file kuki.",
+ "settings_error_bundled_tor_not_supported": "Menggunakan versi Tor bawaan OnioShare tidak bekerja dalam mode pengembang di Windows atau macOS.",
+ "settings_error_bundled_tor_timeout": "Terlalu lama terhubung ke Tor. Mungkin Anda tidak terhubung Internet, atau jam sistem tidak akurat?",
+ "settings_error_bundled_tor_broken": "OnioShare tidak dapat terhubung Tor:\n{}",
+ "settings_test_success": "Terhubung ke pengontrol Tor.\n\nVersi tor: {}\nMendukung layanan ephemeral onion: {}.\nMendukung otentikasi klien: {}.\nMendukung alamat .onion generasi berikutnya: {}.",
+ "error_tor_protocol_error": "Ada kesalahan dengan Tor: {}",
"error_tor_protocol_error_unknown": "",
"error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
+ "connecting_to_tor": "Menghubungkan ke jaringan Tor",
+ "update_available": "OnionShare Baru tersedia. <a href='{}'>klik di sini</a> untuk mendapatkannya. <br><br>Anda menggunakan {} dan yang terbaru adalah {}.",
+ "update_error_check_error": "Tidak dapat memeriksa versi baru: Mungkin Anda tidak terhubung ke Tor, atau situs web OnionShare sedang down?",
+ "update_error_invalid_latest_version": "Tidak dapat memeriksa versi baru: Situs web OnionShare mengatakan bahwa versi terbaru adalah '{}' yang tidak dapat dikenali…",
+ "update_not_available": "Anda menjalankan OnionShare terbaru.",
+ "gui_tor_connection_ask": "Buka pengaturan untuk memilah koneksi ke Tor?",
"gui_tor_connection_ask_open_settings": "Ya",
"gui_tor_connection_ask_quit": "Keluar",
- "gui_tor_connection_error_settings": "",
- "gui_tor_connection_canceled": "",
- "gui_tor_connection_lost": "",
- "gui_server_started_after_autostop_timer": "",
- "gui_server_autostop_timer_expired": "",
- "share_via_onionshare": "",
+ "gui_tor_connection_error_settings": "Coba ubah cara OnionShare terhubung ke jaringan Tor di pengaturan.",
+ "gui_tor_connection_canceled": "Tidak dapat terhubung ke Tor.\n\nPastikan Anda terhubung ke Internet, kemudian buka kembali OnionShare dan atur koneksinya ke Tor.",
+ "gui_tor_connection_lost": "Terputus dari Tor.",
+ "gui_server_started_after_autostop_timer": "Timer berhenti otomatis habis sebelum server dimulai. Silakan buat pembagian baru.",
+ "gui_server_autostop_timer_expired": "Timer berhenti otomatis sudah habis. Silakan sesuaikan untuk mulai berbagi.",
+ "share_via_onionshare": "Bagikan via OnionShare",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
- "gui_status_indicator_share_working": "",
- "gui_status_indicator_share_started": "",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
- "gui_status_indicator_receive_started": "",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
+ "gui_share_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunduh</b> berkas Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_receive_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunggah</b> berkas ke komputer Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_url_label_persistent": "Pembagian ini tidak akan berhenti otomatis.<br><br>Setiap pembagian selanjutnya menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)",
+ "gui_url_label_stay_open": "Pembagian ini tidak akan berhenti otomatis.",
+ "gui_url_label_onetime": "Pembagian ini akan berhenti setelah penyelesaian pertama.",
+ "gui_url_label_onetime_and_persistent": "Pembagian ini tidak akan berhenti otomatis.<br><br>Setiap pembagian selanjutnya akan menggunakan lagi alamat tersebut. (Untuk menggunakan alamat sekali pakai, matikan \"Gunakan alamat persisten\" di pengaturan.)",
+ "gui_status_indicator_share_stopped": "Siap untuk berbagi",
+ "gui_status_indicator_share_working": "Memulai…",
+ "gui_status_indicator_share_started": "Berbagi",
+ "gui_status_indicator_receive_stopped": "Siap untuk menerima",
+ "gui_status_indicator_receive_working": "Memulai…",
+ "gui_status_indicator_receive_started": "Menerima",
+ "gui_file_info": "{} file, {}",
+ "gui_file_info_single": "{} file, {}",
+ "history_in_progress_tooltip": "{} sedang berlangsung",
+ "history_completed_tooltip": "{} selesai",
"info_in_progress_uploads_tooltip": "",
"info_completed_uploads_tooltip": "",
"error_cannot_create_downloads_dir": "",
"receive_mode_downloads_dir": "",
"receive_mode_warning": "",
- "gui_receive_mode_warning": "",
+ "gui_receive_mode_warning": "Mode menerima membiarkan orang mengunggah berkas ke komputer Anda.<br><br><b>Beberapa berkas dapat berpotensi mengambil alih komputer Anda jika Anda membukanya. Hanya buka hal-hal dari orang yang Anda percaya, atau jika Anda tahu apa yang Anda lakukan.</b>",
"receive_mode_upload_starting": "",
"receive_mode_received_file": "",
"gui_mode_share_button": "",
@@ -169,7 +169,7 @@
"gui_settings_public_mode_checkbox": "",
"systray_close_server_title": "",
"systray_close_server_message": "",
- "systray_page_loaded_title": "",
+ "systray_page_loaded_title": "Halaman dimuat",
"systray_download_page_loaded_message": "",
"systray_upload_page_loaded_message": "",
"gui_uploads": "",
@@ -180,13 +180,106 @@
"gui_upload_finished": "",
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "",
- "gui_settings_language_label": "",
- "gui_settings_language_changed_notice": "",
+ "gui_settings_language_label": "Bahasa",
+ "gui_settings_language_changed_notice": "Mulai ulang OnionShare untuk menerapkan bahasa baru.",
"gui_add_files": "Tambahkan berkas",
"gui_add_folder": "Tambahkan Folder",
"gui_settings_onion_label": "Pengaturan Onion",
"incorrect_password": "Password salah",
"gui_waiting_to_start": "Dijadwalkan akan dimulai pada {}. Klik untuk membatalkan.",
"gui_start_server_autostart_timer_tooltip": "Timer mulai otomatis berakhir pada {}",
- "gui_stop_server_autostop_timer_tooltip": "Timer berhenti otomatis berakhir pada {}"
+ "gui_stop_server_autostop_timer_tooltip": "Timer berhenti otomatis berakhir pada {}",
+ "gui_new_tab_chat_button": "Mengobrol secara Anonim",
+ "gui_new_tab_website_button": "Host sebuah situs web",
+ "gui_main_page_share_button": "Mulai Berbagi",
+ "gui_main_page_website_button": "Mulai Hosting",
+ "gui_main_page_receive_button": "Mulai Menerima",
+ "gui_close_tab_warning_cancel": "Batal",
+ "gui_close_tab_warning_title": "Anda yakin?",
+ "gui_tab_name_chat": "Obrolan",
+ "gui_tab_name_website": "Situs web",
+ "gui_tab_name_receive": "Menerima",
+ "gui_tab_name_share": "Berbagi",
+ "gui_main_page_chat_button": "Mulai Obrolan",
+ "gui_quit_warning_title": "Anda yakin?",
+ "gui_receive_flatpak_data_dir": "Karena Anda menginstal OnionShare menggunakan Flatpak, Anda harus menyimpan file ke folder di ~/OnionShare.",
+ "mode_settings_website_disable_csp_checkbox": "Jangan kirim header Kebijakan Keamanan Konten (memungkinkan situs web Anda menggunakan sumber daya pihak ketiga)",
+ "gui_open_folder_error": "Gagal membuka folder dengan xdg-open. File ada di sini: {}",
+ "gui_status_indicator_share_scheduled": "Dijadwalkan…",
+ "error_cannot_create_data_dir": "Tidak dapat membuat folder data OnionShare: {}",
+ "history_requests_tooltip": "{} permintaan web",
+ "gui_status_indicator_receive_scheduled": "Dijadwalkan…",
+ "systray_page_loaded_message": "Alamat OnionShare dimuat",
+ "gui_all_modes_transfer_canceled": "Dibatalkan {}",
+ "gui_all_modes_transfer_canceled_range": "Dibatalkan {} - {}",
+ "gui_all_modes_transfer_finished": "Ditransfer {}",
+ "gui_all_modes_transfer_finished_range": "Ditransfer {} - {}",
+ "mode_settings_receive_data_dir_browse_button": "Telusur",
+ "mode_settings_receive_data_dir_label": "Simpan file ke",
+ "mode_settings_share_autostop_sharing_checkbox": "Berhenti berbagi setelah file dikirim (hapus centang untuk memperbolehkan mengunduh file individual)",
+ "mode_settings_client_auth_checkbox": "Gunakan otorisasi klien",
+ "mode_settings_legacy_checkbox": "Gunakan alamat legacy (layanan onion v2, tidak disarankan)",
+ "mode_settings_autostop_timer_checkbox": "Hentikan layanan onion pada waktu yang dijadwalkan",
+ "mode_settings_autostart_timer_checkbox": "Mulai layanan onion pada waktu yang dijadwalkan",
+ "mode_settings_public_checkbox": "Jangan gunakan kata sandi",
+ "mode_settings_persistent_checkbox": "Simpan tab ini, dan secara otomatis membukanya saat saya membuka OnionShare",
+ "mode_settings_advanced_toggle_hide": "Sembunyikan pengaturan lanjut",
+ "mode_settings_advanced_toggle_show": "Tampilkan pengaturan lanjut",
+ "gui_quit_warning_cancel": "Batal",
+ "gui_new_tab_receive_button": "Terima File",
+ "gui_new_tab_share_button": "Bagikan file",
+ "gui_new_tab_tooltip": "Buka tab baru",
+ "gui_new_tab": "Tab Baru",
+ "seconds_first_letter": "d",
+ "minutes_first_letter": "m",
+ "hours_first_letter": "j",
+ "days_first_letter": "h",
+ "gui_receive_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan penerimaan",
+ "gui_receive_mode_no_files": "Belum Ada File yang Diterima",
+ "gui_website_mode_no_files": "Belum Ada Situs Web yang Dibagikan",
+ "gui_share_mode_autostop_timer_waiting": "Menunggu untuk menyelesaikan pengiriman",
+ "gui_share_mode_no_files": "Belum Ada File yang Dikirim",
+ "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (menghitung)",
+ "gui_all_modes_progress_complete": "%p%, {0:s} berlalu.",
+ "gui_all_modes_transfer_started": "Dimulai {}",
+ "gui_all_modes_clear_history": "Bersihkan Semua",
+ "gui_all_modes_history": "Riwayat",
+ "systray_receive_started_message": "Seseorang mengirim file kepada Anda",
+ "systray_receive_started_title": "Menerima Dimulai",
+ "systray_share_canceled_message": "Seseorang membatalkan menerima file Anda",
+ "systray_share_canceled_title": "Berbagi Dibatalkan",
+ "systray_share_completed_message": "Selesai mengirim file",
+ "systray_share_completed_title": "Berbagi Selesai",
+ "systray_share_started_message": "Mulai mengirim file ke seseorang",
+ "systray_share_started_title": "Berbagi dimulai",
+ "gui_color_mode_changed_notice": "Mulai ulang OnionShare agar mode warna baru diterapkan.",
+ "gui_qr_code_dialog_title": "Kode QR OnionShare",
+ "gui_show_url_qr_code": "Tampilkan kode QR",
+ "error_port_not_available": "Port OnionShare tidak tersedia",
+ "gui_chat_stop_server": "Hentikan server obrolan",
+ "gui_chat_start_server": "Mulai server obrolan",
+ "gui_file_selection_remove_all": "Hapus Semua",
+ "gui_remove": "Hapus",
+ "history_receive_read_message_button": "Baca Pesan",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Waktu berhenti otomatis tidak boleh sama atau lebih awal dari waktu mulai otomatis. Silakan sesuaikan untuk mulai berbagi.",
+ "gui_rendezvous_cleanup_quit_early": "Keluar Dini",
+ "gui_rendezvous_cleanup": "Menunggu sirkuit Tor menutup untuk memastikan berkas Anda telah berhasil ditransfer.\n\nIni mungkin perlu beberapa menit.",
+ "mode_settings_receive_webhook_url_checkbox": "Gunakan notifikasi webhook",
+ "mode_settings_receive_disable_files_checkbox": "Nonaktifkan pengunggahan berkas",
+ "mode_settings_receive_disable_text_checkbox": "Nonaktifkan pengiriman teks",
+ "mode_settings_title_label": "Judul kustom",
+ "gui_quit_warning_description": "Pembagian sedang aktif di beberapa tab Anda. Jika Anda keluar, seluruh tab Anda akan tertutup. Apakah Anda yakin mau keluar?",
+ "gui_close_tab_warning_close": "Tutup",
+ "gui_close_tab_warning_website_description": "Anda secara aktif menghosting situs web. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_receive_description": "Anda dalam proses menerima berkas. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_share_description": "Anda dalam proses mengirim berkas. Apakah Anda yakin mau menutup tab ini?",
+ "gui_close_tab_warning_persistent_description": "Tab ini persisten. Jika Anda menutup tab ini Anda akan kehilangan alamat onion yang sedang digunakan. Apakah Anda yakin mau menutup tab ini?",
+ "gui_chat_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>bergabung di ruang obrolan ini</b> menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_website_url_description": "<b>Siapa saja</b> dengan alamat OnionShare ini dapat <b>mengunjungi</b> situs web Anda menggunakan <b>Tor Browser</b>:<img src='{}' />",
+ "gui_server_autostart_timer_expired": "Waktu yang dijadwalkan telah terlewati. Silakan sesuaikan waktu untuk memulai berbagi.",
+ "gui_status_indicator_chat_started": "Mengobrol",
+ "gui_status_indicator_chat_scheduled": "Menjadwalkan…",
+ "gui_status_indicator_chat_working": "Memulai…",
+ "gui_status_indicator_chat_stopped": "Siap untuk mengobrol"
}
diff --git a/desktop/src/onionshare/resources/locale/is.json b/desktop/src/onionshare/resources/locale/is.json
index 039b12f7..bdbc0e6b 100644
--- a/desktop/src/onionshare/resources/locale/is.json
+++ b/desktop/src/onionshare/resources/locale/is.json
@@ -288,5 +288,15 @@
"error_port_not_available": "OnionShare-gátt ekki tiltæk",
"gui_rendezvous_cleanup_quit_early": "Hætta snemma",
"gui_rendezvous_cleanup": "Bíð eftir að Tor-rásir lokist svo öruggt sé að tekist hafi að flytja skrárnar þínar.\n\nÞetta gæti tekið nokkrar mínútur.",
- "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi."
+ "gui_color_mode_changed_notice": "Endurræstu OnionShare svo nýja litastefið taki gildi.",
+ "history_receive_read_message_button": "Lesa skilaboð",
+ "mode_settings_receive_webhook_url_checkbox": "Nota webhook fyrir tilkynningar",
+ "mode_settings_receive_disable_files_checkbox": "Gera innsendingu skráa óvirka",
+ "mode_settings_receive_disable_text_checkbox": "Gera innsendingu texta óvirka",
+ "mode_settings_title_label": "Sérsniðinn titill",
+ "gui_status_indicator_chat_started": "Spjalla",
+ "gui_status_indicator_chat_scheduled": "Áætlað…",
+ "gui_status_indicator_chat_working": "Ræsi…",
+ "gui_status_indicator_chat_stopped": "Tilbúið í spjall",
+ "gui_please_wait_no_button": "Ræsi…"
}
diff --git a/desktop/src/onionshare/resources/locale/it.json b/desktop/src/onionshare/resources/locale/it.json
index f04bf3ef..1adee18b 100644
--- a/desktop/src/onionshare/resources/locale/it.json
+++ b/desktop/src/onionshare/resources/locale/it.json
@@ -70,7 +70,7 @@
"help_receive": "Ricevi le condivisioni invece di inviarle",
"gui_settings_stealth_option": "Usa l'autorizzazione client (legacy)",
"gui_settings_stealth_hidservauth_string": "Avendo salvato la tua chiave privata per il riutilizzo, puoi cliccare per copiare il tuo HidServAuth.",
- "gui_settings_autoupdate_label": "Controlla se c'è una nuova versione",
+ "gui_settings_autoupdate_label": "Verifica se c'è una nuova versione",
"gui_settings_autoupdate_option": "Avvisami quando è disponibile una nuova versione",
"gui_settings_autoupdate_timestamp": "Ultimo controllo: {}",
"gui_settings_autoupdate_timestamp_never": "Mai",
@@ -213,7 +213,7 @@
"gui_share_mode_autostop_timer_waiting": "In attesa di finire l'invio",
"gui_receive_mode_no_files": "Nessun file ricevuto ancora",
"gui_receive_mode_autostop_timer_waiting": "In attesa di finire la ricezione",
- "gui_stop_server_autostop_timer_tooltip": "Il timer auto-stop terminerà alle {}",
+ "gui_stop_server_autostop_timer_tooltip": "Il timer di arresto automatico termina alle {}",
"gui_start_server_autostart_timer_tooltip": "Il timer Auto-start termina alle {}",
"gui_waiting_to_start": "Programmato per avviarsi in {}. Clicca per annullare.",
"gui_settings_autostart_timer_checkbox": "Usa il timer a partenza automatica",
@@ -263,7 +263,7 @@
"gui_quit_warning_description": "La condivisione è attiva in alcune delle tue schede. Uscendo, tutte le tue schede verranno chiuse. Sei sicuro di voler uscire?",
"gui_quit_warning_title": "Sei sicuro?",
"gui_close_tab_warning_close": "Chiudi",
- "gui_close_tab_warning_website_description": "Stai ospitando attivamente un sito web. Sei sicuro di voler chiudere questa scheda?",
+ "gui_close_tab_warning_website_description": "Stai ospitando un sito web. Sei sicuro di voler chiudere questa scheda?",
"mode_settings_website_disable_csp_checkbox": "Non inviare l'intestazione della Politica sulla Sicurezza dei Contenuti (consente al sito web di utilizzare risorse di terze parti)",
"mode_settings_receive_data_dir_browse_button": "Naviga",
"mode_settings_client_auth_checkbox": "Usa l'autorizzazione del client",
@@ -280,5 +280,7 @@
"mode_settings_legacy_checkbox": "Usa un indirizzo legacy (servizio onion v2, non consigliato)",
"mode_settings_public_checkbox": "Non usare una password",
"gui_rendezvous_cleanup_quit_early": "Chiudi in anticipo",
- "gui_rendezvous_cleanup": "In attesa che i circuiti Tor si chiudano per essere sicuri che i file siano stati trasferiti con successo.\n\nQuesto potrebbe richiedere alcuni minuti."
+ "gui_rendezvous_cleanup": "In attesa che i circuiti Tor si chiudano per assicurarsi che i file siano stati trasferiti con successo.\n\nQuesto potrebbe richiedere alcuni minuti.",
+ "error_port_not_available": "Porta OnionShare non disponibile",
+ "gui_color_mode_changed_notice": "Riavvia OnionShare per applicare la nuova modalità colore."
}
diff --git a/desktop/src/onionshare/resources/locale/lt.json b/desktop/src/onionshare/resources/locale/lt.json
index b34bb52a..f3e76e9b 100644
--- a/desktop/src/onionshare/resources/locale/lt.json
+++ b/desktop/src/onionshare/resources/locale/lt.json
@@ -4,10 +4,10 @@
"no_available_port": "",
"other_page_loaded": "Adresas įkeltas",
"incorrect_password": "Neteisingas slaptažodis",
- "close_on_autostop_timer": "",
+ "close_on_autostop_timer": "Sustabdyta, nes baigėsi automatinio sustabdymo laikmatis",
"closing_automatically": "Sustabdyta, nes perdavimas yra užbaigtas",
"large_filesize": "Įspėjimas: Didelio viešinio siuntimas gali užtrukti ilgą laiką (kelias valandas)",
- "gui_drag_and_drop": "Norėdami bendrinti,\ntempkite čia failus ir aplankus",
+ "gui_drag_and_drop": "Norėdami bendrinti, tempkite failus ir aplankus čia",
"gui_add": "Pridėti",
"gui_add_files": "Pridėti failus",
"gui_add_folder": "Pridėti aplanką",
@@ -16,8 +16,8 @@
"gui_share_start_server": "Pradėti bendrinti",
"gui_share_stop_server": "Nustoti bendrinti",
"gui_share_stop_server_autostop_timer": "Nustoti bendrinti ({})",
- "gui_stop_server_autostop_timer_tooltip": "",
- "gui_start_server_autostart_timer_tooltip": "",
+ "gui_stop_server_autostop_timer_tooltip": "Automatinio sustabdymo laikmatis baigiasi {}",
+ "gui_start_server_autostart_timer_tooltip": "Automatinio paleidimo laikmatis baigiasi {}",
"gui_receive_start_server": "Įjungti gavimo veikseną",
"gui_receive_stop_server": "Išjungti gavimo veikseną",
"gui_receive_stop_server_autostop_timer": "Išjungti gavimo veikseną (Liko {})",
@@ -28,9 +28,9 @@
"gui_copied_url": "OnionShare adresas nukopijuotas į iškarpinę",
"gui_copied_hidservauth_title": "HidServAuth nukopijuota",
"gui_copied_hidservauth": "HidServAuth eilutė nukopijuota į iškarpinę",
- "gui_waiting_to_start": "",
+ "gui_waiting_to_start": "Planuojama pradėti {}. Spustelėkite , jei norite atšaukti.",
"gui_please_wait": "Pradedama… Spustelėkite norėdami atsisakyti.",
- "error_rate_limit": "",
+ "error_rate_limit": "Kažkas padarė per daug klaidingų bandymų atspėti jūsų slaptažodį, todėl „OnionShare“ sustabdė serverį. Vėl pradėkite bendrinti ir nusiųskite gavėjui naują bendrinimo adresą.",
"zip_progress_bar_format": "Glaudinama: %p%",
"error_stealth_not_supported": "",
"error_ephemeral_not_supported": "",
@@ -40,7 +40,7 @@
"gui_settings_stealth_hidservauth_string": "",
"gui_settings_autoupdate_label": "Tikrinti, ar yra nauja versija",
"gui_settings_autoupdate_option": "Pranešti, kai bus prieinama nauja versija",
- "gui_settings_autoupdate_timestamp": "",
+ "gui_settings_autoupdate_timestamp": "Paskutinį kartą tikrinta: {}",
"gui_settings_autoupdate_timestamp_never": "Niekada",
"gui_settings_autoupdate_check_button": "Tikrinti, ar yra nauja versija",
"gui_settings_general_label": "Bendri nustatymai",
@@ -50,25 +50,25 @@
"gui_settings_csp_header_disabled_option": "",
"gui_settings_individual_downloads_label": "",
"gui_settings_connection_type_label": "Kaip OnionShare turėtų jungtis prie Tor?",
- "gui_settings_connection_type_bundled_option": "",
- "gui_settings_connection_type_automatic_option": "",
- "gui_settings_connection_type_control_port_option": "",
- "gui_settings_connection_type_socket_file_option": "",
- "gui_settings_connection_type_test_button": "",
- "gui_settings_control_port_label": "",
- "gui_settings_socket_file_label": "",
+ "gui_settings_connection_type_bundled_option": "Naudokite „Tor“ versiją, integruotą į „OnionShare“",
+ "gui_settings_connection_type_automatic_option": "Bandyti automatiškai konfigūruoti naudojant „Tor“ naršyklę",
+ "gui_settings_connection_type_control_port_option": "Prisijunkti naudojant valdymo prievadą",
+ "gui_settings_connection_type_socket_file_option": "Prisijungti naudojant socket failą",
+ "gui_settings_connection_type_test_button": "Tikrinti ryšį su „Tor“",
+ "gui_settings_control_port_label": "Valdymo prievadas",
+ "gui_settings_socket_file_label": "Socket failas",
"gui_settings_socks_label": "SOCKS prievadas",
- "gui_settings_authenticate_label": "",
- "gui_settings_authenticate_no_auth_option": "",
+ "gui_settings_authenticate_label": "Tor autentifikavimo nustatymai",
+ "gui_settings_authenticate_no_auth_option": "Jokio autentifikavimo ar slapukų autentifikavimo",
"gui_settings_authenticate_password_option": "Slaptažodis",
"gui_settings_password_label": "Slaptažodis",
- "gui_settings_tor_bridges": "",
- "gui_settings_tor_bridges_no_bridges_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option": "",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
- "gui_settings_meek_lite_expensive_warning": "",
+ "gui_settings_tor_bridges": "„Tor“ tilto palaikymas",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Nenaudoti tiltų",
+ "gui_settings_tor_bridges_obfs4_radio_option": "Naudoti integruotą obfs4 prijungiamą transportą",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Naudoti integruotą obfs4 prijungiamą transportą (reikalingas obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Naudoti integruotus meek_lite („Azure“) prijungiamus transportus (reikalingas obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Įspėjimas: <br><br>Meek_lite tiltai labai brangiai kainuoja „Tor“ projektui.<br><br>Jais naudokitės tik tuo atveju, jei negalite prisijungti prie „Tor“ tiesiogiai, per obfs4 transportą ar kitus įprastus tiltus.",
"gui_settings_tor_bridges_custom_radio_option": "Naudoti tinkintus tinklų tiltus",
"gui_settings_tor_bridges_custom_label": "Galite gauti tinklų tiltus iš <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Nei vienas iš jūsų pridėtų tinklų tiltų neveikia.\nPatikrinkite juos dar kartą arba pridėkite kitus.",
@@ -79,60 +79,60 @@
"gui_settings_autostop_timer": "",
"gui_settings_autostart_timer_checkbox": "",
"gui_settings_autostart_timer": "",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
+ "settings_error_unknown": "Nepavyksta prisijungti prie „Tor“ valdiklio, nes jūsų nustatymai nustatyti nesuprantamai.",
+ "settings_error_automatic": "Nepavyko prisijungti prie „Tor“ valdiklio. Ar „Tor“ naršyklė (prieinama torproject.org) veikia fone?",
+ "settings_error_socket_port": "Nepavyksta prisijungti prie „Tor“ valdiklio adresu {}:{}.",
+ "settings_error_socket_file": "Negalima prisijungti prie „Tor“ valdiklio naudojant lizdo failą {}.",
+ "settings_error_auth": "Prisijungta prie {}:{}, bet negalima patvirtinti autentiškumo. Galbūt tai ne „Tor“ valdiklis?",
+ "settings_error_missing_password": "Prisijungta prie „Tor“ valdiklio, tačiau norint jį autentifikuoti reikia slaptažodžio.",
+ "settings_error_unreadable_cookie_file": "Prisijungta prie „Tor“ valdiklio, bet slaptažodis gali būti klaidingas arba jūsų naudotojui neleidžiama skaityti slapukų failo.",
+ "settings_error_bundled_tor_not_supported": "Naudojant „Tor“ versiją, kuri pateikiama kartu su \"OnionShare\", \"Windows\" arba \"macOS\" sistemose ji neveiks kūrėjo režime.",
+ "settings_error_bundled_tor_timeout": "Per ilgai trunka prisijungimas prie „Tor“. Galbūt nesate prisijungę prie interneto arba turite netikslų sistemos laikrodį?",
"settings_error_bundled_tor_broken": "OnionShare nepavyko prisijungti prie Tor:\n{}",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
+ "settings_test_success": "Prisijungta prie „Tor“ valdiklio.\n\n„Tor“ versija: {}\nPalaiko efemerines onion paslaugas: {}.\nPalaiko kliento autentifikavimą: {}.\nPalaiko naujos kartos .onion adresus: {}.",
+ "error_tor_protocol_error": "Įvyko „Tor“ klaida: {}",
"error_tor_protocol_error_unknown": "",
"connecting_to_tor": "Jungiamasi prie Tor tinklo",
- "update_available": "",
- "update_error_invalid_latest_version": "",
- "update_error_check_error": "",
+ "update_available": "Išleistas naujas „OnionShare“. <a href='{}'>Paspauskite čia</a>, kad jį gautumėte.<br><br>Jūs naudojate {}, o naujausia versija yra {}.",
+ "update_error_invalid_latest_version": "Nepavyko patikrinti naujos versijos: „OnionShare“ svetainė sako, kad naujausia versija yra neatpažįstama „{}“…",
+ "update_error_check_error": "Nepavyko patikrinti naujos versijos: Galbūt nesate prisijungę prie „Tor“ arba „OnionShare“ svetainė neveikia?",
"update_not_available": "Jūs naudojate naujausią OnionShare versiją.",
- "gui_tor_connection_ask": "",
+ "gui_tor_connection_ask": "Atidarykite nustatymus, kad sutvarkytumėte ryšį su „Tor“?",
"gui_tor_connection_ask_open_settings": "Taip",
"gui_tor_connection_ask_quit": "Išeiti",
"gui_tor_connection_error_settings": "Pabandykite nustatymuose pakeisti tai, kaip OnionShare jungiasi prie Tor tinklo.",
"gui_tor_connection_canceled": "Nepavyko prisijungti prie Tor.\n\nĮsitikinkite, kad esate prisijungę prie interneto, o tuomet iš naujo atverkite OnionShare ir nustatykite prisijungimą prie Tor.",
"gui_tor_connection_lost": "Atsijungta nuo Tor.",
- "gui_server_started_after_autostop_timer": "",
- "gui_server_autostop_timer_expired": "",
- "gui_server_autostart_timer_expired": "",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
+ "gui_server_started_after_autostop_timer": "Automatinio sustabdymo laikmatis baigėsi prieš paleidžiant serverį. Prašome sukurti naują bendrinimą.",
+ "gui_server_autostop_timer_expired": "Automatinio sustabdymo laikmatis jau baigėsi. Sureguliuokite jį, kad pradėtumėte dalintis.",
+ "gui_server_autostart_timer_expired": "Numatytas laikas jau praėjo. Pakoreguokite jį, kad galėtumėte pradėti dalintis.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Automatinio sustabdymo laikas negali būti toks pat arba ankstesnis už automatinio paleidimo laiką. Sureguliuokite jį, kad galėtumėte pradėti dalytis.",
"share_via_onionshare": "Bendrinti per OnionShare",
"gui_connect_to_tor_for_onion_settings": "",
"gui_use_legacy_v2_onions_checkbox": "",
"gui_save_private_key_checkbox": "",
"gui_share_url_description": "<b>Visi</b>, turintys šį OnionShare adresą gali <b>atsisiųsti</b> jūsų failus, naudodamiesi <b>Tor Naršykle</b>: <img src='{}' />",
- "gui_website_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
+ "gui_website_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>apsilankyti</b> jūsų svetainėje naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>įkelti</b> failus į jūsų kompiuterį naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.<br><br>Kiekvienas vėlesnis bendrinimas pakartotinai naudoja adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)",
+ "gui_url_label_stay_open": "Šis bendrinimas nebus automatiškai sustabdytas.",
+ "gui_url_label_onetime": "Šis bendrinimas pabaigus bus automatiškai sustabdytas.",
+ "gui_url_label_onetime_and_persistent": "Šis bendrinimas nebus automatiškai sustabdytas.<br><br>Kiekvienas vėlesnis bendrinimas pakartotinai naudos adresą. (Norėdami naudoti vienkartinius adresus, nustatymuose išjunkite \"Naudoti nuolatinį adresą\".)",
+ "gui_status_indicator_share_stopped": "Parengta dalintis",
"gui_status_indicator_share_working": "Pradedama…",
- "gui_status_indicator_share_scheduled": "",
- "gui_status_indicator_share_started": "",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
- "gui_status_indicator_receive_scheduled": "",
+ "gui_status_indicator_share_scheduled": "Suplanuota…",
+ "gui_status_indicator_share_started": "Dalijimasis",
+ "gui_status_indicator_receive_stopped": "Parengta gauti",
+ "gui_status_indicator_receive_working": "Pradedama…",
+ "gui_status_indicator_receive_scheduled": "Suplanuota…",
"gui_status_indicator_receive_started": "Gaunama",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
- "history_requests_tooltip": "",
+ "gui_file_info": "{} failai, {}",
+ "gui_file_info_single": "{} failas, {}",
+ "history_in_progress_tooltip": "{} vykdoma",
+ "history_completed_tooltip": "{} baigta",
+ "history_requests_tooltip": "{} žiniatinklio užklausos",
"error_cannot_create_data_dir": "Nepavyko sukurti OnionShare duomenų aplanko: {}",
- "gui_receive_mode_warning": "",
+ "gui_receive_mode_warning": "Gavimo režimas leidžia žmonėms nusiųsti failus į jūsų kompiuterį. <br><br><b>Kai kurie failai gali perimti kompiuterio valdymą, jei juos atidarysite. Atidarykite failus tik iš žmonių, kuriais pasitikite, arba jei žinote, ką darote.</b>",
"gui_mode_share_button": "",
"gui_mode_receive_button": "",
"gui_mode_website_button": "",
@@ -147,67 +147,93 @@
"systray_menu_exit": "Išeiti",
"systray_page_loaded_title": "Puslapis įkeltas",
"systray_page_loaded_message": "OnionShare adresas įkeltas",
- "systray_share_started_title": "",
+ "systray_share_started_title": "Pradėtas dalijimasis",
"systray_share_started_message": "Pradedama kažkam siųsti failus",
- "systray_share_completed_title": "",
+ "systray_share_completed_title": "Dalijimasis baigtas",
"systray_share_completed_message": "Failų siuntimas užbaigtas",
- "systray_share_canceled_title": "",
- "systray_share_canceled_message": "",
- "systray_receive_started_title": "",
+ "systray_share_canceled_title": "Dalijimasis atšauktas",
+ "systray_share_canceled_message": "Kažkas atšaukė jūsų failų gavimą",
+ "systray_receive_started_title": "Pradėtas gavimas",
"systray_receive_started_message": "Kažkas siunčia jums failus",
"gui_all_modes_history": "Istorija",
- "gui_all_modes_clear_history": "",
- "gui_all_modes_transfer_started": "",
- "gui_all_modes_transfer_finished_range": "",
- "gui_all_modes_transfer_finished": "",
- "gui_all_modes_transfer_canceled_range": "",
- "gui_all_modes_transfer_canceled": "",
- "gui_all_modes_progress_complete": "",
+ "gui_all_modes_clear_history": "Išvalyti viską",
+ "gui_all_modes_transfer_started": "Pradėta {}",
+ "gui_all_modes_transfer_finished_range": "Perkelta {} - {}",
+ "gui_all_modes_transfer_finished": "Perkelta {}",
+ "gui_all_modes_transfer_canceled_range": "Atšaukta {} - {}",
+ "gui_all_modes_transfer_canceled": "Atšaukta {}",
+ "gui_all_modes_progress_complete": "Praėjo %p%, {0:s}.",
"gui_all_modes_progress_starting": "{0:s}, %p% (apskaičiuojama)",
- "gui_all_modes_progress_eta": "",
+ "gui_all_modes_progress_eta": "{0:s}, Preliminarus laikas: {1:s}, %p%",
"gui_share_mode_no_files": "Kol kas nėra išsiųstų failų",
- "gui_share_mode_autostop_timer_waiting": "",
- "gui_website_mode_no_files": "",
+ "gui_share_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas siuntimas",
+ "gui_website_mode_no_files": "Dar nėra bendrinama jokia svetainė",
"gui_receive_mode_no_files": "Kol kas nėra gautų failų",
- "gui_receive_mode_autostop_timer_waiting": "",
- "days_first_letter": "d.",
- "hours_first_letter": "",
- "minutes_first_letter": "",
- "seconds_first_letter": "",
+ "gui_receive_mode_autostop_timer_waiting": "Laukiama, kol bus baigtas gavimas",
+ "days_first_letter": "d",
+ "hours_first_letter": "val",
+ "minutes_first_letter": "min",
+ "seconds_first_letter": "s",
"gui_new_tab": "Nauja kortelė",
"gui_new_tab_tooltip": "Atverti naują kortelę",
- "gui_new_tab_share_button": "",
+ "gui_new_tab_share_button": "Dalytis failais",
"gui_new_tab_share_description": "",
- "gui_new_tab_receive_button": "",
+ "gui_new_tab_receive_button": "Gauti failus",
"gui_new_tab_receive_description": "",
- "gui_new_tab_website_button": "",
+ "gui_new_tab_website_button": "Talpinti svetainę",
"gui_new_tab_website_description": "",
"gui_close_tab_warning_title": "Ar tikrai?",
- "gui_close_tab_warning_persistent_description": "",
- "gui_close_tab_warning_share_description": "",
- "gui_close_tab_warning_receive_description": "",
- "gui_close_tab_warning_website_description": "",
+ "gui_close_tab_warning_persistent_description": "Šis skirtukas yra nuolatinis. Jei jį uždarysite, prarasite jo naudojamą onion adresą. Ar tikrai norite jį uždaryti?",
+ "gui_close_tab_warning_share_description": "Šiuo metu siunčiate failus. Ar tikrai norite uždaryti šį skirtuką?",
+ "gui_close_tab_warning_receive_description": "Šiuo metu gaunate failus. Ar tikrai norite uždaryti šį skirtuką?",
+ "gui_close_tab_warning_website_description": "Aktyviai talpinate svetainę. Ar tikrai norite uždaryti šį skirtuką?",
"gui_close_tab_warning_close": "Užverti",
"gui_close_tab_warning_cancel": "Atsisakyti",
"gui_quit_warning_title": "Ar tikrai?",
- "gui_quit_warning_description": "",
+ "gui_quit_warning_description": "Kuriuose skirtukuose yra aktyviai dalijamasi . Jei išeisite, visi skirtukai bus uždaryti. Ar tikrai norite baigti?",
"gui_quit_warning_quit": "Išeiti",
"gui_quit_warning_cancel": "Atsisakyti",
"mode_settings_advanced_toggle_show": "Rodyti išplėstinius nustatymus",
"mode_settings_advanced_toggle_hide": "Slėpti išplėstinius nustatymus",
- "mode_settings_persistent_checkbox": "",
+ "mode_settings_persistent_checkbox": "Išsaugoti šį skirtuką ir automatiškai jį atidaryti, kai atidarysiu „OnionShare“",
"mode_settings_public_checkbox": "Nenaudoti slaptažodžio",
- "mode_settings_autostart_timer_checkbox": "",
- "mode_settings_autostop_timer_checkbox": "",
- "mode_settings_legacy_checkbox": "",
- "mode_settings_client_auth_checkbox": "",
- "mode_settings_share_autostop_sharing_checkbox": "",
+ "mode_settings_autostart_timer_checkbox": "Pradėti onion paslaugos paleidimą suplanuotu laiku",
+ "mode_settings_autostop_timer_checkbox": "Sustabdyti onion paslaugos paleidimą suplanuotu laiku",
+ "mode_settings_legacy_checkbox": "Naudoti senąjį adresą (nerekomenduojama naudoti v2 onion paslaugos)",
+ "mode_settings_client_auth_checkbox": "Naudoti kliento autorizavimą",
+ "mode_settings_share_autostop_sharing_checkbox": "Sustabdyti dalijimąsi po to, kai failai buvo išsiųsti (atžymėkite, jei norite leisti atsisiųsti atskirus failus)",
"mode_settings_receive_data_dir_label": "Įrašyti failus į",
"mode_settings_receive_data_dir_browse_button": "Naršyti",
- "mode_settings_website_disable_csp_checkbox": "",
+ "mode_settings_website_disable_csp_checkbox": "Nesiųskite turinio saugumo politikos antraštės (leidžia jūsų svetainei naudoti trečiųjų šalių išteklius)",
"gui_file_selection_remove_all": "Šalinti visus",
"gui_remove": "Šalinti",
"gui_qr_code_dialog_title": "OnionShare QR kodas",
"gui_show_url_qr_code": "Rodyti QR kodą",
- "gui_open_folder_error": "Nepavyko atverti aplanko naudojant xdg-open. Failas yra čia: {}"
+ "gui_open_folder_error": "Nepavyko atverti aplanko naudojant xdg-open. Failas yra čia: {}",
+ "gui_chat_stop_server": "Sustabdyti pokalbių serverį",
+ "gui_chat_start_server": "Pradėti pokalbių serverį",
+ "history_receive_read_message_button": "Skaityti žinutę",
+ "mode_settings_title_label": "Pasirinktinis pavadinimas",
+ "gui_main_page_chat_button": "Pradėti pokalbį",
+ "gui_main_page_receive_button": "Pradėti gavimą",
+ "gui_main_page_share_button": "Pradėti dalintis",
+ "gui_new_tab_chat_button": "Kalbėtis anonimiškai",
+ "gui_status_indicator_chat_scheduled": "Suplanuota…",
+ "gui_status_indicator_chat_working": "Pradedama…",
+ "gui_tab_name_chat": "Pokalbiai",
+ "gui_tab_name_website": "Tinklalapis",
+ "gui_tab_name_receive": "Gauti",
+ "gui_tab_name_share": "Dalintis",
+ "gui_receive_flatpak_data_dir": "Kadangi „OnionShare“ įdiegėte naudodami „Flatpak“, turite išsaugoti failus aplanke, esančiame ~/OnionShare.",
+ "mode_settings_receive_webhook_url_checkbox": "Naudoti pranešimų webhook",
+ "gui_main_page_website_button": "Pradėti talpinimą",
+ "gui_status_indicator_chat_started": "Kalbamasi",
+ "gui_status_indicator_chat_stopped": "Paruošta pokalbiui",
+ "gui_color_mode_changed_notice": "Iš naujo paleiskite „OnionShare“, kad būtų pritaikytas naujas spalvų režimas.",
+ "mode_settings_receive_disable_files_checkbox": "Išjungti failų įkėlimą",
+ "mode_settings_receive_disable_text_checkbox": "Išjungti teksto pateikimą",
+ "gui_rendezvous_cleanup": "Laukiama, kol užsidarys „Tor“ grandinės, kad įsitikintume, jog jūsų failai sėkmingai perkelti.\n\nTai gali užtrukti kelias minutes.",
+ "gui_rendezvous_cleanup_quit_early": "Išeiti anksčiau",
+ "error_port_not_available": "„OnionShare“ prievadas nepasiekiamas",
+ "gui_chat_url_description": "<b>Kiekvienas</b>, turintis šį „OnionShare“ adresą, gali <b>prisijungti prie šio pokalbių kambario</b> naudodamas <b>„Tor“ naršyklę</b>: <img src='{}' />"
}
diff --git a/desktop/src/onionshare/resources/locale/nb_NO.json b/desktop/src/onionshare/resources/locale/nb_NO.json
index 54db60df..f2ee1477 100644
--- a/desktop/src/onionshare/resources/locale/nb_NO.json
+++ b/desktop/src/onionshare/resources/locale/nb_NO.json
@@ -118,7 +118,7 @@
"settings_error_bundled_tor_timeout": "Det tar for lang tid å koble til Tor. Kanskje du ikke er koblet til Internett, eller har du kanskje en unøyaktig systemklokke?",
"settings_error_bundled_tor_broken": "OnionShare kunne ikke koble til Tor i bakgrunnen:\n{}",
"settings_test_success": "Koblet til Tor-kontrolleren.\n\nTor-versjon: {}.\nStøtter flyktige løk-tjenester: {}.\nStøtter klientidentifisering: {}.\nStøtter nestegenerasjons .onion-adresser: {}.",
- "error_tor_protocol_error": "Feil med Tor: {}",
+ "error_tor_protocol_error": "Det oppsto en feil med Tor: {}",
"error_tor_protocol_error_unknown": "Ukjent feil med Tor",
"error_invalid_private_key": "Denne private nøkkeltypen er ikke støttet",
"connecting_to_tor": "Kobler til Tor-nettverket",
@@ -296,5 +296,10 @@
"error_port_not_available": "OnionShare-port ikke tilgjengelig",
"gui_rendezvous_cleanup_quit_early": "Avslutt tidlig",
"gui_rendezvous_cleanup": "Venter på at Tor-kretsene lukkes for å være sikker på at filene dine er overført.\n\nDette kan ta noen minutter.",
- "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus."
+ "gui_color_mode_changed_notice": "Start OnionShare på nytt for å bruke nytt fargemodus.",
+ "history_receive_read_message_button": "Les melding",
+ "mode_settings_receive_webhook_url_checkbox": "Bruk varsling webhook",
+ "mode_settings_receive_disable_files_checkbox": "Deaktiver opplasting av filer",
+ "mode_settings_receive_disable_text_checkbox": "Deaktiver innsending av tekst",
+ "mode_settings_title_label": "Egendefinert tittel"
}
diff --git a/desktop/src/onionshare/resources/locale/nl.json b/desktop/src/onionshare/resources/locale/nl.json
index 2b5ced73..32e8f204 100644
--- a/desktop/src/onionshare/resources/locale/nl.json
+++ b/desktop/src/onionshare/resources/locale/nl.json
@@ -26,7 +26,7 @@
"help_verbose": "Log OnionShare fouten naar stdout, en web fouten naar disk",
"help_filename": "Lijst van bestanden of mappen om te delen",
"help_config": "Instelbaar pad naar JSON configuratie bestand (optioneel)",
- "gui_drag_and_drop": "Sleep en zet\nbestanden hier neer om het delen te starten",
+ "gui_drag_and_drop": "Sleep bestanden hier naar toe om het delen te starten",
"gui_add": "Toevoegen",
"gui_delete": "Verwijder",
"gui_choose_items": "Kies",
@@ -75,7 +75,7 @@
"gui_settings_button_help": "Help",
"gui_settings_autostop_timer": "Stop het delen om:",
"settings_saved": "Instellingen opgeslagen in {}",
- "settings_error_unknown": "Kan geen verbinding maken met de Tor controller omdat je instellingen nergens op slaan.",
+ "settings_error_unknown": "Kan geen verbinding maken met de Tor controller, omdat je instellingen nergens op slaan.",
"settings_error_automatic": "Kon geen verbinding maken met de Tor controller. Draait Tor Browser (beschikbaar via torproject.org) in de achtergrond?",
"settings_error_socket_port": "Kan geen verbinding maken met de Tor controller op {}:{}.",
"settings_error_socket_file": "Kan geen verbinding maken met de Tor controller via socket bestand {}.",
@@ -88,9 +88,9 @@
"settings_test_success": "Verbonden met de Tor controller.\n\nTor versie: {}\nOndersteunt ephemeral onion services: {}.\nOndersteunt client authentication: {}.\nOndersteunt next-gen .onion addresses: {}.",
"error_tor_protocol_error": "Er was een fout met Tor: {}",
"connecting_to_tor": "Verbinden met het Tor netwerk",
- "update_available": "Nieuwe OnionShare is uitgekomen. <a href='{}'>Klik hier</a> om hem te krijgen.<br><br>Jij gebruikt {} and de laatste is {}.",
- "update_error_check_error": "Kon niet controleren op een nieuwe versie: de OnionShare website meldt dat de laatste versie de onherkenbare is '{}' is…",
- "update_error_invalid_latest_version": "Kon niet controleren op een nieuwe versie: Wellicht ben je niet met Tor verbonden, of de OnionShare website is niet beschikbaar?",
+ "update_available": "Nieuwe OnionShare is uitgekomen. <a href='{}'>Klik hier</a> om hem te krijgen.<br><br>Jij gebruikt {} en de laatste is {}.",
+ "update_error_check_error": "Kon niet controleren op een nieuwe versie: Wellicht ben je niet met Tor verbonden, of de OnionShare website is niet beschikbaar?",
+ "update_error_invalid_latest_version": "Kon niet controleren op een nieuwe versie: de OnionShare website meldt dat de laatste versie de onherkenbare is '{}' is…",
"update_not_available": "Je draait de laatst beschikbare OnionShare.",
"gui_tor_connection_ask": "Open de instellingen om het verbindingsprobleem met Tor op te lossen?",
"gui_tor_connection_ask_open_settings": "Ja",
@@ -139,7 +139,7 @@
"gui_use_legacy_v2_onions_checkbox": "Gebruik ouderwetse adressen",
"gui_save_private_key_checkbox": "Gebruik een vast adres",
"gui_share_url_description": "<b>1Iedereen</b>2 met dit OnionShare-adres kan je bestanden <b>3binnenhalen</b>4 met de <b>5Tor Browser</b>6: <img src='{}' />",
- "gui_receive_url_description": "<b>1Iedereen</b>2 met dit OnionShare adres kan bestanden op je computer <b>3plaatsen</b>4 met de <b>5Tor Browser</b>6: <img src='{}' />7",
+ "gui_receive_url_description": "<b>Iedereen</b> met dit OnionShare adres kan bestanden op je computer <b>plaatsen</b> met de <b>Tor Browser</b>: <img src='{}' />",
"gui_url_label_persistent": "Deze share stopt niet vanzelf. <br><br>Elke volgende share zal het adres hergebruiken. (Om eenmalige adressen te gebruiken, zet \"Gebruik vast adres\" uit in de settings.)",
"gui_url_label_stay_open": "Deze share stopt niet automatisch.",
"gui_url_label_onetime": "Deze share stopt na de eerste voltooiïng.",
@@ -262,10 +262,10 @@
"mode_settings_client_auth_checkbox": "Gebruik client authorisatie",
"mode_settings_autostop_timer_checkbox": "Stop onion service op een geplande tijd",
"mode_settings_autostart_timer_checkbox": "Start onion service op een geplande tijd",
- "mode_settings_persistent_checkbox": "Bewaar dit tabblad, en open het automatisch wanneer ik OnionShare open",
+ "mode_settings_persistent_checkbox": "Bewaar dit tabblad en open het automatisch wanneer ik OnionShare open",
"gui_quit_warning_description": "Delen is actief op sommige van uw tabbladen. Als u stopt, worden al uw tabbladen gesloten. Weet u zeker dat u wilt stoppen?",
"gui_close_tab_warning_website_description": "U host actief een website. Weet u zeker dat u dit tabblad wilt sluiten?",
- "gui_close_tab_warning_persistent_description": "Dit tabblad is pertinent. Als je het sluit, verlies je het onion adres dat wordt gebruikt. Weet u zeker dat u het wilt sluiten?",
+ "gui_close_tab_warning_persistent_description": "Dit tabblad heeft een vast onion adres. Als je het tabblad sluit wordt het gebruikte onion adres opgeheven. Weet je zeker dat je dit wil sluiten?",
"gui_tab_name_chat": "Chat",
"gui_tab_name_website": "Website",
"gui_tab_name_receive": "Ontvang",
@@ -286,5 +286,19 @@
"gui_chat_stop_server": "Stop chat server",
"gui_chat_start_server": "Start chat server",
"gui_file_selection_remove_all": "Alles verwijderen",
- "gui_remove": "Verwijderen"
+ "gui_remove": "Verwijderen",
+ "gui_rendezvous_cleanup": "Wachten op Tor circuits om af te sluiten, om zeker te stellen dat je bestanden succesvol zijn verplaatst\n\nDit kan enkele minuten duren.",
+ "mode_settings_receive_disable_text_checkbox": "Schakel het versturen van tekst uit",
+ "mode_settings_receive_disable_files_checkbox": "Schakel uploaden bestanden uit",
+ "mode_settings_receive_webhook_url_checkbox": "Gebruik notificatie webhook",
+ "gui_rendezvous_cleanup_quit_early": "Vervroegd afsluiten",
+ "error_port_not_available": "OnionShare poort is niet beschikbaar",
+ "history_receive_read_message_button": "Lees bericht",
+ "gui_chat_url_description": "<b>Iedereen</b> met dit OnionShare adres kan<b>in deze chatkamer aansluiten </b> met de <b>Tor Browser</b>: <img src='{}' />",
+ "mode_settings_title_label": "Handmatige titel",
+ "gui_status_indicator_chat_working": "Starten…",
+ "gui_status_indicator_chat_started": "in gesprek",
+ "gui_status_indicator_chat_scheduled": "Ingepland…",
+ "gui_color_mode_changed_notice": "Herstart OnionShare om de nieuwe kleur toe te passen.",
+ "gui_status_indicator_chat_stopped": "Klaar om te chatten"
}
diff --git a/desktop/src/onionshare/resources/locale/pl.json b/desktop/src/onionshare/resources/locale/pl.json
index b44e5e13..2ef34565 100644
--- a/desktop/src/onionshare/resources/locale/pl.json
+++ b/desktop/src/onionshare/resources/locale/pl.json
@@ -7,10 +7,10 @@
"give_this_url_receive_stealth": "Przekaż ten adres i linijkę HidServAuth do nadawcy:",
"ctrlc_to_stop": "Przyciśnij kombinację klawiszy Ctrl i C aby zatrzymać serwer",
"not_a_file": "{0:s} nie jest prawidłowym plikiem.",
- "not_a_readable_file": "{0:s} nie jest plikiem do odczytu.",
+ "not_a_readable_file": "Nie można odczytać {0:s}.",
"no_available_port": "Nie można znaleźć dostępnego portu aby włączyć usługę onion",
"other_page_loaded": "Adres został wczytany",
- "close_on_autostop_timer": "Zatrzymano, ponieważ czasomierz automatycznego zatrzymania wygasł",
+ "close_on_autostop_timer": "Zatrzymano, ponieważ upłynął czas automatycznego zatrzymania",
"closing_automatically": "Zatrzymano, ponieważ transfer został zakończony",
"timeout_download_still_running": "Czekam na ukończenie pobierania",
"large_filesize": "Uwaga: Wysyłanie dużego pliku może zająć kilka godzin",
@@ -283,5 +283,8 @@
"gui_close_tab_warning_share_description": "Jesteś w trakcie wysyłania plików. Czy na pewno chcesz zamknąć tę kartę?",
"gui_close_tab_warning_persistent_description": "Ta zakładka jest trwała. Jeśli ją zamkniesz, stracisz adres cebulowy, którego używa. Czy na pewno chcesz ją zamknąć?",
"gui_color_mode_changed_notice": "Uruchom ponownie OnionShare aby zastosować nowy tryb kolorów.",
- "gui_chat_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b>dołączyć do tego pokoju</b> używając <b>Przeglądarki Tor</b>: <img src='{}' />"
+ "gui_chat_url_description": "<b>Każdy</b> z tym adresem OnionShare może <b>dołączyć do tego pokoju</b> używając <b>Przeglądarki Tor</b>: <img src='{}' />",
+ "mode_settings_receive_disable_files_checkbox": "Wyłącz wysyłanie plików",
+ "gui_status_indicator_chat_scheduled": "Zaplanowane…",
+ "gui_status_indicator_chat_working": "Uruchamianie…"
}
diff --git a/desktop/src/onionshare/resources/locale/pt_BR.json b/desktop/src/onionshare/resources/locale/pt_BR.json
index 5ea5c5ce..bc7fe0c7 100644
--- a/desktop/src/onionshare/resources/locale/pt_BR.json
+++ b/desktop/src/onionshare/resources/locale/pt_BR.json
@@ -286,5 +286,15 @@
"error_port_not_available": "Porta OnionShare não disponível",
"gui_chat_url_description": "<b>Qualquer um</b> com este endereço OnionShare pode <b>entrar nesta sala de chat</b> usando o <b>Tor Browser</b>: <img src='{}' />",
"gui_rendezvous_cleanup_quit_early": "Fechar facilmente",
- "gui_rendezvous_cleanup": "Aguardando o fechamento dos circuitos do Tor para ter certeza de que seus arquivos foram transferidos com sucesso.\n\nIsso pode demorar alguns minutos."
+ "gui_rendezvous_cleanup": "Aguardando o fechamento dos circuitos do Tor para ter certeza de que seus arquivos foram transferidos com sucesso.\n\nIsso pode demorar alguns minutos.",
+ "gui_color_mode_changed_notice": "Reinicie o OnionShare para que o novo modo de cor seja aplicado.",
+ "history_receive_read_message_button": "Ler mensagem",
+ "mode_settings_receive_webhook_url_checkbox": "Usar webhook de notificação",
+ "mode_settings_receive_disable_files_checkbox": "Desativar o carregamento de arquivos",
+ "mode_settings_receive_disable_text_checkbox": "Desativar envio de texto",
+ "mode_settings_title_label": "Título personalizado",
+ "gui_status_indicator_chat_started": "Conversando",
+ "gui_status_indicator_chat_scheduled": "Programando…",
+ "gui_status_indicator_chat_working": "Começando…",
+ "gui_status_indicator_chat_stopped": "Pronto para conversar"
}
diff --git a/desktop/src/onionshare/resources/locale/ru.json b/desktop/src/onionshare/resources/locale/ru.json
index 6205acca..47e7e4d1 100644
--- a/desktop/src/onionshare/resources/locale/ru.json
+++ b/desktop/src/onionshare/resources/locale/ru.json
@@ -126,7 +126,7 @@
"settings_error_bundled_tor_timeout": "Подключение к Tor занимает слишком много времени. Возможно, отсутствует подключение к сети Интернет, или у вас неточно настроено системное время?",
"settings_error_bundled_tor_broken": "Ошибка подключения OnionShare к Tor в фоновом режиме:\n{}",
"settings_test_success": "Подключено к контроллеру Tor.\n\nВерсия Tor: {}\nПоддержка временных \"луковых\" сервисов: {}.\nПоддержка аутентификации клиента: {}.\nПоддержка адресов .onion следующего поколения: {}.",
- "error_tor_protocol_error": "Ошибка Tor: {}",
+ "error_tor_protocol_error": "Была обнаружена ошибка Tor: {}",
"error_tor_protocol_error_unknown": "Неизвестная ошибка Tor",
"error_invalid_private_key": "Этот приватный ключ не поддерживается",
"connecting_to_tor": "Подключение к сети Tor",
@@ -283,5 +283,14 @@
"gui_rendezvous_cleanup_quit_early": "Выйти Раньше",
"gui_rendezvous_cleanup": "Ожидается завершение соединений с сетью Tor для подтверждения успешной отправки ваших файлов.\n\nЭто может занять несколько минут.",
"gui_color_mode_changed_notice": "Перезапустите OnionShare чтобы изменения цветовой гаммы вступили в силу.",
- "gui_chat_url_description": "<b>Каждый</b> у кого есть этот адрес OnionShare может <b>присоединиться к этому чату</b> при помощи <b>Tor Browser</b>: <img src='{}' />"
+ "gui_chat_url_description": "<b>Каждый</b> у кого есть этот адрес OnionShare может <b>присоединиться к этому чату</b> при помощи <b>Tor Browser</b>: <img src='{}' />",
+ "history_receive_read_message_button": "Прочитать сообщение",
+ "mode_settings_receive_webhook_url_checkbox": "Использовать веб-хук для отправки уведомлений",
+ "mode_settings_receive_disable_files_checkbox": "Запретить передачу файлов",
+ "mode_settings_receive_disable_text_checkbox": "Запретить отправку текста",
+ "mode_settings_title_label": "Собственное название",
+ "gui_status_indicator_chat_started": "Чат активен",
+ "gui_status_indicator_chat_scheduled": "По расписанию…",
+ "gui_status_indicator_chat_working": "Запуск…",
+ "gui_status_indicator_chat_stopped": "Готов начать чат"
}
diff --git a/desktop/src/onionshare/resources/locale/si.json b/desktop/src/onionshare/resources/locale/si.json
new file mode 100644
index 00000000..b55cde27
--- /dev/null
+++ b/desktop/src/onionshare/resources/locale/si.json
@@ -0,0 +1,195 @@
+{
+ "not_a_readable_file": "",
+ "other_page_loaded": "",
+ "incorrect_password": "",
+ "close_on_autostop_timer": "",
+ "closing_automatically": "",
+ "large_filesize": "",
+ "gui_drag_and_drop": "",
+ "gui_add": "එකතු කරන්න",
+ "gui_add_files": "",
+ "gui_add_folder": "",
+ "gui_remove": "ඉවත් කරන්න",
+ "gui_file_selection_remove_all": "",
+ "gui_choose_items": "",
+ "gui_share_start_server": "",
+ "gui_share_stop_server": "",
+ "gui_share_stop_server_autostop_timer": "",
+ "gui_chat_start_server": "",
+ "gui_chat_stop_server": "",
+ "gui_stop_server_autostop_timer_tooltip": "",
+ "gui_start_server_autostart_timer_tooltip": "",
+ "gui_receive_start_server": "",
+ "gui_receive_stop_server": "",
+ "gui_receive_stop_server_autostop_timer": "",
+ "gui_receive_flatpak_data_dir": "",
+ "gui_copy_url": "",
+ "gui_copy_hidservauth": "",
+ "gui_canceled": "",
+ "gui_copied_url_title": "",
+ "gui_copied_url": "",
+ "gui_copied_hidservauth_title": "",
+ "gui_copied_hidservauth": "",
+ "gui_show_url_qr_code": "",
+ "gui_qr_code_dialog_title": "",
+ "gui_waiting_to_start": "",
+ "gui_please_wait": "",
+ "error_rate_limit": "",
+ "zip_progress_bar_format": "",
+ "gui_settings_window_title": "",
+ "gui_settings_autoupdate_label": "",
+ "gui_settings_autoupdate_option": "",
+ "gui_settings_autoupdate_timestamp": "",
+ "gui_settings_autoupdate_timestamp_never": "",
+ "gui_settings_autoupdate_check_button": "",
+ "gui_settings_connection_type_label": "",
+ "gui_settings_connection_type_bundled_option": "",
+ "gui_settings_connection_type_automatic_option": "",
+ "gui_settings_connection_type_control_port_option": "",
+ "gui_settings_connection_type_socket_file_option": "",
+ "gui_settings_connection_type_test_button": "",
+ "gui_settings_control_port_label": "",
+ "gui_settings_socket_file_label": "",
+ "gui_settings_socks_label": "",
+ "gui_settings_authenticate_label": "",
+ "gui_settings_authenticate_no_auth_option": "",
+ "gui_settings_authenticate_password_option": "",
+ "gui_settings_password_label": "",
+ "gui_settings_tor_bridges": "",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "",
+ "gui_settings_tor_bridges_obfs4_radio_option": "",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
+ "gui_settings_meek_lite_expensive_warning": "",
+ "gui_settings_tor_bridges_custom_radio_option": "",
+ "gui_settings_tor_bridges_custom_label": "",
+ "gui_settings_tor_bridges_invalid": "",
+ "gui_settings_button_save": "",
+ "gui_settings_button_cancel": "",
+ "gui_settings_button_help": "",
+ "settings_test_success": "",
+ "connecting_to_tor": "",
+ "update_available": "",
+ "update_error_invalid_latest_version": "",
+ "update_error_check_error": "",
+ "update_not_available": "",
+ "gui_tor_connection_ask": "",
+ "gui_tor_connection_ask_open_settings": "",
+ "gui_tor_connection_ask_quit": "",
+ "gui_tor_connection_error_settings": "",
+ "gui_tor_connection_canceled": "",
+ "gui_tor_connection_lost": "",
+ "gui_server_started_after_autostop_timer": "",
+ "gui_server_autostop_timer_expired": "",
+ "gui_server_autostart_timer_expired": "",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "",
+ "share_via_onionshare": "",
+ "gui_share_url_description": "",
+ "gui_website_url_description": "",
+ "gui_receive_url_description": "",
+ "gui_chat_url_description": "",
+ "gui_url_label_persistent": "",
+ "gui_url_label_stay_open": "",
+ "gui_url_label_onetime": "",
+ "gui_url_label_onetime_and_persistent": "",
+ "gui_status_indicator_share_stopped": "",
+ "gui_status_indicator_share_working": "",
+ "gui_status_indicator_share_scheduled": "",
+ "gui_status_indicator_share_started": "",
+ "gui_status_indicator_receive_stopped": "",
+ "gui_status_indicator_receive_working": "",
+ "gui_status_indicator_receive_scheduled": "",
+ "gui_status_indicator_receive_started": "",
+ "gui_file_info": "",
+ "gui_file_info_single": "",
+ "history_in_progress_tooltip": "",
+ "history_completed_tooltip": "",
+ "history_requests_tooltip": "",
+ "error_cannot_create_data_dir": "",
+ "gui_receive_mode_warning": "",
+ "gui_open_folder_error": "",
+ "gui_settings_language_label": "",
+ "gui_settings_language_changed_notice": "",
+ "gui_color_mode_changed_notice": "",
+ "systray_menu_exit": "",
+ "systray_page_loaded_title": "",
+ "systray_page_loaded_message": "",
+ "systray_share_started_title": "",
+ "systray_share_started_message": "",
+ "systray_share_completed_title": "",
+ "systray_share_completed_message": "",
+ "systray_share_canceled_title": "",
+ "systray_share_canceled_message": "",
+ "systray_receive_started_title": "",
+ "systray_receive_started_message": "",
+ "gui_all_modes_history": "",
+ "gui_all_modes_clear_history": "",
+ "gui_all_modes_transfer_started": "",
+ "gui_all_modes_progress_complete": "",
+ "gui_all_modes_progress_starting": "",
+ "gui_all_modes_progress_eta": "",
+ "gui_share_mode_no_files": "",
+ "gui_share_mode_autostop_timer_waiting": "",
+ "gui_website_mode_no_files": "",
+ "gui_receive_mode_no_files": "",
+ "gui_receive_mode_autostop_timer_waiting": "",
+ "days_first_letter": "",
+ "hours_first_letter": "",
+ "minutes_first_letter": "",
+ "seconds_first_letter": "",
+ "gui_new_tab": "",
+ "gui_new_tab_tooltip": "",
+ "gui_new_tab_share_button": "",
+ "gui_new_tab_receive_button": "",
+ "gui_new_tab_website_button": "",
+ "gui_new_tab_chat_button": "",
+ "gui_main_page_share_button": "",
+ "gui_main_page_receive_button": "",
+ "gui_main_page_website_button": "",
+ "gui_main_page_chat_button": "",
+ "gui_tab_name_share": "",
+ "gui_tab_name_receive": "",
+ "gui_tab_name_website": "",
+ "gui_tab_name_chat": "",
+ "gui_close_tab_warning_title": "",
+ "gui_close_tab_warning_persistent_description": "",
+ "gui_close_tab_warning_share_description": "",
+ "gui_close_tab_warning_receive_description": "",
+ "gui_close_tab_warning_website_description": "",
+ "gui_close_tab_warning_close": "",
+ "gui_close_tab_warning_cancel": "",
+ "gui_quit_warning_title": "",
+ "gui_quit_warning_description": "",
+ "gui_quit_warning_quit": "",
+ "gui_quit_warning_cancel": "",
+ "mode_settings_advanced_toggle_show": "",
+ "mode_settings_advanced_toggle_hide": "",
+ "mode_settings_persistent_checkbox": "",
+ "mode_settings_public_checkbox": "",
+ "mode_settings_autostart_timer_checkbox": "",
+ "mode_settings_autostop_timer_checkbox": "",
+ "mode_settings_legacy_checkbox": "",
+ "mode_settings_client_auth_checkbox": "",
+ "mode_settings_share_autostop_sharing_checkbox": "",
+ "mode_settings_receive_data_dir_label": "",
+ "mode_settings_receive_data_dir_browse_button": "",
+ "mode_settings_website_disable_csp_checkbox": "",
+ "gui_all_modes_transfer_finished_range": "",
+ "gui_all_modes_transfer_finished": "",
+ "gui_all_modes_transfer_canceled_range": "",
+ "gui_all_modes_transfer_canceled": "",
+ "settings_error_unknown": "",
+ "settings_error_automatic": "",
+ "settings_error_socket_port": "",
+ "settings_error_socket_file": "",
+ "settings_error_auth": "",
+ "settings_error_missing_password": "",
+ "settings_error_unreadable_cookie_file": "",
+ "settings_error_bundled_tor_not_supported": "",
+ "settings_error_bundled_tor_timeout": "",
+ "settings_error_bundled_tor_broken": "",
+ "gui_rendezvous_cleanup": "",
+ "gui_rendezvous_cleanup_quit_early": "",
+ "error_port_not_available": ""
+}
diff --git a/desktop/src/onionshare/resources/locale/sr_Latn.json b/desktop/src/onionshare/resources/locale/sr_Latn.json
index 18dfad44..d94fe024 100644
--- a/desktop/src/onionshare/resources/locale/sr_Latn.json
+++ b/desktop/src/onionshare/resources/locale/sr_Latn.json
@@ -7,7 +7,7 @@
"close_on_autostop_timer": "Prekid rada zato što je isteklo vreme na auto-stop tajmeru",
"closing_automatically": "Prekid rada zato što je prenos završen",
"large_filesize": "Upozorenje: Slanje velikih fajlova može trajati satima",
- "gui_drag_and_drop": "Prevuci i otpusti datoteke i fascikle\nda bi započeo deljenje",
+ "gui_drag_and_drop": "Prevuci i otpusti datoteke i fascikle da bi započeo deljenje",
"gui_add": "Dodaj",
"gui_add_files": "Dodaj datoteke",
"gui_add_folder": "Dodat fascikle",
@@ -99,8 +99,8 @@
"error_tor_protocol_error_unknown": "Došlo je do nepoznate greške sa Torom",
"connecting_to_tor": "Povezivanje sa Tor mrežom",
"update_available": "Novi OnionShare objavljen. <a href='{}'>Klikni ovde</a> da bi ga dobio.<br><br>Trenutno koristiš {} a najnoviji je {}.",
- "update_error_check_error": "Nije moguće proveriti novu verziju: na sajtu OnionShare piše da je najnovija verzija neprepoznatljiva ' {} '…",
- "update_error_invalid_latest_version": "Nije moguće proveriti novu verziju: možda niste povezani sa Torom ili je sajt OnionShare oboren?",
+ "update_error_check_error": "Nije moguće proveriti novu verziju: Mođda nije povezana na Tor, ili sajt OnionShare ne radi?",
+ "update_error_invalid_latest_version": "Nije moguće proveriti novu verziju: Sajt OnionShare kaže da poslednja verzija nije prepoznata '{}'…",
"update_not_available": "Da li koristite najnoviji OnionShare.",
"gui_tor_connection_ask": "Da li otvoriti podešavanja da biste podesili vezu sa Torom?",
"gui_tor_connection_ask_open_settings": "Da",
@@ -179,5 +179,54 @@
"days_first_letter": "d",
"hours_first_letter": "h",
"minutes_first_letter": "m",
- "seconds_first_letter": "s"
+ "seconds_first_letter": "s",
+ "gui_rendezvous_cleanup_quit_early": "Prestani",
+ "gui_rendezvous_cleanup": "Čekajući da se Tor čvorovi zatvore da bi bili sigurni da su vaši fajlovi uspešno preneti.\n\nOvo može trajati nekoliko minuta.",
+ "error_port_not_available": "OnionShare port nije dostupan",
+ "mode_settings_website_disable_csp_checkbox": "Ne šaljite zaglavlje smernica za bezbednost sadržaja (omogućava vašem veb sajtu da koristi nezavisne resurse)",
+ "mode_settings_share_autostop_sharing_checkbox": "Zaustavite deljenje nakon slanja fajlova (uklonite oznaku da bi omogućili preuzimanje pojedinačnih fajlova)",
+ "gui_quit_warning_description": "Deljenje je aktivno u nekim vašim jezičcima. Ako želite napustiti, svi važi jezičci će biti zatvoreni. Da li ste sigurni da želite napustiti?",
+ "gui_close_tab_warning_website_description": "Aktivno hostujete veb sajt. Da li ste sigurni da želite da zatvorite ovaj jezičak?",
+ "gui_close_tab_warning_receive_description": "U procesu ste primanja fajlova. Da li ste sigurni da želite da zatvorite ovaj jezičak?",
+ "gui_close_tab_warning_share_description": "U procesu ste slanja fajlova. Da li ste sigurni da želite zatvoriti ovaj jezičak?",
+ "gui_close_tab_warning_persistent_description": "Ovaj jezičak je postojan. Ako ga zatvorite, izgubićete onion adresu koju koristite. Da li ste sigurni da želite zatvoriti?",
+ "mode_settings_receive_data_dir_browse_button": "Pronađi",
+ "mode_settings_receive_data_dir_label": "Sačuvaj fajlove u",
+ "mode_settings_client_auth_checkbox": "Koristi klijentsku autorizaciju",
+ "mode_settings_legacy_checkbox": "Koristite zastarelu adresu (v2 onion servis, nije preporučeno)",
+ "mode_settings_autostop_timer_checkbox": "Zaustavi onion servis u planirano vreme",
+ "mode_settings_autostart_timer_checkbox": "Pokreni onion servis u planirano vreme",
+ "mode_settings_public_checkbox": "Ne koristi lozinku",
+ "mode_settings_persistent_checkbox": "Sačuvaj ovaj jezičak i automatski ga otvori kada otvorim OnionShare",
+ "gui_quit_warning_cancel": "Otkaži",
+ "gui_close_tab_warning_cancel": "Otkaži",
+ "mode_settings_advanced_toggle_hide": "Sakrij napredne postavke",
+ "mode_settings_advanced_toggle_show": "Prikaži napredne postavke",
+ "gui_quit_warning_title": "Da li ste sigurni?",
+ "gui_close_tab_warning_close": "Zatvori",
+ "gui_close_tab_warning_title": "Da li ste sigurni?",
+ "gui_tab_name_chat": "Ćaskanje",
+ "gui_tab_name_website": "Veb sajt",
+ "gui_tab_name_receive": "Prijem",
+ "gui_tab_name_share": "Deli",
+ "gui_main_page_chat_button": "Pokreni ćaskanje",
+ "gui_new_tab_website_button": "Hosting veb sajta",
+ "gui_main_page_website_button": "Pokreni hosting",
+ "gui_main_page_receive_button": "Pokreni primanje",
+ "gui_main_page_share_button": "Pokreni deljenje",
+ "gui_new_tab_chat_button": "Anonimno ćaskanje",
+ "gui_new_tab_receive_button": "Primanje fajlova",
+ "gui_new_tab_share_button": "Deli fajlove",
+ "gui_new_tab_tooltip": "Otvori novi jezičak",
+ "gui_new_tab": "Novi jezičak",
+ "gui_color_mode_changed_notice": "Ponovo pokrenite OnionShare da bi primenili novi režim boja.",
+ "gui_open_folder_error": "Neuspelo otvaranje fascikle sa xdg-open. Fajl je ovde: {}",
+ "gui_chat_url_description": "<b>Bilo ko</b> sa ovom OnionShare adresom može <b>pristupiti ovoj sobi za ćaskawe</b> koristeći <b>Tor pregledač</b>: <img src='{}' />",
+ "gui_qr_code_dialog_title": "OnionShare QR kod",
+ "gui_show_url_qr_code": "Prikaži QR kod",
+ "gui_receive_flatpak_data_dir": "Pošto ste instalirali OnionShare koristeći Flatpak, morate čuvati fajlove u falcikli ~/OnionShare.",
+ "gui_chat_stop_server": "Zaustavi server za ćaskanje",
+ "gui_chat_start_server": "Pokreni server za ćaskanje",
+ "gui_file_selection_remove_all": "Ukloni sve",
+ "gui_remove": "Ukloni"
}
diff --git a/desktop/src/onionshare/resources/locale/sv.json b/desktop/src/onionshare/resources/locale/sv.json
index 1e2b951f..a3c97704 100644
--- a/desktop/src/onionshare/resources/locale/sv.json
+++ b/desktop/src/onionshare/resources/locale/sv.json
@@ -118,7 +118,7 @@
"settings_error_bundled_tor_timeout": "Det tar för lång tid att ansluta till Tor. Kanske är du inte ansluten till Internet, eller har en felaktig systemklocka?",
"settings_error_bundled_tor_broken": "OnionShare kunde inte ansluta till Tor:\n{}",
"settings_test_success": "Ansluten till Tor-regulatorn.\n\nTor-version: {}\nStöder efemära onion-tjänster: {}.\nStöder klientautentisering: {}.\nStöder nästa generations .onion-adresser: {}.",
- "error_tor_protocol_error": "Det fanns ett fel med Tor: {}",
+ "error_tor_protocol_error": "Det uppstod ett fel med Tor: {}",
"error_tor_protocol_error_unknown": "Det fanns ett okänt fel med Tor",
"error_invalid_private_key": "Denna privata nyckeltyp stöds inte",
"connecting_to_tor": "Ansluter till Tor-nätverket",
@@ -126,7 +126,7 @@
"update_error_check_error": "Det gick inte att söka efter ny version: Kanske är du inte ansluten till Tor eller OnionShare-webbplatsen är nere?",
"update_error_invalid_latest_version": "Det gick inte att söka efter ny version: OnionShare-webbplatsen säger att den senaste versionen är den oigenkännliga \"{}\"…",
"update_not_available": "Du kör den senaste OnionShare.",
- "gui_tor_connection_ask": "Öppna inställningarna för att sortera ut anslutning till Tor?",
+ "gui_tor_connection_ask": "Öppna inställningarna för att reda ut anslutning till Tor?",
"gui_tor_connection_ask_open_settings": "Ja",
"gui_tor_connection_ask_quit": "Avsluta",
"gui_tor_connection_error_settings": "Försök att ändra hur OnionShare ansluter till Tor-nätverket i inställningarna.",
@@ -219,7 +219,7 @@
"gui_settings_autostart_timer_checkbox": "Använd automatisk start-tidtagare",
"gui_settings_autostart_timer": "Starta delning vid:",
"gui_server_autostart_timer_expired": "Den schemalagda tiden har redan passerat. Vänligen justera den för att starta delning.",
- "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än den automatiska starttiden. Vänligen justera den för att starta delning.",
+ "gui_autostop_timer_cant_be_earlier_than_autostart_timer": "Den automatiska stopp-tiden kan inte vara samma eller tidigare än den automatiska starttiden. Vänligen justera den för att starta delning.",
"gui_status_indicator_share_scheduled": "Planerad…",
"gui_status_indicator_receive_scheduled": "Planerad…",
"days_first_letter": "d",
@@ -242,17 +242,17 @@
"systray_individual_file_downloaded_message": "Individuell fil {} visad",
"gui_settings_website_label": "Webbplatsinställningar",
"gui_settings_csp_header_disabled_option": "Inaktivera rubriken för innehållssäkerhetspolicy",
- "gui_close_tab_warning_persistent_description": "Den här fliken är beständig. Om du stänger den förlorar du onion-adressen som den använder. Är du säker på att du vill stänga den?",
+ "gui_close_tab_warning_persistent_description": "Denna flik är beständig. Om du stänger den förlorar du onion-adressen som den använder. Är du säker på att du vill stänga den?",
"mode_settings_website_disable_csp_checkbox": "Inaktivera rubriken för innehållssäkerhetspolicy (tillåter din webbplats att använda resurser från tredje part)",
"mode_settings_receive_data_dir_browse_button": "Bläddra",
"mode_settings_receive_data_dir_label": "Spara filer till",
"mode_settings_share_autostop_sharing_checkbox": "Stoppa delning efter att filer har skickats (avmarkera för att tillåta hämtning av enskilda filer)",
"mode_settings_client_auth_checkbox": "Använd klientauktorisering",
- "mode_settings_legacy_checkbox": "Använd en äldre adress (v2 oniontjänst, rekommenderas inte)",
+ "mode_settings_legacy_checkbox": "Använd en äldre adress (v2-oniontjänst, rekommenderas inte)",
"mode_settings_autostart_timer_checkbox": "Starta oniontjänsten vid schemalagd tid",
"mode_settings_autostop_timer_checkbox": "Stoppa oniontjänsten vid schemalagd tid",
"mode_settings_public_checkbox": "Använd inte ett lösenord",
- "mode_settings_persistent_checkbox": "Spara den här fliken och öppna den automatiskt när jag öppnar OnionShare",
+ "mode_settings_persistent_checkbox": "Spara denna flik och öppna den automatiskt när jag öppnar OnionShare",
"mode_settings_advanced_toggle_hide": "Dölj avancerade inställningar",
"mode_settings_advanced_toggle_show": "Visa avancerade inställningar",
"gui_quit_warning_cancel": "Avbryt",
@@ -260,9 +260,9 @@
"gui_quit_warning_title": "Är du säker?",
"gui_close_tab_warning_cancel": "Avbryt",
"gui_close_tab_warning_close": "Stäng",
- "gui_close_tab_warning_website_description": "Du är aktivt värd för en webbplats. Är du säker på att du vill stänga den här fliken?",
- "gui_close_tab_warning_receive_description": "Du håller på att ta emot filer. Är du säker på att du vill stänga den här fliken?",
- "gui_close_tab_warning_share_description": "Du håller på att skicka filer. Är du säker på att du vill stänga den här fliken?",
+ "gui_close_tab_warning_website_description": "Du är aktivt värd för en webbplats. Är du säker på att du vill stänga denna flik?",
+ "gui_close_tab_warning_receive_description": "Du håller på att ta emot filer. Är du säker på att du vill stänga denna flik?",
+ "gui_close_tab_warning_share_description": "Du håller på att skicka filer. Är du säker på att du vill stänga denna flik?",
"gui_close_tab_warning_title": "Är du säker?",
"gui_new_tab_website_description": "Var värd till en statisk HTML-onionwebbplats från din dator.",
"gui_new_tab_website_button": "Publicera webbplats",
@@ -280,18 +280,28 @@
"gui_chat_start_server": "Starta chattservern",
"gui_file_selection_remove_all": "Ta bort alla",
"gui_remove": "Ta bort",
- "gui_main_page_share_button": "Börja dela",
+ "gui_main_page_share_button": "Starta delning",
"error_port_not_available": "OnionShare-porten är inte tillgänglig",
"gui_rendezvous_cleanup_quit_early": "Avsluta tidigt",
"gui_rendezvous_cleanup": "Väntar på att Tor-kretsar stänger för att vara säker på att dina filer har överförts.\n\nDet kan ta några minuter.",
- "gui_tab_name_chat": "Chatta",
+ "gui_tab_name_chat": "Chatt",
"gui_tab_name_website": "Webbplats",
"gui_tab_name_receive": "Ta emot",
"gui_tab_name_share": "Dela",
"gui_main_page_chat_button": "Börja chatta",
"gui_main_page_website_button": "Börja publicera",
- "gui_main_page_receive_button": "Börja ta emot",
+ "gui_main_page_receive_button": "Starta mottagning",
"gui_new_tab_chat_button": "Chatta anonymt",
- "gui_open_folder_error": "Misslyckades att öppna mappen med xdg-open. Filen finns här: {}",
- "gui_chat_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>gå med i detta chattrum</b> med <b>Tor Browser</b>: <img src='{}' />"
+ "gui_open_folder_error": "Det gick inte att öppna mappen med xdg-open. Filen finns här: {}",
+ "gui_chat_url_description": "<b>Alla</b> med denna OnionShare-adress kan <b>gå med i detta chattrum</b> med <b>Tor Browser</b>: <img src='{}' />",
+ "gui_status_indicator_chat_stopped": "Redo att chatta",
+ "gui_status_indicator_chat_scheduled": "Schemalagd…",
+ "history_receive_read_message_button": "Läs meddelandet",
+ "mode_settings_receive_webhook_url_checkbox": "Använd aviseringswebhook",
+ "mode_settings_receive_disable_files_checkbox": "Inaktivera uppladdning av filer",
+ "mode_settings_receive_disable_text_checkbox": "Inaktivera att skicka text",
+ "mode_settings_title_label": "Anpassad titel",
+ "gui_color_mode_changed_notice": "Starta om OnionShare för att det nya färgläget ska tillämpas.",
+ "gui_status_indicator_chat_started": "Chattar",
+ "gui_status_indicator_chat_working": "Startar…"
}
diff --git a/desktop/src/onionshare/resources/locale/tr.json b/desktop/src/onionshare/resources/locale/tr.json
index d3d09298..e00c3aba 100644
--- a/desktop/src/onionshare/resources/locale/tr.json
+++ b/desktop/src/onionshare/resources/locale/tr.json
@@ -5,17 +5,17 @@
"not_a_file": "{0:s} dosya değil.",
"other_page_loaded": "Adres yüklendi",
"closing_automatically": "Aktarım tamamlandığından durduruldu",
- "large_filesize": "Uyarı: Büyük bir paylaşma göndermek saatler sürebilir",
+ "large_filesize": "Uyarı: Büyük bir paylaşım saatler sürebilir",
"help_local_only": "Tor kullanmayın (sadece geliştirme için)",
"help_stay_open": "Dosyalar gönderildikten sonra paylaşmaya devam et",
"help_debug": "OnionShare hatalarını stdout'a ve web hatalarını diske yaz",
"help_filename": "Paylaşmak için dosya ve klasörler listesi",
- "gui_drag_and_drop": "Paylaşmaya başlamak için dosya ve klasörleri sürükleyip bırakın",
+ "gui_drag_and_drop": "Paylaşıma başlamak için dosya ve klasörleri sürükleyip bırakın",
"gui_add": "Ekle",
"gui_delete": "Sil",
"gui_choose_items": "Seç",
"gui_share_start_server": "Paylaşmaya başla",
- "gui_share_stop_server": "Paylaşmayı durdur",
+ "gui_share_stop_server": "Paylaşımı durdur",
"gui_copy_url": "Adresi Kopyala",
"gui_downloads": "İndirilenler:",
"gui_canceled": "İptal edilen",
@@ -33,9 +33,9 @@
"help_stealth": "İstemci yetkilendirmesini kullan (gelişmiş)",
"help_receive": "Paylaşımı göndermek yerine, almak",
"help_config": "Özel JSON config dosyası konumu (isteğe bağlı)",
- "gui_add_files": "Dosya Ekle",
- "gui_add_folder": "Klasör Ekle",
- "gui_share_stop_server_autostop_timer": "Paylaşmayı Durdur ({})",
+ "gui_add_files": "Dosya ekle",
+ "gui_add_folder": "Klasör ekle",
+ "gui_share_stop_server_autostop_timer": "Paylaşımı Durdur ({})",
"gui_share_stop_server_autostop_timer_tooltip": "Otomatik durdurma zamanlayıcısı {} sonra biter",
"gui_receive_start_server": "Alma Modunu Başlat",
"gui_receive_stop_server": "Alma Modunu Durdur",
@@ -106,7 +106,7 @@
"settings_error_bundled_tor_timeout": "Tor bağlantısının kurulması gecikiyor. İnternet bağlantınız kesik ya da sistem saatiniz hatalı olabilir mi?",
"settings_error_bundled_tor_broken": "OnionShare, Tor ile bağlantı kuramadı:\n{}",
"settings_test_success": "Tor denetleyicisi ile bağlantı kuruldu.\n\nTor sürümü: {}\nGeçici onion hizmetleri desteği: {}.\nİstemci kimlik doğrulaması desteği: {}.\nYeni nesil .onion adresleri desteği: {}.",
- "error_tor_protocol_error": "Tor ile ilgili bir sorun çıktı: {}",
+ "error_tor_protocol_error": "Tor ile ilgili bir hata oluştu: {}",
"error_tor_protocol_error_unknown": "Tor ile ilgili bilinmeyen bir sorun çıktı",
"error_invalid_private_key": "Bu özel anahtar türü desteklenmiyor",
"connecting_to_tor": "Tor ağı ile bağlantı kuruluyor",
@@ -237,8 +237,8 @@
"gui_new_tab_tooltip": "Yeni bir sekme aç",
"gui_new_tab": "Yeni Sekme",
"gui_remove": "Kaldır",
- "gui_file_selection_remove_all": "Tümünü Kaldır",
- "gui_chat_start_server": "Sohbet sunucusu başlat",
+ "gui_file_selection_remove_all": "Tümünü kaldır",
+ "gui_chat_start_server": "Sohbet sunucusunu başlat",
"gui_chat_stop_server": "Sohbet sunucusunu durdur",
"gui_receive_flatpak_data_dir": "OnionShare'i Flatpak kullanarak kurduğunuz için, dosyaları ~/OnionShare içindeki bir klasöre kaydetmelisiniz.",
"gui_show_url_qr_code": "QR Kodu Göster",
@@ -258,5 +258,14 @@
"error_port_not_available": "OnionShare bağlantı noktası kullanılamıyor",
"gui_rendezvous_cleanup_quit_early": "Erken Çık",
"gui_rendezvous_cleanup": "Dosyalarınızın başarıyla aktarıldığından emin olmak için Tor devrelerinin kapanması bekleniyor.\n\nBu, birkaç dakika sürebilir.",
- "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın."
+ "gui_color_mode_changed_notice": "Yeni renk modunun uygulanması için OnionShare'i yeniden başlatın.",
+ "history_receive_read_message_button": "Mesajı Oku",
+ "mode_settings_receive_webhook_url_checkbox": "Bildirim web kancası kullan",
+ "mode_settings_receive_disable_files_checkbox": "Dosya yüklemeyi devre dışı bırak",
+ "mode_settings_receive_disable_text_checkbox": "Metin göndermeyi devre dışı bırak",
+ "mode_settings_title_label": "Özel başlık",
+ "gui_status_indicator_chat_started": "Sohbet ediliyor",
+ "gui_status_indicator_chat_scheduled": "Zamanlandı…",
+ "gui_status_indicator_chat_working": "Başlatılıyor…",
+ "gui_status_indicator_chat_stopped": "Sohbet etmeye hazır"
}
diff --git a/desktop/src/onionshare/resources/locale/uk.json b/desktop/src/onionshare/resources/locale/uk.json
index 0cd71586..cf971be0 100644
--- a/desktop/src/onionshare/resources/locale/uk.json
+++ b/desktop/src/onionshare/resources/locale/uk.json
@@ -60,7 +60,7 @@
"gui_settings_control_port_label": "Порт керування",
"gui_settings_socket_file_label": "Файл сокета",
"gui_settings_socks_label": "SOCKS порт",
- "gui_settings_authenticate_label": "Параметри автентифікації Tor",
+ "gui_settings_authenticate_label": "Налаштування автентифікації Tor",
"gui_settings_authenticate_no_auth_option": "Без автентифікації або автентифікація через cookie",
"gui_settings_authenticate_password_option": "Пароль",
"gui_settings_password_label": "Пароль",
@@ -92,14 +92,14 @@
"settings_error_bundled_tor_timeout": "Надто довге з'єднання з Tor. Можливо, відсутнє з'єднання з Інтернетом або у вас неточний системний час?",
"settings_error_bundled_tor_broken": "OnionShare не вдалося з'єднатися з Tor:\n{}",
"settings_test_success": "З'єднано з контролером Tor.\n\nВерсія Tor: {}\nПідтримка ephemeral onion services: {}.\nПідтримка автентифікації клієнта: {}.\nПідтримка .onion адрес наступного покоління: {}.",
- "error_tor_protocol_error": "Сталася помилка з Tor: {}",
+ "error_tor_protocol_error": "Сталася помилка Tor: {}",
"error_tor_protocol_error_unknown": "Сталася невідома помилка з Tor",
"connecting_to_tor": "З'єднання з мережею Tor",
"update_available": "Випущено новий OnionShare. <a href='{}'>Натисніть тут,</a> щоб його отримати.<br><br>Ваша версія {}, а найновіша {}.",
"update_error_check_error": "Не вдалося перевірити наявність нових версій: можливо, ви не під'єднані до Tor або вебсайт OnionShare не працює?",
"update_error_invalid_latest_version": "Не вдалося перевірити наявність нової версії: вебсайт OnionShare повідомляє, що не вдалося розпізнати найновішу версію '{}'…",
"update_not_available": "У вас найновіша версія OnionShare.",
- "gui_tor_connection_ask": "Відкрити параметри для перевірки з'єднання з Tor?",
+ "gui_tor_connection_ask": "Відкрити налаштування для перевірки з'єднання з Tor?",
"gui_tor_connection_ask_open_settings": "Так",
"gui_tor_connection_ask_quit": "Вийти",
"gui_tor_connection_error_settings": "Спробуйте змінити в параметрах, як OnionShare з'єднується з мережею Tor.",
@@ -132,7 +132,7 @@
"history_in_progress_tooltip": "{} в процесі",
"history_completed_tooltip": "{} завершено",
"error_cannot_create_data_dir": "Не вдалося створити теку даних OnionShare: {}",
- "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо впевнені в своїх діях.</b>",
+ "gui_receive_mode_warning": "Режим отримання дозволяє завантажувати файли до вашого комп'ютера.<br><br><b>Деякі файли, потенційно, можуть заволодіти вашим комп'ютером, у разі їх відкриття. Відкривайте файли лише від довірених осіб, або якщо ви впевнені у своїх діях.</b>",
"gui_mode_share_button": "Поділитися файлами",
"gui_mode_receive_button": "Отримання Файлів",
"gui_settings_receiving_label": "Параметри отримання",
@@ -233,5 +233,14 @@
"error_port_not_available": "Порт OnionShare недоступний",
"gui_rendezvous_cleanup_quit_early": "Вийти раніше",
"gui_rendezvous_cleanup": "Очікування закриття схем Tor, щоб переконатися, що файли успішно передано.\n\nЦе може тривати кілька хвилин.",
- "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим."
+ "gui_color_mode_changed_notice": "Перезапустіть OnionShare, щоб застосувати новий колірний режим.",
+ "mode_settings_receive_webhook_url_checkbox": "Застосовувати мережні обробники сповіщень",
+ "history_receive_read_message_button": "Читати повідомлення",
+ "mode_settings_receive_disable_files_checkbox": "Вимкнути передавання файлів",
+ "mode_settings_receive_disable_text_checkbox": "Вимкнути надсилання тексту",
+ "mode_settings_title_label": "Власний заголовок",
+ "gui_status_indicator_chat_scheduled": "Заплановано…",
+ "gui_status_indicator_chat_started": "Спілкування",
+ "gui_status_indicator_chat_working": "Початок…",
+ "gui_status_indicator_chat_stopped": "Готовий до спілкування"
}
diff --git a/desktop/src/onionshare/resources/locale/yo.json b/desktop/src/onionshare/resources/locale/yo.json
index 96b5a0d1..fdd6dbea 100644
--- a/desktop/src/onionshare/resources/locale/yo.json
+++ b/desktop/src/onionshare/resources/locale/yo.json
@@ -7,14 +7,14 @@
"give_this_url_receive_stealth": "",
"ctrlc_to_stop": "",
"not_a_file": "",
- "not_a_readable_file": "",
+ "not_a_readable_file": "{0:s} je oun ti a ko le ka.",
"no_available_port": "",
- "other_page_loaded": "",
- "close_on_autostop_timer": "",
- "closing_automatically": "",
+ "other_page_loaded": "Adiresi ti wole",
+ "close_on_autostop_timer": "O danuduro nitori akoko idaduro aifowoyi ti pe",
+ "closing_automatically": "Odanuduro nitori o ti fi ranse tan",
"timeout_download_still_running": "",
"timeout_upload_still_running": "",
- "large_filesize": "",
+ "large_filesize": "Ikilo: Fi fi nkan repete ranse le gba aimoye wakati",
"systray_menu_exit": "",
"systray_download_started_title": "",
"systray_download_started_message": "",
@@ -32,16 +32,16 @@
"help_verbose": "",
"help_filename": "",
"help_config": "",
- "gui_drag_and_drop": "",
- "gui_add": "",
+ "gui_drag_and_drop": "Wo awon iwe pelebe ati apamowo re sibi lati bere sini fi ranse",
+ "gui_add": "Fikun",
"gui_delete": "",
- "gui_choose_items": "",
- "gui_share_start_server": "",
- "gui_share_stop_server": "",
- "gui_share_stop_server_autostop_timer": "",
+ "gui_choose_items": "Yan",
+ "gui_share_start_server": "Bere si ni pin",
+ "gui_share_stop_server": "Dawo pinpin duro",
+ "gui_share_stop_server_autostop_timer": "Dawo pinpin duro ({})",
"gui_share_stop_server_autostop_timer_tooltip": "",
- "gui_receive_start_server": "",
- "gui_receive_stop_server": "",
+ "gui_receive_start_server": "Bere ipele gbigba",
+ "gui_receive_stop_server": "Duro ipele gbigba",
"gui_receive_stop_server_autostop_timer": "",
"gui_receive_stop_server_autostop_timer_tooltip": "",
"gui_copy_url": "",
@@ -181,5 +181,14 @@
"gui_download_in_progress": "",
"gui_open_folder_error_nautilus": "",
"gui_settings_language_label": "",
- "gui_settings_language_changed_notice": ""
+ "gui_settings_language_changed_notice": "",
+ "gui_start_server_autostart_timer_tooltip": "Akoko ti nbere laifowoyi duro ni {}",
+ "gui_stop_server_autostop_timer_tooltip": "Akoko ti nduro laifowoyi dopin ni {}",
+ "gui_chat_stop_server": "Da olupin iregbe duro",
+ "gui_chat_start_server": "Bere olupin iregbe",
+ "gui_file_selection_remove_all": "Yo gbogbo re kuro",
+ "gui_remove": "Yokuro",
+ "gui_add_folder": "S'afikun folda",
+ "gui_add_files": "S'afikun faili",
+ "incorrect_password": "Ashiko oro igbaniwole"
}
diff --git a/desktop/src/onionshare/resources/locale/zh_Hans.json b/desktop/src/onionshare/resources/locale/zh_Hans.json
index a37d0c58..d14b5754 100644
--- a/desktop/src/onionshare/resources/locale/zh_Hans.json
+++ b/desktop/src/onionshare/resources/locale/zh_Hans.json
@@ -285,5 +285,15 @@
"gui_chat_url_description": "<b>任何</b>有这个OnionShare地址的人均可 <b>加入这个聊天室</b>,方法是使用<b>Tor浏览器</b>:<img src='{}' />",
"gui_rendezvous_cleanup_quit_early": "提前退出",
"gui_rendezvous_cleanup": "等待Tor电路关闭,以确保文件传输成功。\n\n这可能需要几分钟。",
- "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。"
+ "gui_color_mode_changed_notice": "要使即将应用的新色彩模式生效,请重启 OnionShare.。",
+ "history_receive_read_message_button": "读取消息",
+ "mode_settings_receive_webhook_url_checkbox": "使用通知 webhook",
+ "mode_settings_receive_disable_files_checkbox": "禁用上传文件",
+ "mode_settings_receive_disable_text_checkbox": "禁用提交文本",
+ "mode_settings_title_label": "自定义标题",
+ "gui_status_indicator_chat_started": "正在聊天",
+ "gui_status_indicator_chat_scheduled": "已安排…",
+ "gui_status_indicator_chat_working": "启动中…",
+ "gui_status_indicator_chat_stopped": "准备好聊天",
+ "gui_please_wait_no_button": "启动中…"
}
diff --git a/desktop/src/onionshare/settings_dialog.py b/desktop/src/onionshare/settings_dialog.py
index 3f913bcd..e8d2752c 100644
--- a/desktop/src/onionshare/settings_dialog.py
+++ b/desktop/src/onionshare/settings_dialog.py
@@ -19,13 +19,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2.QtCore import Slot,Qt
+from PySide2.QtGui import QPalette, QColor
import sys
import platform
import datetime
import re
import os
-
-from onionshare_cli import common
from onionshare_cli.settings import Settings
from onionshare_cli.onion import (
Onion,
@@ -47,11 +47,7 @@ from onionshare_cli.onion import (
from . import strings
from .widgets import Alert
from .update_checker import (
- UpdateCheckerCheckError,
- UpdateCheckerInvalidLatestVersion,
- UpdateChecker,
- UpdateThread,
-)
+ UpdateThread)
from .tor_connection_dialog import TorConnectionDialog
from .gui_common import GuiCommon
@@ -129,6 +125,20 @@ class SettingsDialog(QtWidgets.QDialog):
language_layout.addWidget(self.language_combobox)
language_layout.addStretch()
+ #Theme Settings
+ theme_label = QtWidgets.QLabel(strings._("gui_settings_theme_label"))
+ self.theme_combobox = QtWidgets.QComboBox()
+ theme_choices = [
+ strings._("gui_settings_theme_auto"),
+ strings._("gui_settings_theme_light"),
+ strings._("gui_settings_theme_dark")
+ ]
+ self.theme_combobox.addItems(theme_choices)
+ theme_layout = QtWidgets.QHBoxLayout()
+ theme_layout.addWidget(theme_label)
+ theme_layout.addWidget(self.theme_combobox)
+ theme_layout.addStretch()
+
# Connection type: either automatic, control port, or socket file
# Bundled Tor
@@ -457,6 +467,8 @@ class SettingsDialog(QtWidgets.QDialog):
layout.addSpacing(20)
layout.addLayout(language_layout)
layout.addSpacing(20)
+ layout.addLayout(theme_layout)
+ layout.addSpacing(20)
layout.addStretch()
layout.addLayout(buttons_layout)
@@ -483,6 +495,9 @@ class SettingsDialog(QtWidgets.QDialog):
locale_index = self.language_combobox.findData(locale)
self.language_combobox.setCurrentIndex(locale_index)
+ theme_choice = self.old_settings.get("theme")
+ self.theme_combobox.setCurrentIndex(theme_choice)
+
connection_type = self.old_settings.get("connection_type")
if connection_type == "bundled":
if self.connection_type_bundled_radio.isEnabled():
@@ -828,6 +843,12 @@ class SettingsDialog(QtWidgets.QDialog):
notice = strings._("gui_settings_language_changed_notice")
Alert(self.common, notice, QtWidgets.QMessageBox.Information)
+
+ # If color mode changed, inform user they need to restart OnionShare
+ if changed(settings, self.old_settings, ["theme"]):
+ notice = strings._("gui_color_mode_changed_notice")
+ Alert(self.common, notice, QtWidgets.QMessageBox.Information)
+
# Save the new settings
settings.save()
@@ -937,6 +958,10 @@ class SettingsDialog(QtWidgets.QDialog):
settings = Settings(self.common)
settings.load() # To get the last update timestamp
+ # Theme
+ theme_index = self.theme_combobox.currentIndex()
+ settings.set("theme",theme_index)
+
# Language
locale_index = self.language_combobox.currentIndex()
locale = self.language_combobox.itemData(locale_index)
diff --git a/desktop/src/onionshare/strings.py b/desktop/src/onionshare/strings.py
index a3db202c..c4192a33 100644
--- a/desktop/src/onionshare/strings.py
+++ b/desktop/src/onionshare/strings.py
@@ -18,7 +18,6 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import json
-import locale
import os
strings = {}
diff --git a/desktop/src/onionshare/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py
index 0cbccc51..aeecaf66 100644
--- a/desktop/src/onionshare/tab/mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/__init__.py
@@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-from PySide2 import QtCore, QtWidgets, QtGui
+from PySide2 import QtCore, QtWidgets
from onionshare_cli.common import AutoStopTimer
@@ -158,9 +158,16 @@ class Mode(QtWidgets.QWidget):
)
)
else:
- self.server_status.server_button.setText(
- strings._("gui_please_wait")
- )
+ if self.common.platform == "Windows" or self.settings.get(
+ "general", "autostart_timer"
+ ):
+ self.server_status.server_button.setText(
+ strings._("gui_please_wait")
+ )
+ else:
+ self.server_status.server_button.setText(
+ strings._("gui_please_wait_no_button")
+ )
# If the auto-stop timer has stopped, stop the server
if self.server_status.status == ServerStatus.STATUS_STARTED:
@@ -354,14 +361,19 @@ class Mode(QtWidgets.QWidget):
self.app.onion.scheduled_key = None
self.app.onion.scheduled_auth_cookie = None
self.startup_thread.quit()
- if self.onion_thread:
- self.common.log("Mode", "cancel_server: quitting onion thread")
- self.onion_thread.terminate()
- self.onion_thread.wait()
- if self.web_thread:
- self.common.log("Mode", "cancel_server: quitting web thread")
- self.web_thread.terminate()
- self.web_thread.wait()
+
+ # Canceling only works in Windows
+ # https://github.com/onionshare/onionshare/issues/1371
+ if self.common.platform == "Windows":
+ if self.onion_thread:
+ self.common.log("Mode", "cancel_server: quitting onion thread")
+ self.onion_thread.terminate()
+ self.onion_thread.wait()
+ if self.web_thread:
+ self.common.log("Mode", "cancel_server: quitting web thread")
+ self.web_thread.terminate()
+ self.web_thread.wait()
+
self.stop_server()
def cancel_server_custom(self):
@@ -379,10 +391,10 @@ class Mode(QtWidgets.QWidget):
if self.server_status.status != ServerStatus.STATUS_STOPPED:
try:
self.web.stop(self.app.port)
- except:
+ except Exception:
# Probably we had no port to begin with (Onion service didn't start)
pass
- self.app.cleanup()
+ self.web.cleanup()
self.stop_server_custom()
@@ -447,12 +459,24 @@ class Mode(QtWidgets.QWidget):
"""
pass
+ def handle_request_upload_includes_message(self, event):
+ """
+ Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event.
+ """
+ pass
+
def handle_request_upload_file_renamed(self, event):
"""
Handle REQUEST_UPLOAD_FILE_RENAMED event.
"""
pass
+ def handle_request_upload_message(self, event):
+ """
+ Handle REQUEST_UPLOAD_MESSAGE event.
+ """
+ pass
+
def handle_request_upload_set_dir(self, event):
"""
Handle REQUEST_UPLOAD_SET_DIR event.
diff --git a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
index 2312a64e..fe3e69f1 100644
--- a/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/chat_mode/__init__.py
@@ -18,19 +18,13 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-import os
-import random
-import string
-
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
-from onionshare_cli.common import Common
from onionshare_cli.web import Web
from .. import Mode
from .... import strings
-from ....widgets import MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -68,6 +62,11 @@ class ChatMode(Mode):
self.image = QtWidgets.QWidget()
self.image.setLayout(image_layout)
+ # Set title placeholder
+ self.mode_settings_widget.title_lineedit.setPlaceholderText(
+ strings._("gui_tab_name_chat")
+ )
+
# Server status
self.server_status.set_mode("chat")
self.server_status.server_started_finished.connect(self.update_primary_action)
@@ -83,17 +82,16 @@ class ChatMode(Mode):
# Top bar
top_bar_layout = QtWidgets.QHBoxLayout()
- top_bar_layout.addStretch()
+ # Add space at the top, same height as the toggle history bar in other modes
+ top_bar_layout.addWidget(MinimumSizeWidget(0, 30))
# Main layout
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addLayout(top_bar_layout)
- self.main_layout.addStretch()
self.main_layout.addWidget(header_label)
- self.main_layout.addWidget(self.primary_action)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addStretch()
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/mode/file_selection.py b/desktop/src/onionshare/tab/mode/file_selection.py
index e9604ec5..302f07b9 100644
--- a/desktop/src/onionshare/tab/mode/file_selection.py
+++ b/desktop/src/onionshare/tab/mode/file_selection.py
@@ -72,8 +72,8 @@ class DropHereWidget(QtWidgets.QWidget):
def resize(self, w, h):
self.setGeometry(0, 0, w, h)
self.image_label.setGeometry(0, 0, w, h - 100)
- self.header_label.setGeometry(0, 310, w, h - 380)
- self.text_label.setGeometry(0, 360, w, h - 400)
+ self.header_label.setGeometry(0, 290, w, h - 360)
+ self.text_label.setGeometry(0, 340, w, h - 380)
class DropCountLabel(QtWidgets.QLabel):
diff --git a/desktop/src/onionshare/tab/mode/history.py b/desktop/src/onionshare/tab/mode/history.py
index 45e37c75..091905f7 100644
--- a/desktop/src/onionshare/tab/mode/history.py
+++ b/desktop/src/onionshare/tab/mode/history.py
@@ -148,6 +148,7 @@ class ShareHistoryItem(HistoryItem):
# Change the label
self.label.setText(self.get_finished_label_text(self.started_dt))
+ self.label.setStyleSheet(self.common.gui.css["history_default_label"])
self.status = HistoryItem.STATUS_FINISHED
else:
@@ -253,7 +254,7 @@ class ReceiveHistoryItemFile(QtWidgets.QWidget):
try:
# If nautilus is available, open it
subprocess.Popen(["xdg-open", self.dir])
- except:
+ except Exception:
Alert(
self.common,
strings._("gui_open_folder_error").format(abs_filename),
@@ -268,6 +269,60 @@ class ReceiveHistoryItemFile(QtWidgets.QWidget):
subprocess.Popen(["explorer", f"/select,{abs_filename}"])
+class ReceiveHistoryItemMessage(QtWidgets.QWidget):
+ def __init__(
+ self,
+ common,
+ ):
+ super(ReceiveHistoryItemMessage, self).__init__()
+ self.common = common
+ self.filename = None
+
+ # Read message button
+ message_pixmap = QtGui.QPixmap.fromImage(
+ QtGui.QImage(GuiCommon.get_resource_path("images/open_message.png"))
+ )
+ message_icon = QtGui.QIcon(message_pixmap)
+ self.message_button = QtWidgets.QPushButton(
+ strings._("history_receive_read_message_button")
+ )
+ self.message_button.setStyleSheet(self.common.gui.css["receive_message_button"])
+ self.message_button.clicked.connect(self.open_message)
+ self.message_button.setIcon(message_icon)
+ self.message_button.setIconSize(message_pixmap.rect().size())
+
+ # Layouts
+ layout = QtWidgets.QHBoxLayout()
+ layout.addWidget(self.message_button)
+ layout.addStretch()
+ self.setLayout(layout)
+
+ self.hide()
+
+ def set_filename(self, new_filename):
+ self.filename = new_filename
+ self.show()
+
+ def open_message(self):
+ """
+ Open the message in the operating system's default text editor
+ """
+ self.common.log("ReceiveHistoryItemMessage", "open_message", self.filename)
+
+ # Linux
+ if self.common.platform == "Linux" or self.common.platform == "BSD":
+ # If nautilus is available, open it
+ subprocess.Popen(["xdg-open", self.filename])
+
+ # macOS
+ elif self.common.platform == "Darwin":
+ subprocess.call(["open", self.filename])
+
+ # Windows
+ elif self.common.platform == "Windows":
+ subprocess.Popen(["notepad", self.filename])
+
+
class ReceiveHistoryItem(HistoryItem):
def __init__(self, common, id, content_length):
super(ReceiveHistoryItem, self).__init__()
@@ -277,6 +332,12 @@ class ReceiveHistoryItem(HistoryItem):
self.started = datetime.now()
self.status = HistoryItem.STATUS_STARTED
+ self.common.log(
+ "ReceiveHistoryItem",
+ "__init__",
+ f"id={self.id} content_length={self.content_length}",
+ )
+
# Label
self.label = QtWidgets.QLabel(
strings._("gui_all_modes_transfer_started").format(
@@ -295,6 +356,9 @@ class ReceiveHistoryItem(HistoryItem):
self.common.gui.css["downloads_uploads_progress_bar"]
)
+ # The message widget, if a message was included
+ self.message = ReceiveHistoryItemMessage(self.common)
+
# This layout contains file widgets
self.files_layout = QtWidgets.QVBoxLayout()
self.files_layout.setContentsMargins(0, 0, 0, 0)
@@ -305,6 +369,7 @@ class ReceiveHistoryItem(HistoryItem):
# Layout
layout = QtWidgets.QVBoxLayout()
layout.addWidget(self.label)
+ layout.addWidget(self.message)
layout.addWidget(self.progress_bar)
layout.addWidget(files_widget)
layout.addStretch()
@@ -313,6 +378,9 @@ class ReceiveHistoryItem(HistoryItem):
# We're also making a dictionary of file widgets, to make them easier to access
self.files = {}
+ def includes_message(self, message_filename):
+ self.message.set_filename(message_filename)
+
def update(self, data):
"""
Using the progress from Web, update the progress bar and file size labels
@@ -372,6 +440,7 @@ class ReceiveHistoryItem(HistoryItem):
# Change the label
self.label.setText(self.get_finished_label_text(self.started))
+ self.label.setStyleSheet(self.common.gui.css["history_default_label"])
elif data["action"] == "canceled":
# Change the status
@@ -412,6 +481,7 @@ class IndividualFileHistoryItem(HistoryItem):
self.common.gui.css["history_individual_file_timestamp_label"]
)
self.path_label = QtWidgets.QLabel(self.path)
+ self.path_label.setStyleSheet(self.common.gui.css["history_default_label"])
self.status_code_label = QtWidgets.QLabel()
# Progress bar
@@ -560,6 +630,13 @@ class HistoryItemList(QtWidgets.QScrollArea):
if id in self.items:
self.items[id].cancel()
+ def includes_message(self, id, message_filename):
+ """
+ Show message button for receive mode
+ """
+ if id in self.items:
+ self.items[id].includes_message(message_filename)
+
def reset(self):
"""
Reset all items, emptying the list. Override this method.
@@ -637,6 +714,7 @@ class History(QtWidgets.QWidget):
self.not_empty_layout.addLayout(header_layout)
self.not_empty_layout.addWidget(self.item_list)
self.not_empty = QtWidgets.QWidget()
+ self.not_empty.setStyleSheet(self.common.gui.css["downloads_uploads_not_empty"])
self.not_empty.setLayout(self.not_empty_layout)
# Layout
@@ -653,7 +731,7 @@ class History(QtWidgets.QWidget):
"""
Add a new item.
"""
- self.common.log("History", "add", f"id: {id}, item: {item}")
+ self.common.log("History", "add", f"id: {id}")
# Hide empty, show not empty
self.empty.hide()
@@ -674,6 +752,12 @@ class History(QtWidgets.QWidget):
"""
self.item_list.cancel(id)
+ def includes_message(self, id, message_filename):
+ """
+ Show the message button
+ """
+ self.item_list.includes_message(id, message_filename)
+
def reset(self):
"""
Reset all items.
diff --git a/desktop/src/onionshare/tab/mode/mode_settings_widget.py b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
index a3a315c9..9f55dbaf 100644
--- a/desktop/src/onionshare/tab/mode/mode_settings_widget.py
+++ b/desktop/src/onionshare/tab/mode/mode_settings_widget.py
@@ -23,7 +23,7 @@ from PySide2 import QtCore, QtWidgets
from ... import strings
-class ModeSettingsWidget(QtWidgets.QWidget):
+class ModeSettingsWidget(QtWidgets.QScrollArea):
"""
All of the common settings for each mode are in this widget
"""
@@ -57,6 +57,16 @@ class ModeSettingsWidget(QtWidgets.QWidget):
else:
self.public_checkbox.setCheckState(QtCore.Qt.Unchecked)
+ # Title
+ title_label = QtWidgets.QLabel(strings._("mode_settings_title_label"))
+ self.title_lineedit = QtWidgets.QLineEdit()
+ self.title_lineedit.editingFinished.connect(self.title_editing_finished)
+ if self.settings.get("general", "title"):
+ self.title_lineedit.setText(self.settings.get("general", "title"))
+ title_layout = QtWidgets.QHBoxLayout()
+ title_layout.addWidget(title_label)
+ title_layout.addWidget(self.title_lineedit)
+
# Whether or not to use an auto-start timer
self.autostart_timer_checkbox = QtWidgets.QCheckBox()
self.autostart_timer_checkbox.clicked.connect(
@@ -152,6 +162,7 @@ class ModeSettingsWidget(QtWidgets.QWidget):
# Advanced group itself
advanced_layout = QtWidgets.QVBoxLayout()
advanced_layout.setContentsMargins(0, 0, 0, 0)
+ advanced_layout.addLayout(title_layout)
advanced_layout.addLayout(autostart_timer_layout)
advanced_layout.addLayout(autostop_timer_layout)
advanced_layout.addWidget(self.legacy_checkbox)
@@ -166,7 +177,15 @@ class ModeSettingsWidget(QtWidgets.QWidget):
layout.addWidget(self.public_checkbox)
layout.addWidget(self.advanced_widget)
layout.addWidget(self.toggle_advanced_button)
- self.setLayout(layout)
+ layout.addStretch()
+ main_widget = QtWidgets.QWidget()
+ main_widget.setLayout(layout)
+
+ self.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
+ self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
+ self.setWidgetResizable(True)
+ self.setFrameShape(QtWidgets.QFrame.NoFrame)
+ self.setWidget(main_widget)
self.update_ui()
@@ -203,6 +222,33 @@ class ModeSettingsWidget(QtWidgets.QWidget):
self.legacy_checkbox.hide()
self.client_auth_checkbox.hide()
+ def title_editing_finished(self):
+ if self.title_lineedit.text().strip() == "":
+ self.title_lineedit.setText("")
+ self.settings.set("general", "title", None)
+ if self.tab.mode == self.common.gui.MODE_SHARE:
+ self.tab.change_title.emit(
+ self.tab.tab_id, strings._("gui_tab_name_share")
+ )
+ elif self.tab.mode == self.common.gui.MODE_RECEIVE:
+ self.tab.change_title.emit(
+ self.tab.tab_id, strings._("gui_tab_name_receive")
+ )
+ elif self.tab.mode == self.common.gui.MODE_WEBSITE:
+ self.tab.change_title.emit(
+ self.tab.tab_id, strings._("gui_tab_name_website")
+ )
+ elif self.tab.mode == self.common.gui.MODE_CHAT:
+ self.tab.change_title.emit(
+ self.tab.tab_id, strings._("gui_tab_name_chat")
+ )
+ elif self.tab_mode is None:
+ pass
+ else:
+ title = self.title_lineedit.text()
+ self.settings.set("general", "title", title)
+ self.tab.change_title.emit(self.tab.tab_id, title)
+
def persistent_checkbox_clicked(self):
self.settings.set("persistent", "enabled", self.persistent_checkbox.isChecked())
self.settings.set("persistent", "mode", self.tab.mode)
diff --git a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
index 8a848128..d07b5ffc 100644
--- a/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/receive_mode/__init__.py
@@ -26,7 +26,7 @@ from onionshare_cli.web import Web
from ..history import History, ToggleHistory, ReceiveHistoryItem
from .. import Mode
from .... import strings
-from ....widgets import MinimumWidthWidget, Alert
+from ....widgets import MinimumSizeWidget, Alert
from ....gui_common import GuiCommon
@@ -60,6 +60,8 @@ class ReceiveMode(Mode):
self.image.setLayout(image_layout)
# Settings
+
+ # Data dir
data_dir_label = QtWidgets.QLabel(
strings._("mode_settings_receive_data_dir_label")
)
@@ -74,9 +76,60 @@ class ReceiveMode(Mode):
data_dir_layout.addWidget(data_dir_label)
data_dir_layout.addWidget(self.data_dir_lineedit)
data_dir_layout.addWidget(data_dir_button)
-
self.mode_settings_widget.mode_specific_layout.addLayout(data_dir_layout)
+ # Disable text or files
+ self.disable_text_checkbox = self.settings.get("receive", "disable_files")
+ self.disable_text_checkbox = QtWidgets.QCheckBox()
+ self.disable_text_checkbox.clicked.connect(self.disable_text_checkbox_clicked)
+ self.disable_text_checkbox.setText(
+ strings._("mode_settings_receive_disable_text_checkbox")
+ )
+ self.disable_files_checkbox = self.settings.get("receive", "disable_files")
+ self.disable_files_checkbox = QtWidgets.QCheckBox()
+ self.disable_files_checkbox.clicked.connect(self.disable_files_checkbox_clicked)
+ self.disable_files_checkbox.setText(
+ strings._("mode_settings_receive_disable_files_checkbox")
+ )
+ disable_layout = QtWidgets.QHBoxLayout()
+ disable_layout.addWidget(self.disable_text_checkbox)
+ disable_layout.addWidget(self.disable_files_checkbox)
+ disable_layout.addStretch()
+ self.mode_settings_widget.mode_specific_layout.addLayout(disable_layout)
+
+ # Webhook URL
+ webhook_url = self.settings.get("receive", "webhook_url")
+ self.webhook_url_checkbox = QtWidgets.QCheckBox()
+ self.webhook_url_checkbox.clicked.connect(self.webhook_url_checkbox_clicked)
+ self.webhook_url_checkbox.setText(
+ strings._("mode_settings_receive_webhook_url_checkbox")
+ )
+ self.webhook_url_lineedit = QtWidgets.QLineEdit()
+ self.webhook_url_lineedit.editingFinished.connect(
+ self.webhook_url_editing_finished
+ )
+ self.webhook_url_lineedit.setPlaceholderText(
+ "https://example.com/post-when-file-uploaded"
+ )
+ webhook_url_layout = QtWidgets.QHBoxLayout()
+ webhook_url_layout.addWidget(self.webhook_url_checkbox)
+ webhook_url_layout.addWidget(self.webhook_url_lineedit)
+ if webhook_url is not None and webhook_url != "":
+ self.webhook_url_checkbox.setCheckState(QtCore.Qt.Checked)
+ self.webhook_url_lineedit.setText(
+ self.settings.get("receive", "webhook_url")
+ )
+ self.show_webhook_url()
+ else:
+ self.webhook_url_checkbox.setCheckState(QtCore.Qt.Unchecked)
+ self.hide_webhook_url()
+ self.mode_settings_widget.mode_specific_layout.addLayout(webhook_url_layout)
+
+ # Set title placeholder
+ self.mode_settings_widget.title_lineedit.setPlaceholderText(
+ strings._("gui_tab_name_receive")
+ )
+
# Server status
self.server_status.set_mode("receive")
self.server_status.server_started_finished.connect(self.update_primary_action)
@@ -129,8 +182,8 @@ class ReceiveMode(Mode):
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addWidget(header_label)
self.main_layout.addWidget(receive_warning)
- self.main_layout.addWidget(self.primary_action)
- self.main_layout.addWidget(MinimumWidthWidget(525))
+ self.main_layout.addWidget(self.primary_action, stretch=1)
+ self.main_layout.addWidget(MinimumSizeWidget(525, 0))
# Row layout
content_row = QtWidgets.QHBoxLayout()
@@ -138,10 +191,8 @@ class ReceiveMode(Mode):
content_row.addWidget(self.image)
row_layout = QtWidgets.QVBoxLayout()
row_layout.addLayout(top_bar_layout)
- row_layout.addStretch()
- row_layout.addLayout(content_row)
+ row_layout.addLayout(content_row, stretch=1)
row_layout.addWidget(self.server_status)
- row_layout.addStretch()
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
@@ -183,6 +234,36 @@ class ReceiveMode(Mode):
self.data_dir_lineedit.setText(selected_dir)
self.settings.set("receive", "data_dir", selected_dir)
+ def disable_text_checkbox_clicked(self):
+ self.settings.set(
+ "receive", "disable_text", self.disable_text_checkbox.isChecked()
+ )
+
+ def disable_files_checkbox_clicked(self):
+ self.settings.set(
+ "receive", "disable_files", self.disable_files_checkbox.isChecked()
+ )
+
+ def webhook_url_checkbox_clicked(self):
+ if self.webhook_url_checkbox.isChecked():
+ if self.settings.get("receive", "webhook_url"):
+ self.webhook_url_lineedit.setText(
+ self.settings.get("receive", "webhook_url")
+ )
+ self.show_webhook_url()
+ else:
+ self.settings.set("receive", "webhook_url", None)
+ self.hide_webhook_url()
+
+ def webhook_url_editing_finished(self):
+ self.settings.set("receive", "webhook_url", self.webhook_url_lineedit.text())
+
+ def hide_webhook_url(self):
+ self.webhook_url_lineedit.hide()
+
+ def show_webhook_url(self):
+ self.webhook_url_lineedit.show()
+
def get_stop_server_autostop_timer_text(self):
"""
Return the string to put on the stop server button, if there's an auto-stop timer
@@ -220,6 +301,16 @@ class ReceiveMode(Mode):
# Hide and reset the uploads if we have previously shared
self.reset_info_counters()
+ # Set proxies for webhook URL
+ if self.common.gui.local_only:
+ self.web.proxies = None
+ else:
+ (socks_address, socks_port) = self.common.gui.onion.get_tor_socks_port()
+ self.web.proxies = {
+ "http": f"socks5h://{socks_address}:{socks_port}",
+ "https": f"socks5h://{socks_address}:{socks_port}",
+ }
+
def start_server_step2_custom(self):
"""
Step 2 in starting the server.
@@ -248,8 +339,11 @@ class ReceiveMode(Mode):
Handle REQUEST_STARTED event.
"""
item = ReceiveHistoryItem(
- self.common, event["data"]["id"], event["data"]["content_length"]
+ self.common,
+ event["data"]["id"],
+ event["data"]["content_length"],
)
+
self.history.add(event["data"]["id"], item)
self.toggle_history.update_indicator(True)
self.history.in_progress_count += 1
@@ -269,6 +363,12 @@ class ReceiveMode(Mode):
{"action": "progress", "progress": event["data"]["progress"]},
)
+ def handle_request_upload_includes_message(self, event):
+ """
+ Handle REQUEST_UPLOAD_INCLUDES_MESSAGE event.
+ """
+ self.history.includes_message(event["data"]["id"], event["data"]["filename"])
+
def handle_request_upload_file_renamed(self, event):
"""
Handle REQUEST_UPLOAD_FILE_RENAMED event.
diff --git a/desktop/src/onionshare/tab/mode/share_mode/__init__.py b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
index 74a4e2c2..4056d92e 100644
--- a/desktop/src/onionshare/tab/mode/share_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/__init__.py
@@ -21,7 +21,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
import os
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
from onionshare_cli.common import Common
from onionshare_cli.web import Web
@@ -30,7 +29,7 @@ from .. import Mode
from ..file_selection import FileSelection
from ..history import History, ToggleHistory, ShareHistoryItem
from .... import strings
-from ....widgets import Alert, MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -77,6 +76,11 @@ class ShareMode(Mode):
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
+ # Set title placeholder
+ self.mode_settings_widget.title_lineedit.setPlaceholderText(
+ strings._("gui_tab_name_share")
+ )
+
# Server status
self.server_status.set_mode("share", self.file_selection)
self.server_status.server_started.connect(self.file_selection.server_started)
@@ -156,9 +160,9 @@ class ShareMode(Mode):
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addLayout(top_bar_layout)
self.main_layout.addLayout(self.file_selection)
- self.main_layout.addWidget(self.primary_action)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/mode/share_mode/threads.py b/desktop/src/onionshare/tab/mode/share_mode/threads.py
index 6f5c44ea..839d30ea 100644
--- a/desktop/src/onionshare/tab/mode/share_mode/threads.py
+++ b/desktop/src/onionshare/tab/mode/share_mode/threads.py
@@ -36,7 +36,7 @@ class CompressThread(QtCore.QThread):
# prepare files to share
def set_processed_size(self, x):
- if self.mode._zip_progress_bar != None:
+ if self.mode._zip_progress_bar is not None:
self.mode._zip_progress_bar.update_processed_size_signal.emit(x)
def run(self):
@@ -47,9 +47,6 @@ class CompressThread(QtCore.QThread):
self.mode.filenames, processed_size_callback=self.set_processed_size
)
self.success.emit()
- self.mode.app.cleanup_filenames += (
- self.mode.web.share_mode.cleanup_filenames
- )
except OSError as e:
self.error.emit(e.strerror)
diff --git a/desktop/src/onionshare/tab/mode/website_mode/__init__.py b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
index 6aa83de0..577ea28e 100644
--- a/desktop/src/onionshare/tab/mode/website_mode/__init__.py
+++ b/desktop/src/onionshare/tab/mode/website_mode/__init__.py
@@ -19,12 +19,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import os
-import random
-import string
from PySide2 import QtCore, QtWidgets, QtGui
-from onionshare_cli.onion import *
from onionshare_cli.common import Common
from onionshare_cli.web import Web
@@ -32,7 +29,7 @@ from .. import Mode
from ..file_selection import FileSelection
from ..history import History, ToggleHistory
from .... import strings
-from ....widgets import Alert, MinimumWidthWidget
+from ....widgets import MinimumSizeWidget
from ....gui_common import GuiCommon
@@ -77,6 +74,11 @@ class WebsiteMode(Mode):
for filename in self.filenames:
self.file_selection.file_list.add_file(filename)
+ # Set title placeholder
+ self.mode_settings_widget.title_lineedit.setPlaceholderText(
+ strings._("gui_tab_name_website")
+ )
+
# Server status
self.server_status.set_mode("website", self.file_selection)
self.server_status.server_started.connect(self.file_selection.server_started)
@@ -156,9 +158,9 @@ class WebsiteMode(Mode):
self.main_layout = QtWidgets.QVBoxLayout()
self.main_layout.addLayout(top_bar_layout)
self.main_layout.addLayout(self.file_selection)
- self.main_layout.addWidget(self.primary_action)
+ self.main_layout.addWidget(self.primary_action, stretch=1)
self.main_layout.addWidget(self.server_status)
- self.main_layout.addWidget(MinimumWidthWidget(700))
+ self.main_layout.addWidget(MinimumSizeWidget(700, 0))
# Column layout
self.column_layout = QtWidgets.QHBoxLayout()
diff --git a/desktop/src/onionshare/tab/server_status.py b/desktop/src/onionshare/tab/server_status.py
index 8c1c9655..ba5ff165 100644
--- a/desktop/src/onionshare/tab/server_status.py
+++ b/desktop/src/onionshare/tab/server_status.py
@@ -17,8 +17,6 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-
-import platform
import textwrap
from PySide2 import QtCore, QtWidgets, QtGui
from PySide2.QtCore import Qt
@@ -163,7 +161,7 @@ class ServerStatus(QtWidgets.QWidget):
self.url.setText(wrapped_onion_url)
else:
self.url.setText(self.get_url())
- except:
+ except Exception:
pass
def show_url(self):
@@ -308,13 +306,18 @@ class ServerStatus(QtWidgets.QWidget):
)
)
else:
- self.server_button.setText(strings._("gui_please_wait"))
+ if self.common.platform == "Windows":
+ self.server_button.setText(strings._("gui_please_wait"))
+ else:
+ self.server_button.setText(
+ strings._("gui_please_wait_no_button")
+ )
else:
self.server_button.setStyleSheet(
self.common.gui.css["server_status_button_working"]
)
self.server_button.setEnabled(False)
- self.server_button.setText(strings._("gui_please_wait"))
+ self.server_button.setText(strings._("gui_please_wait_no_button"))
def server_button_clicked(self):
"""
@@ -381,7 +384,10 @@ class ServerStatus(QtWidgets.QWidget):
self.start_server()
elif self.status == self.STATUS_STARTED:
self.stop_server()
- elif self.status == self.STATUS_WORKING:
+ elif self.status == self.STATUS_WORKING and (
+ self.common.platform == "Windows"
+ or self.settings.get("general", "autostart_timer")
+ ):
self.cancel_server()
self.button_clicked.emit()
diff --git a/desktop/src/onionshare/tab/tab.py b/desktop/src/onionshare/tab/tab.py
index 2d4e164c..09982de9 100644
--- a/desktop/src/onionshare/tab/tab.py
+++ b/desktop/src/onionshare/tab/tab.py
@@ -452,20 +452,20 @@ class Tab(QtWidgets.QWidget):
# Chat mode
if self.chat_mode.server_status.status == ServerStatus.STATUS_STOPPED:
self.set_server_status_indicator_stopped(
- strings._("gui_status_indicator_receive_stopped")
+ strings._("gui_status_indicator_chat_stopped")
)
elif self.chat_mode.server_status.status == ServerStatus.STATUS_WORKING:
if self.settings.get("general", "autostart_timer"):
self.set_server_status_indicator_working(
- strings._("gui_status_indicator_receive_scheduled")
+ strings._("gui_status_indicator_chat_scheduled")
)
else:
self.set_server_status_indicator_working(
- strings._("gui_status_indicator_receive_working")
+ strings._("gui_status_indicator_chat_working")
)
elif self.chat_mode.server_status.status == ServerStatus.STATUS_STARTED:
self.set_server_status_indicator_started(
- strings._("gui_status_indicator_receive_started")
+ strings._("gui_status_indicator_chat_started")
)
def set_server_status_indicator_stopped(self, label_text):
@@ -540,6 +540,9 @@ class Tab(QtWidgets.QWidget):
elif event["type"] == Web.REQUEST_CANCELED:
mode.handle_request_canceled(event)
+ elif event["type"] == Web.REQUEST_UPLOAD_INCLUDES_MESSAGE:
+ mode.handle_request_upload_includes_message(event)
+
elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED:
mode.handle_request_upload_file_renamed(event)
@@ -665,7 +668,7 @@ class Tab(QtWidgets.QWidget):
if self.close_dialog.clickedButton() == self.close_dialog.accept_button:
self.common.log("Tab", "close_tab", "close, closing tab")
self.get_mode().stop_server()
- self.app.cleanup()
+ self.get_mode().web.cleanup()
return True
# Cancel
else:
@@ -678,4 +681,4 @@ class Tab(QtWidgets.QWidget):
self.get_mode().web.stop(self.get_mode().app.port)
self.get_mode().web_thread.quit()
self.get_mode().web_thread.wait()
- self.app.cleanup()
+ self.get_mode().web.cleanup()
diff --git a/desktop/src/onionshare/tab_widget.py b/desktop/src/onionshare/tab_widget.py
index b9a70011..a955ea53 100644
--- a/desktop/src/onionshare/tab_widget.py
+++ b/desktop/src/onionshare/tab_widget.py
@@ -176,6 +176,11 @@ class TabWidget(QtWidgets.QTabWidget):
)
tab.init(mode_settings)
+
+ # Make sure the title is set
+ if tab.get_mode():
+ tab.get_mode().mode_settings_widget.title_editing_finished()
+
# If it's persistent, set the persistent image in the tab
self.change_persistent(tab.tab_id, tab.settings.get("persistent", "enabled"))
@@ -183,8 +188,13 @@ class TabWidget(QtWidgets.QTabWidget):
self.bring_to_front.emit()
def change_title(self, tab_id, title):
+ shortened_title = title
+ if len(shortened_title) > 11:
+ shortened_title = shortened_title[:10] + "..."
+
index = self.indexOf(self.tabs[tab_id])
- self.setTabText(index, title)
+ self.setTabText(index, shortened_title)
+ self.setTabToolTip(index, title)
def change_icon(self, tab_id, icon_path):
index = self.indexOf(self.tabs[tab_id])
diff --git a/desktop/src/onionshare/threads.py b/desktop/src/onionshare/threads.py
index 214344f7..c9a3dba4 100644
--- a/desktop/src/onionshare/threads.py
+++ b/desktop/src/onionshare/threads.py
@@ -158,14 +158,14 @@ class AutoStartTimer(QtCore.QThread):
)
try:
# Sleep until scheduled time
- while autostart_timer_datetime_delta > 0 and self.canceled == False:
+ while autostart_timer_datetime_delta > 0 and self.canceled is False:
time.sleep(0.1)
now = QtCore.QDateTime.currentDateTime()
autostart_timer_datetime_delta = now.secsTo(
self.mode.server_status.autostart_timer_datetime
)
# Timer has now finished
- if self.canceled == False:
+ if self.canceled is False:
self.mode.server_status.server_button.setText(
strings._("gui_please_wait")
)
@@ -252,7 +252,7 @@ class EventHandlerThread(QtCore.QThread):
"EventHandler", "run", f"invalid event type: {obj}"
)
- except:
+ except Exception:
pass
if self.should_quit:
diff --git a/desktop/src/onionshare/tor_connection_dialog.py b/desktop/src/onionshare/tor_connection_dialog.py
index c3644f8b..b5c2f61c 100644
--- a/desktop/src/onionshare/tor_connection_dialog.py
+++ b/desktop/src/onionshare/tor_connection_dialog.py
@@ -166,7 +166,7 @@ class TorConnectionThread(QtCore.QThread):
else:
self.canceled_connecting_to_tor.emit()
- except BundledTorCanceled as e:
+ except BundledTorCanceled:
self.common.log(
"TorConnectionThread", "run", "caught exception: BundledTorCanceled"
)
diff --git a/desktop/src/onionshare/update_checker.py b/desktop/src/onionshare/update_checker.py
index 1d8e8b07..e9dbc060 100644
--- a/desktop/src/onionshare/update_checker.py
+++ b/desktop/src/onionshare/update_checker.py
@@ -19,14 +19,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
from PySide2 import QtCore
-import datetime, time, socket, re, platform
+import datetime
+import re
import socks
from distutils.version import LooseVersion as Version
from onionshare_cli.settings import Settings
-from onionshare_cli.onion import Onion
-
-from . import strings
class UpdateCheckerCheckError(Exception):
@@ -170,7 +168,7 @@ class UpdateChecker(QtCore.QObject):
settings.save()
# Do we need to update?
- update_url = f"https://github.com/micahflee/onionshare/releases/tag/v{latest_version}"
+ update_url = "https://onionshare.org"
installed_version = self.common.version
if installed_version < latest_version:
self.update_available.emit(
diff --git a/desktop/src/onionshare/widgets.py b/desktop/src/onionshare/widgets.py
index a1880a2e..c239d03a 100644
--- a/desktop/src/onionshare/widgets.py
+++ b/desktop/src/onionshare/widgets.py
@@ -84,14 +84,15 @@ class AddFileDialog(QtWidgets.QFileDialog):
QtWidgets.QDialog.accept(self)
-class MinimumWidthWidget(QtWidgets.QWidget):
+class MinimumSizeWidget(QtWidgets.QWidget):
"""
- An empty widget with a minimum width, just to force layouts to behave
+ An empty widget with a minimum width and height, just to force layouts to behave
"""
- def __init__(self, width):
- super(MinimumWidthWidget, self).__init__()
+ def __init__(self, width, height):
+ super(MinimumSizeWidget, self).__init__()
self.setMinimumWidth(width)
+ self.setMinimumHeight(height)
class Image(qrcode.image.base.BaseImage):
diff --git a/desktop/src/org.onionshare.OnionShare.appdata.xml b/desktop/src/org.onionshare.OnionShare.appdata.xml
index 3cee6454..a53bc930 100644
--- a/desktop/src/org.onionshare.OnionShare.appdata.xml
+++ b/desktop/src/org.onionshare.OnionShare.appdata.xml
@@ -13,17 +13,17 @@
<launchable type="desktop-id">org.onionshare.OnionShare.desktop</launchable>
<screenshots>
<screenshot type="default">
- <image>https://raw.githubusercontent.com/micahflee/onionshare/master/docs/source/_static/screenshots/tabs.png</image>
+ <image>https://docs.onionshare.org/2.3.3/en/_images/tabs.png</image>
<caption>Types of services that OnionShare supports</caption>
</screenshot>
</screenshots>
- <url type="bugtracker">https://github.com/micahflee/onionshare/issues/</url>
+ <url type="bugtracker">https://github.com/onionshare/onionshare/issues/</url>
<url type="help">https://onionshare.org/</url>
<url type="homepage">https://onionshare.org/</url>
<developer_name>Micah Lee</developer_name>
<update_contact>micah@micahflee.com</update_contact>
<content_rating type="oars-1.1" />
<releases>
- <release type="development" date="2021-02-22" version="2.3.1" />
+ <release type="development" date="2021-08-20" version="2.3.3" />
</releases>
</component>
diff --git a/desktop/src/setup.py b/desktop/src/setup.py
index 83aeeba1..cd3c21f6 100644
--- a/desktop/src/setup.py
+++ b/desktop/src/setup.py
@@ -18,19 +18,19 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
-
-# This setup.py file is used for snap and flatpak packaging. For other packaging,
-# OnionShare uses briefcase.
-
-import os
import setuptools
-version = "2.3.1"
+version = "2.3.3"
setuptools.setup(
name="onionshare",
version=version,
- description="OnionShare lets you securely and anonymously send and receive files. It works by starting a web server, making it accessible as a Tor onion service, and generating an unguessable web address so others can download files from you, or upload files to you. It does _not_ require setting up a separate server or using a third party file-sharing service.",
+ description=(
+ "OnionShare lets you securely and anonymously send and receive files. It works by starting a web "
+ "server, making it accessible as a Tor onion service, and generating an unguessable web address so "
+ "others can download files from you, or upload files to you. It does _not_ require setting up a "
+ "separate server or using a third party file-sharing service."
+ ),
author="Micah Lee",
author_email="micah@micahflee.com",
maintainer="Micah Lee",
diff --git a/desktop/tests/conftest.py b/desktop/tests/conftest.py
index 65d13fa6..b17aa45c 100644
--- a/desktop/tests/conftest.py
+++ b/desktop/tests/conftest.py
@@ -1,19 +1,20 @@
import sys
-
-# Force tests to look for resources in the source code tree
-sys.onionshare_dev_mode = True
-
-# Let OnionShare know the tests are running, to avoid colliding with settings files
-sys.onionshare_test_mode = True
-
import os
import shutil
import tempfile
from datetime import datetime, timedelta
import pytest
+from PySide2 import QtTest
+
+from onionshare_cli import common, web, settings
-from PySide2 import QtTest, QtGui
+
+# Force tests to look for resources in the source code tree
+sys.onionshare_dev_mode = True
+
+# Let OnionShare know the tests are running, to avoid colliding with settings files
+sys.onionshare_test_mode = True
@staticmethod
@@ -36,9 +37,6 @@ sys.path.insert(
),
)
-from onionshare_cli import common, web, settings
-
-
# The temporary directory for CLI tests
test_temp_dir = None
@@ -69,7 +67,7 @@ def temp_dir():
@pytest.fixture
def temp_dir_1024(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes).
"""
@@ -83,7 +81,7 @@ def temp_dir_1024(temp_dir):
# pytest > 2.9 only needs @pytest.fixture
@pytest.yield_fixture
def temp_dir_1024_delete(temp_dir):
- """ Create a temporary directory that has a single file of a
+ """Create a temporary directory that has a single file of a
particular size (1024 bytes). The temporary directory (including
the file inside) will be deleted after fixture usage.
"""
@@ -97,7 +95,7 @@ def temp_dir_1024_delete(temp_dir):
@pytest.fixture
def temp_file_1024(temp_dir):
- """ Create a temporary file of a particular size (1024 bytes). """
+ """Create a temporary file of a particular size (1024 bytes)."""
with tempfile.NamedTemporaryFile(delete=False, dir=temp_dir) as tmp_file:
tmp_file.write(b"*" * 1024)
@@ -141,7 +139,7 @@ def default_zw():
tmp_dir = os.path.dirname(zw.zip_filename)
try:
shutil.rmtree(tmp_dir, ignore_errors=True)
- except:
+ except Exception:
pass
diff --git a/desktop/tests/gui_base_test.py b/desktop/tests/gui_base_test.py
index 214da945..acaa9739 100644
--- a/desktop/tests/gui_base_test.py
+++ b/desktop/tests/gui_base_test.py
@@ -1,11 +1,7 @@
-import pytest
import unittest
-
-import json
import os
import requests
import shutil
-import base64
import tempfile
import secrets
import platform
@@ -13,14 +9,12 @@ import platform
from PySide2 import QtCore, QtTest, QtWidgets
from onionshare_cli.common import Common
-from onionshare_cli.settings import Settings
-from onionshare_cli.onion import Onion
-from onionshare_cli.web import Web
from onionshare import Application, MainWindow, GuiCommon
from onionshare.tab.mode.share_mode import ShareMode
from onionshare.tab.mode.receive_mode import ReceiveMode
from onionshare.tab.mode.website_mode import WebsiteMode
+from onionshare.tab.mode.chat_mode import ChatMode
from onionshare import strings
@@ -140,6 +134,17 @@ class GuiBaseTest(unittest.TestCase):
return tab
+ def new_chat_tab(self):
+ tab = self.gui.tabs.widget(0)
+ self.verify_new_tab(tab)
+
+ # Chat
+ tab.chat_button.click()
+ self.assertFalse(tab.new_tab.isVisible())
+ self.assertTrue(tab.chat_mode.isVisible())
+
+ return tab
+
def close_all_tabs(self):
for _ in range(self.gui.tabs.count()):
tab = self.gui.tabs.widget(0)
@@ -368,6 +373,7 @@ class GuiBaseTest(unittest.TestCase):
and not tab.settings.get("share", "autostop_sharing")
)
or (type(tab.get_mode()) == WebsiteMode)
+ or (type(tab.get_mode()) == ChatMode)
):
tab.get_mode().server_status.server_button.click()
self.assertEqual(tab.get_mode().server_status.status, 0)
@@ -459,6 +465,20 @@ class GuiBaseTest(unittest.TestCase):
# We should have timed out now
self.assertEqual(tab.get_mode().server_status.status, 0)
+ def hit_405(self, url, expected_resp, data = {}, methods = [] ):
+ """Test various HTTP methods and the response"""
+ for method in methods:
+ if method == "put":
+ r = requests.put(url, data = data)
+ if method == "post":
+ r = requests.post(url, data = data)
+ if method == "delete":
+ r = requests.delete(url)
+ if method == "options":
+ r = requests.options(url)
+ self.assertTrue(expected_resp in r.text)
+ self.assertFalse('Werkzeug' in r.headers)
+
# Grouped tests follow from here
def run_all_common_setup_tests(self):
diff --git a/desktop/tests/run.sh b/desktop/tests/run.sh
index 833c1516..0f019b05 100755
--- a/desktop/tests/run.sh
+++ b/desktop/tests/run.sh
@@ -2,4 +2,5 @@
pytest -v tests/test_gui_tabs.py && \
pytest -v tests/test_gui_share.py && \
pytest -v tests/test_gui_receive.py && \
-pytest -v tests/test_gui_website.py
+pytest -v tests/test_gui_website.py && \
+pytest -v tests/test_gui_chat.py
diff --git a/desktop/tests/test_gui_chat.py b/desktop/tests/test_gui_chat.py
new file mode 100644
index 00000000..15ecaa44
--- /dev/null
+++ b/desktop/tests/test_gui_chat.py
@@ -0,0 +1,98 @@
+import requests
+
+from PySide2 import QtTest
+
+from .gui_base_test import GuiBaseTest
+
+
+class TestChat(GuiBaseTest):
+ # Shared test methods
+
+ def view_chat(self, tab):
+ """Test that we can view the chat room"""
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ if tab.settings.get("general", "public"):
+ r = requests.get(url)
+ else:
+ r = requests.get(
+ url,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ self.assertTrue("Chat <b>requires JavaScript</b>" in r.text)
+
+ cookies_dict = requests.utils.dict_from_cookiejar(r.cookies)
+ self.assertTrue("session" in cookies_dict.keys())
+
+ def change_username(self, tab):
+ """Test that we can change our username"""
+ url = f"http://127.0.0.1:{tab.app.port}/update-session-username"
+ data = {"username": "oniontest"}
+ if tab.settings.get("general", "public"):
+ r = requests.post(url, json=data)
+ else:
+ r = requests.post(
+ url,
+ json=data,
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().server_status.web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(500, self.gui.qtapp)
+ jsonResponse = r.json()
+ self.assertTrue(jsonResponse["success"])
+ self.assertEqual(jsonResponse["username"], "oniontest")
+
+ def run_all_chat_mode_started_tests(self, tab):
+ """Tests in chat mode after starting a chat"""
+ self.server_working_on_start_button_pressed(tab)
+ self.server_status_indicator_says_starting(tab)
+ self.server_is_started(tab, startup_time=500)
+ self.web_server_is_running(tab)
+ self.have_a_password(tab)
+ self.url_description_shown(tab)
+ self.have_copy_url_button(tab)
+ self.have_show_qr_code_button(tab)
+ self.server_status_indicator_says_started(tab)
+
+ def run_all_chat_mode_stopping_tests(self, tab):
+ """Tests stopping a chat"""
+ self.server_is_stopped(tab)
+ self.web_server_is_stopped(tab)
+ self.server_status_indicator_says_closed(tab)
+
+ # Tests
+
+ def test_chat(self):
+ """
+ Test chat mode
+ """
+ tab = self.new_chat_tab()
+ self.run_all_chat_mode_started_tests(tab)
+ self.view_chat(tab)
+ self.change_username(tab)
+ self.run_all_chat_mode_stopping_tests(tab)
+ self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_chat_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_chat_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(
+ url,
+ expected_resp="OnionShare: 405 Method Not Allowed",
+ data={"foo": "bar"},
+ methods=["put", "post", "delete", "options"],
+ )
+ self.run_all_chat_mode_stopping_tests(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_receive.py b/desktop/tests/test_gui_receive.py
index 848b2f11..b523b0fa 100644
--- a/desktop/tests/test_gui_receive.py
+++ b/desktop/tests/test_gui_receive.py
@@ -48,15 +48,15 @@ class TestReceive(GuiBaseTest):
QtTest.QTest.qWait(1000, self.gui.qtapp)
- # Make sure the file is within the last 10 seconds worth of fileames
+ # Make sure the file is within the last 10 seconds worth of filenames
exists = False
now = datetime.now()
for _ in range(10):
date_dir = now.strftime("%Y-%m-%d")
if identical_files_at_once:
- time_dir = now.strftime("%H.%M.%S-1")
+ time_dir = now.strftime("%H%M%S-1")
else:
- time_dir = now.strftime("%H.%M.%S")
+ time_dir = now.strftime("%H%M%S")
receive_mode_dir = os.path.join(
tab.settings.get("receive", "data_dir"), date_dir, time_dir
)
@@ -93,6 +93,47 @@ class TestReceive(GuiBaseTest):
QtCore.QTimer.singleShot(1000, accept_dialog)
self.assertTrue("Error uploading, please inform the OnionShare user" in r.text)
+ def submit_message(self, tab, message):
+ """Test that we can submit a message"""
+
+ # Wait 2 seconds to make sure the filename, based on timestamp, isn't accidentally reused
+ QtTest.QTest.qWait(2000, self.gui.qtapp)
+
+ url = f"http://127.0.0.1:{tab.app.port}/upload"
+ if tab.settings.get("general", "public"):
+ requests.post(url, data={"text": message})
+ else:
+ requests.post(
+ url,
+ data={"text": message},
+ auth=requests.auth.HTTPBasicAuth(
+ "onionshare", tab.get_mode().web.password
+ ),
+ )
+
+ QtTest.QTest.qWait(1000, self.gui.qtapp)
+
+ # Make sure the file is within the last 10 seconds worth of filenames
+ exists = False
+ now = datetime.now()
+ for _ in range(10):
+ date_dir = now.strftime("%Y-%m-%d")
+ time_dir = now.strftime("%H%M%S")
+ expected_filename = os.path.join(
+ tab.settings.get("receive", "data_dir"),
+ date_dir,
+ f"{time_dir}-message.txt",
+ )
+ if os.path.exists(expected_filename):
+ with open(expected_filename) as f:
+ assert f.read() == message
+
+ exists = True
+ break
+ now = now - timedelta(seconds=1)
+
+ self.assertTrue(exists)
+
def try_without_auth_in_non_public_mode(self, tab):
r = requests.post(f"http://127.0.0.1:{tab.app.port}/upload")
self.assertEqual(r.status_code, 401)
@@ -115,10 +156,9 @@ class TestReceive(GuiBaseTest):
self.have_copy_url_button(tab)
self.have_show_qr_code_button(tab)
self.server_status_indicator_says_started(tab)
- self.web_page(tab, "Select the files you want to send, then click")
def run_all_receive_mode_tests(self, tab):
- """Upload files in receive mode and stop the share"""
+ """Submit files and messages in receive mode and stop the share"""
self.run_all_receive_mode_setup_tests(tab)
if not tab.settings.get("general", "public"):
self.try_without_auth_in_non_public_mode(tab)
@@ -131,9 +171,11 @@ class TestReceive(GuiBaseTest):
self.counter_incremented(tab, 3)
self.upload_file(tab, self.tmpfile_test2, "test2.txt")
self.counter_incremented(tab, 4)
+ self.submit_message(tab, "onionshare is an interesting piece of software")
+ self.counter_incremented(tab, 5)
# Test uploading the same file twice at the same time, and make sure no collisions
self.upload_file(tab, self.tmpfile_test, "test.txt", True)
- self.counter_incremented(tab, 6)
+ self.counter_incremented(tab, 7)
self.history_indicator(tab, "2")
self.server_is_stopped(tab)
self.web_server_is_stopped(tab)
@@ -244,3 +286,22 @@ class TestReceive(GuiBaseTest):
self.run_all_upload_non_writable_dir_tests(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_receive_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_receive_mode_setup_tests(tab)
+ self.upload_file(tab, self.tmpfile_test, "test.txt")
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+
+ self.server_is_stopped(tab)
+ self.web_server_is_stopped(tab)
+ self.server_status_indicator_says_closed(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_share.py b/desktop/tests/test_gui_share.py
index 0e521d52..531e456f 100644
--- a/desktop/tests/test_gui_share.py
+++ b/desktop/tests/test_gui_share.py
@@ -1,4 +1,3 @@
-import pytest
import os
import requests
import tempfile
@@ -609,3 +608,20 @@ class TestShare(GuiBaseTest):
self.hit_401(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_share_tab()
+
+ tab.get_mode().autostop_sharing_checkbox.click()
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_share_mode_setup_tests(tab)
+ self.run_all_share_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+ self.history_widgets_present(tab)
+ self.close_all_tabs()
diff --git a/desktop/tests/test_gui_tabs.py b/desktop/tests/test_gui_tabs.py
index 4ebbdffb..09f38bb4 100644
--- a/desktop/tests/test_gui_tabs.py
+++ b/desktop/tests/test_gui_tabs.py
@@ -1,4 +1,3 @@
-import pytest
import os
from PySide2 import QtCore, QtTest, QtWidgets
@@ -154,11 +153,21 @@ class TestTabs(GuiBaseTest):
self.gui.status_bar.server_status_label.text(), "Ready to share"
)
+ # New tab, chat mode
+ self.gui.tabs.new_tab_button.click()
+ self.gui.tabs.widget(4).chat_button.click()
+ self.assertFalse(self.gui.tabs.widget(4).new_tab.isVisible())
+ self.assertTrue(self.gui.tabs.widget(4).chat_mode.isVisible())
+ self.assertEqual(
+ self.gui.status_bar.server_status_label.text(), "Ready to chat"
+ )
+
# Close tabs
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
+ self.gui.tabs.tabBar().tabButton(0, QtWidgets.QTabBar.RightSide).click()
def test_07_close_share_tab_while_server_started_should_warn(self):
"""Closing a share mode tab when the server is running should throw a warning"""
@@ -166,7 +175,7 @@ class TestTabs(GuiBaseTest):
self.close_tab_with_active_server(tab)
def test_08_close_receive_tab_while_server_started_should_warn(self):
- """Closing a recieve mode tab when the server is running should throw a warning"""
+ """Closing a receive mode tab when the server is running should throw a warning"""
tab = self.new_receive_tab()
self.close_tab_with_active_server(tab)
@@ -175,22 +184,32 @@ class TestTabs(GuiBaseTest):
tab = self.new_website_tab_with_files()
self.close_tab_with_active_server(tab)
- def test_10_close_persistent_share_tab_shows_warning(self):
+ def test_10_close_chat_tab_while_server_started_should_warn(self):
+ """Closing a chat mode tab when the server is running should throw a warning"""
+ tab = self.new_chat_tab()
+ self.close_tab_with_active_server(tab)
+
+ def test_11_close_persistent_share_tab_shows_warning(self):
"""Closing a share mode tab that's persistent should show a warning"""
tab = self.new_share_tab_with_files()
self.close_persistent_tab(tab)
- def test_11_close_persistent_receive_tab_shows_warning(self):
+ def test_12_close_persistent_receive_tab_shows_warning(self):
"""Closing a receive mode tab that's persistent should show a warning"""
tab = self.new_receive_tab()
self.close_persistent_tab(tab)
- def test_12_close_persistent_website_tab_shows_warning(self):
+ def test_13_close_persistent_website_tab_shows_warning(self):
"""Closing a website mode tab that's persistent should show a warning"""
tab = self.new_website_tab_with_files()
self.close_persistent_tab(tab)
- def test_13_quit_with_server_started_should_warn(self):
+ def test_14_close_persistent_chat_tab_shows_warning(self):
+ """Closing a chat mode tab that's persistent should show a warning"""
+ tab = self.new_chat_tab()
+ self.close_persistent_tab(tab)
+
+ def test_15_quit_with_server_started_should_warn(self):
"""Quitting OnionShare with any active servers should show a warning"""
tab = self.new_share_tab()
diff --git a/desktop/tests/test_gui_website.py b/desktop/tests/test_gui_website.py
index 164aa07d..f526756a 100644
--- a/desktop/tests/test_gui_website.py
+++ b/desktop/tests/test_gui_website.py
@@ -1,10 +1,6 @@
-import pytest
-import os
import requests
-import shutil
-from datetime import datetime, timedelta
-from PySide2 import QtCore, QtTest
+from PySide2 import QtTest
from .gui_base_test import GuiBaseTest
@@ -103,3 +99,19 @@ class TestWebsite(GuiBaseTest):
tab.get_mode().disable_csp_checkbox.click()
self.run_all_website_mode_download_tests(tab)
self.close_all_tabs()
+
+ def test_405_page_returned_for_invalid_methods(self):
+ """
+ Our custom 405 page should return for invalid methods
+ """
+ tab = self.new_website_tab()
+
+ tab.get_mode().mode_settings_widget.public_checkbox.click()
+
+ self.run_all_common_setup_tests()
+ self.run_all_website_mode_setup_tests(tab)
+ self.run_all_website_mode_started_tests(tab)
+ url = f"http://127.0.0.1:{tab.app.port}/"
+ self.hit_405(url, expected_resp="OnionShare: 405 Method Not Allowed", data = {'foo':'bar'}, methods = ["put", "post", "delete", "options"])
+
+ self.close_all_tabs()