qt icon indicating copy to clipboard operation
qt copied to clipboard

i18n & translation

Open joeblew99 opened this issue 8 years ago • 9 comments

I am wondering how we want to handle translation

what resources are there ? https://appbus.wordpress.com/2016/04/28/howto-translations-i18n/

  • walk through

https://github.com/therecipe/qt/tree/master/internal/examples/quick/translate

  • basic example

I am more wondering about how i get others to make my translations via a third party web site of pumping each through google translate API. Looks for ideas, recommendations. Imagine you have a project with 5 languages (EN, DE, Spanish, Italian, Chinese). Keeping the code matches with the translations being machine translated and then checked by a person that knows each language can get hairy in terms of co-ordination.

Is there a web sites designed to handle the translation files that QT uses etc ? Really have no idea.

--

Qt Creator has lots of GUI tooling to help you. But in the golang worls there are some good tools to. https://github.com/go-playground/universal-translator

  • this does i18n and l10n ! I think it woudl not be hard to make tooling using golang that can interact with the standard QT translation files if we wanted. Or we could not use the standard qt translation file too, but not sure thats a good idea. I prefer the idea of adapters.

joeblew99 avatar Dec 24 '16 10:12 joeblew99

When I created the quick/translate example, I used lupdate, the Qt Linguist application and lrelease.

IIRC it was basically just something like this:

  1. lupdate to create the *.ts file from the *.qml file.
  2. Qt Linguist to translate the *.ts file (as this seems to be just xml, you can probably decode the *.ts file, feed it to google translate or some other site and the encode it again)
  3. lrelease to create the *.qm file from the *.ts file.

Here is some additional information http://doc.qt.io/qt-5/linguist-manager.html

Keeping the code matches with the translations being machine translated and then checked by a person that knows each language can get hairy in terms of co-ordination.

Yes, I see what you mean.

Is there a web sites designed to handle the translation files that QT uses etc ?

I have no idea. A quick search didn't brought up anything. Maybe the already established translation services already accept *.ts files?

Qt Creator has lots of GUI tooling to help you. But in the golang worls there are some good tools to. https://github.com/go-playground/universal-translator

Seems promising, but it's probably better suited for the widgets than for qml?

I think it woudl not be hard to make tooling using golang that can interact with the standard QT translation files if we wanted.

As these are basically xml files, it shouldn't be to hard to properly decode/encode them.

therecipe avatar Dec 27 '16 20:12 therecipe

@therecipe thanks for taking the time to dig through my pretty open ended questions.

all makes sense now.

According to the web site (http://doc.qt.io/qt-5/linguist-manager.html) lupdate is able to do the xliff file format which is a standard. Also the GUI tool, Qt Linguist, can handle xliff files. This also means we can run it through Google translate cloud, and then give it to humans to check.

I dont want to boil the ocean on this though. How about if we start by just putting the bash commands you ran for the example ? Then we can make it work with Google Translate. See here, its pretty nice: https://github.com/maximilien/i18n4go/blob/master/cmds/create_translations.go#L104

https://github.com/maximilien/i18n4go BTW has nice tooling, check the cmd folder. I reckon that it will be easy to write cmds on top of theirs that are QT aware if we want later.

joeblew99 avatar Dec 27 '16 22:12 joeblew99

I dont want to boil the ocean on this though. How about if we start by just putting the bash commands you ran for the example ?

Yes, that's a good idea. I will look into the example again and create a small script. And if possible include a link to the original source I used to create the example. I think there was some small tutorial how to use lupdate and lrelease, but I'm not really sure.

https://github.com/maximilien/i18n4go BTW has nice tooling, check the cmd folder. I reckon that it will be easy to write cmds on top of theirs that are QT aware if we want later.

Those look good, but I probably have to take a deep look at them first.

therecipe avatar Dec 28 '16 22:12 therecipe

I looked into the example again, and here is what I had to run inside the quick/translate folder to get the *.qm file

# create/update the *.ts file
/usr/local/Qt5.7.0/5.7/clang_64/bin/lupdate ./qml/translate.qml -ts ./qml/i18n/translation_fr.ts

# manually translate the word
open /usr/local/Qt5.7.0/5.7/clang_64/bin/Linguist.app

# create the *.qm file
/usr/local/Qt5.7.0/5.7/clang_64/bin/lrelease ./qml/i18n/translation_fr.ts

I also found another probably helpful tool called lconvert inside /usr/local/Qt5.7.0/5.7/clang_64/bin/, which can be used to convert different formats of translation files.

therecipe avatar Dec 29 '16 22:12 therecipe

so it all works for me on OSX; android and IOS.

Couple of ideas then.

  1. forget everything i said about golang and i18n :) It seems QT has everything needed. Sorry about that. i forgot the QT team seem to think of everything..

  2. Can we include a little golang CMD thingy that calls the correct tool for the workflow you described a few issues steps up (lupdate, lrelease) ? First steps is to get the right terminal programmes called and the qtLinguist GUI. 2nd step would be an example that shows the whole process working using those cmd. The idea is to show how to do it in a deterministic repeatable fashion for toooling.

  3. Then i am thinking about localiation of number formats.

  • currencies. Swedish uses the ",", instead of the ".".
  1. Hooking into google Translate then is pretty easy using the golang toolkits, if we want to do that here or probably in a side project.

joeblew99 avatar Mar 24 '17 12:03 joeblew99

Can we include a little golang CMD thingy that calls the correct tool for the workflow you described a few issues steps up (lupdate, lrelease) ? First steps is to get the right terminal programmes called and the qtLinguist GUI. 2nd step would be an example that shows the whole process working using those cmd. The idea is to show how to do it in a deterministic repeatable fashion for toooling.

Yeah, wrapping the lupdateand lrelease tools will make the whole process a lot more convenient. I put it on my todo list and will take a look at it tommorow.

Then i am thinking about localiation of number formats.

I'm not sure if this is really necessary, I bet there is some option somewhere that does that for you already. I will investigate.

Hooking into google Translate then is pretty easy using the golang toolkits, if we want to do that here or probably in a side project.

Yeah, it's probably better to in-build such a feature later, once it's able to do the basic "important" stuff. Then there is always time to make it available through a flag or something.

Thanks for the input :)

therecipe avatar Mar 26 '17 22:03 therecipe

oh there is great QT support for number formats etc - no ned to use golang libs. I was more thinking that the demo should show it of thats all.

yes i have something basic working to do translate that is format independent that i can map into the CMD thingy we write for QT. Will dig it out and give it a try when ready.

thanks for putting this on the todo :)

On Mon, Mar 27, 2017 at 1:01 AM therecipe [email protected] wrote:

Can we include a little golang CMD thingy that calls the correct tool for the workflow you described a few issues steps up (lupdate, lrelease) ? First steps is to get the right terminal programmes called and the qtLinguist GUI. 2nd step would be an example that shows the whole process working using those cmd. The idea is to show how to do it in a deterministic repeatable fashion for toooling.

Yeah, wrapping the lupdateand lrelease tools will make the whole process a lot more convenient. I put it on my todo list and will take a look at it tommorow.

Then i am thinking about localiation of number formats.

I'm not sure if this is really necessary, I bet there is some option somewhere that does that for you already. I will investigate.

Hooking into google Translate then is pretty easy using the golang toolkits, if we want to do that here or probably in a side project.

Yeah, it's probably better to in-build such a feature later, once it's able to do the basic "important" stuff. Then there is always time to make it available through a flag or something.

Thanks for the input :)

— You are receiving this because you authored the thread.

Reply to this email directly, view it on GitHub https://github.com/therecipe/qt/issues/160#issuecomment-289320070, or mute the thread https://github.com/notifications/unsubscribe-auth/ALcac5QLYyeDOyt6aGB8MyI2zQcFl8Hvks5rpuDkgaJpZM4LVMv5 .

joeblew99 avatar Mar 28 '17 08:03 joeblew99

Any idea how to translate the menu bar and the buttons inside a QDialogButtonBox?

My try is this:

translator := core.NewQTranslator(nil)
translator.Load2(core.QLocale_System(), "qt_it", "", core.QLibraryInfo_Location(core.QLibraryInfo__TranslationsPath), ".qm")
app.InstallTranslator(translator)

These seems works, the button inside a QDialogButtonBox are translated in italian but the menubar appear without strings, like this https://i.imgur.com/OCK6caa.png

Also, any idea how to generate .ts file when the tr strings are inside a go source code file?

fmt.Println(core.QObject_Tr("Hello", "", -1))

pioz avatar Oct 20 '17 23:10 pioz

I would like to abandon Python + Pysyde2 and try to migrate to golang. In this project I can't see the pyside2-lupdate tool equivalent, a tool that is able to collect translatable strings also in the source .py files. There is a similar tool to collect strings also in the .go files?

Translatable strings are marked in .py files using using any of following functions: tr("the string", "optional comment for the translator") translate("translation_context", "the string", "optional comment for the translator") self.tr("the string") # in any QWidget context

jkumeboshi avatar Oct 29 '21 12:10 jkumeboshi