• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Crossing the border with Qt: the i18n system

Crossing the border with Qt: the i18n system



Crossing the border with Qt: the i18n system

Crossing the border with Qt: the i18n system



Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-NonCommercial LicenseCC Attribution-NonCommercial License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Crossing the border with Qt: the i18n system Crossing the border with Qt: the i18n system Presentation Transcript

    • Crossing the borders: the i18n systemLorenzo Mancini (lmancini@develer.com)
    • What is i18n about? Embracing a specific national environment:  Language  Line break behaviour  Writing direction  Conventions ...without hampering development
    • (True) Horror StoryWere in 2002, and a big Italian company wants to localize their CAD program in Spanish. If only it wasnt for...
    • (True) Horror Story Strings were initially hardcoded in Italian, English was retrofitted at some point... ...with lots of if/else statements First try: add another else branch for each string in code (...) Second try: tool to produce multiple codebases – one for each language (...) AFAIK still unfinished two years later
    • All we need is a good workflow Developers produce i18n-ready code  With no codebase pollution Translators translate strings  Iteratively (code and strings can change!)  No technical knowledge needed The framework does the rest
    • Developers step 1 QObject::tr()  Parse-time: marks strings  Run-time: translates strings Not everything is a QObject...  QCoreApplication::translate()  QT_TR_NOOP 6
    • Developers step 2 Use QString for all user visible text QString are Unicode strings → transparent processing of strings (reg exp, split etc) Programmer space strings can still be QByteArrays or char * 7
    • Developers step 3 Use QString::arg() for dynamic text QString::arg() allows easy argument reordering void FileCopier::showProgress(int done, int total, const QString &currentFile) { label.setText(tr("%1 of %2 files copied.nCopying: %3") .arg(done) .arg(total) .arg(currentFile)); } 8
    • Some glue Add a TRANSLATIONS entry to .pro Run lupdate to extract a .ts file Send .ts file to translators Run lrelease to produce translated binary files Set up a QTranslator QCoreApplication::installTranslator() 9
    • Translators (only) step Open .ts file with Linguist Fill the missing translations There is no step 3 Developer: “...hey thats not fair!” 10
    • Some case studies Nearing the 2.0 release:  Parse again with lupdate  Fill only the missing translations Wanting to add a language  Add that language to TRANSLATIONS  Run lupdate, translate the new .ts file, lrelease  This time its a fairy tale! Update language on the fly  installTranslator sends a changeEvent 11
    • Workflow demo 12
    • Gotchas ::tr assumes latin-1 What about Designer files? 13
    • THANKS ! Develer S.r.l. Via Mugellese 1/A 50013 Campi Bisenzio Firenze - ItalyContactsMail: info@develer.comPhone: +39-055-3984627Fax: +39 178 6003614http://www.develer.com