summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.tx/config7
-rw-r--r--Makefile16
-rw-r--r--data/leap_client.pro20
-rw-r--r--data/resources/locale.qrc2
-rw-r--r--data/translations/README.rst8
-rw-r--r--data/translations/es.qmbin0 -> 6194 bytes
-rw-r--r--data/translations/es.ts218
-rw-r--r--data/translations/leap_client_es_ES.qmbin1450 -> 0 bytes
-rw-r--r--data/translations/leap_client_es_ES.ts26
-rw-r--r--data/ts/README.rst14
-rw-r--r--data/ts/en_US.ts219
-rw-r--r--docs/dev/internationalization.rst68
-rw-r--r--docs/testers/howto.rst10
-rw-r--r--docs/translations.txt22
-rw-r--r--docs/user/install.rst2
-rw-r--r--docs/user/intro.rst2
16 files changed, 570 insertions, 64 deletions
diff --git a/.tx/config b/.tx/config
index f1603f25..db998b21 100644
--- a/.tx/config
+++ b/.tx/config
@@ -1,3 +1,10 @@
[main]
host = https://www.transifex.com
+[leap-client.leap-client]
+
+file_filter = data/translations/<lang>.ts
+source_file = data/ts/en_US.ts
+source_lang = en
+type = QT
+#minimum_perc = 90 # minimum percentage completed before pulling
diff --git a/Makefile b/Makefile
index d36c5601..5bdf9c36 100644
--- a/Makefile
+++ b/Makefile
@@ -4,12 +4,19 @@
# TODO move to setup scripts
# and implement it in python
# http://die-offenbachs.homelinux.org:48888/hg/eric5/file/5072605ad4dd/compileUiFiles.py
-###### EDIT ######################
+###### EDIT ######################
+
#Directory with ui and resource files
RESOURCE_DIR = data/resources
#Directory for compiled resources
COMPILED_DIR = src/leap/gui
+
+#Directory for (finished) translations
+TRANSLAT_DIR = data/translations
+
+#Project file, used for translations
+PROJFILE = data/leap_client.pro
#UI files to compile
# UI_FILES = foo.ui
@@ -21,6 +28,9 @@ RESOURCES = mainwindow.qrc locale.qrc
#pyuic4 and pyrcc4 binaries
PYUIC = pyuic4
PYRCC = pyrcc4
+PYLUP = pylupdate4
+LRELE = lrelease
+
#################################
# DO NOT EDIT FOLLOWING
@@ -37,6 +47,10 @@ all : resources ui
resources : $(COMPILED_RESOURCES)
ui : $(COMPILED_UI)
+
+translations:
+ $(PYLUP) $(PROJFILE)
+ $(LRELE) $(TRANSLAT_DIR)/*.ts
$(COMPILED_DIR)/ui_%.py : $(RESOURCE_DIR)/%.ui
$(PYUIC) $< -o $@
diff --git a/data/leap_client.pro b/data/leap_client.pro
index 01fbafcd..4c559029 100644
--- a/data/leap_client.pro
+++ b/data/leap_client.pro
@@ -1,2 +1,20 @@
+# qmake file
+
+# is not there a f*** way of expanding this? other to template with python I mean...
+
SOURCES += ../src/leap/gui/firstrun/intro.py
-TRANSLATIONS += translations/leap_client_es_ES.ts
+SOURCES += ../src/leap/gui/firstrun/last.py
+SOURCES += ../src/leap/gui/firstrun/login.py
+SOURCES += ../src/leap/gui/firstrun/providerinfo.py
+SOURCES += ../src/leap/gui/firstrun/providerselect.py
+SOURCES += ../src/leap/gui/firstrun/providersetup.py
+SOURCES += ../src/leap/gui/firstrun/register.py
+SOURCES += ../src/leap/gui/firstrun/regvalidation.py
+SOURCES += ../src/leap/gui/firstrun/wizard.py
+
+# where to generate ts files -- tx will pick from here
+
+# original file, english
+
+TRANSLATIONS += ts/en_US.ts
+
diff --git a/data/resources/locale.qrc b/data/resources/locale.qrc
index a2fda78d..53576b49 100644
--- a/data/resources/locale.qrc
+++ b/data/resources/locale.qrc
@@ -1,5 +1,5 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
-<file>../translations/leap_client_es_ES.qm</file>
+<file>../translations/leap_client_es.qm</file>
</qresource>
</RCC>
diff --git a/data/translations/README.rst b/data/translations/README.rst
new file mode 100644
index 00000000..1f3dd0b3
--- /dev/null
+++ b/data/translations/README.rst
@@ -0,0 +1,8 @@
+data/translations
+=================
+
+We expect finished translations (i.e., those downloaded from ``transifex``) to live here.
+
+Translator object will pick them from here.
+
+(Actually, from the embedded locale_rc)
diff --git a/data/translations/es.qm b/data/translations/es.qm
new file mode 100644
index 00000000..8daa2037
--- /dev/null
+++ b/data/translations/es.qm
Binary files differ
diff --git a/data/translations/es.ts b/data/translations/es.ts
new file mode 100644
index 00000000..84aa6f0a
--- /dev/null
+++ b/data/translations/es.ts
@@ -0,0 +1,218 @@
+<?xml version="1.0" ?><!DOCTYPE TS><TS language="es" version="2.0">
+<context>
+ <name>IntroPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="14"/>
+ <source>First run wizard.</source>
+ <translation>Primera Conexion.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="24"/>
+ <source>Now we will guide you through some configuration that is needed before you can connect for the first time.&lt;br&gt;&lt;br&gt;If you ever need to modify these options again, you can find the wizard in the &apos;&lt;i&gt;Settings&lt;/i&gt;&apos; menu from the main window.&lt;br&gt;&lt;br&gt;Do you want to &lt;b&gt;sign up&lt;/b&gt; for a new account, or &lt;b&gt;log in&lt;/b&gt; with an already existing username?&lt;br&gt;</source>
+ <translation>Vamos a configurar algunas cosas antes de que te puedas conectar por primera vez.&lt;br&gt;&lt;br&gt;Si necesitas modificar estas opciones de nuevo, puedes encontrar este asistente en el menu de &apos;&lt;i&gt;Opciones&lt;/i&gt;&apos; en la ventana principal.&lt;br&gt;&lt;br&gt;Quieres &lt;b&gt;registrar&lt;/b&gt; una nueva cuenta, o &lt;b&gt;loguearte&lt;/b&gt; con tu usuario?&lt;br&gt; </translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="37"/>
+ <source>Sign up for a new account.</source>
+ <translation>Registrar una cuenta nueva.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="40"/>
+ <source>Log In with my credentials.</source>
+ <translation>Loguearme con un usuario que ya tengo.</translation>
+ </message>
+</context>
+<context>
+ <name>LogInPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="96"/>
+ <source>Username must be in the username@provider form.</source>
+ <translation>El usuario tiene que ser usuario@tu.proveedor</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="140"/>
+ <source>Resolving domain name</source>
+ <translation>Resolviendo nombre de dominio</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="163"/>
+ <source>Authentication error: %s</source>
+ <translation>Error de autenticacion: %s</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="179"/>
+ <source>Credentials validated.</source>
+ <translation>Credenciales validadas.</translation>
+ </message>
+</context>
+<context>
+ <name>ProviderInfoPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerinfo.py" line="18"/>
+ <source>Provider Info</source>
+ <translation>Info del Proveedor</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerinfo.py" line="19"/>
+ <source>This is what provider says.</source>
+ <translation>Esto es lo que dice el proveedor.</translation>
+ </message>
+</context>
+<context>
+ <name>ProviderSetupValidationPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="26"/>
+ <source>Provider setup</source>
+ <translation>Configuracion del Proveedor</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="27"/>
+ <source>Doing autoconfig.</source>
+ <translation>Autoconfigurando.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="83"/>
+ <source>Fetching CA certificate</source>
+ <translation>Obteniendo certificado de la CA</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="105"/>
+ <source>Checking CA fingerprint</source>
+ <translation>Comprobando el fingerprint de la CA</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="134"/>
+ <source>Validating api certificate</source>
+ <translation>Validando certificado de la api</translation>
+ </message>
+</context>
+<context>
+ <name>RegisterUserPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="31"/>
+ <source>Sign Up</source>
+ <translation>Nueva Cuenta</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="208"/>
+ <source>Registration succeeded!</source>
+ <translation>Cuenta creada con exito!</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="238"/>
+ <source>Password does not match..</source>
+ <translation>Las contrasenas no son iguales..</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="242"/>
+ <source>Password too short.</source>
+ <translation>Contrasena demasiado corta.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="247"/>
+ <source>Password too obvious.</source>
+ <translation>Contrasena demasiado obvia.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="279"/>
+ <source>Error connecting to provider (timeout)</source>
+ <translation>Error conectandose al proveedor (timeout)</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="284"/>
+ <source>Error Connecting to provider (connerr).</source>
+ <translation>Error conectandose al proveedor (connerr).</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="292"/>
+ <source>Error during registration (%s)</source>
+ <translation>Error durante el registro (%s)</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="302"/>
+ <source>Could not register (bad response)</source>
+ <translation>No se pudo registrar (bad response)</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="309"/>
+ <source>Username not available.</source>
+ <translation>Usuario no disponible.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="375"/>
+ <source>Register a new user with provider %s.</source>
+ <translation>Registrar un nuevo usuario con el proveedor %s.</translation>
+ </message>
+</context>
+<context>
+ <name>RegisterUserValidationPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="95"/>
+ <source>Fetching provider config...</source>
+ <translation>Obteniendo configuracion del proveedor...</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="112"/>
+ <source>Authentication error: %s</source>
+ <translation>Error de autenticacion: %s</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="117"/>
+ <source>Fetching eip certificate</source>
+ <translation>Obteniendo certificado eip</translation>
+ </message>
+</context>
+<context>
+ <name>SelectProviderPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="32"/>
+ <source>Enter Provider</source>
+ <translation>Entra tu Proveedor</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="33"/>
+ <source>Please enter the domain of the provider you want to use for your connection.</source>
+ <translation>Por favor, rellena el dominio del proveedor que quieras usar para tu conexion.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="87"/>
+ <source>chec&amp;k!</source>
+ <translation>compro&amp;bar!</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="97"/>
+ <source>Server certificate could not be verified.</source>
+ <translation>No se pudo verificar el certificado del servidor.</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="136"/>
+ <source>Certificate validation</source>
+ <translation>Validacion del certificado</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="222"/>
+ <source>checking domain name</source>
+ <translation>comprobando nombre de dominio</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="276"/>
+ <source>checking https connection</source>
+ <translation>comprobando conexion https</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="292"/>
+ <source>Could not get info from provider.</source>
+ <translation>no se pudo obtener info del proveedor</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="295"/>
+ <source>Could not download provider info (refused conn.).</source>
+ <translation>no se pudo obtener info del proveedor (refused conn.).</translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="305"/>
+ <source>fetching provider info</source>
+ <translation>obteniendo info del preveedor</translation>
+ </message>
+</context>
+</TS> \ No newline at end of file
diff --git a/data/translations/leap_client_es_ES.qm b/data/translations/leap_client_es_ES.qm
deleted file mode 100644
index 002237e9..00000000
--- a/data/translations/leap_client_es_ES.qm
+++ /dev/null
Binary files differ
diff --git a/data/translations/leap_client_es_ES.ts b/data/translations/leap_client_es_ES.ts
deleted file mode 100644
index 86eee980..00000000
--- a/data/translations/leap_client_es_ES.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS><TS version="2.0" language="es_ES" sourcelanguage="en_US">
-<context>
- <name>IntroPage</name>
- <message>
- <location filename="../src/leap/gui/firstrun/intro.py" line="14"/>
- <source>First run wizard.</source>
- <translation>Primera conexion.</translation>
- </message>
- <message>
- <location filename="../src/leap/gui/firstrun/intro.py" line="24"/>
- <source>Now we will guide you through some configuration that is needed before you can connect for the first time.&lt;br&gt;&lt;br&gt;If you ever need to modify these options again, you can find the wizard in the &apos;&lt;i&gt;Settings&lt;/i&gt;&apos; menu from the main window.&lt;br&gt;&lt;br&gt;Do you want to &lt;b&gt;sign up&lt;/b&gt; for a new account, or &lt;b&gt;log in&lt;/b&gt; with an already existing username?&lt;br&gt;</source>
- <translation>Vamos a reunir la informacion que necesitas antes de la primera conexion.&lt;br&gt;&lt;br&gt;Si alguna vez necesitas modificar estas opciones de nuevo, puedes encontrar este asistente en el menu &lt;i&gt;Opciones&lt;/i&gt; en la ventana principal.&lt;br&gt;&lt;br&gt;Que deseas hacer ahora? Puedes &lt;b&gt;registrar&lt;/b&gt; una nueva cuenta o &lt;b&gt;loguearte&lt;/b&gt; con una que ya tienes?&lt;br&gt;</translation>
- </message>
- <message>
- <location filename="../src/leap/gui/firstrun/intro.py" line="37"/>
- <source>Sign up for a new account.</source>
- <translation>Registrar una cuenta nueva.</translation>
- </message>
- <message>
- <location filename="../src/leap/gui/firstrun/intro.py" line="40"/>
- <source>Log In with my credentials.</source>
- <translation>Loguearme con mi usuario y contrasena.</translation>
- </message>
-</context>
-</TS>
diff --git a/data/ts/README.rst b/data/ts/README.rst
new file mode 100644
index 00000000..3db2d104
--- /dev/null
+++ b/data/ts/README.rst
@@ -0,0 +1,14 @@
+data/ts
+=======
+
+Here we expect the .ts files generated by typing::
+
+ $ make translations
+
+Which will generate the sources (en_US)
+
+For uploading a source::
+
+ $ tx push -s
+
+Translator should pick finished ``.qm`` files from ``data/translations`` instead of this folder.
diff --git a/data/ts/en_US.ts b/data/ts/en_US.ts
new file mode 100644
index 00000000..f6aadc5c
--- /dev/null
+++ b/data/ts/en_US.ts
@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS><TS version="2.0">
+<context>
+ <name>IntroPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="14"/>
+ <source>First run wizard.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="24"/>
+ <source>Now we will guide you through some configuration that is needed before you can connect for the first time.&lt;br&gt;&lt;br&gt;If you ever need to modify these options again, you can find the wizard in the &apos;&lt;i&gt;Settings&lt;/i&gt;&apos; menu from the main window.&lt;br&gt;&lt;br&gt;Do you want to &lt;b&gt;sign up&lt;/b&gt; for a new account, or &lt;b&gt;log in&lt;/b&gt; with an already existing username?&lt;br&gt;</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="37"/>
+ <source>Sign up for a new account.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/intro.py" line="40"/>
+ <source>Log In with my credentials.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>LogInPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="96"/>
+ <source>Username must be in the username@provider form.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="140"/>
+ <source>Resolving domain name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="163"/>
+ <source>Authentication error: %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/login.py" line="179"/>
+ <source>Credentials validated.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProviderInfoPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerinfo.py" line="18"/>
+ <source>Provider Info</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerinfo.py" line="19"/>
+ <source>This is what provider says.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>ProviderSetupValidationPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="26"/>
+ <source>Provider setup</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="27"/>
+ <source>Doing autoconfig.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="83"/>
+ <source>Fetching CA certificate</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="105"/>
+ <source>Checking CA fingerprint</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providersetup.py" line="134"/>
+ <source>Validating api certificate</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RegisterUserPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="31"/>
+ <source>Sign Up</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="208"/>
+ <source>Registration succeeded!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="238"/>
+ <source>Password does not match..</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="242"/>
+ <source>Password too short.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="247"/>
+ <source>Password too obvious.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="279"/>
+ <source>Error connecting to provider (timeout)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="284"/>
+ <source>Error Connecting to provider (connerr).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="292"/>
+ <source>Error during registration (%s)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="302"/>
+ <source>Could not register (bad response)</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="309"/>
+ <source>Username not available.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/register.py" line="375"/>
+ <source>Register a new user with provider %s.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>RegisterUserValidationPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="95"/>
+ <source>Fetching provider config...</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="112"/>
+ <source>Authentication error: %s</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/regvalidation.py" line="117"/>
+ <source>Fetching eip certificate</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
+ <name>SelectProviderPage</name>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="32"/>
+ <source>Enter Provider</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="33"/>
+ <source>Please enter the domain of the provider you want to use for your connection.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="87"/>
+ <source>chec&amp;k!</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="97"/>
+ <source>Server certificate could not be verified.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="136"/>
+ <source>Certificate validation</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="222"/>
+ <source>checking domain name</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="276"/>
+ <source>checking https connection</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="292"/>
+ <source>Could not get info from provider.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="295"/>
+ <source>Could not download provider info (refused conn.).</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/leap/gui/firstrun/providerselect.py" line="305"/>
+ <source>fetching provider info</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+</TS>
diff --git a/docs/dev/internationalization.rst b/docs/dev/internationalization.rst
index 6cbc6f72..e6b89dea 100644
--- a/docs/dev/internationalization.rst
+++ b/docs/dev/internationalization.rst
@@ -6,24 +6,22 @@ Internationalization
This part of the documentation covers the localization and translation of LEAP Client.
Because we want to *bring fire to the people*, in as many countries and languages as possible.
-.. note::
- We should probably move the translators info to a top level section of the docs, and leave this
- as internal/tech-savvy notes.
-
Translating the LEAP Client PyQt Application
--------------------------------------------
.. raw:: html
- <div> <a target="_blank" style="text-decoration:none; color:black; font-size:66%" href="https://www.transifex.com/projects/p/leap-client/resource/leap_client_es/" title="See more information on Transifex.com">Top translations: leap-client » leap_client_es</a><br/> <img border="0" src="https://www.transifex.com/projects/p/leap-client/resource/leap_client_es/chart/image_png"/><br/><a target="_blank" href="https://www.transifex.com/"><img border="0" src="https://ds0k0en9abmn1.cloudfront.net/static/charts/images/tx-logo-micro.646b0065fce6.png"/></a></div>
+ <div><a target="_blank" style="text-decoration:none; color:black; font-size:66%" href="https://www.transifex.com/projects/p/leap-client/resource/leap-client/" title="See more information on Transifex.com">Top translations: leap-client » leap-client</a><br/><img border="0" src="https://www.transifex.com/projects/p/leap-client/resource/leap-client/chart/image_png"/><br/><a target="_blank" href="https://www.transifex.com/"><img border="0" src="https://ds0k0en9abmn1.cloudfront.net/static/charts/images/tx-logo-micro.646b0065fce6.png"/></a></div>
For translators
^^^^^^^^^^^^^^^
.. note::
- ... unfinished
+ We should probably move the translators info to a top level section of the docs, and leave this
+ as internal notes.
-We are using `transifex <http://transifex.com/projects/p/leap-client>`_ site to coordinate translation efforts. If you want to contribute, just sign up there and ...
+
+We are using `transifex <http://transifex.com/projects/p/leap-client>`_ to coordinate translation efforts. If you want to contribute, just sign up there and ...
.. note::
... and what??
@@ -32,8 +30,9 @@ For devs: i18n conventions
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. note::
- should link to PyQt docs on i18n
- also our special cases (labels and exceptions)
+ should say something about our special cases (provider labels and exceptions) when we get decision about it.
+
+Refer to `pyqt documentation <http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/i18n.html>`_.
tl;dr;::
@@ -41,17 +40,64 @@ tl;dr;::
for any string that you want to be translated.
+.. Note about this: there seems to be some problems with the .tr method
+ on QObjects. Investigate this.
+ I still believe we can use a generic _ method which is smart enough to
+ fallback to QObject.tr methods or lookup our own tr implementation (for our
+ multilungual objects, like in exceptions or provider labels that came from json objects).
+ --kali
+
For i18n maintainers
^^^^^^^^^^^^^^^^^^^^
-.. note::
+You need ``pylupdate4`` for these steps. To get it, in debian::
- how do we use the transifex client; automation.
+ $ apt-get install python-qt4-utils
If you do not already have it, install the ``transifex-client`` from the cheese shop::
pip install transifex-client
+You can learn more about the transifex-client `here <http://help.transifex.com/features/client/index.html>`_.
+
+**1.** Add any new source files to the project file, ``data/leap_client.pro``. *We should automate this with some templating, it's tedious.*
+
+**2.** Update the source .ts file ``data/ts/en_US.ts``.::
+
+ $ make translations
+
+**3.** Push source .ts file to transifex::
+
+ $ tx push -s
+
+**4.** Let the translation fairies do their work...
+
+**5.** *Et voila!* Get updated .ts files for each language from ``Transifex``. For instance, to pull updated spanish translations::
+
+ $ tx pull -l es
+ Pulling new translations for resource leap-client.leap-client (source: data/ts/en_US.ts)
+ -> es: data/translations/es.ts
+ Done.
+
+
+Note that there is a configuration option in ``.tx/config`` for setting the minimum completion percentage needed to be able to actually pull a resource.
+
+**6.** Generate .qm files from the updated .ts files::
+
+ $ make translations
+
+and yes, it's the same command than in step 2. One less thing to remember :)
+
+**7.** Check that the .qm for the language you're working with is listed in ``data/resources/locale.qrc`` file. That should take the translated files from ``data/translations``
+
+**8.** Re-generate ``src/leap/gui/locale_qrc``. This is the embedded resource file that we load in the main app entry point; and from where we load the data for the qt translator object::
+
+ $ make resources
+
+If you want to try it, just set your LANG environment variable::
+
+ $ LANG=es_ES leap-client
+
Translating the Documentation
------------------------------
diff --git a/docs/testers/howto.rst b/docs/testers/howto.rst
index 8de4a1eb..e5bf1fa8 100644
--- a/docs/testers/howto.rst
+++ b/docs/testers/howto.rst
@@ -141,6 +141,16 @@ Testing the packages
^^^^^^^^^^^^^^^^^^^^
When we have a release candidate for the supported platforms (Debian stable, Ubuntu 12.04 by now), we will announce also the URI where you can download the rc for testing in your system. Stay tuned!
+Testing the status of translations
+----------------------------------
+
+We need translators! You can go to `transifex <https://www.transifex.com/projects/p/leap-client/>`_, get an account and start contributing.
+
+If you want to check the current status of the client localization in a language other than the one set in your machine, you can do it with a simple trick (under linux). For instance, do::
+
+ $ lang=es_ES leap-client
+
+for running LEAP Client with the spanish locales.
Reporting bugs
--------------
diff --git a/docs/translations.txt b/docs/translations.txt
deleted file mode 100644
index 8cdb2e40..00000000
--- a/docs/translations.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-Translations steps
-==================
-
-1. Use .tr() on labels to be translated.
-
-Note about this: there seems to be some problems with the .tr method
-on QObjects. Investigate this.
-
-I still believe we can use a generic _ method which is smart enough to
-fallback to QObject.tr methods or lookup our own tr implementation (for our
-multilungual objects, like in exceptions or provider labels that came from json objects).
-
-2. Add source files to the project file, data/leap_client.pro (Note: investigate if we can use some form of expansion here; it's tedious to add source files one by one).
-
-3. Still in data/leap_client.pro, add a translation per each language. Translations live in data/translations.
-
-4. exec ``pylupdate4`` data/leap_client.pro to generate initial .ts file
-5. Use QtLinguist (* or whatever web service we end up using *) to translate stuff. We expect the ts to follow Qt xml format, which seems standard enough to allow some fair degree of play.
-6. Execute ``lrelease data/leap_client.pro`` to generate .qm files.
-7. Check that the .qm for the language you're working with is listed in data/resources/locale.qrc file.
-
-8. Execute ``make resources`` to re-generate locale_qrc (in src/leap/gui). This is the compiled resource file that we load in the main app entry point; and from where we load the data for the qt translator object.
diff --git a/docs/user/install.rst b/docs/user/install.rst
index 22f88b12..1f0fd831 100644
--- a/docs/user/install.rst
+++ b/docs/user/install.rst
@@ -32,7 +32,7 @@ Get the code
.. warning::
- This... won't work either, as-is. This should be the third optional way to install stable releases from master branch. Right now that does not work because there is *nothing* updated in the master branch. Leaving this here since this is what we will be doing, but if you really intend to have a working tree, refer to the sections :ref:`setting up a working environment <environment>` or :ref:`fetching latest code <fetchinglatest>`.
+ This... won't work either, as-is. This should be the third optional way to install stable releases from master branch. Right now that does not work because there is *nothing* updated in the master branch. Leaving this here since this is what we will be doing, but if you really intend to have a working tree, refer to the sections :ref:`setting up a working environment <environment>` or :ref:`fetching latest code for testing <fetchinglatest>`.
You can get the code from LEAP public git repository ::
diff --git a/docs/user/intro.rst b/docs/user/intro.rst
index fe983b63..abb6d487 100644
--- a/docs/user/intro.rst
+++ b/docs/user/intro.rst
@@ -74,7 +74,7 @@ All contributions should have these three points in mind.
.. _`gpl3`:
GPLv3 License
-------------
+--------------
.. image:: gpl.*