summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMicah Lee <micah@micahflee.com>2019-01-28 17:22:02 -0800
committerMicah Lee <micah@micahflee.com>2019-01-28 17:22:02 -0800
commit58844ba7c823b3e7c95a15574e55e665fb888140 (patch)
treee87feddd85cd3f19ff479542deb973bf3a0f326e
parentb1d5b29cf69371caf9936e4e4943bf6d9b909e07 (diff)
parent4c11900a8193efb8b463259feef4549c9d6d01a5 (diff)
downloadonionshare-58844ba7c823b3e7c95a15574e55e665fb888140.tar.gz
onionshare-58844ba7c823b3e7c95a15574e55e665fb888140.zip
Merge branch 'develop' into 812_v3_tor_version
-rw-r--r--BUILD.md99
-rw-r--r--install/onionshare.nsi2
-rw-r--r--install/requirements.txt1
-rw-r--r--onionshare/__init__.py2
-rw-r--r--onionshare/settings.py8
-rw-r--r--onionshare/web/receive_mode.py104
-rw-r--r--onionshare/web/share_mode.py10
-rw-r--r--onionshare/web/web.py29
-rw-r--r--onionshare_gui/mode/__init__.py12
-rw-r--r--onionshare_gui/mode/history.py109
-rw-r--r--onionshare_gui/mode/receive_mode/__init__.py41
-rw-r--r--onionshare_gui/mode/share_mode/__init__.py26
-rw-r--r--onionshare_gui/onionshare_gui.py10
-rw-r--r--onionshare_gui/settings_dialog.py40
-rw-r--r--share/images/downloads.pngbin2120 -> 0 bytes
-rw-r--r--share/images/receive_icon_toggle.png (renamed from share/images/downloads_toggle.png)bin380 -> 380 bytes
-rw-r--r--share/images/receive_icon_toggle_selected.png (renamed from share/images/downloads_toggle_selected.png)bin468 -> 468 bytes
-rw-r--r--share/images/receive_icon_transparent.png (renamed from share/images/downloads_transparent.png)bin2138 -> 2138 bytes
-rw-r--r--share/images/share_icon_toggle.png (renamed from share/images/uploads_toggle.png)bin389 -> 389 bytes
-rw-r--r--share/images/share_icon_toggle_selected.png (renamed from share/images/uploads_toggle_selected.png)bin473 -> 473 bytes
-rw-r--r--share/images/share_icon_transparent.png (renamed from share/images/uploads_transparent.png)bin2096 -> 2096 bytes
-rw-r--r--share/images/uploads.pngbin2076 -> 0 bytes
-rw-r--r--share/locale/da.json37
-rw-r--r--share/locale/el.json154
-rw-r--r--share/locale/en.json71
-rw-r--r--share/locale/es.json39
-rw-r--r--share/locale/fa.json260
-rw-r--r--share/locale/fr.json113
-rw-r--r--share/locale/it.json2
-rw-r--r--share/locale/ja.json187
-rw-r--r--share/locale/no.json39
-rw-r--r--share/locale/pt_BR.json66
-rw-r--r--share/locale/ru.json177
-rw-r--r--share/locale/sv.json61
-rw-r--r--share/locale/tr.json6
-rw-r--r--share/locale/zh_Hans.json294
-rw-r--r--share/version.txt2
-rw-r--r--tests/GuiBaseTest.py50
-rw-r--r--tests/GuiReceiveTest.py25
-rw-r--r--tests/SettingsGuiBaseTest.py4
-rw-r--r--tests/TorGuiBaseTest.py2
-rw-r--r--tests/test_onionshare_settings.py2
42 files changed, 1273 insertions, 811 deletions
diff --git a/BUILD.md b/BUILD.md
index 6073d1a9..b01faaf1 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -46,26 +46,27 @@ If you find that these instructions don't work for your Linux distribution or ve
Install Xcode from the Mac App Store. Once it's installed, run it for the first time to set it up. Also, run this to make sure command line tools are installed: `xcode-select --install`. And finally, open Xcode, go to Preferences > Locations, and make sure under Command Line Tools you select an installed version from the dropdown. (This is required for installing Qt5.)
-Download and install Python 3.7.0 from https://www.python.org/downloads/release/python-370/. I downloaded `python-3.7.0-macosx10.9.pkg`.
+Download and install Python 3.7.2 from https://www.python.org/downloads/release/python-372/. I downloaded `python-3.7.2-macosx10.9.pkg`.
You may also need to run the command `/Applications/Python\ 3.7/Install\ Certificates.command` to update Python 3.6's internal certificate store. Otherwise, you may find that fetching the Tor Browser .dmg file fails later due to a certificate validation error.
-Download and install Qt5 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-mac-x64-3.0.5-online.dmg`. There's no need to login to a Qt account during installation. When you select components, install the `macOS` component from Qt 5.11.1 (or whatever the latest Qt version is).
+Install Qt 5.11.3 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-mac-x64-3.0.6-online.dmg`. In the installer, you can skip making an account, and all you need is `Qt` > `Qt 5.11.3` > `macOS`.
Now install some python dependencies with pip (note, there's issues building a .app if you install this in a virtualenv):
```sh
pip3 install -r install/requirements.txt
+pip3 install PyInstaller==3.4
```
-You can run both the CLI and GUI versions of OnionShare without building an bundle:
+#### You can run both the CLI and GUI versions of OnionShare without building an bundle
```sh
./dev_scripts/onionshare
./dev_scripts/onionshare-gui
```
-To build the app bundle:
+#### To build the app bundle
```sh
install/build_osx.sh
@@ -73,7 +74,7 @@ install/build_osx.sh
Now you should have `dist/OnionShare.app`.
-To codesign and build a pkg for distribution:
+#### To codesign and build a pkg for distribution
```sh
install/build_osx.sh --release
@@ -85,7 +86,7 @@ Now you should have `dist/OnionShare.pkg`.
### Setting up your dev environment
-Download Python 3.7.0, 32-bit (x86) from https://www.python.org/downloads/release/python-370/. I downloaded `python-3.7.0.exe`. When installing it, make sure to check the "Add Python 3.7 to PATH" checkbox on the first page of the installer.
+Download Python 3.7.2, 32-bit (x86) from https://www.python.org/downloads/release/python-372/. I downloaded `python-3.7.2.exe`. When installing it, make sure to check the "Add Python 3.7 to PATH" checkbox on the first page of the installer.
Open a command prompt, cd to the onionshare folder, and install dependencies with pip:
@@ -93,7 +94,7 @@ Open a command prompt, cd to the onionshare folder, and install dependencies wit
pip install -r install\requirements.txt
```
-Download and install Qt5 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-windows-x86-3.0.5-online.exe`. There's no need to login to a Qt account during installation. When you can select components, install the `MSVC 2015 32-bit` component from Qt 5.11.1 (or whatever the latest Qt version is).
+Install the Qt 5.11.3 from https://www.qt.io/download-open-source/. I downloaded `qt-unified-windows-x86-3.0.6-online.exe`. In the installer, you can skip making an account, and all you need `Qt` > `Qt 5.11.3` > `MSVC 2015 32-bit`.
After that you can try both the CLI and the GUI version of OnionShare:
@@ -102,7 +103,7 @@ python dev_scripts\onionshare
python dev_scripts\onionshare-gui
```
-If you want to build a .exe:
+#### If you want to build a .exe
These instructions include adding folders to the path in Windows. To do this, go to Start and type "advanced system settings", and open "View advanced system settings" in the Control Panel. Click Environment Variables. Under "System variables" double-click on Path. From there you can add and remove folders that are available in the PATH.
@@ -114,17 +115,87 @@ Download and install the standalone [Windows 10 SDK](https://dev.windows.com/en-
Add the following directories to the path:
-* `C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86`
-* `C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86`
-* `C:\Users\user\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\PyQt5\Qt\bin`
+* `C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x86`
+* `C:\Program Files (x86)\Windows Kits\10\Redist\10.0.17763.0\ucrt\DLLs\x86`
+* `C:\Users\user\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyQt5\Qt\bin`
* `C:\Program Files (x86)\7-Zip`
-If you want to build the installer:
+#### If you want the .exe to not get falsely flagged as malicious by anti-virus software
-* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.03-setup.exe`.
+OnionShare uses PyInstaller to turn the python source code into Windows executable `.exe` file. Apparently, malware developers also use PyInstaller, and some anti-virus vendors have included snippets of PyInstaller code in their virus definitions. To avoid this, you have to compile the Windows PyInstaller bootloader yourself instead of using the pre-compiled one that comes with PyInstaller.
+
+(If you don't care about this, you can install PyInstaller with `pip install PyInstaller==3.4`.)
+
+Here's how to compile the PyInstaller bootloader:
+
+Download and install [Microsoft Build Tools for Visual Studio 2017](https://www.visualstudio.com/downloads/#build-tools-for-visual-studio-2017). I downloaded `vs_buildtools.exe`. In the installer, check the box next to "Visual C++ build tools". Click "Individual components", and under "Compilers, build tools and runtimes", check "Windows Universal CRT SDK". Then click install. When installation is done, you may have to reboot your computer.
+
+Then, enable the 32-bit Visual C++ Toolset on the Command Line like this:
+
+```
+cd "C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\VC\Auxiliary\Build"
+vcvars32.bat
+```
+
+Make sure you have a new enough `setuptools`:
+
+```
+pip install setuptools==40.6.3
+```
+
+Now make sure you don't have PyInstaller installed from pip:
+
+```
+pip uninstall PyInstaller
+rmdir C:\Users\user\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyInstaller /S
+```
+
+Change to a folder where you keep source code, and clone the PyInstaller git repo:
+
+```
+git clone https://github.com/pyinstaller/pyinstaller.git
+```
+
+To verify the git tag, you first need the signing key's PGP key, which means you need `gpg`. If you installed git from git-scm.com, you can run this from Git Bash:
+
+```
+gpg --keyserver hkps://keyserver.ubuntu.com:443 --recv-key 0xD4AD8B9C167B757C4F08E8777B752811BF773B65
+```
+
+And now verify the tag:
+
+```
+cd pyinstaller
+git tag -v v3.4
+```
+
+It should say `Good signature from "Hartmut Goebel <h.goebel@goebel-consult.de>`. If it verified successfully, checkout the tag:
+
+```
+git checkout v3.4
+```
+
+And compile the bootloader, following [these instructions](https://pythonhosted.org/PyInstaller/bootloader-building.html). To compile, run this:
+
+```
+cd bootloader
+python waf distclean all --target-arch=32bit --msvc_targets=x86
+```
+
+Finally, install the PyInstaller module into your local site-packages:
+
+```
+pythin setup.py install
+```
+
+Now the next time you use PyInstaller to build OnionShare, the `.exe` file should not be flagged as malicious by anti-virus.
+
+#### If you want to build the installer
+
+* Go to http://nsis.sourceforge.net/Download and download the latest NSIS. I downloaded `nsis-3.04-setup.exe`.
* Add `C:\Program Files (x86)\NSIS` to the path.
-If you want to sign binaries with Authenticode:
+#### If you want to sign binaries with Authenticode
* You'll need a code signing certificate. I got an open source code signing certificate from [Certum](https://www.certum.eu/certum/cert,offer_en_open_source_cs.xml).
* Once you get a code signing key and certificate and covert it to a pfx file, import it into your certificate store.
diff --git a/install/onionshare.nsi b/install/onionshare.nsi
index 3a4c6c2a..d29e10a5 100644
--- a/install/onionshare.nsi
+++ b/install/onionshare.nsi
@@ -6,7 +6,7 @@
!define INSTALLSIZE 115186
!define VERSIONMAJOR 2
!define VERSIONMINOR 0
-!define VERSIONSTRING "2.0"
+!define VERSIONSTRING "2.0.dev3"
RequestExecutionLevel admin
diff --git a/install/requirements.txt b/install/requirements.txt
index 81430398..76dfb1ef 100644
--- a/install/requirements.txt
+++ b/install/requirements.txt
@@ -15,7 +15,6 @@ MarkupSafe==1.1.0
pefile==2018.8.8
pycparser==2.19
pycryptodome==3.7.2
-PyInstaller==3.4
PyQt5==5.11.3
PyQt5-sip==4.19.13
PySocks==1.6.8
diff --git a/onionshare/__init__.py b/onionshare/__init__.py
index 0d064639..2f44c846 100644
--- a/onionshare/__init__.py
+++ b/onionshare/__init__.py
@@ -175,7 +175,7 @@ def main(cwd=None):
print('')
if mode == 'receive':
- print(strings._('receive_mode_downloads_dir').format(common.settings.get('downloads_dir')))
+ print(strings._('receive_mode_data_dir').format(common.settings.get('data_dir')))
print('')
print(strings._('receive_mode_warning'))
print('')
diff --git a/onionshare/settings.py b/onionshare/settings.py
index 06235198..1570a150 100644
--- a/onionshare/settings.py
+++ b/onionshare/settings.py
@@ -100,7 +100,7 @@ class Settings(object):
'public_mode': False,
'slug': '',
'hidservauth_string': '',
- 'downloads_dir': self.build_default_downloads_dir(),
+ 'data_dir': self.build_default_data_dir(),
'locale': None # this gets defined in fill_in_defaults()
}
self._settings = {}
@@ -140,7 +140,7 @@ class Settings(object):
"""
return os.path.join(self.common.build_data_dir(), 'onionshare.json')
- def build_default_downloads_dir(self):
+ def build_default_data_dir(self):
"""
Returns the path of the default Downloads directory for receive mode.
"""
@@ -174,9 +174,9 @@ class Settings(object):
except:
pass
- # Make sure downloads_dir exists
+ # Make sure data_dir exists
try:
- os.makedirs(self.get('downloads_dir'), exist_ok=True)
+ os.makedirs(self.get('data_dir'), exist_ok=True)
except:
pass
diff --git a/onionshare/web/receive_mode.py b/onionshare/web/receive_mode.py
index 6985f38a..f035271a 100644
--- a/onionshare/web/receive_mode.py
+++ b/onionshare/web/receive_mode.py
@@ -60,19 +60,19 @@ class ReceiveModeWeb(object):
"""
Upload files.
"""
- # Make sure the receive mode dir exists
+ # Figure out what the receive mode dir should be
now = datetime.now()
date_dir = now.strftime("%Y-%m-%d")
time_dir = now.strftime("%H.%M.%S")
- receive_mode_dir = os.path.join(self.common.settings.get('downloads_dir'), date_dir, time_dir)
+ receive_mode_dir = os.path.join(self.common.settings.get('data_dir'), date_dir, time_dir)
valid = True
try:
- os.makedirs(receive_mode_dir, 0o700)
+ os.makedirs(receive_mode_dir, 0o700, exist_ok=True)
except PermissionError:
- self.web.add_request(self.web.REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE, request.path, {
+ self.web.add_request(self.web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE, request.path, {
"receive_mode_dir": receive_mode_dir
})
- print(strings._('error_cannot_create_downloads_dir').format(receive_mode_dir))
+ print(strings._('error_cannot_create_data_dir').format(receive_mode_dir))
valid = False
if not valid:
flash('Error uploading, please inform the OnionShare user', 'error')
@@ -134,6 +134,23 @@ class ReceiveModeWeb(object):
'dir': receive_mode_dir
})
+ # Make sure receive mode dir exists before writing file
+ valid = True
+ try:
+ os.makedirs(receive_mode_dir, 0o700, exist_ok=True)
+ except PermissionError:
+ self.web.add_request(self.web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE, request.path, {
+ "receive_mode_dir": receive_mode_dir
+ })
+ print(strings._('error_cannot_create_data_dir').format(receive_mode_dir))
+ valid = False
+ if not valid:
+ flash('Error uploading, please inform the OnionShare user', 'error')
+ if self.common.settings.get('public_mode'):
+ return redirect('/')
+ else:
+ return redirect('/{}'.format(slug_candidate))
+
self.common.log('ReceiveModeWeb', 'define_routes', '/upload, uploaded {}, saving to {}'.format(f.filename, local_path))
print(strings._('receive_mode_received_file').format(local_path))
f.save(local_path)
@@ -193,6 +210,7 @@ class ReceiveModeWSGIMiddleware(object):
def __call__(self, environ, start_response):
environ['web'] = self.web
+ environ['stop_q'] = self.web.stop_q
return self.app(environ, start_response)
@@ -201,7 +219,8 @@ class ReceiveModeTemporaryFile(object):
A custom TemporaryFile that tells ReceiveModeRequest every time data gets
written to it, in order to track the progress of uploads.
"""
- def __init__(self, filename, write_func, close_func):
+ def __init__(self, request, filename, write_func, close_func):
+ self.onionshare_request = request
self.onionshare_filename = filename
self.onionshare_write_func = write_func
self.onionshare_close_func = close_func
@@ -222,6 +241,11 @@ class ReceiveModeTemporaryFile(object):
"""
Custom write method that calls out to onionshare_write_func
"""
+ if not self.onionshare_request.stop_q.empty():
+ self.close()
+ self.onionshare_request.close()
+ return
+
bytes_written = self.f.write(b)
self.onionshare_write_func(self.onionshare_filename, bytes_written)
@@ -241,6 +265,12 @@ class ReceiveModeRequest(Request):
def __init__(self, environ, populate_request=True, shallow=False):
super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow)
self.web = environ['web']
+ self.stop_q = environ['stop_q']
+
+ self.web.common.log('ReceiveModeRequest', '__init__')
+
+ # Prevent running the close() method more than once
+ self.closed = False
# Is this a valid upload request?
self.upload_request = False
@@ -275,13 +305,8 @@ class ReceiveModeRequest(Request):
strings._("receive_mode_upload_starting").format(self.web.common.human_readable_filesize(self.content_length))
))
- # Tell the GUI
- self.web.add_request(self.web.REQUEST_STARTED, self.path, {
- 'id': self.upload_id,
- 'content_length': self.content_length
- })
-
- self.web.receive_mode.uploads_in_progress.append(self.upload_id)
+ # Don't tell the GUI that a request has started until we start receiving files
+ self.told_gui_about_request = False
self.previous_file = None
@@ -291,25 +316,52 @@ class ReceiveModeRequest(Request):
writable stream.
"""
if self.upload_request:
+ if not self.told_gui_about_request:
+ # Tell the GUI about the request
+ self.web.add_request(self.web.REQUEST_STARTED, self.path, {
+ 'id': self.upload_id,
+ 'content_length': self.content_length
+ })
+ self.web.receive_mode.uploads_in_progress.append(self.upload_id)
+
+ self.told_gui_about_request = True
+
self.progress[filename] = {
'uploaded_bytes': 0,
'complete': False
}
- return ReceiveModeTemporaryFile(filename, self.file_write_func, self.file_close_func)
+ return ReceiveModeTemporaryFile(self, filename, self.file_write_func, self.file_close_func)
def close(self):
"""
Closing the request.
"""
super(ReceiveModeRequest, self).close()
+
+ # Prevent calling this method more than once per request
+ if self.closed:
+ return
+ self.closed = True
+
+ self.web.common.log('ReceiveModeRequest', 'close')
+
try:
- upload_id = self.upload_id
- # Inform the GUI that the upload has finished
- self.web.add_request(self.web.REQUEST_UPLOAD_FINISHED, self.path, {
- 'id': upload_id
- })
- self.web.receive_mode.uploads_in_progress.remove(upload_id)
+ if self.told_gui_about_request:
+ upload_id = self.upload_id
+
+ if not self.web.stop_q.empty():
+ # Inform the GUI that the upload has canceled
+ self.web.add_request(self.web.REQUEST_UPLOAD_CANCELED, self.path, {
+ 'id': upload_id
+ })
+ else:
+ # Inform the GUI that the upload has finished
+ self.web.add_request(self.web.REQUEST_UPLOAD_FINISHED, self.path, {
+ 'id': upload_id
+ })
+ self.web.receive_mode.uploads_in_progress.remove(upload_id)
+
except AttributeError:
pass
@@ -317,6 +369,9 @@ class ReceiveModeRequest(Request):
"""
This function gets called when a specific file is written to.
"""
+ if self.closed:
+ return
+
if self.upload_request:
self.progress[filename]['uploaded_bytes'] += length
@@ -331,10 +386,11 @@ class ReceiveModeRequest(Request):
), end='')
# Update the GUI on the upload progress
- self.web.add_request(self.web.REQUEST_PROGRESS, self.path, {
- 'id': self.upload_id,
- 'progress': self.progress
- })
+ if self.told_gui_about_request:
+ self.web.add_request(self.web.REQUEST_PROGRESS, self.path, {
+ 'id': self.upload_id,
+ 'progress': self.progress
+ })
def file_close_func(self, filename):
"""
diff --git a/onionshare/web/share_mode.py b/onionshare/web/share_mode.py
index a57d0a39..eb487c42 100644
--- a/onionshare/web/share_mode.py
+++ b/onionshare/web/share_mode.py
@@ -34,11 +34,6 @@ class ShareModeWeb(object):
# one download at a time.
self.download_in_progress = False
- # If the client closes the OnionShare window while a download is in progress,
- # it should immediately stop serving the file. The client_cancel global is
- # used to tell the download function that the client is canceling the download.
- self.client_cancel = False
-
self.define_routes()
def define_routes(self):
@@ -146,9 +141,6 @@ class ShareModeWeb(object):
basename = os.path.basename(self.download_filename)
def generate():
- # The user hasn't canceled the download
- self.client_cancel = False
-
# Starting a new download
if not self.web.stay_open:
self.download_in_progress = True
@@ -160,7 +152,7 @@ class ShareModeWeb(object):
canceled = False
while not self.web.done:
# The user has canceled the download, so stop serving the file
- if self.client_cancel:
+ if not self.web.stop_q.empty():
self.web.add_request(self.web.REQUEST_CANCELED, path, {
'id': download_id
})
diff --git a/onionshare/web/web.py b/onionshare/web/web.py
index 0f156941..e2b22c4d 100644
--- a/onionshare/web/web.py
+++ b/onionshare/web/web.py
@@ -35,11 +35,11 @@ class Web(object):
REQUEST_OTHER = 3
REQUEST_CANCELED = 4
REQUEST_RATE_LIMIT = 5
- REQUEST_CLOSE_SERVER = 6
- REQUEST_UPLOAD_FILE_RENAMED = 7
- REQUEST_UPLOAD_SET_DIR = 8
- REQUEST_UPLOAD_FINISHED = 9
- REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE = 10
+ REQUEST_UPLOAD_FILE_RENAMED = 6
+ REQUEST_UPLOAD_SET_DIR = 7
+ REQUEST_UPLOAD_FINISHED = 8
+ REQUEST_UPLOAD_CANCELED = 9
+ REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 10
def __init__(self, common, is_gui, mode='share'):
self.common = common
@@ -58,6 +58,11 @@ class Web(object):
# Are we running in GUI mode?
self.is_gui = is_gui
+ # If the user stops the server while a transfer is in progress, it should
+ # immediately stop the transfer. In order to make it thread-safe, stop_q
+ # is a queue. If anything is in it, then the user stopped the server
+ self.stop_q = queue.Queue()
+
# Are we using receive mode?
self.mode = mode
if self.mode == 'receive':
@@ -225,6 +230,13 @@ class Web(object):
self.stay_open = stay_open
+ # Make sure the stop_q is empty when starting a new server
+ while not self.stop_q.empty():
+ try:
+ self.stop_q.get(block=False)
+ except queue.Empty:
+ pass
+
# In Whonix, listen on 0.0.0.0 instead of 127.0.0.1 (#220)
if os.path.exists('/usr/share/anon-ws-base-files/workstation'):
host = '0.0.0.0'
@@ -238,11 +250,10 @@ class Web(object):
"""
Stop the flask web server by loading /shutdown.
"""
+ self.common.log('Web', 'stop', 'stopping server')
- if self.mode == 'share':
- # If the user cancels the download, let the download function know to stop
- # serving the file
- self.share_mode.client_cancel = True
+ # Let the mode know that the user stopped the server
+ self.stop_q.put(True)
# To stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
if self.running:
diff --git a/onionshare_gui/mode/__init__.py b/onionshare_gui/mode/__init__.py
index 5110289f..4fe335e7 100644
--- a/onionshare_gui/mode/__init__.py
+++ b/onionshare_gui/mode/__init__.py
@@ -312,12 +312,6 @@ class Mode(QtWidgets.QWidget):
"""
pass
- def handle_request_close_server(self, event):
- """
- Handle REQUEST_CLOSE_SERVER event.
- """
- pass
-
def handle_request_upload_file_renamed(self, event):
"""
Handle REQUEST_UPLOAD_FILE_RENAMED event.
@@ -335,3 +329,9 @@ class Mode(QtWidgets.QWidget):
Handle REQUEST_UPLOAD_FINISHED event.
"""
pass
+
+ def handle_request_upload_canceled(self, event):
+ """
+ Handle REQUEST_UPLOAD_CANCELED event.
+ """
+ pass
diff --git a/onionshare_gui/mode/history.py b/onionshare_gui/mode/history.py
index e72a3838..6af804b2 100644
--- a/onionshare_gui/mode/history.py
+++ b/onionshare_gui/mode/history.py
@@ -40,13 +40,49 @@ class HistoryItem(QtWidgets.QWidget):
def cancel(self):
pass
+ def get_finished_label_text(self, started):
+ """
+ When an item finishes, returns a string displaying the start/end datetime range.
+ started is a datetime object.
+ """
+ return self._get_label_text('gui_all_modes_transfer_finished', 'gui_all_modes_transfer_finished_range', started)
+
+ def get_canceled_label_text(self, started):
+ """
+ When an item is canceled, returns a string displaying the start/end datetime range.
+ started is a datetime object.
+ """
+ return self._get_label_text('gui_all_modes_transfer_canceled', 'gui_all_modes_transfer_canceled_range', started)
+
+ def _get_label_text(self, string_name, string_range_name, started):
+ """
+ Return a string that contains a date, or date range.
+ """
+ ended = datetime.now()
+ if started.year == ended.year and started.month == ended.month and started.day == ended.day:
+ if started.hour == ended.hour and started.minute == ended.minute:
+ text = strings._(string_name).format(
+ started.strftime("%b %d, %I:%M%p")
+ )
+ else:
+ text = strings._(string_range_name).format(
+ started.strftime("%b %d, %I:%M%p"),
+ ended.strftime("%I:%M%p")
+ )
+ else:
+ text = strings._(string_range_name).format(
+ started.strftime("%b %d, %I:%M%p"),
+ ended.strftime("%b %d, %I:%M%p")
+ )
+ return text
-class DownloadHistoryItem(HistoryItem):
+
+class ShareHistoryItem(HistoryItem):
"""
Download history item, for share mode
"""
def __init__(self, common, id, total_bytes):
- super(DownloadHistoryItem, self).__init__()
+ super(ShareHistoryItem, self).__init__()
self.common = common
self.id = id
@@ -56,7 +92,7 @@ class DownloadHistoryItem(HistoryItem):
self.started_dt = datetime.fromtimestamp(self.started)
# Label
- self.label = QtWidgets.QLabel(strings._('gui_download_in_progress').format(self.started_dt.strftime("%b %d, %I:%M%p")))
+ self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started_dt.strftime("%b %d, %I:%M%p")))
# Progress bar
self.progress_bar = QtWidgets.QProgressBar()
@@ -83,18 +119,22 @@ class DownloadHistoryItem(HistoryItem):
self.progress_bar.setValue(downloaded_bytes)
if downloaded_bytes == self.progress_bar.total_bytes:
- pb_fmt = strings._('gui_download_upload_progress_complete').format(
+ pb_fmt = strings._('gui_all_modes_progress_complete').format(
self.common.format_seconds(time.time() - self.started))
+
+ # Change the label
+ self.label.setText(self.get_finished_label_text(self.started_dt))
+
else:
elapsed = time.time() - self.started
if elapsed < 10:
# Wait a couple of seconds for the download rate to stabilize.
# This prevents a "Windows copy dialog"-esque experience at
# the beginning of the download.
- pb_fmt = strings._('gui_download_upload_progress_starting').format(
+ pb_fmt = strings._('gui_all_modes_progress_starting').format(
self.common.human_readable_filesize(downloaded_bytes))
else:
- pb_fmt = strings._('gui_download_upload_progress_eta').format(
+ pb_fmt = strings._('gui_all_modes_progress_eta').format(
self.common.human_readable_filesize(downloaded_bytes),
self.estimated_time_remaining)
@@ -110,12 +150,12 @@ class DownloadHistoryItem(HistoryItem):
self.started)
-class UploadHistoryItemFile(QtWidgets.QWidget):
+class ReceiveHistoryItemFile(QtWidgets.QWidget):
def __init__(self, common, filename):
- super(UploadHistoryItemFile, self).__init__()
+ super(ReceiveHistoryItemFile, self).__init__()
self.common = common
- self.common.log('UploadHistoryItemFile', '__init__', 'filename: {}'.format(filename))
+ self.common.log('ReceiveHistoryItemFile', '__init__', 'filename: {}'.format(filename))
self.filename = filename
self.dir = None
@@ -166,10 +206,10 @@ class UploadHistoryItemFile(QtWidgets.QWidget):
"""
Open the downloads folder, with the file selected, in a cross-platform manner
"""
- self.common.log('UploadHistoryItemFile', 'open_folder')
+ self.common.log('ReceiveHistoryItemFile', 'open_folder')
if not self.dir:
- self.common.log('UploadHistoryItemFile', 'open_folder', "dir has not been set yet, can't open folder")
+ self.common.log('ReceiveHistoryItemFile', 'open_folder', "dir has not been set yet, can't open folder")
return
abs_filename = os.path.join(self.dir, self.filename)
@@ -184,22 +224,22 @@ class UploadHistoryItemFile(QtWidgets.QWidget):
# macOS
elif self.common.platform == 'Darwin':
- subprocess.call(['open', '-R', abs_filename])
+ subprocess.call(['open', '-R', abs_filename])
# Windows
elif self.common.platform == 'Windows':
subprocess.Popen(['explorer', '/select,{}'.format(abs_filename)])
-class UploadHistoryItem(HistoryItem):
+class ReceiveHistoryItem(HistoryItem):
def __init__(self, common, id, content_length):
- super(UploadHistoryItem, self).__init__()
+ super(ReceiveHistoryItem, self).__init__()
self.common = common
self.id = id
self.content_length = content_length
self.started = datetime.now()
# Label
- self.label = QtWidgets.QLabel(strings._('gui_upload_in_progress').format(self.started.strftime("%b %d, %I:%M%p")))
+ self.label = QtWidgets.QLabel(strings._('gui_all_modes_transfer_started').format(self.started.strftime("%b %d, %I:%M%p")))
# Progress bar
self.progress_bar = QtWidgets.QProgressBar()
@@ -244,14 +284,14 @@ class UploadHistoryItem(HistoryItem):
elapsed = datetime.now() - self.started
if elapsed.seconds < 10:
- pb_fmt = strings._('gui_download_upload_progress_starting').format(
+ pb_fmt = strings._('gui_all_modes_progress_starting').format(
self.common.human_readable_filesize(total_uploaded_bytes))
else:
estimated_time_remaining = self.common.estimated_time_remaining(
total_uploaded_bytes,
self.content_length,
self.started.timestamp())
- pb_fmt = strings._('gui_download_upload_progress_eta').format(
+ pb_fmt = strings._('gui_all_modes_progress_eta').format(
self.common.human_readable_filesize(total_uploaded_bytes),
estimated_time_remaining)
@@ -259,7 +299,7 @@ class UploadHistoryItem(HistoryItem):
for filename in list(data['progress']):
# Add a new file if needed
if filename not in self.files:
- self.files[filename] = UploadHistoryItemFile(self.common, filename)
+ self.files[filename] = ReceiveHistoryItemFile(self.common, filename)
self.files_layout.addWidget(self.files[filename])
# Update the file
@@ -277,23 +317,14 @@ class UploadHistoryItem(HistoryItem):
self.progress_bar.hide()
# Change the label
- self.ended = self.started = datetime.now()
- if self.started.year == self.ended.year and self.started.month == self.ended.month and self.started.day == self.ended.day:
- if self.started.hour == self.ended.hour and self.started.minute == self.ended.minute:
- text = strings._('gui_upload_finished').format(
- self.started.strftime("%b %d, %I:%M%p")
- )
- else:
- text = strings._('gui_upload_finished_range').format(
- self.started.strftime("%b %d, %I:%M%p"),
- self.ended.strftime("%I:%M%p")
- )
- else:
- text = strings._('gui_upload_finished_range').format(
- self.started.strftime("%b %d, %I:%M%p"),
- self.ended.strftime("%b %d, %I:%M%p")
- )
- self.label.setText(text)
+ self.label.setText(self.get_finished_label_text(self.started))
+
+ elif data['action'] == 'canceled':
+ # Hide the progress bar
+ self.progress_bar.hide()
+
+ # Change the label
+ self.label.setText(self.get_canceled_label_text(self.started))
class HistoryItemList(QtWidgets.QScrollArea):
@@ -344,13 +375,15 @@ class HistoryItemList(QtWidgets.QScrollArea):
"""
Update an item. Override this method.
"""
- self.items[id].update(data)
+ if id in self.items:
+ self.items[id].update(data)
def cancel(self, id):
"""
Cancel an item. Override this method.
"""
- self.items[id].cancel()
+ if id in self.items:
+ self.items[id].cancel()
def reset(self):
"""
@@ -386,7 +419,7 @@ class History(QtWidgets.QWidget):
# Header
self.header_label = QtWidgets.QLabel(header_text)
self.header_label.setStyleSheet(self.common.css['downloads_uploads_label'])
- clear_button = QtWidgets.QPushButton(strings._('gui_clear_history'))
+ clear_button = QtWidgets.QPushButton(strings._('gui_all_modes_clear_history'))
clear_button.setStyleSheet(self.common.css['downloads_uploads_clear'])
clear_button.setFlat(True)
clear_button.clicked.connect(self.reset)
diff --git a/onionshare_gui/mode/receive_mode/__init__.py b/onionshare_gui/mode/receive_mode/__init__.py
index c53f1ea1..3a90f2f4 100644
--- a/onionshare_gui/mode/receive_mode/__init__.py
+++ b/onionshare_gui/mode/receive_mode/__init__.py
@@ -22,7 +22,7 @@ from PyQt5 import QtCore, QtWidgets, QtGui
from onionshare import strings
from onionshare.web import Web
-from ..history import History, ToggleHistory, UploadHistoryItem
+from ..history import History, ToggleHistory, ReceiveHistoryItem
from .. import Mode
class ReceiveMode(Mode):
@@ -49,17 +49,17 @@ class ReceiveMode(Mode):
# Upload history
self.history = History(
self.common,
- QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/uploads_transparent.png'))),
- strings._('gui_no_uploads'),
- strings._('gui_uploads')
+ QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/receive_icon_transparent.png'))),
+ strings._('gui_receive_mode_no_files'),
+ strings._('gui_all_modes_history')
)
self.history.hide()
# Toggle history
self.toggle_history = ToggleHistory(
self.common, self, self.history,
- QtGui.QIcon(self.common.get_resource_path('images/uploads_toggle.png')),
- QtGui.QIcon(self.common.get_resource_path('images/uploads_toggle_selected.png'))
+ QtGui.QIcon(self.common.get_resource_path('images/receive_icon_toggle.png')),
+ QtGui.QIcon(self.common.get_resource_path('images/receive_icon_toggle_selected.png'))
)
# Receive mode warning
@@ -83,7 +83,7 @@ class ReceiveMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QHBoxLayout()
self.wrapper_layout.addLayout(self.main_layout)
- self.wrapper_layout.addWidget(self.history)
+ self.wrapper_layout.addWidget(self.history, stretch=1)
self.setLayout(self.wrapper_layout)
def get_stop_server_shutdown_timeout_text(self):
@@ -103,7 +103,7 @@ class ReceiveMode(Mode):
return True
# An upload is probably still running - hold off on stopping the share, but block new shares.
else:
- self.server_status_label.setText(strings._('timeout_upload_still_running'))
+ self.server_status_label.setText(strings._('gui_receive_mode_timeout_waiting'))
self.web.receive_mode.can_upload = False
return False
@@ -136,19 +136,19 @@ class ReceiveMode(Mode):
"""
Handle REQUEST_LOAD event.
"""
- self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_upload_page_loaded_message'))
+ self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_page_loaded_message'))
def handle_request_started(self, event):
"""
Handle REQUEST_STARTED event.
"""
- item = UploadHistoryItem(self.common, event["data"]["id"], event["data"]["content_length"])
+ item = ReceiveHistoryItem(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
self.history.update_in_progress()
- self.system_tray.showMessage(strings._('systray_upload_started_title'), strings._('systray_upload_started_message'))
+ self.system_tray.showMessage(strings._('systray_receive_started_title'), strings._('systray_receive_started_message'))
def handle_request_progress(self, event):
"""
@@ -159,13 +159,6 @@ class ReceiveMode(Mode):
'progress': event["data"]["progress"]
})
- def handle_request_close_server(self, event):
- """
- Handle REQUEST_CLOSE_SERVER event.
- """
- self.stop_server()
- self.system_tray.showMessage(strings._('systray_close_server_title'), strings._('systray_close_server_message'))
-
def handle_request_upload_file_renamed(self, event):
"""
Handle REQUEST_UPLOAD_FILE_RENAMED event.
@@ -198,6 +191,18 @@ class ReceiveMode(Mode):
self.history.update_completed()
self.history.update_in_progress()
+ def handle_request_upload_canceled(self, event):
+ """
+ Handle REQUEST_UPLOAD_CANCELED event.
+ """
+ self.history.update(event["data"]["id"], {
+ 'action': 'canceled'
+ })
+ self.history.completed_count += 1
+ self.history.in_progress_count -= 1
+ self.history.update_completed()
+ self.history.update_in_progress()
+
def on_reload_settings(self):
"""
We should be ok to re-enable the 'Start Receive Mode' button now.
diff --git a/onionshare_gui/mode/share_mode/__init__.py b/onionshare_gui/mode/share_mode/__init__.py
index 0cc00f92..1f5ad00b 100644
--- a/onionshare_gui/mode/share_mode/__init__.py
+++ b/onionshare_gui/mode/share_mode/__init__.py
@@ -28,7 +28,7 @@ from onionshare.web import Web
from .file_selection import FileSelection
from .threads import CompressThread
from .. import Mode
-from ..history import History, ToggleHistory, DownloadHistoryItem
+from ..history import History, ToggleHistory, ShareHistoryItem
from ...widgets import Alert
@@ -74,9 +74,9 @@ class ShareMode(Mode):
# Download history
self.history = History(
self.common,
- QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/downloads_transparent.png'))),
- strings._('gui_no_downloads'),
- strings._('gui_downloads')
+ QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/share_icon_transparent.png'))),
+ strings._('gui_share_mode_no_files'),
+ strings._('gui_all_modes_history')
)
self.history.hide()
@@ -87,8 +87,8 @@ class ShareMode(Mode):
# Toggle history
self.toggle_history = ToggleHistory(
self.common, self, self.history,
- QtGui.QIcon(self.common.get_resource_path('images/downloads_toggle.png')),
- QtGui.QIcon(self.common.get_resource_path('images/downloads_toggle_selected.png'))
+ QtGui.QIcon(self.common.get_resource_path('images/share_icon_toggle.png')),
+ QtGui.QIcon(self.common.get_resource_path('images/share_icon_toggle_selected.png'))
)
# Top bar
@@ -115,7 +115,7 @@ class ShareMode(Mode):
# Wrapper layout
self.wrapper_layout = QtWidgets.QHBoxLayout()
self.wrapper_layout.addLayout(self.main_layout)
- self.wrapper_layout.addWidget(self.history)
+ self.wrapper_layout.addWidget(self.history, stretch=1)
self.setLayout(self.wrapper_layout)
# Always start with focus on file selection
@@ -138,7 +138,7 @@ class ShareMode(Mode):
return True
# A download is probably still running - hold off on stopping the share
else:
- self.server_status_label.setText(strings._('timeout_download_still_running'))
+ self.server_status_label.setText(strings._('gui_share_mode_timeout_waiting'))
return False
def start_server_custom(self):
@@ -229,7 +229,7 @@ class ShareMode(Mode):
"""
Handle REQUEST_LOAD event.
"""
- self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_download_page_loaded_message'))
+ self.system_tray.showMessage(strings._('systray_page_loaded_title'), strings._('systray_page_loaded_message'))
def handle_request_started(self, event):
"""
@@ -240,13 +240,13 @@ class ShareMode(Mode):
else:
filesize = self.web.share_mode.download_filesize
- item = DownloadHistoryItem(self.common, event["data"]["id"], filesize)
+ item = ShareHistoryItem(self.common, event["data"]["id"], filesize)
self.history.add(event["data"]["id"], item)
self.toggle_history.update_indicator(True)
self.history.in_progress_count += 1
self.history.update_in_progress()
- self.system_tray.showMessage(strings._('systray_download_started_title'), strings._('systray_download_started_message'))
+ self.system_tray.showMessage(strings._('systray_share_started_title'), strings._('systray_share_started_message'))
def handle_request_progress(self, event):
"""
@@ -256,7 +256,7 @@ class ShareMode(Mode):
# Is the download complete?
if event["data"]["bytes"] == self.web.share_mode.filesize:
- self.system_tray.showMessage(strings._('systray_download_completed_title'), strings._('systray_download_completed_message'))
+ self.system_tray.showMessage(strings._('systray_share_completed_title'), strings._('systray_share_completed_message'))
# Update completed and in progress labels
self.history.completed_count += 1
@@ -284,7 +284,7 @@ class ShareMode(Mode):
# Update in progress count
self.history.in_progress_count -= 1
self.history.update_in_progress()
- self.system_tray.showMessage(strings._('systray_download_canceled_title'), strings._('systray_download_canceled_message'))
+ self.system_tray.showMessage(strings._('systray_share_canceled_title'), strings._('systray_share_canceled_message'))
def on_reload_settings(self):
"""
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index eab3261e..27abf5e5 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -384,9 +384,6 @@ class OnionShareGui(QtWidgets.QMainWindow):
elif event["type"] == Web.REQUEST_CANCELED:
mode.handle_request_canceled(event)
- elif event["type"] == Web.REQUEST_CLOSE_SERVER:
- mode.handle_request_close_server(event)
-
elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED:
mode.handle_request_upload_file_renamed(event)
@@ -396,8 +393,11 @@ class OnionShareGui(QtWidgets.QMainWindow):
elif event["type"] == Web.REQUEST_UPLOAD_FINISHED:
mode.handle_request_upload_finished(event)
- if event["type"] == Web.REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE:
- Alert(self.common, strings._('error_cannot_create_downloads_dir').format(event["data"]["receive_mode_dir"]))
+ elif event["type"] == Web.REQUEST_UPLOAD_CANCELED:
+ mode.handle_request_upload_canceled(event)
+
+ if event["type"] == Web.REQUEST_ERROR_DATA_DIR_CANNOT_CREATE:
+ Alert(self.common, strings._('error_cannot_create_data_dir').format(event["data"]["receive_mode_dir"]))
if event["type"] == Web.REQUEST_OTHER:
if event["path"] != '/favicon.ico' and event["path"] != "/{}/shutdown".format(mode.web.shutdown_slug):
diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py
index b933c30f..1fe6dc53 100644
--- a/onionshare_gui/settings_dialog.py
+++ b/onionshare_gui/settings_dialog.py
@@ -187,20 +187,20 @@ class SettingsDialog(QtWidgets.QDialog):
sharing_group = QtWidgets.QGroupBox(strings._("gui_settings_sharing_label"))
sharing_group.setLayout(sharing_group_layout)
- # Downloads dir
- downloads_label = QtWidgets.QLabel(strings._('gui_settings_downloads_label'));
- self.downloads_dir_lineedit = QtWidgets.QLineEdit()
- self.downloads_dir_lineedit.setReadOnly(True)
- downloads_button = QtWidgets.QPushButton(strings._('gui_settings_downloads_button'))
- downloads_button.clicked.connect(self.downloads_button_clicked)
- downloads_layout = QtWidgets.QHBoxLayout()
- downloads_layout.addWidget(downloads_label)
- downloads_layout.addWidget(self.downloads_dir_lineedit)
- downloads_layout.addWidget(downloads_button)
+ # OnionShare data dir
+ data_dir_label = QtWidgets.QLabel(strings._('gui_settings_data_dir_label'));
+ self.data_dir_lineedit = QtWidgets.QLineEdit()
+ self.data_dir_lineedit.setReadOnly(True)
+ data_dir_button = QtWidgets.QPushButton(strings._('gui_settings_data_dir_browse_button'))
+ data_dir_button.clicked.connect(self.data_dir_button_clicked)
+ data_dir_layout = QtWidgets.QHBoxLayout()
+ data_dir_layout.addWidget(data_dir_label)
+ data_dir_layout.addWidget(self.data_dir_lineedit)
+ data_dir_layout.addWidget(data_dir_button)
# Receiving options layout
receiving_group_layout = QtWidgets.QVBoxLayout()
- receiving_group_layout.addLayout(downloads_layout)
+ receiving_group_layout.addLayout(data_dir_layout)
receiving_group = QtWidgets.QGroupBox(strings._("gui_settings_receiving_label"))
receiving_group.setLayout(receiving_group_layout)
@@ -508,8 +508,8 @@ class SettingsDialog(QtWidgets.QDialog):
if use_legacy_v2_onions or save_private_key:
self.use_legacy_v2_onions_checkbox.setCheckState(QtCore.Qt.Checked)
- downloads_dir = self.old_settings.get('downloads_dir')
- self.downloads_dir_lineedit.setText(downloads_dir)
+ data_dir = self.old_settings.get('data_dir')
+ self.data_dir_lineedit.setText(data_dir)
public_mode = self.old_settings.get('public_mode')
if public_mode:
@@ -747,17 +747,17 @@ class SettingsDialog(QtWidgets.QDialog):
if not self.save_private_key_checkbox.isChecked():
self.use_legacy_v2_onions_checkbox.setEnabled(True)
- def downloads_button_clicked(self):
+ def data_dir_button_clicked(self):
"""
- Browse for a new downloads directory
+ Browse for a new OnionShare data directory
"""
- downloads_dir = self.downloads_dir_lineedit.text()
+ data_dir = self.data_dir_lineedit.text()
selected_dir = QtWidgets.QFileDialog.getExistingDirectory(self,
- strings._('gui_settings_downloads_label'), downloads_dir)
+ strings._('gui_settings_data_dir_label'), data_dir)
if selected_dir:
- self.common.log('SettingsDialog', 'downloads_button_clicked', 'selected dir: {}'.format(selected_dir))
- self.downloads_dir_lineedit.setText(selected_dir)
+ self.common.log('SettingsDialog', 'data_dir_button_clicked', 'selected dir: {}'.format(selected_dir))
+ self.data_dir_lineedit.setText(selected_dir)
def test_tor_clicked(self):
"""
@@ -981,7 +981,7 @@ class SettingsDialog(QtWidgets.QDialog):
# Also unset the HidServAuth if we are removing our reusable private key
settings.set('hidservauth_string', '')
- settings.set('downloads_dir', self.downloads_dir_lineedit.text())
+ settings.set('data_dir', self.data_dir_lineedit.text())
settings.set('public_mode', self.public_mode_checkbox.isChecked())
settings.set('use_stealth', self.stealth_checkbox.isChecked())
# Always unset the HidServAuth if Stealth mode is unset
diff --git a/share/images/downloads.png b/share/images/downloads.png
deleted file mode 100644
index ad879b6e..00000000
--- a/share/images/downloads.png
+++ /dev/null
Binary files differ
diff --git a/share/images/downloads_toggle.png b/share/images/receive_icon_toggle.png
index 846ececb..846ececb 100644
--- a/share/images/downloads_toggle.png
+++ b/share/images/receive_icon_toggle.png
Binary files differ
diff --git a/share/images/downloads_toggle_selected.png b/share/images/receive_icon_toggle_selected.png
index 127ce208..127ce208 100644
--- a/share/images/downloads_toggle_selected.png
+++ b/share/images/receive_icon_toggle_selected.png
Binary files differ
diff --git a/share/images/downloads_transparent.png b/share/images/receive_icon_transparent.png
index 99207097..99207097 100644
--- a/share/images/downloads_transparent.png
+++ b/share/images/receive_icon_transparent.png
Binary files differ
diff --git a/share/images/uploads_toggle.png b/share/images/share_icon_toggle.png
index 87303c9f..87303c9f 100644
--- a/share/images/uploads_toggle.png
+++ b/share/images/share_icon_toggle.png
Binary files differ
diff --git a/share/images/uploads_toggle_selected.png b/share/images/share_icon_toggle_selected.png
index 0ba52cff..0ba52cff 100644
--- a/share/images/uploads_toggle_selected.png
+++ b/share/images/share_icon_toggle_selected.png
Binary files differ
diff --git a/share/images/uploads_transparent.png b/share/images/share_icon_transparent.png
index 3648c3fb..3648c3fb 100644
--- a/share/images/uploads_transparent.png
+++ b/share/images/share_icon_transparent.png
Binary files differ
diff --git a/share/images/uploads.png b/share/images/uploads.png
deleted file mode 100644
index cd9bd98e..00000000
--- a/share/images/uploads.png
+++ /dev/null
Binary files differ
diff --git a/share/locale/da.json b/share/locale/da.json
index fdb456e0..b87f0151 100644
--- a/share/locale/da.json
+++ b/share/locale/da.json
@@ -9,7 +9,7 @@
"no_available_port": "Kunne ikke finde en tilgængelig port til at starte onion-tjenesten",
"other_page_loaded": "Adresse indlæst",
"close_on_timeout": "Stoppede fordi timer med autostop løb ud",
- "closing_automatically": "Stoppede fordi download er færdig",
+ "closing_automatically": "Stoppede fordi overførslen er færdig",
"timeout_download_still_running": "Venter på at download skal blive færdig",
"large_filesize": "Advarsel: Det kan tage timer at sende en stor deling",
"systray_menu_exit": "Afslut",
@@ -20,7 +20,7 @@
"systray_download_canceled_title": "OnionShare-download annulleret",
"systray_download_canceled_message": "Brugeren annullerede downloaden",
"help_local_only": "Brug ikke Tor (kun til udvikling)",
- "help_stay_open": "Bliv ved med at dele efter første download",
+ "help_stay_open": "Fortsæt deling efter filerne er blevet sendt",
"help_shutdown_timeout": "Stop deling efter et vist antal sekunder",
"help_stealth": "Brug klientautentifikation (avanceret)",
"help_debug": "Log OnionShare-fejl til stdout, og webfejl til disk",
@@ -59,7 +59,7 @@
"gui_settings_autoupdate_timestamp_never": "Aldrig",
"gui_settings_autoupdate_check_button": "Søg efter ny version",
"gui_settings_sharing_label": "Delingsindstillinger",
- "gui_settings_close_after_first_download_option": "Stop deling efter første download",
+ "gui_settings_close_after_first_download_option": "Stop deling efter filerne er blevet sendt",
"gui_settings_connection_type_label": "Hvordan skal OnionShare oprette forbindelse til Tor?",
"gui_settings_connection_type_bundled_option": "Brug Tor-versionen som er indbygget i OnionShare",
"gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser",
@@ -162,7 +162,7 @@
"gui_settings_public_mode_checkbox": "Offentlig tilstand",
"systray_close_server_title": "OnionShare-server lukket",
"systray_close_server_message": "En bruger lukkede serveren",
- "systray_page_loaded_title": "OnionShare-side indlæst",
+ "systray_page_loaded_title": "Siden er indlæst",
"systray_download_page_loaded_message": "En bruger indlæste downloadsiden",
"systray_upload_page_loaded_message": "En bruger indlæste uploadsiden",
"gui_uploads": "Uploadhistorik",
@@ -188,5 +188,32 @@
"timeout_upload_still_running": "Venter på at upload skal blive færdig",
"gui_add_files": "Tilføj filer",
"gui_add_folder": "Tilføj mappe",
- "gui_connect_to_tor_for_onion_settings": "Opret forbindelse til Tor for at se indstillinger for onion-tjeneste"
+ "gui_connect_to_tor_for_onion_settings": "Opret forbindelse til Tor for at se indstillinger for onion-tjeneste",
+ "error_cannot_create_data_dir": "Kunne ikke oprette OnionShare-datamappe: {}",
+ "receive_mode_data_dir": "Filer som sendes til dig vises i denne mappe: {}",
+ "gui_settings_data_dir_label": "Gem filer til",
+ "gui_settings_data_dir_browse_button": "Gennemse",
+ "systray_page_loaded_message": "OnionShare-adresse indlæst",
+ "systray_share_started_title": "Deling startet",
+ "systray_share_started_message": "Start på at sende filer til nogen",
+ "systray_share_completed_title": "Deling er færdig",
+ "systray_share_completed_message": "Færdig med at sende filer",
+ "systray_share_canceled_title": "Deling annulleret",
+ "systray_share_canceled_message": "Nogen annullerede modtagelsen af dine filer",
+ "systray_receive_started_title": "Modtagelse startede",
+ "systray_receive_started_message": "Nogen sender filer til dig",
+ "gui_all_modes_history": "Historik",
+ "gui_all_modes_clear_history": "Ryd alle",
+ "gui_all_modes_transfer_started": "Startede {}",
+ "gui_all_modes_transfer_finished_range": "Overførte {} - {}",
+ "gui_all_modes_transfer_finished": "Overførte {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} forløbet.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (udregner)",
+ "gui_all_modes_progress_eta": "{0:s}, anslået ankomsttidspunkt: {1:s}, %p%",
+ "gui_share_mode_no_files": "Der er endnu ikke sendt nogen filer",
+ "gui_share_mode_timeout_waiting": "Venter på at blive færdig med at sende",
+ "gui_receive_mode_no_files": "Der er endnu ikke modtaget nogen filer",
+ "gui_receive_mode_timeout_waiting": "Venter på at blive færdig med at modtage",
+ "gui_all_modes_transfer_canceled_range": "Annullerede {} - {}",
+ "gui_all_modes_transfer_canceled": "Annullerede {}"
}
diff --git a/share/locale/el.json b/share/locale/el.json
index dcdc97f1..c217716b 100644
--- a/share/locale/el.json
+++ b/share/locale/el.json
@@ -24,13 +24,13 @@
"systray_upload_started_title": "Η λήψη του OnionShare ξεκίνησε",
"systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου",
"help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)",
- "help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά τη πρώτη λήψη",
+ "help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά την αποστολή των αρχείων",
"help_shutdown_timeout": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων",
- "help_stealth": "Χρησιμοποιήστε άδεια χρήστη (Για προχωρημένους)",
- "help_receive": "",
- "help_debug": "",
+ "help_stealth": "Κάντε χρήση εξουσιοδότησης πελάτη (Για προχωρημένους)",
+ "help_receive": "Λάβετε διαμοιρασμένα αρχεία αντι να τα στέλνετε",
+ "help_debug": "Κατέγραψε τα σφάλματα του OnionShare στο stdout (συνήθως οθόνη) και τα σφάλματα web στον δίσκο",
"help_filename": "Λίστα αρχείων ή φακέλων για μοίρασμα",
- "help_config": "",
+ "help_config": "Ορίστε σημείο αποθήκευσης αρχείου JSON",
"gui_drag_and_drop": "Σύρτε και αφήστε αρχεία και φακέλους\nγια να αρχίσετε να τα μοιράζεστε",
"gui_add": "Προσθήκη",
"gui_delete": "Διαγραφή",
@@ -68,7 +68,7 @@
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
"gui_settings_window_title": "Ρυθμίσεις",
"gui_settings_whats_this": "<a href='{0:s}'> Τί είναι αυτό? </a>",
- "gui_settings_stealth_option": "Χρήση άδειας χρήστη (αδειοδότηση)",
+ "gui_settings_stealth_option": "Χρήση εξουσιοδότηση πελάτη",
"gui_settings_stealth_hidservauth_string": "Με την αποθήκευση των κλειδιών σας για χρήση εκ νέου, μπορείτε τώρα \nνα επιλέξετε την αντιγραφή του HidServAuth σας.",
"gui_settings_autoupdate_label": "Έλεγχος για νέα έκδοση",
"gui_settings_autoupdate_option": "Ενημερώστε με όταν είναι διαθέσιμη μια νέα έκδοση",
@@ -77,7 +77,7 @@
"gui_settings_autoupdate_check_button": "Έλεγχος για νέα έκδοση",
"gui_settings_general_label": "Γενικές ρυθμίσεις",
"gui_settings_sharing_label": "Ρυθμίσεις κοινοποίησης",
- "gui_settings_close_after_first_download_option": "Τερματισμός κοινοποίησης μετά την πρώτη λήψη",
+ "gui_settings_close_after_first_download_option": "Τερματισμός κοινοποίησης αρχείων μετά την αποστολή τους",
"gui_settings_connection_type_label": "Πώς πρέπει να συνδέεται το OnionShare με το Tor?",
"gui_settings_connection_type_bundled_option": "Χρησιμοποιήστε την έκδοση του Tor, ενσωματωμένη στο OnionShare",
"gui_settings_connection_type_automatic_option": "Προσπάθεια σύνδεσης με τον Tor Browser",
@@ -109,67 +109,67 @@
"settings_error_unknown": "Αδύνατη η σύνδεση του ελέγχου Tor, καθώς οι ρυθμίσεις σας δεν έχουν κανένα νόημα.",
"settings_error_automatic": "Είναι αδύνατη η σύνδεση στον έλεγχο του Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο?",
"settings_error_socket_port": "Αδύνατη η σύνδεση στον έλεγχο Tor στις {}:{}.",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
- "error_tor_protocol_error_unknown": "",
- "error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
- "gui_tor_connection_ask_open_settings": "",
- "gui_tor_connection_ask_quit": "",
- "gui_tor_connection_error_settings": "",
- "gui_tor_connection_canceled": "",
- "gui_tor_connection_lost": "",
- "gui_server_started_after_timeout": "",
- "gui_server_timeout_expired": "",
- "share_via_onionshare": "",
- "gui_use_legacy_v2_onions_checkbox": "",
- "gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
- "gui_status_indicator_share_working": "",
- "gui_status_indicator_share_started": "",
- "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": "",
+ "settings_error_socket_file": "Ανέφικτη η σύνδεση με τον ελεγκτή Tor, κάνοντας χρήση αρχείου socket {}.",
+ "settings_error_auth": "Εγινε σύνδεση με {}:{}, αλλα δεν μπορεί να γίνει πιστοποίηση. Ισως δεν ειναι ενας ελεγκτής Tor?",
+ "settings_error_missing_password": "Εγινε σύνδεση με ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.",
+ "settings_error_unreadable_cookie_file": "Εγινε σύνδεση με ελεγκτή Tor, αλλα ο κωδικός πιθανόν να είναι λάθος ή ο χρήστης δεν επιτρέπεται να διαβάζει αρχεία cookie.",
+ "settings_error_bundled_tor_not_supported": "Η έκδοση Tor που συνοδεύει το OnionShare δεν λειτουργεί σε περιβάλλον προγραμματιστή σε Windows ή macOS.",
+ "settings_error_bundled_tor_timeout": "Η σύνδεση με Tor αργεί αρκετά. Ισως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι σας δεν ειναι συγχρονισμένο?",
+ "settings_error_bundled_tor_broken": "Το OnionShare δεν μπορεί να συνδεθεί με το Tor στο παρασκήνιο:\n{}",
+ "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": "Δεν μπόρεσε να γίνει έλεγχος για νέες εκδόσεις. Ο ιστότοπος OnionShare αναφέρει ότι η πιό πρόσφατη έκδοση δεν αναγνωρίζεται '{}'…",
+ "update_error_invalid_latest_version": "Δεν μπόρεσε να γίνει έλεγχος για νέες εκδόσεις. Ισως δεν είστε συνδεδεμένοι στο Tor ή ο ιστότοπος OnionShare είναι κάτω?",
+ "update_not_available": "Εχετε την πιό πρόσφατη έκδοση OnionShare.",
+ "gui_tor_connection_ask": "Να ανοίξετε τις ρυθμίσεις για να επιλύσετε την σύνδεση με το Tor?",
+ "gui_tor_connection_ask_open_settings": "Ναι",
+ "gui_tor_connection_ask_quit": "Εξοδος",
+ "gui_tor_connection_error_settings": "Προσπαθήστε να αλλάξετε τον τρόπο σύνδεσης του OnionShare, με το δίκτυο Tor, από τις ρυθμίσεις.",
+ "gui_tor_connection_canceled": "Δεν μπόρεσε να γίνει σύνδεση με Tor.\n\nΕλέγξτε ότι είστε συνδεδεμένοι στο Διαδίκτυο, επανεκινήστε το OnionShare και ρυθμίστε την σύνδεση με το Tor.",
+ "gui_tor_connection_lost": "Εγινε αποσύνδεση απο το Tor.",
+ "gui_server_started_after_timeout": "Η λειτουργία auto-stop τερματίστηκε πριν την εκκίνηση διακομιστή.\nΠαρακαλώ κάντε εναν νέο διαμοιρασμό.",
+ "gui_server_timeout_expired": "Η λειτουργία auto-stop ήδη τερματίστηκε.\nΕνημερώστε την για να ξεκινήσετε τον διαμοιρασμό.",
+ "share_via_onionshare": "Κάντε το OnionShare",
+ "gui_use_legacy_v2_onions_checkbox": "Χρηση \"παραδοσιακών\" διευθύνσεων",
+ "gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης",
+ "gui_share_url_description": "<b>Οποιοσδήποτε</b> με αυτήν την διεύθυνση OnionShare, μπορεί να <b>κατεβάσει</b> τα αρχεία σας με χρήση <b> Φυλλομετρητη Tor</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Οποιοσδήποτε</b> με αυτήν την διεύθυνση OnionShare, μπορεί να <b>ανεβάσει</b> αρχεία στον υπολογιστή σας με χρήση του <b>Φυλλομετρητή Tor</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Αυτός ο διαμοιρασμός δεν έχει auto-stop.<br><br>Οποιοσδήποτε μετέπειτα διαμοιρασμός κάνει ξανα χρήση αυτής της διεύθυνσης. (Για να κάνετε χρήση διευθύνσεων μιάς φοράς (one-time addresses), απενεργοποιήστε την λειτουργία \"Μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "gui_url_label_stay_open": "Αυτος ο διαμοιρασμός δεν έχει auto-stop.",
+ "gui_url_label_onetime": "Αυτός ο διαμοιρασμός θα σταματήσει με την πρώτη λήψη.",
+ "gui_url_label_onetime_and_persistent": "Αυτός ο διαμοιρασμός δεν έχει auto-stop.<br><br>Οποιοσδήποτε μετέπειτα διαμοιρασμός θα κάνει ξανα χρήση αυτής της διεύθυνσης. (Για να κάνετε χρήση διευθύνσεων μιάς φοράς (one-time addresses), απενεργοποιήστε την λειτουργία \"Μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
+ "gui_status_indicator_share_stopped": "Ετοιμο για διαμοιρασμό",
+ "gui_status_indicator_share_working": "Ξεκινάει…",
+ "gui_status_indicator_share_started": "Διαμοιράζει",
+ "gui_status_indicator_receive_stopped": "Ετοιμο για λήψη",
+ "gui_status_indicator_receive_working": "Ξεκινάει…",
+ "gui_status_indicator_receive_started": "Γίνεται λήψη",
+ "gui_file_info": "{} αρχεία, {}",
+ "gui_file_info_single": "{} αρχείο, {}",
+ "history_in_progress_tooltip": "{} σε εξέλιξη",
+ "history_completed_tooltip": "{} ολοκληρώθηκε",
"info_in_progress_uploads_tooltip": "",
"info_completed_uploads_tooltip": "",
"error_cannot_create_downloads_dir": "",
"receive_mode_downloads_dir": "",
- "receive_mode_warning": "",
- "gui_receive_mode_warning": "",
- "receive_mode_upload_starting": "",
- "receive_mode_received_file": "",
- "gui_mode_share_button": "",
- "gui_mode_receive_button": "",
- "gui_settings_receiving_label": "",
+ "receive_mode_warning": "Προσοχή: η λειτουργία λήψης, επιτρέπει άλλους να ανεβάζουν αρχεία στον υπολογιστή σας. Μερικά αρχεία πιθανόν να είναι σε θέση να αποκτήσουν τον έλεγχο του υπολογιστή σας εαν τα ανοίξετε. Ανοίξτε μόνο αρχεία που σας εστειλαν άτομα που εμπιστεύεστε ή εαν ξέρετε τι κάνετε.",
+ "gui_receive_mode_warning": "Η λειτουργία λήψης, επιτρέπει άλλους να ανεβάζουν αρχεία στον υπολογιστή σας.<br><br><b> Μερικά αρχεία πιθανόν να είναι σε θέση να αποκτήσουν τον έλεγχο του υπολογιστή σας εαν τα ανοίξετε. Ανοίξτε μόνο αρχεία που σας εστειλαν άτομα που εμπιστεύεστε ή εαν ξέρετε τι κάνετε.</b>",
+ "receive_mode_upload_starting": "Αποστολή συνολικού μεγέθους {} ξεκινάει",
+ "receive_mode_received_file": "Ελήφθη: {}",
+ "gui_mode_share_button": "Διαμοίρασε αρχεία",
+ "gui_mode_receive_button": "Λήψη αρχείων",
+ "gui_settings_receiving_label": "Ρυθμίσεις λήψης",
"gui_settings_downloads_label": "",
"gui_settings_downloads_button": "",
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
- "gui_settings_public_mode_checkbox": "",
+ "gui_settings_public_mode_checkbox": "Δημόσια λειτουργία",
"systray_close_server_title": "",
"systray_close_server_message": "",
- "systray_page_loaded_title": "",
+ "systray_page_loaded_title": "Η σελίδα φορτώθηκε",
"systray_download_page_loaded_message": "",
"systray_upload_page_loaded_message": "",
"gui_uploads": "",
@@ -179,8 +179,36 @@
"gui_upload_finished_range": "",
"gui_upload_finished": "",
"gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "",
- "gui_settings_language_label": "",
- "gui_settings_language_changed_notice": "",
- "timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος"
+ "gui_open_folder_error_nautilus": "Δεν μπορεί να ανοιχτεί ο φάκελος γιατί το nautilus δεν είναι διαθέσιμο. Το αρχείο είναι εδω: {}",
+ "gui_settings_language_label": "Προτιμώμενη γλώσσα",
+ "gui_settings_language_changed_notice": "Επανεκινήστε το OnionShare για να ενεργοποιηθεί η αλλαγή γλώσσας.",
+ "timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος",
+ "gui_add_files": "Προσθέστε αρχεία",
+ "gui_add_folder": "Προσθέστε φάκελο",
+ "gui_connect_to_tor_for_onion_settings": "Συνδεθείτε με Tor για να δείτε τις ρυθμίσεις της υπηρεσίας onion",
+ "error_cannot_create_data_dir": "Δεν ήταν δυνατό να δημιουργηθεί φάκελος δεδομένων OnionShare: {}",
+ "receive_mode_data_dir": "Τα αρχεία που στάλθηκαν σε εσας εμφανίζοντε στον φάκελο: {}",
+ "gui_settings_data_dir_label": "Αποθήκευσε αρχεία στο",
+ "gui_settings_data_dir_browse_button": "Περιήγηση",
+ "systray_page_loaded_message": "Η διεύθυνση OnionShare φορτώθηκε",
+ "systray_share_started_title": "Ο διαμοιρασμός ξεκίνησε",
+ "systray_share_started_message": "Ξεκίνησε η αποστολή αρχείων σε κάποιον",
+ "systray_share_completed_title": "Ο διαμοιρασμός ολοκληρώθηκε",
+ "systray_share_completed_message": "Ολοκληρώθηκε η αποστολή αρχείων",
+ "systray_share_canceled_title": "Ο διαμοιρασμός ακυρώθηκε",
+ "systray_share_canceled_message": "Κάποιος ακύρωσε την λήψη των αρχείων σας",
+ "systray_receive_started_title": "Η λήψη ξεκίνησε",
+ "systray_receive_started_message": "Κάποιος σας στέλνει αρχεία",
+ "gui_all_modes_history": "Ιστορικό",
+ "gui_all_modes_clear_history": "Καθαρισμός όλων",
+ "gui_all_modes_transfer_started": "Ξεκινησε {}",
+ "gui_all_modes_transfer_finished_range": "Μεταφέρθηκαν {} - {}",
+ "gui_all_modes_transfer_finished": "Μεταφέρθηκαν {} - {}",
+ "gui_all_modes_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_timeout_waiting": "Αναμένοντας την ολοκλήρωση αποστολής",
+ "gui_receive_mode_no_files": "Δεν Εγινε Καμμία Λήψη Αρχείων Ακόμα",
+ "gui_receive_mode_timeout_waiting": "Αναμένοντας την ολοκλήρωση της λήψης"
}
diff --git a/share/locale/en.json b/share/locale/en.json
index 44eff150..3ad2efda 100644
--- a/share/locale/en.json
+++ b/share/locale/en.json
@@ -11,21 +11,10 @@
"no_available_port": "Could not find an available port to start the onion service",
"other_page_loaded": "Address loaded",
"close_on_timeout": "Stopped because auto-stop timer ran out",
- "closing_automatically": "Stopped because download finished",
- "timeout_download_still_running": "Waiting for download to complete",
- "timeout_upload_still_running": "Waiting for upload to complete",
+ "closing_automatically": "Stopped because transfer is complete",
"large_filesize": "Warning: Sending a large share could take hours",
- "systray_menu_exit": "Quit",
- "systray_download_started_title": "OnionShare Download Started",
- "systray_download_started_message": "A user started downloading your files",
- "systray_download_completed_title": "OnionShare Download Finished",
- "systray_download_completed_message": "The user finished downloading your files",
- "systray_download_canceled_title": "OnionShare Download Canceled",
- "systray_download_canceled_message": "The user canceled the download",
- "systray_upload_started_title": "OnionShare Upload Started",
- "systray_upload_started_message": "A user started uploading files to your computer",
"help_local_only": "Don't use Tor (only for development)",
- "help_stay_open": "Keep sharing after first download",
+ "help_stay_open": "Continue sharing after files have been sent",
"help_shutdown_timeout": "Stop sharing after a given amount of seconds",
"help_stealth": "Use client authorization (advanced)",
"help_receive": "Receive shares instead of sending them",
@@ -48,17 +37,12 @@
"gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}",
"gui_copy_url": "Copy Address",
"gui_copy_hidservauth": "Copy HidServAuth",
- "gui_downloads": "Download History",
- "gui_no_downloads": "No Downloads Yet",
"gui_canceled": "Canceled",
"gui_copied_url_title": "Copied OnionShare Address",
"gui_copied_url": "OnionShare address copied to clipboard",
"gui_copied_hidservauth_title": "Copied HidServAuth",
"gui_copied_hidservauth": "HidServAuth line copied to clipboard",
"gui_please_wait": "Starting… Click to cancel.",
- "gui_download_upload_progress_complete": "%p%, {0:s} elapsed.",
- "gui_download_upload_progress_starting": "{0:s}, %p% (calculating)",
- "gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "Not so fast",
"gui_share_quit_warning": "You're in the process of sending files. Are you sure you want to quit OnionShare?",
@@ -80,7 +64,7 @@
"gui_settings_autoupdate_check_button": "Check for New Version",
"gui_settings_general_label": "General settings",
"gui_settings_sharing_label": "Sharing settings",
- "gui_settings_close_after_first_download_option": "Stop sharing after first download",
+ "gui_settings_close_after_first_download_option": "Stop sharing after files have been sent",
"gui_settings_connection_type_label": "How should OnionShare connect to Tor?",
"gui_settings_connection_type_bundled_option": "Use the Tor version built into OnionShare",
"gui_settings_connection_type_automatic_option": "Attempt auto-configuration with Tor Browser",
@@ -156,10 +140,8 @@
"gui_file_info_single": "{} file, {}",
"history_in_progress_tooltip": "{} in progress",
"history_completed_tooltip": "{} completed",
- "info_in_progress_uploads_tooltip": "{} upload(s) in progress",
- "info_completed_uploads_tooltip": "{} upload(s) completed",
- "error_cannot_create_downloads_dir": "Could not create receive mode folder: {}",
- "receive_mode_downloads_dir": "Files sent to you appear in this folder: {}",
+ "error_cannot_create_data_dir": "Could not create OnionShare data folder: {}",
+ "receive_mode_data_dir": "Files sent to you appear in this folder: {}",
"receive_mode_warning": "Warning: Receive mode lets people upload files to your computer. Some files can potentially take control of your computer if you open them. Only open things from people you trust, or if you know what you are doing.",
"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>",
"receive_mode_upload_starting": "Upload of total size {} is starting",
@@ -167,22 +149,35 @@
"gui_mode_share_button": "Share Files",
"gui_mode_receive_button": "Receive Files",
"gui_settings_receiving_label": "Receiving settings",
- "gui_settings_downloads_label": "Save files to",
- "gui_settings_downloads_button": "Browse",
+ "gui_settings_data_dir_label": "Save files to",
+ "gui_settings_data_dir_browse_button": "Browse",
"gui_settings_public_mode_checkbox": "Public mode",
- "systray_close_server_title": "OnionShare Server Closed",
- "systray_close_server_message": "A user closed the server",
- "systray_page_loaded_title": "OnionShare Page Loaded",
- "systray_download_page_loaded_message": "A user loaded the download page",
- "systray_upload_page_loaded_message": "A user loaded the upload page",
- "gui_uploads": "Upload History",
- "gui_no_uploads": "No Uploads Yet",
- "gui_clear_history": "Clear All",
- "gui_upload_in_progress": "Upload Started {}",
- "gui_upload_finished_range": "Uploaded {} to {}",
- "gui_upload_finished": "Uploaded {}",
- "gui_download_in_progress": "Download Started {}",
"gui_open_folder_error_nautilus": "Cannot open folder because nautilus is not available. The file is here: {}",
"gui_settings_language_label": "Preferred language",
- "gui_settings_language_changed_notice": "Restart OnionShare for your change in language to take effect."
+ "gui_settings_language_changed_notice": "Restart OnionShare for your change in language to take effect.",
+ "systray_menu_exit": "Quit",
+ "systray_page_loaded_title": "Page Loaded",
+ "systray_page_loaded_message": "OnionShare address loaded",
+ "systray_share_started_title": "Sharing Started",
+ "systray_share_started_message": "Starting to send files to someone",
+ "systray_share_completed_title": "Sharing Complete",
+ "systray_share_completed_message": "Finished sending files",
+ "systray_share_canceled_title": "Sharing Canceled",
+ "systray_share_canceled_message": "Someone canceled receiving your files",
+ "systray_receive_started_title": "Receiving Started",
+ "systray_receive_started_message": "Someone is sending files to you",
+ "gui_all_modes_history": "History",
+ "gui_all_modes_clear_history": "Clear All",
+ "gui_all_modes_transfer_started": "Started {}",
+ "gui_all_modes_transfer_finished_range": "Transferred {} - {}",
+ "gui_all_modes_transfer_finished": "Transferred {}",
+ "gui_all_modes_transfer_canceled_range": "Canceled {} - {}",
+ "gui_all_modes_transfer_canceled": "Canceled {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} elapsed.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (calculating)",
+ "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
+ "gui_share_mode_no_files": "No Files Sent Yet",
+ "gui_share_mode_timeout_waiting": "Waiting to finish sending",
+ "gui_receive_mode_no_files": "No Files Received Yet",
+ "gui_receive_mode_timeout_waiting": "Waiting to finish receiving"
}
diff --git a/share/locale/es.json b/share/locale/es.json
index ce6c0fd2..3c6452a8 100644
--- a/share/locale/es.json
+++ b/share/locale/es.json
@@ -4,9 +4,9 @@
"ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor",
"not_a_file": "{0:s} no es un archivo válido.",
"other_page_loaded": "La URL está lista",
- "closing_automatically": "Apagando automáticamente porque la descarga finalizó",
+ "closing_automatically": "Detenido porque la transferencia se completó",
"help_local_only": "No usar Tor (sólo para desarrollo)",
- "help_stay_open": "Mantener el servicio después de que la primera descarga haya finalizado",
+ "help_stay_open": "Continuar compartiendo luego que los archivos hayan sido enviados",
"help_debug": "Enviar los errores de OnionShare a stdout, y los errores web al disco",
"help_filename": "Lista de archivos o carpetas para compartir",
"gui_drag_and_drop": "Arrastra y suelta archivos y carpetas\npara empezar a compartir",
@@ -47,7 +47,7 @@
"gui_settings_tor_bridges": "Soporte de puentes de Tor",
"gui_settings_tor_bridges_invalid": "Ninguno de los puentes que has añadido funciona.\nVuelve a verificarlos o añade otros.",
"settings_saved": "Ajustes guardados en {}",
- "give_this_url_receive": "Dale esta dirección al remitente:",
+ "give_this_url_receive": "Dele esta dirección al remitente:",
"give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:",
"not_a_readable_file": "{0:s} no es un archivo legible.",
"systray_menu_exit": "Salir",
@@ -132,7 +132,7 @@
"gui_settings_autoupdate_timestamp_never": "Nunca",
"gui_settings_general_label": "Ajustes generales",
"gui_settings_sharing_label": "Configuración de compartición",
- "gui_settings_close_after_first_download_option": "Dejar de compartir después de la primera descarga",
+ "gui_settings_close_after_first_download_option": "Dejar de compartir luego que los archivos hayan sido enviados",
"gui_settings_connection_type_label": "¿Cómo debería conectarse OnionShare a Tor?",
"gui_settings_connection_type_control_port_option": "Conectar usando el puerto de control",
"gui_settings_connection_type_socket_file_option": "Conectar usando archivo de socket",
@@ -172,7 +172,7 @@
"gui_settings_public_mode_checkbox": "Modo público",
"systray_close_server_title": "Servidor OnionShare cerrado",
"systray_close_server_message": "Un usuario cerró el servidor",
- "systray_page_loaded_title": "Página de OnionShare Cargada",
+ "systray_page_loaded_title": "Página Cargada",
"systray_download_page_loaded_message": "Un usuario cargó la página de descarga",
"systray_upload_page_loaded_message": "Un usuario cargó la página de carga",
"gui_uploads": "Historial de carga",
@@ -189,5 +189,32 @@
"timeout_upload_still_running": "Esperando a que se complete la subida",
"gui_add_files": "Añadir Archivos",
"gui_add_folder": "Añadir Carpeta",
- "gui_connect_to_tor_for_onion_settings": "Conectarse a Tor para ver configuraciones de servicio cebolla"
+ "gui_connect_to_tor_for_onion_settings": "Conectarse a Tor para ver configuraciones de servicio cebolla",
+ "error_cannot_create_data_dir": "No se pudo crear carpeta de datos OnionShare: {}",
+ "receive_mode_data_dir": "Archivos enviados a usted aparecen en esta carpeta: {}",
+ "gui_settings_data_dir_label": "Guardar archivos en",
+ "gui_settings_data_dir_browse_button": "Navegar",
+ "systray_page_loaded_message": "Dirección OnionShare cargada",
+ "systray_share_started_title": "Compartir Iniciado",
+ "systray_share_started_message": "Se empezó a enviar archivos a alguien",
+ "systray_share_completed_title": "Compartir Completado",
+ "systray_share_completed_message": "Finalizó envío de archivos",
+ "systray_share_canceled_title": "Compartir Cancelado",
+ "systray_share_canceled_message": "Alguien canceló la recepción de sus archivos",
+ "systray_receive_started_title": "Recepción Iniciada",
+ "systray_receive_started_message": "Alguien le está enviando archivos",
+ "gui_all_modes_history": "Historial",
+ "gui_all_modes_clear_history": "Limpiar Todo",
+ "gui_all_modes_transfer_started": "Iniciado {}",
+ "gui_all_modes_transfer_finished_range": "Transferido {} - {}",
+ "gui_all_modes_transfer_finished": "Transferido {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} transcurridos.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (calculando)",
+ "gui_all_modes_progress_eta": "{0:s}, TEA: {1:s}, %p%",
+ "gui_share_mode_no_files": "No se enviaron archivos todavía",
+ "gui_share_mode_timeout_waiting": "Esperando a que termine el envío",
+ "gui_receive_mode_no_files": "No se recibieron archivos todavía",
+ "gui_receive_mode_timeout_waiting": "Esperando a que termine la recepción",
+ "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}",
+ "gui_all_modes_transfer_canceled": "Cancelado {}"
}
diff --git a/share/locale/fa.json b/share/locale/fa.json
index 21ebbec5..eafa64c1 100644
--- a/share/locale/fa.json
+++ b/share/locale/fa.json
@@ -8,10 +8,10 @@
"ctrlc_to_stop": "برای توقف سرور Ctrl+C را فشار دهید",
"not_a_file": "{0:s} یک فایل معتبر نمی باشد.",
"not_a_readable_file": "{0:s} قابل خواندن نمی باشد.",
- "no_available_port": "پورت قابل استفاده برای شروع سرویس onion پیدا نشد.",
+ "no_available_port": "پورت قابل استفاده برای شروع سرویس onion پیدا نشد",
"other_page_loaded": "آدرس بارگذاری شد",
- "close_on_timeout": "",
- "closing_automatically": "متوقف شد چون دانلود به پایان رسید",
+ "close_on_timeout": "متوقف شد چون تایمر توقف خودکار به پایان رسید",
+ "closing_automatically": "متوقف شد چون انتقال انجام شد",
"timeout_download_still_running": "انتظار برای تکمیل دانلود",
"large_filesize": "هشدار: یک اشتراک گذاری بزرگ ممکن است ساعت ها طول بکشد",
"systray_menu_exit": "خروج",
@@ -23,26 +23,26 @@
"systray_download_canceled_message": "کاربر دانلود را لغو کرد",
"systray_upload_started_title": "آپلود OnionShare آغاز شد",
"systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است",
- "help_local_only": "",
- "help_stay_open": "ادامه اشتراک گذاری پس از اولین دانلود",
- "help_shutdown_timeout": "",
- "help_stealth": "",
- "help_receive": "",
- "help_debug": "",
+ "help_local_only": "عدم استفاده از Tor (فقط برای توسعه)",
+ "help_stay_open": "ادامه اشتراک گذاری پس از ارسال دانلود ها",
+ "help_shutdown_timeout": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص",
+ "help_stealth": "استفاده از احراز هویت کلاینت (پیشرفته)",
+ "help_receive": "دریافت اشتراک به جای ارسال آن",
+ "help_debug": "لاگ کردن خطاهای OnionShare روی stdout، و خطاهای وب بر روی دیسک",
"help_filename": "لیست فایل ها یا فولدر ها برای به اشتراک گذاری",
- "help_config": "",
- "gui_drag_and_drop": "",
+ "help_config": "مکان فایل کانفیگ JSON کاستوم (اختیاری)",
+ "gui_drag_and_drop": "فایل ها و پوشه ها را بکشید و رها کنید\nتا اشتراک گذاری آغاز شود",
"gui_add": "افزودن",
"gui_delete": "حذف",
"gui_choose_items": "انتخاب",
"gui_share_start_server": "شروع اشتراک گذاری",
"gui_share_stop_server": "توقف اشتراک گذاری",
"gui_share_stop_server_shutdown_timeout": "توقف اشتراک گذاری ({} ثانیه باقیمانده)",
- "gui_share_stop_server_shutdown_timeout_tooltip": "",
+ "gui_share_stop_server_shutdown_timeout_tooltip": "تایمر توقف خودکار در {} متوقف می شود",
"gui_receive_start_server": "شروع حالت دریافت",
"gui_receive_stop_server": "توقف حالت دریافت",
- "gui_receive_stop_server_shutdown_timeout": "",
- "gui_receive_stop_server_shutdown_timeout_tooltip": "",
+ "gui_receive_stop_server_shutdown_timeout": "توقف حالت دریافت ({} ثانیه باقیمانده)",
+ "gui_receive_stop_server_shutdown_timeout_tooltip": "تایمر توقف خودکار در {} به پایان می رسد",
"gui_copy_url": "کپی آدرس",
"gui_copy_hidservauth": "کپی HidServAuth",
"gui_downloads": "دانلود تاریخچه",
@@ -56,133 +56,161 @@
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
"gui_download_upload_progress_eta": "",
- "version_string": "",
+ "version_string": "OnionShare {0:s} | https://onionshare.org/",
"gui_quit_title": "نه به این سرعت",
"gui_share_quit_warning": "شما در پروسه ارسال فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
"gui_receive_quit_warning": "شما در پروسه دریافت فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
"gui_quit_warning_quit": "خروج",
"gui_quit_warning_dont_quit": "لغو",
- "error_rate_limit": "",
+ "error_rate_limit": "شخصی تعداد زیادی قصد ناصحیح روی آدرس شما داشته است، این می تواند بدین معنا باشد که در حال تلاش برای حدس زدن آن هستند، بنابراین OnionShare سرور را متوقف کرده است. دوباره اشتراک گذاری را آغاز کنید و به گیرنده یک آدرس جدید برای اشتراک ارسال کنید.",
"zip_progress_bar_format": "فشرده سازی: %p%",
- "error_stealth_not_supported": "",
- "error_ephemeral_not_supported": "",
+ "error_stealth_not_supported": "برای استفاده از احراز هویت کلاینت، شما نیاز به داشتن Tor 0.2.9.1-alpha (یا مرورگر Tor 6.5) و python3-stem 1.5.0 دارید.",
+ "error_ephemeral_not_supported": "OnionShare حداقل به Tor 0.2.7.1 و python3-stem 1.4.0 نیاز دارد.",
"gui_settings_window_title": "تنظیمات",
"gui_settings_whats_this": "<a href='{0:s}'>این چیست؟</a>",
- "gui_settings_stealth_option": "",
- "gui_settings_stealth_hidservauth_string": "",
+ "gui_settings_stealth_option": "استفاده از احراز هویت کلاینت",
+ "gui_settings_stealth_hidservauth_string": "ذخیره کردن کلید خصوصی برای استفاده دوباره، بدین معناست که الان می توانید\nبرای کپی HidServAuth کلیک کنید.",
"gui_settings_autoupdate_label": "بررسی برای نسخه جدید",
- "gui_settings_autoupdate_option": "",
- "gui_settings_autoupdate_timestamp": "",
+ "gui_settings_autoupdate_option": "زمانی که نسخه جدید موجود بود من را خبر کن",
+ "gui_settings_autoupdate_timestamp": "آخرین بررسی: {}",
"gui_settings_autoupdate_timestamp_never": "هرگز",
- "gui_settings_autoupdate_check_button": "",
+ "gui_settings_autoupdate_check_button": "بررسی برای نسخه جدید",
"gui_settings_general_label": "تنظیمات کلی",
"gui_settings_sharing_label": "تنظیمات اشتراک گذاری",
- "gui_settings_close_after_first_download_option": "",
- "gui_settings_connection_type_label": "",
- "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_close_after_first_download_option": "توقف اشتراک گذاری پس از اولین ارسال دانلود",
+ "gui_settings_connection_type_label": "OnionShare چگونه به Tor باید متصل شود؟",
+ "gui_settings_connection_type_bundled_option": "استفاده از نسخه Tor قرار گرفته در OnionShare",
+ "gui_settings_connection_type_automatic_option": "اعمال پیکربندی خودکار با مرورگر Tor",
+ "gui_settings_connection_type_control_port_option": "اتصال از طریق پورت کنترل",
+ "gui_settings_connection_type_socket_file_option": "اتصال از طریق فایل سوکت",
+ "gui_settings_connection_type_test_button": "تست اتصال به Tor",
+ "gui_settings_control_port_label": "پورت کنترل",
+ "gui_settings_socket_file_label": "فایل سوکت‌",
"gui_settings_socks_label": "پورت SOCKS",
- "gui_settings_authenticate_label": "",
- "gui_settings_authenticate_no_auth_option": "",
+ "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": "پشتیبانی بریج Tor",
"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_obfs4_radio_option": "استفاده از پلاگبل ترنسپورت obfs4",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت obfs4 (نیازمند obfs4proxy)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option": "استفاده از پلاگبل ترنسپورت meek_lite (Azure)",
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت meek_lite (Azure) (نیازمند obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "هشدار: بریج های meek_lite برای پروژه Tor بسیار هزینه بر هستند.<br><br> فقط در صورت ناتوانی در اتصال به Tor به صورت مستقیم، از طریق obfs4، یا دیگر بریج ها از آن استفاده کنید.",
+ "gui_settings_tor_bridges_custom_radio_option": "استفاده از بریج های کاستوم",
+ "gui_settings_tor_bridges_custom_label": "میتوانید از <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> بریج دریافت کنید",
+ "gui_settings_tor_bridges_invalid": "هیچ کدام از بریج هایی که شما اضافه کردید کار نمی کند.\nآن ها را دوباره چک کنید یا بریج های دیگری اضافه کنید.",
"gui_settings_button_save": "ذخیره",
"gui_settings_button_cancel": "لغو",
- "gui_settings_button_help": "",
- "gui_settings_shutdown_timeout_checkbox": "",
- "gui_settings_shutdown_timeout": "",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
- "error_tor_protocol_error_unknown": "",
- "error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
+ "gui_settings_button_help": "راهنما",
+ "gui_settings_shutdown_timeout_checkbox": "استفاده از تایمر توقف خودکار",
+ "gui_settings_shutdown_timeout": "توقف اشتراک در:",
+ "settings_error_unknown": "ناتوانی در اتصال به کنترل کننده Tor بدلیل نامفهوم بودن تنظیمات.",
+ "settings_error_automatic": "ناتوانی در اتصال به کنترل کننده Tor. آیا مرورگر Tor (در دسترس از طریق torproject.org) در پس زمینه در حال اجراست؟",
+ "settings_error_socket_port": "ناتوانی در اتصال به کنترل کننده Tor در {}:{}.",
+ "settings_error_socket_file": "ناتوانی در اتصال به کنترل کننده Tor از طریق فایل سوکت {}.",
+ "settings_error_auth": "متصل به {}:{}، اما ناتوانی در احراز هویت. شاید این یک کنترل کننده Tor نمی باشد؟",
+ "settings_error_missing_password": "متصل به کنترل کننده Tor، اما نیاز به یک رمز عبور برای احراز هویت می باشد.",
+ "settings_error_unreadable_cookie_file": "اتصال به کنترل کننده Tor برقرار است، اما رمز عبور ممکن است اشتباه باشد، یا کاربری شما اجازه خواندن فایل کوکی را ندارد.",
+ "settings_error_bundled_tor_not_supported": "استفاده از نسخه Tor که با OnionShare می آید در حالت توسعه روی ویندوز یا مک کار نمی کند.",
+ "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 وجود داشت: {}",
+ "error_tor_protocol_error_unknown": "خطای ناشناخته ای با Tor وجود داشت",
+ "error_invalid_private_key": "این نوع کلید خصوصی پشتیبانی نمی شود",
+ "connecting_to_tor": "در حال اتصال به شبکه Tor",
+ "update_available": "نسخه جدید OnionShare وجود دارد. <a href='{}'> اینجا کلیک کنید</a> تا آن را دریافت کنید.<br><br> شما در حال استفاده از {} می باشید و آخرین نسخه {} می باشد.",
+ "update_error_check_error": "ناتوانی در بررسی برای نسخه های جدید: سایت OnionShare میگوید که آخرین نسخه '{}' ناشناس می باشد…",
+ "update_error_invalid_latest_version": "ناتوانی در بررسی نسخه جدید: شاید شما به Tor متصل نیستید، یا سایت OnionShare کار نمی کند؟",
+ "update_not_available": "شما از آخرین نسخه OnionShare استفاده می کنید.",
+ "gui_tor_connection_ask": "باز کردن تنظیمات برای ساماندهی اتصال به Tor؟",
"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_timeout": "",
- "gui_server_timeout_expired": "",
- "share_via_onionshare": "",
- "gui_use_legacy_v2_onions_checkbox": "",
- "gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
- "gui_status_indicator_share_working": "",
- "gui_status_indicator_share_started": "",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
+ "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_timeout": "تایمر توقف خودکار قبل از آغاز سرور به پایان رسید.\nلطفا یک اشتراک جدید درست کنید.",
+ "gui_server_timeout_expired": "تایمر توقف خودکار به پایان رسید.\nلطفا برای آغاز اشتراک گذاری آن را به روز رسانی کنید.",
+ "share_via_onionshare": "OnionShare کنید",
+ "gui_use_legacy_v2_onions_checkbox": "استفاده از آدرس های بازمانده",
+ "gui_save_private_key_checkbox": "استفاده از یک آدرس پایا",
+ "gui_share_url_description": "<b>هرکس</b> با این آدرس OnionShare میتواند روی کامپیوتر شما فایل <b>دانلود</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>هرکس</b> با این آدرس OnionShare میتواند روی کامپیوتر شما فایل <b>آپلود</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",
+ "gui_url_label_persistent": "این اشتراک به صورت خودکار متوقف نمی شود.<br><br>هر اشتراک بعدی از آدرس دوباره استفاده می کند. ( برای استفاده از آدرس های یکبار مصرف، از تنظیمات \"استفاده از آدرس پایا\" را غیرفعال کنید.)",
+ "gui_url_label_stay_open": "این اشتراک به صورت خودکار متوقف نمی شود.",
+ "gui_url_label_onetime": "این اشتراک پس از اولین تکمیل متوقف خواهد شد.",
+ "gui_url_label_onetime_and_persistent": "این اشتراک به صورت خودکار متوقف نمی شود.<br><br> هر اشتراک بعدی از آدرس دوباره استفاده میکند. (برای استفاده از آدرس های یکبار مصرف، از تنظیمات \"استفاده از آدرس پایا\" را غیرفعال کنید.)",
+ "gui_status_indicator_share_stopped": "آماده به اشتراک گذاری",
+ "gui_status_indicator_share_working": "در حال شروع…",
+ "gui_status_indicator_share_started": "در حال اشتراک گذاری",
+ "gui_status_indicator_receive_stopped": "آماده دریافت",
+ "gui_status_indicator_receive_working": "در حال شروع…",
"gui_status_indicator_receive_started": "درحال دریافت",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
- "info_in_progress_uploads_tooltip": "",
- "info_completed_uploads_tooltip": "",
- "error_cannot_create_downloads_dir": "",
- "receive_mode_downloads_dir": "",
- "receive_mode_warning": "",
- "gui_receive_mode_warning": "",
- "receive_mode_upload_starting": "",
- "receive_mode_received_file": "",
- "gui_mode_share_button": "",
- "gui_mode_receive_button": "",
- "gui_settings_receiving_label": "",
- "gui_settings_downloads_label": "",
+ "gui_file_info": "{} فایل ها، {}",
+ "gui_file_info_single": "{} فایل، {}",
+ "history_in_progress_tooltip": "{} در حال انجام",
+ "history_completed_tooltip": "{} کامل شد",
+ "info_in_progress_uploads_tooltip": "{} آپلود در حال انجام",
+ "info_completed_uploads_tooltip": "{} آپلود کامل شد",
+ "error_cannot_create_downloads_dir": "ناتوانی در ایجاد پوشه حالت دریافت: {}",
+ "receive_mode_downloads_dir": "فایل های ارسال شده به شما در این پوشه پدیدار خواهند شد: {}",
+ "receive_mode_warning": "هشدار: حالت دریافت به سایر افراد اجازه می دهد تا به روی کامپیوتر شما فایل آپلود کنند. برخی فایل ها را اگر باز کنید پتانسیل آن را دارند تا کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی که از کسانی دریافت کردید که به آن ها اعتماد دارید را باز کنید، یا اگر میدانید دارید چه کار میکنید.",
+ "gui_receive_mode_warning": "حالت دریافت به سایر افراد اجازه می دهد تا روی کامپیوتر شما فایل آپلود کنند.<br><br><b>برخی فایل ها را اگر باز کنید پتانسیل این را دارند که کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی را باز کنید که از کسانی دریافت کرده اید که به آن ها اعتماد دارید، یا میدانید دارید چه کار میکنید.</b>",
+ "receive_mode_upload_starting": "آپلود حجم کلی {} در حال آغاز می باشد",
+ "receive_mode_received_file": "دریافت شده: {}",
+ "gui_mode_share_button": "اشتراک گذاری فایل ها",
+ "gui_mode_receive_button": "دریافت فایل ها",
+ "gui_settings_receiving_label": "تنظیمات دریافت",
+ "gui_settings_downloads_label": "ذخیره فایل ها در",
"gui_settings_downloads_button": "فهرست",
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
- "gui_settings_public_mode_checkbox": "",
- "systray_close_server_title": "",
- "systray_close_server_message": "",
- "systray_page_loaded_title": "",
- "systray_download_page_loaded_message": "",
- "systray_upload_page_loaded_message": "",
- "gui_uploads": "",
- "gui_no_uploads": "",
- "gui_clear_history": "",
- "gui_upload_in_progress": "",
- "gui_upload_finished_range": "",
- "gui_upload_finished": "",
+ "gui_settings_public_mode_checkbox": "حالت عمومی",
+ "systray_close_server_title": "سرور OnionShare بسته شد",
+ "systray_close_server_message": "یک کاربر سرور را بست",
+ "systray_page_loaded_title": "صفحه بارگذاری شد",
+ "systray_download_page_loaded_message": "یک کاربر صفحه دانلود را بارگذاری کرد",
+ "systray_upload_page_loaded_message": "یک کاربر صفحه آپلود را بارگذاری کرد",
+ "gui_uploads": "تاریخچه آپلود",
+ "gui_no_uploads": "هیچ آپلودی هنوز وجود ندارد",
+ "gui_clear_history": "پاکسازی همه",
+ "gui_upload_in_progress": "آپلود آغاز شد {}",
+ "gui_upload_finished_range": "{} به {} آپلود شد",
+ "gui_upload_finished": "{} آپلود شد",
"gui_download_in_progress": "دانلود آغاز شد {}",
- "gui_open_folder_error_nautilus": "",
+ "gui_open_folder_error_nautilus": "ناتوانی در باز کردن پوشه به دلیل موجود نبودن ناتیلوس. فایل در اینجا قرار دارد: {}",
"gui_settings_language_label": "زبان ترجیحی",
- "gui_settings_language_changed_notice": "",
+ "gui_settings_language_changed_notice": "ری استارت OnionShare برای دیدن نتیجه اعمال تغییر در زبان.",
"timeout_upload_still_running": "انتظار برای تکمیل آپلود",
"gui_add_files": "افزودن فایل ها",
- "gui_add_folder": "افزودن پوشه"
+ "gui_add_folder": "افزودن پوشه",
+ "gui_connect_to_tor_for_onion_settings": "اتصال به Tor برای دیدن تنظیمات سرویس onion",
+ "error_cannot_create_data_dir": "ناتوانی در ایجاد پوشه داده OnionShare: {}",
+ "receive_mode_data_dir": "فایل های ارسال شده به شما در این پوشه پدیدار خواهند شد: {}",
+ "gui_settings_data_dir_label": "ذخیره فایل ها در",
+ "gui_settings_data_dir_browse_button": "مرور",
+ "systray_page_loaded_message": "آدرس OnionShare بارگذاری شد",
+ "systray_share_started_title": "اشتراک گذاری آغاز شد",
+ "systray_share_started_message": "آغاز ارسال فایل به شخصی",
+ "systray_share_completed_title": "اشتراک گذاری تکمیل شد",
+ "systray_share_completed_message": "ارسال فایل ها به پایان رسید",
+ "systray_share_canceled_title": "اشتراک گذاری لغو شد",
+ "systray_share_canceled_message": "شخصی دریافت فایل های شما را لغو کرد",
+ "systray_receive_started_title": "دریافت آغاز شد",
+ "systray_receive_started_message": "شخصی در حال ارسال فایل به شماست",
+ "gui_all_modes_history": "تاریخچه",
+ "gui_all_modes_clear_history": "پاکسازی همه",
+ "gui_all_modes_transfer_started": "{} آغاز شد",
+ "gui_all_modes_transfer_finished_range": "{} - {} منتقل شد",
+ "gui_all_modes_transfer_finished": "{} منتقل شد",
+ "gui_all_modes_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_timeout_waiting": "انتظار برای به پایان رسیدن ارسال",
+ "gui_receive_mode_no_files": "هیچ فایلی هنوز دریافت نشده است",
+ "gui_receive_mode_timeout_waiting": "انتظار برای به پایان رسیدن دریافت",
+ "gui_all_modes_transfer_canceled_range": "{} - {} لغو شد",
+ "gui_all_modes_transfer_canceled": "{} لغو شد"
}
diff --git a/share/locale/fr.json b/share/locale/fr.json
index 275fd80a..6405362b 100644
--- a/share/locale/fr.json
+++ b/share/locale/fr.json
@@ -1,10 +1,10 @@
{
"preparing_files": "Compression des fichiers.",
- "give_this_url": "Donnez cette adresse au destinataire :",
+ "give_this_url": "Donnez cette adresse au destinataire :",
"ctrlc_to_stop": "Appuyez sur Ctrl+c pour arrêter le serveur",
- "not_a_file": "{0:s} n'est pas un fichier valide.",
- "other_page_loaded": "Adresse chargée",
- "closing_automatically": "Arrêt automatique car le téléchargement est fini",
+ "not_a_file": "{0:s} n’est pas un fichier valide.",
+ "other_page_loaded": "L’adresse a été chargée",
+ "closing_automatically": "Arrêté, car le transfert est fini",
"systray_menu_exit": "Quitter",
"systray_download_started_title": "Téléchargement OnionShare démarré",
"systray_download_started_message": "Une personne télécharge vos fichiers",
@@ -12,14 +12,14 @@
"systray_download_canceled_title": "Téléchargement OnionShare annulé",
"systray_download_canceled_message": "La personne a annulé le téléchargement",
"help_local_only": "Ne pas utiliser Tor (uniquement pour le développement)",
- "help_stay_open": "Continuer le partage après le premier téléchargement",
- "help_debug": "Enregistrer les erreurs OnionShare sur la sortie standard, et les erreurs web sur le disque",
+ "help_stay_open": "Continuer le partage après l’envoi des fichiers",
+ "help_debug": "Journaliser les erreurs d’OnionShare sur la sortie standard et les erreurs Web sur le disque",
"help_filename": "Liste des fichiers ou dossiers à partager",
- "gui_drag_and_drop": "Glissez-déposez les fichiers et dossiers\npour commencer à partager",
+ "gui_drag_and_drop": "Glisser-déposer des fichiers et dossiers\npour commencer le partage",
"gui_add": "Ajouter",
"gui_delete": "Supprimer",
"gui_choose_items": "Sélectionner",
- "gui_share_start_server": "Commencer à partager",
+ "gui_share_start_server": "Commencer le partage",
"gui_share_stop_server": "Arrêter le partage",
"gui_copy_url": "Copier l'adresse",
"gui_copy_hidservauth": "Copier HidServAuth",
@@ -32,16 +32,16 @@
"gui_settings_autoupdate_timestamp_never": "Jamais",
"gui_settings_language_changed_notice": "Redémarrez OnionShare pour que votre changement de langue prenne effet.",
"config_onion_service": "Mise en place du service oignon sur le port {0:d}.",
- "give_this_url_stealth": "Donnez cette adresse et cette ligne HidServAuth au destinataire :",
- "give_this_url_receive": "Donnez cette adresse à l'expéditeur :",
- "give_this_url_receive_stealth": "Donnez cette adresse et HidServAuth à l'expéditeur :",
- "not_a_readable_file": "{0:s} n'est pas un fichier lisible.",
+ "give_this_url_stealth": "Donnez cette adresse et cette ligne HidServAuth au destinataire :",
+ "give_this_url_receive": "Donnez cette adresse à l’expéditeur :",
+ "give_this_url_receive_stealth": "Donnez cette adresse et cette ligne HidServAuth à l'expéditeur :",
+ "not_a_readable_file": "{0:s} n’est pas un fichier lisible.",
"timeout_download_still_running": "En attente de la fin du téléchargement",
"systray_download_completed_message": "La personne a terminé de télécharger vos fichiers",
"gui_copied_hidservauth_title": "HidServAuth copié",
"gui_settings_window_title": "Paramètres",
"gui_settings_autoupdate_timestamp": "Dernière vérification : {}",
- "gui_settings_close_after_first_download_option": "Arrêt du partage après le premier téléchargement",
+ "gui_settings_close_after_first_download_option": "Arrêter le partage après envoi des fichiers",
"gui_settings_connection_type_label": "Comment OnionShare doit-il se connecter à Tor ?",
"gui_settings_connection_type_control_port_option": "Se connecter avec le port de contrôle",
"gui_settings_connection_type_socket_file_option": "Se connecter à l'aide d'un fichier socket",
@@ -50,14 +50,14 @@
"gui_settings_authenticate_no_auth_option": "Pas d'authentification ou authentification par cookie",
"gui_settings_authenticate_password_option": "Mot de passe",
"gui_settings_password_label": "Mot de passe",
- "gui_settings_tor_bridges_no_bridges_radio_option": "Ne pas utiliser de bridge",
+ "gui_settings_tor_bridges_no_bridges_radio_option": "Ne pas utiliser de pont",
"gui_settings_button_save": "Sauvegarder",
"gui_settings_button_cancel": "Annuler",
"gui_settings_button_help": "Aide",
- "gui_settings_shutdown_timeout": "Arrêter le partage à :",
+ "gui_settings_shutdown_timeout": "Arrêter le partage à :",
"connecting_to_tor": "Connexion au réseau Tor",
- "help_config": "Emplacement du fichier de configuration JSON personnalisé (optionnel)",
- "large_filesize": "Avertissement : envoyer un gros fichier peut prendre plusieurs heures",
+ "help_config": "Emplacement du fichier personnalisé de configuration JSON (facultatif)",
+ "large_filesize": "Avertissement : envoyer un gros partage peut prendre des heures",
"gui_copied_hidservauth": "Ligne HidServAuth copiée dans le presse-papiers",
"version_string": "OnionShare {0:s} | https://onionshare.org/",
"zip_progress_bar_format": "Compression : %p%",
@@ -83,10 +83,10 @@
"gui_settings_connection_type_test_button": "Tester la connexion à Tor",
"gui_settings_control_port_label": "Port de contrôle",
"gui_settings_authenticate_label": "Paramètres d'authentification de Tor",
- "gui_settings_tor_bridges": "Support des bridges Tor",
- "gui_settings_tor_bridges_custom_radio_option": "Utiliser des bridges personnalisés",
- "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des bridges à l'adresse <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
- "gui_settings_tor_bridges_invalid": "Aucun des bridges que vous avez ajouté ne fonctionne.\nVérifiez les à nouveau ou ajoutez-en d'autres.",
+ "gui_settings_tor_bridges": "Prise en charge des ponts de Tor",
+ "gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts personnalisés",
+ "gui_settings_tor_bridges_custom_label": "Vous pouvez obtenir des ponts sur <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "Aucun des ponts que vous avez ajoutés ne fonctionne.\nVérifiez-les de nouveau ou ajoutez-en d’autres.",
"settings_error_unknown": "Impossible de se connecter au contrôleur Tor car les paramètres n'ont pas de sens.",
"settings_error_automatic": "Impossible de se connecter au contrôleur Tor. Est-ce que le navigateur Tor (disponible sur torproject.org) fonctionne en arrière-plan ?",
"settings_error_socket_port": "Impossible de se connecter au contrôleur Tor à {}:{}.",
@@ -108,11 +108,11 @@
"share_via_onionshare": "Partager via OnionShare",
"gui_save_private_key_checkbox": "Utiliser une adresse persistante",
"gui_share_url_description": "Avec cette adresse OnionShare <b>n'importe qui</b> peut <b>télécharger</b> vos fichiers en utilisant le <b>navigateur Tor</b> : <img src='{}' />",
- "gui_receive_url_description": "Avec cette adresse OnionShare <b>n'importe qui</b> peut <b>envoyer</b> des fichiers vers votre ordinateur en utilisant le <b>navigateur Tor</b> : <img src='{}' />",
- "gui_url_label_persistent": "Ce partage ne s'arrêtera pas automatiquement.<br><br>Tous les partages suivants réutiliseront l'adresse. (Pour utiliser des adresses uniques, désactivez \"Utiliser une adresse persistante\" dans les paramètres.)",
- "gui_url_label_stay_open": "Ce partage ne s'arrêtera pas automatiquement.",
- "gui_url_label_onetime": "Ce partage s'arrêtera après le premier téléchargement complété.",
- "gui_url_label_onetime_and_persistent": "Ce partage ne s'arrêtera pas automatiquement.<br><br>Tous les partages suivants devraient réutiliser l'adresse. (Pour utiliser des adresses uniques, désactivez \"Utiliser une adresse persistante\" dans les paramètres.)",
+ "gui_receive_url_description": "<b>Quiconque</b> possède cette adresse OnionShare peut <b>téléverser</b> des fichiers vers votre ordinateur en utilisant le <b>Navigateur Tor</b> : <img src='{}' />",
+ "gui_url_label_persistent": "Ce partage ne s’arrêtera pas automatiquement.<br><br>Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)",
+ "gui_url_label_stay_open": "Ce partage ne s’arrêtera pas automatiquement.",
+ "gui_url_label_onetime": "Ce partage s’arrêtera une fois que le premier téléchargement sera terminé.",
+ "gui_url_label_onetime_and_persistent": "Ce partage ne s’arrêtera pas automatiquement.<br><br>Tout partage subséquent réutilisera l’adresse. (Pour des adresses qui ne peuvent être utilisées qu’une fois, désactivez « Utiliser une adresse persistante » dans les paramètres.)",
"gui_status_indicator_share_stopped": "Prêt à partager",
"gui_status_indicator_share_working": "Démarrage…",
"gui_status_indicator_share_started": "Partage",
@@ -124,8 +124,8 @@
"history_in_progress_tooltip": "{} en cours",
"history_completed_tooltip": "{} terminé",
"receive_mode_downloads_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}",
- "receive_mode_warning": "Avertissement : le mode réception permet à d'autres personnes d'envoyer des fichiers vers votre ordinateur. Certains fichiers peuvent potentiellement prendre le contrôle de votre ordinateur si vous les ouvrez. Ouvrez uniquement des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.",
- "gui_receive_mode_warning": "Le mode réception permet à d'autres personnes d'envoyer des fichiers vers votre ordinateur.<br><br><b>Certains fichiers peuvent potentiellement prendre le contrôle de votre ordinateur si vous les ouvrez. Ouvrez uniquement des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.<b>",
+ "receive_mode_warning": "Avertissement : le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur. Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.",
+ "gui_receive_mode_warning": "Le mode réception permet à d’autres de téléverser des fichiers vers votre ordinateur.<br><br><b>Certains fichiers pourraient prendre le contrôle de votre ordinateur si vous les ouvrez. N’ouvrez que des fichiers provenant de personnes de confiance ou si vous savez ce que vous faites.</b>",
"receive_mode_received_file": "Reçu : {}",
"gui_mode_share_button": "Fichiers partagés",
"gui_mode_receive_button": "Fichiers reçus",
@@ -144,7 +144,7 @@
"gui_download_in_progress": "Téléchargement démarré {}",
"gui_open_folder_error_nautilus": "Impossible d'ouvrir le dossier car nautilus n'est pas disponible. Le fichier est ici : {}",
"gui_settings_language_label": "Langue préférée",
- "help_stealth": "Utilisation de l'autorisation client (avancé)",
+ "help_stealth": "Utilisation de l’autorisation client (avancé)",
"help_receive": "Recevoir des partages au lieu de les envoyer",
"gui_receive_start_server": "Démarrer le mode réception",
"gui_receive_stop_server": "Arrêter le mode réception",
@@ -152,7 +152,7 @@
"gui_download_upload_progress_complete": "%p%, {0:s} écoulées.",
"gui_download_upload_progress_starting": "{0:s}, %p% (estimation)",
"gui_download_upload_progress_eta": "{0:s}, Fin : {1:s}, %p%",
- "error_rate_limit": "Une personne a effectué sur votre adresse beaucoup de tentatives qui ont échouées, ce qui veut dire qu'elle essayait de la deviner, ainsi OnionShare a arrêté le serveur. Démarrez le partage à nouveau et envoyez une nouvelle adresse au destinataire pour pouvoir partager.",
+ "error_rate_limit": "Quelqu’un a effectué trop de tentatives échouées sur votre adresse, ce qui signifie que cette personne pourrait essayer de la deviner. C’est pourquoi OnionShare a arrêté le serveur. Redémarrez le partage et envoyez au destinataire une nouvelle adresse pour partager.",
"error_stealth_not_supported": "Pour utiliser l’autorisation client, vous avez besoin d'au moins Tor 0.2.9.1-alpha (ou le navigateur Tor 6.5) et python3-stem 1.5.0.",
"gui_settings_stealth_option": "Utiliser l'autorisation client",
"timeout_upload_still_running": "En attente de la fin de l'envoi",
@@ -167,22 +167,49 @@
"info_in_progress_uploads_tooltip": "{} envoi(s) en cours",
"info_completed_uploads_tooltip": "{} envoi(s) terminé(s)",
"error_cannot_create_downloads_dir": "Impossible de créer le dossier du mode réception : {}",
- "receive_mode_upload_starting": "Un envoi d'une taille totale de {} a commencé",
+ "receive_mode_upload_starting": "Un téléversement d’une taille totale de {} commence",
"systray_close_server_message": "Une personne a arrêté le serveur",
- "systray_page_loaded_title": "Page OnionShare chargée",
+ "systray_page_loaded_title": "Page chargée",
"systray_download_page_loaded_message": "Une personne a chargé la page de téléchargement",
"systray_upload_page_loaded_message": "Une personne a chargé la page d'envoi",
- "gui_share_stop_server_shutdown_timeout_tooltip": "La minuterie d'arrêt automatique se termine après {}",
- "gui_receive_stop_server_shutdown_timeout_tooltip": "La minuterie d'arrêt automatique se termine après {}",
+ "gui_share_stop_server_shutdown_timeout_tooltip": "La minuterie d’arrêt automatique se termine à {}",
+ "gui_receive_stop_server_shutdown_timeout_tooltip": "La minuterie d’arrêt automatique se termine à {}",
"gui_settings_tor_bridges_obfs4_radio_option": "Utiliser les transports enfichables obfs4 intégrés",
- "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utiliser les transports enfichables obfs4 intégrés (nécessitent obfs4proxy)",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Utiliser les transports enfichables obfs4 intégrés (exige obfs4proxy)",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Utiliser les transports enfichables meek_lite (Azure) intégrés",
- "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utiliser les transports enfichables meek_lite (Azure) intégrés (nécessitent obfs4proxy)",
- "gui_settings_meek_lite_expensive_warning": "Avertissement : les bridges meek_lite sont très coûteux à faire fonctionner pour le Tor Project.<br><br>Utilisez les seulement si vous ne pouvez pas vous connecter à Tor directement, via les transports obfs4 ou avec d'autres bridges normaux.",
- "gui_settings_shutdown_timeout_checkbox": "Utiliser la minuterie d'arrêt automatique",
- "gui_server_started_after_timeout": "La minuterie d'arrêt automatique a expiré avant le démarrage du serveur.\nVeuillez faire un nouveau partage.",
- "gui_server_timeout_expired": "La minuterie d'arrêt automatique a déjà expiré.\nVeuillez la mettre à jour pour démarrer le partage.",
- "close_on_timeout": "Arrêté parce que la minuterie d'arrêt automatique a expiré",
- "gui_add_files": "Ajouter fichiers",
- "gui_add_folder": "Ajouter dossier"
+ "gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Utiliser les transports enfichables meek_lite (Azure) intégrés (exige obfs4proxy)",
+ "gui_settings_meek_lite_expensive_warning": "Avertissement : l’exploitation de ponts meek_lite demande beaucoup de ressources au Projet Tor.<br><br>Ne les utilisez que si vous ne pouvez pas vous connecter directement à Tor, par les transports obfs4 ou autres ponts normaux.",
+ "gui_settings_shutdown_timeout_checkbox": "Utiliser la minuterie d’arrêt automatique",
+ "gui_server_started_after_timeout": "La minuterie d’arrêt automatique est arrivée au bout de son délai avant le démarrage du serveur.\nVeuillez mettre en place un nouveau partage.",
+ "gui_server_timeout_expired": "La minuterie d’arrêt automatique est déjà arrivée au bout de son délai.\nVeuillez la mettre à jour pour commencer le partage.",
+ "close_on_timeout": "Arrêté, car la minuterie d’arrêt automatique est arrivée au bout de son délai",
+ "gui_add_files": "Ajouter des fichiers",
+ "gui_add_folder": "Ajouter un dossier",
+ "error_cannot_create_data_dir": "Impossible de créer le dossier de données OnionShare : {}",
+ "receive_mode_data_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}",
+ "gui_settings_data_dir_label": "Enregistrer les fichiers dans",
+ "gui_settings_data_dir_browse_button": "Parcourir",
+ "systray_page_loaded_message": "Adresse OnionShare chargée",
+ "systray_share_started_title": "Le partage a commencé",
+ "systray_share_started_message": "Démarrer l'envoi de fichiers à une personne",
+ "systray_share_completed_title": "Le partage est terminé",
+ "systray_share_canceled_title": "Le partage a été annulé",
+ "systray_share_canceled_message": "Une personne a annulé la réception de vos fichiers",
+ "systray_receive_started_title": "Réception commencée",
+ "systray_receive_started_message": "Une personne vous envoie des fichiers",
+ "gui_all_modes_history": "Historique",
+ "gui_all_modes_clear_history": "Tout effacer",
+ "gui_all_modes_transfer_started": "{} démarré",
+ "gui_all_modes_transfer_finished_range": "Transféré {} - {}",
+ "gui_all_modes_transfer_finished": "Transféré {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} écoulé.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (estimation)",
+ "gui_all_modes_progress_eta": "{0:s}, Fin : {1:s}, %p%",
+ "gui_share_mode_no_files": "Pas encore de fichiers envoyés",
+ "gui_share_mode_timeout_waiting": "En attente de la fin de l'envoi",
+ "gui_receive_mode_no_files": "Pas encore de fichiers reçus",
+ "gui_receive_mode_timeout_waiting": "En attente de la fin de la réception",
+ "gui_connect_to_tor_for_onion_settings": "Connectez-vous à Tor pour voir les paramètres du service Onion",
+ "systray_share_completed_message": "Terminé l'envoi de fichiers",
+ "gui_all_modes_transfer_canceled": "Annulé {}"
}
diff --git a/share/locale/it.json b/share/locale/it.json
index 17d4e770..a21d6c5d 100644
--- a/share/locale/it.json
+++ b/share/locale/it.json
@@ -85,7 +85,7 @@
"gui_settings_language_changed_notice": "Riavvia OnionShare affinché il cambiamento della tua lingua abbia effetto.",
"gui_settings_tor_bridges_custom_radio_option": "Utilizzare ponti personalizzati",
"timeout_upload_still_running": "In attesa del completamento dell'upload",
- "gui_add_files": "Aggiungi file",
+ "gui_add_files": "Aggiungi archivi",
"gui_add_folder": "Aggiungi una cartella",
"gui_settings_connection_type_control_port_option": "Connessione usando la porta di controllo",
"gui_settings_connection_type_socket_file_option": "Connessione usando il file di socket",
diff --git a/share/locale/ja.json b/share/locale/ja.json
index acddc8c2..fae2109e 100644
--- a/share/locale/ja.json
+++ b/share/locale/ja.json
@@ -11,7 +11,7 @@
"no_available_port": "onionサービスを実行するための利用可能ポートを見つかりません",
"other_page_loaded": "アドレスはロードされています",
"close_on_timeout": "自動タイマーがタイムアウトしたため停止されました",
- "closing_automatically": "ダウンロードが完了されたため停止されました",
+ "closing_automatically": "転送が完了されたため停止されました",
"timeout_download_still_running": "ダウンロード完了待ち",
"timeout_upload_still_running": "アップロード完了待ち",
"large_filesize": "注意:大きいなファイルを送信するに数時間かかるかもしれない",
@@ -25,7 +25,7 @@
"systray_upload_started_title": "OnionShareアップロードは開始されました",
"systray_upload_started_message": "ユーザーがファイルをアップロードし始めました",
"help_local_only": "Torを使わない(開発利用のみ)",
- "help_stay_open": "最初ダウンロード後に共有し続けます",
+ "help_stay_open": "ファイルが送信された後に共有し続けます",
"help_shutdown_timeout": "数秒後に共有が停止されます",
"help_stealth": "クライアント認証を使う(上級者向け)",
"help_receive": "送信の代わりに受信を優先する",
@@ -72,7 +72,7 @@
"gui_settings_window_title": "設定",
"gui_settings_whats_this": "<a href='{0:s}'>これは何ですか?</a>",
"gui_settings_stealth_option": "クライアント認証を使用",
- "gui_settings_stealth_hidservauth_string": "秘密鍵を保存したので、クリックしてHidServAuthをコピーできます。",
+ "gui_settings_stealth_hidservauth_string": "秘密鍵を保存したので、\nクリックしてHidServAuthをコピーできます。",
"gui_settings_autoupdate_label": "更新バージョンの有無をチェックする",
"gui_settings_autoupdate_option": "更新通知を起動します",
"gui_settings_autoupdate_timestamp": "前回にチェックした時: {}",
@@ -80,7 +80,7 @@
"gui_settings_autoupdate_check_button": "更新をチェックする",
"gui_settings_general_label": "一般的設定",
"gui_settings_sharing_label": "共有設定",
- "gui_settings_close_after_first_download_option": "最初のダウンロード後に停止する",
+ "gui_settings_close_after_first_download_option": "ファイルが送信された後に停止する",
"gui_settings_connection_type_label": "OnionShareがどうやってTorと接続して欲しい?",
"gui_settings_connection_type_bundled_option": "OnionShareに組み込まれるTorバージョンを使用する",
"gui_settings_connection_type_automatic_option": "Torブラウザと自動設定してみる",
@@ -109,80 +109,107 @@
"gui_settings_button_help": "ヘルプ",
"gui_settings_shutdown_timeout_checkbox": "自動停止タイマーを使用する",
"gui_settings_shutdown_timeout": "共有を停止する時間:",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
- "error_tor_protocol_error_unknown": "",
- "error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
- "gui_tor_connection_ask_open_settings": "",
- "gui_tor_connection_ask_quit": "",
- "gui_tor_connection_error_settings": "",
- "gui_tor_connection_canceled": "",
- "gui_tor_connection_lost": "",
- "gui_server_started_after_timeout": "",
- "gui_server_timeout_expired": "",
- "share_via_onionshare": "",
- "gui_connect_to_tor_for_onion_settings": "",
- "gui_use_legacy_v2_onions_checkbox": "",
- "gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_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": "",
- "info_in_progress_uploads_tooltip": "",
- "info_completed_uploads_tooltip": "",
- "error_cannot_create_downloads_dir": "",
- "receive_mode_downloads_dir": "",
- "receive_mode_warning": "",
- "gui_receive_mode_warning": "",
- "receive_mode_upload_starting": "",
- "receive_mode_received_file": "",
- "gui_mode_share_button": "",
- "gui_mode_receive_button": "",
- "gui_settings_receiving_label": "",
- "gui_settings_downloads_label": "",
- "gui_settings_downloads_button": "",
- "gui_settings_public_mode_checkbox": "",
- "systray_close_server_title": "",
- "systray_close_server_message": "",
- "systray_page_loaded_title": "",
- "systray_download_page_loaded_message": "",
- "systray_upload_page_loaded_message": "",
- "gui_uploads": "",
- "gui_no_uploads": "",
- "gui_clear_history": "",
- "gui_upload_in_progress": "",
- "gui_upload_finished_range": "",
- "gui_upload_finished": "",
- "gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "",
- "gui_settings_language_label": "",
- "gui_settings_language_changed_notice": ""
+ "settings_error_unknown": "設定を解釈できないため、Torコントローラーと接続できません。",
+ "settings_error_automatic": "Torコントローラーと接続できません。Torブラウザ(torproject.orgから入手できる)がバックグラウンドで動作していますか?",
+ "settings_error_socket_port": "{}:{}でTorコントローラーと接続できません。",
+ "settings_error_socket_file": "ソケットファイル{}を使用してTorコントローラーと接続できません。",
+ "settings_error_auth": "{}:{}と接続できましたが、認証ができません。これは実際にTorコントローラーですか?",
+ "settings_error_missing_password": "Torコントローラーと接続できましたが、認証にはパスワードが必要です。",
+ "settings_error_unreadable_cookie_file": "Torコントローラーと接続できましたが、パスワードが診違っているあるいはクッキーファイルの読み出し許可がないかもしれない。",
+ "settings_error_bundled_tor_not_supported": "OnionShareに組み込まれているTorバージョンはWindowsやmacOSの開発者モードで動作できません。",
+ "settings_error_bundled_tor_timeout": "Torとの接続は時間がかかり過ぎます。インターネットとの接続、あるいはシステム・クロックの精度には問題がありますか?",
+ "settings_error_bundled_tor_broken": "OnionShareはバックグラウンドで動作しているTorと接続できませんでした:\n{}",
+ "settings_test_success": "Torコントローラーと接続完了。\n\nTorバージョン:{}\nエフェメラルonionサービスをサポートする:{}\nクライアント認証をサポートする:{}\nnext-gen .onionアドレスをサポートする:{}.",
+ "error_tor_protocol_error": "Torとのエラーが生じました: {}",
+ "error_tor_protocol_error_unknown": "Torとの未知のエラーが生じました",
+ "error_invalid_private_key": "この秘密鍵形式は未対応である",
+ "connecting_to_tor": "Torネットワークと接続中",
+ "update_available": "OnionShareの新バージョンはリリースされました。<a href='{}'>こちら</a>から入手できます。<br><br>現行バージョンは{}そして最新バージョンは{}。",
+ "update_error_check_error": "新バージョンのチェックをできなかった:OnionShare公式サイトによれば、最新バージョンは認識できない '{}'です…",
+ "update_error_invalid_latest_version": "新バージョンのチェックをできなかった:多分Torと接続していない、あるいはOnionShare公式サイトはダウンかもしれない?",
+ "update_not_available": "OnionShareの最新バージョンを使っています。",
+ "gui_tor_connection_ask": "設定を開いて、Torとの接続問題を解決しますか?",
+ "gui_tor_connection_ask_open_settings": "はい",
+ "gui_tor_connection_ask_quit": "終了",
+ "gui_tor_connection_error_settings": "設定でTorとの接続方法を変更してみて下さい。",
+ "gui_tor_connection_canceled": "Torと接続できませんでした。\n\nインターネット接続を確認してから、OnionShareを再開してTorとの接続を設定して下さい。",
+ "gui_tor_connection_lost": "Torから切断されました。",
+ "gui_server_started_after_timeout": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。\n再びファイル共有をして下さい。",
+ "gui_server_timeout_expired": "自動停止タイマーはすでにタイムアウトしています。\n共有し始めるにはリセットして下さい。",
+ "share_via_onionshare": "OnionShareで共有する",
+ "gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい",
+ "gui_use_legacy_v2_onions_checkbox": "レガシーアドレスを使用する",
+ "gui_save_private_key_checkbox": "永続的アドレスを使用する",
+ "gui_share_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Torブラウザー</b>を利用してこのファイルを<b>ダウンロードできます</b>:<img src='{}' />",
+ "gui_receive_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Torブラウザー</b>を利用してこのPCにファイルを<b>アップロードできます</b>:<img src='{}' />",
+ "gui_url_label_persistent": "このファイル共有には自動停止はありません。<br><br>その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)",
+ "gui_url_label_stay_open": "このファイル共有には自動停止はありません。",
+ "gui_url_label_onetime": "このファイル共有は最初の完了後に停止されます。",
+ "gui_url_label_onetime_and_persistent": "このファイル共有には自動停止はありません。<br><br>その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)",
+ "gui_status_indicator_share_stopped": "共有の準備完了",
+ "gui_status_indicator_share_working": "起動しています…",
+ "gui_status_indicator_share_started": "共有中",
+ "gui_status_indicator_receive_stopped": "受信の準備完了",
+ "gui_status_indicator_receive_working": "起動しています…",
+ "gui_status_indicator_receive_started": "受信中",
+ "gui_file_info": "{} ファイル, {}",
+ "gui_file_info_single": "{} ファイル, {}",
+ "history_in_progress_tooltip": "{} 進行中",
+ "history_completed_tooltip": "{} 完了",
+ "info_in_progress_uploads_tooltip": "{} 進行中のアップロード",
+ "info_completed_uploads_tooltip": "{} 完了のアップロード",
+ "error_cannot_create_downloads_dir": "受信モードフォルダを作成できなかった: {}",
+ "receive_mode_downloads_dir": "受信されるファイルはこのフォルダに保存されます: {}",
+ "receive_mode_warning": "警告:受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。",
+ "gui_receive_mode_warning": "受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。<br><br><b>悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。</b>",
+ "receive_mode_upload_starting": "ファイルサイズ{}のアップロードが実行中",
+ "receive_mode_received_file": "受信した: {}",
+ "gui_mode_share_button": "ファイル共有",
+ "gui_mode_receive_button": "ファイル受信",
+ "gui_settings_receiving_label": "受信設定",
+ "gui_settings_downloads_label": "保存フォルダ",
+ "gui_settings_downloads_button": "選ぶ",
+ "gui_settings_public_mode_checkbox": "公開モード",
+ "systray_close_server_title": "OnionShareサーバーは閉鎖されました",
+ "systray_close_server_message": "ユーザーがサーバーを閉鎖しました",
+ "systray_page_loaded_title": "ページはロードされました",
+ "systray_download_page_loaded_message": "ユーザーがダウンロードページをロードしました",
+ "systray_upload_page_loaded_message": "ユーザーがアップロードページをロードしました",
+ "gui_uploads": "アップロード履歴",
+ "gui_no_uploads": "アップロードはまだありません",
+ "gui_clear_history": "全てをクリアする",
+ "gui_upload_in_progress": "アップロード開始しました {}",
+ "gui_upload_finished_range": "{}を{}にアップロードしました",
+ "gui_upload_finished": "{}をアップロードしました",
+ "gui_download_in_progress": "ダウンロード開始しました {}",
+ "gui_open_folder_error_nautilus": "nautilusを利用できないためフォルダーを開けません。ファイルはここに保存されました: {}",
+ "gui_settings_language_label": "優先言語",
+ "gui_settings_language_changed_notice": "言語設定の変更を実行するにはOnionShareを再起動して下さい。",
+ "error_cannot_create_data_dir": "OnionShareのデータフォルダーを作成できませんでした: {}",
+ "receive_mode_data_dir": "受信されるファイルをこのフォルダーにあります: {}",
+ "gui_settings_data_dir_label": "ファイルの保存",
+ "gui_settings_data_dir_browse_button": "閲覧",
+ "systray_page_loaded_message": "OnionShareアドレスはロードされました",
+ "systray_share_started_title": "共有は始めました",
+ "systray_share_started_message": "誰かにファイルを通信し始めました",
+ "systray_share_completed_title": "共有完了",
+ "systray_share_completed_message": "ファイル送信完了",
+ "systray_share_canceled_title": "共有は停止されました",
+ "systray_share_canceled_message": "誰かがファイル受信を停止しました",
+ "systray_receive_started_title": "受信は始めました",
+ "systray_receive_started_message": "誰かがファイルを送信しています",
+ "gui_all_modes_history": "歴史",
+ "gui_all_modes_clear_history": "すべてクリア",
+ "gui_all_modes_transfer_started": "始めました {}",
+ "gui_all_modes_transfer_finished_range": "転送された {} - {}",
+ "gui_all_modes_transfer_finished": "転送された {}",
+ "gui_all_modes_transfer_canceled_range": "停止された {} - {}",
+ "gui_all_modes_transfer_canceled": "停止された {}",
+ "gui_all_modes_progress_complete": "%p%, 経過時間 {0:s} 。",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (計算中)",
+ "gui_all_modes_progress_eta": "{0:s}, 完了予定時刻: {1:s}, %p%",
+ "gui_share_mode_no_files": "送信されたファイルがまだありません",
+ "gui_share_mode_timeout_waiting": "送信完了を待機しています",
+ "gui_receive_mode_no_files": "受信されたファイルがまだありません",
+ "gui_receive_mode_timeout_waiting": "受信完了を待機しています"
}
diff --git a/share/locale/no.json b/share/locale/no.json
index 073461bb..9d67e6fa 100644
--- a/share/locale/no.json
+++ b/share/locale/no.json
@@ -25,7 +25,7 @@
"systray_upload_started_title": "OnionShare-opplasting startet",
"systray_upload_started_message": "En bruker startet opplasting av filer til din datamaskin",
"help_local_only": "Ikke bruk Tor (kun i utviklingsøyemed)",
- "help_stay_open": "Fortsett å dele etter første nedlasting",
+ "help_stay_open": "Fortsett å dele etter at filene har blitt sendt",
"help_shutdown_timeout": "Stopp deling etter et gitt antall sekunder",
"help_stealth": "Bruk klientidentifisering (avansert)",
"help_receive": "Motta delinger istedenfor å sende dem",
@@ -68,7 +68,7 @@
"error_ephemeral_not_supported": "OnionShare krever minst både Tor 0.2.7.1 og pything3-stem 1.4.0.",
"gui_settings_window_title": "Innstillinger",
"gui_settings_whats_this": "<a href='{0:s}'>Hva er dette?</a>",
- "gui_settings_stealth_option": "Bruk klientidentifisering (gammeldags)",
+ "gui_settings_stealth_option": "Bruk klientidentifisering",
"gui_settings_stealth_hidservauth_string": "Siden du har lagret din private nøkkel for gjenbruk, kan du nå\nklikke for å kopiere din HidServAuth-linje.",
"gui_settings_autoupdate_label": "Se etter ny versjon",
"gui_settings_autoupdate_option": "Gi meg beskjed når en ny versjon er tilgjengelig",
@@ -77,7 +77,7 @@
"gui_settings_autoupdate_check_button": "Se etter ny versjon",
"gui_settings_general_label": "Hovedinnstillinger",
"gui_settings_sharing_label": "Delingsinnstillinger",
- "gui_settings_close_after_first_download_option": "Stopp deling etter første nedlasting",
+ "gui_settings_close_after_first_download_option": "Stopp deling etter at filene har blitt sendt",
"gui_settings_connection_type_label": "Hvordan skal OnionShare koble seg til Tor?",
"gui_settings_connection_type_bundled_option": "Bruk Tor-versjonen som kommer med OnionShare",
"gui_settings_connection_type_automatic_option": "Forsøk automatisk oppsett med Tor-nettleser",
@@ -136,7 +136,7 @@
"gui_server_timeout_expired": "Tidsavbruddsuret har gått ut allerede.\nOppdater det for å starte deling.",
"share_via_onionshare": "OnionShare det",
"gui_use_legacy_v2_onions_checkbox": "Bruk gammeldagse adresser",
- "gui_save_private_key_checkbox": "Bruk en vedvarende adresse (gammeldags)",
+ "gui_save_private_key_checkbox": "Bruk en vedvarende adresse",
"gui_share_url_description": "<b>Alle</b> som har denne OnionShare-adressen kan <b>Laste ned</b> filene dine ved bruk av <b>Tor-nettleseren</b>: <img src='{}' />",
"gui_receive_url_description": "<b>Alle</b> som har denne OnionShare-adressen kan <b>Laste opp</b> filer til din datamaskin ved bruk av <b>Tor-nettleseren</b>: <img src='{}' />",
"gui_url_label_persistent": "Delingen vil ikke stoppe automatisk.<br><br>Hver påfølgende deling vil gjenbruke adressen. (For engangsadresser, skru av \"Bruk vedvarende adresse\" i innstillingene.)",
@@ -171,7 +171,7 @@
"gui_settings_public_mode_checkbox": "Offentlig modus",
"systray_close_server_title": "OnionShare-tjener lukket",
"systray_close_server_message": "En bruker stengte tjeneren",
- "systray_page_loaded_title": "OnionShare-side lastet",
+ "systray_page_loaded_title": "Side innlastet",
"systray_download_page_loaded_message": "En bruker lastet inn nedlastingssiden",
"systray_upload_page_loaded_message": "En bruker lastet inn opplastingssiden",
"gui_uploads": "Opplastingshistorikk",
@@ -189,5 +189,32 @@
"timeout_upload_still_running": "Venter på at opplastingen fullføres",
"gui_add_files": "Legg til filer",
"gui_add_folder": "Legg til mappe",
- "gui_connect_to_tor_for_onion_settings": "Koble til Tor for å se løktjeneste-innstillinger"
+ "gui_connect_to_tor_for_onion_settings": "Koble til Tor for å se løktjeneste-innstillinger",
+ "error_cannot_create_data_dir": "Kunne ikke opprette OnionShare-datamappe: {}",
+ "receive_mode_data_dir": "Filers sendt til deg havner i denne mappen: {}",
+ "gui_settings_data_dir_label": "Lagre filer i",
+ "gui_settings_data_dir_browse_button": "Utforsk",
+ "systray_page_loaded_message": "OnionShare-adresse innlastet",
+ "systray_share_started_title": "Deling startet",
+ "systray_share_started_message": "Begynner å sende filer til noen",
+ "systray_share_completed_title": "Deling fullført",
+ "systray_share_completed_message": "Forsendelse av filer utført",
+ "systray_share_canceled_title": "Deling avbrutt",
+ "systray_share_canceled_message": "Noen avbrøt mottak av filene dine",
+ "systray_receive_started_title": "Mottak startet",
+ "systray_receive_started_message": "Noen sender filer til deg",
+ "gui_all_modes_history": "Historikk",
+ "gui_all_modes_clear_history": "Tøm alt",
+ "gui_all_modes_transfer_started": "Startet {}",
+ "gui_all_modes_transfer_finished_range": "Overført {} - {}",
+ "gui_all_modes_transfer_finished": "Overført {}",
+ "gui_all_modes_progress_complete": "%p%, {0:s} forløpt.",
+ "gui_all_modes_progress_starting": "{0:s}, %p% (kalkulerer)",
+ "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
+ "gui_share_mode_no_files": "Ingen filer sendt enda",
+ "gui_share_mode_timeout_waiting": "Venter på fullføring av forsendelse",
+ "gui_receive_mode_no_files": "Ingen filer mottatt enda",
+ "gui_receive_mode_timeout_waiting": "Venter på fullføring av mottak",
+ "gui_all_modes_transfer_canceled_range": "Avbrutt {} - {}",
+ "gui_all_modes_transfer_canceled": "Avbrutt {}"
}
diff --git a/share/locale/pt_BR.json b/share/locale/pt_BR.json
index f0c839ef..0db55231 100644
--- a/share/locale/pt_BR.json
+++ b/share/locale/pt_BR.json
@@ -3,15 +3,15 @@
"preparing_files": "Comprimindo arquivos.",
"give_this_url": "Dar este endereço ao destinatário:",
"give_this_url_stealth": "Dar este endereço e linha HidServAuth ao destinatário:",
- "give_this_url_receive": "Dar este endereço ao remetente:",
- "give_this_url_receive_stealth": "Dar este endereço e HidServAuth ao remetente:",
+ "give_this_url_receive": "Enviar este endereço à pessoa remetente:",
+ "give_this_url_receive_stealth": "Dar este endereço e HidServAuth à pessoa remetente:",
"ctrlc_to_stop": "Pressione Ctrl+C para interromper o servidor",
"not_a_file": "{0:s} não é um ficheiro válido.",
"not_a_readable_file": "{0:s} não é um ficheiro legível.",
"no_available_port": "Não foi possível encontrar um pórtico disponível para iniciar o serviço onion",
"other_page_loaded": "Endereço carregado",
"close_on_timeout": "Interrompido ao final da contagem do cronômetro automático",
- "closing_automatically": "Interrompido porque o download terminou",
+ "closing_automatically": "Interrompido após o término da transferência",
"timeout_download_still_running": "Esperando que o download termine",
"large_filesize": "Aviso: O envio de arquivos grandes pode levar várias horas",
"systray_menu_exit": "Sair",
@@ -24,7 +24,7 @@
"systray_upload_started_title": "OnionShare começou a carregar",
"systray_upload_started_message": "Alguém começou a carregar arquivos no seu computador",
"help_local_only": "Não use Tor (unicamente para programação)",
- "help_stay_open": "Continuar a compartilhar depois do primeiro download",
+ "help_stay_open": "Continuar a compartilhar após o envio de documentos",
"help_shutdown_timeout": "Parar de compartilhar após um número determinado de segundos",
"help_stealth": "Usar autorização de cliente (avançado)",
"help_receive": "Receber compartilhamentos ao invés de enviá-los",
@@ -68,7 +68,7 @@
"error_ephemeral_not_supported": "OnionShare requer ao menos Tor 0.2.7.1 e python3-stem 1.4.0.",
"gui_settings_window_title": "Configurações",
"gui_settings_whats_this": "<a href='{0:s}'>O que é isso?</a>",
- "gui_settings_stealth_option": "Usar autorização de cliente (legacy)",
+ "gui_settings_stealth_option": "Usar autorização de cliente",
"gui_settings_stealth_hidservauth_string": "Após salvar a sua chave privada para reutilização, você pode\nclicar para copiar o seu HidServAuth.",
"gui_settings_autoupdate_label": "Procurar a nova versão",
"gui_settings_autoupdate_option": "Notificar-me quando uma nova versão estiver disponível",
@@ -77,7 +77,7 @@
"gui_settings_autoupdate_check_button": "Procurar a nova versão",
"gui_settings_general_label": "Configurações gerais",
"gui_settings_sharing_label": "Compartilhando configurações",
- "gui_settings_close_after_first_download_option": "Parar de compartilhar depois do primeiro download",
+ "gui_settings_close_after_first_download_option": "Parar de compartilhar após o envio dos arquivos",
"gui_settings_connection_type_label": "Como OnionShare normalmente conecta-se a Tor?",
"gui_settings_connection_type_bundled_option": "Use a versão de Tor que vem junto com OnionShare",
"gui_settings_connection_type_automatic_option": "Tentar configuração automática com o Navegador Tor",
@@ -131,17 +131,17 @@
"gui_tor_connection_error_settings": "Tente mudar nas configurações a forma como OnionShare se conecta à rede Tor.",
"gui_tor_connection_canceled": "Não foi possível conectar à rede Tor.\n\nVerifique se você está conectada à Internet, e então abra OnionShare novamente e configure sua conexão à rede Tor.",
"gui_tor_connection_lost": "Desconectado do Tor.",
- "gui_server_started_after_timeout": "O tempo se esgotou antes do servidor iniciar.\nPor favor, crie um novo compartilhamento.",
- "gui_server_timeout_expired": "O temporizador já se esgotou.\nPor favor, atualize-o antes de começar a compartilhar.",
- "share_via_onionshare": "Compartilhar por meio de OnionShare",
+ "gui_server_started_after_timeout": "O tempo esgotou antes do servidor iniciar.\nPor favor, crie um novo compartilhamento.",
+ "gui_server_timeout_expired": "O temporizador já esgotou.\nPor favor, atualize-o antes de começar a compartilhar.",
+ "share_via_onionshare": "Compartilhar usando OnionShare",
"gui_use_legacy_v2_onions_checkbox": "Usar endereços do tipo antigo",
- "gui_save_private_key_checkbox": "Usar um endereço persistente (modo antigo)",
+ "gui_save_private_key_checkbox": "Usar o mesmo endereço",
"gui_share_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>baixar</b> seus arquivos usando o <b>Tor Browser</b>: <img src='{}' />",
- "gui_receive_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>fazer upload</b> de arquivos para o seu computador usando o <b>Tor Browser</b>: <img src='{}' />",
- "gui_url_label_persistent": "Este compartilhamento não vai ser encerrado automaticamente.<br><br>Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar um endereço novo a cada vez, desligue a opção \"Usar endereço persistente\" nas configurações.)",
+ "gui_receive_url_description": "<b>Qualquer pessoa</b> com este endereço do OnionShare pode <b>carregar</b> arquivos no seu computador usando o <b>Tor Browser</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Este compartilhamento não vai ser encerrado automaticamente.<br><br>Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar um endereço novo a cada vez, desative a opção \"Usar o mesmo endereço\" nas configurações.)",
"gui_url_label_stay_open": "Este compartilhamento não sera encerrado automaticamente.",
- "gui_url_label_onetime": "Este compartilhamento será encerrado depois da primeira vez que for utilizado.",
- "gui_url_label_onetime_and_persistent": "Este compartilhamento não será encerrado automaticamente.<br><br>Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar endereços únicos a cada compartilhamento, desligue a opção \"Usar endereço persistente\" nas configurações.)",
+ "gui_url_label_onetime": "Este compartilhamento será encerrado após completar uma vez.",
+ "gui_url_label_onetime_and_persistent": "Este compartilhamento não será encerrado automaticamente.<br><br>Todos os compartilhamentos posteriores reutilizarão este endereço. (Para usar endereços únicos a cada compartilhamento, desative a opção \"Usar o mesmo endereço\" nas configurações.)",
"gui_status_indicator_share_stopped": "Pronto para compartilhar",
"gui_status_indicator_share_working": "Começando…",
"gui_status_indicator_share_started": "Compartilhando",
@@ -149,8 +149,8 @@
"gui_status_indicator_receive_working": "Começando…",
"gui_status_indicator_receive_started": "Recebendo",
"gui_file_info": "{} arquivos, {}",
- "gui_file_info_single": "{} ficheiro, {}",
- "history_in_progress_tooltip": "{} em progresso",
+ "gui_file_info_single": "{} arquivo, {}",
+ "history_in_progress_tooltip": "{} em curso",
"history_completed_tooltip": "{} completado",
"info_in_progress_uploads_tooltip": "{} upload(s) em progresso",
"info_completed_uploads_tooltip": "{} upload(s) completado(s)",
@@ -169,7 +169,7 @@
"gui_settings_public_mode_checkbox": "Modo público",
"systray_close_server_title": "Servidor OnionShare encerrado",
"systray_close_server_message": "Um usuário encerrou o servidor",
- "systray_page_loaded_title": "Página OnionShare Carregada",
+ "systray_page_loaded_title": "Página Carregada",
"systray_download_page_loaded_message": "Um usuário carregou a página de download",
"systray_upload_page_loaded_message": "Um usuário carregou a página de upload",
"gui_uploads": "Histórico de Uploads",
@@ -180,7 +180,33 @@
"gui_upload_finished": "Upload realizado de {}",
"gui_download_in_progress": "Download Iniciado {}",
"gui_open_folder_error_nautilus": "Não foi possível abrir a pasta porque o nautilus não está disponível. O arquivo está aqui: {}",
- "gui_settings_language_label": "Idioma preferido",
- "gui_settings_language_changed_notice": "Reinicie o OnionShare para que sua alteração de idioma tenha efeito.",
- "timeout_upload_still_running": "Esperando o término do upload"
+ "gui_settings_language_label": "Idioma",
+ "gui_settings_language_changed_notice": "Reinicie OnionShare para que sua alteração de idioma tenha efeito.",
+ "timeout_upload_still_running": "Esperando o término do upload",
+ "gui_add_files": "Adicionar Documentos",
+ "gui_add_folder": "Adicionar Pasta",
+ "gui_share_mode_no_files": "Nenhum arquivo ainda enviado",
+ "gui_connect_to_tor_for_onion_settings": "Conectar ao Tor para ver as configurações do serviço onion",
+ "error_cannot_create_data_dir": "Pasta de dados OnionShare não foi criada: {}",
+ "receive_mode_data_dir": "Os arquivos que lhe foram enviados estão nesta pasta: {}",
+ "gui_settings_data_dir_label": "Salvar arquivos em",
+ "gui_settings_data_dir_browse_button": "Navegar",
+ "systray_share_started_title": "O compartilhamento iniciou",
+ "systray_share_started_message": "Iniciando o envio de arquivos",
+ "systray_share_completed_title": "O compartilhamento completou-se",
+ "systray_share_completed_message": "O envio de arquivos terminou",
+ "systray_share_canceled_title": "O compartilhamento foi anulado",
+ "systray_share_canceled_message": "Alguém cancelou o recebimento dos seus arquivos",
+ "systray_receive_started_title": "O recebimento iniciou",
+ "systray_receive_started_message": "Alguém está lhe enviando arquivos",
+ "gui_all_modes_history": "Histórico",
+ "gui_all_modes_clear_history": "Apagar Tudo",
+ "gui_all_modes_transfer_started": "Iniciou {}",
+ "gui_all_modes_transfer_finished_range": "Transferido {} - {}",
+ "gui_all_modes_transfer_finished": "Transferido {}",
+ "gui_all_modes_transfer_canceled_range": "Cancelado {} - {}",
+ "gui_all_modes_transfer_canceled": "Cancelado {}",
+ "gui_share_mode_timeout_waiting": "Esperando para completar o envio",
+ "gui_receive_mode_no_files": "Nenhum arquivo recebido",
+ "gui_receive_mode_timeout_waiting": "Esperando para completar o recebimento"
}
diff --git a/share/locale/ru.json b/share/locale/ru.json
index 254b5ef8..539b488a 100644
--- a/share/locale/ru.json
+++ b/share/locale/ru.json
@@ -1,10 +1,10 @@
{
- "give_this_url": "Передайте этот адрес получателю:",
+ "give_this_url": "Передайте получателю этот адрес:",
"ctrlc_to_stop": "Нажмите Ctrl+C, чтобы остановить сервер",
"not_a_file": "{0:s} недопустимый файл.",
"gui_copied_url": "Ссылка OnionShare скопирована в буфер обмена",
"other_page_loaded": "Адрес загружен",
- "gui_copy_url": "Скопировать ссылку",
+ "gui_copy_url": "Копировать ссылку",
"systray_menu_exit": "Выйти",
"gui_add": "Добавить",
"gui_delete": "Удалить",
@@ -14,21 +14,21 @@
"gui_quit_warning_dont_quit": "Отмена",
"gui_settings_window_title": "Настройки",
"gui_settings_autoupdate_timestamp_never": "Никогда",
- "gui_settings_general_label": "Общие настройки",
+ "gui_settings_general_label": "Общие настройки:",
"gui_settings_control_port_label": "Контрольный порт",
"gui_settings_authenticate_password_option": "Пароль",
"gui_settings_password_label": "Пароль",
"gui_settings_button_save": "Сохранить",
"gui_settings_button_cancel": "Отмена",
"gui_settings_button_help": "Помощь",
- "gui_tor_connection_ask_open_settings": "Есть",
+ "gui_tor_connection_ask_open_settings": "Настройки",
"gui_tor_connection_ask_quit": "Выйти",
- "gui_status_indicator_share_started": "Идёт раздача",
+ "gui_status_indicator_share_started": "Идёт отправка",
"gui_status_indicator_receive_started": "Идёт получение",
- "gui_settings_downloads_label": "Сохранять файлы в",
+ "gui_settings_downloads_label": "Путь сохранения файлов: ",
"gui_settings_downloads_button": "Выбрать",
"gui_clear_history": "Очистить Все",
- "gui_settings_language_label": "Предпочтительный язык",
+ "gui_settings_language_label": "Язык интерфейса:",
"config_onion_service": "Назначем \"луковому\" сервису порт {:d}.",
"preparing_files": "Сжимаем файлы.",
"give_this_url_stealth": "Передайте этот адрес и строку HidServAuth получателю:",
@@ -38,41 +38,41 @@
"no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса",
"close_on_timeout": "Время ожидания таймера истекло, сервис остановлен",
"closing_automatically": "Загрузка завершена, сервис остановлен",
- "timeout_download_still_running": "Ожидаем завершения загрузки",
- "timeout_upload_still_running": "Ожидаем завершения выгрузки",
- "large_filesize": "Внимание: Отправка раздачи большого объёма может занять продолжительное время (часы)",
- "systray_download_started_title": "OnionShare: Загрузка Началась",
- "systray_download_started_message": "Пользователь начал загружать ваши файлы",
- "systray_download_completed_title": "OnionShare: Загрузка Завершена",
- "systray_download_completed_message": "Пользователь завершил загрузку ваших файлов",
- "systray_download_canceled_title": "OnionShare: Загрузка Отменена",
- "systray_download_canceled_message": "Пользователь отменил загрузку",
- "systray_upload_started_title": "OnionShare: Выгрузка Началась",
- "systray_upload_started_message": "Пользователь начал выгрузку файлов на ваш компьютер",
+ "timeout_download_still_running": "Ожидаем завершения скачивания",
+ "timeout_upload_still_running": "Ожидаем завершения загрузки",
+ "large_filesize": "Внимание: Отправка данных большого объёма может занять продолжительное время (несколько часов)",
+ "systray_download_started_title": "OnionShare: скачивание началось",
+ "systray_download_started_message": "Пользователь начал загружать Ваши файлы",
+ "systray_download_completed_title": "OnionShare: скачивание завершено",
+ "systray_download_completed_message": "Пользователь завершил скачивание Ваших файлов",
+ "systray_download_canceled_title": "OnionShare: скачивание отменено",
+ "systray_download_canceled_message": "Пользователь отменил скачивание",
+ "systray_upload_started_title": "OnionShare: загрузка началась",
+ "systray_upload_started_message": "Пользователь начал загрузку файлов на Ваш компьютер",
"help_local_only": "Не использовать Tor (только для разработки)",
- "help_stay_open": "Продолжить раздачу после первой загрузки",
- "help_shutdown_timeout": "Остановить раздачу после заданного количества секунд",
+ "help_stay_open": "Продолжить отправку после первого скачивания",
+ "help_shutdown_timeout": "Остановить отправку после заданного количества секунд",
"help_stealth": "Использовать авторизацию клиента (дополнительно)",
- "help_receive": "Получать раздачи, вместо их отправки",
+ "help_receive": "Получать загрузки, вместо их отправки:",
"help_debug": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск",
- "help_filename": "Список файлов или папок для раздачи",
+ "help_filename": "Список файлов или папок для отправки",
"help_config": "Расположение пользовательского конфигурационного JSON-файла (необязательно)",
- "gui_drag_and_drop": "Перетащите сюда файлы и папки\nчтобы начать раздачу",
- "gui_share_start_server": "Начать раздачу",
- "gui_share_stop_server": "Закончить раздачу",
- "gui_share_stop_server_shutdown_timeout": "Остановить раздачу ({}s осталось)",
+ "gui_drag_and_drop": "Перетащите сюда файлы и/или папки,\nкоторые хотите отправить.",
+ "gui_share_start_server": "Начать отправку",
+ "gui_share_stop_server": "Закончить отправку",
+ "gui_share_stop_server_shutdown_timeout": "Остановить отправку ({}s осталось)",
"gui_share_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
- "gui_receive_start_server": "Включить Режим Получения",
- "gui_receive_stop_server": "Выключить Режим Получения",
+ "gui_receive_start_server": "Включить режим получения",
+ "gui_receive_stop_server": "Выключить режим получения",
"gui_receive_stop_server_shutdown_timeout": "Выключить Режим Получения ({}s осталось)",
"gui_receive_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
"gui_copy_hidservauth": "Скопировать строку HidServAuth",
- "gui_downloads": "История Загрузок",
- "gui_no_downloads": "Пока нет загрузок",
+ "gui_downloads": "История скачиваний",
+ "gui_no_downloads": "Скачиваний пока нет ",
"gui_copied_url_title": "Адрес OnionShare скопирован",
"gui_copied_hidservauth_title": "Строка HidServAuth скопирована",
"gui_copied_hidservauth": "Строка HidServAuth скопирована в буфер обмена",
- "gui_please_wait": "Начинаем... нажмите, чтобы отменить.",
+ "gui_please_wait": "Запускается... Нажмите здесь, чтобы отменить.",
"gui_download_upload_progress_complete": "%p%, прошло {0:s}.",
"gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)",
"gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%",
@@ -80,33 +80,33 @@
"gui_quit_title": "Не так быстро",
"gui_share_quit_warning": "Идёт процесс отправки файлов. Вы уверены, что хотите завершить работу OnionShare?",
"gui_receive_quit_warning": "Идёт процесс получения файлов. Вы уверены, что хотите завершить работу OnionShare?",
- "error_rate_limit": "Кто-то совершил слишком много неверных попыток подключения к вашему адресу, это может означать, что его пытаются вычислить. OnionShare остановил сервер. Создайте раздачу повторно и перешлите получателю новый адрес.",
+ "error_rate_limit": "Кто-то совершил слишком много попыток подключения к Вашему серверу отправки файлов. Возможно, его пытаются вычислить. OnionShare остановил сервер. Отправьте Ваши данные повторно и перешлите получателю новый адрес.",
"zip_progress_bar_format": "Сжатие: %p%",
"error_stealth_not_supported": "Для использования авторизации клиента необходимы как минимум версии Tor 0.2.9.1-alpha (или Tor Browser 6.5) и библиотеки python3-stem 1.5.0.",
"error_ephemeral_not_supported": "Для работы OnionShare необходимы как минимум версии Tor 0.2.7.1 и библиотеки python3-stem 1.4.0.",
"gui_settings_whats_this": "<a href='{0:s}'>Что это?</a>",
- "gui_settings_stealth_option": "Использовать авторизацию клиента (устарело)",
- "gui_settings_stealth_hidservauth_string": "Сохранили ваш приватный ключ для повторного использования,\nзначит теперь вы можете нажать сюда, чтобы скопировать вашу строку HidServAuth.",
- "gui_settings_autoupdate_label": "Проверить новую версию",
+ "gui_settings_stealth_option": "Использовать авторизацию клиента (legacy)",
+ "gui_settings_stealth_hidservauth_string": "Сохранили Ваш приватный ключ для повторного использования,\nНажмите сюда, чтобы скопировать строку HidServAuth.",
+ "gui_settings_autoupdate_label": "Проверить наличие новой версии",
"gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия",
"gui_settings_autoupdate_timestamp": "Последняя проверка: {}",
- "gui_settings_autoupdate_check_button": "Проверить Новую Версию",
- "gui_settings_sharing_label": "Настройки раздачи",
- "gui_settings_close_after_first_download_option": "Остановить раздачу после первой загрузки",
- "gui_settings_connection_type_label": "Как OnionShare следует подключиться к сети Tor?",
+ "gui_settings_autoupdate_check_button": "Проверить наличие новой версии",
+ "gui_settings_sharing_label": "Настройки отправки:",
+ "gui_settings_close_after_first_download_option": "Завершить отправку Ваших файлов\nпосле их первого скачивания",
+ "gui_settings_connection_type_label": "Как OnionShare следует подключаться к сети Tor?",
"gui_settings_connection_type_bundled_option": "Использовать версию Tor, встроенную в OnionShare",
- "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_automatic_option": "Автоматическая настройка при помощи Tor Browser",
+ "gui_settings_connection_type_control_port_option": "Использовать порт управления",
+ "gui_settings_connection_type_socket_file_option": "Использовать файл сокет",
"gui_settings_connection_type_test_button": "Проверить подключение к сети Tor",
- "gui_settings_socket_file_label": "Файл-сокет",
+ "gui_settings_socket_file_label": "Файл сокет",
"gui_settings_socks_label": "Порт SOCKS",
"gui_settings_authenticate_label": "Настройки аутентификации Tor",
"gui_settings_authenticate_no_auth_option": "Без аутентификации или cookie-аутентификации",
- "gui_settings_tor_bridges": "Поддержка \"мостов\" Tor",
+ "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_obfs4_radio_option": "Использовать встроенные подключаемые транспорты obfs4",
+ "gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "Использовать встроенные подключаемые транспорты obfs4 (необходим obfs4proxy)",
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "Использовать встроенные meek_lite (Azure) встроенные транспорты",
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные meek_lite (Azure) встроенные транспорты (необходим obfs4proxy)",
"gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_lite очень затратно для Tor Project<br><br>Используйте их только если Вы не можете поделючться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".",
@@ -114,14 +114,14 @@
"gui_settings_tor_bridges_custom_label": "Получить настройки \"мостов\" можно здесь <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
"gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работет.\nПроверьте их снова или добавьте другие.",
"gui_settings_shutdown_timeout_checkbox": "Использовать таймер",
- "gui_settings_shutdown_timeout": "Остановить раздачу в:",
- "settings_error_unknown": "Невозможно подключить к контроллеру Tor, поскольку ваши настройки не корректны.",
- "settings_error_automatic": "Невозможно подключться к контроллеру Tor. Уточните, Tor Browser (можно загрузить по ссылке torproject.org) запущен в фоновом режиме?",
- "settings_error_socket_port": "Невозможно подключиться к контроллеру Tor в {}:{}.",
- "settings_error_socket_file": "Невозможно подключиться к контроллеру Tor используя файл-сокет {}.",
+ "gui_settings_shutdown_timeout": "Остановить загрузку в:",
+ "settings_error_unknown": "Невозможно произвести подключение к контроллеру Tor, поскольку Ваши настройки не корректны.",
+ "settings_error_automatic": "Невозможно произвести подключение к контроллеру Tor. Пожалуйтса, уточните: Tor Browser (можно найти по ссылке: torproject.org) запущен в фоновом режиме?",
+ "settings_error_socket_port": "Невозможно произвести подключение к контроллеру Tor в {}:{}.",
+ "settings_error_socket_file": "Невозможно произвести подключение к контроллеру Tor используя файл-сокет {}.",
"settings_error_auth": "Произведено подлючение к {}:{}, не получается проверить подлинность. Возможно, это не контроллер сети Tor?",
"settings_error_missing_password": "Произведено подключение к контроллеру Tor, но для аутентификации необходим пароль.",
- "settings_error_unreadable_cookie_file": "Произведено подключение к контроллеру 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_broken": "OnionShare не смог подулючиться к сети Tor в фоновом режиме:\n{}",
@@ -129,57 +129,60 @@
"error_tor_protocol_error": "Произошла ошибка с сетью Tor: {}",
"error_tor_protocol_error_unknown": "Произошла неизвестная ошибка с сетю Tor",
"error_invalid_private_key": "Данный тип приватного ключа не поддерживается",
- "connecting_to_tor": "Подключаемся к сети Tor",
+ "connecting_to_tor": "Идёт подключение к сети Tor...",
"update_available": "Вышла новая версия OnionShare. <a href='{}'>Нажмите сюда</a> чтобы загрузить.<br><br>Вы используется версию {}, наиболее поздняя версия {}.",
"update_error_check_error": "Не удалось проверить новые версии: сайт OnionShare сообщает, что не удалось распознать наиболее позднюю версию '{}'…",
- "update_error_invalid_latest_version": "Не удалось проверить наличие новой версии: возможно вы не подключены к сети Tor или сайт OnionShare не работает?",
+ "update_error_invalid_latest_version": "Не удалось проверить наличие новой версии: возможно, Вы не подключены к сети Tor или сайт OnionShare не работает?",
"update_not_available": "Вы используете наиболее позднюю версию OnionShare.",
- "gui_tor_connection_ask": "Открыть раздел \"настройки\" для решения проблем с подключением к сети Tor?",
+ "gui_tor_connection_ask": "Перейти в раздел \"Настройки\" для решения проблем с подключением к сети 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_timeout": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, создайте новую раздачу.",
- "gui_server_timeout_expired": "Время таймера истекло.\nПожалуйста, обновите его для того, чтобы начать раздачу.",
+ "gui_server_started_after_timeout": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, отправьте файлы заново.",
+ "gui_server_timeout_expired": "Время таймера истекло.\nПожалуйста, обновите его для того, чтобы начать отправку.",
"share_via_onionshare": "OnionShare это",
"gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса",
- "gui_save_private_key_checkbox": "Используйте постоянный адрес (устарело)",
- "gui_share_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>загрузить</b> ваши файлы при помощи<b>Tor Browser</b>: <img src='{}' />",
- "gui_receive_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>выгрузить</b> файлы на ваш комьютер <b>Tor Browser</b>: <img src='{}' />",
- "gui_url_label_persistent": "Данная раздаче не будет завершена автоматически.<br><br>Каждая последующая раздача будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
- "gui_url_label_stay_open": "Данная раздача не будет остановлена автоматически.",
- "gui_url_label_onetime": "Данная раздача будет завершена автоматически после первой загрузки.",
- "gui_url_label_onetime_and_persistent": "Данная раздача не будет завершена автоматически.<br><br>Каждая последующая раздача будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
- "gui_status_indicator_share_stopped": "Можно начинать раздачу",
- "gui_status_indicator_share_working": "Начинаем…",
- "gui_status_indicator_receive_stopped": "Можно начинать получение",
- "gui_status_indicator_receive_working": "Начинаем…",
+ "gui_save_private_key_checkbox": "Используйте постоянный адрес (legacy)",
+ "gui_share_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>скачать</b> Ваши файлы при помощи <b>Tor Browser</b>: <img src='{}' />",
+ "gui_receive_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>загрузить</b> файлы на Ваш комьютер <b>Tor Browser</b>: <img src='{}' />",
+ "gui_url_label_persistent": "Данная отправка не будет завершена автоматически.<br><br>Каждая последующая отправка будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
+ "gui_url_label_stay_open": "Данная отправка не будет остановлена автоматически.",
+ "gui_url_label_onetime": "Данная отправка будет завершена автоматически после первой загрузки.",
+ "gui_url_label_onetime_and_persistent": "Данная отправка не будет завершена автоматически.<br><br>Каждая последующая отправка будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
+ "gui_status_indicator_share_stopped": "Данные готовы к отправке",
+ "gui_status_indicator_share_working": "Ожидайте...",
+ "gui_status_indicator_receive_stopped": "Данные готовы к получению",
+ "gui_status_indicator_receive_working": "Ожидайте...",
"gui_file_info": "{} файлы, {}",
"gui_file_info_single": "{} файл, {}",
"history_in_progress_tooltip": "{} в ходе выполнения",
"history_completed_tooltip": "{} завершено",
- "info_in_progress_uploads_tooltip": "{} выгрузка(и) в ходе выполнения",
- "info_completed_uploads_tooltip": "{} выгрузка(и) завершена(ы)",
+ "info_in_progress_uploads_tooltip": "{} загрузка(и) в ходе выполнения",
+ "info_completed_uploads_tooltip": "{} загрузка(и) завершена(ы)",
"error_cannot_create_downloads_dir": "Не удалось создать папку в режиме получения: {}",
- "receive_mode_downloads_dir": "Файлы, которые были вам отправлены находятся в папке: {}",
- "receive_mode_warning": "Внимание: Режим получения позаоляет другия людями загружать файлы на ваш компьютер. Некоторые файлы могут получить управление вашим компьютером, если вы откроете их. Открывайте только те файлы, которые вы получили от людей, которым вы доверяете, или если вы знаете, что делаете.",
- "gui_receive_mode_warning": "Режим получения позаоляет другия людями загружать файлы на ваш компьютер. <br><br><b>Некоторые файлы могут получить управление вашим компьютером, если вы откроете их. Открывайте только те файлы, которые вы получили от людей, которым вы доверяете, или если вы знаете, что делаете.</b>",
- "receive_mode_upload_starting": "Начинается выгрузка общим объёмом {}",
+ "receive_mode_downloads_dir": "Загруженные Вас файлы находятся в папке: {}",
+ "receive_mode_warning": "Внимание: Режим получения позволяет другим людями загружать файлы на Ваш компьютер. Некоторые файлы могут представлять угрозу для Вашего компьютера. <br>Открывайте файлы полученные только от тех людей, которым Вы доверяете или если Вы знаете, что делаете.",
+ "gui_receive_mode_warning": "Режим \"Получение Файлов\" позволяет другим людями загружать файлы на Ваш компьютер. <br><br><b>Некоторые файлы могут представлять угрозу для Вашего компьютера. <br>Открывайте файлы полученные только от тех людей, которым Вы доверяете или если Вы знаете, что делаете.</b>",
+ "receive_mode_upload_starting": "Начинается загрузка общим объёмом {}",
"receive_mode_received_file": "Получено: {}",
- "gui_mode_share_button": "Раздача файлов",
+ "gui_mode_share_button": "Отправка файлов",
"gui_mode_receive_button": "Получение файлов",
- "gui_settings_receiving_label": "Настройки получения",
+ "gui_settings_receiving_label": "Настройки получения:",
"gui_settings_public_mode_checkbox": "Публичный режим",
- "systray_close_server_title": "Сервер OnionShare Отключен",
+ "systray_close_server_title": "Сервер OnionShare отключен",
"systray_close_server_message": "Пользователь отключил сервер",
- "systray_page_loaded_title": "Страница OnionShare Загружена",
- "systray_download_page_loaded_message": "Пользователь находится на странице загрузки",
- "systray_upload_page_loaded_message": "Пользователь посетил странцу выгрузки",
- "gui_uploads": "История Выгрузок",
- "gui_no_uploads": "Пока Нет Выгрузок",
- "gui_upload_in_progress": "Выгрузка Началась {}",
+ "systray_page_loaded_title": "Страница OnionShare загружена",
+ "systray_download_page_loaded_message": "Пользователь находится на странице скачивания",
+ "systray_upload_page_loaded_message": "Пользователь посетил странцу загрузки",
+ "gui_uploads": "История загрузок",
+ "gui_no_uploads": "Загрузок пока нет",
+ "gui_upload_in_progress": "Загрузка началась {}",
"gui_upload_finished_range": "Загружено {} в {}",
- "gui_upload_finished": "Выгружено {}",
- "gui_download_in_progress": "Загрузка Началась {}",
- "gui_open_folder_error_nautilus": "Не удаётся открыть папку, поскольку nautilus не доступен. Файл находится здесь: {}",
- "gui_settings_language_changed_notice": "Перезапустите OnionShare чтобы применились языковые настройки."
+ "gui_upload_finished": "Загружено {}",
+ "gui_download_in_progress": "Загрузка началась {}",
+ "gui_open_folder_error_nautilus": "Не удаётся открыть папку, поскольку файловый менджер Nautilus не доступен. Файл находится здесь: {}",
+ "gui_settings_language_changed_notice": "Перезапустите OnionShare, чтобы изменения языковых настроек вступили в силу.",
+ "gui_add_files": "Добавить файлы",
+ "gui_add_folder": "Добавить папку",
+ "error_cannot_create_data_dir": "Не удалось создать папку данных OnionShare: {}"
}
diff --git a/share/locale/sv.json b/share/locale/sv.json
index c0e28ec7..f1072332 100644
--- a/share/locale/sv.json
+++ b/share/locale/sv.json
@@ -3,15 +3,15 @@
"preparing_files": "Komprimera filer.",
"give_this_url": "Ge den här adressen till mottagaren:",
"give_this_url_stealth": "Ge den här adressen och HidServAuth-raden till mottagaren:",
- "give_this_url_receive": "Ge den här adressen till avsändaren:",
- "give_this_url_receive_stealth": "Ge den här adressen och HidServAuth-raden till avsändaren:",
+ "give_this_url_receive": "Ge denna adress till avsändaren:",
+ "give_this_url_receive_stealth": "Ge denna adress och HidServAuth till avsändaren:",
"ctrlc_to_stop": "Tryck ned Ctrl+C för att stoppa servern",
"not_a_file": "{0:s} är inte en giltig fil.",
"not_a_readable_file": "{0:s} är inte en läsbar fil.",
- "no_available_port": "Kunde inte hitta en ledig kort för att starta onion-tjänsten",
+ "no_available_port": "Kunde inte hitta en ledig kort för att börja onion-tjänsten",
"other_page_loaded": "Adress laddad",
"close_on_timeout": "Stoppad för att automatiska stopp-timern tiden tog slut",
- "closing_automatically": "Stannade för att nedladdningen blev klar",
+ "closing_automatically": "Stoppad för att hämtningen är klar",
"timeout_download_still_running": "Väntar på att nedladdningen ska bli klar",
"timeout_upload_still_running": "Väntar på att uppladdningen ska bli klar",
"large_filesize": "Varning: Att skicka en stor fil kan ta timmar",
@@ -25,22 +25,22 @@
"systray_upload_started_title": "OnionShare Uppladdning Påbörjad",
"systray_upload_started_message": "En användare började ladda upp filer på din dator",
"help_local_only": "Använd inte Tor (endast för utveckling)",
- "help_stay_open": "Fortsätt dela efter första nedladdning",
+ "help_stay_open": "Fortsätt dela efter att filer har skickats",
"help_shutdown_timeout": "Avbryt delning efter ett bestämt antal sekunder",
"help_stealth": "Använd klient-auktorisering (avancerat)",
"help_receive": "Ta emot delningar istället för att skicka dem",
"help_debug": "Logga OnionShare fel till stdout och webbfel till hårddisken",
"help_filename": "Lista filer och mappar att dela",
"help_config": "Egenvald sökväg för JSON konfigurationsfil (valfri)",
- "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att påbörja delning",
+ "gui_drag_and_drop": "Dra och släpp filer och mappar\nför att börja delning",
"gui_add": "Lägg till",
"gui_delete": "Radera",
"gui_choose_items": "Välj",
- "gui_share_start_server": "Påbörja delning",
+ "gui_share_start_server": "Börja dela",
"gui_share_stop_server": "Avbryt delning",
"gui_share_stop_server_shutdown_timeout": "Avbryt Delning ({}s kvarstår)",
- "gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-timern slutar vid {}",
- "gui_receive_start_server": "Starta Mottagarläge",
+ "gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-timern avslutar vid {}",
+ "gui_receive_start_server": "Börja mottagarläge",
"gui_receive_stop_server": "Avsluta Mottagarläge",
"gui_receive_stop_server_shutdown_timeout": "Avsluta Mottagarläge ({}s kvarstår)",
"gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer avslutas kl {}",
@@ -49,8 +49,8 @@
"gui_downloads": "Nedladdningshistorik",
"gui_no_downloads": "Inga Nedladdningar Än",
"gui_canceled": "Avbruten",
- "gui_copied_url_title": "OnionShare Adress Kopierad",
- "gui_copied_url": "OnionShare adress kopierad till urklipp",
+ "gui_copied_url_title": "OnionShare-adress kopierad",
+ "gui_copied_url": "OnionShare-adress kopierad till urklipp",
"gui_copied_hidservauth_title": "HidServAuth Kopierad",
"gui_copied_hidservauth": "HidServAuth-rad kopierad till urklipp",
"gui_please_wait": "Börjar... klicka för att avbryta.",
@@ -78,9 +78,9 @@
"gui_settings_autoupdate_check_button": "Sök efter ny version",
"gui_settings_general_label": "Allmänna inställningar",
"gui_settings_sharing_label": "Delningsinställningar",
- "gui_settings_close_after_first_download_option": "Sluta dela efter första hämtningen",
+ "gui_settings_close_after_first_download_option": "Fortsätt dela efter att filer har skickats",
"gui_settings_connection_type_label": "Hur ska OnionShare ansluta till Tor?",
- "gui_settings_connection_type_bundled_option": "Använd Tor-versionen inbyggd i OnionShare",
+ "gui_settings_connection_type_bundled_option": "Använd Tor-versionen som är inbyggd i OnionShare",
"gui_settings_connection_type_automatic_option": "Försök automatisk konfiguration med Tor Browser",
"gui_settings_connection_type_control_port_option": "Anslut med kontrollport",
"gui_settings_connection_type_socket_file_option": "Anslut med socket-filen",
@@ -122,9 +122,9 @@
"error_tor_protocol_error_unknown": "Det fanns ett okänt fel med Tor",
"error_invalid_private_key": "Denna privata nyckeltyp stöds inte",
"connecting_to_tor": "Ansluter till Tor-nätverket",
- "update_available": "Ny OnionShare utgiven. <a href='{}'>Klicka här</a> för att få det.<br><br>Du använder {} och det senaste är {}.",
+ "update_available": "Ny OnionShare utgiven. <a href='{}'>Klicka här</a> för att få den.<br><br>Du använder {} och den senaste är {}.",
"update_error_check_error": "Det gick inte att söka efter nya versioner: OnionShare-webbplatsen säger att den senaste versionen är den oigenkännliga '{}'…",
- "update_error_invalid_latest_version": "Det gick inte att söka efter ny version: kanske är du inte ansluten till Tor, eller OnionShare-webbplatsen är nere?",
+ "update_error_invalid_latest_version": "Det gick inte att söka efter ny version: Kanske är du inte ansluten till Tor, eller är OnionShare-webbplatsen nere?",
"update_not_available": "Du kör den senaste OnionShare.",
"gui_tor_connection_ask": "Öppna inställningarna för att sortera ut anslutning till Tor?",
"gui_tor_connection_ask_open_settings": "Ja",
@@ -169,7 +169,7 @@
"gui_settings_public_mode_checkbox": "Offentligt läge",
"systray_close_server_title": "OnionShare-servern stängd",
"systray_close_server_message": "En användare stängde servern",
- "systray_page_loaded_title": "OnionShare-sidan lästes in",
+ "systray_page_loaded_title": "Sidan lästes in",
"systray_download_page_loaded_message": "En användare läste in hämtningssidan",
"systray_upload_page_loaded_message": "En användare läste in sändningssidan",
"gui_uploads": "Sändningshistoriken",
@@ -184,5 +184,32 @@
"gui_settings_language_changed_notice": "Starta om OnionShare för att din språkändring ska träda i kraft.",
"gui_add_files": "Lägg till filer",
"gui_add_folder": "Lägg till mapp",
- "gui_connect_to_tor_for_onion_settings": "Anslut till Tor för att se onion-tjänst-inställningar"
+ "gui_connect_to_tor_for_onion_settings": "Anslut till Tor för att se onion-tjänst-inställningar",
+ "error_cannot_create_data_dir": "Det gick inte att skapa OnionShare-datamapp: {}",
+ "receive_mode_data_dir": "Filer som skickas till dig visas i den här mappen: {}",
+ "gui_settings_data_dir_label": "Spara filer till",
+ "gui_settings_data_dir_browse_button": "Bläddra",
+ "systray_page_loaded_message": "OnionShare-adress lästes in",
+ "systray_share_started_title": "Delning börjades",
+ "systray_share_started_message": "Börjar skicka filer till någon",
+ "systray_share_completed_title": "Delning klar",
+ "systray_share_completed_message": "Filerna skickades",
+ "systray_share_canceled_title": "Delning avbruten",
+ "systray_share_canceled_message": "Någon har avbrutit att ta emot dina filer",
+ "systray_receive_started_title": "Mottagning startad",
+ "systray_receive_started_message": "Någon skickar filer till dig",
+ "gui_all_modes_history": "Historik",
+ "gui_all_modes_clear_history": "Rensa alla",
+ "gui_all_modes_transfer_started": "Började {}",
+ "gui_all_modes_transfer_finished_range": "Överförd {} - {}",
+ "gui_all_modes_transfer_finished": "Överförd {}",
+ "gui_all_modes_progress_complete": "%p%, {0} förflutit.",
+ "gui_all_modes_progress_starting": "{0} %s% (beräkning)",
+ "gui_all_modes_progress_eta": "{0:s}, ETA: {1:s}, %p%",
+ "gui_share_mode_no_files": "Inga filer har skickats än",
+ "gui_share_mode_timeout_waiting": "Väntar på att avsluta sändningen",
+ "gui_receive_mode_no_files": "Inga filer har mottagits ännu",
+ "gui_receive_mode_timeout_waiting": "Väntar på att avsluta mottagande",
+ "gui_all_modes_transfer_canceled_range": "Avbröt {} - {}",
+ "gui_all_modes_transfer_canceled": "Avbröt {}"
}
diff --git a/share/locale/tr.json b/share/locale/tr.json
index ae6a7058..a5f5b429 100644
--- a/share/locale/tr.json
+++ b/share/locale/tr.json
@@ -22,5 +22,9 @@
"gui_copied_url": "Panoya kopyalanan URL",
"gui_please_wait": "Lütfen bekleyin...",
"zip_progress_bar_format": "Dosyalar hazırlanıyor: %p%",
- "config_onion_service": "{0:d} bağlantı noktasında onion servisini ayarla."
+ "config_onion_service": "{0:d} bağlantı noktasında onion servisini ayarla.",
+ "give_this_url_receive": "Bu adresi gönderene ver:",
+ "not_a_readable_file": "{0:s} okunabilir bir dosya değil.",
+ "no_available_port": "Onion servisini başlatmak için uygun bir port bulunamadı",
+ "close_on_timeout": "Otomatik durma zamanlayıcısının bitmesi nedeniyle durdu"
}
diff --git a/share/locale/zh_Hans.json b/share/locale/zh_Hans.json
index 958bfb3c..2331e762 100644
--- a/share/locale/zh_Hans.json
+++ b/share/locale/zh_Hans.json
@@ -1,19 +1,19 @@
{
- "config_onion_service": "",
- "preparing_files": "",
- "give_this_url": "",
- "give_this_url_stealth": "",
- "give_this_url_receive": "",
- "give_this_url_receive_stealth": "",
- "ctrlc_to_stop": "",
- "not_a_file": "",
- "not_a_readable_file": "",
- "no_available_port": "",
- "other_page_loaded": "",
- "close_on_timeout": "",
- "closing_automatically": "",
+ "config_onion_service": "在端口{0:d}上设置洋葱服务。",
+ "preparing_files": "正在压缩文件.",
+ "give_this_url": "把这个地址给收件人:",
+ "give_this_url_stealth": "向收件人提供此地址和HidServAuth行:",
+ "give_this_url_receive": "把这个地址交给发件人:",
+ "give_this_url_receive_stealth": "把这个地址和HidServAuth交给发送者:",
+ "ctrlc_to_stop": "按Ctrl+C停止服务器",
+ "not_a_file": "{0:s}不是有效文件。",
+ "not_a_readable_file": "{0:s}不是可读文件.",
+ "no_available_port": "找不到可用于开启onion服务的端口",
+ "other_page_loaded": "地址已加载完成",
+ "close_on_timeout": "终止 原因:自动停止计时器的时间已到",
+ "closing_automatically": "终止 原因:传输已完成",
"timeout_download_still_running": "",
- "large_filesize": "",
+ "large_filesize": "警告:分享大文件可能会用上数小时",
"systray_menu_exit": "退出",
"systray_download_started_title": "",
"systray_download_started_message": "",
@@ -23,153 +23,153 @@
"systray_download_canceled_message": "",
"systray_upload_started_title": "",
"systray_upload_started_message": "",
- "help_local_only": "",
- "help_stay_open": "",
- "help_shutdown_timeout": "",
- "help_stealth": "",
- "help_receive": "",
- "help_debug": "",
- "help_filename": "",
- "help_config": "",
- "gui_drag_and_drop": "",
+ "help_local_only": "不使用Tor(只限开发测试)",
+ "help_stay_open": "文件传输完成后继续分享",
+ "help_shutdown_timeout": "超过给定时间(秒)后,终止分享.",
+ "help_stealth": "使用服务端认证(高级选项)",
+ "help_receive": "仅接收分享的文件,不发送",
+ "help_debug": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘",
+ "help_filename": "要分享的文件或文件夹的列表",
+ "help_config": "自定义JSON配置文件的路径(可选)",
+ "gui_drag_and_drop": "将文件或文件夹拖动到这里来开始分享",
"gui_add": "添加",
"gui_delete": "删除",
- "gui_choose_items": "选择",
- "gui_share_start_server": "",
- "gui_share_stop_server": "",
- "gui_share_stop_server_shutdown_timeout": "",
- "gui_share_stop_server_shutdown_timeout_tooltip": "",
- "gui_receive_start_server": "",
- "gui_receive_stop_server": "",
- "gui_receive_stop_server_shutdown_timeout": "",
- "gui_receive_stop_server_shutdown_timeout_tooltip": "",
- "gui_copy_url": "",
- "gui_copy_hidservauth": "",
+ "gui_choose_items": "选取",
+ "gui_share_start_server": "开始分享",
+ "gui_share_stop_server": "停止分享",
+ "gui_share_stop_server_shutdown_timeout": "停止分享(还剩{}秒)",
+ "gui_share_stop_server_shutdown_timeout_tooltip": "在{}自动停止",
+ "gui_receive_start_server": "开启接受模式",
+ "gui_receive_stop_server": "停止接受模式",
+ "gui_receive_stop_server_shutdown_timeout": "停止接受模式(还剩{}秒)",
+ "gui_receive_stop_server_shutdown_timeout_tooltip": "在{}自动停止",
+ "gui_copy_url": "复制地址",
+ "gui_copy_hidservauth": "复制HidServAuth",
"gui_downloads": "",
"gui_no_downloads": "",
- "gui_canceled": "取消",
- "gui_copied_url_title": "",
- "gui_copied_url": "",
- "gui_copied_hidservauth_title": "",
- "gui_copied_hidservauth": "",
- "gui_please_wait": "",
+ "gui_canceled": "已取消",
+ "gui_copied_url_title": "已复制的OnionShare地址",
+ "gui_copied_url": "OnionShare地址已复制到剪贴板",
+ "gui_copied_hidservauth_title": "已复制的HidServAuth",
+ "gui_copied_hidservauth": "HidServAuth行已复制到剪贴板",
+ "gui_please_wait": "起始中...点击这里可取消.",
"gui_download_upload_progress_complete": "",
"gui_download_upload_progress_starting": "",
"gui_download_upload_progress_eta": "",
- "version_string": "",
- "gui_quit_title": "",
- "gui_share_quit_warning": "",
- "gui_receive_quit_warning": "",
+ "version_string": "版本: OnionShare {0:s} | https://onionshare.org/",
+ "gui_quit_title": "再等等",
+ "gui_share_quit_warning": "您有文件正在传输中...您确定要退出OnionShare吗?",
+ "gui_receive_quit_warning": "您有文件还正在接收中...您确定要退出OnionShare吗?",
"gui_quit_warning_quit": "退出",
"gui_quit_warning_dont_quit": "取消",
- "error_rate_limit": "",
- "zip_progress_bar_format": "",
- "error_stealth_not_supported": "",
- "error_ephemeral_not_supported": "",
- "gui_settings_window_title": "设置中",
- "gui_settings_whats_this": "",
- "gui_settings_stealth_option": "",
- "gui_settings_stealth_hidservauth_string": "",
+ "error_rate_limit": "有人您对地址发出过多错误请求,这很可能说明有人在尝试猜测您的地址.因此为了安全OinionShare已终止服务.请重新开启分享并且向收件人发送新地址.",
+ "zip_progress_bar_format": "压缩中: %p%",
+ "error_stealth_not_supported": "要使用服务端认证,您至少需要的最低版本要求是:Tor 0.2.9.1-alpha (or Tor Browser 6.5)和python3-stem 1.5.0.两者缺一不可,同时需要.",
+ "error_ephemeral_not_supported": "OnionShare至少同时需要Tor 0.2.7.1和python3-stem 1.4.0来运行.",
+ "gui_settings_window_title": "设置",
+ "gui_settings_whats_this": "<a href='{0:s}'>这是什么?</a>",
+ "gui_settings_stealth_option": "使用客户端认证",
+ "gui_settings_stealth_hidservauth_string": "已保存了你的私钥用于重复使用,意味着您现在可以\n点击这里来复制您的HidServAuth.",
"gui_settings_autoupdate_label": "检查新版本",
- "gui_settings_autoupdate_option": "",
- "gui_settings_autoupdate_timestamp": "",
+ "gui_settings_autoupdate_option": "有新版本可用时告知我",
+ "gui_settings_autoupdate_timestamp": "上次检查更新的时间:{}",
"gui_settings_autoupdate_timestamp_never": "从不",
- "gui_settings_autoupdate_check_button": "",
+ "gui_settings_autoupdate_check_button": "检查新版本",
"gui_settings_general_label": "常规设置",
- "gui_settings_sharing_label": "",
- "gui_settings_close_after_first_download_option": "",
- "gui_settings_connection_type_label": "",
- "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_sharing_label": "分享设置",
+ "gui_settings_close_after_first_download_option": "文件发送完成后停止分享",
+ "gui_settings_connection_type_label": "OnionShare应如何连接Tor?",
+ "gui_settings_connection_type_bundled_option": "使用OnionShare内置的tor",
+ "gui_settings_connection_type_automatic_option": "尝试使用Tor Browser(Tor浏览器)的设置",
+ "gui_settings_connection_type_control_port_option": "用特定端口连接",
+ "gui_settings_connection_type_socket_file_option": "使用socket文档的设置连接",
+ "gui_settings_connection_type_test_button": "测试tor连接",
"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_socket_file_label": "Socket配置文档",
+ "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": "",
- "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": "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(需要obfs4代理)",
+ "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 (需要obfs4代理)",
+ "gui_settings_meek_lite_expensive_warning": "警告:meek_lite类型的网桥对Tor流量产生的负担很大,<br>请只在无法直接使用tor,且obfs4 transport和其他网桥都无法连接时才使用.<br>.",
+ "gui_settings_tor_bridges_custom_radio_option": "使用自定义网桥",
+ "gui_settings_tor_bridges_custom_label": "您可以从这里得到网桥地址<a href=\"https://bridges.torproject.org/options\">\nhttps://bridges.torproject.org</a>",
+ "gui_settings_tor_bridges_invalid": "您所添加的网桥无法工作.\n请双击它们或者添加其它网桥.",
"gui_settings_button_save": "保存",
"gui_settings_button_cancel": "取消",
"gui_settings_button_help": "帮助",
- "gui_settings_shutdown_timeout_checkbox": "",
- "gui_settings_shutdown_timeout": "",
- "settings_error_unknown": "",
- "settings_error_automatic": "",
- "settings_error_socket_port": "",
- "settings_error_socket_file": "",
- "settings_error_auth": "",
- "settings_error_missing_password": "",
- "settings_error_unreadable_cookie_file": "",
- "settings_error_bundled_tor_not_supported": "",
- "settings_error_bundled_tor_timeout": "",
- "settings_error_bundled_tor_broken": "",
- "settings_test_success": "",
- "error_tor_protocol_error": "",
- "error_tor_protocol_error_unknown": "",
- "error_invalid_private_key": "",
- "connecting_to_tor": "",
- "update_available": "",
- "update_error_check_error": "",
- "update_error_invalid_latest_version": "",
- "update_not_available": "",
- "gui_tor_connection_ask": "",
+ "gui_settings_shutdown_timeout_checkbox": "使用自动停止计时器",
+ "gui_settings_shutdown_timeout": "在(时间)停止分享",
+ "settings_error_unknown": "无法连接Tor控制件,因为您的设置无法被理解.",
+ "settings_error_automatic": "无法连接tor控制件.Tor浏览器是否在后台工作?(从torproject.org可以获得Tor Browser)",
+ "settings_error_socket_port": "在socket端口{}:{}无法连接tor控制件.",
+ "settings_error_socket_file": "无法使用socket配置文档的设置连接tor控制件",
+ "settings_error_auth": "已连接到了{}:{},但是无法认证,也许这不是tor控制件?",
+ "settings_error_missing_password": "已连接到tor控制件,但需要密码来认证.",
+ "settings_error_unreadable_cookie_file": "已连接到tor控制件,但可能密码错误,或者没有读取cookie文件的权限.",
+ "settings_error_bundled_tor_not_supported": "OnionShare自带的Tor无法在Windows或macOS下运行开发者模式",
+ "settings_error_bundled_tor_timeout": "尝试连接tor的用时过长,也许您的网络有问题,或者是系统时间不准确?",
+ "settings_error_bundled_tor_broken": "OnionShare无法在后台连接Tor\n{}",
+ "settings_test_success": "已连接到Tor控制件\n\nTor版本: {}\n支持短期onion服务: {}.\n支持客户端认证: {}.\n支持新一代.onion地址: {}.",
+ "error_tor_protocol_error": "Tor出现错误: {}",
+ "error_tor_protocol_error_unknown": "Tor出现未知错误",
+ "error_invalid_private_key": "不支持这种类型的私钥",
+ "connecting_to_tor": "正在连接Tor网络",
+ "update_available": "有新版本的OnionShare可用:<a href='{}'>请点击这里</a> 来获得.<br><br>您在使用的版本为 {} 最新的可用版本为 {}.",
+ "update_error_check_error": "无法检查更新:OnionShare官网对最新版本无法识别'{}'…",
+ "update_error_invalid_latest_version": "无法检查更新:也许您没有连接到Tor?或者OnionShare官网不可用?",
+ "update_not_available": "您现在运行的OnionShare为最新版本.",
+ "gui_tor_connection_ask": "打开设置来查看Tor连接?",
"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_timeout": "",
- "gui_server_timeout_expired": "",
- "share_via_onionshare": "",
- "gui_use_legacy_v2_onions_checkbox": "",
- "gui_save_private_key_checkbox": "",
- "gui_share_url_description": "",
- "gui_receive_url_description": "",
- "gui_url_label_persistent": "",
- "gui_url_label_stay_open": "",
- "gui_url_label_onetime": "",
- "gui_url_label_onetime_and_persistent": "",
- "gui_status_indicator_share_stopped": "",
- "gui_status_indicator_share_working": "",
- "gui_status_indicator_share_started": "分享",
- "gui_status_indicator_receive_stopped": "",
- "gui_status_indicator_receive_working": "",
+ "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_timeout": "在服务开始之前自动停止计时器的时间已到.\n请建立新的分享.",
+ "gui_server_timeout_expired": "自动停止计时器的时间已到.\n请更新其设置来开始分享.",
+ "share_via_onionshare": "用OnionShare来分享",
+ "gui_use_legacy_v2_onions_checkbox": "使用古老的地址",
+ "gui_save_private_key_checkbox": "使用长期地址",
+ "gui_share_url_description": "<b>任何人</b>只要拥有这个OnionShare 地址,都可以用<b>Tor浏览器</b>来从您的设备进行文件<b>下载</b>:<img src='{}' />",
+ "gui_receive_url_description": "<b>任何人</b>只要拥有这个OnionShare 地址,都可以用<b>Tor浏览器</b>来给你的设备进行文件<b>上传</b>:<img src='{}' />",
+ "gui_url_label_persistent": "这个分享不会自动停止.<br><br>每个子列分享都会重复使用这个地址.(要使用一次性地址, 请在设置中关闭\"使用长期地址\"的选项.)",
+ "gui_url_label_stay_open": "这个分享不会自动停止.",
+ "gui_url_label_onetime": "这个分享将在初次完成后终止.",
+ "gui_url_label_onetime_and_persistent": "这个分享不会自动停止.<br><br>每个子列分享都将会重复使用这个地址.(要使用一次性地址, 请在设置中关闭\"使用长期地址\"的选项.)",
+ "gui_status_indicator_share_stopped": "准备分享",
+ "gui_status_indicator_share_working": "正在初始话…",
+ "gui_status_indicator_share_started": "分享中",
+ "gui_status_indicator_receive_stopped": "准备接收",
+ "gui_status_indicator_receive_working": "正在初始化…",
"gui_status_indicator_receive_started": "正在接收",
- "gui_file_info": "",
- "gui_file_info_single": "",
- "history_in_progress_tooltip": "",
- "history_completed_tooltip": "",
+ "gui_file_info": "{} 个文件, {}",
+ "gui_file_info_single": "{} 个文件, {}",
+ "history_in_progress_tooltip": "{}在进行中",
+ "history_completed_tooltip": "{}已完成",
"info_in_progress_uploads_tooltip": "",
"info_completed_uploads_tooltip": "",
"error_cannot_create_downloads_dir": "",
"receive_mode_downloads_dir": "",
- "receive_mode_warning": "",
- "gui_receive_mode_warning": "",
- "receive_mode_upload_starting": "",
- "receive_mode_received_file": "",
- "gui_mode_share_button": "",
- "gui_mode_receive_button": "",
- "gui_settings_receiving_label": "",
+ "receive_mode_warning": "警告:接收模式下允许他人对您的设备上传文件.有一些文件可能有恶意代码并控制您的设备或者造成严重伤害,请只谨慎打开来自您信赖的人的文件,或者确保采取必要的安全措施.",
+ "gui_receive_mode_warning": "接收模式下允许他人对您的设备上传文件.<br><br><b>有一些文件可能有恶意代码并控制您的设备或者造成严重伤害,请只谨慎打开来自您信赖的人的文件,或者确保采取必要的安全措施.</b>",
+ "receive_mode_upload_starting": "上传文件的大小为{}正在开始",
+ "receive_mode_received_file": "接收到: {}",
+ "gui_mode_share_button": "分享文件",
+ "gui_mode_receive_button": "接收文件",
+ "gui_settings_receiving_label": "接收设置",
"gui_settings_downloads_label": "",
"gui_settings_downloads_button": "分享轨迹",
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
- "gui_settings_public_mode_checkbox": "",
+ "gui_settings_public_mode_checkbox": "公共模式",
"systray_close_server_title": "",
"systray_close_server_message": "",
- "systray_page_loaded_title": "",
+ "systray_page_loaded_title": "页面已加载",
"systray_download_page_loaded_message": "",
"systray_upload_page_loaded_message": "",
"gui_uploads": "",
@@ -179,7 +179,35 @@
"gui_upload_finished_range": "",
"gui_upload_finished": "",
"gui_download_in_progress": "",
- "gui_open_folder_error_nautilus": "",
+ "gui_open_folder_error_nautilus": "无法打开文件夹,原因:nautilus不可用.文件在这里: {}",
"gui_settings_language_label": "首选语言",
- "gui_settings_language_changed_notice": ""
+ "gui_settings_language_changed_notice": "请重启OnionShare以使您的语言改变设定生效.",
+ "gui_add_files": "添加文件",
+ "gui_add_folder": "添加文件夹",
+ "gui_connect_to_tor_for_onion_settings": "连接Tor来查看onion服务的设置",
+ "error_cannot_create_data_dir": "无法建立OnionShare文件夹: {}",
+ "receive_mode_data_dir": "您收到的文件会出现在这个文件夹: {}",
+ "gui_settings_data_dir_label": "将文件保存到",
+ "gui_settings_data_dir_browse_button": "浏览",
+ "systray_page_loaded_message": "OnionShare地址已加载",
+ "systray_share_started_title": "分享开始",
+ "systray_share_started_message": "开始向某人发送文件",
+ "systray_share_completed_title": "分享完成",
+ "systray_share_completed_message": "文件发送完成",
+ "systray_share_canceled_title": "分享已取消",
+ "systray_share_canceled_message": "某人取消了接收您的文件",
+ "systray_receive_started_title": "接收开始",
+ "systray_receive_started_message": "某人在向您发送文件",
+ "gui_all_modes_history": "历史",
+ "gui_all_modes_clear_history": "清除全部",
+ "gui_all_modes_transfer_started": "已开始{}",
+ "gui_all_modes_transfer_finished_range": "已传输 {} - {}",
+ "gui_all_modes_transfer_finished": "已传输完成 {}",
+ "gui_all_modes_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_timeout_waiting": "等待结束发送",
+ "gui_receive_mode_no_files": "还没有接收文件",
+ "gui_receive_mode_timeout_waiting": "等待接收完成"
}
diff --git a/share/version.txt b/share/version.txt
index 8be5e08a..c0099a45 100644
--- a/share/version.txt
+++ b/share/version.txt
@@ -1 +1 @@
-2.0.dev2
+2.0.dev3
diff --git a/tests/GuiBaseTest.py b/tests/GuiBaseTest.py
index c557fc15..e4b3d4c9 100644
--- a/tests/GuiBaseTest.py
+++ b/tests/GuiBaseTest.py
@@ -39,7 +39,7 @@ class GuiBaseTest(object):
strings.load_strings(common)
# Get all of the settings in test_settings
- test_settings['downloads_dir'] = '/tmp/OnionShare'
+ test_settings['data_dir'] = '/tmp/OnionShare'
for key, val in common.settings.default_settings.items():
if key not in test_settings:
test_settings[key] = val
@@ -70,17 +70,17 @@ class GuiBaseTest(object):
except:
pass
-
+
def gui_loaded(self):
'''Test that the GUI actually is shown'''
self.assertTrue(self.gui.show)
-
+
def windowTitle_seen(self):
'''Test that the window title is OnionShare'''
self.assertEqual(self.gui.windowTitle(), 'OnionShare')
-
+
def settings_button_is_visible(self):
'''Test that the settings button is visible'''
self.assertTrue(self.gui.settings_button.isVisible())
@@ -90,12 +90,12 @@ class GuiBaseTest(object):
'''Test that the settings button is hidden when the server starts'''
self.assertFalse(self.gui.settings_button.isVisible())
-
+
def server_status_bar_is_visible(self):
'''Test that the status bar is visible'''
self.assertTrue(self.gui.status_bar.isVisible())
-
+
def click_mode(self, mode):
'''Test that we can switch Mode by clicking the button'''
if type(mode) == ReceiveMode:
@@ -105,14 +105,14 @@ class GuiBaseTest(object):
QtTest.QTest.mouseClick(self.gui.share_mode_button, QtCore.Qt.LeftButton)
self.assertTrue(self.gui.mode, self.gui.MODE_SHARE)
-
+
def click_toggle_history(self, mode):
'''Test that we can toggle Download or Upload history by clicking the toggle button'''
currently_visible = mode.history.isVisible()
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
self.assertEqual(mode.history.isVisible(), not currently_visible)
-
+
def history_indicator(self, mode, public_mode):
'''Test that we can make sure the history is toggled off, do an action, and the indiciator works'''
# Make sure history is toggled off
@@ -150,43 +150,43 @@ class GuiBaseTest(object):
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
self.assertFalse(mode.toggle_history.indicator_label.isVisible())
-
+
def history_is_not_visible(self, mode):
'''Test that the History section is not visible'''
self.assertFalse(mode.history.isVisible())
-
+
def history_is_visible(self, mode):
'''Test that the History section is visible'''
self.assertTrue(mode.history.isVisible())
-
+
def server_working_on_start_button_pressed(self, mode):
'''Test we can start the service'''
# Should be in SERVER_WORKING state
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
self.assertEqual(mode.server_status.status, 1)
-
+
def server_status_indicator_says_starting(self, mode):
'''Test that the Server Status indicator shows we are Starting'''
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_working'))
-
+
def server_is_started(self, mode, startup_time=2000):
'''Test that the server has started'''
QtTest.QTest.qWait(startup_time)
# Should now be in SERVER_STARTED state
self.assertEqual(mode.server_status.status, 2)
-
+
def web_server_is_running(self):
'''Test that the web server has started'''
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.assertEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
-
+
def have_a_slug(self, mode, public_mode):
'''Test that we have a valid slug'''
if not public_mode:
@@ -194,12 +194,12 @@ class GuiBaseTest(object):
else:
self.assertIsNone(mode.server_status.web.slug, r'(\w+)-(\w+)')
-
+
def url_description_shown(self, mode):
'''Test that the URL label is showing'''
self.assertTrue(mode.server_status.url_description.isVisible())
-
+
def have_copy_url_button(self, mode, public_mode):
'''Test that the Copy URL button is shown and that the clipboard is correct'''
self.assertTrue(mode.server_status.copy_url_button.isVisible())
@@ -211,7 +211,7 @@ class GuiBaseTest(object):
else:
self.assertEqual(clipboard.text(), 'http://127.0.0.1:{}/{}'.format(self.gui.app.port, mode.server_status.web.slug))
-
+
def server_status_indicator_says_started(self, mode):
'''Test that the Server Status indicator shows we are started'''
if type(mode) == ReceiveMode:
@@ -219,7 +219,7 @@ class GuiBaseTest(object):
if type(mode) == ShareMode:
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_started'))
-
+
def web_page(self, mode, string, public_mode):
'''Test that the web page contains a string'''
s = socks.socksocket()
@@ -248,25 +248,25 @@ class GuiBaseTest(object):
self.assertTrue(string in f.read())
f.close()
-
+
def history_widgets_present(self, mode):
'''Test that the relevant widgets are present in the history view after activity has taken place'''
self.assertFalse(mode.history.empty.isVisible())
self.assertTrue(mode.history.not_empty.isVisible())
-
+
def counter_incremented(self, mode, count):
'''Test that the counter has incremented'''
self.assertEqual(mode.history.completed_count, count)
-
+
def server_is_stopped(self, mode, stay_open):
'''Test that the server stops when we click Stop'''
if type(mode) == ReceiveMode or (type(mode) == ShareMode and stay_open):
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
self.assertEqual(mode.server_status.status, 0)
-
+
def web_server_is_stopped(self):
'''Test that the web server also stopped'''
QtTest.QTest.qWait(2000)
@@ -275,7 +275,7 @@ class GuiBaseTest(object):
# We should be closed by now. Fail if not!
self.assertNotEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
-
+
def server_status_indicator_says_closed(self, mode, stay_open):
'''Test that the Server Status indicator shows we closed'''
if type(mode) == ReceiveMode:
@@ -319,5 +319,3 @@ class GuiBaseTest(object):
self.windowTitle_seen()
self.settings_button_is_visible()
self.server_status_bar_is_visible()
-
-
diff --git a/tests/GuiReceiveTest.py b/tests/GuiReceiveTest.py
index eaed8343..8a03283e 100644
--- a/tests/GuiReceiveTest.py
+++ b/tests/GuiReceiveTest.py
@@ -21,7 +21,7 @@ class GuiReceiveTest(GuiBaseTest):
for i in range(10):
date_dir = now.strftime("%Y-%m-%d")
time_dir = now.strftime("%H.%M.%S")
- receive_mode_dir = os.path.join(self.gui.common.settings.get('downloads_dir'), date_dir, time_dir)
+ receive_mode_dir = os.path.join(self.gui.common.settings.get('data_dir'), date_dir, time_dir)
expected_filename = os.path.join(receive_mode_dir, expected_basename)
if os.path.exists(expected_filename):
exists = True
@@ -52,6 +52,28 @@ class GuiReceiveTest(GuiBaseTest):
response = requests.get('http://127.0.0.1:{}/close'.format(self.gui.app.port))
self.assertEqual(response.status_code, 404)
+ def uploading_zero_files_shouldnt_change_ui(self, mode, public_mode):
+ '''If you submit the receive mode form without selecting any files, the UI shouldn't get updated'''
+ if not public_mode:
+ path = 'http://127.0.0.1:{}/{}/upload'.format(self.gui.app.port, self.gui.receive_mode.web.slug)
+ else:
+ path = 'http://127.0.0.1:{}/upload'.format(self.gui.app.port)
+
+ # What were the counts before submitting the form?
+ before_in_progress_count = mode.history.in_progress_count
+ before_completed_count = mode.history.completed_count
+ before_number_of_history_items = len(mode.history.item_list.items)
+
+ # Click submit without including any files a few times
+ response = requests.post(path, files={})
+ response = requests.post(path, files={})
+ response = requests.post(path, files={})
+
+ # The counts shouldn't change
+ self.assertEqual(mode.history.in_progress_count, before_in_progress_count)
+ self.assertEqual(mode.history.completed_count, before_completed_count)
+ self.assertEqual(len(mode.history.item_list.items), before_number_of_history_items)
+
def run_receive_mode_sender_closed_tests(self, public_mode):
'''Test that the share can be stopped by the sender in receive mode'''
if not public_mode:
@@ -97,6 +119,7 @@ class GuiReceiveTest(GuiBaseTest):
self.counter_incremented(self.gui.receive_mode, 3)
self.upload_file(public_mode, '/tmp/testdir/test', 'test')
self.counter_incremented(self.gui.receive_mode, 4)
+ self.uploading_zero_files_shouldnt_change_ui(self.gui.receive_mode, public_mode)
self.history_indicator(self.gui.receive_mode, public_mode)
self.server_is_stopped(self.gui.receive_mode, False)
self.web_server_is_stopped()
diff --git a/tests/SettingsGuiBaseTest.py b/tests/SettingsGuiBaseTest.py
index 47d698f3..71244e0f 100644
--- a/tests/SettingsGuiBaseTest.py
+++ b/tests/SettingsGuiBaseTest.py
@@ -148,7 +148,7 @@ class SettingsGuiBaseTest(object):
self.assertFalse(self.gui.close_after_first_download_checkbox.isChecked())
# receive mode
- self.gui.downloads_dir_lineedit.setText('/tmp/OnionShareSettingsTest')
+ self.gui.data_dir_lineedit.setText('/tmp/OnionShareSettingsTest')
# bundled mode is enabled
@@ -234,7 +234,7 @@ class SettingsGuiBaseTest(object):
self.assertFalse(data["save_private_key"])
self.assertFalse(data["use_stealth"])
- self.assertEqual(data["downloads_dir"], "/tmp/OnionShareSettingsTest")
+ self.assertEqual(data["data_dir"], "/tmp/OnionShareSettingsTest")
self.assertFalse(data["close_after_first_download"])
self.assertEqual(data["connection_type"], "bundled")
self.assertFalse(data["tor_bridges_use_obfs4"])
diff --git a/tests/TorGuiBaseTest.py b/tests/TorGuiBaseTest.py
index 9a0bda3e..e437ac93 100644
--- a/tests/TorGuiBaseTest.py
+++ b/tests/TorGuiBaseTest.py
@@ -39,7 +39,7 @@ class TorGuiBaseTest(GuiBaseTest):
# Get all of the settings in test_settings
test_settings['connection_type'] = 'automatic'
- test_settings['downloads_dir'] = '/tmp/OnionShare'
+ test_settings['data_dir'] = '/tmp/OnionShare'
for key, val in common.settings.default_settings.items():
if key not in test_settings:
test_settings[key] = val
diff --git a/tests/test_onionshare_settings.py b/tests/test_onionshare_settings.py
index d67621c4..f4be2930 100644
--- a/tests/test_onionshare_settings.py
+++ b/tests/test_onionshare_settings.py
@@ -64,7 +64,7 @@ class TestSettings:
'private_key': '',
'slug': '',
'hidservauth_string': '',
- 'downloads_dir': os.path.expanduser('~/OnionShare'),
+ 'data_dir': os.path.expanduser('~/OnionShare'),
'public_mode': False
}
for key in settings_obj._settings: