TIE-20200 Ohjelmistojen suunnittelu Luento 12: Lokalisointia/kansainvälistystä TIE-20200 Samuel Lahtinen 1
Sisältöä Kansainvälistäminen/lokalisointi
Mitä asioita voi liittyä kansainvälistämiseen/lokalisointiin? TIE-20200 Samuel Lahtinen
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.
Keksi huonoja esimerkkejä lokalisoinnista TIE-20200 Samuel Lahtinen
Puutteita jne. Merkistö sekaisin (laatikot, kysymysmerkit jne.) Puuttuvat tekstit/käännökset, sekakielisyys Päällekkäiset elementit Elementtien paikat hyppivät Osa teksteistä kuva-alueen ulkopuolella Omien käännösten ja termien keksiminen Kulttuurillisesti sopimattomat asiat Paikkatiedot jne. pielessä Päiväysten, numeroiden jne. formatointi Mittayksiköt
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 Miten suunnitella ohjelma lokalisoitavaksi?
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://doc.qt.io/qt-5/internationalization.html http://doc.qt.io/qt-5/linguist-manager.html http://doc.qt.io/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?