From 06bccc52c84a93407ab4699a2749b24f55fe3061 Mon Sep 17 00:00:00 2001 From: kali Date: Thu, 20 Dec 2012 08:19:55 +0900 Subject: working transifex workflow Closes #666 --- .tx/config | 7 ++ Makefile | 16 ++- data/leap_client.pro | 20 ++- data/resources/locale.qrc | 2 +- data/translations/README.rst | 8 ++ data/translations/es.qm | Bin 0 -> 6194 bytes data/translations/es.ts | 218 ++++++++++++++++++++++++++++++++ data/translations/leap_client_es_ES.qm | Bin 1450 -> 0 bytes data/translations/leap_client_es_ES.ts | 26 ---- data/ts/README.rst | 14 +++ data/ts/en_US.ts | 219 +++++++++++++++++++++++++++++++++ docs/dev/internationalization.rst | 68 ++++++++-- docs/testers/howto.rst | 10 ++ docs/translations.txt | 22 ---- docs/user/install.rst | 2 +- docs/user/intro.rst | 2 +- 16 files changed, 570 insertions(+), 64 deletions(-) create mode 100644 data/translations/README.rst create mode 100644 data/translations/es.qm create mode 100644 data/translations/es.ts delete mode 100644 data/translations/leap_client_es_ES.qm delete mode 100644 data/translations/leap_client_es_ES.ts create mode 100644 data/ts/README.rst create mode 100644 data/ts/en_US.ts delete mode 100644 docs/translations.txt 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/.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 @@ -../translations/leap_client_es_ES.qm +../translations/leap_client_es.qm 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 Binary files /dev/null and b/data/translations/es.qm 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 @@ + + + IntroPage + + + First run wizard. + Primera Conexion. + + + + Now we will guide you through some configuration that is needed before you can connect for the first time.<br><br>If you ever need to modify these options again, you can find the wizard in the '<i>Settings</i>' menu from the main window.<br><br>Do you want to <b>sign up</b> for a new account, or <b>log in</b> with an already existing username?<br> + Vamos a configurar algunas cosas antes de que te puedas conectar por primera vez.<br><br>Si necesitas modificar estas opciones de nuevo, puedes encontrar este asistente en el menu de '<i>Opciones</i>' en la ventana principal.<br><br>Quieres <b>registrar</b> una nueva cuenta, o <b>loguearte</b> con tu usuario?<br> + + + + Sign up for a new account. + Registrar una cuenta nueva. + + + + Log In with my credentials. + Loguearme con un usuario que ya tengo. + + + + LogInPage + + + Username must be in the username@provider form. + El usuario tiene que ser usuario@tu.proveedor + + + + Resolving domain name + Resolviendo nombre de dominio + + + + Authentication error: %s + Error de autenticacion: %s + + + + Credentials validated. + Credenciales validadas. + + + + ProviderInfoPage + + + Provider Info + Info del Proveedor + + + + This is what provider says. + Esto es lo que dice el proveedor. + + + + ProviderSetupValidationPage + + + Provider setup + Configuracion del Proveedor + + + + Doing autoconfig. + Autoconfigurando. + + + + Fetching CA certificate + Obteniendo certificado de la CA + + + + Checking CA fingerprint + Comprobando el fingerprint de la CA + + + + Validating api certificate + Validando certificado de la api + + + + RegisterUserPage + + + Sign Up + Nueva Cuenta + + + + Registration succeeded! + Cuenta creada con exito! + + + + Password does not match.. + Las contrasenas no son iguales.. + + + + Password too short. + Contrasena demasiado corta. + + + + Password too obvious. + Contrasena demasiado obvia. + + + + Error connecting to provider (timeout) + Error conectandose al proveedor (timeout) + + + + Error Connecting to provider (connerr). + Error conectandose al proveedor (connerr). + + + + Error during registration (%s) + Error durante el registro (%s) + + + + Could not register (bad response) + No se pudo registrar (bad response) + + + + Username not available. + Usuario no disponible. + + + + Register a new user with provider %s. + Registrar un nuevo usuario con el proveedor %s. + + + + RegisterUserValidationPage + + + Fetching provider config... + Obteniendo configuracion del proveedor... + + + + Authentication error: %s + Error de autenticacion: %s + + + + Fetching eip certificate + Obteniendo certificado eip + + + + SelectProviderPage + + + Enter Provider + Entra tu Proveedor + + + + Please enter the domain of the provider you want to use for your connection. + Por favor, rellena el dominio del proveedor que quieras usar para tu conexion. + + + + chec&k! + compro&bar! + + + + Server certificate could not be verified. + No se pudo verificar el certificado del servidor. + + + + Certificate validation + Validacion del certificado + + + + checking domain name + comprobando nombre de dominio + + + + checking https connection + comprobando conexion https + + + + Could not get info from provider. + no se pudo obtener info del proveedor + + + + Could not download provider info (refused conn.). + no se pudo obtener info del proveedor (refused conn.). + + + + fetching provider info + obteniendo info del preveedor + + + \ 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 Binary files a/data/translations/leap_client_es_ES.qm and /dev/null 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 @@ - - - - IntroPage - - - First run wizard. - Primera conexion. - - - - Now we will guide you through some configuration that is needed before you can connect for the first time.<br><br>If you ever need to modify these options again, you can find the wizard in the '<i>Settings</i>' menu from the main window.<br><br>Do you want to <b>sign up</b> for a new account, or <b>log in</b> with an already existing username?<br> - Vamos a reunir la informacion que necesitas antes de la primera conexion.<br><br>Si alguna vez necesitas modificar estas opciones de nuevo, puedes encontrar este asistente en el menu <i>Opciones</i> en la ventana principal.<br><br>Que deseas hacer ahora? Puedes <b>registrar</b> una nueva cuenta o <b>loguearte</b> con una que ya tienes?<br> - - - - Sign up for a new account. - Registrar una cuenta nueva. - - - - Log In with my credentials. - Loguearme con mi usuario y contrasena. - - - 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 @@ + + + + IntroPage + + + First run wizard. + + + + + Now we will guide you through some configuration that is needed before you can connect for the first time.<br><br>If you ever need to modify these options again, you can find the wizard in the '<i>Settings</i>' menu from the main window.<br><br>Do you want to <b>sign up</b> for a new account, or <b>log in</b> with an already existing username?<br> + + + + + Sign up for a new account. + + + + + Log In with my credentials. + + + + + LogInPage + + + Username must be in the username@provider form. + + + + + Resolving domain name + + + + + Authentication error: %s + + + + + Credentials validated. + + + + + ProviderInfoPage + + + Provider Info + + + + + This is what provider says. + + + + + ProviderSetupValidationPage + + + Provider setup + + + + + Doing autoconfig. + + + + + Fetching CA certificate + + + + + Checking CA fingerprint + + + + + Validating api certificate + + + + + RegisterUserPage + + + Sign Up + + + + + Registration succeeded! + + + + + Password does not match.. + + + + + Password too short. + + + + + Password too obvious. + + + + + Error connecting to provider (timeout) + + + + + Error Connecting to provider (connerr). + + + + + Error during registration (%s) + + + + + Could not register (bad response) + + + + + Username not available. + + + + + Register a new user with provider %s. + + + + + RegisterUserValidationPage + + + Fetching provider config... + + + + + Authentication error: %s + + + + + Fetching eip certificate + + + + + SelectProviderPage + + + Enter Provider + + + + + Please enter the domain of the provider you want to use for your connection. + + + + + chec&k! + + + + + Server certificate could not be verified. + + + + + Certificate validation + + + + + checking domain name + + + + + checking https connection + + + + + Could not get info from provider. + + + + + Could not download provider info (refused conn.). + + + + + fetching provider info + + + + 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 -
Top translations: leap-client » leap_client_es

+
Top translations: leap-client » leap-client

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 `_ site to coordinate translation efforts. If you want to contribute, just sign up there and ... + +We are using `transifex `_ 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 `_. 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 `_. + +**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 `_, 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 ` or :ref:`fetching latest code `. + 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 ` or :ref:`fetching latest code for testing `. 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.* -- cgit v1.2.3