diff options
author | Kali Kaneko <kali@leap.se> | 2015-10-29 12:16:37 -0400 |
---|---|---|
committer | Kali Kaneko <kali@leap.se> | 2015-10-29 12:16:37 -0400 |
commit | 70a5608e618b97da97f9449ba738e0e67f99a937 (patch) | |
tree | c7adab1d684e885e00206c41e1599d8f6c036ac2 | |
parent | 3519a1a732bc298379e4946b7212bb153bd2f8a0 (diff) | |
parent | 639df4f63b16465003463ae9587ac982135ba3ac (diff) |
Merge tag '0.9.0' into debian/experimental
Tag leap.bitmask version 0.9.0
-rw-r--r-- | CHANGELOG.rst | 91 | ||||
-rw-r--r-- | Makefile | 9 | ||||
-rw-r--r-- | changes/VERSION_COMPAT | 1 | ||||
-rw-r--r-- | data/translations/es.qm | bin | 2417 -> 40898 bytes | |||
-rw-r--r-- | data/translations/es.ts | 1117 | ||||
-rw-r--r-- | data/ts/en_US.ts | 374 | ||||
-rw-r--r-- | docs/dev/internationalization.rst | 5 | ||||
-rw-r--r-- | pkg/requirements-leap.pip | 2 | ||||
-rw-r--r-- | release-notes.rst | 323 | ||||
-rw-r--r-- | relnotes.txt | 57 | ||||
-rwxr-xr-x | setup.py | 11 | ||||
-rw-r--r-- | src/leap/bitmask/app.py | 4 | ||||
-rw-r--r-- | src/leap/bitmask/backend/utils.py | 33 | ||||
-rw-r--r-- | src/leap/bitmask/backend_app.py | 9 | ||||
-rw-r--r-- | src/leap/bitmask/frontend_app.py | 9 | ||||
-rw-r--r-- | src/leap/bitmask/logs/utils.py | 15 |
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 @@ -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 Binary files differindex 596af5b3..666ad07f 100644 --- a/data/translations/es.qm +++ b/data/translations/es.qm 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><span style='color:#0000FF;'>NOTE</span>: </source> - <translation type="unfinished"/> + <translation><span style='color:#0000FF;'>NOTA</span>: </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 '{0}' saved.</source> - <translation type="unfinished"/> + <translation>Se guardaron las opciones de pasarela (gateway) para el proveedor '{0}'.</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'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: <b>{0}</b></source> - <translation type="unfinished"/> + <translation>Enrutando tráfico a través de: <b>{0}</b></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 <b>pkexec</b> in your system.</source> - <translation type="unfinished"/> + <translation>No pudimos encontrar <b>pkexec</b> 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><font color=red>Disabled: missing helper files</font></source> - <translation type="unfinished"/> + <translation><font color=red>Deshabilitado: Ficheros de configuración ausentes</font></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.<br/>Make sure you have <b>polkit-gnome-authentication-agent-1</b> running and try again.</source> - <translation type="unfinished"/> + <translation>No pudimos encontrar ningún agente de autentificación en su sistema.<br/>Asegúrese de que <b>polkit-gnome-authentication-agent-1</b> 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 <a href='{0}'>{0}</a></source> - <translation type="unfinished"/> + <translation>Su enlace de pastebin <a href='{0}'>{0}</a></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><b>Username:</b></source> - <translation type="unfinished"/> + <translation><b>Nombre de usuario:</b></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><b>Password:</b></source> - <translation type="unfinished"/> + <translation><b>Contraseña:</b></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>&Help</source> - <translation>&Ayuda</translation> + <translation>A&yuda</translation> </message> <message> <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="360"/> @@ -758,279 +839,240 @@ Export canceled.</source> <translation>&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 &Bitmask</source> - <translation type="unfinished"/> + <translation>Acerca de &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>&Bitmask</source> - <translation type="unfinished"/> + <translation>&Bitmask</translation> </message> <message> <location filename="../src/leap/bitmask/gui/ui/mainwindow.ui" line="365"/> <source>Show &Log</source> - <translation type="unfinished"/> + <translation>Mostrar &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: <b>%s</b> (%s)<br><br>%sBitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy, secure email, and secure chat (coming soon).<br><br>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. <br><br><a href='https://leap.se'>More about LEAP</a></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.<br>Please update to latest version.<br><br>You can get the latest version from <a href='{0}'>{1}</a></source> - <translation type="unfinished"/> + <translation>La versión actual del cliente no está soportada por este proveedor. <br> Por favor, actualice a la última versión.<br><br>Puede obtener la última versión de <a href='{0}'>{1}</a></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.<br><br>Error: API version incompatible.</source> - <translation type="unfinished"/> + <translation>Este proveedor no es compatible con el cliente.<br><br>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't be found, because the DNS lookup failed. DNS is the network service that translates a website'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 "Bitmask" in the add-on manager or download it from <a href='{0}'>addons.mozilla.org</a>.</source> - <translation type="unfinished"/> + <translation>Para Thunderbird, puede usar la extensión Bitmask. Busque "Bitmask" en el administrador de complementos o descárguelo desde <a href='{0}'>addons.mozilla.org</a>.</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><p><strong>{0}</strong></p><p>{1}</p><p>{2}<ul><li>&nbsp;{3}</li><li>&nbsp;{4}</li><li>&nbsp;{5}</li><li>&nbsp;{6}</li></ul></p></source> - <translation type="unfinished"/> + <translation><p><strong>{0}</strong></p><p>{1}</p><p>{2}<ul><li>&nbsp;{3}</li><li>&nbsp;{4}</li><li>&nbsp;{5}</li><li>&nbsp;{6}</li></ul></p></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&eferences...</source> + <translation>Pr&eferencias...</translation> + </message> + <message> + <location filename="../src/leap/bitmask/gui/mainwindow.py" line="1033"/> + <source>Version: <b>{ver}</b> ({ver_hash})<br><br>{greet}Bitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy.<br><br>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.<br><br><a href='https://leap.se'>More about LEAP</a></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><flash_label></source> - <translation type="unfinished"/> + <translation><flash_label></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><provider_services_label></source> - <translation type="unfinished"/> + <translation><provider_services_label></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><change_password_label></source> - <translation type="unfinished"/> + <translation><change_password_label></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><flash_label></source> - <translation type="unfinished"/> + <translation><flash_label></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><b>Services offered:</b></source> - <translation type="unfinished"/> + <translation><b>Servicios ofrecidos:</b></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><b>Enrollment policy:</b></source> - <translation><b>Política de ingreso:</b></translation> + <translation><b>Política de nuevos registros:</b></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><b>URL:</b></source> - <translation type="unfinished"/> + <translation><b>URL:</b></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><b>Description:</b></source> - <translation type="unfinished"/> + <translation><b>Descripción:</b></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><b>Password:</b></source> <translation><b>Contraseña:</b></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><b>Re-enter password:</b></source> - <translation><b>Re-introduzca contraseña:</b></translation> + <translation><b>Vuelva a introducir la contraseña:</b></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>&Next ></source> - <translation type="unfinished"/> + <translation>&Siguiente ></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><font color='red'><b>Non-existent provider</b></font></source> - <translation type="unfinished"/> + <translation><font color='red'><b>No existe este proveedor</b></font></translation> </message> <message> - <location filename="../src/leap/bitmask/gui/wizard.py" line="558"/> + <location filename="../src/leap/bitmask/gui/wizard.py" line="551"/> <source><font color='red'><b>%s</b></font></source> - <translation type="unfinished"/> + <translation><font color='red'><b>%s</b></font></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><font color='red'><b>Not a valid provider</b></font></source> - <translation type="unfinished"/> + <translation><font color='red'><b>No es un proveedor válido</b></font></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><b>Username:</b></source> - <translation type="unfinished"/> + <translation><b>Nombre de usuario:</b></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.<br>Take a look at the <a href="https://leap.se/en/docs/client/known-issues">known issues</a> 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><span style='color:#0000FF;'>NOTE</span>: </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 '{0}' 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 <a href='{0}'>{0}</a></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.<br>Please update to latest version.<br><br>You can get the latest version from <a href='{0}'>{1}</a></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.<br><br>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't be found, because the DNS lookup failed. DNS is the network service that translates a website'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 "Bitmask" in the add-on manager or download it from <a href='{0}'>addons.mozilla.org</a>.</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><p><strong>{0}</strong></p><p>{1}</p><p>{2}<ul><li>&nbsp;{3}</li><li>&nbsp;{4}</li><li>&nbsp;{5}</li><li>&nbsp;{6}</li></ul></p></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: <b>{ver}</b> ({ver_hash})<br><br>{greet}Bitmask is the Desktop client application for the LEAP platform, supporting encrypted internet proxy.<br><br>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.<br><br><a href='https://leap.se'>More about LEAP</a></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><b>Services offered:</b></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><b>Enrollment policy:</b></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><b>URL:</b></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><b>Description:</b></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><b>Password:</b></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><b>Re-enter password:</b></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>&Next ></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><font color='red'><b>Non-existent provider</b></font></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><font color='red'><b>%s</b></font></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><font color='red'><b>Not a valid provider</b></font></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><b>Username:</b></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 @@ -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: |