summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.rst91
-rw-r--r--Makefile9
-rw-r--r--changes/VERSION_COMPAT1
-rw-r--r--data/translations/es.qmbin2417 -> 40898 bytes
-rw-r--r--data/translations/es.ts1117
-rw-r--r--data/ts/en_US.ts374
-rw-r--r--docs/dev/internationalization.rst5
-rw-r--r--pkg/requirements-leap.pip2
-rw-r--r--release-notes.rst323
-rw-r--r--relnotes.txt57
-rwxr-xr-xsetup.py11
-rw-r--r--src/leap/bitmask/app.py4
-rw-r--r--src/leap/bitmask/backend/utils.py33
-rw-r--r--src/leap/bitmask/backend_app.py9
-rw-r--r--src/leap/bitmask/frontend_app.py9
-rw-r--r--src/leap/bitmask/logs/utils.py15
16 files changed, 1218 insertions, 842 deletions
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 421389e2..2d56cc6d 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -3,68 +3,13 @@
Changelog
---------
-0.9.0rc4 October 05
-+++++++++++++++++++
+0.9.0 October 28
+++++++++++++++++
Features
~~~~~~~~
-- `#7471 <https://leap.se/code/issues/7471>`_: Disable email firewall if we are running inside a docker container.
-
-Bugfixes
-~~~~~~~~
-- `#7451 <https://leap.se/code/issues/7451>`_: Assign the timeout 'call later' before starting the sync to prevent race conditions.
-- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
-- Remove bubble argument from the logbook NullHandler
-
-
-0.9.0rc3 September 22
-+++++++++++++++++++++
-Features
-~~~~~~~~
- `#4284 <https://leap.se/code/issues/4284>`_: Download specific smtp certificate from provider, instead of using the vpn one.
-- `#7414 <https://leap.se/code/issues/7414>`_: Remove taskthread dependency, replace with custom (and small) code.
-- `#7419 <https://leap.se/code/issues/7419>`_: Load credentials from environment variables and trigger login.
-
-
-Bugfixes
-~~~~~~~~
-- `#7415 <https://leap.se/code/issues/7415>`_: Fix wrong argument number on window raise event.
-- `#7448 <https://leap.se/code/issues/7448>`_: Fix hangs during logout.
-- `#7453 <https://leap.se/code/issues/7453>`_: After a complete sync show the user the amount of unread emails.
-- `#7470 <https://leap.se/code/issues/7470>`_: Fix bug with password change.
-- `#7474 <https://leap.se/code/issues/7474>`_: Track soledad ready state on a shared place for easy access. Enable password change window.
-- Authenticate properly logout calls to API.
-
-
-0.9.0rc2 August 27
-++++++++++++++++++
-
-Features
-~~~~~~~~
-- `#7250 <https://leap.se/code/issues/7250>`_: Enable '--danger' for stable versions.
-- `#7291 <https://leap.se/code/issues/7291>`_: Move the updater code from the launcher to the client.
-- `#7342 <https://leap.se/code/issues/7342>`_: Added apply_updates.py script for the pyinstaller bundle.
-- `#7353 <https://leap.se/code/issues/7353>`_: Add notifications of soledad sync progress to UI.
-- `#7356 <https://leap.se/code/issues/7356>`_: Allow to disable EIP component on build.
-
-Bugfixes
-~~~~~~~~
-- `#6594 <https://leap.se/code/issues/6594>`_: Handle disabled registration on provider.
-- `#7149 <https://leap.se/code/issues/7149>`_: Start the events server when reactor is running.
-- `#7273 <https://leap.se/code/issues/7273>`_: Logbook subscriber stop fails if not started.
-- `#7273 <https://leap.se/code/issues/7273>`_: ZMQError: address already in use - logbook subscriber already started.
-- `#7281 <https://leap.se/code/issues/7281>`_: Support a provider not providing location for the eip gateways.
-- `#7319 <https://leap.se/code/issues/7319>`_: Raise the maxfiles limit in OSX
-- `#7343 <https://leap.se/code/issues/7343>`_: Clean up and fix the tests.
-
-
-
-0.9.0rc1 July 10
-++++++++++++++++
-
-Features
-~~~~~~~~
- `#5526 <https://leap.se/code/issues/5526>`_: Make "check" button selected by default.
- `#6359 <https://leap.se/code/issues/6359>`_: Adapt bitmask to the new events api on leap.common.
- `#6360 <https://leap.se/code/issues/6360>`_: Use txzmq in backend.
@@ -81,23 +26,51 @@ Features
- `#7162 <https://leap.se/code/issues/7162>`_: Log LSB-release info if available.
- `#7180 <https://leap.se/code/issues/7180>`_: Add log rotation for bitmask.log.
- `#7184 <https://leap.se/code/issues/7184>`_: Forward twisted logs to logging and handle logging logs with logbook.
+- `#7250 <https://leap.se/code/issues/7250>`_: Enable '--danger' for stable versions.
+- `#7291 <https://leap.se/code/issues/7291>`_: Move the updater code from the launcher to the client.
+- `#7342 <https://leap.se/code/issues/7342>`_: Added apply_updates.py script for the pyinstaller bundle.
+- `#7353 <https://leap.se/code/issues/7353>`_: Add notifications of soledad sync progress to UI.
+- `#7356 <https://leap.se/code/issues/7356>`_: Allow to disable EIP component on build.
+- `#7414 <https://leap.se/code/issues/7414>`_: Remove taskthread dependency, replace with custom (and small) code.
+- `#7419 <https://leap.se/code/issues/7419>`_: Load credentials from environment variables and trigger login.
+- `#7471 <https://leap.se/code/issues/7471>`_: Disable email firewall if we are running inside a docker container.
- Add support to the new async-api of soledad
Bugfixes
~~~~~~~~
+
- `#6418 <https://leap.se/code/issues/6418>`_: Cannot change preseeded providers if checks for one fail.
- `#6424 <https://leap.se/code/issues/6424>`_: Do not disable autostart if the quit is triggered by a system logout.
+- `#6536 <https://leap.se/code/issues/6536>`_, `#6568 <https://leap.se/code/issues/6568>`_, `#6691 <https://leap.se/code/issues/6691>`_: Refactor soledad sync to do it the twisted way.
- `#6541 <https://leap.se/code/issues/6541>`_: Client must honor the ports specified in eip-service.json.
+- `#6594 <https://leap.se/code/issues/6594>`_: Handle disabled registration on provider.
- `#6654 <https://leap.se/code/issues/6654>`_: Regression fix, login attempt is made against previously selected provider.
- `#6682 <https://leap.se/code/issues/6682>`_: Handle user cancel keyring open operation, this prevents a bitmask freeze.
- `#6894 <https://leap.se/code/issues/6894>`_: Change 'ip' command location to support Fedora/RHEL distros.
- `#7093 <https://leap.se/code/issues/7093>`_: Fix controller attribute error.
- `#7126 <https://leap.se/code/issues/7126>`_: Don't run the event server on the backend for the standalone bundle since the launcher takes care of that.
+- `#7149 <https://leap.se/code/issues/7149>`_: Start the events server when reactor is running.
- `#7185 <https://leap.se/code/issues/7185>`_: Log contains exported PGP Private Key.
- `#7222 <https://leap.se/code/issues/7222>`_: Run the zmq log subscriber in the background to avoid hitting the zmq's buffer limits.
-- `#6536 <https://leap.se/code/issues/6536>`_, `#6568 <https://leap.se/code/issues/6568>`_, `#6691 <https://leap.se/code/issues/6691>`_: Refactor soledad sync to do it the twisted way.
-- Fix the bootstrap script for developers so it works on Fedora/RHEL systems where there is /usr/lib64 for python libs.
+- `#7273 <https://leap.se/code/issues/7273>`_: Logbook subscriber stop fails if not started.
+- `#7273 <https://leap.se/code/issues/7273>`_: ZMQError: address already in use - logbook subscriber already started.
+- `#7281 <https://leap.se/code/issues/7281>`_: Support a provider not providing location for the eip gateways.
+- `#7319 <https://leap.se/code/issues/7319>`_: Raise the maxfiles limit in OSX
+- `#7343 <https://leap.se/code/issues/7343>`_: Clean up and fix the tests.
+- `#7415 <https://leap.se/code/issues/7415>`_: Fix wrong argument number on window raise event.
+- `#7448 <https://leap.se/code/issues/7448>`_: Fix hangs during logout.
+- `#7451 <https://leap.se/code/issues/7451>`_: Assign the timeout 'call later' before starting the sync to prevent race conditions.
+- `#7453 <https://leap.se/code/issues/7453>`_: After a complete sync show the user the amount of unread emails.
+- `#7470 <https://leap.se/code/issues/7470>`_: Fix bug with password change.
+- `#7474 <https://leap.se/code/issues/7474>`_: Track soledad ready state on a shared place for easy access. Enable password change window.
+- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
+- `#7512 <https://leap.se/code/issues/7512>`_: Pass on standalone flag to common.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store logs in the right place.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store zmq certs in the right path.
+- Authenticate properly logout calls to API.
- Fix soledad bootstrap sync retries.
+- Fix the bootstrap script for developers so it works on Fedora/RHEL systems where there is /usr/lib64 for python libs.
+- Remove bubble argument from the logbook NullHandler
0.8.1 February 25
diff --git a/Makefile b/Makefile
index 5fea9387..d6dd0941 100644
--- a/Makefile
+++ b/Makefile
@@ -140,11 +140,15 @@ checkout_leapdeps_develop:
checkout_leapdeps_release:
pkg/scripts/checkout_leap_versions.sh
-sumo_tarball_release: checkout_leapdeps_release
+setup_without_namespace:
+ awk '!/namespace_packages*/' setup.py > file && mv file setup.py
+
+sumo_tarball_release: checkout_leapdeps_release setup_without_namespace
python setup.py sdist --sumo
git checkout -- src/leap/__init__.py
git checkout -- src/leap/bitmask/_version.py
rm -rf src/leap/soledad
+ git checkout -- setup.py
# XXX We need two sets of sumo-tarballs: the one published for a release
# (that will pick the pinned leap deps), and the other which will be used
@@ -152,11 +156,12 @@ sumo_tarball_release: checkout_leapdeps_release
# TODO change naming scheme for sumo-latest: should include date (in case
# bitmask is not updated bu the dependencies are)
-sumo_tarball_latest: checkout_leapdeps_develop pull_leapdeps
+sumo_tarball_latest: checkout_leapdeps_develop pull_leapdeps setup_without_namespace
python setup.py sdist --sumo # --latest
git checkout -- src/leap/__init__.py
git checkout -- src/leap/bitmask/_version.py
rm -rf src/leap/soledad
+ git checkout -- setup.py
pyinst:
pyinstaller -y pkg/pyinst/bitmask.spec
diff --git a/changes/VERSION_COMPAT b/changes/VERSION_COMPAT
index f35d01c6..660f9640 100644
--- a/changes/VERSION_COMPAT
+++ b/changes/VERSION_COMPAT
@@ -11,4 +11,3 @@
#
# BEGIN DEPENDENCY LIST -------------------------
# leap.foo.bar>=x.y.z
-leap.mail>=0.4.0 # this is not tagged/released yet
diff --git a/data/translations/es.qm b/data/translations/es.qm
index 596af5b3..666ad07f 100644
--- a/data/translations/es.qm
+++ b/data/translations/es.qm
Binary files differ
diff --git a/data/translations/es.ts b/data/translations/es.ts
index 02f9083a..e68554c1 100644
--- a/data/translations/es.ts
+++ b/data/translations/es.ts
@@ -4,168 +4,174 @@
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="14"/>
<source>Advanced Key Management</source>
- <translation type="unfinished"/>
+ <translation>Administración avanzada de claves</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="24"/>
<source>My key pair</source>
- <translation type="unfinished"/>
+ <translation>Mi par de claves</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="30"/>
<source>User:</source>
- <translation type="unfinished"/>
+ <translation>Usuario:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="40"/>
<source>user_name@provider</source>
- <translation type="unfinished"/>
+ <translation>nombre_de_usuario@proveedor</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="53"/>
<source>Key ID:</source>
- <translation type="unfinished"/>
+ <translation>Identidad de la clave:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="63"/>
<source>key ID</source>
- <translation type="unfinished"/>
+ <translation>Identidad de la clave</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="76"/>
<source>Key fingerprint:</source>
- <translation type="unfinished"/>
+ <translation>Huella de validación de la clave:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="86"/>
<source>fingerprint</source>
- <translation type="unfinished"/>
+ <translation>huella de validación</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="101"/>
<source>Export current key pair</source>
- <translation type="unfinished"/>
+ <translation>Exportar par de claves actual</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="121"/>
<source>Import custom key pair</source>
- <translation type="unfinished"/>
+ <translation>Importar par de claves personalizado</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="139"/>
<source>Stored public keys</source>
- <translation type="unfinished"/>
+ <translation>Claves públicas almacenadas</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="164"/>
<source>Email</source>
- <translation type="unfinished"/>
+ <translation>Correo electrónico</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/advanced_key_management.ui" line="169"/>
<source>Key ID</source>
- <translation type="unfinished"/>
+ <translation>Identidad de la clave</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="119"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="118"/>
<source>Open keys file</source>
- <translation type="unfinished"/>
+ <translation>Abrir archivo de claves</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="237"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="229"/>
<source>Input/Output error</source>
- <translation type="unfinished"/>
+ <translation>Error de Entrada/Salida</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="158"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="155"/>
<source>There was an error accessing the file.
Import canceled.</source>
- <translation type="unfinished"/>
+ <translation>Hubo un error al acceder al archivo.
+Se ha cancelado la importación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="169"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="165"/>
<source>Data mismatch</source>
- <translation type="unfinished"/>
+ <translation>Los datos no coinciden</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="172"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="168"/>
<source>The public and private key should have the same address and fingerprint.
Import canceled.</source>
- <translation type="unfinished"/>
+ <translation>Las claves pública y privada deben tener la misma dirección y huella de validación (fingerprint).
+Se canceló la importación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="183"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="178"/>
<source>Missing key</source>
- <translation type="unfinished"/>
+ <translation>Clave ausente</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="186"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="181"/>
<source>You need to provide the public AND private key in the same file.
Import canceled.</source>
- <translation type="unfinished"/>
+ <translation>Tiene que aportar la clave pública Y la clave privada en el mismo archivo.
+Se canceló la importación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="197"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="191"/>
<source>Address mismatch</source>
- <translation type="unfinished"/>
+ <translation>Las direcciones no coinciden</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="200"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="194"/>
<source>The identity for the key needs to be the same as your user address.
Import canceled.</source>
- <translation type="unfinished"/>
+ <translation>La identidad para la clave tiene que ser la misma que la de su dirección de usuario.
+Se ha cancelado la importación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="144"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="142"/>
<source>Import Successful</source>
- <translation type="unfinished"/>
+ <translation>Importación finalizada con éxito</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="145"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="143"/>
<source>The key pair was imported successfully.</source>
- <translation type="unfinished"/>
+ <translation>El par de claves se ha importado correctamente.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="207"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="201"/>
<source>Save keys file</source>
- <translation type="unfinished"/>
+ <translation>Guardar el archivo de claves</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="224"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="217"/>
<source>Export Successful</source>
- <translation type="unfinished"/>
+ <translation>Exportación finalizada con éxito</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="226"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="219"/>
<source>The key pair was exported successfully.
Please, store your private key in a safe place.</source>
- <translation type="unfinished"/>
+ <translation>El par de claves fue exportado correctamente.
+Por favor, guarde su clave privada en un lugar seguro.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="239"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="231"/>
<source>There was an error accessing the file.
Export canceled.</source>
- <translation type="unfinished"/>
+ <translation>Hubo un error al acceder al archivo.
+Se ha cancelado la exportación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="59"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="58"/>
<source>The provider that you are using does not support {0}.</source>
- <translation type="unfinished"/>
+ <translation>El proveedor que está usando no soporta {0}.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="65"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="64"/>
<source>To use this, you need to enable/start {0}.</source>
- <translation type="unfinished"/>
+ <translation>Para usar este, necesita habilitar/iniciar {0}.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="110"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="109"/>
<source>&lt;span style=&apos;color:#0000FF;&apos;&gt;NOTE&lt;/span&gt;: </source>
- <translation type="unfinished"/>
+ <translation>&lt;span style=&apos;color:#0000FF;&apos;&gt;NOTA&lt;/span&gt;: </translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="125"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="124"/>
<source>Are you sure that you want to replace the current key pair with the imported?</source>
- <translation type="unfinished"/>
+ <translation>¿Está seguro de que quiere reemplazar el par de claves actual con el importado?</translation>
</message>
</context>
<context>
@@ -173,48 +179,48 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/app.py" line="63"/>
<source>Application error</source>
- <translation type="unfinished"/>
+ <translation>Error de la aplicación</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/app.py" line="65"/>
<source>There is a problem contacting the backend, please restart Bitmask.</source>
- <translation type="unfinished"/>
+ <translation>Hay un problema al contactar con el motor de la aplicación (backend), por favor reinicie Bitmask.</translation>
</message>
</context>
<context>
<name>ComplainDialog</name>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="417"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="455"/>
<source>Ok, thanks</source>
- <translation type="unfinished"/>
+ <translation>Está bien, gracias</translation>
</message>
</context>
<context>
<name>EIPPreferencesWindow</name>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="48"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="47"/>
<source>Automatic</source>
- <translation type="unfinished"/>
+ <translation>Automático</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="159"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="156"/>
<source>Gateway settings for provider &apos;{0}&apos; saved.</source>
- <translation type="unfinished"/>
+ <translation>Se guardaron las opciones de pasarela (gateway) para el proveedor &apos;{0}&apos;.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="236"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="230"/>
<source>There was a problem with configuration files.</source>
- <translation type="unfinished"/>
+ <translation>Hubo un problema con los ficheros de configuración.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="125"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="123"/>
<source> (uninitialized)</source>
- <translation type="unfinished"/>
+ <translation>(no inicializado)</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="251"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="244"/>
<source>This is an uninitialized provider, please log in first.</source>
- <translation type="unfinished"/>
+ <translation>Este es un proveedor no inicializado, por favor primero inicie sesión.</translation>
</message>
</context>
<context>
@@ -222,195 +228,195 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="20"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="34"/>
<source>Turn On</source>
- <translation type="unfinished"/>
+ <translation>Activar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="79"/>
<source>...</source>
- <translation type="unfinished"/>
+ <translation>...</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="95"/>
<source>Traffic is being routed in the clear</source>
- <translation type="unfinished"/>
+ <translation>El tráfico está siendo enrutado sin cifrar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="213"/>
<source>0.0 KB/s</source>
- <translation type="unfinished"/>
+ <translation>0,0 KB/s</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="245"/>
<source>Turn Off</source>
- <translation type="unfinished"/>
+ <translation>Desactivar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/eip_status.ui" line="259"/>
<source>Cancel</source>
- <translation type="unfinished"/>
+ <translation>Cancelar</translation>
</message>
</context>
<context>
<name>EIPStatusWidget</name>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="429"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="426"/>
<source>Turn ON</source>
- <translation type="unfinished"/>
+ <translation>ACTIVAR</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="569"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="563"/>
<source>Authenticating...</source>
- <translation type="unfinished"/>
+ <translation>Autentificando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="578"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="572"/>
<source>Retrieving configuration...</source>
- <translation type="unfinished"/>
+ <translation>Obteniendo configuración...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="580"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="574"/>
<source>Waiting to start...</source>
- <translation type="unfinished"/>
+ <translation>Esperando para iniciar...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="582"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="576"/>
<source>Assigning IP</source>
- <translation type="unfinished"/>
+ <translation>Asignando IP</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="584"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="578"/>
<source>Reconnecting...</source>
- <translation type="unfinished"/>
+ <translation>Reconectando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="592"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="586"/>
<source>Unable to start VPN, it&apos;s already running.</source>
- <translation type="unfinished"/>
+ <translation>No se pudo iniciar la VPN, ya está ejecutándose.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="320"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="318"/>
<source>disabled</source>
- <translation type="unfinished"/>
+ <translation>deshabilitado</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="614"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="608"/>
<source>{0}: OFF</source>
- <translation type="unfinished"/>
+ <translation>{0}: DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="317"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="315"/>
<source>You must login to use {0}</source>
- <translation type="unfinished"/>
+ <translation>Tiene que iniciar sesión para usar {0}</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="619"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="613"/>
<source>{0}: Starting...</source>
- <translation type="unfinished"/>
+ <translation>{0}: Iniciando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="622"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="616"/>
<source>{0}: ON</source>
- <translation type="unfinished"/>
+ <translation>{0}: ACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="576"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="570"/>
<source>Encrypted Internet is starting</source>
- <translation type="unfinished"/>
+ <translation>Internet Cifrado está iniciándose</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="415"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="412"/>
<source>Retry</source>
- <translation type="unfinished"/>
+ <translation>Reintentar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="478"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="474"/>
<source>Traffic is being routed in the clear.</source>
- <translation type="unfinished"/>
+ <translation>El tráfico se está enrutando sin cifrar.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="479"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="475"/>
<source>Network is unreachable.</source>
- <translation type="unfinished"/>
+ <translation>No se pudo alcanzar la red.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="481"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="477"/>
<source>Error connecting</source>
- <translation type="unfinished"/>
+ <translation>Error al conectar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="497"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="493"/>
<source>Error connecting.</source>
- <translation type="unfinished"/>
+ <translation>Error al conectar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="500"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="496"/>
<source>Bitmask is blocking unencrypted traffic.</source>
- <translation type="unfinished"/>
+ <translation>Bitmask está bloqueando el tráfico no cifrado.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="644"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="638"/>
<source>Routing traffic through: &lt;b&gt;{0}&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>Enrutando tráfico a través de: &lt;b&gt;{0}&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="690"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="683"/>
<source>Could not load {0} configuration.</source>
- <translation type="unfinished"/>
+ <translation>No pudo cargarse la configuración de {0}.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="699"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="692"/>
<source>Another openvpn instance is already running, and could not be stopped.</source>
- <translation type="unfinished"/>
+ <translation>Ya está ejecutándose otra instancia openvpn, y no se pudo detener.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="709"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="702"/>
<source>Another openvpn instance is already running, and could not be stopped because it was not launched by Bitmask. Please stop it and try again.</source>
- <translation type="unfinished"/>
+ <translation>Ya está ejecutándose otra instancia openvpn, y no pudo ser detenida porque no fue iniciada por Bitmask. Por favor deténgala e inténtelo de nuevo.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="717"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="710"/>
<source>We could not find openvpn binary.</source>
- <translation type="unfinished"/>
+ <translation>No pudimos encontrar el binario de openvpn.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="754"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="747"/>
<source>We could not find &lt;b&gt;pkexec&lt;/b&gt; in your system.</source>
- <translation type="unfinished"/>
+ <translation>No pudimos encontrar &lt;b&gt;pkexec&lt;/b&gt; en su sistema.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="764"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="757"/>
<source>{0} cannot be started because the tuntap extension is not installed properly in your system.</source>
- <translation type="unfinished"/>
+ <translation>{0} no puede ser iniciado porque la extensión tuntap no está apropiadamente instalada en su sistema.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="784"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="776"/>
<source>Network is unreachable</source>
- <translation type="unfinished"/>
+ <translation>No se pudo alcanzar la red</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="315"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="313"/>
<source>&lt;font color=red&gt;Disabled: missing helper files&lt;/font&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;font color=red&gt;Deshabilitado: Ficheros de configuración ausentes&lt;/font&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="731"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="724"/>
<source>VPN Launcher error. See the logs for more info.</source>
- <translation type="unfinished"/>
+ <translation>Error del lanzador de VPN. Vea los registros (logs) para más información.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="734"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="727"/>
<source>Encrypted Internet failed to start</source>
- <translation type="unfinished"/>
+ <translation>Fallo al iniciar Internet Cifrado</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_status.py" line="746"/>
+ <location filename="../src/leap/bitmask/gui/eip_status.py" line="739"/>
<source>We could not find any authentication agent in your system.&lt;br/&gt;Make sure you have &lt;b&gt;polkit-gnome-authentication-agent-1&lt;/b&gt; running and try again.</source>
- <translation type="unfinished"/>
+ <translation>No pudimos encontrar ningún agente de autentificación en su sistema.&lt;br/&gt;Asegúrese de que &lt;b&gt;polkit-gnome-authentication-agent-1&lt;/b&gt; está ejecutándose e inténtelo de nuevo.</translation>
</message>
</context>
<context>
@@ -418,17 +424,17 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/logout.ui" line="14"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/logout.ui" line="27"/>
<source>...</source>
- <translation type="unfinished"/>
+ <translation>...</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/logout.ui" line="50"/>
<source>Logout</source>
- <translation type="unfinished"/>
+ <translation>Cerrar sesión</translation>
</message>
</context>
<context>
@@ -436,22 +442,22 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="14"/>
<source>Logs</source>
- <translation>Logs</translation>
+ <translation>Registros (logs)</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="49"/>
<source>Debug</source>
- <translation type="unfinished"/>
+ <translation>Depurar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="69"/>
<source>Info</source>
- <translation>Info</translation>
+ <translation>Información</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="89"/>
<source>Warning</source>
- <translation>Warning</translation>
+ <translation>Advertencia</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="109"/>
@@ -461,61 +467,61 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="129"/>
<source>Critical</source>
- <translation>Critical</translation>
+ <translation>Crítico</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="149"/>
<source>Save to file</source>
- <translation>Guardar como</translation>
+ <translation>Guardar a archivo</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="164"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="148"/>
<source>Save As</source>
<translation>Guardar como</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="24"/>
<source>Filter by:</source>
- <translation type="unfinished"/>
+ <translation>Filtrar por:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/loggerwindow.ui" line="34"/>
<source>Case Insensitive</source>
- <translation type="unfinished"/>
+ <translation>Distingue mayúsculas/minúsculas</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="195"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="179"/>
<source>Send to Pastebin.com</source>
- <translation type="unfinished"/>
+ <translation>Enviar a pastebin.com</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="192"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="176"/>
<source>Sending to pastebin...</source>
- <translation type="unfinished"/>
+ <translation>Enviando a pastebin...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="207"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="191"/>
<source>Your pastebin link &lt;a href=&apos;{0}&apos;&gt;{0}&lt;/a&gt;</source>
- <translation type="unfinished"/>
+ <translation>Su enlace de pastebin &lt;a href=&apos;{0}&apos;&gt;{0}&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="212"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="196"/>
<source>Pastebin OK</source>
- <translation type="unfinished"/>
+ <translation>Pastebin correcto</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="227"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="211"/>
<source>Sending logs to Pastebin failed!</source>
- <translation type="unfinished"/>
+ <translation>¡No se pudieron enviar los registros (logs) a Pastebin!</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="233"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="217"/>
<source>Pastebin Error</source>
- <translation type="unfinished"/>
+ <translation>Error de Pastebin</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="232"/>
- <source>Maximum posts per day reached</source>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="216"/>
+ <source>Maximum amount of submissions reached for today.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -524,66 +530,111 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/login.ui" line="26"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/login.ui" line="90"/>
+ <location filename="../src/leap/bitmask/gui/ui/login.ui" line="93"/>
<source>Remember username and password</source>
- <translation type="unfinished"/>
+ <translation>Recordar nombre de usuario y contraseña</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/login.ui" line="112"/>
+ <location filename="../src/leap/bitmask/gui/ui/login.ui" line="115"/>
<source>&lt;b&gt;Username:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;Nombre de usuario:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/login.ui" line="125"/>
+ <location filename="../src/leap/bitmask/gui/ui/login.ui" line="128"/>
<source>&lt;b&gt;Password:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;Contraseña:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="208"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="300"/>
<source>Log In</source>
- <translation type="unfinished"/>
+ <translation>Iniciar sesión</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="203"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="295"/>
<source>Cancel</source>
- <translation type="unfinished"/>
+ <translation>Cancelar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/login.ui" line="214"/>
+ <location filename="../src/leap/bitmask/gui/ui/login.ui" line="220"/>
<source>...</source>
- <translation type="unfinished"/>
+ <translation>...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="314"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="607"/>
<source>Logout</source>
- <translation type="unfinished"/>
+ <translation>Cerrar sesión</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="240"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="328"/>
<source>Please select a valid provider</source>
- <translation type="unfinished"/>
+ <translation>Por favor seleccione un proveedor válido</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="245"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="332"/>
<source>Please provide a valid username</source>
- <translation type="unfinished"/>
+ <translation>Por favor introduzca un nombre de usuario válido</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="250"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="336"/>
<source>Please provide a valid password</source>
- <translation type="unfinished"/>
+ <translation>Por favor introduzca una contraseña válida</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="253"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="345"/>
<source>Logging in...</source>
- <translation type="unfinished"/>
+ <translation>Iniciando sesión...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="307"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="604"/>
<source>Logging out...</source>
+ <translation>Cerrando sesión...</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="406"/>
+ <source>Waiting...</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="445"/>
+ <source>Log in cancelled by the user.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="465"/>
+ <source>Unable to login: Problem with provider</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="536"/>
+ <source>Succeeded</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="619"/>
+ <source>Something went wrong with the logout.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="697"/>
+ <source>Unknown error.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="701"/>
+ <source>There was a server problem with authentication.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="705"/>
+ <source>Could not establish a connection.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/login.py" line="709"/>
+ <source>Invalid username or password.</source>
<translation type="unfinished"/>
</message>
</context>
@@ -592,136 +643,166 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/mail_status.ui" line="20"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mail_status.ui" line="47"/>
<source>You must login to use encrypted email.</source>
- <translation type="unfinished"/>
+ <translation>Tiene que iniciar sesión para usar correo electrónico cifrado</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mail_status.ui" line="79"/>
<source>Email</source>
- <translation type="unfinished"/>
+ <translation>Correo electrónico</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="196"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="183"/>
<source>There was an unexpected problem with Soledad.</source>
- <translation type="unfinished"/>
+ <translation>Hubo un problema inesperado con Soledad.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="432"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="464"/>
<source>OFF</source>
- <translation type="unfinished"/>
+ <translation>DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="224"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="212"/>
<source>Mail is OFF</source>
- <translation type="unfinished"/>
+ <translation>El correo está DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="233"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="221"/>
<source>Mail is starting</source>
- <translation type="unfinished"/>
+ <translation>El correo cifrado está iniciándose...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="455"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="484"/>
<source>ON</source>
- <translation type="unfinished"/>
+ <translation>ACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="237"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="225"/>
<source>Mail is ON</source>
- <translation type="unfinished"/>
+ <translation>El correo está ACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="240"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="228"/>
<source>Mail is disabled</source>
- <translation type="unfinished"/>
+ <translation>El correo cifrado está deshabilitado</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="441"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="472"/>
<source>Starting...</source>
- <translation type="unfinished"/>
+ <translation>Iniciando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="270"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="262"/>
<source>Soledad has started...</source>
- <translation type="unfinished"/>
+ <translation>Se ha iniciado Soledad...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="272"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="265"/>
<source>Soledad is starting, please wait...</source>
- <translation type="unfinished"/>
+ <translation>Iniciando Soledad, por favor espere...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="312"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="331"/>
<source>Found key! Starting mail...</source>
- <translation type="unfinished"/>
+ <translation>¡Se encontró clave! Iniciando correo cifrado...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="317"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="339"/>
<source>Finished generating key!</source>
- <translation type="unfinished"/>
+ <translation>¡Se terminó de generar la clave!</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="319"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="341"/>
<source>Starting mail...</source>
- <translation type="unfinished"/>
+ <translation>Iniciando correo cifrado...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="352"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="370"/>
<source>SMTP failed to start, check the logs.</source>
- <translation type="unfinished"/>
+ <translation>No se pudo iniciar SMTP, compruebe los registros (logs).</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="409"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="442"/>
<source>About to start, please wait...</source>
- <translation type="unfinished"/>
+ <translation>A punto de comenzar, por favor espere...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="416"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="449"/>
<source>Disabled</source>
- <translation type="unfinished"/>
+ <translation>Deshabilitado</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="166"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="154"/>
<source>{0}: OFF</source>
- <translation type="unfinished"/>
+ <translation>{0}: DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="463"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="491"/>
<source>You must be logged in to use {0}.</source>
- <translation type="unfinished"/>
+ <translation>Tiene que iniciar sesión para usar {0}.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="315"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="337"/>
<source>Generating new key, this may take a few minutes.</source>
- <translation type="unfinished"/>
+ <translation>Generando una nueva clave, esto puede llevar algunos minutos.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="392"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="429"/>
<source>{0} Unread Emails in your Inbox</source>
- <translation type="unfinished"/>
+ <translation>{0} correos no leídos en su Buzón de Entrada</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="396"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="433"/>
<source>1 Unread Email in your Inbox</source>
- <translation type="unfinished"/>
+ <translation>1 correo no leído en su Buzón de Entrada</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="448"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="478"/>
<source>Disconnecting...</source>
- <translation type="unfinished"/>
+ <translation>Desconectando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="474"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="501"/>
<source>Invalid auth token, try logging in again.</source>
- <translation type="unfinished"/>
+ <translation>Credencial de autentificación no válida, intentando iniciar sesión de nuevo.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="308"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="329"/>
<source>Initial sync in progress, please wait...</source>
+ <translation>Sincronización inicial en curso, por favor espere...</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="270"/>
+ <source>Sync: downloading ({0:02}%)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="274"/>
+ <source>Sync: download completed.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="279"/>
+ <source>Sync: uploading ({0:02}%)</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="283"/>
+ <source>Sync: upload complete.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="291"/>
+ <source>Sync: completed.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="334"/>
+ <source>Key not found...</source>
<translation type="unfinished"/>
</message>
</context>
@@ -730,15 +811,15 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="237"/>
<source>There are new updates available, please restart.</source>
- <translation type="unfinished"/>
+ <translation>Hay nuevas actualizaciones disponibles, por favor reinicie Bitmask.</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="279"/>
<source>More...</source>
- <translation type="unfinished"/>
+ <translation>Más...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="889"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="895"/>
<source>Help</source>
<translation>Ayuda</translation>
</message>
@@ -750,7 +831,7 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="355"/>
<source>&amp;Help</source>
- <translation>&amp;Ayuda</translation>
+ <translation>A&amp;yuda</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="360"/>
@@ -758,279 +839,240 @@ Export canceled.</source>
<translation>&amp;Asistente</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="744"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="738"/>
<source> The following components will be updated:
%s</source>
- <translation type="unfinished"/>
+ <translation>Se actualizarán los siguientes componentes:
+%s</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="747"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="741"/>
<source>Updates available</source>
- <translation type="unfinished"/>
+ <translation>Actualizaciones disponibles</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="236"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="256"/>
<source>Show Main Window</source>
- <translation type="unfinished"/>
+ <translation>Mostrar ventana principal</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1650"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1562"/>
<source>Starting...</source>
- <translation type="unfinished"/>
+ <translation>Iniciando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1674"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1585"/>
<source>Not supported</source>
- <translation type="unfinished"/>
+ <translation>No soportado</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1678"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1589"/>
<source>Disabled</source>
- <translation type="unfinished"/>
+ <translation>Deshabilitado</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="32"/>
<source>Bitmask</source>
- <translation type="unfinished"/>
+ <translation>Bitmask</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="350"/>
<source>About &amp;Bitmask</source>
- <translation type="unfinished"/>
+ <translation>Acerca de &amp;Bitmask</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="230"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="247"/>
<source>Mail is OFF</source>
- <translation type="unfinished"/>
+ <translation>El correo está DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="735"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="729"/>
<source>The Bitmask app is ready to update, please restart the application.</source>
- <translation type="unfinished"/>
+ <translation>La aplicación Bitmask está lista para actualizarse, por favor reinicie la aplicación.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1007"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1019"/>
<source>About Bitmask - %s</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1163"/>
- <source>Unable to login: Problem with provider</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1342"/>
- <source>Log in cancelled by the user.</source>
- <translation type="unfinished"/>
+ <translation>Acerca de Bitmask - %s</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1696"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1608"/>
<source>There was a problem with the provider</source>
- <translation type="unfinished"/>
+ <translation>Hubo un problema con el proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1751"/>
- <source>Something went wrong with the logout.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1718"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1629"/>
<source>Unable to connect: Problem with provider</source>
- <translation type="unfinished"/>
+ <translation>No se pudo realizar la conexión: Problema con el proveedor</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="314"/>
<source>&amp;Bitmask</source>
- <translation type="unfinished"/>
+ <translation>&amp;Bitmask</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="365"/>
<source>Show &amp;Log</source>
- <translation type="unfinished"/>
+ <translation>Mostrar &amp;registro (log)</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="370"/>
<source>Create a new account...</source>
- <translation type="unfinished"/>
+ <translation>Crear una cuenta nueva...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="223"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="238"/>
<source>File</source>
- <translation type="unfinished"/>
+ <translation>Archivo</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="378"/>
<source>Advanced Key Management</source>
- <translation type="unfinished"/>
+ <translation>Administración avanzada de claves</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="897"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="904"/>
<source>OFF</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1021"/>
- <source>Version: &lt;b&gt;%s&lt;/b&gt; (%s)&lt;br&gt;&lt;br&gt;%sBitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy, secure email, and secure chat (coming soon).&lt;br&gt;&lt;br&gt;LEAP is a non-profit dedicated to giving all internet users access to secure communication. Our focus is on adapting encryption technology to make it easy to use and widely available. &lt;br&gt;&lt;br&gt;&lt;a href=&apos;https://leap.se&apos;&gt;More about LEAP&lt;/a&gt;</source>
- <translation type="unfinished"/>
+ <translation>DESACTIVADO</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1068"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1080"/>
<source>Bitmask Help</source>
- <translation type="unfinished"/>
+ <translation>Ayuda de Bitmask</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1080"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1092"/>
<source>The current client version is not supported by this provider.&lt;br&gt;Please update to latest version.&lt;br&gt;&lt;br&gt;You can get the latest version from &lt;a href=&apos;{0}&apos;&gt;{1}&lt;/a&gt;</source>
- <translation type="unfinished"/>
+ <translation>La versión actual del cliente no está soportada por este proveedor. &lt;br&gt; Por favor, actualice a la última versión.&lt;br&gt;&lt;br&gt;Puede obtener la última versión de &lt;a href=&apos;{0}&apos;&gt;{1}&lt;/a&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1081"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1093"/>
<source>Update Needed</source>
- <translation type="unfinished"/>
+ <translation>Necesita actualizar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1091"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1103"/>
<source>This provider is not compatible with the client.&lt;br&gt;&lt;br&gt;Error: API version incompatible.</source>
- <translation type="unfinished"/>
+ <translation>Este proveedor no es compatible con el cliente.&lt;br&gt;&lt;br&gt;Error: Versión de la API no compatible.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1091"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1103"/>
<source>Incompatible Provider</source>
- <translation type="unfinished"/>
+ <translation>Proveedor no compatible</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="307"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="324"/>
<source>Application error</source>
- <translation type="unfinished"/>
+ <translation>Error de la aplicación</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="309"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="326"/>
<source>You are trying to do an operation that requires logging in first.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="367"/>
- <source>Unknown error.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="371"/>
- <source>There was a server problem with authentication.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="375"/>
- <source>Could not establish a connection.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="379"/>
- <source>Invalid username or password.</source>
- <translation type="unfinished"/>
+ <translation>Está intentando hacer una operación que requiere iniciar sesión primero.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="916"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="933"/>
<source>Hello!</source>
- <translation type="unfinished"/>
+ <translation>¡Hola!</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="917"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="934"/>
<source>Bitmask has started in the tray.</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1376"/>
- <source>Succeeded</source>
- <translation type="unfinished"/>
+ <translation>Bitmask se ha iniciado en la bandeja del sistema.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1604"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1516"/>
<source>The server at {0} can&apos;t be found, because the DNS lookup failed. DNS is the network service that translates a website&apos;s name to its Internet address. Either your computer is having trouble connecting to the network, or you are missing some helper files that are needed to securely use DNS while {1} is active. To install these helper files, quit this application and start it again.</source>
- <translation type="unfinished"/>
+ <translation>El servidor en {0} no pudo encontrarse porque falló la resolución de DNS. DNS es el servicio de red que traduce un nombre de sitio web (dominio) a su dirección real de Internet (IP). O bien su computadora está teniendo problemas al conectar a la red, o bien le faltan algunos ficheros del asistente necesarios para utilizar DNS de forma segura mientras {1} está activo. Para instalar estos ficheros de ayuda, cierre esta aplicación e iníciela de nuevo.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1606"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1518"/>
<source>Connection Error</source>
- <translation type="unfinished"/>
+ <translation>Error de conexión</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1863"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1719"/>
<source>Quitting...</source>
- <translation type="unfinished"/>
+ <translation>Cerrando...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1864"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1720"/>
<source>Bitmask is quitting, please wait.</source>
- <translation type="unfinished"/>
+ <translation>Bitmask está cerrándose, por favor espere.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1035"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1047"/>
<source>bitmask.net/help</source>
- <translation type="unfinished"/>
+ <translation>bitmask.net/help</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1043"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1055"/>
<source>Email quick reference</source>
- <translation type="unfinished"/>
+ <translation>Referencia rápida de correo electrónico</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1047"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1059"/>
<source>For Thunderbird, you can use the Bitmask extension. Search for &quot;Bitmask&quot; in the add-on manager or download it from &lt;a href=&apos;{0}&apos;&gt;addons.mozilla.org&lt;/a&gt;.</source>
- <translation type="unfinished"/>
+ <translation>Para Thunderbird, puede usar la extensión Bitmask. Busque &quot;Bitmask&quot; en el administrador de complementos o descárguelo desde &lt;a href=&apos;{0}&apos;&gt;addons.mozilla.org&lt;/a&gt;.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1051"/>
- <source>Alternately, you can manually configure your mail client to use Bitmask Email with these options:</source>
- <translation type="unfinished"/>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1051"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1063"/>
<source>IMAP: localhost, port {0}</source>
- <translation type="unfinished"/>
+ <translation>IMAP: localhost, puerto {0}</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1052"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1064"/>
<source>SMTP: localhost, port {0}</source>
- <translation type="unfinished"/>
+ <translation>SMTP: localhost, puerto {0}</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1054"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1066"/>
<source>Username: your full email address</source>
- <translation type="unfinished"/>
+ <translation>Nombre de usuario: Su dirección completa de correo electrónico</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1056"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1068"/>
<source>Password: any non-empty text</source>
- <translation type="unfinished"/>
+ <translation>Contraseña: Cualquier texto no-vacío</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1065"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1077"/>
<source>&lt;p&gt;&lt;strong&gt;{0}&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;&lt;p&gt;{2}&lt;ul&gt;&lt;li&gt;&amp;nbsp;{3}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{4}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{5}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{6}&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;p&gt;&lt;strong&gt;{0}&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;&lt;p&gt;{2}&lt;ul&gt;&lt;li&gt;&amp;nbsp;{3}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{4}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{5}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{6}&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1230"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1187"/>
<source>Stop services</source>
- <translation type="unfinished"/>
+ <translation>Detener servicios</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1230"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1187"/>
<source>Do you want to stop all services?</source>
- <translation type="unfinished"/>
+ <translation>¿Quiere detener todos los servicios?</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1234"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1191"/>
<source>In order to change the provider, the running services needs to be stopped.</source>
- <translation type="unfinished"/>
+ <translation>Para cambiar el proveedor, los servicios en marcha tienen que ser detenidos.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1673"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1584"/>
<source>Disabled: missing helper files</source>
- <translation type="unfinished"/>
+ <translation>Deshabilitado: Ficheros de asistente ausentes</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="340"/>
<source>Pr&amp;eferences...</source>
+ <translation>Pr&amp;eferencias...</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1033"/>
+ <source>Version: &lt;b&gt;{ver}&lt;/b&gt; ({ver_hash})&lt;br&gt;&lt;br&gt;{greet}Bitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy.&lt;br&gt;&lt;br&gt;LEAP is a non-profit dedicated to giving all internet users access to secure communication. Our focus is on adapting encryption technology to make it easy to use and widely available.&lt;br&gt;&lt;br&gt;&lt;a href=&apos;https://leap.se&apos;&gt;More about LEAP&lt;/a&gt;</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1063"/>
+ <source>Alternatively, you can manually configure your mail client to use Bitmask Email with these options:</source>
<translation type="unfinished"/>
</message>
</context>
@@ -1039,42 +1081,42 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="20"/>
<source>Change Password</source>
- <translation type="unfinished"/>
+ <translation>Cambiar contraseña</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="28"/>
<source>Username:</source>
- <translation type="unfinished"/>
+ <translation>Nombre de usuario:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="35"/>
<source>New password:</source>
- <translation type="unfinished"/>
+ <translation>Nueva contraseña:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="52"/>
<source>Re-enter new password:</source>
- <translation type="unfinished"/>
+ <translation>Re-introduzca la nueva contraseña:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="62"/>
<source>Current password:</source>
- <translation type="unfinished"/>
+ <translation>Contraseña actual:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="112"/>
<source>&lt;flash_label&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;flash_label&gt;</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="150"/>
<source>Close</source>
- <translation type="unfinished"/>
+ <translation>Cerrar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/password_change.ui" line="160"/>
<source>OK</source>
- <translation type="unfinished"/>
+ <translation>Aceptar</translation>
</message>
</context>
<context>
@@ -1082,37 +1124,37 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/passwordwindow.py" line="72"/>
<source>Please log in to change your password.</source>
- <translation type="unfinished"/>
+ <translation>Por favor inicie sesión para cambiar su contraseña.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="78"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="79"/>
<source>Please wait for data storage to be ready.</source>
- <translation type="unfinished"/>
+ <translation>Por favor espere para que el almacenamiento de datos esté preparado.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="107"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="108"/>
<source>Changing password...</source>
- <translation type="unfinished"/>
+ <translation>Cambiando contraseña...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="122"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="123"/>
<source>Password changed successfully.</source>
- <translation type="unfinished"/>
+ <translation>Contraseña cambiada con éxito.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="167"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="166"/>
<source>Password is empty.</source>
- <translation type="unfinished"/>
+ <translation>La contraseña está vacía.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="222"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="225"/>
<source>There was a problem changing the password.</source>
- <translation type="unfinished"/>
+ <translation>Hubo un problema al cambiar la contraseña.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="235"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="237"/>
<source>You did not enter a correct current password.</source>
- <translation type="unfinished"/>
+ <translation>No introdujo la contraseña correcta.</translation>
</message>
</context>
<context>
@@ -1120,17 +1162,17 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences.ui" line="14"/>
<source>Preferences</source>
- <translation type="unfinished"/>
+ <translation>Preferencias</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences.ui" line="33"/>
<source>user@example.org</source>
- <translation type="unfinished"/>
+ <translation>usuario@ejemplo.org</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences.ui" line="106"/>
<source>Close</source>
- <translation type="unfinished"/>
+ <translation>Cerrar</translation>
</message>
</context>
<context>
@@ -1138,37 +1180,37 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="14"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="20"/>
<source>Services</source>
- <translation type="unfinished"/>
+ <translation>Servicios</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="32"/>
<source>&lt;provider_services_label&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;provider_services_label&gt;</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="61"/>
<source>Password</source>
- <translation type="unfinished"/>
+ <translation>Contraseña</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="73"/>
<source>Change Password</source>
- <translation type="unfinished"/>
+ <translation>Cambiar contraseña</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_account_page.ui" line="80"/>
<source>&lt;change_password_label&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;change_password_label&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/preferences_account_page.py" line="62"/>
+ <location filename="../src/leap/bitmask/gui/preferences_account_page.py" line="63"/>
<source>You must be logged in to change your password.</source>
- <translation type="unfinished"/>
+ <translation>Tiene que haber iniciado sesión para cambiar su contraseña.</translation>
</message>
</context>
<context>
@@ -1176,7 +1218,7 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_email_page.ui" line="14"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
</context>
<context>
@@ -1184,37 +1226,37 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_vpn_page.ui" line="14"/>
<source>Form</source>
- <translation type="unfinished"/>
+ <translation>Formulario</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_vpn_page.ui" line="20"/>
<source>&lt;flash_label&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;flash_label&gt;</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_vpn_page.ui" line="30"/>
<source>Default VPN Gateway:</source>
- <translation type="unfinished"/>
+ <translation>Pasarela (gateway) VPN predeterminada:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/preferences_vpn_page.ui" line="50"/>
<source>You must reconnect for changes to take effect.</source>
- <translation type="unfinished"/>
+ <translation>Tiene que reconectar para que los cambios surtan efecto.</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/preferences_vpn_page.py" line="47"/>
<source>Automatic</source>
- <translation type="unfinished"/>
+ <translation>Automático</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/preferences_vpn_page.py" line="129"/>
+ <location filename="../src/leap/bitmask/gui/preferences_vpn_page.py" line="126"/>
<source>Error loading configuration file.</source>
- <translation type="unfinished"/>
+ <translation>Error al cargar fichero de configuración.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/preferences_vpn_page.py" line="142"/>
+ <location filename="../src/leap/bitmask/gui/preferences_vpn_page.py" line="138"/>
<source>This is an uninitialized provider, please log in first.</source>
- <translation type="unfinished"/>
+ <translation>Este es un proveedor no inicializado, por favor inicie sesión primero.</translation>
</message>
</context>
<context>
@@ -1222,30 +1264,31 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="88"/>
<source>Account</source>
- <translation type="unfinished"/>
+ <translation>Cuenta</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="99"/>
<source>VPN</source>
- <translation type="unfinished"/>
+ <translation>VPN</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/preferenceswindow.py" line="109"/>
<source>Email</source>
- <translation type="unfinished"/>
+ <translation>Correo electrónico</translation>
</message>
</context>
<context>
<name>ProviderBootstrapper</name>
<message>
- <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="154"/>
+ <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="153"/>
<source>Provider certificate could not be verified</source>
- <translation type="unfinished"/>
+ <translation>
+No se pudo verificar el certificado del proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="161"/>
+ <location filename="../src/leap/bitmask/provider/providerbootstrapper.py" line="159"/>
<source>Provider does not support HTTPS</source>
- <translation type="unfinished"/>
+ <translation>El proveedor no soporta HTTPS</translation>
</message>
</context>
<context>
@@ -1253,7 +1296,7 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/providers.py" line="57"/>
<source>Other...</source>
- <translation type="unfinished"/>
+ <translation>Otro...</translation>
</message>
</context>
<context>
@@ -1261,17 +1304,17 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="55"/>
<source>Log In with my credentials</source>
- <translation>Acceder con mis credenciales</translation>
+ <translation>Iniciar sesión con mis credenciales</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="75"/>
<source>Sign up for a new account</source>
- <translation>Crear una nueva cuenta</translation>
+ <translation>Registrarse en una nueva cuenta</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="367"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="373"/>
<source>Check</source>
- <translation>Corroborar</translation>
+ <translation>Comprobar</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="342"/>
@@ -1281,311 +1324,331 @@ Export canceled.</source>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="153"/>
<source>Checking for a valid provider</source>
- <translation type="unfinished"/>
+ <translation>Comprobando que es un proveedor válido</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="266"/>
<source>Can we reach this provider?</source>
- <translation type="unfinished"/>
+ <translation>¿Podemos contactar con este proveedor?</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="392"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="398"/>
<source>Name</source>
<translation>Nombre</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="424"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="430"/>
<source>Desc</source>
- <translation>Desc</translation>
+ <translation>Descripción</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="434"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="440"/>
<source>&lt;b&gt;Services offered:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;Servicios ofrecidos:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="444"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="450"/>
<source>services</source>
- <translation type="unfinished"/>
+ <translation>servicios</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="464"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="470"/>
<source>&lt;b&gt;Enrollment policy:&lt;/b&gt;</source>
- <translation>&lt;b&gt;Política de ingreso:&lt;/b&gt;</translation>
+ <translation>&lt;b&gt;Política de nuevos registros:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="474"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="480"/>
<source>policy</source>
<translation>política</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="494"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="500"/>
<source>&lt;b&gt;URL:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;URL:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="504"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="510"/>
<source>URL</source>
<translation>URL</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="511"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="517"/>
<source>&lt;b&gt;Description:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;Descripción:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="522"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="528"/>
<source>Provider setup</source>
- <translation>Configuración de proveedor</translation>
+ <translation>Configuración del proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="570"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="576"/>
<source>Setting up provider</source>
- <translation type="unfinished"/>
+ <translation>Configurando proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="720"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="726"/>
<source>Register new user</source>
- <translation>Registrar un nuevo usuario</translation>
+ <translation>Registrar nuevo usuario</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="738"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="744"/>
<source>&lt;b&gt;Password:&lt;/b&gt;</source>
<translation>&lt;b&gt;Contraseña:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="765"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="771"/>
<source>&lt;b&gt;Re-enter password:&lt;/b&gt;</source>
- <translation>&lt;b&gt;Re-introduzca contraseña:&lt;/b&gt;</translation>
+ <translation>&lt;b&gt;Vuelva a introducir la contraseña:&lt;/b&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="775"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="781"/>
<source>Register</source>
- <translation>Registrar</translation>
+ <translation>Regístrese</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="821"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="827"/>
<source>Remember my username and password</source>
- <translation type="unfinished"/>
+ <translation>Recordar mi nombre de usuario y contraseña</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="845"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="851"/>
<source>Service selection</source>
- <translation type="unfinished"/>
+ <translation>Selección de servicio</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="132"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="123"/>
<source>&amp;Next &gt;</source>
- <translation type="unfinished"/>
+ <translation>&amp;Siguiente &gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="134"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="125"/>
<source>Connect</source>
- <translation type="unfinished"/>
+ <translation>Conectar</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="325"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="316"/>
<source>Starting registration...</source>
- <translation>Comenzando el registro...</translation>
+ <translation>Iniciando procedimiento de registro...</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="370"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="360"/>
<source>User %s successfully registered.</source>
- <translation type="unfinished"/>
+ <translation>El usuario %s se registró con éxito.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="539"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="533"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;Non-existent provider&lt;/b&gt;&lt;/font&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;No existe este proveedor&lt;/b&gt;&lt;/font&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="558"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="551"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/font&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/font&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="586"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="579"/>
<source>Unable to load provider configuration</source>
- <translation>No fue posible carga la configuración del proveedor</translation>
+ <translation>No se pudo cargar la configuración del proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="592"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="585"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;Not a valid provider&lt;/b&gt;&lt;/font&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;No es un proveedor válido&lt;/b&gt;&lt;/font&gt;</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="698"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="704"/>
<source>Something went wrong while trying to load service %s</source>
- <translation type="unfinished"/>
+ <translation>Hubo algún fallo mientras se intentaba cargar el servicio %s</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="166"/>
<source>Can we establish a secure connection?</source>
- <translation type="unfinished"/>
+ <translation>¿Podemos establecer una conexión segura?</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="808"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="814"/>
<source>&lt;b&gt;Username:&lt;/b&gt;</source>
- <translation type="unfinished"/>
+ <translation>&lt;b&gt;Nombre de usuario:&lt;/b&gt;</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="296"/>
<source>Configure or select a provider</source>
- <translation type="unfinished"/>
+ <translation>Configurar o seleccionar un proveedor</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="302"/>
<source>Configure new provider:</source>
- <translation type="unfinished"/>
+ <translation>Configurar nuevo proveedor:</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="332"/>
<source>Use existing one:</source>
- <translation type="unfinished"/>
+ <translation>Usar un proveedor existente:</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="397"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="386"/>
<source>Something has gone wrong. Please try again.</source>
- <translation type="unfinished"/>
+ <translation>Hubo algún fallo. Por favor, inténtelo de nuevo.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="411"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="412"/>
<source>The requested username is taken, choose another.</source>
- <translation type="unfinished"/>
+ <translation>El nombre de usuario solicitado no está disponible, elija otro.</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/wizard.py" line="677"/>
<source>Services by {0}</source>
- <translation type="unfinished"/>
+ <translation>Servicios por {0}</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="739"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="746"/>
<source>Register a new user with {0}</source>
- <translation type="unfinished"/>
+ <translation>Registrar un nuevo usuario con {0}</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="26"/>
<source>Bitmask Provider Setup</source>
- <translation type="unfinished"/>
+ <translation>Configuración de proveedor de Bitmask</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="43"/>
<source>Welcome to Bitmask</source>
- <translation type="unfinished"/>
+ <translation>Bienvenido a Bitmask</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="112"/>
<source>Choose a provider</source>
- <translation type="unfinished"/>
+ <translation>Elija un proveedor</translation>
</message>
<message>
<location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="159"/>
<source>Getting provider information.</source>
- <translation type="unfinished"/>
+ <translation>Obteniendo información del proveedor.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="380"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="386"/>
<source>About this provider</source>
- <translation type="unfinished"/>
+ <translation>Acerca de este proveedor</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="547"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="553"/>
<source>Bitmask is attempting to establish a secure connection with this provider for the first time.</source>
- <translation type="unfinished"/>
+ <translation>Bitmask está intentando establecer una conexión segura con este proveedor por primera vez.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="638"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="644"/>
<source>Fetching provider credentials.</source>
- <translation type="unfinished"/>
+ <translation>Descargando credenciales del proveedor.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="645"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="651"/>
<source>Do we trust these credentials?</source>
- <translation type="unfinished"/>
+ <translation>¿Confiamos en estas credenciales?</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="652"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="658"/>
<source>Connecting to provider.</source>
+ <translation>Conectando con el proveedor.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="399"/>
+ <source>The registration is disabled for this provider.</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="611"/>
+ <source>The provider has disabled registration</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>msg</name>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="222"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="259"/>
<source>TAP Driver</source>
- <translation type="unfinished"/>
+ <translation>Driver TAP</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="229"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="266"/>
<source>Encrypted Internet uses VPN, which needs a TAP device installed and none has been found. This will ask for administrative privileges.</source>
- <translation type="unfinished"/>
+ <translation>Internet Cifrado usa VPN, que necesita un dispositivo TAP (tipo de interfaz virtual de red) previamente instalado, y no hemos detectado ninguno. Esto hara que se pidan privilegios de administrador.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="347"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="384"/>
<source>TUN Driver</source>
- <translation type="unfinished"/>
+ <translation>Driver TUN</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="355"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="392"/>
<source>Encrypted Internet uses VPN, which needs a kernel extension for a TUN device installed, and none has been found. This will ask for administrative privileges.</source>
- <translation type="unfinished"/>
+ <translation>Internet Cifrado usa VPN, que necesita tener instalada una extensión del kernel para un dispositivo TUN (tipo de interfaz virtual de red), y no se ha detectado ninguna. Esto hará que se soliciten privilegios de administrador.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="156"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="160"/>
<source>Problem installing files</source>
- <translation>Hubo un problema instalando los archivos</translation>
+ <translation>Hubo un problema al instalar los ficheros</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="157"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="161"/>
<source>Some of the files could not be copied.</source>
- <translation>Algunos de los archivos no pudieron ser copiados</translation>
+ <translation>Algunos de los ficheros no se han podido copiar.</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="350"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="387"/>
<source>Bitmask needs to install the necessary drivers for Encrypted Internet to work. Would you like to proceed?</source>
- <translation type="unfinished"/>
+ <translation>Bitmask necesita instalar los drivers necesarios para el funcionamiento de Internet Cifrado. ¿Quiere continuar?</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="102"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="106"/>
<source>Missing helper files</source>
- <translation type="unfinished"/>
+ <translation>Ficheros del asistente ausentes</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="430"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="468"/>
<source>Missing Bitmask helpers</source>
+ <translation>Asistentes de Bitmask ausentes</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="209"/>
+ <source>No polkit agent running</source>
+ <translation type="unfinished"/>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="214"/>
+ <source>There is no polkit agent running and it is needed to run the Bitmask services.&lt;br&gt;Take a look at the &lt;a href=&quot;https://leap.se/en/docs/client/known-issues&quot;&gt;known issues&lt;/a&gt; page</source>
<translation type="unfinished"/>
</message>
</context>
<context>
<name>msgstr</name>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="399"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="437"/>
<source>Some essential helper files are missing in your system.</source>
- <translation type="unfinished"/>
+ <translation>Algunos ficheros esenciales del asistente están ausentes de su sistema</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="402"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="440"/>
<source>Reinstall your debian packages, or make sure you place them by hand.</source>
- <translation type="unfinished"/>
+ <translation>Reinstale sus paquetes de debian, o asegúrese de colocarlos en su sitio a mano.</translation>
</message>
</context>
<context>
<name>self._eip_status</name>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="202"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="199"/>
<source>{0} is restarting</source>
- <translation type="unfinished"/>
+ <translation>{0} está reiniciándose</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="313"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="307"/>
<source>{0} could not be launched because you did not authenticate properly.</source>
- <translation type="unfinished"/>
+ <translation>{0} no pudo iniciarse porque usted no está autentificado adecuadamente</translation>
</message>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="327"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="321"/>
<source>{0} finished in an unexpected manner!</source>
- <translation type="unfinished"/>
+ <translation>¡{0} se cerró de manera inesperada!</translation>
</message>
</context>
</TS> \ No newline at end of file
diff --git a/data/ts/en_US.ts b/data/ts/en_US.ts
index fcbe3554..b6fcc5da 100644
--- a/data/ts/en_US.ts
+++ b/data/ts/en_US.ts
@@ -68,103 +68,103 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="119"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="118"/>
<source>Open keys file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="230"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="229"/>
<source>Input/Output error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="156"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="155"/>
<source>There was an error accessing the file.
Import canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="166"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="165"/>
<source>Data mismatch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="169"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="168"/>
<source>The public and private key should have the same address and fingerprint.
Import canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="179"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="178"/>
<source>Missing key</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="182"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="181"/>
<source>You need to provide the public AND private key in the same file.
Import canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="192"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="191"/>
<source>Address mismatch</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="195"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="194"/>
<source>The identity for the key needs to be the same as your user address.
Import canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="143"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="142"/>
<source>Import Successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="144"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="143"/>
<source>The key pair was imported successfully.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="202"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="201"/>
<source>Save keys file</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="218"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="217"/>
<source>Export Successful</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="220"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="219"/>
<source>The key pair was exported successfully.
Please, store your private key in a safe place.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="232"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="231"/>
<source>There was an error accessing the file.
Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="59"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="58"/>
<source>The provider that you are using does not support {0}.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="65"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="64"/>
<source>To use this, you need to enable/start {0}.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="110"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="109"/>
<source>&lt;span style=&apos;color:#0000FF;&apos;&gt;NOTE&lt;/span&gt;: </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="125"/>
+ <location filename="../src/leap/bitmask/gui/advanced_key_management.py" line="124"/>
<source>Are you sure that you want to replace the current key pair with the imported?</source>
<translation type="unfinished"></translation>
</message>
@@ -193,27 +193,27 @@ Export canceled.</source>
<context>
<name>EIPPreferencesWindow</name>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="48"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="47"/>
<source>Automatic</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="157"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="156"/>
<source>Gateway settings for provider &apos;{0}&apos; saved.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="231"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="230"/>
<source>There was a problem with configuration files.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="124"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="123"/>
<source> (uninitialized)</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="245"/>
+ <location filename="../src/leap/bitmask/gui/eip_preferenceswindow.py" line="244"/>
<source>This is an uninitialized provider, please log in first.</source>
<translation type="unfinished"></translation>
</message>
@@ -470,7 +470,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="164"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="148"/>
<source>Save As</source>
<translation type="unfinished"></translation>
</message>
@@ -485,37 +485,37 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="195"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="179"/>
<source>Send to Pastebin.com</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="192"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="176"/>
<source>Sending to pastebin...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="207"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="191"/>
<source>Your pastebin link &lt;a href=&apos;{0}&apos;&gt;{0}&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="212"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="196"/>
<source>Pastebin OK</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="227"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="211"/>
<source>Sending logs to Pastebin failed!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="233"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="217"/>
<source>Pastebin Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/loggerwindow.py" line="232"/>
+ <location filename="../src/leap/bitmask/gui/logwindow.py" line="216"/>
<source>Maximum amount of submissions reached for today.</source>
<translation type="unfinished"></translation>
</message>
@@ -543,12 +543,12 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="298"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="300"/>
<source>Log In</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="293"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="295"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
@@ -558,77 +558,77 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="602"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="607"/>
<source>Logout</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="326"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="328"/>
<source>Please select a valid provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="330"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="332"/>
<source>Please provide a valid username</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="334"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="336"/>
<source>Please provide a valid password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="343"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="345"/>
<source>Logging in...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="599"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="604"/>
<source>Logging out...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="401"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="406"/>
<source>Waiting...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="440"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="445"/>
<source>Log in cancelled by the user.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="460"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="465"/>
<source>Unable to login: Problem with provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="531"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="536"/>
<source>Succeeded</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="614"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="619"/>
<source>Something went wrong with the logout.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="689"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="697"/>
<source>Unknown error.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="693"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="701"/>
<source>There was a server problem with authentication.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="697"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="705"/>
<source>Could not establish a connection.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/login.py" line="701"/>
+ <location filename="../src/leap/bitmask/gui/login.py" line="709"/>
<source>Invalid username or password.</source>
<translation type="unfinished"></translation>
</message>
@@ -651,125 +651,155 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="195"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="183"/>
<source>There was an unexpected problem with Soledad.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="425"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="464"/>
<source>OFF</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="222"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="212"/>
<source>Mail is OFF</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="231"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="221"/>
<source>Mail is starting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="445"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="484"/>
<source>ON</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="235"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="225"/>
<source>Mail is ON</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="238"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="228"/>
<source>Mail is disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="433"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="472"/>
<source>Starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="267"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="262"/>
<source>Soledad has started...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="269"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="265"/>
<source>Soledad is starting, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="308"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="331"/>
<source>Found key! Starting mail...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="313"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="339"/>
<source>Finished generating key!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="315"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="341"/>
<source>Starting mail...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="347"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="370"/>
<source>SMTP failed to start, check the logs.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="403"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="442"/>
<source>About to start, please wait...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="410"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="449"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="166"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="154"/>
<source>{0}: OFF</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="452"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="491"/>
<source>You must be logged in to use {0}.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="311"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="337"/>
<source>Generating new key, this may take a few minutes.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="386"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="429"/>
<source>{0} Unread Emails in your Inbox</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="390"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="433"/>
<source>1 Unread Email in your Inbox</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="439"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="478"/>
<source>Disconnecting...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="462"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="501"/>
<source>Invalid auth token, try logging in again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mail_status.py" line="304"/>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="329"/>
<source>Initial sync in progress, please wait...</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="270"/>
+ <source>Sync: downloading ({0:02}%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="274"/>
+ <source>Sync: download completed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="279"/>
+ <source>Sync: uploading ({0:02}%)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="283"/>
+ <source>Sync: upload complete.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="291"/>
+ <source>Sync: completed.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mail_status.py" line="334"/>
+ <source>Key not found...</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>MainWindow</name>
@@ -784,7 +814,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="851"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="895"/>
<source>Help</source>
<translation type="unfinished"></translation>
</message>
@@ -804,33 +834,33 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="731"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="738"/>
<source> The following components will be updated:
%s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="734"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="741"/>
<source>Updates available</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="239"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="256"/>
<source>Show Main Window</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1491"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1562"/>
<source>Starting...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1514"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1585"/>
<source>Not supported</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1518"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1589"/>
<source>Disabled</source>
<translation type="unfinished"></translation>
</message>
@@ -845,27 +875,27 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="233"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="247"/>
<source>Mail is OFF</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="722"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="729"/>
<source>The Bitmask app is ready to update, please restart the application.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="964"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1019"/>
<source>About Bitmask - %s</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1535"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1608"/>
<source>There was a problem with the provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1556"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1629"/>
<source>Unable to connect: Problem with provider</source>
<translation type="unfinished"></translation>
</message>
@@ -885,7 +915,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="226"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="238"/>
<source>File</source>
<translation type="unfinished"></translation>
</message>
@@ -895,137 +925,132 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="859"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="904"/>
<source>OFF</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1025"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1080"/>
<source>Bitmask Help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1037"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1092"/>
<source>The current client version is not supported by this provider.&lt;br&gt;Please update to latest version.&lt;br&gt;&lt;br&gt;You can get the latest version from &lt;a href=&apos;{0}&apos;&gt;{1}&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1038"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1093"/>
<source>Update Needed</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1048"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1103"/>
<source>This provider is not compatible with the client.&lt;br&gt;&lt;br&gt;Error: API version incompatible.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1048"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1103"/>
<source>Incompatible Provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="305"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="324"/>
<source>Application error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="307"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="326"/>
<source>You are trying to do an operation that requires logging in first.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="878"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="933"/>
<source>Hello!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="879"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="934"/>
<source>Bitmask has started in the tray.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1445"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1516"/>
<source>The server at {0} can&apos;t be found, because the DNS lookup failed. DNS is the network service that translates a website&apos;s name to its Internet address. Either your computer is having trouble connecting to the network, or you are missing some helper files that are needed to securely use DNS while {1} is active. To install these helper files, quit this application and start it again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1447"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1518"/>
<source>Connection Error</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1637"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1719"/>
<source>Quitting...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1638"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1720"/>
<source>Bitmask is quitting, please wait.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="992"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1047"/>
<source>bitmask.net/help</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1000"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1055"/>
<source>Email quick reference</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1004"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1059"/>
<source>For Thunderbird, you can use the Bitmask extension. Search for &quot;Bitmask&quot; in the add-on manager or download it from &lt;a href=&apos;{0}&apos;&gt;addons.mozilla.org&lt;/a&gt;.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1008"/>
- <source>Alternately, you can manually configure your mail client to use Bitmask Email with these options:</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1008"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1063"/>
<source>IMAP: localhost, port {0}</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1009"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1064"/>
<source>SMTP: localhost, port {0}</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1011"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1066"/>
<source>Username: your full email address</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1013"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1068"/>
<source>Password: any non-empty text</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1022"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1077"/>
<source>&lt;p&gt;&lt;strong&gt;{0}&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;{1}&lt;/p&gt;&lt;p&gt;{2}&lt;ul&gt;&lt;li&gt;&amp;nbsp;{3}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{4}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{5}&lt;/li&gt;&lt;li&gt;&amp;nbsp;{6}&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1129"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1187"/>
<source>Stop services</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1129"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1187"/>
<source>Do you want to stop all services?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1133"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1191"/>
<source>In order to change the provider, the running services needs to be stopped.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1513"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1584"/>
<source>Disabled: missing helper files</source>
<translation type="unfinished"></translation>
</message>
@@ -1035,10 +1060,15 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/mainwindow.py" line="978"/>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1033"/>
<source>Version: &lt;b&gt;{ver}&lt;/b&gt; ({ver_hash})&lt;br&gt;&lt;br&gt;{greet}Bitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy.&lt;br&gt;&lt;br&gt;LEAP is a non-profit dedicated to giving all internet users access to secure communication. Our focus is on adapting encryption technology to make it easy to use and widely available.&lt;br&gt;&lt;br&gt;&lt;a href=&apos;https://leap.se&apos;&gt;More about LEAP&lt;/a&gt;</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1063"/>
+ <source>Alternatively, you can manually configure your mail client to use Bitmask Email with these options:</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>PasswordChange</name>
@@ -1091,17 +1121,17 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="78"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="79"/>
<source>Please wait for data storage to be ready.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="107"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="108"/>
<source>Changing password...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="122"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="123"/>
<source>Password changed successfully.</source>
<translation type="unfinished"></translation>
</message>
@@ -1111,12 +1141,12 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="219"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="225"/>
<source>There was a problem changing the password.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="231"/>
+ <location filename="../src/leap/bitmask/gui/passwordwindow.py" line="237"/>
<source>You did not enter a correct current password.</source>
<translation type="unfinished"></translation>
</message>
@@ -1172,7 +1202,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/preferences_account_page.py" line="62"/>
+ <location filename="../src/leap/bitmask/gui/preferences_account_page.py" line="63"/>
<source>You must be logged in to change your password.</source>
<translation type="unfinished"></translation>
</message>
@@ -1275,7 +1305,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="367"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="373"/>
<source>Check</source>
<translation type="unfinished"></translation>
</message>
@@ -1295,132 +1325,132 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="392"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="398"/>
<source>Name</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="424"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="430"/>
<source>Desc</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="434"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="440"/>
<source>&lt;b&gt;Services offered:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="444"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="450"/>
<source>services</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="464"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="470"/>
<source>&lt;b&gt;Enrollment policy:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="474"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="480"/>
<source>policy</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="494"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="500"/>
<source>&lt;b&gt;URL:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="504"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="510"/>
<source>URL</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="511"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="517"/>
<source>&lt;b&gt;Description:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="522"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="528"/>
<source>Provider setup</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="570"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="576"/>
<source>Setting up provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="720"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="726"/>
<source>Register new user</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="738"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="744"/>
<source>&lt;b&gt;Password:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="765"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="771"/>
<source>&lt;b&gt;Re-enter password:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="775"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="781"/>
<source>Register</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="821"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="827"/>
<source>Remember my username and password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="845"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="851"/>
<source>Service selection</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="122"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="123"/>
<source>&amp;Next &gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="124"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="125"/>
<source>Connect</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="301"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="316"/>
<source>Starting registration...</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="345"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="360"/>
<source>User %s successfully registered.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="509"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="533"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;Non-existent provider&lt;/b&gt;&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="527"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="551"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;%s&lt;/b&gt;&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="554"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="579"/>
<source>Unable to load provider configuration</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="560"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="585"/>
<source>&lt;font color=&apos;red&apos;&gt;&lt;b&gt;Not a valid provider&lt;/b&gt;&lt;/font&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="661"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="704"/>
<source>Something went wrong while trying to load service %s</source>
<translation type="unfinished"></translation>
</message>
@@ -1430,7 +1460,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="808"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="814"/>
<source>&lt;b&gt;Username:&lt;/b&gt;</source>
<translation type="unfinished"></translation>
</message>
@@ -1450,22 +1480,22 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="371"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="386"/>
<source>Something has gone wrong. Please try again.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="384"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="412"/>
<source>The requested username is taken, choose another.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="640"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="677"/>
<source>Services by {0}</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/wizard.py" line="701"/>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="746"/>
<source>Register a new user with {0}</source>
<translation type="unfinished"></translation>
</message>
@@ -1490,30 +1520,40 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="380"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="386"/>
<source>About this provider</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="547"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="553"/>
<source>Bitmask is attempting to establish a secure connection with this provider for the first time.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="638"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="644"/>
<source>Fetching provider credentials.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="645"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="651"/>
<source>Do we trust these credentials?</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="652"/>
+ <location filename="../src/leap/bitmask/gui/ui/wizard.ui" line="658"/>
<source>Connecting to provider.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="399"/>
+ <source>The registration is disabled for this provider.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/bitmask/gui/wizard.py" line="611"/>
+ <source>The provider has disabled registration</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>msg</name>
@@ -1538,12 +1578,12 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="161"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="160"/>
<source>Problem installing files</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="162"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="161"/>
<source>Some of the files could not be copied.</source>
<translation type="unfinished"></translation>
</message>
@@ -1553,7 +1593,7 @@ Export canceled.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/platform_init/initializers.py" line="107"/>
+ <location filename="../src/leap/bitmask/platform_init/initializers.py" line="106"/>
<source>Missing helper files</source>
<translation type="unfinished"></translation>
</message>
@@ -1589,17 +1629,17 @@ Export canceled.</source>
<context>
<name>self._eip_status</name>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="200"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="199"/>
<source>{0} is restarting</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="308"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="307"/>
<source>{0} could not be launched because you did not authenticate properly.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/leap/bitmask/services/eip/conductor.py" line="322"/>
+ <location filename="../src/leap/bitmask/services/eip/conductor.py" line="321"/>
<source>{0} finished in an unexpected manner!</source>
<translation type="unfinished"></translation>
</message>
diff --git a/docs/dev/internationalization.rst b/docs/dev/internationalization.rst
index c0f208de..c8434b36 100644
--- a/docs/dev/internationalization.rst
+++ b/docs/dev/internationalization.rst
@@ -105,6 +105,11 @@ If you want to try it, just set your LANG environment variable::
$ LANG=es_ES bitmask
+Or, sometimes you'll need::
+
+ $ LC_ALL=es LANG=es bitmask
+
+
Translating the Documentation
------------------------------
diff --git a/pkg/requirements-leap.pip b/pkg/requirements-leap.pip
index df2d1974..8e353c33 100644
--- a/pkg/requirements-leap.pip
+++ b/pkg/requirements-leap.pip
@@ -1,4 +1,4 @@
leap.soledad.client>=0.6.0
leap.keymanager>=0.4.0
-leap.mail>=0.4.0rc1
+leap.mail>=0.4.0
leap.common>=0.4.0
diff --git a/release-notes.rst b/release-notes.rst
new file mode 100644
index 00000000..af0e9109
--- /dev/null
+++ b/release-notes.rst
@@ -0,0 +1,323 @@
+0.9.0 October 28
+++++++++++++++++
+
+We are very pleased to announce Bitmask stable 0.9.0 :tada:.
+
+It's been 9 months since we released our latest stable version, we have been
+working a lot and trying out several release candidates in the way.
+
+Using the latest Bitmask you'll be able to use our encrypted email service, now
+in beta state!
+
+NOTE: beta means that we expect not to break but we don't promise you won't get
+any headache or lose some email, so please be careful.
+
+Currently we have a test provider for mail usage hosted on
+https://mail.bitmask.net this provider is already bundled with Bitmask for easy
+access on the wizard.
+
+----
+
+Some numbers on what we have been doing all this time:
+
+- we have closed **472** issues,
+- we have closed **379** pull requests,
+- adding up all the components changes we got **830** new commits
+
+----
+
+Here you have a list of the most notable changes since our latest stable
+release.
+
+Index of changes:
+
+* `Bitmask Client`_ (0.8.1 → 0.9.0)
+* `Soledad`_ (0.6.3 → 0.7.4)
+* `Keymanager`_ (0.3.8 → 0.4.3)
+* `Common`_ (0.3.10 → 0.4.4)
+* `Mail`_ (0.3.11 → 0.4.0)
+
+Bitmask Client
+==============
+
+Features
+~~~~~~~~
+- `#4284 <https://leap.se/code/issues/4284>`_: Download specific smtp certificate from provider, instead of using the vpn one.
+- `#5526 <https://leap.se/code/issues/5526>`_: Make "check" button selected by default.
+- `#6359 <https://leap.se/code/issues/6359>`_: Adapt bitmask to the new events api on leap.common.
+- `#6360 <https://leap.se/code/issues/6360>`_: Use txzmq in backend.
+- `#6368 <https://leap.se/code/issues/6368>`_: Add support to the new async-api of keymanager.
+- `#6683 <https://leap.se/code/issues/6683>`_: Add ability to generate sumo tarball.
+- `#6713 <https://leap.se/code/issues/6713>`_: Add support for xfce-polkit agent.
+- `#6876 <https://leap.se/code/issues/6876>`_: Update api port for pinned riseup.
+- `#7139 <https://leap.se/code/issues/7139>`_: Use logbook zmq handler to centralize logging.
+- `#7140 <https://leap.se/code/issues/7140>`_: Implement a thread-safe zmq handler for logbook.
+- `#7141 <https://leap.se/code/issues/7141>`_: Add log handler to display colored logs on the terminal.
+- `#7142 <https://leap.se/code/issues/7142>`_: Add log handler to store logs on bitmask.log.
+- `#7143 <https://leap.se/code/issues/7143>`_: Adapt existing log filter/silencer to the new logbook handler.
+- `#7144 <https://leap.se/code/issues/7144>`_: Replace logging handler with logbook handler bitmask-wide.
+- `#7162 <https://leap.se/code/issues/7162>`_: Log LSB-release info if available.
+- `#7180 <https://leap.se/code/issues/7180>`_: Add log rotation for bitmask.log.
+- `#7184 <https://leap.se/code/issues/7184>`_: Forward twisted logs to logging and handle logging logs with logbook.
+- `#7250 <https://leap.se/code/issues/7250>`_: Enable ``--danger`` for stable versions.
+- `#7291 <https://leap.se/code/issues/7291>`_: Move the updater code from the launcher to the client.
+- `#7342 <https://leap.se/code/issues/7342>`_: Added ``apply_updates.py`` script for the pyinstaller bundle.
+- `#7353 <https://leap.se/code/issues/7353>`_: Add notifications of soledad sync progress to UI.
+- `#7356 <https://leap.se/code/issues/7356>`_: Allow to disable EIP component on build.
+- `#7414 <https://leap.se/code/issues/7414>`_: Remove taskthread dependency, replace with custom (and small) code.
+- `#7419 <https://leap.se/code/issues/7419>`_: Load credentials from environment variables and trigger login.
+- `#7471 <https://leap.se/code/issues/7471>`_: Disable email firewall if we are running inside a docker container.
+- Add support to the new async-api of soledad
+
+Bugfixes
+~~~~~~~~
+- `#6418 <https://leap.se/code/issues/6418>`_: Cannot change preseeded providers if checks for one fail.
+- `#6424 <https://leap.se/code/issues/6424>`_: Do not disable autostart if the quit is triggered by a system logout.
+- `#6536 <https://leap.se/code/issues/6536>`_, `#6568 <https://leap.se/code/issues/6568>`_, `#6691 <https://leap.se/code/issues/6691>`_: Refactor soledad sync to do it the twisted way.
+- `#6541 <https://leap.se/code/issues/6541>`_: Client must honor the ports specified in ``eip-service.json``.
+- `#6594 <https://leap.se/code/issues/6594>`_: Handle disabled registration on provider.
+- `#6654 <https://leap.se/code/issues/6654>`_: Regression fix, login attempt is made against previously selected provider.
+- `#6682 <https://leap.se/code/issues/6682>`_: Handle user cancel keyring open operation, this prevents a bitmask freeze.
+- `#6894 <https://leap.se/code/issues/6894>`_: Change ``ip`` command location to support Fedora/RHEL distros.
+- `#7093 <https://leap.se/code/issues/7093>`_: Fix controller attribute error.
+- `#7126 <https://leap.se/code/issues/7126>`_: Don't run the event server on the backend for the standalone bundle since the launcher takes care of that.
+- `#7149 <https://leap.se/code/issues/7149>`_: Start the events server when reactor is running.
+- `#7185 <https://leap.se/code/issues/7185>`_: Log contains exported PGP Private Key.
+- `#7222 <https://leap.se/code/issues/7222>`_: Run the zmq log subscriber in the background to avoid hitting the zmq's buffer limits.
+- `#7273 <https://leap.se/code/issues/7273>`_: Logbook subscriber stop fails if not started.
+- `#7273 <https://leap.se/code/issues/7273>`_: ZMQError: address already in use - logbook subscriber already started.
+- `#7281 <https://leap.se/code/issues/7281>`_: Support a provider not providing location for the eip gateways.
+- `#7319 <https://leap.se/code/issues/7319>`_: Raise the maxfiles limit in OSX
+- `#7343 <https://leap.se/code/issues/7343>`_: Clean up and fix the tests.
+- `#7415 <https://leap.se/code/issues/7415>`_: Fix wrong argument number on window raise event.
+- `#7448 <https://leap.se/code/issues/7448>`_: Fix hangs during logout.
+- `#7451 <https://leap.se/code/issues/7451>`_: Assign the timeout 'call later' before starting the sync to prevent race conditions.
+- `#7453 <https://leap.se/code/issues/7453>`_: After a complete sync show the user the amount of unread emails.
+- `#7470 <https://leap.se/code/issues/7470>`_: Fix bug with password change.
+- `#7474 <https://leap.se/code/issues/7474>`_: Track soledad ready state on a shared place for easy access. Enable password change window.
+- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
+- `#7512 <https://leap.se/code/issues/7512>`_: Pass on standalone flag to common.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store logs in the right place.
+- `#7512 <https://leap.se/code/issues/7512>`_: Store zmq certs in the right path.
+- Authenticate properly logout calls to API.
+- Fix soledad bootstrap sync retries.
+- Fix the bootstrap script for developers so it works on Fedora/RHEL systems where there is ``/usr/lib64`` for python libs.
+- Remove bubble argument from the logbook NullHandler
+
+----
+
+Soledad
+=======
+
+soledad.client
+~~~~~~~~~~~~~~
+
+Features
+--------
+- `#7353 <https://leap.se/code/issues/7353>`_: Improve how we send information on ``SOLEDAD_SYNC_SEND_STATUS`` and in ``SOLEDAD_SYNC_RECEIVE_STATUS``.
+- `#5895 <https://leap.se/code/issues/5895>`_: Store all incoming documents in the sync db.
+- `#6359 <https://leap.se/code/issues/6359>`_: Adapt soledad to the new events api on leap.common.
+- `#6400 <https://leap.se/code/issues/6400>`_: Include the IV in the encrypted document MAC.
+- `#6996 <https://leap.se/code/issues/6996>`_: Expose post-sync hooks via plugin system.
+- Add a pool of HTTP/HTTPS connections that is able to verify the server certificate against a given CA certificate.
+- Use twisted.enterprise.adbapi for access to the sync database.
+- Use twisted.web.client for client sync.
+
+Bugfixes
+--------
+
+- `#5855 <https://leap.se/code/issues/5855>`_: Reset syncer connection when getting HTTP error during sync.
+- `#5975 <https://leap.se/code/issues/5975>`_: Wait for last post request to finish before starting a new one.
+- `#6437 <https://leap.se/code/issues/6437>`_: Use TLS v1 in soledad client.
+- `#6625 <https://leap.se/code/issues/6625>`_: Retry on sqlcipher thread timeouts.
+- `#6757 <https://leap.se/code/issues/6757>`_: Fix the order of insertion of documents when using workers for decrypting incoming documents during a sync.
+- `#6892 <https://leap.se/code/issues/6892>`_: Fix the log message when a local secret is not found so it's less confusing.
+- `#6980 <https://leap.se/code/issues/6980>`_: Remove MAC from secrets file.
+- `#7088 <https://leap.se/code/issues/7088>`_: Fix sync encrypter pool close queue error.
+- `#7302 <https://leap.se/code/issues/7302>`_: Increase http request timeout time to 90s.
+- `#7386 <https://leap.se/code/issues/7386>`_: Fix hanging sync by properly waiting db initialization on sync decrypter pool.
+- `#7503 <https://leap.se/code/issues/7503>`_: Do not signal sync completion if sync failed.
+- `#7503 <https://leap.se/code/issues/7503>`_: Handle soledad init fail after several retries.
+- Always initialize the sync db to allow for both asynchronous encryption and asynchronous decryption when syncing.
+- Avoid double decryption of documents.
+- Bugfix: move sync db and encpool creation to api.
+- Bugfix: refactor code loss.
+- Bugfix: set active secret before saving local file.
+- Bugfix: wrong sqlcipher passphrase now raises correctly.
+- Fallback to utf-8 if confidence on chardet guessing is too low.
+- Fix logging and graceful failing when exceptions are raised during sync.
+- Fix the order of the events emited for incoming documents.
+- Handle ``DatabaseDoesNotExist`` during sync.
+- Handle ``MissingDesignDocError`` after get_sync_info.
+- Handle missing design doc at GET (``get_sync_info``). Soledad server can handle this during sync.
+
+Misc (CI, tests, refactor, packaging)
+-------------------------------------
+
+- `#2945 <https://leap.se/code/issues/2945>`_: Do not depend on pysqlite2.
+- `#6797 <https://leap.se/code/issues/6797>`_: Add dependency on Twisted.
+- `#7338 <https://leap.se/code/issues/7338>`_: refactor ``SoledadCrypto`` to remove circular dependency with ``SoledadSecrets``.
+- Add tests for enc/dec pool.
+- Improve helper scripts and dependencies listing.
+- Improve log messages when concurrently fetching documents from the server.
+- Lots of code restyling to pass CI tests.
+- Refactor asynchronous encryption/decryption code to its own file.
+- Refactor decription pool and http target to use a deferred instead of a waiting loop.
+- Refactor details of making an HTTP request body and headers out of the send/fetch logic. This also makes it easier to enable batching.
+- Refactor enc/dec pool to standardize start/stop of the pools.
+- Remove dependency on simplejson.
+- Split ``http_target`` into 4 modules, separating those responsibilities.
+
+
+soledad.server
+~~~~~~~~~~~~~~
+
+Features
+--------
+
+- `#6785 <https://leap.se/code/issues/6785>`_: Use monthly token databases.
+- Lots of code restyling to pass CI tests.
+- Lots of work done to get tests passing.
+- Remove dependency on simplejson.
+
+Bugfixes
+--------
+
+- `#6436 <https://leap.se/code/issues/6436>`_: Run daemon as user soledad.
+- `#6437 <https://leap.se/code/issues/6437>`_: Avoid use of SSLv3.
+- `#6557 <https://leap.se/code/issues/6557>`_: Fix server initscript location.
+- `#6797 <https://leap.se/code/issues/6797>`_: Add dependency on Twisted.
+- `#6833 <https://leap.se/code/issues/6833>`_: Remove unneeded parameters from ``CouchServerState`` initialization.
+- Fix a bug where `BadRequest` could be raised after everything was persisted.
+- Fix server daemon uid and gid by passing them to twistd on the initscript.
+
+
+soledad.common
+~~~~~~~~~~~~~~
+
+Features
+--------
+
+- `#6359 <https://leap.se/code/issues/6359>`_: Adapt soledad to the new events api on leap.common.
+- Lots of code restyling to pass CI tests.
+- Lots of work done to get tests passing.
+- Refactor `couch.py` to separate persistence from logic while saving uploaded documents. Also simplify logic while checking for conflicts.
+- Remove dependency on simplejson.
+
+Bugfixes
+--------
+- `#5896 <https://leap.se/code/issues/5896>`_: Include couch design docs source files in source distribution and only compile ``ddocs.py`` when building the package.
+- `#6671 <https://leap.se/code/issues/6671>`_: Bail out if ``cdocs/`` dir does not exist.
+- `#6833 <https://leap.se/code/issues/6833>`_: Remove unneeded parameters from ``CouchServerState`` initialization.
+
+----
+
+Keymanager
+==========
+
+Features
+~~~~~~~~
+
+- `#5359 <https://leap.se/code/issues/5359>`_: Adapt to new events api on leap.common.
+- `#5932 <https://leap.se/code/issues/5932>`_: Add ``fetch_key`` method to fetch keys from a URI.
+- `#6211 <https://leap.se/code/issues/6211>`_: Upgrade keys if not successfully used and strict high validation level.
+- `#6212 <https://leap.se/code/issues/6212>`_: Multi uid support.
+- `#6240 <https://leap.se/code/issues/6240>`_: Upgrade key when signed by old key.
+- `#6262 <https://leap.se/code/issues/6262>`_: Keep old key after upgrade.
+- `#6299 <https://leap.se/code/issues/6299>`_: New soledad doc struct for encryption-keys.
+- `#6346 <https://leap.se/code/issues/6346>`_: Use addresses instead of keys for encrypt, decrypt, sign & verify.
+- `#6366 <https://leap.se/code/issues/6366>`_: Expose info about the signing key.
+- `#6368 <https://leap.se/code/issues/6368>`_: Port keymanager to the new soledad async API.
+- `#6815 <https://leap.se/code/issues/6815>`_: Fetched keys from other domain than its provider are set as 'Weak Chain' validation level.
+- `KeyManager.put_key` now accepts also ascii keys.
+
+Bugfixes
+~~~~~~~~
+
+- `#6022 <https://leap.se/code/issues/6022>`_: Fix call to python-gnupg's ``verify_file()`` method.
+- `#7188 <https://leap.se/code/issues/7188>`_: Remove the dependency on ``enum34``.
+- `#7274 <https://leap.se/code/issues/7274>`_: use async events api.
+- `#7410 <https://leap.se/code/issues/7410>`_: add logging to fetch_key.
+- `#7410 <https://leap.se/code/issues/7410>`_: catch request exceptions on key fetching.
+- `#7420 <https://leap.se/code/issues/7420>`_: don't repush a public key with different address.
+- `#7498 <https://leap.se/code/issues/7498>`_: self-repair the keyring if keys get duplicated.
+- Don't repush a public key with different addres
+- More verbosity in ``get_key`` wrong address log.
+- Return always ``KeyNotFound`` failure if fetch keys fails on an unknown error.
+- Use ``ca_bundle`` when fetching keys by url.
+
+Misc (CI, tests, refactor, packaging)
+-------------------------------------
+
+- Cleanup API.
+- Packaging improvements.
+- Style changes.
+- Tests updates.
+
+
+----
+
+Common
+======
+
+Features
+~~~~~~~~
+
+- `#7188 <https://leap.se/code/issues/7188>`_: Modify ``leap.common.events`` to use ZMQ. Closes #6359.
+- Add a ``HTTPClient`` the twisted way.
+- Add close method for http agent.
+- Allow passing callback to HTTP client.
+- Bugfix: HTTP timeout was not being cleared on abort.
+- Bugfix: do not add a port string to non-tcp addresses.
+- Fix code style and tests.
+- Make https client use Twisted SSL validation and adds a reuse by default behavior on connection pool
+
+
+Bugfixes
+~~~~~~~~
+
+- `#6994 <https://leap.se/code/issues/6994>`_: Fix time comparison between local and UTC times that caused the VPN certificates not being correctly downloaded on time.
+- `#7089 <https://leap.se/code/issues/7089>`_: Fix regexp to allow ipc protocol in zmq sockets.
+- `#7130 <https://leap.se/code/issues/7130>`_: Remove extraneous data from events logs.
+- `#7234 <https://leap.se/code/issues/7234>`_: Add http request timeout.
+- `#7259 <https://leap.se/code/issues/7259>`_: Add a flag to disable events framework.
+- `#7274 <https://leap.se/code/issues/7274>`_: Expose async methods for events.
+- `#7512 <https://leap.se/code/issues/7512>`_: Consider standalone flag when saving events certificates.
+- Fix wrong ca_cert path inside bundle.
+- Workaround for deadlock problem in zmq auth.
+
+----
+
+Mail
+====
+
+Features
+~~~~~~~~
+
+- `#3879 <https://leap.se/code/issues/3879>`_: Parse OpenPGP header and import keys from it.
+- `#4692 <https://leap.se/code/issues/4692>`_: Don't add any footer to the emails.
+- `#5359 <https://leap.se/code/issues/5359>`_: Adapt to new events api on leap.common.
+- `#5937 <https://leap.se/code/issues/5937>`_: Discover public keys via attachment.
+- `#6357 <https://leap.se/code/issues/6357>`_: Create a ``OutgoingMail`` class that has the logic for encrypting, signing and sending messages. Factors that logic out of ``EncryptedMessage`` so it can be used by other clients.
+- `#6361 <https://leap.se/code/issues/6361>`_: Refactor email fetching outside IMAP to its own independient ``IncomingMail`` class.
+- `#6617 <https://leap.se/code/issues/6617>`_: Add public key as attachment.
+- `#6742 <https://leap.se/code/issues/6742>`_: Add listener for each email added to inbox in IncomingMail.
+- `#6996 <https://leap.se/code/issues/6996>`_: Ability to reindex local UIDs after a soledad sync.
+- Add very basic support for message sequence numbers.
+- Expose generic and protocol-agnostic public mail API.
+- Lots of style fixes and tests updates.
+- Make use of the twisted-based, async soledad API.
+- Send a BYE command to all open connections, so that the MUA is notified when the server is shutted down.
+
+Bugfixes
+~~~~~~~~
+
+- `#6601 <https://leap.se/code/issues/6601>`_: Port ``enum`` to ``enum34``.
+- `#7169 <https://leap.se/code/issues/7169>`_: Update SMTP gateway docs.
+- `#7244 <https://leap.se/code/issues/7244>`_: Fix nested multipart rendering.
+- `#7430 <https://leap.se/code/issues/7430>`_: If the auth token has expired signal the GUI to request her to log in again.
+- `#7471 <https://leap.se/code/issues/7471>`_: Disable local only tcp bind on docker containers to allow access to IMAP and SMTP.
+- `#7480 <https://leap.se/code/issues/7480>`_: Don't extract openpgp header if valid attached key.
+- Bugfix: Return the first cdoc if no body found
+- Bugfix: fix keyerror when inserting msg on ``pending_inserts`` dict.
+- Bugfix: fixed syntax error in ``models.py``.
diff --git a/relnotes.txt b/relnotes.txt
deleted file mode 100644
index 2b698771..00000000
--- a/relnotes.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-ANNOUNCING Bitmask 0.9.0rc4 release candidate
-
-The LEAP team is pleased to announce the immediate availability of Bitmask
-0.9.0rc4.
-
-This is the fourth public *release candidate* of the Bitmask client that
-supports our user friendly end to end encrypted mail service. Our work has
-focused on speed and scale optimization by adapting the underlying components
-(leap.keymanager and leap.mail) to use the new async API of Soledad. This
-reduces code complexity by making use of the reactor pattern and by having
-blocking code (i.e. general i/o) be executed asynchronously. We have revamped
-how bitmask frontend and backend communicates (this improves performance and
-prevent bugs), improved log handling for better bug reports, and much more (see
-the changelog file for a more detailed list).
-
-This is a release candidate aimed at getting more user feedback to influence
-our next round of development. We have a list of known issues that we are
-cranking through and will add more to the list as they come in.
-
-* Changelog: https://github.com/leapcode/bitmask_client/blob/0.9.0rc4/CHANGELOG.rst
-
-TESTING
-
-* Setup Instructions: https://bitmask.net/help
-
-* Fresh install: https://dl.bitmask.net/client/linux/release-candidate/
-
-* Upgrading from bundle: if you are running bundle version 0.7 or new then
- Bitmask should update automatically.
-
-* Upgrading from package: if you have added deb.bitmask.net to your
- sources.list, then Bitmask should update automatically (make sure it is not
- commented out).
-
-Note: If you have a bundle version older than 0.7, please reinstall Bitmask.
-
-How to test: https://github.com/leapcode/bitmask_client/blob/develop/docs/testing-rcs.README
-
-LICENSE
-
-You may use Bitmask under the GNU General Public License, version 3 or, at your
-option, any later version. See the file "LICENSE" for the terms of the GNU
-General Public License, version 3.
-
-HACKING
-
-See https://leap.se/en/docs/get-involved for tips on contacting the developers,
-getting start hacking on Bitmask, and reporting bugs.
-
-If you are lucky enough, you can also spot us drinking mate, sleepless in night
-trains, rooftops, rainforests, lonely islands and, always, beyond any border.
-
-The LEAP team,
-
-October 5, 2015
-Somewhere in the middle of the intertubes.
-EOF
diff --git a/setup.py b/setup.py
index b10189a2..c4d3e8e6 100755
--- a/setup.py
+++ b/setup.py
@@ -24,6 +24,7 @@ import hashlib
import sys
import os
import re
+import sys
if not sys.version_info[0] == 2:
print("[ERROR] Sorry, Python 3 is not supported (yet). "
@@ -147,10 +148,15 @@ def freeze_pkg_ver(path, version_short, version_full):
f.write(subst_template)
+if sys.argv[:1] == '--sumo':
+ IS_SUMO = True
+else:
+ IS_SUMO = False
+
cmdclass["freeze_debianver"] = freeze_debianver
parsed_reqs = utils.parse_requirements()
-if utils.is_develop_mode():
+if utils.is_develop_mode() or IS_SUMO:
print("")
print ("[WARNING] Skipping leap-specific dependencies "
"because development mode is detected.")
@@ -270,6 +276,7 @@ class cmd_build(versioneer_build):
copy_reqs(self.build_lib)
+
class cmd_sdist(versioneer_sdist):
user_options = versioneer_sdist.user_options + \
@@ -500,7 +507,7 @@ setup(
'src',
exclude=['ez_setup', 'setup', 'examples', 'tests']),
namespace_packages=["leap"],
- package_data={'': ['util/*.txt']},
+ package_data={'': ['util/*.txt', '*.pem']},
include_package_data=True,
# not being used? -- setuptools does not like it.
# looks like debhelper is honoring it...
diff --git a/src/leap/bitmask/app.py b/src/leap/bitmask/app.py
index c9c02b59..a1b7481a 100644
--- a/src/leap/bitmask/app.py
+++ b/src/leap/bitmask/app.py
@@ -63,6 +63,8 @@ from leap.bitmask.services.mail import plumber
from leap.bitmask.util import leap_argparse, flags_to_dict, here
from leap.bitmask.util.requirement_checker import check_requirements
+from leap.common.config import flags as common_flags
+
from leap.mail import __version__ as MAIL_VERSION
import codecs
@@ -172,6 +174,8 @@ def start_app():
flags.DEBUG = opts.debug
+ common_flags.STANDALONE = flags.STANDALONE
+
logger = get_logger(perform_rollover=True)
# NOTE: since we are not using this right now, the code that replaces the
diff --git a/src/leap/bitmask/backend/utils.py b/src/leap/bitmask/backend/utils.py
index 3b5effc5..a5f54cd2 100644
--- a/src/leap/bitmask/backend/utils.py
+++ b/src/leap/bitmask/backend/utils.py
@@ -36,7 +36,14 @@ from leap.common.check import leap_assert
logger = get_logger()
-KEYS_DIR = os.path.join(get_path_prefix(), 'leap', 'zmq_certificates')
+
+def _get_keys_dir():
+ """
+ Return the path where the ZMQ certificates should be stored.
+
+ :rtype: str
+ """
+ return os.path.join(get_path_prefix(), 'leap', 'zmq_certificates')
def _zmq_has_curve():
@@ -79,17 +86,18 @@ def generate_zmq_certificates():
"""
leap_assert(flags.ZMQ_HAS_CURVE, "CurveZMQ not supported!")
+ keys_dir = _get_keys_dir()
# Create directory for certificates, remove old content if necessary
- if os.path.exists(KEYS_DIR):
- shutil.rmtree(KEYS_DIR)
- mkdir_p(KEYS_DIR)
+ if os.path.exists(keys_dir):
+ shutil.rmtree(keys_dir)
+ mkdir_p(keys_dir)
# set permissions to: 0700 (U:rwx G:--- O:---)
- os.chmod(KEYS_DIR, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
+ os.chmod(keys_dir, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
# create new keys in certificates dir
# public_file, secret_file = create_certificates(...)
- zmq.auth.create_certificates(KEYS_DIR, "frontend")
- zmq.auth.create_certificates(KEYS_DIR, "backend")
+ zmq.auth.create_certificates(keys_dir, "frontend")
+ zmq.auth.create_certificates(keys_dir, "backend")
def get_frontend_certificates():
@@ -98,7 +106,8 @@ def get_frontend_certificates():
"""
leap_assert(flags.ZMQ_HAS_CURVE, "CurveZMQ not supported!")
- frontend_secret_file = os.path.join(KEYS_DIR, "frontend.key_secret")
+ keys_dir = _get_keys_dir()
+ frontend_secret_file = os.path.join(keys_dir, "frontend.key_secret")
public, secret = zmq.auth.load_certificate(frontend_secret_file)
return public, secret
@@ -109,7 +118,8 @@ def get_backend_certificates(base_dir='.'):
"""
leap_assert(flags.ZMQ_HAS_CURVE, "CurveZMQ not supported!")
- backend_secret_file = os.path.join(KEYS_DIR, "backend.key_secret")
+ keys_dir = _get_keys_dir()
+ backend_secret_file = os.path.join(keys_dir, "backend.key_secret")
public, secret = zmq.auth.load_certificate(backend_secret_file)
return public, secret
@@ -120,8 +130,9 @@ def _certificates_exist():
:rtype: bool
"""
- frontend_secret_file = os.path.join(KEYS_DIR, "frontend.key_secret")
- backend_secret_file = os.path.join(KEYS_DIR, "backend.key_secret")
+ keys_dir = _get_keys_dir()
+ frontend_secret_file = os.path.join(keys_dir, "frontend.key_secret")
+ backend_secret_file = os.path.join(keys_dir, "backend.key_secret")
return os.path.isfile(frontend_secret_file) and \
os.path.isfile(backend_secret_file)
diff --git a/src/leap/bitmask/backend_app.py b/src/leap/bitmask/backend_app.py
index 1300ed05..76276e92 100644
--- a/src/leap/bitmask/backend_app.py
+++ b/src/leap/bitmask/backend_app.py
@@ -22,6 +22,7 @@ import signal
from twisted.internet import reactor
+from leap.common.config import flags as common_flags
from leap.common.events import server as event_server
from leap.bitmask.backend.leapbackend import LeapBackend
@@ -67,6 +68,11 @@ def run_backend(bypass_checks=False, flags_dict=None, frontend_pid=None):
observer = PythonLoggingObserver()
observer.start()
+ if flags_dict is not None:
+ dict_to_flags(flags_dict)
+
+ common_flags.STANDALONE = flags.STANDALONE
+
# NOTE: this needs to be used here, within the call since this function is
# executed in a different process and it seems that the process/thread
# identification isn't working 100%
@@ -81,9 +87,6 @@ def run_backend(bypass_checks=False, flags_dict=None, frontend_pid=None):
signal.signal(signal.SIGINT, signal.SIG_IGN)
signal.signal(signal.SIGTERM, signal_handler)
- if flags_dict is not None:
- dict_to_flags(flags_dict)
-
reactor.callWhenRunning(start_events_and_updater, logger)
backend = LeapBackend(bypass_checks=bypass_checks,
diff --git a/src/leap/bitmask/frontend_app.py b/src/leap/bitmask/frontend_app.py
index fed24cfa..60391f50 100644
--- a/src/leap/bitmask/frontend_app.py
+++ b/src/leap/bitmask/frontend_app.py
@@ -31,10 +31,8 @@ from leap.bitmask.gui.mainwindow import MainWindow
from leap.bitmask.logs.utils import get_logger
from leap.bitmask.util import dict_to_flags
-logger = get_logger()
-
-def signal_handler(window, pid, signum, frame):
+def signal_handler(window, pid, logger, signum, frame):
"""
Signal handler that quits the running app cleanly.
@@ -42,6 +40,8 @@ def signal_handler(window, pid, signum, frame):
:type window: MainWindow
:param pid: process id of the main process.
:type pid: int
+ :param logger: the logger object to use for logging
+ :type logger: logbook.Logger
:param signum: number of the signal received (e.g. SIGINT -> 2)
:type signum: int
:param frame: current stack frame
@@ -70,6 +70,7 @@ def run_frontend(options, flags_dict, backend_pid=None):
:type flags_dict: dict
"""
dict_to_flags(flags_dict)
+ logger = get_logger()
start_hidden = options["start_hidden"]
@@ -120,7 +121,7 @@ def run_frontend(options, flags_dict, backend_pid=None):
window = MainWindow(start_hidden=start_hidden, backend_pid=backend_pid)
my_pid = os.getpid()
- sig_handler = partial(signal_handler, window, my_pid)
+ sig_handler = partial(signal_handler, window, my_pid, logger)
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
diff --git a/src/leap/bitmask/logs/utils.py b/src/leap/bitmask/logs/utils.py
index e38839c7..f54e86ff 100644
--- a/src/leap/bitmask/logs/utils.py
+++ b/src/leap/bitmask/logs/utils.py
@@ -37,19 +37,18 @@ from logbook.more import ColorizedStderrHandler
from logbook.queues import ZeroMQSubscriber
-# NOTE: make sure that the folder exists, the logger is created before saving
-# settings on the first run.
-_base = os.path.join(get_path_prefix(), "leap")
-mkdir_p(_base)
-BITMASK_LOG_FILE = os.path.join(_base, 'bitmask.log')
-
-
def get_logger(perform_rollover=False):
"""
Push to the app stack the needed handlers and return a Logger object.
:rtype: logbook.Logger
"""
+ # NOTE: make sure that the folder exists, the logger is created before
+ # saving settings on the first run.
+ _base = os.path.join(get_path_prefix(), "leap")
+ mkdir_p(_base)
+ bitmask_log_file = os.path.join(_base, 'bitmask.log')
+
level = logbook.WARNING
if flags.DEBUG:
level = logbook.NOTSET
@@ -65,7 +64,7 @@ def get_logger(perform_rollover=False):
zmq_handler.push_application()
file_handler = logbook.RotatingFileHandler(
- BITMASK_LOG_FILE, format_string=LOG_FORMAT, bubble=True,
+ bitmask_log_file, format_string=LOG_FORMAT, bubble=True,
filter=silencer.filter, max_size=sys.maxint)
if perform_rollover: