Merge branch 'develop' into 812_v3_tor_version
99
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.)
|
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.
|
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):
|
Now install some python dependencies with pip (note, there's issues building a .app if you install this in a virtualenv):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
pip3 install -r install/requirements.txt
|
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
|
```sh
|
||||||
./dev_scripts/onionshare
|
./dev_scripts/onionshare
|
||||||
./dev_scripts/onionshare-gui
|
./dev_scripts/onionshare-gui
|
||||||
```
|
```
|
||||||
|
|
||||||
To build the app bundle:
|
#### To build the app bundle
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
install/build_osx.sh
|
install/build_osx.sh
|
||||||
|
@ -73,7 +74,7 @@ install/build_osx.sh
|
||||||
|
|
||||||
Now you should have `dist/OnionShare.app`.
|
Now you should have `dist/OnionShare.app`.
|
||||||
|
|
||||||
To codesign and build a pkg for distribution:
|
#### To codesign and build a pkg for distribution
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
install/build_osx.sh --release
|
install/build_osx.sh --release
|
||||||
|
@ -85,7 +86,7 @@ Now you should have `dist/OnionShare.pkg`.
|
||||||
|
|
||||||
### Setting up your dev environment
|
### 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:
|
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
|
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:
|
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
|
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.
|
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:
|
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\bin\10.0.17763.0\x86`
|
||||||
* `C:\Program Files (x86)\Windows Kits\10\Redist\ucrt\DLLs\x86`
|
* `C:\Program Files (x86)\Windows Kits\10\Redist\10.0.17763.0\ucrt\DLLs\x86`
|
||||||
* `C:\Users\user\AppData\Local\Programs\Python\Python36-32\Lib\site-packages\PyQt5\Qt\bin`
|
* `C:\Users\user\AppData\Local\Programs\Python\Python37-32\Lib\site-packages\PyQt5\Qt\bin`
|
||||||
* `C:\Program Files (x86)\7-Zip`
|
* `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.
|
* 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).
|
* 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.
|
* Once you get a code signing key and certificate and covert it to a pfx file, import it into your certificate store.
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
!define INSTALLSIZE 115186
|
!define INSTALLSIZE 115186
|
||||||
!define VERSIONMAJOR 2
|
!define VERSIONMAJOR 2
|
||||||
!define VERSIONMINOR 0
|
!define VERSIONMINOR 0
|
||||||
!define VERSIONSTRING "2.0"
|
!define VERSIONSTRING "2.0.dev3"
|
||||||
|
|
||||||
RequestExecutionLevel admin
|
RequestExecutionLevel admin
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ MarkupSafe==1.1.0
|
||||||
pefile==2018.8.8
|
pefile==2018.8.8
|
||||||
pycparser==2.19
|
pycparser==2.19
|
||||||
pycryptodome==3.7.2
|
pycryptodome==3.7.2
|
||||||
PyInstaller==3.4
|
|
||||||
PyQt5==5.11.3
|
PyQt5==5.11.3
|
||||||
PyQt5-sip==4.19.13
|
PyQt5-sip==4.19.13
|
||||||
PySocks==1.6.8
|
PySocks==1.6.8
|
||||||
|
|
|
@ -175,7 +175,7 @@ def main(cwd=None):
|
||||||
|
|
||||||
print('')
|
print('')
|
||||||
if mode == 'receive':
|
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('')
|
||||||
print(strings._('receive_mode_warning'))
|
print(strings._('receive_mode_warning'))
|
||||||
print('')
|
print('')
|
||||||
|
|
|
@ -100,7 +100,7 @@ class Settings(object):
|
||||||
'public_mode': False,
|
'public_mode': False,
|
||||||
'slug': '',
|
'slug': '',
|
||||||
'hidservauth_string': '',
|
'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()
|
'locale': None # this gets defined in fill_in_defaults()
|
||||||
}
|
}
|
||||||
self._settings = {}
|
self._settings = {}
|
||||||
|
@ -140,7 +140,7 @@ class Settings(object):
|
||||||
"""
|
"""
|
||||||
return os.path.join(self.common.build_data_dir(), 'onionshare.json')
|
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.
|
Returns the path of the default Downloads directory for receive mode.
|
||||||
"""
|
"""
|
||||||
|
@ -174,9 +174,9 @@ class Settings(object):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Make sure downloads_dir exists
|
# Make sure data_dir exists
|
||||||
try:
|
try:
|
||||||
os.makedirs(self.get('downloads_dir'), exist_ok=True)
|
os.makedirs(self.get('data_dir'), exist_ok=True)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -60,19 +60,19 @@ class ReceiveModeWeb(object):
|
||||||
"""
|
"""
|
||||||
Upload files.
|
Upload files.
|
||||||
"""
|
"""
|
||||||
# Make sure the receive mode dir exists
|
# Figure out what the receive mode dir should be
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
date_dir = now.strftime("%Y-%m-%d")
|
date_dir = now.strftime("%Y-%m-%d")
|
||||||
time_dir = now.strftime("%H.%M.%S")
|
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
|
valid = True
|
||||||
try:
|
try:
|
||||||
os.makedirs(receive_mode_dir, 0o700)
|
os.makedirs(receive_mode_dir, 0o700, exist_ok=True)
|
||||||
except PermissionError:
|
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
|
"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
|
valid = False
|
||||||
if not valid:
|
if not valid:
|
||||||
flash('Error uploading, please inform the OnionShare user', 'error')
|
flash('Error uploading, please inform the OnionShare user', 'error')
|
||||||
|
@ -134,6 +134,23 @@ class ReceiveModeWeb(object):
|
||||||
'dir': receive_mode_dir
|
'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))
|
self.common.log('ReceiveModeWeb', 'define_routes', '/upload, uploaded {}, saving to {}'.format(f.filename, local_path))
|
||||||
print(strings._('receive_mode_received_file').format(local_path))
|
print(strings._('receive_mode_received_file').format(local_path))
|
||||||
f.save(local_path)
|
f.save(local_path)
|
||||||
|
@ -193,6 +210,7 @@ class ReceiveModeWSGIMiddleware(object):
|
||||||
|
|
||||||
def __call__(self, environ, start_response):
|
def __call__(self, environ, start_response):
|
||||||
environ['web'] = self.web
|
environ['web'] = self.web
|
||||||
|
environ['stop_q'] = self.web.stop_q
|
||||||
return self.app(environ, start_response)
|
return self.app(environ, start_response)
|
||||||
|
|
||||||
|
|
||||||
|
@ -201,7 +219,8 @@ class ReceiveModeTemporaryFile(object):
|
||||||
A custom TemporaryFile that tells ReceiveModeRequest every time data gets
|
A custom TemporaryFile that tells ReceiveModeRequest every time data gets
|
||||||
written to it, in order to track the progress of uploads.
|
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_filename = filename
|
||||||
self.onionshare_write_func = write_func
|
self.onionshare_write_func = write_func
|
||||||
self.onionshare_close_func = close_func
|
self.onionshare_close_func = close_func
|
||||||
|
@ -222,6 +241,11 @@ class ReceiveModeTemporaryFile(object):
|
||||||
"""
|
"""
|
||||||
Custom write method that calls out to onionshare_write_func
|
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)
|
bytes_written = self.f.write(b)
|
||||||
self.onionshare_write_func(self.onionshare_filename, bytes_written)
|
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):
|
def __init__(self, environ, populate_request=True, shallow=False):
|
||||||
super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow)
|
super(ReceiveModeRequest, self).__init__(environ, populate_request, shallow)
|
||||||
self.web = environ['web']
|
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?
|
# Is this a valid upload request?
|
||||||
self.upload_request = False
|
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))
|
strings._("receive_mode_upload_starting").format(self.web.common.human_readable_filesize(self.content_length))
|
||||||
))
|
))
|
||||||
|
|
||||||
# Tell the GUI
|
# Don't tell the GUI that a request has started until we start receiving files
|
||||||
self.web.add_request(self.web.REQUEST_STARTED, self.path, {
|
self.told_gui_about_request = False
|
||||||
'id': self.upload_id,
|
|
||||||
'content_length': self.content_length
|
|
||||||
})
|
|
||||||
|
|
||||||
self.web.receive_mode.uploads_in_progress.append(self.upload_id)
|
|
||||||
|
|
||||||
self.previous_file = None
|
self.previous_file = None
|
||||||
|
|
||||||
|
@ -291,25 +316,52 @@ class ReceiveModeRequest(Request):
|
||||||
writable stream.
|
writable stream.
|
||||||
"""
|
"""
|
||||||
if self.upload_request:
|
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] = {
|
self.progress[filename] = {
|
||||||
'uploaded_bytes': 0,
|
'uploaded_bytes': 0,
|
||||||
'complete': False
|
'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):
|
def close(self):
|
||||||
"""
|
"""
|
||||||
Closing the request.
|
Closing the request.
|
||||||
"""
|
"""
|
||||||
super(ReceiveModeRequest, self).close()
|
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:
|
try:
|
||||||
upload_id = self.upload_id
|
if self.told_gui_about_request:
|
||||||
# Inform the GUI that the upload has finished
|
upload_id = self.upload_id
|
||||||
self.web.add_request(self.web.REQUEST_UPLOAD_FINISHED, self.path, {
|
|
||||||
'id': upload_id
|
if not self.web.stop_q.empty():
|
||||||
})
|
# Inform the GUI that the upload has canceled
|
||||||
self.web.receive_mode.uploads_in_progress.remove(upload_id)
|
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:
|
except AttributeError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -317,6 +369,9 @@ class ReceiveModeRequest(Request):
|
||||||
"""
|
"""
|
||||||
This function gets called when a specific file is written to.
|
This function gets called when a specific file is written to.
|
||||||
"""
|
"""
|
||||||
|
if self.closed:
|
||||||
|
return
|
||||||
|
|
||||||
if self.upload_request:
|
if self.upload_request:
|
||||||
self.progress[filename]['uploaded_bytes'] += length
|
self.progress[filename]['uploaded_bytes'] += length
|
||||||
|
|
||||||
|
@ -331,10 +386,11 @@ class ReceiveModeRequest(Request):
|
||||||
), end='')
|
), end='')
|
||||||
|
|
||||||
# Update the GUI on the upload progress
|
# Update the GUI on the upload progress
|
||||||
self.web.add_request(self.web.REQUEST_PROGRESS, self.path, {
|
if self.told_gui_about_request:
|
||||||
'id': self.upload_id,
|
self.web.add_request(self.web.REQUEST_PROGRESS, self.path, {
|
||||||
'progress': self.progress
|
'id': self.upload_id,
|
||||||
})
|
'progress': self.progress
|
||||||
|
})
|
||||||
|
|
||||||
def file_close_func(self, filename):
|
def file_close_func(self, filename):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -34,11 +34,6 @@ class ShareModeWeb(object):
|
||||||
# one download at a time.
|
# one download at a time.
|
||||||
self.download_in_progress = False
|
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()
|
self.define_routes()
|
||||||
|
|
||||||
def define_routes(self):
|
def define_routes(self):
|
||||||
|
@ -146,9 +141,6 @@ class ShareModeWeb(object):
|
||||||
basename = os.path.basename(self.download_filename)
|
basename = os.path.basename(self.download_filename)
|
||||||
|
|
||||||
def generate():
|
def generate():
|
||||||
# The user hasn't canceled the download
|
|
||||||
self.client_cancel = False
|
|
||||||
|
|
||||||
# Starting a new download
|
# Starting a new download
|
||||||
if not self.web.stay_open:
|
if not self.web.stay_open:
|
||||||
self.download_in_progress = True
|
self.download_in_progress = True
|
||||||
|
@ -160,7 +152,7 @@ class ShareModeWeb(object):
|
||||||
canceled = False
|
canceled = False
|
||||||
while not self.web.done:
|
while not self.web.done:
|
||||||
# The user has canceled the download, so stop serving the file
|
# 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, {
|
self.web.add_request(self.web.REQUEST_CANCELED, path, {
|
||||||
'id': download_id
|
'id': download_id
|
||||||
})
|
})
|
||||||
|
|
|
@ -35,11 +35,11 @@ class Web(object):
|
||||||
REQUEST_OTHER = 3
|
REQUEST_OTHER = 3
|
||||||
REQUEST_CANCELED = 4
|
REQUEST_CANCELED = 4
|
||||||
REQUEST_RATE_LIMIT = 5
|
REQUEST_RATE_LIMIT = 5
|
||||||
REQUEST_CLOSE_SERVER = 6
|
REQUEST_UPLOAD_FILE_RENAMED = 6
|
||||||
REQUEST_UPLOAD_FILE_RENAMED = 7
|
REQUEST_UPLOAD_SET_DIR = 7
|
||||||
REQUEST_UPLOAD_SET_DIR = 8
|
REQUEST_UPLOAD_FINISHED = 8
|
||||||
REQUEST_UPLOAD_FINISHED = 9
|
REQUEST_UPLOAD_CANCELED = 9
|
||||||
REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE = 10
|
REQUEST_ERROR_DATA_DIR_CANNOT_CREATE = 10
|
||||||
|
|
||||||
def __init__(self, common, is_gui, mode='share'):
|
def __init__(self, common, is_gui, mode='share'):
|
||||||
self.common = common
|
self.common = common
|
||||||
|
@ -58,6 +58,11 @@ class Web(object):
|
||||||
# Are we running in GUI mode?
|
# Are we running in GUI mode?
|
||||||
self.is_gui = is_gui
|
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?
|
# Are we using receive mode?
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
if self.mode == 'receive':
|
if self.mode == 'receive':
|
||||||
|
@ -225,6 +230,13 @@ class Web(object):
|
||||||
|
|
||||||
self.stay_open = stay_open
|
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)
|
# 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'):
|
if os.path.exists('/usr/share/anon-ws-base-files/workstation'):
|
||||||
host = '0.0.0.0'
|
host = '0.0.0.0'
|
||||||
|
@ -238,11 +250,10 @@ class Web(object):
|
||||||
"""
|
"""
|
||||||
Stop the flask web server by loading /shutdown.
|
Stop the flask web server by loading /shutdown.
|
||||||
"""
|
"""
|
||||||
|
self.common.log('Web', 'stop', 'stopping server')
|
||||||
|
|
||||||
if self.mode == 'share':
|
# Let the mode know that the user stopped the server
|
||||||
# If the user cancels the download, let the download function know to stop
|
self.stop_q.put(True)
|
||||||
# serving the file
|
|
||||||
self.share_mode.client_cancel = True
|
|
||||||
|
|
||||||
# To stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
|
# To stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
|
||||||
if self.running:
|
if self.running:
|
||||||
|
|
|
@ -312,12 +312,6 @@ class Mode(QtWidgets.QWidget):
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def handle_request_close_server(self, event):
|
|
||||||
"""
|
|
||||||
Handle REQUEST_CLOSE_SERVER event.
|
|
||||||
"""
|
|
||||||
pass
|
|
||||||
|
|
||||||
def handle_request_upload_file_renamed(self, event):
|
def handle_request_upload_file_renamed(self, event):
|
||||||
"""
|
"""
|
||||||
Handle REQUEST_UPLOAD_FILE_RENAMED event.
|
Handle REQUEST_UPLOAD_FILE_RENAMED event.
|
||||||
|
@ -335,3 +329,9 @@ class Mode(QtWidgets.QWidget):
|
||||||
Handle REQUEST_UPLOAD_FINISHED event.
|
Handle REQUEST_UPLOAD_FINISHED event.
|
||||||
"""
|
"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def handle_request_upload_canceled(self, event):
|
||||||
|
"""
|
||||||
|
Handle REQUEST_UPLOAD_CANCELED event.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
|
@ -40,13 +40,49 @@ class HistoryItem(QtWidgets.QWidget):
|
||||||
def cancel(self):
|
def cancel(self):
|
||||||
pass
|
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)
|
||||||
|
|
||||||
class DownloadHistoryItem(HistoryItem):
|
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 ShareHistoryItem(HistoryItem):
|
||||||
"""
|
"""
|
||||||
Download history item, for share mode
|
Download history item, for share mode
|
||||||
"""
|
"""
|
||||||
def __init__(self, common, id, total_bytes):
|
def __init__(self, common, id, total_bytes):
|
||||||
super(DownloadHistoryItem, self).__init__()
|
super(ShareHistoryItem, self).__init__()
|
||||||
self.common = common
|
self.common = common
|
||||||
|
|
||||||
self.id = id
|
self.id = id
|
||||||
|
@ -56,7 +92,7 @@ class DownloadHistoryItem(HistoryItem):
|
||||||
self.started_dt = datetime.fromtimestamp(self.started)
|
self.started_dt = datetime.fromtimestamp(self.started)
|
||||||
|
|
||||||
# Label
|
# 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
|
# Progress bar
|
||||||
self.progress_bar = QtWidgets.QProgressBar()
|
self.progress_bar = QtWidgets.QProgressBar()
|
||||||
|
@ -83,18 +119,22 @@ class DownloadHistoryItem(HistoryItem):
|
||||||
|
|
||||||
self.progress_bar.setValue(downloaded_bytes)
|
self.progress_bar.setValue(downloaded_bytes)
|
||||||
if downloaded_bytes == self.progress_bar.total_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))
|
self.common.format_seconds(time.time() - self.started))
|
||||||
|
|
||||||
|
# Change the label
|
||||||
|
self.label.setText(self.get_finished_label_text(self.started_dt))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
elapsed = time.time() - self.started
|
elapsed = time.time() - self.started
|
||||||
if elapsed < 10:
|
if elapsed < 10:
|
||||||
# Wait a couple of seconds for the download rate to stabilize.
|
# Wait a couple of seconds for the download rate to stabilize.
|
||||||
# This prevents a "Windows copy dialog"-esque experience at
|
# This prevents a "Windows copy dialog"-esque experience at
|
||||||
# the beginning of the download.
|
# 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))
|
self.common.human_readable_filesize(downloaded_bytes))
|
||||||
else:
|
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.common.human_readable_filesize(downloaded_bytes),
|
||||||
self.estimated_time_remaining)
|
self.estimated_time_remaining)
|
||||||
|
|
||||||
|
@ -110,12 +150,12 @@ class DownloadHistoryItem(HistoryItem):
|
||||||
self.started)
|
self.started)
|
||||||
|
|
||||||
|
|
||||||
class UploadHistoryItemFile(QtWidgets.QWidget):
|
class ReceiveHistoryItemFile(QtWidgets.QWidget):
|
||||||
def __init__(self, common, filename):
|
def __init__(self, common, filename):
|
||||||
super(UploadHistoryItemFile, self).__init__()
|
super(ReceiveHistoryItemFile, self).__init__()
|
||||||
self.common = common
|
self.common = common
|
||||||
|
|
||||||
self.common.log('UploadHistoryItemFile', '__init__', 'filename: {}'.format(filename))
|
self.common.log('ReceiveHistoryItemFile', '__init__', 'filename: {}'.format(filename))
|
||||||
|
|
||||||
self.filename = filename
|
self.filename = filename
|
||||||
self.dir = None
|
self.dir = None
|
||||||
|
@ -166,10 +206,10 @@ class UploadHistoryItemFile(QtWidgets.QWidget):
|
||||||
"""
|
"""
|
||||||
Open the downloads folder, with the file selected, in a cross-platform manner
|
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:
|
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
|
return
|
||||||
|
|
||||||
abs_filename = os.path.join(self.dir, self.filename)
|
abs_filename = os.path.join(self.dir, self.filename)
|
||||||
|
@ -184,22 +224,22 @@ class UploadHistoryItemFile(QtWidgets.QWidget):
|
||||||
|
|
||||||
# macOS
|
# macOS
|
||||||
elif self.common.platform == 'Darwin':
|
elif self.common.platform == 'Darwin':
|
||||||
subprocess.call(['open', '-R', abs_filename])
|
subprocess.call(['open', '-R', abs_filename])
|
||||||
|
|
||||||
# Windows
|
# Windows
|
||||||
elif self.common.platform == 'Windows':
|
elif self.common.platform == 'Windows':
|
||||||
subprocess.Popen(['explorer', '/select,{}'.format(abs_filename)])
|
subprocess.Popen(['explorer', '/select,{}'.format(abs_filename)])
|
||||||
|
|
||||||
class UploadHistoryItem(HistoryItem):
|
class ReceiveHistoryItem(HistoryItem):
|
||||||
def __init__(self, common, id, content_length):
|
def __init__(self, common, id, content_length):
|
||||||
super(UploadHistoryItem, self).__init__()
|
super(ReceiveHistoryItem, self).__init__()
|
||||||
self.common = common
|
self.common = common
|
||||||
self.id = id
|
self.id = id
|
||||||
self.content_length = content_length
|
self.content_length = content_length
|
||||||
self.started = datetime.now()
|
self.started = datetime.now()
|
||||||
|
|
||||||
# Label
|
# 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
|
# Progress bar
|
||||||
self.progress_bar = QtWidgets.QProgressBar()
|
self.progress_bar = QtWidgets.QProgressBar()
|
||||||
|
@ -244,14 +284,14 @@ class UploadHistoryItem(HistoryItem):
|
||||||
|
|
||||||
elapsed = datetime.now() - self.started
|
elapsed = datetime.now() - self.started
|
||||||
if elapsed.seconds < 10:
|
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))
|
self.common.human_readable_filesize(total_uploaded_bytes))
|
||||||
else:
|
else:
|
||||||
estimated_time_remaining = self.common.estimated_time_remaining(
|
estimated_time_remaining = self.common.estimated_time_remaining(
|
||||||
total_uploaded_bytes,
|
total_uploaded_bytes,
|
||||||
self.content_length,
|
self.content_length,
|
||||||
self.started.timestamp())
|
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),
|
self.common.human_readable_filesize(total_uploaded_bytes),
|
||||||
estimated_time_remaining)
|
estimated_time_remaining)
|
||||||
|
|
||||||
|
@ -259,7 +299,7 @@ class UploadHistoryItem(HistoryItem):
|
||||||
for filename in list(data['progress']):
|
for filename in list(data['progress']):
|
||||||
# Add a new file if needed
|
# Add a new file if needed
|
||||||
if filename not in self.files:
|
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])
|
self.files_layout.addWidget(self.files[filename])
|
||||||
|
|
||||||
# Update the file
|
# Update the file
|
||||||
|
@ -277,23 +317,14 @@ class UploadHistoryItem(HistoryItem):
|
||||||
self.progress_bar.hide()
|
self.progress_bar.hide()
|
||||||
|
|
||||||
# Change the label
|
# Change the label
|
||||||
self.ended = self.started = datetime.now()
|
self.label.setText(self.get_finished_label_text(self.started))
|
||||||
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:
|
elif data['action'] == 'canceled':
|
||||||
text = strings._('gui_upload_finished').format(
|
# Hide the progress bar
|
||||||
self.started.strftime("%b %d, %I:%M%p")
|
self.progress_bar.hide()
|
||||||
)
|
|
||||||
else:
|
# Change the label
|
||||||
text = strings._('gui_upload_finished_range').format(
|
self.label.setText(self.get_canceled_label_text(self.started))
|
||||||
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)
|
|
||||||
|
|
||||||
|
|
||||||
class HistoryItemList(QtWidgets.QScrollArea):
|
class HistoryItemList(QtWidgets.QScrollArea):
|
||||||
|
@ -344,13 +375,15 @@ class HistoryItemList(QtWidgets.QScrollArea):
|
||||||
"""
|
"""
|
||||||
Update an item. Override this method.
|
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):
|
def cancel(self, id):
|
||||||
"""
|
"""
|
||||||
Cancel an item. Override this method.
|
Cancel an item. Override this method.
|
||||||
"""
|
"""
|
||||||
self.items[id].cancel()
|
if id in self.items:
|
||||||
|
self.items[id].cancel()
|
||||||
|
|
||||||
def reset(self):
|
def reset(self):
|
||||||
"""
|
"""
|
||||||
|
@ -386,7 +419,7 @@ class History(QtWidgets.QWidget):
|
||||||
# Header
|
# Header
|
||||||
self.header_label = QtWidgets.QLabel(header_text)
|
self.header_label = QtWidgets.QLabel(header_text)
|
||||||
self.header_label.setStyleSheet(self.common.css['downloads_uploads_label'])
|
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.setStyleSheet(self.common.css['downloads_uploads_clear'])
|
||||||
clear_button.setFlat(True)
|
clear_button.setFlat(True)
|
||||||
clear_button.clicked.connect(self.reset)
|
clear_button.clicked.connect(self.reset)
|
||||||
|
|
|
@ -22,7 +22,7 @@ from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
from onionshare import strings
|
from onionshare import strings
|
||||||
from onionshare.web import Web
|
from onionshare.web import Web
|
||||||
|
|
||||||
from ..history import History, ToggleHistory, UploadHistoryItem
|
from ..history import History, ToggleHistory, ReceiveHistoryItem
|
||||||
from .. import Mode
|
from .. import Mode
|
||||||
|
|
||||||
class ReceiveMode(Mode):
|
class ReceiveMode(Mode):
|
||||||
|
@ -49,17 +49,17 @@ class ReceiveMode(Mode):
|
||||||
# Upload history
|
# Upload history
|
||||||
self.history = History(
|
self.history = History(
|
||||||
self.common,
|
self.common,
|
||||||
QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/uploads_transparent.png'))),
|
QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/receive_icon_transparent.png'))),
|
||||||
strings._('gui_no_uploads'),
|
strings._('gui_receive_mode_no_files'),
|
||||||
strings._('gui_uploads')
|
strings._('gui_all_modes_history')
|
||||||
)
|
)
|
||||||
self.history.hide()
|
self.history.hide()
|
||||||
|
|
||||||
# Toggle history
|
# Toggle history
|
||||||
self.toggle_history = ToggleHistory(
|
self.toggle_history = ToggleHistory(
|
||||||
self.common, self, self.history,
|
self.common, self, self.history,
|
||||||
QtGui.QIcon(self.common.get_resource_path('images/uploads_toggle.png')),
|
QtGui.QIcon(self.common.get_resource_path('images/receive_icon_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_selected.png'))
|
||||||
)
|
)
|
||||||
|
|
||||||
# Receive mode warning
|
# Receive mode warning
|
||||||
|
@ -83,7 +83,7 @@ class ReceiveMode(Mode):
|
||||||
# Wrapper layout
|
# Wrapper layout
|
||||||
self.wrapper_layout = QtWidgets.QHBoxLayout()
|
self.wrapper_layout = QtWidgets.QHBoxLayout()
|
||||||
self.wrapper_layout.addLayout(self.main_layout)
|
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)
|
self.setLayout(self.wrapper_layout)
|
||||||
|
|
||||||
def get_stop_server_shutdown_timeout_text(self):
|
def get_stop_server_shutdown_timeout_text(self):
|
||||||
|
@ -103,7 +103,7 @@ class ReceiveMode(Mode):
|
||||||
return True
|
return True
|
||||||
# An upload is probably still running - hold off on stopping the share, but block new shares.
|
# An upload is probably still running - hold off on stopping the share, but block new shares.
|
||||||
else:
|
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
|
self.web.receive_mode.can_upload = False
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@ -136,19 +136,19 @@ class ReceiveMode(Mode):
|
||||||
"""
|
"""
|
||||||
Handle REQUEST_LOAD event.
|
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):
|
def handle_request_started(self, event):
|
||||||
"""
|
"""
|
||||||
Handle REQUEST_STARTED 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.history.add(event["data"]["id"], item)
|
||||||
self.toggle_history.update_indicator(True)
|
self.toggle_history.update_indicator(True)
|
||||||
self.history.in_progress_count += 1
|
self.history.in_progress_count += 1
|
||||||
self.history.update_in_progress()
|
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):
|
def handle_request_progress(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -159,13 +159,6 @@ class ReceiveMode(Mode):
|
||||||
'progress': event["data"]["progress"]
|
'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):
|
def handle_request_upload_file_renamed(self, event):
|
||||||
"""
|
"""
|
||||||
Handle REQUEST_UPLOAD_FILE_RENAMED event.
|
Handle REQUEST_UPLOAD_FILE_RENAMED event.
|
||||||
|
@ -198,6 +191,18 @@ class ReceiveMode(Mode):
|
||||||
self.history.update_completed()
|
self.history.update_completed()
|
||||||
self.history.update_in_progress()
|
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):
|
def on_reload_settings(self):
|
||||||
"""
|
"""
|
||||||
We should be ok to re-enable the 'Start Receive Mode' button now.
|
We should be ok to re-enable the 'Start Receive Mode' button now.
|
||||||
|
|
|
@ -28,7 +28,7 @@ from onionshare.web import Web
|
||||||
from .file_selection import FileSelection
|
from .file_selection import FileSelection
|
||||||
from .threads import CompressThread
|
from .threads import CompressThread
|
||||||
from .. import Mode
|
from .. import Mode
|
||||||
from ..history import History, ToggleHistory, DownloadHistoryItem
|
from ..history import History, ToggleHistory, ShareHistoryItem
|
||||||
from ...widgets import Alert
|
from ...widgets import Alert
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,9 +74,9 @@ class ShareMode(Mode):
|
||||||
# Download history
|
# Download history
|
||||||
self.history = History(
|
self.history = History(
|
||||||
self.common,
|
self.common,
|
||||||
QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/downloads_transparent.png'))),
|
QtGui.QPixmap.fromImage(QtGui.QImage(self.common.get_resource_path('images/share_icon_transparent.png'))),
|
||||||
strings._('gui_no_downloads'),
|
strings._('gui_share_mode_no_files'),
|
||||||
strings._('gui_downloads')
|
strings._('gui_all_modes_history')
|
||||||
)
|
)
|
||||||
self.history.hide()
|
self.history.hide()
|
||||||
|
|
||||||
|
@ -87,8 +87,8 @@ class ShareMode(Mode):
|
||||||
# Toggle history
|
# Toggle history
|
||||||
self.toggle_history = ToggleHistory(
|
self.toggle_history = ToggleHistory(
|
||||||
self.common, self, self.history,
|
self.common, self, self.history,
|
||||||
QtGui.QIcon(self.common.get_resource_path('images/downloads_toggle.png')),
|
QtGui.QIcon(self.common.get_resource_path('images/share_icon_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_selected.png'))
|
||||||
)
|
)
|
||||||
|
|
||||||
# Top bar
|
# Top bar
|
||||||
|
@ -115,7 +115,7 @@ class ShareMode(Mode):
|
||||||
# Wrapper layout
|
# Wrapper layout
|
||||||
self.wrapper_layout = QtWidgets.QHBoxLayout()
|
self.wrapper_layout = QtWidgets.QHBoxLayout()
|
||||||
self.wrapper_layout.addLayout(self.main_layout)
|
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)
|
self.setLayout(self.wrapper_layout)
|
||||||
|
|
||||||
# Always start with focus on file selection
|
# Always start with focus on file selection
|
||||||
|
@ -138,7 +138,7 @@ class ShareMode(Mode):
|
||||||
return True
|
return True
|
||||||
# A download is probably still running - hold off on stopping the share
|
# A download is probably still running - hold off on stopping the share
|
||||||
else:
|
else:
|
||||||
self.server_status_label.setText(strings._('timeout_download_still_running'))
|
self.server_status_label.setText(strings._('gui_share_mode_timeout_waiting'))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def start_server_custom(self):
|
def start_server_custom(self):
|
||||||
|
@ -229,7 +229,7 @@ class ShareMode(Mode):
|
||||||
"""
|
"""
|
||||||
Handle REQUEST_LOAD event.
|
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):
|
def handle_request_started(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -240,13 +240,13 @@ class ShareMode(Mode):
|
||||||
else:
|
else:
|
||||||
filesize = self.web.share_mode.download_filesize
|
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.history.add(event["data"]["id"], item)
|
||||||
self.toggle_history.update_indicator(True)
|
self.toggle_history.update_indicator(True)
|
||||||
self.history.in_progress_count += 1
|
self.history.in_progress_count += 1
|
||||||
self.history.update_in_progress()
|
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):
|
def handle_request_progress(self, event):
|
||||||
"""
|
"""
|
||||||
|
@ -256,7 +256,7 @@ class ShareMode(Mode):
|
||||||
|
|
||||||
# Is the download complete?
|
# Is the download complete?
|
||||||
if event["data"]["bytes"] == self.web.share_mode.filesize:
|
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
|
# Update completed and in progress labels
|
||||||
self.history.completed_count += 1
|
self.history.completed_count += 1
|
||||||
|
@ -284,7 +284,7 @@ class ShareMode(Mode):
|
||||||
# Update in progress count
|
# Update in progress count
|
||||||
self.history.in_progress_count -= 1
|
self.history.in_progress_count -= 1
|
||||||
self.history.update_in_progress()
|
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):
|
def on_reload_settings(self):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -384,9 +384,6 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
||||||
elif event["type"] == Web.REQUEST_CANCELED:
|
elif event["type"] == Web.REQUEST_CANCELED:
|
||||||
mode.handle_request_canceled(event)
|
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:
|
elif event["type"] == Web.REQUEST_UPLOAD_FILE_RENAMED:
|
||||||
mode.handle_request_upload_file_renamed(event)
|
mode.handle_request_upload_file_renamed(event)
|
||||||
|
|
||||||
|
@ -396,8 +393,11 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
||||||
elif event["type"] == Web.REQUEST_UPLOAD_FINISHED:
|
elif event["type"] == Web.REQUEST_UPLOAD_FINISHED:
|
||||||
mode.handle_request_upload_finished(event)
|
mode.handle_request_upload_finished(event)
|
||||||
|
|
||||||
if event["type"] == Web.REQUEST_ERROR_DOWNLOADS_DIR_CANNOT_CREATE:
|
elif event["type"] == Web.REQUEST_UPLOAD_CANCELED:
|
||||||
Alert(self.common, strings._('error_cannot_create_downloads_dir').format(event["data"]["receive_mode_dir"]))
|
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["type"] == Web.REQUEST_OTHER:
|
||||||
if event["path"] != '/favicon.ico' and event["path"] != "/{}/shutdown".format(mode.web.shutdown_slug):
|
if event["path"] != '/favicon.ico' and event["path"] != "/{}/shutdown".format(mode.web.shutdown_slug):
|
||||||
|
|
|
@ -187,20 +187,20 @@ class SettingsDialog(QtWidgets.QDialog):
|
||||||
sharing_group = QtWidgets.QGroupBox(strings._("gui_settings_sharing_label"))
|
sharing_group = QtWidgets.QGroupBox(strings._("gui_settings_sharing_label"))
|
||||||
sharing_group.setLayout(sharing_group_layout)
|
sharing_group.setLayout(sharing_group_layout)
|
||||||
|
|
||||||
# Downloads dir
|
# OnionShare data dir
|
||||||
downloads_label = QtWidgets.QLabel(strings._('gui_settings_downloads_label'));
|
data_dir_label = QtWidgets.QLabel(strings._('gui_settings_data_dir_label'));
|
||||||
self.downloads_dir_lineedit = QtWidgets.QLineEdit()
|
self.data_dir_lineedit = QtWidgets.QLineEdit()
|
||||||
self.downloads_dir_lineedit.setReadOnly(True)
|
self.data_dir_lineedit.setReadOnly(True)
|
||||||
downloads_button = QtWidgets.QPushButton(strings._('gui_settings_downloads_button'))
|
data_dir_button = QtWidgets.QPushButton(strings._('gui_settings_data_dir_browse_button'))
|
||||||
downloads_button.clicked.connect(self.downloads_button_clicked)
|
data_dir_button.clicked.connect(self.data_dir_button_clicked)
|
||||||
downloads_layout = QtWidgets.QHBoxLayout()
|
data_dir_layout = QtWidgets.QHBoxLayout()
|
||||||
downloads_layout.addWidget(downloads_label)
|
data_dir_layout.addWidget(data_dir_label)
|
||||||
downloads_layout.addWidget(self.downloads_dir_lineedit)
|
data_dir_layout.addWidget(self.data_dir_lineedit)
|
||||||
downloads_layout.addWidget(downloads_button)
|
data_dir_layout.addWidget(data_dir_button)
|
||||||
|
|
||||||
# Receiving options layout
|
# Receiving options layout
|
||||||
receiving_group_layout = QtWidgets.QVBoxLayout()
|
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 = QtWidgets.QGroupBox(strings._("gui_settings_receiving_label"))
|
||||||
receiving_group.setLayout(receiving_group_layout)
|
receiving_group.setLayout(receiving_group_layout)
|
||||||
|
|
||||||
|
@ -508,8 +508,8 @@ class SettingsDialog(QtWidgets.QDialog):
|
||||||
if use_legacy_v2_onions or save_private_key:
|
if use_legacy_v2_onions or save_private_key:
|
||||||
self.use_legacy_v2_onions_checkbox.setCheckState(QtCore.Qt.Checked)
|
self.use_legacy_v2_onions_checkbox.setCheckState(QtCore.Qt.Checked)
|
||||||
|
|
||||||
downloads_dir = self.old_settings.get('downloads_dir')
|
data_dir = self.old_settings.get('data_dir')
|
||||||
self.downloads_dir_lineedit.setText(downloads_dir)
|
self.data_dir_lineedit.setText(data_dir)
|
||||||
|
|
||||||
public_mode = self.old_settings.get('public_mode')
|
public_mode = self.old_settings.get('public_mode')
|
||||||
if public_mode:
|
if public_mode:
|
||||||
|
@ -747,17 +747,17 @@ class SettingsDialog(QtWidgets.QDialog):
|
||||||
if not self.save_private_key_checkbox.isChecked():
|
if not self.save_private_key_checkbox.isChecked():
|
||||||
self.use_legacy_v2_onions_checkbox.setEnabled(True)
|
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,
|
selected_dir = QtWidgets.QFileDialog.getExistingDirectory(self,
|
||||||
strings._('gui_settings_downloads_label'), downloads_dir)
|
strings._('gui_settings_data_dir_label'), data_dir)
|
||||||
|
|
||||||
if selected_dir:
|
if selected_dir:
|
||||||
self.common.log('SettingsDialog', 'downloads_button_clicked', 'selected dir: {}'.format(selected_dir))
|
self.common.log('SettingsDialog', 'data_dir_button_clicked', 'selected dir: {}'.format(selected_dir))
|
||||||
self.downloads_dir_lineedit.setText(selected_dir)
|
self.data_dir_lineedit.setText(selected_dir)
|
||||||
|
|
||||||
def test_tor_clicked(self):
|
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
|
# Also unset the HidServAuth if we are removing our reusable private key
|
||||||
settings.set('hidservauth_string', '')
|
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('public_mode', self.public_mode_checkbox.isChecked())
|
||||||
settings.set('use_stealth', self.stealth_checkbox.isChecked())
|
settings.set('use_stealth', self.stealth_checkbox.isChecked())
|
||||||
# Always unset the HidServAuth if Stealth mode is unset
|
# Always unset the HidServAuth if Stealth mode is unset
|
||||||
|
|
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 380 B After Width: | Height: | Size: 380 B |
Before Width: | Height: | Size: 468 B After Width: | Height: | Size: 468 B |
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 389 B After Width: | Height: | Size: 389 B |
Before Width: | Height: | Size: 473 B After Width: | Height: | Size: 473 B |
Before Width: | Height: | Size: 2 KiB After Width: | Height: | Size: 2 KiB |
Before Width: | Height: | Size: 2 KiB |
|
@ -9,7 +9,7 @@
|
||||||
"no_available_port": "Kunne ikke finde en tilgængelig port til at starte onion-tjenesten",
|
"no_available_port": "Kunne ikke finde en tilgængelig port til at starte onion-tjenesten",
|
||||||
"other_page_loaded": "Adresse indlæst",
|
"other_page_loaded": "Adresse indlæst",
|
||||||
"close_on_timeout": "Stoppede fordi timer med autostop løb ud",
|
"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",
|
"timeout_download_still_running": "Venter på at download skal blive færdig",
|
||||||
"large_filesize": "Advarsel: Det kan tage timer at sende en stor deling",
|
"large_filesize": "Advarsel: Det kan tage timer at sende en stor deling",
|
||||||
"systray_menu_exit": "Afslut",
|
"systray_menu_exit": "Afslut",
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
"systray_download_canceled_title": "OnionShare-download annulleret",
|
"systray_download_canceled_title": "OnionShare-download annulleret",
|
||||||
"systray_download_canceled_message": "Brugeren annullerede downloaden",
|
"systray_download_canceled_message": "Brugeren annullerede downloaden",
|
||||||
"help_local_only": "Brug ikke Tor (kun til udvikling)",
|
"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_shutdown_timeout": "Stop deling efter et vist antal sekunder",
|
||||||
"help_stealth": "Brug klientautentifikation (avanceret)",
|
"help_stealth": "Brug klientautentifikation (avanceret)",
|
||||||
"help_debug": "Log OnionShare-fejl til stdout, og webfejl til disk",
|
"help_debug": "Log OnionShare-fejl til stdout, og webfejl til disk",
|
||||||
|
@ -59,7 +59,7 @@
|
||||||
"gui_settings_autoupdate_timestamp_never": "Aldrig",
|
"gui_settings_autoupdate_timestamp_never": "Aldrig",
|
||||||
"gui_settings_autoupdate_check_button": "Søg efter ny version",
|
"gui_settings_autoupdate_check_button": "Søg efter ny version",
|
||||||
"gui_settings_sharing_label": "Delingsindstillinger",
|
"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_label": "Hvordan skal OnionShare oprette forbindelse til Tor?",
|
||||||
"gui_settings_connection_type_bundled_option": "Brug Tor-versionen som er indbygget i OnionShare",
|
"gui_settings_connection_type_bundled_option": "Brug Tor-versionen som er indbygget i OnionShare",
|
||||||
"gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser",
|
"gui_settings_connection_type_automatic_option": "Prøv autokonfiguration med Tor Browser",
|
||||||
|
@ -162,7 +162,7 @@
|
||||||
"gui_settings_public_mode_checkbox": "Offentlig tilstand",
|
"gui_settings_public_mode_checkbox": "Offentlig tilstand",
|
||||||
"systray_close_server_title": "OnionShare-server lukket",
|
"systray_close_server_title": "OnionShare-server lukket",
|
||||||
"systray_close_server_message": "En bruger lukkede serveren",
|
"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_download_page_loaded_message": "En bruger indlæste downloadsiden",
|
||||||
"systray_upload_page_loaded_message": "En bruger indlæste uploadsiden",
|
"systray_upload_page_loaded_message": "En bruger indlæste uploadsiden",
|
||||||
"gui_uploads": "Uploadhistorik",
|
"gui_uploads": "Uploadhistorik",
|
||||||
|
@ -188,5 +188,32 @@
|
||||||
"timeout_upload_still_running": "Venter på at upload skal blive færdig",
|
"timeout_upload_still_running": "Venter på at upload skal blive færdig",
|
||||||
"gui_add_files": "Tilføj filer",
|
"gui_add_files": "Tilføj filer",
|
||||||
"gui_add_folder": "Tilføj mappe",
|
"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 {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,13 +24,13 @@
|
||||||
"systray_upload_started_title": "Η λήψη του OnionShare ξεκίνησε",
|
"systray_upload_started_title": "Η λήψη του OnionShare ξεκίνησε",
|
||||||
"systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου",
|
"systray_upload_started_message": "Ένας/μια χρήστης/τρια ξεκίνησε να ανεβάζει αρχεία στον υπολογιστή σου",
|
||||||
"help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)",
|
"help_local_only": "Να μην χρησιμοποιηθεί το Tor (μόνο για development)",
|
||||||
"help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά τη πρώτη λήψη",
|
"help_stay_open": "Να συνεχίσει ο διαμοιρασμός μετά την αποστολή των αρχείων",
|
||||||
"help_shutdown_timeout": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων",
|
"help_shutdown_timeout": "Να τερματιστεί ο διαμοιρασμός μετά από ένα συγκεκριμένο αριθμό δευτερολέπτων",
|
||||||
"help_stealth": "Χρησιμοποιήστε άδεια χρήστη (Για προχωρημένους)",
|
"help_stealth": "Κάντε χρήση εξουσιοδότησης πελάτη (Για προχωρημένους)",
|
||||||
"help_receive": "",
|
"help_receive": "Λάβετε διαμοιρασμένα αρχεία αντι να τα στέλνετε",
|
||||||
"help_debug": "",
|
"help_debug": "Κατέγραψε τα σφάλματα του OnionShare στο stdout (συνήθως οθόνη) και τα σφάλματα web στον δίσκο",
|
||||||
"help_filename": "Λίστα αρχείων ή φακέλων για μοίρασμα",
|
"help_filename": "Λίστα αρχείων ή φακέλων για μοίρασμα",
|
||||||
"help_config": "",
|
"help_config": "Ορίστε σημείο αποθήκευσης αρχείου JSON",
|
||||||
"gui_drag_and_drop": "Σύρτε και αφήστε αρχεία και φακέλους\nγια να αρχίσετε να τα μοιράζεστε",
|
"gui_drag_and_drop": "Σύρτε και αφήστε αρχεία και φακέλους\nγια να αρχίσετε να τα μοιράζεστε",
|
||||||
"gui_add": "Προσθήκη",
|
"gui_add": "Προσθήκη",
|
||||||
"gui_delete": "Διαγραφή",
|
"gui_delete": "Διαγραφή",
|
||||||
|
@ -68,7 +68,7 @@
|
||||||
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
|
"error_ephemeral_not_supported": "Το OnionShare απαιτεί τουλάχιστον το Tor 0.2.7.1 και το python3-stem 1.4.0.",
|
||||||
"gui_settings_window_title": "Ρυθμίσεις",
|
"gui_settings_window_title": "Ρυθμίσεις",
|
||||||
"gui_settings_whats_this": "<a href='{0:s}'> Τί είναι αυτό? </a>",
|
"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_stealth_hidservauth_string": "Με την αποθήκευση των κλειδιών σας για χρήση εκ νέου, μπορείτε τώρα \nνα επιλέξετε την αντιγραφή του HidServAuth σας.",
|
||||||
"gui_settings_autoupdate_label": "Έλεγχος για νέα έκδοση",
|
"gui_settings_autoupdate_label": "Έλεγχος για νέα έκδοση",
|
||||||
"gui_settings_autoupdate_option": "Ενημερώστε με όταν είναι διαθέσιμη μια νέα έκδοση",
|
"gui_settings_autoupdate_option": "Ενημερώστε με όταν είναι διαθέσιμη μια νέα έκδοση",
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
"gui_settings_autoupdate_check_button": "Έλεγχος για νέα έκδοση",
|
"gui_settings_autoupdate_check_button": "Έλεγχος για νέα έκδοση",
|
||||||
"gui_settings_general_label": "Γενικές ρυθμίσεις",
|
"gui_settings_general_label": "Γενικές ρυθμίσεις",
|
||||||
"gui_settings_sharing_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_label": "Πώς πρέπει να συνδέεται το OnionShare με το Tor?",
|
||||||
"gui_settings_connection_type_bundled_option": "Χρησιμοποιήστε την έκδοση του Tor, ενσωματωμένη στο OnionShare",
|
"gui_settings_connection_type_bundled_option": "Χρησιμοποιήστε την έκδοση του Tor, ενσωματωμένη στο OnionShare",
|
||||||
"gui_settings_connection_type_automatic_option": "Προσπάθεια σύνδεσης με τον Tor Browser",
|
"gui_settings_connection_type_automatic_option": "Προσπάθεια σύνδεσης με τον Tor Browser",
|
||||||
|
@ -109,67 +109,67 @@
|
||||||
"settings_error_unknown": "Αδύνατη η σύνδεση του ελέγχου Tor, καθώς οι ρυθμίσεις σας δεν έχουν κανένα νόημα.",
|
"settings_error_unknown": "Αδύνατη η σύνδεση του ελέγχου Tor, καθώς οι ρυθμίσεις σας δεν έχουν κανένα νόημα.",
|
||||||
"settings_error_automatic": "Είναι αδύνατη η σύνδεση στον έλεγχο του Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο?",
|
"settings_error_automatic": "Είναι αδύνατη η σύνδεση στον έλεγχο του Tor. Λειτουργεί ο Tor Browser (διαθέσιμος στο torproject.org) στο παρασκήνιο?",
|
||||||
"settings_error_socket_port": "Αδύνατη η σύνδεση στον έλεγχο Tor στις {}:{}.",
|
"settings_error_socket_port": "Αδύνατη η σύνδεση στον έλεγχο Tor στις {}:{}.",
|
||||||
"settings_error_socket_file": "",
|
"settings_error_socket_file": "Ανέφικτη η σύνδεση με τον ελεγκτή Tor, κάνοντας χρήση αρχείου socket {}.",
|
||||||
"settings_error_auth": "",
|
"settings_error_auth": "Εγινε σύνδεση με {}:{}, αλλα δεν μπορεί να γίνει πιστοποίηση. Ισως δεν ειναι ενας ελεγκτής Tor?",
|
||||||
"settings_error_missing_password": "",
|
"settings_error_missing_password": "Εγινε σύνδεση με ελεγκτή Tor, αλλά απαιτείται κωδικός για πιστοποίηση.",
|
||||||
"settings_error_unreadable_cookie_file": "",
|
"settings_error_unreadable_cookie_file": "Εγινε σύνδεση με ελεγκτή Tor, αλλα ο κωδικός πιθανόν να είναι λάθος ή ο χρήστης δεν επιτρέπεται να διαβάζει αρχεία cookie.",
|
||||||
"settings_error_bundled_tor_not_supported": "",
|
"settings_error_bundled_tor_not_supported": "Η έκδοση Tor που συνοδεύει το OnionShare δεν λειτουργεί σε περιβάλλον προγραμματιστή σε Windows ή macOS.",
|
||||||
"settings_error_bundled_tor_timeout": "",
|
"settings_error_bundled_tor_timeout": "Η σύνδεση με Tor αργεί αρκετά. Ισως δεν είστε συνδεδεμένοι στο Διαδίκτυο ή το ρολόι σας δεν ειναι συγχρονισμένο?",
|
||||||
"settings_error_bundled_tor_broken": "",
|
"settings_error_bundled_tor_broken": "Το OnionShare δεν μπορεί να συνδεθεί με το Tor στο παρασκήνιο:\n{}",
|
||||||
"settings_test_success": "",
|
"settings_test_success": "Εγινε σύνδεση με τον ελεγκτή Tor.\n\nΕκδοση Tor: {}\nΥποστηρίζει εφήμερες υπηρεσίες onion: {}.\nΥποστηρίζει πιστοποίηση πελάτη: {}.\nΥποστηρίζει νέας γενιάς διευθύνσεις .onion: {}.",
|
||||||
"error_tor_protocol_error": "",
|
"error_tor_protocol_error": "Υπήρξε σφάλμα με το Tor: {}",
|
||||||
"error_tor_protocol_error_unknown": "",
|
"error_tor_protocol_error_unknown": "Υπήρξε άγνωστο σφάλμα με το Tor",
|
||||||
"error_invalid_private_key": "",
|
"error_invalid_private_key": "Αυτο το ιδιωτικό κλειδί δεν υποστηρίζεται",
|
||||||
"connecting_to_tor": "",
|
"connecting_to_tor": "Γίνεται σύνδεση με το δίκτυο Tor",
|
||||||
"update_available": "",
|
"update_available": "Βγήκε ενα νέο OnionShare. <a href='{}'>Κάντε κλικ εδώ</a> για να το λάβετε.<br><br>Χρησιμοποιείτε {} και το πιό πρόσφατο είναι το {}.",
|
||||||
"update_error_check_error": "",
|
"update_error_check_error": "Δεν μπόρεσε να γίνει έλεγχος για νέες εκδόσεις. Ο ιστότοπος OnionShare αναφέρει ότι η πιό πρόσφατη έκδοση δεν αναγνωρίζεται '{}'…",
|
||||||
"update_error_invalid_latest_version": "",
|
"update_error_invalid_latest_version": "Δεν μπόρεσε να γίνει έλεγχος για νέες εκδόσεις. Ισως δεν είστε συνδεδεμένοι στο Tor ή ο ιστότοπος OnionShare είναι κάτω?",
|
||||||
"update_not_available": "",
|
"update_not_available": "Εχετε την πιό πρόσφατη έκδοση OnionShare.",
|
||||||
"gui_tor_connection_ask": "",
|
"gui_tor_connection_ask": "Να ανοίξετε τις ρυθμίσεις για να επιλύσετε την σύνδεση με το Tor?",
|
||||||
"gui_tor_connection_ask_open_settings": "",
|
"gui_tor_connection_ask_open_settings": "Ναι",
|
||||||
"gui_tor_connection_ask_quit": "",
|
"gui_tor_connection_ask_quit": "Εξοδος",
|
||||||
"gui_tor_connection_error_settings": "",
|
"gui_tor_connection_error_settings": "Προσπαθήστε να αλλάξετε τον τρόπο σύνδεσης του OnionShare, με το δίκτυο Tor, από τις ρυθμίσεις.",
|
||||||
"gui_tor_connection_canceled": "",
|
"gui_tor_connection_canceled": "Δεν μπόρεσε να γίνει σύνδεση με Tor.\n\nΕλέγξτε ότι είστε συνδεδεμένοι στο Διαδίκτυο, επανεκινήστε το OnionShare και ρυθμίστε την σύνδεση με το Tor.",
|
||||||
"gui_tor_connection_lost": "",
|
"gui_tor_connection_lost": "Εγινε αποσύνδεση απο το Tor.",
|
||||||
"gui_server_started_after_timeout": "",
|
"gui_server_started_after_timeout": "Η λειτουργία auto-stop τερματίστηκε πριν την εκκίνηση διακομιστή.\nΠαρακαλώ κάντε εναν νέο διαμοιρασμό.",
|
||||||
"gui_server_timeout_expired": "",
|
"gui_server_timeout_expired": "Η λειτουργία auto-stop ήδη τερματίστηκε.\nΕνημερώστε την για να ξεκινήσετε τον διαμοιρασμό.",
|
||||||
"share_via_onionshare": "",
|
"share_via_onionshare": "Κάντε το OnionShare",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "",
|
"gui_use_legacy_v2_onions_checkbox": "Χρηση \"παραδοσιακών\" διευθύνσεων",
|
||||||
"gui_save_private_key_checkbox": "",
|
"gui_save_private_key_checkbox": "Χρήση μόνιμης διεύθυνσης",
|
||||||
"gui_share_url_description": "",
|
"gui_share_url_description": "<b>Οποιοσδήποτε</b> με αυτήν την διεύθυνση OnionShare, μπορεί να <b>κατεβάσει</b> τα αρχεία σας με χρήση <b> Φυλλομετρητη Tor</b>: <img src='{}' />",
|
||||||
"gui_receive_url_description": "",
|
"gui_receive_url_description": "<b>Οποιοσδήποτε</b> με αυτήν την διεύθυνση OnionShare, μπορεί να <b>ανεβάσει</b> αρχεία στον υπολογιστή σας με χρήση του <b>Φυλλομετρητή Tor</b>: <img src='{}' />",
|
||||||
"gui_url_label_persistent": "",
|
"gui_url_label_persistent": "Αυτός ο διαμοιρασμός δεν έχει auto-stop.<br><br>Οποιοσδήποτε μετέπειτα διαμοιρασμός κάνει ξανα χρήση αυτής της διεύθυνσης. (Για να κάνετε χρήση διευθύνσεων μιάς φοράς (one-time addresses), απενεργοποιήστε την λειτουργία \"Μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
|
||||||
"gui_url_label_stay_open": "",
|
"gui_url_label_stay_open": "Αυτος ο διαμοιρασμός δεν έχει auto-stop.",
|
||||||
"gui_url_label_onetime": "",
|
"gui_url_label_onetime": "Αυτός ο διαμοιρασμός θα σταματήσει με την πρώτη λήψη.",
|
||||||
"gui_url_label_onetime_and_persistent": "",
|
"gui_url_label_onetime_and_persistent": "Αυτός ο διαμοιρασμός δεν έχει auto-stop.<br><br>Οποιοσδήποτε μετέπειτα διαμοιρασμός θα κάνει ξανα χρήση αυτής της διεύθυνσης. (Για να κάνετε χρήση διευθύνσεων μιάς φοράς (one-time addresses), απενεργοποιήστε την λειτουργία \"Μόνιμης διεύθυνσης\" στις Ρυθμίσεις.)",
|
||||||
"gui_status_indicator_share_stopped": "",
|
"gui_status_indicator_share_stopped": "Ετοιμο για διαμοιρασμό",
|
||||||
"gui_status_indicator_share_working": "",
|
"gui_status_indicator_share_working": "Ξεκινάει…",
|
||||||
"gui_status_indicator_share_started": "",
|
"gui_status_indicator_share_started": "Διαμοιράζει",
|
||||||
"gui_status_indicator_receive_stopped": "",
|
"gui_status_indicator_receive_stopped": "Ετοιμο για λήψη",
|
||||||
"gui_status_indicator_receive_working": "",
|
"gui_status_indicator_receive_working": "Ξεκινάει…",
|
||||||
"gui_status_indicator_receive_started": "",
|
"gui_status_indicator_receive_started": "Γίνεται λήψη",
|
||||||
"gui_file_info": "",
|
"gui_file_info": "{} αρχεία, {}",
|
||||||
"gui_file_info_single": "",
|
"gui_file_info_single": "{} αρχείο, {}",
|
||||||
"history_in_progress_tooltip": "",
|
"history_in_progress_tooltip": "{} σε εξέλιξη",
|
||||||
"history_completed_tooltip": "",
|
"history_completed_tooltip": "{} ολοκληρώθηκε",
|
||||||
"info_in_progress_uploads_tooltip": "",
|
"info_in_progress_uploads_tooltip": "",
|
||||||
"info_completed_uploads_tooltip": "",
|
"info_completed_uploads_tooltip": "",
|
||||||
"error_cannot_create_downloads_dir": "",
|
"error_cannot_create_downloads_dir": "",
|
||||||
"receive_mode_downloads_dir": "",
|
"receive_mode_downloads_dir": "",
|
||||||
"receive_mode_warning": "",
|
"receive_mode_warning": "Προσοχή: η λειτουργία λήψης, επιτρέπει άλλους να ανεβάζουν αρχεία στον υπολογιστή σας. Μερικά αρχεία πιθανόν να είναι σε θέση να αποκτήσουν τον έλεγχο του υπολογιστή σας εαν τα ανοίξετε. Ανοίξτε μόνο αρχεία που σας εστειλαν άτομα που εμπιστεύεστε ή εαν ξέρετε τι κάνετε.",
|
||||||
"gui_receive_mode_warning": "",
|
"gui_receive_mode_warning": "Η λειτουργία λήψης, επιτρέπει άλλους να ανεβάζουν αρχεία στον υπολογιστή σας.<br><br><b> Μερικά αρχεία πιθανόν να είναι σε θέση να αποκτήσουν τον έλεγχο του υπολογιστή σας εαν τα ανοίξετε. Ανοίξτε μόνο αρχεία που σας εστειλαν άτομα που εμπιστεύεστε ή εαν ξέρετε τι κάνετε.</b>",
|
||||||
"receive_mode_upload_starting": "",
|
"receive_mode_upload_starting": "Αποστολή συνολικού μεγέθους {} ξεκινάει",
|
||||||
"receive_mode_received_file": "",
|
"receive_mode_received_file": "Ελήφθη: {}",
|
||||||
"gui_mode_share_button": "",
|
"gui_mode_share_button": "Διαμοίρασε αρχεία",
|
||||||
"gui_mode_receive_button": "",
|
"gui_mode_receive_button": "Λήψη αρχείων",
|
||||||
"gui_settings_receiving_label": "",
|
"gui_settings_receiving_label": "Ρυθμίσεις λήψης",
|
||||||
"gui_settings_downloads_label": "",
|
"gui_settings_downloads_label": "",
|
||||||
"gui_settings_downloads_button": "",
|
"gui_settings_downloads_button": "",
|
||||||
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
||||||
"gui_settings_public_mode_checkbox": "",
|
"gui_settings_public_mode_checkbox": "Δημόσια λειτουργία",
|
||||||
"systray_close_server_title": "",
|
"systray_close_server_title": "",
|
||||||
"systray_close_server_message": "",
|
"systray_close_server_message": "",
|
||||||
"systray_page_loaded_title": "",
|
"systray_page_loaded_title": "Η σελίδα φορτώθηκε",
|
||||||
"systray_download_page_loaded_message": "",
|
"systray_download_page_loaded_message": "",
|
||||||
"systray_upload_page_loaded_message": "",
|
"systray_upload_page_loaded_message": "",
|
||||||
"gui_uploads": "",
|
"gui_uploads": "",
|
||||||
|
@ -179,8 +179,36 @@
|
||||||
"gui_upload_finished_range": "",
|
"gui_upload_finished_range": "",
|
||||||
"gui_upload_finished": "",
|
"gui_upload_finished": "",
|
||||||
"gui_download_in_progress": "",
|
"gui_download_in_progress": "",
|
||||||
"gui_open_folder_error_nautilus": "",
|
"gui_open_folder_error_nautilus": "Δεν μπορεί να ανοιχτεί ο φάκελος γιατί το nautilus δεν είναι διαθέσιμο. Το αρχείο είναι εδω: {}",
|
||||||
"gui_settings_language_label": "",
|
"gui_settings_language_label": "Προτιμώμενη γλώσσα",
|
||||||
"gui_settings_language_changed_notice": "",
|
"gui_settings_language_changed_notice": "Επανεκινήστε το OnionShare για να ενεργοποιηθεί η αλλαγή γλώσσας.",
|
||||||
"timeout_upload_still_running": "Αναμονή ολοκλήρωσης του ανεβάσματος"
|
"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": "Αναμένοντας την ολοκλήρωση της λήψης"
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,21 +11,10 @@
|
||||||
"no_available_port": "Could not find an available port to start the onion service",
|
"no_available_port": "Could not find an available port to start the onion service",
|
||||||
"other_page_loaded": "Address loaded",
|
"other_page_loaded": "Address loaded",
|
||||||
"close_on_timeout": "Stopped because auto-stop timer ran out",
|
"close_on_timeout": "Stopped because auto-stop timer ran out",
|
||||||
"closing_automatically": "Stopped because download finished",
|
"closing_automatically": "Stopped because transfer is complete",
|
||||||
"timeout_download_still_running": "Waiting for download to complete",
|
|
||||||
"timeout_upload_still_running": "Waiting for upload to complete",
|
|
||||||
"large_filesize": "Warning: Sending a large share could take hours",
|
"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_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_shutdown_timeout": "Stop sharing after a given amount of seconds",
|
||||||
"help_stealth": "Use client authorization (advanced)",
|
"help_stealth": "Use client authorization (advanced)",
|
||||||
"help_receive": "Receive shares instead of sending them",
|
"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_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer ends at {}",
|
||||||
"gui_copy_url": "Copy Address",
|
"gui_copy_url": "Copy Address",
|
||||||
"gui_copy_hidservauth": "Copy HidServAuth",
|
"gui_copy_hidservauth": "Copy HidServAuth",
|
||||||
"gui_downloads": "Download History",
|
|
||||||
"gui_no_downloads": "No Downloads Yet",
|
|
||||||
"gui_canceled": "Canceled",
|
"gui_canceled": "Canceled",
|
||||||
"gui_copied_url_title": "Copied OnionShare Address",
|
"gui_copied_url_title": "Copied OnionShare Address",
|
||||||
"gui_copied_url": "OnionShare address copied to clipboard",
|
"gui_copied_url": "OnionShare address copied to clipboard",
|
||||||
"gui_copied_hidservauth_title": "Copied HidServAuth",
|
"gui_copied_hidservauth_title": "Copied HidServAuth",
|
||||||
"gui_copied_hidservauth": "HidServAuth line copied to clipboard",
|
"gui_copied_hidservauth": "HidServAuth line copied to clipboard",
|
||||||
"gui_please_wait": "Starting… Click to cancel.",
|
"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/",
|
"version_string": "OnionShare {0:s} | https://onionshare.org/",
|
||||||
"gui_quit_title": "Not so fast",
|
"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?",
|
"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_autoupdate_check_button": "Check for New Version",
|
||||||
"gui_settings_general_label": "General settings",
|
"gui_settings_general_label": "General settings",
|
||||||
"gui_settings_sharing_label": "Sharing 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_label": "How should OnionShare connect to Tor?",
|
||||||
"gui_settings_connection_type_bundled_option": "Use the Tor version built into OnionShare",
|
"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",
|
"gui_settings_connection_type_automatic_option": "Attempt auto-configuration with Tor Browser",
|
||||||
|
@ -156,10 +140,8 @@
|
||||||
"gui_file_info_single": "{} file, {}",
|
"gui_file_info_single": "{} file, {}",
|
||||||
"history_in_progress_tooltip": "{} in progress",
|
"history_in_progress_tooltip": "{} in progress",
|
||||||
"history_completed_tooltip": "{} completed",
|
"history_completed_tooltip": "{} completed",
|
||||||
"info_in_progress_uploads_tooltip": "{} upload(s) in progress",
|
"error_cannot_create_data_dir": "Could not create OnionShare data folder: {}",
|
||||||
"info_completed_uploads_tooltip": "{} upload(s) completed",
|
"receive_mode_data_dir": "Files sent to you appear in this folder: {}",
|
||||||
"error_cannot_create_downloads_dir": "Could not create receive mode folder: {}",
|
|
||||||
"receive_mode_downloads_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.",
|
"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>",
|
"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",
|
"receive_mode_upload_starting": "Upload of total size {} is starting",
|
||||||
|
@ -167,22 +149,35 @@
|
||||||
"gui_mode_share_button": "Share Files",
|
"gui_mode_share_button": "Share Files",
|
||||||
"gui_mode_receive_button": "Receive Files",
|
"gui_mode_receive_button": "Receive Files",
|
||||||
"gui_settings_receiving_label": "Receiving settings",
|
"gui_settings_receiving_label": "Receiving settings",
|
||||||
"gui_settings_downloads_label": "Save files to",
|
"gui_settings_data_dir_label": "Save files to",
|
||||||
"gui_settings_downloads_button": "Browse",
|
"gui_settings_data_dir_browse_button": "Browse",
|
||||||
"gui_settings_public_mode_checkbox": "Public mode",
|
"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_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_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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
"ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor",
|
"ctrlc_to_stop": "Pulsa Ctrl-C para detener el servidor",
|
||||||
"not_a_file": "{0:s} no es un archivo válido.",
|
"not_a_file": "{0:s} no es un archivo válido.",
|
||||||
"other_page_loaded": "La URL está lista",
|
"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_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_debug": "Enviar los errores de OnionShare a stdout, y los errores web al disco",
|
||||||
"help_filename": "Lista de archivos o carpetas para compartir",
|
"help_filename": "Lista de archivos o carpetas para compartir",
|
||||||
"gui_drag_and_drop": "Arrastra y suelta archivos y carpetas\npara empezar a 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": "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.",
|
"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 {}",
|
"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:",
|
"give_this_url_receive_stealth": "Entrega esta dirección y HidServAuth al remitente:",
|
||||||
"not_a_readable_file": "{0:s} no es un archivo legible.",
|
"not_a_readable_file": "{0:s} no es un archivo legible.",
|
||||||
"systray_menu_exit": "Salir",
|
"systray_menu_exit": "Salir",
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
"gui_settings_autoupdate_timestamp_never": "Nunca",
|
"gui_settings_autoupdate_timestamp_never": "Nunca",
|
||||||
"gui_settings_general_label": "Ajustes generales",
|
"gui_settings_general_label": "Ajustes generales",
|
||||||
"gui_settings_sharing_label": "Configuración de compartición",
|
"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_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_control_port_option": "Conectar usando el puerto de control",
|
||||||
"gui_settings_connection_type_socket_file_option": "Conectar usando archivo de socket",
|
"gui_settings_connection_type_socket_file_option": "Conectar usando archivo de socket",
|
||||||
|
@ -172,7 +172,7 @@
|
||||||
"gui_settings_public_mode_checkbox": "Modo público",
|
"gui_settings_public_mode_checkbox": "Modo público",
|
||||||
"systray_close_server_title": "Servidor OnionShare cerrado",
|
"systray_close_server_title": "Servidor OnionShare cerrado",
|
||||||
"systray_close_server_message": "Un usuario cerró el servidor",
|
"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_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",
|
"systray_upload_page_loaded_message": "Un usuario cargó la página de carga",
|
||||||
"gui_uploads": "Historial de carga",
|
"gui_uploads": "Historial de carga",
|
||||||
|
@ -189,5 +189,32 @@
|
||||||
"timeout_upload_still_running": "Esperando a que se complete la subida",
|
"timeout_upload_still_running": "Esperando a que se complete la subida",
|
||||||
"gui_add_files": "Añadir Archivos",
|
"gui_add_files": "Añadir Archivos",
|
||||||
"gui_add_folder": "Añadir Carpeta",
|
"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 {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,10 +8,10 @@
|
||||||
"ctrlc_to_stop": "برای توقف سرور Ctrl+C را فشار دهید",
|
"ctrlc_to_stop": "برای توقف سرور Ctrl+C را فشار دهید",
|
||||||
"not_a_file": "{0:s} یک فایل معتبر نمی باشد.",
|
"not_a_file": "{0:s} یک فایل معتبر نمی باشد.",
|
||||||
"not_a_readable_file": "{0:s} قابل خواندن نمی باشد.",
|
"not_a_readable_file": "{0:s} قابل خواندن نمی باشد.",
|
||||||
"no_available_port": "پورت قابل استفاده برای شروع سرویس onion پیدا نشد.",
|
"no_available_port": "پورت قابل استفاده برای شروع سرویس onion پیدا نشد",
|
||||||
"other_page_loaded": "آدرس بارگذاری شد",
|
"other_page_loaded": "آدرس بارگذاری شد",
|
||||||
"close_on_timeout": "",
|
"close_on_timeout": "متوقف شد چون تایمر توقف خودکار به پایان رسید",
|
||||||
"closing_automatically": "متوقف شد چون دانلود به پایان رسید",
|
"closing_automatically": "متوقف شد چون انتقال انجام شد",
|
||||||
"timeout_download_still_running": "انتظار برای تکمیل دانلود",
|
"timeout_download_still_running": "انتظار برای تکمیل دانلود",
|
||||||
"large_filesize": "هشدار: یک اشتراک گذاری بزرگ ممکن است ساعت ها طول بکشد",
|
"large_filesize": "هشدار: یک اشتراک گذاری بزرگ ممکن است ساعت ها طول بکشد",
|
||||||
"systray_menu_exit": "خروج",
|
"systray_menu_exit": "خروج",
|
||||||
|
@ -23,26 +23,26 @@
|
||||||
"systray_download_canceled_message": "کاربر دانلود را لغو کرد",
|
"systray_download_canceled_message": "کاربر دانلود را لغو کرد",
|
||||||
"systray_upload_started_title": "آپلود OnionShare آغاز شد",
|
"systray_upload_started_title": "آپلود OnionShare آغاز شد",
|
||||||
"systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است",
|
"systray_upload_started_message": "یک کاربر شروع به آپلود فایل بر روی کامپیوتر شما کرده است",
|
||||||
"help_local_only": "",
|
"help_local_only": "عدم استفاده از Tor (فقط برای توسعه)",
|
||||||
"help_stay_open": "ادامه اشتراک گذاری پس از اولین دانلود",
|
"help_stay_open": "ادامه اشتراک گذاری پس از ارسال دانلود ها",
|
||||||
"help_shutdown_timeout": "",
|
"help_shutdown_timeout": "توقف به اشتراک گذاری پس از میزان ثانیه ای مشخص",
|
||||||
"help_stealth": "",
|
"help_stealth": "استفاده از احراز هویت کلاینت (پیشرفته)",
|
||||||
"help_receive": "",
|
"help_receive": "دریافت اشتراک به جای ارسال آن",
|
||||||
"help_debug": "",
|
"help_debug": "لاگ کردن خطاهای OnionShare روی stdout، و خطاهای وب بر روی دیسک",
|
||||||
"help_filename": "لیست فایل ها یا فولدر ها برای به اشتراک گذاری",
|
"help_filename": "لیست فایل ها یا فولدر ها برای به اشتراک گذاری",
|
||||||
"help_config": "",
|
"help_config": "مکان فایل کانفیگ JSON کاستوم (اختیاری)",
|
||||||
"gui_drag_and_drop": "",
|
"gui_drag_and_drop": "فایل ها و پوشه ها را بکشید و رها کنید\nتا اشتراک گذاری آغاز شود",
|
||||||
"gui_add": "افزودن",
|
"gui_add": "افزودن",
|
||||||
"gui_delete": "حذف",
|
"gui_delete": "حذف",
|
||||||
"gui_choose_items": "انتخاب",
|
"gui_choose_items": "انتخاب",
|
||||||
"gui_share_start_server": "شروع اشتراک گذاری",
|
"gui_share_start_server": "شروع اشتراک گذاری",
|
||||||
"gui_share_stop_server": "توقف اشتراک گذاری",
|
"gui_share_stop_server": "توقف اشتراک گذاری",
|
||||||
"gui_share_stop_server_shutdown_timeout": "توقف اشتراک گذاری ({} ثانیه باقیمانده)",
|
"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_start_server": "شروع حالت دریافت",
|
||||||
"gui_receive_stop_server": "توقف حالت دریافت",
|
"gui_receive_stop_server": "توقف حالت دریافت",
|
||||||
"gui_receive_stop_server_shutdown_timeout": "",
|
"gui_receive_stop_server_shutdown_timeout": "توقف حالت دریافت ({} ثانیه باقیمانده)",
|
||||||
"gui_receive_stop_server_shutdown_timeout_tooltip": "",
|
"gui_receive_stop_server_shutdown_timeout_tooltip": "تایمر توقف خودکار در {} به پایان می رسد",
|
||||||
"gui_copy_url": "کپی آدرس",
|
"gui_copy_url": "کپی آدرس",
|
||||||
"gui_copy_hidservauth": "کپی HidServAuth",
|
"gui_copy_hidservauth": "کپی HidServAuth",
|
||||||
"gui_downloads": "دانلود تاریخچه",
|
"gui_downloads": "دانلود تاریخچه",
|
||||||
|
@ -56,133 +56,161 @@
|
||||||
"gui_download_upload_progress_complete": "",
|
"gui_download_upload_progress_complete": "",
|
||||||
"gui_download_upload_progress_starting": "",
|
"gui_download_upload_progress_starting": "",
|
||||||
"gui_download_upload_progress_eta": "",
|
"gui_download_upload_progress_eta": "",
|
||||||
"version_string": "",
|
"version_string": "OnionShare {0:s} | https://onionshare.org/",
|
||||||
"gui_quit_title": "نه به این سرعت",
|
"gui_quit_title": "نه به این سرعت",
|
||||||
"gui_share_quit_warning": "شما در پروسه ارسال فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
|
"gui_share_quit_warning": "شما در پروسه ارسال فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
|
||||||
"gui_receive_quit_warning": "شما در پروسه دریافت فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
|
"gui_receive_quit_warning": "شما در پروسه دریافت فایل می باشید. مطمئن هستید که میخواهید از OnionShare خارج شوید؟",
|
||||||
"gui_quit_warning_quit": "خروج",
|
"gui_quit_warning_quit": "خروج",
|
||||||
"gui_quit_warning_dont_quit": "لغو",
|
"gui_quit_warning_dont_quit": "لغو",
|
||||||
"error_rate_limit": "",
|
"error_rate_limit": "شخصی تعداد زیادی قصد ناصحیح روی آدرس شما داشته است، این می تواند بدین معنا باشد که در حال تلاش برای حدس زدن آن هستند، بنابراین OnionShare سرور را متوقف کرده است. دوباره اشتراک گذاری را آغاز کنید و به گیرنده یک آدرس جدید برای اشتراک ارسال کنید.",
|
||||||
"zip_progress_bar_format": "فشرده سازی: %p%",
|
"zip_progress_bar_format": "فشرده سازی: %p%",
|
||||||
"error_stealth_not_supported": "",
|
"error_stealth_not_supported": "برای استفاده از احراز هویت کلاینت، شما نیاز به داشتن Tor 0.2.9.1-alpha (یا مرورگر Tor 6.5) و python3-stem 1.5.0 دارید.",
|
||||||
"error_ephemeral_not_supported": "",
|
"error_ephemeral_not_supported": "OnionShare حداقل به Tor 0.2.7.1 و python3-stem 1.4.0 نیاز دارد.",
|
||||||
"gui_settings_window_title": "تنظیمات",
|
"gui_settings_window_title": "تنظیمات",
|
||||||
"gui_settings_whats_this": "<a href='{0:s}'>این چیست؟</a>",
|
"gui_settings_whats_this": "<a href='{0:s}'>این چیست؟</a>",
|
||||||
"gui_settings_stealth_option": "",
|
"gui_settings_stealth_option": "استفاده از احراز هویت کلاینت",
|
||||||
"gui_settings_stealth_hidservauth_string": "",
|
"gui_settings_stealth_hidservauth_string": "ذخیره کردن کلید خصوصی برای استفاده دوباره، بدین معناست که الان می توانید\nبرای کپی HidServAuth کلیک کنید.",
|
||||||
"gui_settings_autoupdate_label": "بررسی برای نسخه جدید",
|
"gui_settings_autoupdate_label": "بررسی برای نسخه جدید",
|
||||||
"gui_settings_autoupdate_option": "",
|
"gui_settings_autoupdate_option": "زمانی که نسخه جدید موجود بود من را خبر کن",
|
||||||
"gui_settings_autoupdate_timestamp": "",
|
"gui_settings_autoupdate_timestamp": "آخرین بررسی: {}",
|
||||||
"gui_settings_autoupdate_timestamp_never": "هرگز",
|
"gui_settings_autoupdate_timestamp_never": "هرگز",
|
||||||
"gui_settings_autoupdate_check_button": "",
|
"gui_settings_autoupdate_check_button": "بررسی برای نسخه جدید",
|
||||||
"gui_settings_general_label": "تنظیمات کلی",
|
"gui_settings_general_label": "تنظیمات کلی",
|
||||||
"gui_settings_sharing_label": "تنظیمات اشتراک گذاری",
|
"gui_settings_sharing_label": "تنظیمات اشتراک گذاری",
|
||||||
"gui_settings_close_after_first_download_option": "",
|
"gui_settings_close_after_first_download_option": "توقف اشتراک گذاری پس از اولین ارسال دانلود",
|
||||||
"gui_settings_connection_type_label": "",
|
"gui_settings_connection_type_label": "OnionShare چگونه به Tor باید متصل شود؟",
|
||||||
"gui_settings_connection_type_bundled_option": "",
|
"gui_settings_connection_type_bundled_option": "استفاده از نسخه Tor قرار گرفته در OnionShare",
|
||||||
"gui_settings_connection_type_automatic_option": "",
|
"gui_settings_connection_type_automatic_option": "اعمال پیکربندی خودکار با مرورگر Tor",
|
||||||
"gui_settings_connection_type_control_port_option": "",
|
"gui_settings_connection_type_control_port_option": "اتصال از طریق پورت کنترل",
|
||||||
"gui_settings_connection_type_socket_file_option": "",
|
"gui_settings_connection_type_socket_file_option": "اتصال از طریق فایل سوکت",
|
||||||
"gui_settings_connection_type_test_button": "",
|
"gui_settings_connection_type_test_button": "تست اتصال به Tor",
|
||||||
"gui_settings_control_port_label": "",
|
"gui_settings_control_port_label": "پورت کنترل",
|
||||||
"gui_settings_socket_file_label": "",
|
"gui_settings_socket_file_label": "فایل سوکت",
|
||||||
"gui_settings_socks_label": "پورت SOCKS",
|
"gui_settings_socks_label": "پورت SOCKS",
|
||||||
"gui_settings_authenticate_label": "",
|
"gui_settings_authenticate_label": "تنظیمات احراز هویت Tor",
|
||||||
"gui_settings_authenticate_no_auth_option": "",
|
"gui_settings_authenticate_no_auth_option": "هیچ احراز هویت، یا احراز هویت کوکی",
|
||||||
"gui_settings_authenticate_password_option": "رمز عبور",
|
"gui_settings_authenticate_password_option": "رمز عبور",
|
||||||
"gui_settings_password_label": "رمز عبور",
|
"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_no_bridges_radio_option": "عدم استفاده از بریج",
|
||||||
"gui_settings_tor_bridges_obfs4_radio_option": "",
|
"gui_settings_tor_bridges_obfs4_radio_option": "استفاده از پلاگبل ترنسپورت obfs4",
|
||||||
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
|
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت obfs4 (نیازمند obfs4proxy)",
|
||||||
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
|
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "استفاده از پلاگبل ترنسپورت meek_lite (Azure)",
|
||||||
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "",
|
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "استفاده از پلاگبل ترنسپورت meek_lite (Azure) (نیازمند obfs4proxy)",
|
||||||
"gui_settings_meek_lite_expensive_warning": "",
|
"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_radio_option": "استفاده از بریج های کاستوم",
|
||||||
"gui_settings_tor_bridges_custom_label": "",
|
"gui_settings_tor_bridges_custom_label": "میتوانید از <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a> بریج دریافت کنید",
|
||||||
"gui_settings_tor_bridges_invalid": "",
|
"gui_settings_tor_bridges_invalid": "هیچ کدام از بریج هایی که شما اضافه کردید کار نمی کند.\nآن ها را دوباره چک کنید یا بریج های دیگری اضافه کنید.",
|
||||||
"gui_settings_button_save": "ذخیره",
|
"gui_settings_button_save": "ذخیره",
|
||||||
"gui_settings_button_cancel": "لغو",
|
"gui_settings_button_cancel": "لغو",
|
||||||
"gui_settings_button_help": "",
|
"gui_settings_button_help": "راهنما",
|
||||||
"gui_settings_shutdown_timeout_checkbox": "",
|
"gui_settings_shutdown_timeout_checkbox": "استفاده از تایمر توقف خودکار",
|
||||||
"gui_settings_shutdown_timeout": "",
|
"gui_settings_shutdown_timeout": "توقف اشتراک در:",
|
||||||
"settings_error_unknown": "",
|
"settings_error_unknown": "ناتوانی در اتصال به کنترل کننده Tor بدلیل نامفهوم بودن تنظیمات.",
|
||||||
"settings_error_automatic": "",
|
"settings_error_automatic": "ناتوانی در اتصال به کنترل کننده Tor. آیا مرورگر Tor (در دسترس از طریق torproject.org) در پس زمینه در حال اجراست؟",
|
||||||
"settings_error_socket_port": "",
|
"settings_error_socket_port": "ناتوانی در اتصال به کنترل کننده Tor در {}:{}.",
|
||||||
"settings_error_socket_file": "",
|
"settings_error_socket_file": "ناتوانی در اتصال به کنترل کننده Tor از طریق فایل سوکت {}.",
|
||||||
"settings_error_auth": "",
|
"settings_error_auth": "متصل به {}:{}، اما ناتوانی در احراز هویت. شاید این یک کنترل کننده Tor نمی باشد؟",
|
||||||
"settings_error_missing_password": "",
|
"settings_error_missing_password": "متصل به کنترل کننده Tor، اما نیاز به یک رمز عبور برای احراز هویت می باشد.",
|
||||||
"settings_error_unreadable_cookie_file": "",
|
"settings_error_unreadable_cookie_file": "اتصال به کنترل کننده Tor برقرار است، اما رمز عبور ممکن است اشتباه باشد، یا کاربری شما اجازه خواندن فایل کوکی را ندارد.",
|
||||||
"settings_error_bundled_tor_not_supported": "",
|
"settings_error_bundled_tor_not_supported": "استفاده از نسخه Tor که با OnionShare می آید در حالت توسعه روی ویندوز یا مک کار نمی کند.",
|
||||||
"settings_error_bundled_tor_timeout": "",
|
"settings_error_bundled_tor_timeout": "اتصال به Tor زمان زیادی می برد. شاید شما به اینترنت متصل نیستید، یا ساعت سیستم شما دقیق نیست؟",
|
||||||
"settings_error_bundled_tor_broken": "",
|
"settings_error_bundled_tor_broken": "OnionShare نمی تواند در پس زمینه به Tor متصل شود:\n{}",
|
||||||
"settings_test_success": "",
|
"settings_test_success": "اتصال به کنترل کننده Tor برقرار است.\n\nنسخه Tor: {}\nسرویس های onion ناپایدار پشتیبانی شده: {}.\nاحراز هویت کلاینت پشتیبانی شده: {}.\nپشتیبانی از آدرس های .onion نسل بعدی: {}.",
|
||||||
"error_tor_protocol_error": "",
|
"error_tor_protocol_error": "خطایی با Tor وجود داشت: {}",
|
||||||
"error_tor_protocol_error_unknown": "",
|
"error_tor_protocol_error_unknown": "خطای ناشناخته ای با Tor وجود داشت",
|
||||||
"error_invalid_private_key": "",
|
"error_invalid_private_key": "این نوع کلید خصوصی پشتیبانی نمی شود",
|
||||||
"connecting_to_tor": "",
|
"connecting_to_tor": "در حال اتصال به شبکه Tor",
|
||||||
"update_available": "",
|
"update_available": "نسخه جدید OnionShare وجود دارد. <a href='{}'> اینجا کلیک کنید</a> تا آن را دریافت کنید.<br><br> شما در حال استفاده از {} می باشید و آخرین نسخه {} می باشد.",
|
||||||
"update_error_check_error": "",
|
"update_error_check_error": "ناتوانی در بررسی برای نسخه های جدید: سایت OnionShare میگوید که آخرین نسخه '{}' ناشناس می باشد…",
|
||||||
"update_error_invalid_latest_version": "",
|
"update_error_invalid_latest_version": "ناتوانی در بررسی نسخه جدید: شاید شما به Tor متصل نیستید، یا سایت OnionShare کار نمی کند؟",
|
||||||
"update_not_available": "",
|
"update_not_available": "شما از آخرین نسخه OnionShare استفاده می کنید.",
|
||||||
"gui_tor_connection_ask": "",
|
"gui_tor_connection_ask": "باز کردن تنظیمات برای ساماندهی اتصال به Tor؟",
|
||||||
"gui_tor_connection_ask_open_settings": "بله",
|
"gui_tor_connection_ask_open_settings": "بله",
|
||||||
"gui_tor_connection_ask_quit": "خروج",
|
"gui_tor_connection_ask_quit": "خروج",
|
||||||
"gui_tor_connection_error_settings": "",
|
"gui_tor_connection_error_settings": "تغییر نحوه اتصال OnionShare به شبکه Tor در تنظیمات.",
|
||||||
"gui_tor_connection_canceled": "",
|
"gui_tor_connection_canceled": "اتصال به Tor برقرار نشد.\n\nمطمئن شوید که به اینترنت متصل هستید، سپس OnionShare را دوباره باز کرده و اتصال آن را به Tor دوباره برقرار کنید.",
|
||||||
"gui_tor_connection_lost": "",
|
"gui_tor_connection_lost": "اتصال با Tor قطع شده است.",
|
||||||
"gui_server_started_after_timeout": "",
|
"gui_server_started_after_timeout": "تایمر توقف خودکار قبل از آغاز سرور به پایان رسید.\nلطفا یک اشتراک جدید درست کنید.",
|
||||||
"gui_server_timeout_expired": "",
|
"gui_server_timeout_expired": "تایمر توقف خودکار به پایان رسید.\nلطفا برای آغاز اشتراک گذاری آن را به روز رسانی کنید.",
|
||||||
"share_via_onionshare": "",
|
"share_via_onionshare": "OnionShare کنید",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "",
|
"gui_use_legacy_v2_onions_checkbox": "استفاده از آدرس های بازمانده",
|
||||||
"gui_save_private_key_checkbox": "",
|
"gui_save_private_key_checkbox": "استفاده از یک آدرس پایا",
|
||||||
"gui_share_url_description": "",
|
"gui_share_url_description": "<b>هرکس</b> با این آدرس OnionShare میتواند روی کامپیوتر شما فایل <b>دانلود</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",
|
||||||
"gui_receive_url_description": "",
|
"gui_receive_url_description": "<b>هرکس</b> با این آدرس OnionShare میتواند روی کامپیوتر شما فایل <b>آپلود</b> کند از طریق <b>مرورگر تور</b>: <img src='{}' />",
|
||||||
"gui_url_label_persistent": "",
|
"gui_url_label_persistent": "این اشتراک به صورت خودکار متوقف نمی شود.<br><br>هر اشتراک بعدی از آدرس دوباره استفاده می کند. ( برای استفاده از آدرس های یکبار مصرف، از تنظیمات \"استفاده از آدرس پایا\" را غیرفعال کنید.)",
|
||||||
"gui_url_label_stay_open": "",
|
"gui_url_label_stay_open": "این اشتراک به صورت خودکار متوقف نمی شود.",
|
||||||
"gui_url_label_onetime": "",
|
"gui_url_label_onetime": "این اشتراک پس از اولین تکمیل متوقف خواهد شد.",
|
||||||
"gui_url_label_onetime_and_persistent": "",
|
"gui_url_label_onetime_and_persistent": "این اشتراک به صورت خودکار متوقف نمی شود.<br><br> هر اشتراک بعدی از آدرس دوباره استفاده میکند. (برای استفاده از آدرس های یکبار مصرف، از تنظیمات \"استفاده از آدرس پایا\" را غیرفعال کنید.)",
|
||||||
"gui_status_indicator_share_stopped": "",
|
"gui_status_indicator_share_stopped": "آماده به اشتراک گذاری",
|
||||||
"gui_status_indicator_share_working": "",
|
"gui_status_indicator_share_working": "در حال شروع…",
|
||||||
"gui_status_indicator_share_started": "",
|
"gui_status_indicator_share_started": "در حال اشتراک گذاری",
|
||||||
"gui_status_indicator_receive_stopped": "",
|
"gui_status_indicator_receive_stopped": "آماده دریافت",
|
||||||
"gui_status_indicator_receive_working": "",
|
"gui_status_indicator_receive_working": "در حال شروع…",
|
||||||
"gui_status_indicator_receive_started": "درحال دریافت",
|
"gui_status_indicator_receive_started": "درحال دریافت",
|
||||||
"gui_file_info": "",
|
"gui_file_info": "{} فایل ها، {}",
|
||||||
"gui_file_info_single": "",
|
"gui_file_info_single": "{} فایل، {}",
|
||||||
"history_in_progress_tooltip": "",
|
"history_in_progress_tooltip": "{} در حال انجام",
|
||||||
"history_completed_tooltip": "",
|
"history_completed_tooltip": "{} کامل شد",
|
||||||
"info_in_progress_uploads_tooltip": "",
|
"info_in_progress_uploads_tooltip": "{} آپلود در حال انجام",
|
||||||
"info_completed_uploads_tooltip": "",
|
"info_completed_uploads_tooltip": "{} آپلود کامل شد",
|
||||||
"error_cannot_create_downloads_dir": "",
|
"error_cannot_create_downloads_dir": "ناتوانی در ایجاد پوشه حالت دریافت: {}",
|
||||||
"receive_mode_downloads_dir": "",
|
"receive_mode_downloads_dir": "فایل های ارسال شده به شما در این پوشه پدیدار خواهند شد: {}",
|
||||||
"receive_mode_warning": "",
|
"receive_mode_warning": "هشدار: حالت دریافت به سایر افراد اجازه می دهد تا به روی کامپیوتر شما فایل آپلود کنند. برخی فایل ها را اگر باز کنید پتانسیل آن را دارند تا کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی که از کسانی دریافت کردید که به آن ها اعتماد دارید را باز کنید، یا اگر میدانید دارید چه کار میکنید.",
|
||||||
"gui_receive_mode_warning": "",
|
"gui_receive_mode_warning": "حالت دریافت به سایر افراد اجازه می دهد تا روی کامپیوتر شما فایل آپلود کنند.<br><br><b>برخی فایل ها را اگر باز کنید پتانسیل این را دارند که کنترل کامپیوتر شما را در دست بگیرند. فقط چیزهایی را باز کنید که از کسانی دریافت کرده اید که به آن ها اعتماد دارید، یا میدانید دارید چه کار میکنید.</b>",
|
||||||
"receive_mode_upload_starting": "",
|
"receive_mode_upload_starting": "آپلود حجم کلی {} در حال آغاز می باشد",
|
||||||
"receive_mode_received_file": "",
|
"receive_mode_received_file": "دریافت شده: {}",
|
||||||
"gui_mode_share_button": "",
|
"gui_mode_share_button": "اشتراک گذاری فایل ها",
|
||||||
"gui_mode_receive_button": "",
|
"gui_mode_receive_button": "دریافت فایل ها",
|
||||||
"gui_settings_receiving_label": "",
|
"gui_settings_receiving_label": "تنظیمات دریافت",
|
||||||
"gui_settings_downloads_label": "",
|
"gui_settings_downloads_label": "ذخیره فایل ها در",
|
||||||
"gui_settings_downloads_button": "فهرست",
|
"gui_settings_downloads_button": "فهرست",
|
||||||
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
||||||
"gui_settings_public_mode_checkbox": "",
|
"gui_settings_public_mode_checkbox": "حالت عمومی",
|
||||||
"systray_close_server_title": "",
|
"systray_close_server_title": "سرور OnionShare بسته شد",
|
||||||
"systray_close_server_message": "",
|
"systray_close_server_message": "یک کاربر سرور را بست",
|
||||||
"systray_page_loaded_title": "",
|
"systray_page_loaded_title": "صفحه بارگذاری شد",
|
||||||
"systray_download_page_loaded_message": "",
|
"systray_download_page_loaded_message": "یک کاربر صفحه دانلود را بارگذاری کرد",
|
||||||
"systray_upload_page_loaded_message": "",
|
"systray_upload_page_loaded_message": "یک کاربر صفحه آپلود را بارگذاری کرد",
|
||||||
"gui_uploads": "",
|
"gui_uploads": "تاریخچه آپلود",
|
||||||
"gui_no_uploads": "",
|
"gui_no_uploads": "هیچ آپلودی هنوز وجود ندارد",
|
||||||
"gui_clear_history": "",
|
"gui_clear_history": "پاکسازی همه",
|
||||||
"gui_upload_in_progress": "",
|
"gui_upload_in_progress": "آپلود آغاز شد {}",
|
||||||
"gui_upload_finished_range": "",
|
"gui_upload_finished_range": "{} به {} آپلود شد",
|
||||||
"gui_upload_finished": "",
|
"gui_upload_finished": "{} آپلود شد",
|
||||||
"gui_download_in_progress": "دانلود آغاز شد {}",
|
"gui_download_in_progress": "دانلود آغاز شد {}",
|
||||||
"gui_open_folder_error_nautilus": "",
|
"gui_open_folder_error_nautilus": "ناتوانی در باز کردن پوشه به دلیل موجود نبودن ناتیلوس. فایل در اینجا قرار دارد: {}",
|
||||||
"gui_settings_language_label": "زبان ترجیحی",
|
"gui_settings_language_label": "زبان ترجیحی",
|
||||||
"gui_settings_language_changed_notice": "",
|
"gui_settings_language_changed_notice": "ری استارت OnionShare برای دیدن نتیجه اعمال تغییر در زبان.",
|
||||||
"timeout_upload_still_running": "انتظار برای تکمیل آپلود",
|
"timeout_upload_still_running": "انتظار برای تکمیل آپلود",
|
||||||
"gui_add_files": "افزودن فایل ها",
|
"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": "{} لغو شد"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"preparing_files": "Compression des fichiers.",
|
"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",
|
"ctrlc_to_stop": "Appuyez sur Ctrl+c pour arrêter le serveur",
|
||||||
"not_a_file": "{0:s} n'est pas un fichier valide.",
|
"not_a_file": "{0:s} n’est pas un fichier valide.",
|
||||||
"other_page_loaded": "Adresse chargée",
|
"other_page_loaded": "L’adresse a été chargée",
|
||||||
"closing_automatically": "Arrêt automatique car le téléchargement est fini",
|
"closing_automatically": "Arrêté, car le transfert est fini",
|
||||||
"systray_menu_exit": "Quitter",
|
"systray_menu_exit": "Quitter",
|
||||||
"systray_download_started_title": "Téléchargement OnionShare démarré",
|
"systray_download_started_title": "Téléchargement OnionShare démarré",
|
||||||
"systray_download_started_message": "Une personne télécharge vos fichiers",
|
"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_title": "Téléchargement OnionShare annulé",
|
||||||
"systray_download_canceled_message": "La personne a annulé le téléchargement",
|
"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_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_stay_open": "Continuer le partage après l’envoi des fichiers",
|
||||||
"help_debug": "Enregistrer les erreurs OnionShare sur la sortie standard, et les erreurs web sur le disque",
|
"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",
|
"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_add": "Ajouter",
|
||||||
"gui_delete": "Supprimer",
|
"gui_delete": "Supprimer",
|
||||||
"gui_choose_items": "Sélectionner",
|
"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_share_stop_server": "Arrêter le partage",
|
||||||
"gui_copy_url": "Copier l'adresse",
|
"gui_copy_url": "Copier l'adresse",
|
||||||
"gui_copy_hidservauth": "Copier HidServAuth",
|
"gui_copy_hidservauth": "Copier HidServAuth",
|
||||||
|
@ -32,16 +32,16 @@
|
||||||
"gui_settings_autoupdate_timestamp_never": "Jamais",
|
"gui_settings_autoupdate_timestamp_never": "Jamais",
|
||||||
"gui_settings_language_changed_notice": "Redémarrez OnionShare pour que votre changement de langue prenne effet.",
|
"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}.",
|
"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_stealth": "Donnez cette adresse et cette ligne HidServAuth au destinataire :",
|
||||||
"give_this_url_receive": "Donnez cette adresse à l'expéditeur :",
|
"give_this_url_receive": "Donnez cette adresse à l’expéditeur :",
|
||||||
"give_this_url_receive_stealth": "Donnez cette adresse et HidServAuth à 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.",
|
"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",
|
"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",
|
"systray_download_completed_message": "La personne a terminé de télécharger vos fichiers",
|
||||||
"gui_copied_hidservauth_title": "HidServAuth copié",
|
"gui_copied_hidservauth_title": "HidServAuth copié",
|
||||||
"gui_settings_window_title": "Paramètres",
|
"gui_settings_window_title": "Paramètres",
|
||||||
"gui_settings_autoupdate_timestamp": "Dernière vérification : {}",
|
"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_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_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",
|
"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_no_auth_option": "Pas d'authentification ou authentification par cookie",
|
||||||
"gui_settings_authenticate_password_option": "Mot de passe",
|
"gui_settings_authenticate_password_option": "Mot de passe",
|
||||||
"gui_settings_password_label": "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_save": "Sauvegarder",
|
||||||
"gui_settings_button_cancel": "Annuler",
|
"gui_settings_button_cancel": "Annuler",
|
||||||
"gui_settings_button_help": "Aide",
|
"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",
|
"connecting_to_tor": "Connexion au réseau Tor",
|
||||||
"help_config": "Emplacement du fichier de configuration JSON personnalisé (optionnel)",
|
"help_config": "Emplacement du fichier personnalisé de configuration JSON (facultatif)",
|
||||||
"large_filesize": "Avertissement : envoyer un gros fichier peut prendre plusieurs heures",
|
"large_filesize": "Avertissement : envoyer un gros partage peut prendre des heures",
|
||||||
"gui_copied_hidservauth": "Ligne HidServAuth copiée dans le presse-papiers",
|
"gui_copied_hidservauth": "Ligne HidServAuth copiée dans le presse-papiers",
|
||||||
"version_string": "OnionShare {0:s} | https://onionshare.org/",
|
"version_string": "OnionShare {0:s} | https://onionshare.org/",
|
||||||
"zip_progress_bar_format": "Compression : %p%",
|
"zip_progress_bar_format": "Compression : %p%",
|
||||||
|
@ -83,10 +83,10 @@
|
||||||
"gui_settings_connection_type_test_button": "Tester la connexion à Tor",
|
"gui_settings_connection_type_test_button": "Tester la connexion à Tor",
|
||||||
"gui_settings_control_port_label": "Port de contrôle",
|
"gui_settings_control_port_label": "Port de contrôle",
|
||||||
"gui_settings_authenticate_label": "Paramètres d'authentification de Tor",
|
"gui_settings_authenticate_label": "Paramètres d'authentification de Tor",
|
||||||
"gui_settings_tor_bridges": "Support des bridges Tor",
|
"gui_settings_tor_bridges": "Prise en charge des ponts de Tor",
|
||||||
"gui_settings_tor_bridges_custom_radio_option": "Utiliser des bridges personnalisés",
|
"gui_settings_tor_bridges_custom_radio_option": "Utiliser des ponts 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_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 bridges que vous avez ajouté ne fonctionne.\nVérifiez les à nouveau ou ajoutez-en d'autres.",
|
"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_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_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 à {}:{}.",
|
"settings_error_socket_port": "Impossible de se connecter au contrôleur Tor à {}:{}.",
|
||||||
|
@ -108,11 +108,11 @@
|
||||||
"share_via_onionshare": "Partager via OnionShare",
|
"share_via_onionshare": "Partager via OnionShare",
|
||||||
"gui_save_private_key_checkbox": "Utiliser une adresse persistante",
|
"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_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_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>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_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_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": "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>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_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_stopped": "Prêt à partager",
|
||||||
"gui_status_indicator_share_working": "Démarrage…",
|
"gui_status_indicator_share_working": "Démarrage…",
|
||||||
"gui_status_indicator_share_started": "Partage",
|
"gui_status_indicator_share_started": "Partage",
|
||||||
|
@ -124,8 +124,8 @@
|
||||||
"history_in_progress_tooltip": "{} en cours",
|
"history_in_progress_tooltip": "{} en cours",
|
||||||
"history_completed_tooltip": "{} terminé",
|
"history_completed_tooltip": "{} terminé",
|
||||||
"receive_mode_downloads_dir": "Les fichiers qui vous sont envoyés apparaissent dans ce dossier : {}",
|
"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.",
|
"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 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>",
|
"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 : {}",
|
"receive_mode_received_file": "Reçu : {}",
|
||||||
"gui_mode_share_button": "Fichiers partagés",
|
"gui_mode_share_button": "Fichiers partagés",
|
||||||
"gui_mode_receive_button": "Fichiers reçus",
|
"gui_mode_receive_button": "Fichiers reçus",
|
||||||
|
@ -144,7 +144,7 @@
|
||||||
"gui_download_in_progress": "Téléchargement démarré {}",
|
"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_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",
|
"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",
|
"help_receive": "Recevoir des partages au lieu de les envoyer",
|
||||||
"gui_receive_start_server": "Démarrer le mode réception",
|
"gui_receive_start_server": "Démarrer le mode réception",
|
||||||
"gui_receive_stop_server": "Arrêter 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_complete": "%p%, {0:s} écoulées.",
|
||||||
"gui_download_upload_progress_starting": "{0:s}, %p% (estimation)",
|
"gui_download_upload_progress_starting": "{0:s}, %p% (estimation)",
|
||||||
"gui_download_upload_progress_eta": "{0:s}, Fin : {1:s}, %p%",
|
"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.",
|
"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",
|
"gui_settings_stealth_option": "Utiliser l'autorisation client",
|
||||||
"timeout_upload_still_running": "En attente de la fin de l'envoi",
|
"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_in_progress_uploads_tooltip": "{} envoi(s) en cours",
|
||||||
"info_completed_uploads_tooltip": "{} envoi(s) terminé(s)",
|
"info_completed_uploads_tooltip": "{} envoi(s) terminé(s)",
|
||||||
"error_cannot_create_downloads_dir": "Impossible de créer le dossier du mode réception : {}",
|
"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_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_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",
|
"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_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 après {}",
|
"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": "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": "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_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 : 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_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_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_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 a déjà expiré.\nVeuillez la mettre à jour pour démarrer le 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é parce que la minuterie d'arrêt automatique a expiré",
|
"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 fichiers",
|
"gui_add_files": "Ajouter des fichiers",
|
||||||
"gui_add_folder": "Ajouter dossier"
|
"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é {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,7 @@
|
||||||
"gui_settings_language_changed_notice": "Riavvia OnionShare affinché il cambiamento della tua lingua abbia effetto.",
|
"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",
|
"gui_settings_tor_bridges_custom_radio_option": "Utilizzare ponti personalizzati",
|
||||||
"timeout_upload_still_running": "In attesa del completamento dell'upload",
|
"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_add_folder": "Aggiungi una cartella",
|
||||||
"gui_settings_connection_type_control_port_option": "Connessione usando la porta di controllo",
|
"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",
|
"gui_settings_connection_type_socket_file_option": "Connessione usando il file di socket",
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
"no_available_port": "onionサービスを実行するための利用可能ポートを見つかりません",
|
"no_available_port": "onionサービスを実行するための利用可能ポートを見つかりません",
|
||||||
"other_page_loaded": "アドレスはロードされています",
|
"other_page_loaded": "アドレスはロードされています",
|
||||||
"close_on_timeout": "自動タイマーがタイムアウトしたため停止されました",
|
"close_on_timeout": "自動タイマーがタイムアウトしたため停止されました",
|
||||||
"closing_automatically": "ダウンロードが完了されたため停止されました",
|
"closing_automatically": "転送が完了されたため停止されました",
|
||||||
"timeout_download_still_running": "ダウンロード完了待ち",
|
"timeout_download_still_running": "ダウンロード完了待ち",
|
||||||
"timeout_upload_still_running": "アップロード完了待ち",
|
"timeout_upload_still_running": "アップロード完了待ち",
|
||||||
"large_filesize": "注意:大きいなファイルを送信するに数時間かかるかもしれない",
|
"large_filesize": "注意:大きいなファイルを送信するに数時間かかるかもしれない",
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
"systray_upload_started_title": "OnionShareアップロードは開始されました",
|
"systray_upload_started_title": "OnionShareアップロードは開始されました",
|
||||||
"systray_upload_started_message": "ユーザーがファイルをアップロードし始めました",
|
"systray_upload_started_message": "ユーザーがファイルをアップロードし始めました",
|
||||||
"help_local_only": "Torを使わない(開発利用のみ)",
|
"help_local_only": "Torを使わない(開発利用のみ)",
|
||||||
"help_stay_open": "最初ダウンロード後に共有し続けます",
|
"help_stay_open": "ファイルが送信された後に共有し続けます",
|
||||||
"help_shutdown_timeout": "数秒後に共有が停止されます",
|
"help_shutdown_timeout": "数秒後に共有が停止されます",
|
||||||
"help_stealth": "クライアント認証を使う(上級者向け)",
|
"help_stealth": "クライアント認証を使う(上級者向け)",
|
||||||
"help_receive": "送信の代わりに受信を優先する",
|
"help_receive": "送信の代わりに受信を優先する",
|
||||||
|
@ -72,7 +72,7 @@
|
||||||
"gui_settings_window_title": "設定",
|
"gui_settings_window_title": "設定",
|
||||||
"gui_settings_whats_this": "<a href='{0:s}'>これは何ですか?</a>",
|
"gui_settings_whats_this": "<a href='{0:s}'>これは何ですか?</a>",
|
||||||
"gui_settings_stealth_option": "クライアント認証を使用",
|
"gui_settings_stealth_option": "クライアント認証を使用",
|
||||||
"gui_settings_stealth_hidservauth_string": "秘密鍵を保存したので、クリックしてHidServAuthをコピーできます。",
|
"gui_settings_stealth_hidservauth_string": "秘密鍵を保存したので、\nクリックしてHidServAuthをコピーできます。",
|
||||||
"gui_settings_autoupdate_label": "更新バージョンの有無をチェックする",
|
"gui_settings_autoupdate_label": "更新バージョンの有無をチェックする",
|
||||||
"gui_settings_autoupdate_option": "更新通知を起動します",
|
"gui_settings_autoupdate_option": "更新通知を起動します",
|
||||||
"gui_settings_autoupdate_timestamp": "前回にチェックした時: {}",
|
"gui_settings_autoupdate_timestamp": "前回にチェックした時: {}",
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
"gui_settings_autoupdate_check_button": "更新をチェックする",
|
"gui_settings_autoupdate_check_button": "更新をチェックする",
|
||||||
"gui_settings_general_label": "一般的設定",
|
"gui_settings_general_label": "一般的設定",
|
||||||
"gui_settings_sharing_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_label": "OnionShareがどうやってTorと接続して欲しい?",
|
||||||
"gui_settings_connection_type_bundled_option": "OnionShareに組み込まれるTorバージョンを使用する",
|
"gui_settings_connection_type_bundled_option": "OnionShareに組み込まれるTorバージョンを使用する",
|
||||||
"gui_settings_connection_type_automatic_option": "Torブラウザと自動設定してみる",
|
"gui_settings_connection_type_automatic_option": "Torブラウザと自動設定してみる",
|
||||||
|
@ -109,80 +109,107 @@
|
||||||
"gui_settings_button_help": "ヘルプ",
|
"gui_settings_button_help": "ヘルプ",
|
||||||
"gui_settings_shutdown_timeout_checkbox": "自動停止タイマーを使用する",
|
"gui_settings_shutdown_timeout_checkbox": "自動停止タイマーを使用する",
|
||||||
"gui_settings_shutdown_timeout": "共有を停止する時間:",
|
"gui_settings_shutdown_timeout": "共有を停止する時間:",
|
||||||
"settings_error_unknown": "",
|
"settings_error_unknown": "設定を解釈できないため、Torコントローラーと接続できません。",
|
||||||
"settings_error_automatic": "",
|
"settings_error_automatic": "Torコントローラーと接続できません。Torブラウザ(torproject.orgから入手できる)がバックグラウンドで動作していますか?",
|
||||||
"settings_error_socket_port": "",
|
"settings_error_socket_port": "{}:{}でTorコントローラーと接続できません。",
|
||||||
"settings_error_socket_file": "",
|
"settings_error_socket_file": "ソケットファイル{}を使用してTorコントローラーと接続できません。",
|
||||||
"settings_error_auth": "",
|
"settings_error_auth": "{}:{}と接続できましたが、認証ができません。これは実際にTorコントローラーですか?",
|
||||||
"settings_error_missing_password": "",
|
"settings_error_missing_password": "Torコントローラーと接続できましたが、認証にはパスワードが必要です。",
|
||||||
"settings_error_unreadable_cookie_file": "",
|
"settings_error_unreadable_cookie_file": "Torコントローラーと接続できましたが、パスワードが診違っているあるいはクッキーファイルの読み出し許可がないかもしれない。",
|
||||||
"settings_error_bundled_tor_not_supported": "",
|
"settings_error_bundled_tor_not_supported": "OnionShareに組み込まれているTorバージョンはWindowsやmacOSの開発者モードで動作できません。",
|
||||||
"settings_error_bundled_tor_timeout": "",
|
"settings_error_bundled_tor_timeout": "Torとの接続は時間がかかり過ぎます。インターネットとの接続、あるいはシステム・クロックの精度には問題がありますか?",
|
||||||
"settings_error_bundled_tor_broken": "",
|
"settings_error_bundled_tor_broken": "OnionShareはバックグラウンドで動作しているTorと接続できませんでした:\n{}",
|
||||||
"settings_test_success": "",
|
"settings_test_success": "Torコントローラーと接続完了。\n\nTorバージョン:{}\nエフェメラルonionサービスをサポートする:{}\nクライアント認証をサポートする:{}\nnext-gen .onionアドレスをサポートする:{}.",
|
||||||
"error_tor_protocol_error": "",
|
"error_tor_protocol_error": "Torとのエラーが生じました: {}",
|
||||||
"error_tor_protocol_error_unknown": "",
|
"error_tor_protocol_error_unknown": "Torとの未知のエラーが生じました",
|
||||||
"error_invalid_private_key": "",
|
"error_invalid_private_key": "この秘密鍵形式は未対応である",
|
||||||
"connecting_to_tor": "",
|
"connecting_to_tor": "Torネットワークと接続中",
|
||||||
"update_available": "",
|
"update_available": "OnionShareの新バージョンはリリースされました。<a href='{}'>こちら</a>から入手できます。<br><br>現行バージョンは{}そして最新バージョンは{}。",
|
||||||
"update_error_check_error": "",
|
"update_error_check_error": "新バージョンのチェックをできなかった:OnionShare公式サイトによれば、最新バージョンは認識できない '{}'です…",
|
||||||
"update_error_invalid_latest_version": "",
|
"update_error_invalid_latest_version": "新バージョンのチェックをできなかった:多分Torと接続していない、あるいはOnionShare公式サイトはダウンかもしれない?",
|
||||||
"update_not_available": "",
|
"update_not_available": "OnionShareの最新バージョンを使っています。",
|
||||||
"gui_tor_connection_ask": "",
|
"gui_tor_connection_ask": "設定を開いて、Torとの接続問題を解決しますか?",
|
||||||
"gui_tor_connection_ask_open_settings": "",
|
"gui_tor_connection_ask_open_settings": "はい",
|
||||||
"gui_tor_connection_ask_quit": "",
|
"gui_tor_connection_ask_quit": "終了",
|
||||||
"gui_tor_connection_error_settings": "",
|
"gui_tor_connection_error_settings": "設定でTorとの接続方法を変更してみて下さい。",
|
||||||
"gui_tor_connection_canceled": "",
|
"gui_tor_connection_canceled": "Torと接続できませんでした。\n\nインターネット接続を確認してから、OnionShareを再開してTorとの接続を設定して下さい。",
|
||||||
"gui_tor_connection_lost": "",
|
"gui_tor_connection_lost": "Torから切断されました。",
|
||||||
"gui_server_started_after_timeout": "",
|
"gui_server_started_after_timeout": "サーバーが起動した前、自動停止タイマーがタイムアウトしました。\n再びファイル共有をして下さい。",
|
||||||
"gui_server_timeout_expired": "",
|
"gui_server_timeout_expired": "自動停止タイマーはすでにタイムアウトしています。\n共有し始めるにはリセットして下さい。",
|
||||||
"share_via_onionshare": "",
|
"share_via_onionshare": "OnionShareで共有する",
|
||||||
"gui_connect_to_tor_for_onion_settings": "",
|
"gui_connect_to_tor_for_onion_settings": "onionサービス設定を見るのにTorと接続して下さい",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "",
|
"gui_use_legacy_v2_onions_checkbox": "レガシーアドレスを使用する",
|
||||||
"gui_save_private_key_checkbox": "",
|
"gui_save_private_key_checkbox": "永続的アドレスを使用する",
|
||||||
"gui_share_url_description": "",
|
"gui_share_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Torブラウザー</b>を利用してこのファイルを<b>ダウンロードできます</b>:<img src='{}' />",
|
||||||
"gui_receive_url_description": "",
|
"gui_receive_url_description": "このOnionShareアドレスを持つ限り<b>誰でも</b>は<b>Torブラウザー</b>を利用してこのPCにファイルを<b>アップロードできます</b>:<img src='{}' />",
|
||||||
"gui_url_label_persistent": "",
|
"gui_url_label_persistent": "このファイル共有には自動停止はありません。<br><br>その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)",
|
||||||
"gui_url_label_stay_open": "",
|
"gui_url_label_stay_open": "このファイル共有には自動停止はありません。",
|
||||||
"gui_url_label_onetime": "",
|
"gui_url_label_onetime": "このファイル共有は最初の完了後に停止されます。",
|
||||||
"gui_url_label_onetime_and_persistent": "",
|
"gui_url_label_onetime_and_persistent": "このファイル共有には自動停止はありません。<br><br>その次の共有は同じアドレスを再利用します。(1回限りのアドレスには、設定で「永続的アドレス」を無効にして下さい。)",
|
||||||
"gui_status_indicator_share_stopped": "",
|
"gui_status_indicator_share_stopped": "共有の準備完了",
|
||||||
"gui_status_indicator_share_working": "",
|
"gui_status_indicator_share_working": "起動しています…",
|
||||||
"gui_status_indicator_share_started": "",
|
"gui_status_indicator_share_started": "共有中",
|
||||||
"gui_status_indicator_receive_stopped": "",
|
"gui_status_indicator_receive_stopped": "受信の準備完了",
|
||||||
"gui_status_indicator_receive_working": "",
|
"gui_status_indicator_receive_working": "起動しています…",
|
||||||
"gui_status_indicator_receive_started": "",
|
"gui_status_indicator_receive_started": "受信中",
|
||||||
"gui_file_info": "",
|
"gui_file_info": "{} ファイル, {}",
|
||||||
"gui_file_info_single": "",
|
"gui_file_info_single": "{} ファイル, {}",
|
||||||
"history_in_progress_tooltip": "",
|
"history_in_progress_tooltip": "{} 進行中",
|
||||||
"history_completed_tooltip": "",
|
"history_completed_tooltip": "{} 完了",
|
||||||
"info_in_progress_uploads_tooltip": "",
|
"info_in_progress_uploads_tooltip": "{} 進行中のアップロード",
|
||||||
"info_completed_uploads_tooltip": "",
|
"info_completed_uploads_tooltip": "{} 完了のアップロード",
|
||||||
"error_cannot_create_downloads_dir": "",
|
"error_cannot_create_downloads_dir": "受信モードフォルダを作成できなかった: {}",
|
||||||
"receive_mode_downloads_dir": "",
|
"receive_mode_downloads_dir": "受信されるファイルはこのフォルダに保存されます: {}",
|
||||||
"receive_mode_warning": "",
|
"receive_mode_warning": "警告:受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。",
|
||||||
"gui_receive_mode_warning": "",
|
"gui_receive_mode_warning": "受信モードで他の人はあなたのPCへファイルをアップロードできるようにします。<br><br><b>悪意なファイルを開いたら、PCは感染される可能性があります。ファイル内容を完全に理解しない場合、信用している人のみからのファイルを開いて下さい。</b>",
|
||||||
"receive_mode_upload_starting": "",
|
"receive_mode_upload_starting": "ファイルサイズ{}のアップロードが実行中",
|
||||||
"receive_mode_received_file": "",
|
"receive_mode_received_file": "受信した: {}",
|
||||||
"gui_mode_share_button": "",
|
"gui_mode_share_button": "ファイル共有",
|
||||||
"gui_mode_receive_button": "",
|
"gui_mode_receive_button": "ファイル受信",
|
||||||
"gui_settings_receiving_label": "",
|
"gui_settings_receiving_label": "受信設定",
|
||||||
"gui_settings_downloads_label": "",
|
"gui_settings_downloads_label": "保存フォルダ",
|
||||||
"gui_settings_downloads_button": "",
|
"gui_settings_downloads_button": "選ぶ",
|
||||||
"gui_settings_public_mode_checkbox": "",
|
"gui_settings_public_mode_checkbox": "公開モード",
|
||||||
"systray_close_server_title": "",
|
"systray_close_server_title": "OnionShareサーバーは閉鎖されました",
|
||||||
"systray_close_server_message": "",
|
"systray_close_server_message": "ユーザーがサーバーを閉鎖しました",
|
||||||
"systray_page_loaded_title": "",
|
"systray_page_loaded_title": "ページはロードされました",
|
||||||
"systray_download_page_loaded_message": "",
|
"systray_download_page_loaded_message": "ユーザーがダウンロードページをロードしました",
|
||||||
"systray_upload_page_loaded_message": "",
|
"systray_upload_page_loaded_message": "ユーザーがアップロードページをロードしました",
|
||||||
"gui_uploads": "",
|
"gui_uploads": "アップロード履歴",
|
||||||
"gui_no_uploads": "",
|
"gui_no_uploads": "アップロードはまだありません",
|
||||||
"gui_clear_history": "",
|
"gui_clear_history": "全てをクリアする",
|
||||||
"gui_upload_in_progress": "",
|
"gui_upload_in_progress": "アップロード開始しました {}",
|
||||||
"gui_upload_finished_range": "",
|
"gui_upload_finished_range": "{}を{}にアップロードしました",
|
||||||
"gui_upload_finished": "",
|
"gui_upload_finished": "{}をアップロードしました",
|
||||||
"gui_download_in_progress": "",
|
"gui_download_in_progress": "ダウンロード開始しました {}",
|
||||||
"gui_open_folder_error_nautilus": "",
|
"gui_open_folder_error_nautilus": "nautilusを利用できないためフォルダーを開けません。ファイルはここに保存されました: {}",
|
||||||
"gui_settings_language_label": "",
|
"gui_settings_language_label": "優先言語",
|
||||||
"gui_settings_language_changed_notice": ""
|
"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": "受信完了を待機しています"
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
"systray_upload_started_title": "OnionShare-opplasting startet",
|
"systray_upload_started_title": "OnionShare-opplasting startet",
|
||||||
"systray_upload_started_message": "En bruker startet opplasting av filer til din datamaskin",
|
"systray_upload_started_message": "En bruker startet opplasting av filer til din datamaskin",
|
||||||
"help_local_only": "Ikke bruk Tor (kun i utviklingsøyemed)",
|
"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_shutdown_timeout": "Stopp deling etter et gitt antall sekunder",
|
||||||
"help_stealth": "Bruk klientidentifisering (avansert)",
|
"help_stealth": "Bruk klientidentifisering (avansert)",
|
||||||
"help_receive": "Motta delinger istedenfor å sende dem",
|
"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.",
|
"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_window_title": "Innstillinger",
|
||||||
"gui_settings_whats_this": "<a href='{0:s}'>Hva er dette?</a>",
|
"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_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_label": "Se etter ny versjon",
|
||||||
"gui_settings_autoupdate_option": "Gi meg beskjed når en ny versjon er tilgjengelig",
|
"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_autoupdate_check_button": "Se etter ny versjon",
|
||||||
"gui_settings_general_label": "Hovedinnstillinger",
|
"gui_settings_general_label": "Hovedinnstillinger",
|
||||||
"gui_settings_sharing_label": "Delingsinnstillinger",
|
"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_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_bundled_option": "Bruk Tor-versjonen som kommer med OnionShare",
|
||||||
"gui_settings_connection_type_automatic_option": "Forsøk automatisk oppsett med Tor-nettleser",
|
"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.",
|
"gui_server_timeout_expired": "Tidsavbruddsuret har gått ut allerede.\nOppdater det for å starte deling.",
|
||||||
"share_via_onionshare": "OnionShare det",
|
"share_via_onionshare": "OnionShare det",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "Bruk gammeldagse adresser",
|
"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_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_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.)",
|
"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",
|
"gui_settings_public_mode_checkbox": "Offentlig modus",
|
||||||
"systray_close_server_title": "OnionShare-tjener lukket",
|
"systray_close_server_title": "OnionShare-tjener lukket",
|
||||||
"systray_close_server_message": "En bruker stengte tjeneren",
|
"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_download_page_loaded_message": "En bruker lastet inn nedlastingssiden",
|
||||||
"systray_upload_page_loaded_message": "En bruker lastet inn opplastingssiden",
|
"systray_upload_page_loaded_message": "En bruker lastet inn opplastingssiden",
|
||||||
"gui_uploads": "Opplastingshistorikk",
|
"gui_uploads": "Opplastingshistorikk",
|
||||||
|
@ -189,5 +189,32 @@
|
||||||
"timeout_upload_still_running": "Venter på at opplastingen fullføres",
|
"timeout_upload_still_running": "Venter på at opplastingen fullføres",
|
||||||
"gui_add_files": "Legg til filer",
|
"gui_add_files": "Legg til filer",
|
||||||
"gui_add_folder": "Legg til mappe",
|
"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 {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
"preparing_files": "Comprimindo arquivos.",
|
"preparing_files": "Comprimindo arquivos.",
|
||||||
"give_this_url": "Dar este endereço ao destinatário:",
|
"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_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": "Enviar este endereço à pessoa remetente:",
|
||||||
"give_this_url_receive_stealth": "Dar este endereço e HidServAuth ao remetente:",
|
"give_this_url_receive_stealth": "Dar este endereço e HidServAuth à pessoa remetente:",
|
||||||
"ctrlc_to_stop": "Pressione Ctrl+C para interromper o servidor",
|
"ctrlc_to_stop": "Pressione Ctrl+C para interromper o servidor",
|
||||||
"not_a_file": "{0:s} não é um ficheiro válido.",
|
"not_a_file": "{0:s} não é um ficheiro válido.",
|
||||||
"not_a_readable_file": "{0:s} não é um ficheiro legível.",
|
"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",
|
"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",
|
"other_page_loaded": "Endereço carregado",
|
||||||
"close_on_timeout": "Interrompido ao final da contagem do cronômetro automático",
|
"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",
|
"timeout_download_still_running": "Esperando que o download termine",
|
||||||
"large_filesize": "Aviso: O envio de arquivos grandes pode levar várias horas",
|
"large_filesize": "Aviso: O envio de arquivos grandes pode levar várias horas",
|
||||||
"systray_menu_exit": "Sair",
|
"systray_menu_exit": "Sair",
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
"systray_upload_started_title": "OnionShare começou a carregar",
|
"systray_upload_started_title": "OnionShare começou a carregar",
|
||||||
"systray_upload_started_message": "Alguém começou a carregar arquivos no seu computador",
|
"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_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_shutdown_timeout": "Parar de compartilhar após um número determinado de segundos",
|
||||||
"help_stealth": "Usar autorização de cliente (avançado)",
|
"help_stealth": "Usar autorização de cliente (avançado)",
|
||||||
"help_receive": "Receber compartilhamentos ao invés de enviá-los",
|
"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.",
|
"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_window_title": "Configurações",
|
||||||
"gui_settings_whats_this": "<a href='{0:s}'>O que é isso?</a>",
|
"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_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_label": "Procurar a nova versão",
|
||||||
"gui_settings_autoupdate_option": "Notificar-me quando uma nova versão estiver disponível",
|
"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_autoupdate_check_button": "Procurar a nova versão",
|
||||||
"gui_settings_general_label": "Configurações gerais",
|
"gui_settings_general_label": "Configurações gerais",
|
||||||
"gui_settings_sharing_label": "Compartilhando configurações",
|
"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_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_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",
|
"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_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_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_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_started_after_timeout": "O tempo 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.",
|
"gui_server_timeout_expired": "O temporizador já esgotou.\nPor favor, atualize-o antes de começar a compartilhar.",
|
||||||
"share_via_onionshare": "Compartilhar por meio de OnionShare",
|
"share_via_onionshare": "Compartilhar usando OnionShare",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "Usar endereços do tipo antigo",
|
"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_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_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, desligue a opção \"Usar endereço persistente\" nas configurações.)",
|
"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_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": "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, desligue a opção \"Usar endereço persistente\" nas configurações.)",
|
"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_stopped": "Pronto para compartilhar",
|
||||||
"gui_status_indicator_share_working": "Começando…",
|
"gui_status_indicator_share_working": "Começando…",
|
||||||
"gui_status_indicator_share_started": "Compartilhando",
|
"gui_status_indicator_share_started": "Compartilhando",
|
||||||
|
@ -149,8 +149,8 @@
|
||||||
"gui_status_indicator_receive_working": "Começando…",
|
"gui_status_indicator_receive_working": "Começando…",
|
||||||
"gui_status_indicator_receive_started": "Recebendo",
|
"gui_status_indicator_receive_started": "Recebendo",
|
||||||
"gui_file_info": "{} arquivos, {}",
|
"gui_file_info": "{} arquivos, {}",
|
||||||
"gui_file_info_single": "{} ficheiro, {}",
|
"gui_file_info_single": "{} arquivo, {}",
|
||||||
"history_in_progress_tooltip": "{} em progresso",
|
"history_in_progress_tooltip": "{} em curso",
|
||||||
"history_completed_tooltip": "{} completado",
|
"history_completed_tooltip": "{} completado",
|
||||||
"info_in_progress_uploads_tooltip": "{} upload(s) em progresso",
|
"info_in_progress_uploads_tooltip": "{} upload(s) em progresso",
|
||||||
"info_completed_uploads_tooltip": "{} upload(s) completado(s)",
|
"info_completed_uploads_tooltip": "{} upload(s) completado(s)",
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
"gui_settings_public_mode_checkbox": "Modo público",
|
"gui_settings_public_mode_checkbox": "Modo público",
|
||||||
"systray_close_server_title": "Servidor OnionShare encerrado",
|
"systray_close_server_title": "Servidor OnionShare encerrado",
|
||||||
"systray_close_server_message": "Um usuário encerrou o servidor",
|
"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_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",
|
"systray_upload_page_loaded_message": "Um usuário carregou a página de upload",
|
||||||
"gui_uploads": "Histórico de Uploads",
|
"gui_uploads": "Histórico de Uploads",
|
||||||
|
@ -180,7 +180,33 @@
|
||||||
"gui_upload_finished": "Upload realizado de {}",
|
"gui_upload_finished": "Upload realizado de {}",
|
||||||
"gui_download_in_progress": "Download Iniciado {}",
|
"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_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_label": "Idioma",
|
||||||
"gui_settings_language_changed_notice": "Reinicie o OnionShare para que sua alteração de idioma tenha efeito.",
|
"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"
|
"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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"give_this_url": "Передайте этот адрес получателю:",
|
"give_this_url": "Передайте получателю этот адрес:",
|
||||||
"ctrlc_to_stop": "Нажмите Ctrl+C, чтобы остановить сервер",
|
"ctrlc_to_stop": "Нажмите Ctrl+C, чтобы остановить сервер",
|
||||||
"not_a_file": "{0:s} недопустимый файл.",
|
"not_a_file": "{0:s} недопустимый файл.",
|
||||||
"gui_copied_url": "Ссылка OnionShare скопирована в буфер обмена",
|
"gui_copied_url": "Ссылка OnionShare скопирована в буфер обмена",
|
||||||
"other_page_loaded": "Адрес загружен",
|
"other_page_loaded": "Адрес загружен",
|
||||||
"gui_copy_url": "Скопировать ссылку",
|
"gui_copy_url": "Копировать ссылку",
|
||||||
"systray_menu_exit": "Выйти",
|
"systray_menu_exit": "Выйти",
|
||||||
"gui_add": "Добавить",
|
"gui_add": "Добавить",
|
||||||
"gui_delete": "Удалить",
|
"gui_delete": "Удалить",
|
||||||
|
@ -14,21 +14,21 @@
|
||||||
"gui_quit_warning_dont_quit": "Отмена",
|
"gui_quit_warning_dont_quit": "Отмена",
|
||||||
"gui_settings_window_title": "Настройки",
|
"gui_settings_window_title": "Настройки",
|
||||||
"gui_settings_autoupdate_timestamp_never": "Никогда",
|
"gui_settings_autoupdate_timestamp_never": "Никогда",
|
||||||
"gui_settings_general_label": "Общие настройки",
|
"gui_settings_general_label": "Общие настройки:",
|
||||||
"gui_settings_control_port_label": "Контрольный порт",
|
"gui_settings_control_port_label": "Контрольный порт",
|
||||||
"gui_settings_authenticate_password_option": "Пароль",
|
"gui_settings_authenticate_password_option": "Пароль",
|
||||||
"gui_settings_password_label": "Пароль",
|
"gui_settings_password_label": "Пароль",
|
||||||
"gui_settings_button_save": "Сохранить",
|
"gui_settings_button_save": "Сохранить",
|
||||||
"gui_settings_button_cancel": "Отмена",
|
"gui_settings_button_cancel": "Отмена",
|
||||||
"gui_settings_button_help": "Помощь",
|
"gui_settings_button_help": "Помощь",
|
||||||
"gui_tor_connection_ask_open_settings": "Есть",
|
"gui_tor_connection_ask_open_settings": "Настройки",
|
||||||
"gui_tor_connection_ask_quit": "Выйти",
|
"gui_tor_connection_ask_quit": "Выйти",
|
||||||
"gui_status_indicator_share_started": "Идёт раздача",
|
"gui_status_indicator_share_started": "Идёт отправка",
|
||||||
"gui_status_indicator_receive_started": "Идёт получение",
|
"gui_status_indicator_receive_started": "Идёт получение",
|
||||||
"gui_settings_downloads_label": "Сохранять файлы в",
|
"gui_settings_downloads_label": "Путь сохранения файлов: ",
|
||||||
"gui_settings_downloads_button": "Выбрать",
|
"gui_settings_downloads_button": "Выбрать",
|
||||||
"gui_clear_history": "Очистить Все",
|
"gui_clear_history": "Очистить Все",
|
||||||
"gui_settings_language_label": "Предпочтительный язык",
|
"gui_settings_language_label": "Язык интерфейса:",
|
||||||
"config_onion_service": "Назначем \"луковому\" сервису порт {:d}.",
|
"config_onion_service": "Назначем \"луковому\" сервису порт {:d}.",
|
||||||
"preparing_files": "Сжимаем файлы.",
|
"preparing_files": "Сжимаем файлы.",
|
||||||
"give_this_url_stealth": "Передайте этот адрес и строку HidServAuth получателю:",
|
"give_this_url_stealth": "Передайте этот адрес и строку HidServAuth получателю:",
|
||||||
|
@ -38,41 +38,41 @@
|
||||||
"no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса",
|
"no_available_port": "Не удалось найти доступный порт для запуска \"лукового\" сервиса",
|
||||||
"close_on_timeout": "Время ожидания таймера истекло, сервис остановлен",
|
"close_on_timeout": "Время ожидания таймера истекло, сервис остановлен",
|
||||||
"closing_automatically": "Загрузка завершена, сервис остановлен",
|
"closing_automatically": "Загрузка завершена, сервис остановлен",
|
||||||
"timeout_download_still_running": "Ожидаем завершения загрузки",
|
"timeout_download_still_running": "Ожидаем завершения скачивания",
|
||||||
"timeout_upload_still_running": "Ожидаем завершения выгрузки",
|
"timeout_upload_still_running": "Ожидаем завершения загрузки",
|
||||||
"large_filesize": "Внимание: Отправка раздачи большого объёма может занять продолжительное время (часы)",
|
"large_filesize": "Внимание: Отправка данных большого объёма может занять продолжительное время (несколько часов)",
|
||||||
"systray_download_started_title": "OnionShare: Загрузка Началась",
|
"systray_download_started_title": "OnionShare: скачивание началось",
|
||||||
"systray_download_started_message": "Пользователь начал загружать ваши файлы",
|
"systray_download_started_message": "Пользователь начал загружать Ваши файлы",
|
||||||
"systray_download_completed_title": "OnionShare: Загрузка Завершена",
|
"systray_download_completed_title": "OnionShare: скачивание завершено",
|
||||||
"systray_download_completed_message": "Пользователь завершил загрузку ваших файлов",
|
"systray_download_completed_message": "Пользователь завершил скачивание Ваших файлов",
|
||||||
"systray_download_canceled_title": "OnionShare: Загрузка Отменена",
|
"systray_download_canceled_title": "OnionShare: скачивание отменено",
|
||||||
"systray_download_canceled_message": "Пользователь отменил загрузку",
|
"systray_download_canceled_message": "Пользователь отменил скачивание",
|
||||||
"systray_upload_started_title": "OnionShare: Выгрузка Началась",
|
"systray_upload_started_title": "OnionShare: загрузка началась",
|
||||||
"systray_upload_started_message": "Пользователь начал выгрузку файлов на ваш компьютер",
|
"systray_upload_started_message": "Пользователь начал загрузку файлов на Ваш компьютер",
|
||||||
"help_local_only": "Не использовать Tor (только для разработки)",
|
"help_local_only": "Не использовать Tor (только для разработки)",
|
||||||
"help_stay_open": "Продолжить раздачу после первой загрузки",
|
"help_stay_open": "Продолжить отправку после первого скачивания",
|
||||||
"help_shutdown_timeout": "Остановить раздачу после заданного количества секунд",
|
"help_shutdown_timeout": "Остановить отправку после заданного количества секунд",
|
||||||
"help_stealth": "Использовать авторизацию клиента (дополнительно)",
|
"help_stealth": "Использовать авторизацию клиента (дополнительно)",
|
||||||
"help_receive": "Получать раздачи, вместо их отправки",
|
"help_receive": "Получать загрузки, вместо их отправки:",
|
||||||
"help_debug": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск",
|
"help_debug": "Направлять сообщения об ошибках OnionShare в stdout, ошибки сети сохранять на диск",
|
||||||
"help_filename": "Список файлов или папок для раздачи",
|
"help_filename": "Список файлов или папок для отправки",
|
||||||
"help_config": "Расположение пользовательского конфигурационного JSON-файла (необязательно)",
|
"help_config": "Расположение пользовательского конфигурационного JSON-файла (необязательно)",
|
||||||
"gui_drag_and_drop": "Перетащите сюда файлы и папки\nчтобы начать раздачу",
|
"gui_drag_and_drop": "Перетащите сюда файлы и/или папки,\nкоторые хотите отправить.",
|
||||||
"gui_share_start_server": "Начать раздачу",
|
"gui_share_start_server": "Начать отправку",
|
||||||
"gui_share_stop_server": "Закончить раздачу",
|
"gui_share_stop_server": "Закончить отправку",
|
||||||
"gui_share_stop_server_shutdown_timeout": "Остановить раздачу ({}s осталось)",
|
"gui_share_stop_server_shutdown_timeout": "Остановить отправку ({}s осталось)",
|
||||||
"gui_share_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
|
"gui_share_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
|
||||||
"gui_receive_start_server": "Включить Режим Получения",
|
"gui_receive_start_server": "Включить режим получения",
|
||||||
"gui_receive_stop_server": "Выключить Режим Получения",
|
"gui_receive_stop_server": "Выключить режим получения",
|
||||||
"gui_receive_stop_server_shutdown_timeout": "Выключить Режим Получения ({}s осталось)",
|
"gui_receive_stop_server_shutdown_timeout": "Выключить Режим Получения ({}s осталось)",
|
||||||
"gui_receive_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
|
"gui_receive_stop_server_shutdown_timeout_tooltip": "Время таймера истекает в {}",
|
||||||
"gui_copy_hidservauth": "Скопировать строку HidServAuth",
|
"gui_copy_hidservauth": "Скопировать строку HidServAuth",
|
||||||
"gui_downloads": "История Загрузок",
|
"gui_downloads": "История скачиваний",
|
||||||
"gui_no_downloads": "Пока нет загрузок",
|
"gui_no_downloads": "Скачиваний пока нет ",
|
||||||
"gui_copied_url_title": "Адрес OnionShare скопирован",
|
"gui_copied_url_title": "Адрес OnionShare скопирован",
|
||||||
"gui_copied_hidservauth_title": "Строка HidServAuth скопирована",
|
"gui_copied_hidservauth_title": "Строка HidServAuth скопирована",
|
||||||
"gui_copied_hidservauth": "Строка HidServAuth скопирована в буфер обмена",
|
"gui_copied_hidservauth": "Строка HidServAuth скопирована в буфер обмена",
|
||||||
"gui_please_wait": "Начинаем... нажмите, чтобы отменить.",
|
"gui_please_wait": "Запускается... Нажмите здесь, чтобы отменить.",
|
||||||
"gui_download_upload_progress_complete": "%p%, прошло {0:s}.",
|
"gui_download_upload_progress_complete": "%p%, прошло {0:s}.",
|
||||||
"gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)",
|
"gui_download_upload_progress_starting": "{0:s}, %p% (вычисляем)",
|
||||||
"gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%",
|
"gui_download_upload_progress_eta": "{0:s}, ETA: {1:s}, %p%",
|
||||||
|
@ -80,33 +80,33 @@
|
||||||
"gui_quit_title": "Не так быстро",
|
"gui_quit_title": "Не так быстро",
|
||||||
"gui_share_quit_warning": "Идёт процесс отправки файлов. Вы уверены, что хотите завершить работу OnionShare?",
|
"gui_share_quit_warning": "Идёт процесс отправки файлов. Вы уверены, что хотите завершить работу OnionShare?",
|
||||||
"gui_receive_quit_warning": "Идёт процесс получения файлов. Вы уверены, что хотите завершить работу OnionShare?",
|
"gui_receive_quit_warning": "Идёт процесс получения файлов. Вы уверены, что хотите завершить работу OnionShare?",
|
||||||
"error_rate_limit": "Кто-то совершил слишком много неверных попыток подключения к вашему адресу, это может означать, что его пытаются вычислить. OnionShare остановил сервер. Создайте раздачу повторно и перешлите получателю новый адрес.",
|
"error_rate_limit": "Кто-то совершил слишком много попыток подключения к Вашему серверу отправки файлов. Возможно, его пытаются вычислить. OnionShare остановил сервер. Отправьте Ваши данные повторно и перешлите получателю новый адрес.",
|
||||||
"zip_progress_bar_format": "Сжатие: %p%",
|
"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_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.",
|
"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_whats_this": "<a href='{0:s}'>Что это?</a>",
|
||||||
"gui_settings_stealth_option": "Использовать авторизацию клиента (устарело)",
|
"gui_settings_stealth_option": "Использовать авторизацию клиента (legacy)",
|
||||||
"gui_settings_stealth_hidservauth_string": "Сохранили ваш приватный ключ для повторного использования,\nзначит теперь вы можете нажать сюда, чтобы скопировать вашу строку HidServAuth.",
|
"gui_settings_stealth_hidservauth_string": "Сохранили Ваш приватный ключ для повторного использования,\nНажмите сюда, чтобы скопировать строку HidServAuth.",
|
||||||
"gui_settings_autoupdate_label": "Проверить новую версию",
|
"gui_settings_autoupdate_label": "Проверить наличие новой версии",
|
||||||
"gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия",
|
"gui_settings_autoupdate_option": "Уведомить меня, когда будет доступна новая версия",
|
||||||
"gui_settings_autoupdate_timestamp": "Последняя проверка: {}",
|
"gui_settings_autoupdate_timestamp": "Последняя проверка: {}",
|
||||||
"gui_settings_autoupdate_check_button": "Проверить Новую Версию",
|
"gui_settings_autoupdate_check_button": "Проверить наличие новой версии",
|
||||||
"gui_settings_sharing_label": "Настройки раздачи",
|
"gui_settings_sharing_label": "Настройки отправки:",
|
||||||
"gui_settings_close_after_first_download_option": "Остановить раздачу после первой загрузки",
|
"gui_settings_close_after_first_download_option": "Завершить отправку Ваших файлов\nпосле их первого скачивания",
|
||||||
"gui_settings_connection_type_label": "Как OnionShare следует подключиться к сети Tor?",
|
"gui_settings_connection_type_label": "Как OnionShare следует подключаться к сети Tor?",
|
||||||
"gui_settings_connection_type_bundled_option": "Использовать версию Tor, встроенную в OnionShare",
|
"gui_settings_connection_type_bundled_option": "Использовать версию Tor, встроенную в OnionShare",
|
||||||
"gui_settings_connection_type_automatic_option": "Попробовать автоматическую настройку с Tor Browser",
|
"gui_settings_connection_type_automatic_option": "Автоматическая настройка при помощи Tor Browser",
|
||||||
"gui_settings_connection_type_control_port_option": "Подключиться используя порт управления",
|
"gui_settings_connection_type_control_port_option": "Использовать порт управления",
|
||||||
"gui_settings_connection_type_socket_file_option": "Подключиться используя файл-сокет",
|
"gui_settings_connection_type_socket_file_option": "Использовать файл сокет",
|
||||||
"gui_settings_connection_type_test_button": "Проверить подключение к сети Tor",
|
"gui_settings_connection_type_test_button": "Проверить подключение к сети Tor",
|
||||||
"gui_settings_socket_file_label": "Файл-сокет",
|
"gui_settings_socket_file_label": "Файл сокет",
|
||||||
"gui_settings_socks_label": "Порт SOCKS",
|
"gui_settings_socks_label": "Порт SOCKS",
|
||||||
"gui_settings_authenticate_label": "Настройки аутентификации Tor",
|
"gui_settings_authenticate_label": "Настройки аутентификации Tor",
|
||||||
"gui_settings_authenticate_no_auth_option": "Без аутентификации или cookie-аутентификации",
|
"gui_settings_authenticate_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_no_bridges_radio_option": "Не использовать \"мосты\"",
|
||||||
"gui_settings_tor_bridges_obfs4_radio_option": "Использовать встроенные obfs4 подключаемые транспорты",
|
"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_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": "Использовать встроенные meek_lite (Azure) встроенные транспорты",
|
||||||
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные meek_lite (Azure) встроенные транспорты (необходим obfs4proxy)",
|
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "Использовать встроенные meek_lite (Azure) встроенные транспорты (необходим obfs4proxy)",
|
||||||
"gui_settings_meek_lite_expensive_warning": "Внимание: использование \"мостов\" meek_lite очень затратно для Tor Project<br><br>Используйте их только если Вы не можете поделючться к сети Tor напрямую, через obfs4 транспорты или другие обычные \"мосты\".",
|
"gui_settings_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_custom_label": "Получить настройки \"мостов\" можно здесь <a href=\"https://bridges.torproject.org/options\">https://bridges.torproject.org</a>",
|
||||||
"gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работет.\nПроверьте их снова или добавьте другие.",
|
"gui_settings_tor_bridges_invalid": "Ни один из добавленных вами \"мостов\" не работет.\nПроверьте их снова или добавьте другие.",
|
||||||
"gui_settings_shutdown_timeout_checkbox": "Использовать таймер",
|
"gui_settings_shutdown_timeout_checkbox": "Использовать таймер",
|
||||||
"gui_settings_shutdown_timeout": "Остановить раздачу в:",
|
"gui_settings_shutdown_timeout": "Остановить загрузку в:",
|
||||||
"settings_error_unknown": "Невозможно подключить к контроллеру Tor, поскольку ваши настройки не корректны.",
|
"settings_error_unknown": "Невозможно произвести подключение к контроллеру Tor, поскольку Ваши настройки не корректны.",
|
||||||
"settings_error_automatic": "Невозможно подключться к контроллеру Tor. Уточните, Tor Browser (можно загрузить по ссылке torproject.org) запущен в фоновом режиме?",
|
"settings_error_automatic": "Невозможно произвести подключение к контроллеру Tor. Пожалуйтса, уточните: Tor Browser (можно найти по ссылке: torproject.org) запущен в фоновом режиме?",
|
||||||
"settings_error_socket_port": "Невозможно подключиться к контроллеру Tor в {}:{}.",
|
"settings_error_socket_port": "Невозможно произвести подключение к контроллеру Tor в {}:{}.",
|
||||||
"settings_error_socket_file": "Невозможно подключиться к контроллеру Tor используя файл-сокет {}.",
|
"settings_error_socket_file": "Невозможно произвести подключение к контроллеру Tor используя файл-сокет {}.",
|
||||||
"settings_error_auth": "Произведено подлючение к {}:{}, не получается проверить подлинность. Возможно, это не контроллер сети Tor?",
|
"settings_error_auth": "Произведено подлючение к {}:{}, не получается проверить подлинность. Возможно, это не контроллер сети Tor?",
|
||||||
"settings_error_missing_password": "Произведено подключение к контроллеру 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_not_supported": "Версию Tor, которая поставляется вместе с OnionShare нельзя использовать в режиме разработки на операционных системах Windows или macOS.",
|
||||||
"settings_error_bundled_tor_timeout": "Подключение к сети Tor занимает слишком много времени. Возможно, отсутствует подключение к сети Интернет или у вас неточно настроено системное время?",
|
"settings_error_bundled_tor_timeout": "Подключение к сети Tor занимает слишком много времени. Возможно, отсутствует подключение к сети Интернет или у вас неточно настроено системное время?",
|
||||||
"settings_error_bundled_tor_broken": "OnionShare не смог подулючиться к сети Tor в фоновом режиме:\n{}",
|
"settings_error_bundled_tor_broken": "OnionShare не смог подулючиться к сети Tor в фоновом режиме:\n{}",
|
||||||
|
@ -129,57 +129,60 @@
|
||||||
"error_tor_protocol_error": "Произошла ошибка с сетью Tor: {}",
|
"error_tor_protocol_error": "Произошла ошибка с сетью Tor: {}",
|
||||||
"error_tor_protocol_error_unknown": "Произошла неизвестная ошибка с сетю Tor",
|
"error_tor_protocol_error_unknown": "Произошла неизвестная ошибка с сетю Tor",
|
||||||
"error_invalid_private_key": "Данный тип приватного ключа не поддерживается",
|
"error_invalid_private_key": "Данный тип приватного ключа не поддерживается",
|
||||||
"connecting_to_tor": "Подключаемся к сети Tor",
|
"connecting_to_tor": "Идёт подключение к сети Tor...",
|
||||||
"update_available": "Вышла новая версия OnionShare. <a href='{}'>Нажмите сюда</a> чтобы загрузить.<br><br>Вы используется версию {}, наиболее поздняя версия {}.",
|
"update_available": "Вышла новая версия OnionShare. <a href='{}'>Нажмите сюда</a> чтобы загрузить.<br><br>Вы используется версию {}, наиболее поздняя версия {}.",
|
||||||
"update_error_check_error": "Не удалось проверить новые версии: сайт OnionShare сообщает, что не удалось распознать наиболее позднюю версию '{}'…",
|
"update_error_check_error": "Не удалось проверить новые версии: сайт OnionShare сообщает, что не удалось распознать наиболее позднюю версию '{}'…",
|
||||||
"update_error_invalid_latest_version": "Не удалось проверить наличие новой версии: возможно вы не подключены к сети Tor или сайт OnionShare не работает?",
|
"update_error_invalid_latest_version": "Не удалось проверить наличие новой версии: возможно, Вы не подключены к сети Tor или сайт OnionShare не работает?",
|
||||||
"update_not_available": "Вы используете наиболее позднюю версию 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_error_settings": "Попробуйте изменить способ, при помощий которого OnionShare подключается к сети Tor в разделе \"Настройки\".",
|
||||||
"gui_tor_connection_canceled": "Не удалось подключиться к сети Tor.\n\nПожалуйста, убедитесь что есть подключение к сети Интернет, затем переоткройте OnionShare и настройте подключение к сети Tor.",
|
"gui_tor_connection_canceled": "Не удалось подключиться к сети Tor.\n\nПожалуйста, убедитесь что есть подключение к сети Интернет, затем переоткройте OnionShare и настройте подключение к сети Tor.",
|
||||||
"gui_tor_connection_lost": "Произведено отключение от сети Tor.",
|
"gui_tor_connection_lost": "Произведено отключение от сети Tor.",
|
||||||
"gui_server_started_after_timeout": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, создайте новую раздачу.",
|
"gui_server_started_after_timeout": "Время таймера истекло до того, как сервер был запущен.\nПожалуйста, отправьте файлы заново.",
|
||||||
"gui_server_timeout_expired": "Время таймера истекло.\nПожалуйста, обновите его для того, чтобы начать раздачу.",
|
"gui_server_timeout_expired": "Время таймера истекло.\nПожалуйста, обновите его для того, чтобы начать отправку.",
|
||||||
"share_via_onionshare": "OnionShare это",
|
"share_via_onionshare": "OnionShare это",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса",
|
"gui_use_legacy_v2_onions_checkbox": "Используйте устаревшие адреса",
|
||||||
"gui_save_private_key_checkbox": "Используйте постоянный адрес (устарело)",
|
"gui_save_private_key_checkbox": "Используйте постоянный адрес (legacy)",
|
||||||
"gui_share_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>загрузить</b> ваши файлы при помощи<b>Tor Browser</b>: <img src='{}' />",
|
"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_receive_url_description": "<b>Кто угодно</b> c этим адресом OnionShare может <b>загрузить</b> файлы на Ваш комьютер <b>Tor Browser</b>: <img src='{}' />",
|
||||||
"gui_url_label_persistent": "Данная раздаче не будет завершена автоматически.<br><br>Каждая последующая раздача будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
|
"gui_url_label_persistent": "Данная отправка не будет завершена автоматически.<br><br>Каждая последующая отправка будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
|
||||||
"gui_url_label_stay_open": "Данная раздача не будет остановлена автоматически.",
|
"gui_url_label_stay_open": "Данная отправка не будет остановлена автоматически.",
|
||||||
"gui_url_label_onetime": "Данная раздача будет завершена автоматически после первой загрузки.",
|
"gui_url_label_onetime": "Данная отправка будет завершена автоматически после первой загрузки.",
|
||||||
"gui_url_label_onetime_and_persistent": "Данная раздача не будет завершена автоматически.<br><br>Каждая последующая раздача будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
|
"gui_url_label_onetime_and_persistent": "Данная отправка не будет завершена автоматически.<br><br>Каждая последующая отправка будет повторно использовать данный адрес. (Чтобы использовать одноразовый адрес, отключите опцию \"Использовать устаревший адрес\" в настройках.)",
|
||||||
"gui_status_indicator_share_stopped": "Можно начинать раздачу",
|
"gui_status_indicator_share_stopped": "Данные готовы к отправке",
|
||||||
"gui_status_indicator_share_working": "Начинаем…",
|
"gui_status_indicator_share_working": "Ожидайте...",
|
||||||
"gui_status_indicator_receive_stopped": "Можно начинать получение",
|
"gui_status_indicator_receive_stopped": "Данные готовы к получению",
|
||||||
"gui_status_indicator_receive_working": "Начинаем…",
|
"gui_status_indicator_receive_working": "Ожидайте...",
|
||||||
"gui_file_info": "{} файлы, {}",
|
"gui_file_info": "{} файлы, {}",
|
||||||
"gui_file_info_single": "{} файл, {}",
|
"gui_file_info_single": "{} файл, {}",
|
||||||
"history_in_progress_tooltip": "{} в ходе выполнения",
|
"history_in_progress_tooltip": "{} в ходе выполнения",
|
||||||
"history_completed_tooltip": "{} завершено",
|
"history_completed_tooltip": "{} завершено",
|
||||||
"info_in_progress_uploads_tooltip": "{} выгрузка(и) в ходе выполнения",
|
"info_in_progress_uploads_tooltip": "{} загрузка(и) в ходе выполнения",
|
||||||
"info_completed_uploads_tooltip": "{} выгрузка(и) завершена(ы)",
|
"info_completed_uploads_tooltip": "{} загрузка(и) завершена(ы)",
|
||||||
"error_cannot_create_downloads_dir": "Не удалось создать папку в режиме получения: {}",
|
"error_cannot_create_downloads_dir": "Не удалось создать папку в режиме получения: {}",
|
||||||
"receive_mode_downloads_dir": "Файлы, которые были вам отправлены находятся в папке: {}",
|
"receive_mode_downloads_dir": "Загруженные Вас файлы находятся в папке: {}",
|
||||||
"receive_mode_warning": "Внимание: Режим получения позаоляет другия людями загружать файлы на ваш компьютер. Некоторые файлы могут получить управление вашим компьютером, если вы откроете их. Открывайте только те файлы, которые вы получили от людей, которым вы доверяете, или если вы знаете, что делаете.",
|
"receive_mode_warning": "Внимание: Режим получения позволяет другим людями загружать файлы на Ваш компьютер. Некоторые файлы могут представлять угрозу для Вашего компьютера. <br>Открывайте файлы полученные только от тех людей, которым Вы доверяете или если Вы знаете, что делаете.",
|
||||||
"gui_receive_mode_warning": "Режим получения позаоляет другия людями загружать файлы на ваш компьютер. <br><br><b>Некоторые файлы могут получить управление вашим компьютером, если вы откроете их. Открывайте только те файлы, которые вы получили от людей, которым вы доверяете, или если вы знаете, что делаете.</b>",
|
"gui_receive_mode_warning": "Режим \"Получение Файлов\" позволяет другим людями загружать файлы на Ваш компьютер. <br><br><b>Некоторые файлы могут представлять угрозу для Вашего компьютера. <br>Открывайте файлы полученные только от тех людей, которым Вы доверяете или если Вы знаете, что делаете.</b>",
|
||||||
"receive_mode_upload_starting": "Начинается выгрузка общим объёмом {}",
|
"receive_mode_upload_starting": "Начинается загрузка общим объёмом {}",
|
||||||
"receive_mode_received_file": "Получено: {}",
|
"receive_mode_received_file": "Получено: {}",
|
||||||
"gui_mode_share_button": "Раздача файлов",
|
"gui_mode_share_button": "Отправка файлов",
|
||||||
"gui_mode_receive_button": "Получение файлов",
|
"gui_mode_receive_button": "Получение файлов",
|
||||||
"gui_settings_receiving_label": "Настройки получения",
|
"gui_settings_receiving_label": "Настройки получения:",
|
||||||
"gui_settings_public_mode_checkbox": "Публичный режим",
|
"gui_settings_public_mode_checkbox": "Публичный режим",
|
||||||
"systray_close_server_title": "Сервер OnionShare Отключен",
|
"systray_close_server_title": "Сервер OnionShare отключен",
|
||||||
"systray_close_server_message": "Пользователь отключил сервер",
|
"systray_close_server_message": "Пользователь отключил сервер",
|
||||||
"systray_page_loaded_title": "Страница OnionShare Загружена",
|
"systray_page_loaded_title": "Страница OnionShare загружена",
|
||||||
"systray_download_page_loaded_message": "Пользователь находится на странице загрузки",
|
"systray_download_page_loaded_message": "Пользователь находится на странице скачивания",
|
||||||
"systray_upload_page_loaded_message": "Пользователь посетил странцу выгрузки",
|
"systray_upload_page_loaded_message": "Пользователь посетил странцу загрузки",
|
||||||
"gui_uploads": "История Выгрузок",
|
"gui_uploads": "История загрузок",
|
||||||
"gui_no_uploads": "Пока Нет Выгрузок",
|
"gui_no_uploads": "Загрузок пока нет",
|
||||||
"gui_upload_in_progress": "Выгрузка Началась {}",
|
"gui_upload_in_progress": "Загрузка началась {}",
|
||||||
"gui_upload_finished_range": "Загружено {} в {}",
|
"gui_upload_finished_range": "Загружено {} в {}",
|
||||||
"gui_upload_finished": "Выгружено {}",
|
"gui_upload_finished": "Загружено {}",
|
||||||
"gui_download_in_progress": "Загрузка Началась {}",
|
"gui_download_in_progress": "Загрузка началась {}",
|
||||||
"gui_open_folder_error_nautilus": "Не удаётся открыть папку, поскольку nautilus не доступен. Файл находится здесь: {}",
|
"gui_open_folder_error_nautilus": "Не удаётся открыть папку, поскольку файловый менджер Nautilus не доступен. Файл находится здесь: {}",
|
||||||
"gui_settings_language_changed_notice": "Перезапустите OnionShare чтобы применились языковые настройки."
|
"gui_settings_language_changed_notice": "Перезапустите OnionShare, чтобы изменения языковых настроек вступили в силу.",
|
||||||
|
"gui_add_files": "Добавить файлы",
|
||||||
|
"gui_add_folder": "Добавить папку",
|
||||||
|
"error_cannot_create_data_dir": "Не удалось создать папку данных OnionShare: {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,15 +3,15 @@
|
||||||
"preparing_files": "Komprimera filer.",
|
"preparing_files": "Komprimera filer.",
|
||||||
"give_this_url": "Ge den här adressen till mottagaren:",
|
"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_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": "Ge denna adress till avsändaren:",
|
||||||
"give_this_url_receive_stealth": "Ge den här adressen och HidServAuth-raden 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",
|
"ctrlc_to_stop": "Tryck ned Ctrl+C för att stoppa servern",
|
||||||
"not_a_file": "{0:s} är inte en giltig fil.",
|
"not_a_file": "{0:s} är inte en giltig fil.",
|
||||||
"not_a_readable_file": "{0:s} är inte en läsbar 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",
|
"other_page_loaded": "Adress laddad",
|
||||||
"close_on_timeout": "Stoppad för att automatiska stopp-timern tiden tog slut",
|
"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_download_still_running": "Väntar på att nedladdningen ska bli klar",
|
||||||
"timeout_upload_still_running": "Väntar på att uppladdningen 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",
|
"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_title": "OnionShare Uppladdning Påbörjad",
|
||||||
"systray_upload_started_message": "En användare började ladda upp filer på din dator",
|
"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_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_shutdown_timeout": "Avbryt delning efter ett bestämt antal sekunder",
|
||||||
"help_stealth": "Använd klient-auktorisering (avancerat)",
|
"help_stealth": "Använd klient-auktorisering (avancerat)",
|
||||||
"help_receive": "Ta emot delningar istället för att skicka dem",
|
"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_debug": "Logga OnionShare fel till stdout och webbfel till hårddisken",
|
||||||
"help_filename": "Lista filer och mappar att dela",
|
"help_filename": "Lista filer och mappar att dela",
|
||||||
"help_config": "Egenvald sökväg för JSON konfigurationsfil (valfri)",
|
"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_add": "Lägg till",
|
||||||
"gui_delete": "Radera",
|
"gui_delete": "Radera",
|
||||||
"gui_choose_items": "Välj",
|
"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": "Avbryt delning",
|
||||||
"gui_share_stop_server_shutdown_timeout": "Avbryt Delning ({}s kvarstår)",
|
"gui_share_stop_server_shutdown_timeout": "Avbryt Delning ({}s kvarstår)",
|
||||||
"gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-timern slutar vid {}",
|
"gui_share_stop_server_shutdown_timeout_tooltip": "Automatiska stopp-timern avslutar vid {}",
|
||||||
"gui_receive_start_server": "Starta Mottagarläge",
|
"gui_receive_start_server": "Börja mottagarläge",
|
||||||
"gui_receive_stop_server": "Avsluta 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": "Avsluta Mottagarläge ({}s kvarstår)",
|
||||||
"gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer avslutas kl {}",
|
"gui_receive_stop_server_shutdown_timeout_tooltip": "Auto-stop timer avslutas kl {}",
|
||||||
|
@ -49,8 +49,8 @@
|
||||||
"gui_downloads": "Nedladdningshistorik",
|
"gui_downloads": "Nedladdningshistorik",
|
||||||
"gui_no_downloads": "Inga Nedladdningar Än",
|
"gui_no_downloads": "Inga Nedladdningar Än",
|
||||||
"gui_canceled": "Avbruten",
|
"gui_canceled": "Avbruten",
|
||||||
"gui_copied_url_title": "OnionShare Adress Kopierad",
|
"gui_copied_url_title": "OnionShare-adress kopierad",
|
||||||
"gui_copied_url": "OnionShare adress kopierad till urklipp",
|
"gui_copied_url": "OnionShare-adress kopierad till urklipp",
|
||||||
"gui_copied_hidservauth_title": "HidServAuth Kopierad",
|
"gui_copied_hidservauth_title": "HidServAuth Kopierad",
|
||||||
"gui_copied_hidservauth": "HidServAuth-rad kopierad till urklipp",
|
"gui_copied_hidservauth": "HidServAuth-rad kopierad till urklipp",
|
||||||
"gui_please_wait": "Börjar... klicka för att avbryta.",
|
"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_autoupdate_check_button": "Sök efter ny version",
|
||||||
"gui_settings_general_label": "Allmänna inställningar",
|
"gui_settings_general_label": "Allmänna inställningar",
|
||||||
"gui_settings_sharing_label": "Delningsinstä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_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_automatic_option": "Försök automatisk konfiguration med Tor Browser",
|
||||||
"gui_settings_connection_type_control_port_option": "Anslut med kontrollport",
|
"gui_settings_connection_type_control_port_option": "Anslut med kontrollport",
|
||||||
"gui_settings_connection_type_socket_file_option": "Anslut med socket-filen",
|
"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_tor_protocol_error_unknown": "Det fanns ett okänt fel med Tor",
|
||||||
"error_invalid_private_key": "Denna privata nyckeltyp stöds inte",
|
"error_invalid_private_key": "Denna privata nyckeltyp stöds inte",
|
||||||
"connecting_to_tor": "Ansluter till Tor-nätverket",
|
"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_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.",
|
"update_not_available": "Du kör den senaste OnionShare.",
|
||||||
"gui_tor_connection_ask": "Öppna inställningarna för att sortera ut anslutning till Tor?",
|
"gui_tor_connection_ask": "Öppna inställningarna för att sortera ut anslutning till Tor?",
|
||||||
"gui_tor_connection_ask_open_settings": "Ja",
|
"gui_tor_connection_ask_open_settings": "Ja",
|
||||||
|
@ -169,7 +169,7 @@
|
||||||
"gui_settings_public_mode_checkbox": "Offentligt läge",
|
"gui_settings_public_mode_checkbox": "Offentligt läge",
|
||||||
"systray_close_server_title": "OnionShare-servern stängd",
|
"systray_close_server_title": "OnionShare-servern stängd",
|
||||||
"systray_close_server_message": "En användare stängde servern",
|
"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_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",
|
"systray_upload_page_loaded_message": "En användare läste in sändningssidan",
|
||||||
"gui_uploads": "Sändningshistoriken",
|
"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_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_files": "Lägg till filer",
|
||||||
"gui_add_folder": "Lägg till mapp",
|
"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 {}"
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,5 +22,9 @@
|
||||||
"gui_copied_url": "Panoya kopyalanan URL",
|
"gui_copied_url": "Panoya kopyalanan URL",
|
||||||
"gui_please_wait": "Lütfen bekleyin...",
|
"gui_please_wait": "Lütfen bekleyin...",
|
||||||
"zip_progress_bar_format": "Dosyalar hazırlanıyor: %p%",
|
"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"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,19 +1,19 @@
|
||||||
{
|
{
|
||||||
"config_onion_service": "",
|
"config_onion_service": "在端口{0:d}上设置洋葱服务。",
|
||||||
"preparing_files": "",
|
"preparing_files": "正在压缩文件.",
|
||||||
"give_this_url": "",
|
"give_this_url": "把这个地址给收件人:",
|
||||||
"give_this_url_stealth": "",
|
"give_this_url_stealth": "向收件人提供此地址和HidServAuth行:",
|
||||||
"give_this_url_receive": "",
|
"give_this_url_receive": "把这个地址交给发件人:",
|
||||||
"give_this_url_receive_stealth": "",
|
"give_this_url_receive_stealth": "把这个地址和HidServAuth交给发送者:",
|
||||||
"ctrlc_to_stop": "",
|
"ctrlc_to_stop": "按Ctrl+C停止服务器",
|
||||||
"not_a_file": "",
|
"not_a_file": "{0:s}不是有效文件。",
|
||||||
"not_a_readable_file": "",
|
"not_a_readable_file": "{0:s}不是可读文件.",
|
||||||
"no_available_port": "",
|
"no_available_port": "找不到可用于开启onion服务的端口",
|
||||||
"other_page_loaded": "",
|
"other_page_loaded": "地址已加载完成",
|
||||||
"close_on_timeout": "",
|
"close_on_timeout": "终止 原因:自动停止计时器的时间已到",
|
||||||
"closing_automatically": "",
|
"closing_automatically": "终止 原因:传输已完成",
|
||||||
"timeout_download_still_running": "",
|
"timeout_download_still_running": "",
|
||||||
"large_filesize": "",
|
"large_filesize": "警告:分享大文件可能会用上数小时",
|
||||||
"systray_menu_exit": "退出",
|
"systray_menu_exit": "退出",
|
||||||
"systray_download_started_title": "",
|
"systray_download_started_title": "",
|
||||||
"systray_download_started_message": "",
|
"systray_download_started_message": "",
|
||||||
|
@ -23,153 +23,153 @@
|
||||||
"systray_download_canceled_message": "",
|
"systray_download_canceled_message": "",
|
||||||
"systray_upload_started_title": "",
|
"systray_upload_started_title": "",
|
||||||
"systray_upload_started_message": "",
|
"systray_upload_started_message": "",
|
||||||
"help_local_only": "",
|
"help_local_only": "不使用Tor(只限开发测试)",
|
||||||
"help_stay_open": "",
|
"help_stay_open": "文件传输完成后继续分享",
|
||||||
"help_shutdown_timeout": "",
|
"help_shutdown_timeout": "超过给定时间(秒)后,终止分享.",
|
||||||
"help_stealth": "",
|
"help_stealth": "使用服务端认证(高级选项)",
|
||||||
"help_receive": "",
|
"help_receive": "仅接收分享的文件,不发送",
|
||||||
"help_debug": "",
|
"help_debug": "将OnionShare错误日志记录到stdout,将web错误日志记录到磁盘",
|
||||||
"help_filename": "",
|
"help_filename": "要分享的文件或文件夹的列表",
|
||||||
"help_config": "",
|
"help_config": "自定义JSON配置文件的路径(可选)",
|
||||||
"gui_drag_and_drop": "",
|
"gui_drag_and_drop": "将文件或文件夹拖动到这里来开始分享",
|
||||||
"gui_add": "添加",
|
"gui_add": "添加",
|
||||||
"gui_delete": "删除",
|
"gui_delete": "删除",
|
||||||
"gui_choose_items": "选择",
|
"gui_choose_items": "选取",
|
||||||
"gui_share_start_server": "",
|
"gui_share_start_server": "开始分享",
|
||||||
"gui_share_stop_server": "",
|
"gui_share_stop_server": "停止分享",
|
||||||
"gui_share_stop_server_shutdown_timeout": "",
|
"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_start_server": "开启接受模式",
|
||||||
"gui_receive_stop_server": "",
|
"gui_receive_stop_server": "停止接受模式",
|
||||||
"gui_receive_stop_server_shutdown_timeout": "",
|
"gui_receive_stop_server_shutdown_timeout": "停止接受模式(还剩{}秒)",
|
||||||
"gui_receive_stop_server_shutdown_timeout_tooltip": "",
|
"gui_receive_stop_server_shutdown_timeout_tooltip": "在{}自动停止",
|
||||||
"gui_copy_url": "",
|
"gui_copy_url": "复制地址",
|
||||||
"gui_copy_hidservauth": "",
|
"gui_copy_hidservauth": "复制HidServAuth",
|
||||||
"gui_downloads": "",
|
"gui_downloads": "",
|
||||||
"gui_no_downloads": "",
|
"gui_no_downloads": "",
|
||||||
"gui_canceled": "取消",
|
"gui_canceled": "已取消",
|
||||||
"gui_copied_url_title": "",
|
"gui_copied_url_title": "已复制的OnionShare地址",
|
||||||
"gui_copied_url": "",
|
"gui_copied_url": "OnionShare地址已复制到剪贴板",
|
||||||
"gui_copied_hidservauth_title": "",
|
"gui_copied_hidservauth_title": "已复制的HidServAuth",
|
||||||
"gui_copied_hidservauth": "",
|
"gui_copied_hidservauth": "HidServAuth行已复制到剪贴板",
|
||||||
"gui_please_wait": "",
|
"gui_please_wait": "起始中...点击这里可取消.",
|
||||||
"gui_download_upload_progress_complete": "",
|
"gui_download_upload_progress_complete": "",
|
||||||
"gui_download_upload_progress_starting": "",
|
"gui_download_upload_progress_starting": "",
|
||||||
"gui_download_upload_progress_eta": "",
|
"gui_download_upload_progress_eta": "",
|
||||||
"version_string": "",
|
"version_string": "版本: OnionShare {0:s} | https://onionshare.org/",
|
||||||
"gui_quit_title": "",
|
"gui_quit_title": "再等等",
|
||||||
"gui_share_quit_warning": "",
|
"gui_share_quit_warning": "您有文件正在传输中...您确定要退出OnionShare吗?",
|
||||||
"gui_receive_quit_warning": "",
|
"gui_receive_quit_warning": "您有文件还正在接收中...您确定要退出OnionShare吗?",
|
||||||
"gui_quit_warning_quit": "退出",
|
"gui_quit_warning_quit": "退出",
|
||||||
"gui_quit_warning_dont_quit": "取消",
|
"gui_quit_warning_dont_quit": "取消",
|
||||||
"error_rate_limit": "",
|
"error_rate_limit": "有人您对地址发出过多错误请求,这很可能说明有人在尝试猜测您的地址.因此为了安全OinionShare已终止服务.请重新开启分享并且向收件人发送新地址.",
|
||||||
"zip_progress_bar_format": "",
|
"zip_progress_bar_format": "压缩中: %p%",
|
||||||
"error_stealth_not_supported": "",
|
"error_stealth_not_supported": "要使用服务端认证,您至少需要的最低版本要求是:Tor 0.2.9.1-alpha (or Tor Browser 6.5)和python3-stem 1.5.0.两者缺一不可,同时需要.",
|
||||||
"error_ephemeral_not_supported": "",
|
"error_ephemeral_not_supported": "OnionShare至少同时需要Tor 0.2.7.1和python3-stem 1.4.0来运行.",
|
||||||
"gui_settings_window_title": "设置中",
|
"gui_settings_window_title": "设置",
|
||||||
"gui_settings_whats_this": "",
|
"gui_settings_whats_this": "<a href='{0:s}'>这是什么?</a>",
|
||||||
"gui_settings_stealth_option": "",
|
"gui_settings_stealth_option": "使用客户端认证",
|
||||||
"gui_settings_stealth_hidservauth_string": "",
|
"gui_settings_stealth_hidservauth_string": "已保存了你的私钥用于重复使用,意味着您现在可以\n点击这里来复制您的HidServAuth.",
|
||||||
"gui_settings_autoupdate_label": "检查新版本",
|
"gui_settings_autoupdate_label": "检查新版本",
|
||||||
"gui_settings_autoupdate_option": "",
|
"gui_settings_autoupdate_option": "有新版本可用时告知我",
|
||||||
"gui_settings_autoupdate_timestamp": "",
|
"gui_settings_autoupdate_timestamp": "上次检查更新的时间:{}",
|
||||||
"gui_settings_autoupdate_timestamp_never": "从不",
|
"gui_settings_autoupdate_timestamp_never": "从不",
|
||||||
"gui_settings_autoupdate_check_button": "",
|
"gui_settings_autoupdate_check_button": "检查新版本",
|
||||||
"gui_settings_general_label": "常规设置",
|
"gui_settings_general_label": "常规设置",
|
||||||
"gui_settings_sharing_label": "",
|
"gui_settings_sharing_label": "分享设置",
|
||||||
"gui_settings_close_after_first_download_option": "",
|
"gui_settings_close_after_first_download_option": "文件发送完成后停止分享",
|
||||||
"gui_settings_connection_type_label": "",
|
"gui_settings_connection_type_label": "OnionShare应如何连接Tor?",
|
||||||
"gui_settings_connection_type_bundled_option": "",
|
"gui_settings_connection_type_bundled_option": "使用OnionShare内置的tor",
|
||||||
"gui_settings_connection_type_automatic_option": "",
|
"gui_settings_connection_type_automatic_option": "尝试使用Tor Browser(Tor浏览器)的设置",
|
||||||
"gui_settings_connection_type_control_port_option": "",
|
"gui_settings_connection_type_control_port_option": "用特定端口连接",
|
||||||
"gui_settings_connection_type_socket_file_option": "",
|
"gui_settings_connection_type_socket_file_option": "使用socket文档的设置连接",
|
||||||
"gui_settings_connection_type_test_button": "",
|
"gui_settings_connection_type_test_button": "测试tor连接",
|
||||||
"gui_settings_control_port_label": "控制端口",
|
"gui_settings_control_port_label": "控制端口",
|
||||||
"gui_settings_socket_file_label": "",
|
"gui_settings_socket_file_label": "Socket配置文档",
|
||||||
"gui_settings_socks_label": "",
|
"gui_settings_socks_label": "SOCKS 端口",
|
||||||
"gui_settings_authenticate_label": "",
|
"gui_settings_authenticate_label": "Tor认证设置",
|
||||||
"gui_settings_authenticate_no_auth_option": "",
|
"gui_settings_authenticate_no_auth_option": "无须认证,或者使用的是cookie认证",
|
||||||
"gui_settings_authenticate_password_option": "密码",
|
"gui_settings_authenticate_password_option": "密码",
|
||||||
"gui_settings_password_label": "密码",
|
"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_no_bridges_radio_option": "不使用网桥",
|
||||||
"gui_settings_tor_bridges_obfs4_radio_option": "",
|
"gui_settings_tor_bridges_obfs4_radio_option": "使用内置的obfs4 pluggable transports",
|
||||||
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "",
|
"gui_settings_tor_bridges_obfs4_radio_option_no_obfs4proxy": "使用内置的obfs4 pluggable transports(需要obfs4代理)",
|
||||||
"gui_settings_tor_bridges_meek_lite_azure_radio_option": "",
|
"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": "",
|
"gui_settings_tor_bridges_meek_lite_azure_radio_option_no_obfs4proxy": "使用内置meek_lite (Azure) pluggable transports (需要obfs4代理)",
|
||||||
"gui_settings_meek_lite_expensive_warning": "",
|
"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_radio_option": "使用自定义网桥",
|
||||||
"gui_settings_tor_bridges_custom_label": "",
|
"gui_settings_tor_bridges_custom_label": "您可以从这里得到网桥地址<a href=\"https://bridges.torproject.org/options\">\nhttps://bridges.torproject.org</a>",
|
||||||
"gui_settings_tor_bridges_invalid": "",
|
"gui_settings_tor_bridges_invalid": "您所添加的网桥无法工作.\n请双击它们或者添加其它网桥.",
|
||||||
"gui_settings_button_save": "保存",
|
"gui_settings_button_save": "保存",
|
||||||
"gui_settings_button_cancel": "取消",
|
"gui_settings_button_cancel": "取消",
|
||||||
"gui_settings_button_help": "帮助",
|
"gui_settings_button_help": "帮助",
|
||||||
"gui_settings_shutdown_timeout_checkbox": "",
|
"gui_settings_shutdown_timeout_checkbox": "使用自动停止计时器",
|
||||||
"gui_settings_shutdown_timeout": "",
|
"gui_settings_shutdown_timeout": "在(时间)停止分享",
|
||||||
"settings_error_unknown": "",
|
"settings_error_unknown": "无法连接Tor控制件,因为您的设置无法被理解.",
|
||||||
"settings_error_automatic": "",
|
"settings_error_automatic": "无法连接tor控制件.Tor浏览器是否在后台工作?(从torproject.org可以获得Tor Browser)",
|
||||||
"settings_error_socket_port": "",
|
"settings_error_socket_port": "在socket端口{}:{}无法连接tor控制件.",
|
||||||
"settings_error_socket_file": "",
|
"settings_error_socket_file": "无法使用socket配置文档的设置连接tor控制件",
|
||||||
"settings_error_auth": "",
|
"settings_error_auth": "已连接到了{}:{},但是无法认证,也许这不是tor控制件?",
|
||||||
"settings_error_missing_password": "",
|
"settings_error_missing_password": "已连接到tor控制件,但需要密码来认证.",
|
||||||
"settings_error_unreadable_cookie_file": "",
|
"settings_error_unreadable_cookie_file": "已连接到tor控制件,但可能密码错误,或者没有读取cookie文件的权限.",
|
||||||
"settings_error_bundled_tor_not_supported": "",
|
"settings_error_bundled_tor_not_supported": "OnionShare自带的Tor无法在Windows或macOS下运行开发者模式",
|
||||||
"settings_error_bundled_tor_timeout": "",
|
"settings_error_bundled_tor_timeout": "尝试连接tor的用时过长,也许您的网络有问题,或者是系统时间不准确?",
|
||||||
"settings_error_bundled_tor_broken": "",
|
"settings_error_bundled_tor_broken": "OnionShare无法在后台连接Tor\n{}",
|
||||||
"settings_test_success": "",
|
"settings_test_success": "已连接到Tor控制件\n\nTor版本: {}\n支持短期onion服务: {}.\n支持客户端认证: {}.\n支持新一代.onion地址: {}.",
|
||||||
"error_tor_protocol_error": "",
|
"error_tor_protocol_error": "Tor出现错误: {}",
|
||||||
"error_tor_protocol_error_unknown": "",
|
"error_tor_protocol_error_unknown": "Tor出现未知错误",
|
||||||
"error_invalid_private_key": "",
|
"error_invalid_private_key": "不支持这种类型的私钥",
|
||||||
"connecting_to_tor": "",
|
"connecting_to_tor": "正在连接Tor网络",
|
||||||
"update_available": "",
|
"update_available": "有新版本的OnionShare可用:<a href='{}'>请点击这里</a> 来获得.<br><br>您在使用的版本为 {} 最新的可用版本为 {}.",
|
||||||
"update_error_check_error": "",
|
"update_error_check_error": "无法检查更新:OnionShare官网对最新版本无法识别'{}'…",
|
||||||
"update_error_invalid_latest_version": "",
|
"update_error_invalid_latest_version": "无法检查更新:也许您没有连接到Tor?或者OnionShare官网不可用?",
|
||||||
"update_not_available": "",
|
"update_not_available": "您现在运行的OnionShare为最新版本.",
|
||||||
"gui_tor_connection_ask": "",
|
"gui_tor_connection_ask": "打开设置来查看Tor连接?",
|
||||||
"gui_tor_connection_ask_open_settings": "是的",
|
"gui_tor_connection_ask_open_settings": "是的",
|
||||||
"gui_tor_connection_ask_quit": "退出",
|
"gui_tor_connection_ask_quit": "退出",
|
||||||
"gui_tor_connection_error_settings": "",
|
"gui_tor_connection_error_settings": "请尝试在设置中设定OnionShare连接Tor的方式.",
|
||||||
"gui_tor_connection_canceled": "",
|
"gui_tor_connection_canceled": "无法连接Tor.\n\n请确保您一连接到网络,然后重启OnionShare并设置Tor连接.",
|
||||||
"gui_tor_connection_lost": "",
|
"gui_tor_connection_lost": "已和Tor断开连接.",
|
||||||
"gui_server_started_after_timeout": "",
|
"gui_server_started_after_timeout": "在服务开始之前自动停止计时器的时间已到.\n请建立新的分享.",
|
||||||
"gui_server_timeout_expired": "",
|
"gui_server_timeout_expired": "自动停止计时器的时间已到.\n请更新其设置来开始分享.",
|
||||||
"share_via_onionshare": "",
|
"share_via_onionshare": "用OnionShare来分享",
|
||||||
"gui_use_legacy_v2_onions_checkbox": "",
|
"gui_use_legacy_v2_onions_checkbox": "使用古老的地址",
|
||||||
"gui_save_private_key_checkbox": "",
|
"gui_save_private_key_checkbox": "使用长期地址",
|
||||||
"gui_share_url_description": "",
|
"gui_share_url_description": "<b>任何人</b>只要拥有这个OnionShare 地址,都可以用<b>Tor浏览器</b>来从您的设备进行文件<b>下载</b>:<img src='{}' />",
|
||||||
"gui_receive_url_description": "",
|
"gui_receive_url_description": "<b>任何人</b>只要拥有这个OnionShare 地址,都可以用<b>Tor浏览器</b>来给你的设备进行文件<b>上传</b>:<img src='{}' />",
|
||||||
"gui_url_label_persistent": "",
|
"gui_url_label_persistent": "这个分享不会自动停止.<br><br>每个子列分享都会重复使用这个地址.(要使用一次性地址, 请在设置中关闭\"使用长期地址\"的选项.)",
|
||||||
"gui_url_label_stay_open": "",
|
"gui_url_label_stay_open": "这个分享不会自动停止.",
|
||||||
"gui_url_label_onetime": "",
|
"gui_url_label_onetime": "这个分享将在初次完成后终止.",
|
||||||
"gui_url_label_onetime_and_persistent": "",
|
"gui_url_label_onetime_and_persistent": "这个分享不会自动停止.<br><br>每个子列分享都将会重复使用这个地址.(要使用一次性地址, 请在设置中关闭\"使用长期地址\"的选项.)",
|
||||||
"gui_status_indicator_share_stopped": "",
|
"gui_status_indicator_share_stopped": "准备分享",
|
||||||
"gui_status_indicator_share_working": "",
|
"gui_status_indicator_share_working": "正在初始话…",
|
||||||
"gui_status_indicator_share_started": "分享",
|
"gui_status_indicator_share_started": "分享中",
|
||||||
"gui_status_indicator_receive_stopped": "",
|
"gui_status_indicator_receive_stopped": "准备接收",
|
||||||
"gui_status_indicator_receive_working": "",
|
"gui_status_indicator_receive_working": "正在初始化…",
|
||||||
"gui_status_indicator_receive_started": "正在接收",
|
"gui_status_indicator_receive_started": "正在接收",
|
||||||
"gui_file_info": "",
|
"gui_file_info": "{} 个文件, {}",
|
||||||
"gui_file_info_single": "",
|
"gui_file_info_single": "{} 个文件, {}",
|
||||||
"history_in_progress_tooltip": "",
|
"history_in_progress_tooltip": "{}在进行中",
|
||||||
"history_completed_tooltip": "",
|
"history_completed_tooltip": "{}已完成",
|
||||||
"info_in_progress_uploads_tooltip": "",
|
"info_in_progress_uploads_tooltip": "",
|
||||||
"info_completed_uploads_tooltip": "",
|
"info_completed_uploads_tooltip": "",
|
||||||
"error_cannot_create_downloads_dir": "",
|
"error_cannot_create_downloads_dir": "",
|
||||||
"receive_mode_downloads_dir": "",
|
"receive_mode_downloads_dir": "",
|
||||||
"receive_mode_warning": "",
|
"receive_mode_warning": "警告:接收模式下允许他人对您的设备上传文件.有一些文件可能有恶意代码并控制您的设备或者造成严重伤害,请只谨慎打开来自您信赖的人的文件,或者确保采取必要的安全措施.",
|
||||||
"gui_receive_mode_warning": "",
|
"gui_receive_mode_warning": "接收模式下允许他人对您的设备上传文件.<br><br><b>有一些文件可能有恶意代码并控制您的设备或者造成严重伤害,请只谨慎打开来自您信赖的人的文件,或者确保采取必要的安全措施.</b>",
|
||||||
"receive_mode_upload_starting": "",
|
"receive_mode_upload_starting": "上传文件的大小为{}正在开始",
|
||||||
"receive_mode_received_file": "",
|
"receive_mode_received_file": "接收到: {}",
|
||||||
"gui_mode_share_button": "",
|
"gui_mode_share_button": "分享文件",
|
||||||
"gui_mode_receive_button": "",
|
"gui_mode_receive_button": "接收文件",
|
||||||
"gui_settings_receiving_label": "",
|
"gui_settings_receiving_label": "接收设置",
|
||||||
"gui_settings_downloads_label": "",
|
"gui_settings_downloads_label": "",
|
||||||
"gui_settings_downloads_button": "分享轨迹",
|
"gui_settings_downloads_button": "分享轨迹",
|
||||||
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
"gui_settings_receive_allow_receiver_shutdown_checkbox": "",
|
||||||
"gui_settings_public_mode_checkbox": "",
|
"gui_settings_public_mode_checkbox": "公共模式",
|
||||||
"systray_close_server_title": "",
|
"systray_close_server_title": "",
|
||||||
"systray_close_server_message": "",
|
"systray_close_server_message": "",
|
||||||
"systray_page_loaded_title": "",
|
"systray_page_loaded_title": "页面已加载",
|
||||||
"systray_download_page_loaded_message": "",
|
"systray_download_page_loaded_message": "",
|
||||||
"systray_upload_page_loaded_message": "",
|
"systray_upload_page_loaded_message": "",
|
||||||
"gui_uploads": "",
|
"gui_uploads": "",
|
||||||
|
@ -179,7 +179,35 @@
|
||||||
"gui_upload_finished_range": "",
|
"gui_upload_finished_range": "",
|
||||||
"gui_upload_finished": "",
|
"gui_upload_finished": "",
|
||||||
"gui_download_in_progress": "",
|
"gui_download_in_progress": "",
|
||||||
"gui_open_folder_error_nautilus": "",
|
"gui_open_folder_error_nautilus": "无法打开文件夹,原因:nautilus不可用.文件在这里: {}",
|
||||||
"gui_settings_language_label": "首选语言",
|
"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": "等待接收完成"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
2.0.dev2
|
2.0.dev3
|
||||||
|
|
|
@ -39,7 +39,7 @@ class GuiBaseTest(object):
|
||||||
strings.load_strings(common)
|
strings.load_strings(common)
|
||||||
|
|
||||||
# Get all of the settings in test_settings
|
# 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():
|
for key, val in common.settings.default_settings.items():
|
||||||
if key not in test_settings:
|
if key not in test_settings:
|
||||||
test_settings[key] = val
|
test_settings[key] = val
|
||||||
|
@ -70,17 +70,17 @@ class GuiBaseTest(object):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def gui_loaded(self):
|
def gui_loaded(self):
|
||||||
'''Test that the GUI actually is shown'''
|
'''Test that the GUI actually is shown'''
|
||||||
self.assertTrue(self.gui.show)
|
self.assertTrue(self.gui.show)
|
||||||
|
|
||||||
|
|
||||||
def windowTitle_seen(self):
|
def windowTitle_seen(self):
|
||||||
'''Test that the window title is OnionShare'''
|
'''Test that the window title is OnionShare'''
|
||||||
self.assertEqual(self.gui.windowTitle(), 'OnionShare')
|
self.assertEqual(self.gui.windowTitle(), 'OnionShare')
|
||||||
|
|
||||||
|
|
||||||
def settings_button_is_visible(self):
|
def settings_button_is_visible(self):
|
||||||
'''Test that the settings button is visible'''
|
'''Test that the settings button is visible'''
|
||||||
self.assertTrue(self.gui.settings_button.isVisible())
|
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'''
|
'''Test that the settings button is hidden when the server starts'''
|
||||||
self.assertFalse(self.gui.settings_button.isVisible())
|
self.assertFalse(self.gui.settings_button.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def server_status_bar_is_visible(self):
|
def server_status_bar_is_visible(self):
|
||||||
'''Test that the status bar is visible'''
|
'''Test that the status bar is visible'''
|
||||||
self.assertTrue(self.gui.status_bar.isVisible())
|
self.assertTrue(self.gui.status_bar.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def click_mode(self, mode):
|
def click_mode(self, mode):
|
||||||
'''Test that we can switch Mode by clicking the button'''
|
'''Test that we can switch Mode by clicking the button'''
|
||||||
if type(mode) == ReceiveMode:
|
if type(mode) == ReceiveMode:
|
||||||
|
@ -105,14 +105,14 @@ class GuiBaseTest(object):
|
||||||
QtTest.QTest.mouseClick(self.gui.share_mode_button, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(self.gui.share_mode_button, QtCore.Qt.LeftButton)
|
||||||
self.assertTrue(self.gui.mode, self.gui.MODE_SHARE)
|
self.assertTrue(self.gui.mode, self.gui.MODE_SHARE)
|
||||||
|
|
||||||
|
|
||||||
def click_toggle_history(self, mode):
|
def click_toggle_history(self, mode):
|
||||||
'''Test that we can toggle Download or Upload history by clicking the toggle button'''
|
'''Test that we can toggle Download or Upload history by clicking the toggle button'''
|
||||||
currently_visible = mode.history.isVisible()
|
currently_visible = mode.history.isVisible()
|
||||||
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
|
||||||
self.assertEqual(mode.history.isVisible(), not currently_visible)
|
self.assertEqual(mode.history.isVisible(), not currently_visible)
|
||||||
|
|
||||||
|
|
||||||
def history_indicator(self, mode, public_mode):
|
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'''
|
'''Test that we can make sure the history is toggled off, do an action, and the indiciator works'''
|
||||||
# Make sure history is toggled off
|
# Make sure history is toggled off
|
||||||
|
@ -150,43 +150,43 @@ class GuiBaseTest(object):
|
||||||
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(mode.toggle_history, QtCore.Qt.LeftButton)
|
||||||
self.assertFalse(mode.toggle_history.indicator_label.isVisible())
|
self.assertFalse(mode.toggle_history.indicator_label.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def history_is_not_visible(self, mode):
|
def history_is_not_visible(self, mode):
|
||||||
'''Test that the History section is not visible'''
|
'''Test that the History section is not visible'''
|
||||||
self.assertFalse(mode.history.isVisible())
|
self.assertFalse(mode.history.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def history_is_visible(self, mode):
|
def history_is_visible(self, mode):
|
||||||
'''Test that the History section is visible'''
|
'''Test that the History section is visible'''
|
||||||
self.assertTrue(mode.history.isVisible())
|
self.assertTrue(mode.history.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def server_working_on_start_button_pressed(self, mode):
|
def server_working_on_start_button_pressed(self, mode):
|
||||||
'''Test we can start the service'''
|
'''Test we can start the service'''
|
||||||
# Should be in SERVER_WORKING state
|
# Should be in SERVER_WORKING state
|
||||||
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
|
||||||
self.assertEqual(mode.server_status.status, 1)
|
self.assertEqual(mode.server_status.status, 1)
|
||||||
|
|
||||||
|
|
||||||
def server_status_indicator_says_starting(self, mode):
|
def server_status_indicator_says_starting(self, mode):
|
||||||
'''Test that the Server Status indicator shows we are Starting'''
|
'''Test that the Server Status indicator shows we are Starting'''
|
||||||
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_working'))
|
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_working'))
|
||||||
|
|
||||||
|
|
||||||
def server_is_started(self, mode, startup_time=2000):
|
def server_is_started(self, mode, startup_time=2000):
|
||||||
'''Test that the server has started'''
|
'''Test that the server has started'''
|
||||||
QtTest.QTest.qWait(startup_time)
|
QtTest.QTest.qWait(startup_time)
|
||||||
# Should now be in SERVER_STARTED state
|
# Should now be in SERVER_STARTED state
|
||||||
self.assertEqual(mode.server_status.status, 2)
|
self.assertEqual(mode.server_status.status, 2)
|
||||||
|
|
||||||
|
|
||||||
def web_server_is_running(self):
|
def web_server_is_running(self):
|
||||||
'''Test that the web server has started'''
|
'''Test that the web server has started'''
|
||||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
|
||||||
self.assertEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
|
self.assertEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
|
||||||
|
|
||||||
|
|
||||||
def have_a_slug(self, mode, public_mode):
|
def have_a_slug(self, mode, public_mode):
|
||||||
'''Test that we have a valid slug'''
|
'''Test that we have a valid slug'''
|
||||||
if not public_mode:
|
if not public_mode:
|
||||||
|
@ -194,12 +194,12 @@ class GuiBaseTest(object):
|
||||||
else:
|
else:
|
||||||
self.assertIsNone(mode.server_status.web.slug, r'(\w+)-(\w+)')
|
self.assertIsNone(mode.server_status.web.slug, r'(\w+)-(\w+)')
|
||||||
|
|
||||||
|
|
||||||
def url_description_shown(self, mode):
|
def url_description_shown(self, mode):
|
||||||
'''Test that the URL label is showing'''
|
'''Test that the URL label is showing'''
|
||||||
self.assertTrue(mode.server_status.url_description.isVisible())
|
self.assertTrue(mode.server_status.url_description.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def have_copy_url_button(self, mode, public_mode):
|
def have_copy_url_button(self, mode, public_mode):
|
||||||
'''Test that the Copy URL button is shown and that the clipboard is correct'''
|
'''Test that the Copy URL button is shown and that the clipboard is correct'''
|
||||||
self.assertTrue(mode.server_status.copy_url_button.isVisible())
|
self.assertTrue(mode.server_status.copy_url_button.isVisible())
|
||||||
|
@ -211,7 +211,7 @@ class GuiBaseTest(object):
|
||||||
else:
|
else:
|
||||||
self.assertEqual(clipboard.text(), 'http://127.0.0.1:{}/{}'.format(self.gui.app.port, mode.server_status.web.slug))
|
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):
|
def server_status_indicator_says_started(self, mode):
|
||||||
'''Test that the Server Status indicator shows we are started'''
|
'''Test that the Server Status indicator shows we are started'''
|
||||||
if type(mode) == ReceiveMode:
|
if type(mode) == ReceiveMode:
|
||||||
|
@ -219,7 +219,7 @@ class GuiBaseTest(object):
|
||||||
if type(mode) == ShareMode:
|
if type(mode) == ShareMode:
|
||||||
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_started'))
|
self.assertEqual(mode.server_status_label.text(), strings._('gui_status_indicator_share_started'))
|
||||||
|
|
||||||
|
|
||||||
def web_page(self, mode, string, public_mode):
|
def web_page(self, mode, string, public_mode):
|
||||||
'''Test that the web page contains a string'''
|
'''Test that the web page contains a string'''
|
||||||
s = socks.socksocket()
|
s = socks.socksocket()
|
||||||
|
@ -248,25 +248,25 @@ class GuiBaseTest(object):
|
||||||
self.assertTrue(string in f.read())
|
self.assertTrue(string in f.read())
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
def history_widgets_present(self, mode):
|
def history_widgets_present(self, mode):
|
||||||
'''Test that the relevant widgets are present in the history view after activity has taken place'''
|
'''Test that the relevant widgets are present in the history view after activity has taken place'''
|
||||||
self.assertFalse(mode.history.empty.isVisible())
|
self.assertFalse(mode.history.empty.isVisible())
|
||||||
self.assertTrue(mode.history.not_empty.isVisible())
|
self.assertTrue(mode.history.not_empty.isVisible())
|
||||||
|
|
||||||
|
|
||||||
def counter_incremented(self, mode, count):
|
def counter_incremented(self, mode, count):
|
||||||
'''Test that the counter has incremented'''
|
'''Test that the counter has incremented'''
|
||||||
self.assertEqual(mode.history.completed_count, count)
|
self.assertEqual(mode.history.completed_count, count)
|
||||||
|
|
||||||
|
|
||||||
def server_is_stopped(self, mode, stay_open):
|
def server_is_stopped(self, mode, stay_open):
|
||||||
'''Test that the server stops when we click Stop'''
|
'''Test that the server stops when we click Stop'''
|
||||||
if type(mode) == ReceiveMode or (type(mode) == ShareMode and stay_open):
|
if type(mode) == ReceiveMode or (type(mode) == ShareMode and stay_open):
|
||||||
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
|
QtTest.QTest.mouseClick(mode.server_status.server_button, QtCore.Qt.LeftButton)
|
||||||
self.assertEqual(mode.server_status.status, 0)
|
self.assertEqual(mode.server_status.status, 0)
|
||||||
|
|
||||||
|
|
||||||
def web_server_is_stopped(self):
|
def web_server_is_stopped(self):
|
||||||
'''Test that the web server also stopped'''
|
'''Test that the web server also stopped'''
|
||||||
QtTest.QTest.qWait(2000)
|
QtTest.QTest.qWait(2000)
|
||||||
|
@ -275,7 +275,7 @@ class GuiBaseTest(object):
|
||||||
# We should be closed by now. Fail if not!
|
# We should be closed by now. Fail if not!
|
||||||
self.assertNotEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
|
self.assertNotEqual(sock.connect_ex(('127.0.0.1',self.gui.app.port)), 0)
|
||||||
|
|
||||||
|
|
||||||
def server_status_indicator_says_closed(self, mode, stay_open):
|
def server_status_indicator_says_closed(self, mode, stay_open):
|
||||||
'''Test that the Server Status indicator shows we closed'''
|
'''Test that the Server Status indicator shows we closed'''
|
||||||
if type(mode) == ReceiveMode:
|
if type(mode) == ReceiveMode:
|
||||||
|
@ -319,5 +319,3 @@ class GuiBaseTest(object):
|
||||||
self.windowTitle_seen()
|
self.windowTitle_seen()
|
||||||
self.settings_button_is_visible()
|
self.settings_button_is_visible()
|
||||||
self.server_status_bar_is_visible()
|
self.server_status_bar_is_visible()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ class GuiReceiveTest(GuiBaseTest):
|
||||||
for i in range(10):
|
for i in range(10):
|
||||||
date_dir = now.strftime("%Y-%m-%d")
|
date_dir = now.strftime("%Y-%m-%d")
|
||||||
time_dir = now.strftime("%H.%M.%S")
|
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)
|
expected_filename = os.path.join(receive_mode_dir, expected_basename)
|
||||||
if os.path.exists(expected_filename):
|
if os.path.exists(expected_filename):
|
||||||
exists = True
|
exists = True
|
||||||
|
@ -52,6 +52,28 @@ class GuiReceiveTest(GuiBaseTest):
|
||||||
response = requests.get('http://127.0.0.1:{}/close'.format(self.gui.app.port))
|
response = requests.get('http://127.0.0.1:{}/close'.format(self.gui.app.port))
|
||||||
self.assertEqual(response.status_code, 404)
|
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):
|
def run_receive_mode_sender_closed_tests(self, public_mode):
|
||||||
'''Test that the share can be stopped by the sender in receive mode'''
|
'''Test that the share can be stopped by the sender in receive mode'''
|
||||||
if not public_mode:
|
if not public_mode:
|
||||||
|
@ -97,6 +119,7 @@ class GuiReceiveTest(GuiBaseTest):
|
||||||
self.counter_incremented(self.gui.receive_mode, 3)
|
self.counter_incremented(self.gui.receive_mode, 3)
|
||||||
self.upload_file(public_mode, '/tmp/testdir/test', 'test')
|
self.upload_file(public_mode, '/tmp/testdir/test', 'test')
|
||||||
self.counter_incremented(self.gui.receive_mode, 4)
|
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.history_indicator(self.gui.receive_mode, public_mode)
|
||||||
self.server_is_stopped(self.gui.receive_mode, False)
|
self.server_is_stopped(self.gui.receive_mode, False)
|
||||||
self.web_server_is_stopped()
|
self.web_server_is_stopped()
|
||||||
|
|
|
@ -148,7 +148,7 @@ class SettingsGuiBaseTest(object):
|
||||||
self.assertFalse(self.gui.close_after_first_download_checkbox.isChecked())
|
self.assertFalse(self.gui.close_after_first_download_checkbox.isChecked())
|
||||||
|
|
||||||
# receive mode
|
# receive mode
|
||||||
self.gui.downloads_dir_lineedit.setText('/tmp/OnionShareSettingsTest')
|
self.gui.data_dir_lineedit.setText('/tmp/OnionShareSettingsTest')
|
||||||
|
|
||||||
|
|
||||||
# bundled mode is enabled
|
# bundled mode is enabled
|
||||||
|
@ -234,7 +234,7 @@ class SettingsGuiBaseTest(object):
|
||||||
self.assertFalse(data["save_private_key"])
|
self.assertFalse(data["save_private_key"])
|
||||||
self.assertFalse(data["use_stealth"])
|
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.assertFalse(data["close_after_first_download"])
|
||||||
self.assertEqual(data["connection_type"], "bundled")
|
self.assertEqual(data["connection_type"], "bundled")
|
||||||
self.assertFalse(data["tor_bridges_use_obfs4"])
|
self.assertFalse(data["tor_bridges_use_obfs4"])
|
||||||
|
|
|
@ -39,7 +39,7 @@ class TorGuiBaseTest(GuiBaseTest):
|
||||||
|
|
||||||
# Get all of the settings in test_settings
|
# Get all of the settings in test_settings
|
||||||
test_settings['connection_type'] = 'automatic'
|
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():
|
for key, val in common.settings.default_settings.items():
|
||||||
if key not in test_settings:
|
if key not in test_settings:
|
||||||
test_settings[key] = val
|
test_settings[key] = val
|
||||||
|
|
|
@ -64,7 +64,7 @@ class TestSettings:
|
||||||
'private_key': '',
|
'private_key': '',
|
||||||
'slug': '',
|
'slug': '',
|
||||||
'hidservauth_string': '',
|
'hidservauth_string': '',
|
||||||
'downloads_dir': os.path.expanduser('~/OnionShare'),
|
'data_dir': os.path.expanduser('~/OnionShare'),
|
||||||
'public_mode': False
|
'public_mode': False
|
||||||
}
|
}
|
||||||
for key in settings_obj._settings:
|
for key in settings_obj._settings:
|
||||||
|
|