Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Internazionalizza le tue applicazioni

569 views

Published on

Qt offre degli strumenti molto avanzati per internazionalizzare al meglio le applicazioni in tutto il mondo

  • Be the first to comment

  • Be the first to like this

Internazionalizza le tue applicazioni

  1. 1. Crossing the borders: the i18n systemLuca Ottaviano (lottaviano@develer.com)
  2. 2. What is i18n about?Embracing a specific national environment: Language Line break behaviour Writing direction Conventions...without hampering development
  3. 3. (True) Horror StoryWere in 2002, and a big Italian company wants to localize their CAD program in Spanish. If only it wasnt for...
  4. 4. (True) Horror StoryStrings were initially hardcoded in Italian, English was retrofitted at some point......with lots of if/else statementsFirst 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
  5. 5. All we need is a good workflowDevelopers produce i18n-ready code With no codebase pollutionTranslators translate strings Iteratively (code and strings can change!) No technical knowledge neededThe framework does the rest
  6. 6. Developers step 1QObject::tr()Parse-time: marks stringsRun-time: translates stringsNot everything is a QObject...QCoreApplication::translate()QT_TR_NOOP 6
  7. 7. Developers step 2Use QString for all user visible textQString are Unicode strings → transparentprocessing of strings (reg exp, split etc)Programmer space strings can still beQByteArrays or char * 7
  8. 8. Developers step 3Use QString::arg() for dynamic textQString::arg() allows easy argumentreordering 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
  9. 9. Some glueAdd a TRANSLATIONS entry to .proRun lupdate to extract a .ts fileSend .ts file to translatorsRun lrelease to produce translated binaryfilesSet up a QTranslatorQCoreApplication::installTranslator() 9
  10. 10. Translators (only) stepOpen .ts file with LinguistFill the missing translationsThere is no step 3Developer: “...hey thats not fair!” 10
  11. 11. Some case studiesNearing the 2.0 release: Parse again with lupdate Fill only the missing translationsWanting 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
  12. 12. Workflow demo 12
  13. 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
  14. 14. Gotchas::tr assumes latin-1What about Designer files? 14

×