TIE-20200 Ohjelmistojen suunnittelu Luento 8: Lokalisointia/kansainvälistystä TIE-20200 Samuel Lahtinen 1
Ajankohtaista Viimeiset viikkoharkat tarjolla, aiheena kansainvälistäminen/lokalisointi Viikkoharkkoja ei ole enää Harjoitustyön välituotosten ajanvaraus tällä viikoll auki
Ohjelmassa tänään Moniperintä ja koodiesimerkit Kansainvälistäminen/lokalisointi
Mitä asioita voi liittyä kansainvälistämiseen/lokalisointiin? Mitä muuta kuin kieli huomioitava?
Kansainvälistäminen Kansainvälistäminen(internationalization) sisältää asioita, joiden avulla ohjelmasta voidaan tehdä lokalisoituja versioita Ohjelman rakenteen suunnittelu niin, että se on lokalisoitavissa Yksinkertaisimmillaan kielivalinta, mutta myös käyttöliittymän rakenne, syöttötavat, kulttuuriin liittyvät jutut jne. Kielivalintaan liittyviä asioita: Lyhenteet, valuutta, numeroiden esitystapa jne.
Suunnittelu & lokalisoinnit Projekti, jossa tiedossa useita eri versioita Lokalisointia tehdään usein samanaikaisesti tuotekehityksen kanssa. Tuote ja eri versiot valmistuvat kutakuinkin samaan aikaan. Eri kieliversiot ja testaus
Lokalisointiprosessia Yleisiä lokalisointiin liittyviä vaiheita: Materiaalin analysointi, työkalut, resurssit Kulttuurilliset, tekniset ja kielelliset vaatimukset Terminologia kirjastot ja niiden luonti Kääntäminen kohdekielelle Käyttöliittymän hienosääntö, namiskat, lomakkeet jne. oikean kokoiseksi. Grafiikat, kuvat, viittaukset muihin tietolähteisiin jne. kuntoon Lokalisoidut kielitiedostot kuntoon Testaus, kielellinen ja toiminnallisuus Toimitus
Jotain huomioita Suunnittele automatisoituja testejä, automatisoi testausta Merkkijonojen koodaus, esim. Utf-8 Koodiin kovakoodatut arvot, niiden metsästys Tilapäiskopio projektista, korvaa koko sanaston sisältö (kaikki entryt) samalla merkkijonolla (esim. ####, kovakoodatut arvot helppo huomata ohjelman ajossa) Sanastot: älä koita turhaan säästää muistia jakamalla lauseita pieniin osiin. Lauserakenne, sanajärjestys ja sanojen taivutukset kielten välillä eroavat. Ei näin: (ERROR_MSG_BEGIN + $USER_NAME + n + ERROR_MIDDLE_ + ERROR_END) Lisää kommentteja merkkijonoihin liittyen niiden käyttöön (kääntäminen helpottuu, kun tietää myös kontekstin) Tee käyttöohje ja käyttöliittymän lokalisointi samalla kertaa, testaa molempia
Qt ja kansainvälistäminen http://qt-project.org/doc/qt-5/qtquick-internationalization.html http://qt-project.org/doc/qt-5/linguist-manager.html http://qt-project.org/doc/qt-5/linguist-translators.html QML, Qt Quick: Käyttöliittymän merkkijonojen jne. Lokalisointi Text { id: txt1; // This user interface string is used only here //: The back of the object, not the front //~ Context Not related to back-stepping text: qstr("back", "not front"); } Numeroiden lokalisointia (esim. 4321,65 vai 4.321,65 vai 4,321.65) Text { text: qstr("%l1").arg(total) } Text { text: qstr("date %1").arg(Date().toLocaleString(Qt.locale())) }
Qt ja kansainvälistäminen Qt:n C++ versio: Qtranslate, merkkijonot tr-function sisään LoginWidget::LoginWidget() { QLabel *label = new QLabel(tr("Password:"));... } Käännössanaston lataaminen (sovellustaso) mytranslator.load("myapplication_" + QLocale::system().name(), ":/translations/"); app.installtranlator( &mytranslator ); Pikanäppäinten, näppäinoikoteiden asettaminen exitact = new QAction(tr("E&xit"), this); exitact->setshortcuts(qkeysequence::quit); Dynaamisuus tekstissä (%): void FileCopier::showProgress(int done, int total, const QString ¤tfile) { label.settext( tr("%1 of %2 files copied.\ncopying: %3").arg(done).arg(total).arg(currentFile) ); }
Lisää lokalisoinnista Perinteinen vakioiden yms. tekstien pistäminen omaan erilliseen tiedostoon toimii myös käännöskikkareiden kanssa (kuten Qt:n käännösympäristö) Voidaan vaihtaa originaalikielen tekstit helposti samasta paikkaa Haasteita: Usein ohjelmat hakevat tietoja ajonaikaisesti, tiedostoista, verkosta jne. Näiden tietojen kääntäminen voi olla mahdotonta Tietovarastosta pyydetään asiat tietynkielisellä versiolla Tietojen kuvaus monikielinen, itse tiedot kieliriippumatonta informaatiota (täydellinen tietomalli tärkeä) Käyttöjärjestelmän omat vakiokomponentit ja niiden käyttö ohjelmassa, perustoiminnot tarjolla vain käyttöliittymän kielellä Kielivalinta dynaamiseksi valikoihin, mitä vaatii?
Yhteenveto Kansainvälistysjutut, vaikutus ohjelman toteuttamiseen riippuu ohjelman rakenteesta Miten käyttöliittymä ja tulostukset yms. Eroteltu muusta koodista?