Tietokoneohjelmien kielen kääntäminen



Samankaltaiset tiedostot
Linuxin lokalisointi. Marko Grönroos

Linuxin lokalisointi

kansainvälistäminen ja paikallistaminen Zopessa Plonen käännöstyö Asko Soukka, Jyväskylän yliopisto

4. Lausekielinen ohjelmointi 4.1

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Merkkijono määritellään kuten muutkin taulukot, mutta tilaa on varattava yksi ylimääräinen paikka lopetusmerkille:

Historiaa. Unix kirjoitettiin kokonaan uudestaan C-kielellä Unix jakautui myöhemmin System V ja BSDnimisiin. Kuutti, Rantala: Linux

4. Lausekielinen ohjelmointi 4.1

TIE Ohjelmistojen suunnittelu

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

TIE Ohjelmistojen suunnittelu

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

KYMENLAAKSON AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma / Ohjelmistotekniikka. Krista Nevalainen TOIMISTO-OHJELMAT LINUXISSA

Avoimen lähdekoodin kehitysmallit

7. Näytölle tulostaminen 7.1

Written by Administrator Monday, 05 September :14 - Last Updated Thursday, 23 February :36

Tekstinkäsittelystä. H4: Tekstinkäsittelyn perusharjoitus. Toimisto ohjelmista

WINE API ja Virtualisointiohjelmistot

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

Miten lokalisointityö kohtaa kielen normatiivisuuden?

MultiSave - käyttö ja käyttöönotto

HTML & CSS. HTML (HyperText Markup Language) Antti Koivisto. ! HTML on sivujen kuvauskieli.

Google-dokumentit. Opetusteknologiakeskus Mediamylly

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Kieliversiointityökalu Java-ohjelmistoon. Ohje

Tämä dokumentti on tehty pohjaan Muistiopohja_logolla.ott

Vesa Ollikainen, päivitys Juha Haataja

Pedacode Pikaopas. Web-sovelluksen luominen

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

3 Verkkosaavutettavuuden tekniset perusteet

5. HelloWorld-ohjelma 5.1

Java-kielen perusteet

Lokalisointitestaus. Matti Vuori, 1(17)

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

ATK yrittäjän työvälineenä

Tekstinkäsittely 1. Peruskäyttö. Tietotekniikan perusteet Metropolia Ammattikorkeakoulu Vesa Ollikainen

Joonas Ruotsalainen GIT PIKAOPAS. Tutkielma 2011

Versionhallinta MIKSI?

1 www-sivujen teko opetuksessa

MITÄ JAVASCRIPT ON?...3

Java-kielen perusteita

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Ohjelmoinnin perusteet Y Python

Tekstinkäsittelystä. Yleisiä tekstinkäsittelyn periaatteita OpenOffice.org Writer vs. MS Word. H4: Tekstinkäsittelyn perusharjoitus

TEEMA 3 TEKSTIDATAN KÄSITTELY JA JULKAISEMINEN LUENTO 5 TEKSTINKÄSITTELY

VALO-ohjelmat ja LTSP kouluissa. Elias Aarnio Innopark, AVO-hanke

C++ Ohjelmoijan käsikirja. Johdanto

TIETOKONEEN ASETUKSILLA PARANNAT KÄYTETTÄVYYTTÄ

Ohjelmoinnin perusteet, syksy 2006

SCI- A0000: Tutustuminen Linuxiin, syksy 2015

SQLite selvitysraportti. Juha Veijonen, Ari Laukkanen, Matti Eronen. Maaliskuu 2010

DOORSin Spreadsheet export/import

OHJE EXCEL-MAKRON LUOMISEKSI JA MAKRON KÄYTÖSTÄ

H T M L eli kuinka laadin itselleni päheät kotisivut. Janne Käki

8. Näppäimistöltä lukeminen 8.1

Javan perusteet. Ohjelman tehtävät: tietojen syöttö, lukeminen prosessointi, halutun informaation tulostaminen tulostus tiedon varastointi

TermBase NET versio (Beta)

1. HARJOITUS harjoitus3_korjaus.doc

Openoffice Impress-pikakurssi

CVS. Kätevä väline usein päivitettävien tiedostojen, kuten lähdekoodin, hallitsemiseen

Harjoituksen aiheena on tietokantapalvelimen asentaminen ja testaaminen. Asennetaan MySQL-tietokanta. Hieman linkkejä:

Ohje 1 (12) Maarit Hynninen-Ojala MOODLE PIKAOHJE. Kirjautuminen Moodleen ja työtilan valitseminen

Versionhallinta MIKSI?

OpenOffice toimisto-ohjelma

Työvälineohjelmistot KSAO Liiketalous 1

Subversion-ohje. Linux Traffic Control-käyttöliittymä Ryhmä paketti2

ASENNUS- JA KÄYTTÖOHJE

TT00AA Ohjelmoinnin jatko (TT10S1ECD)

Oppilaan opas. Visuaaliviestinnän Instituutti VVI Oy. Versio 0.2 ( )

ASTERI KIRJANPITO KIELIVERSION OHJE

Sen jälkeen Microsoft Office ja sen alta löytyy ohjelmat. Ensin käynnistä-valikosta kaikki ohjelmat

Office ohjelmiston asennusohje

C-kielessä taulukko on joukko peräkkäisiä muistipaikkoja, jotka kaikki pystyvät tallettamaan samaa tyyppiä olevaa tietoa.

Ohjelmoinnin peruskurssi Y1

Korpusten käsittely clt131, P Luento 6

ejuttu ohjeet kuinka sitä käytetään.

Salasanojen turvallinen tallentaminen KeePass ohjelmalla

Maha Eurosystem jarrulaskentaohjelman asennusohje versio

Tärkeimmät toiminnot. Kertausta ja uusia toimintoja Wordistä sekä tiedostonhallinnasta. Tärkeimmät toiminnot jatkuu...

Optima käyttöopas opiskelijalle

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

LINUX-HARJOITUS, MYSQL

Vesa Ollikainen, päivitys Juha Haataja

KÄYTTÖOHJE / Ver 1.0 / Huhtikuu WordPress KÄYTTÖOHJE Sotkamo 2016

Java-kielen perusteet

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

Harjoitus 2 (viikko 45)

Visual Case 2. Miika Kasnio (C9767)

Perusteet. Pasi Sarolahti Aalto University School of Electrical Engineering. C-ohjelmointi Kevät Pasi Sarolahti

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Mathcad 14.0 Single User -asennus

Muuttujien määrittely

Ohjelmoinnin perusteet Y Python

Harjoitus 5 (viikko 48)

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

14. Hyvä ohjelmointitapa 14.1

Felipe Ballester TI07

Vaasan yliopiston toimintaa tukevat informaatiopalvelut ovat käytettävissä WWW:n kautta.

Innovointiprosessi. Lili Aunimo Lili Aunimo

Transkriptio:

Tietokoneohjelmien kielen kääntäminen Tampere 19.11.2007

Sisältö Käsitteistä Avoin lähdekoodi - mitä se on? Internationalisointi + lokalisointi = globalisointi Lokalisoinnin alueita Avoimen lähdekoodin lokalisointiprojektit OpenOffice, KDE, Gnome, Mozilla, Linux,... Projektien välinen yhteistyö Globalisoinnin tekniikkaa Internationalisointi (Gettext) Merkkijonoresurssitiedostot Käännösohjelmat (KBabel) Versionhallinta Ohjelmistojen kääntämisen erityispiirteitä Koodit, yms.

Avoimen lähdekoodin ohjelmistot Tietokoneohjelmia, joista suorituskelpoisten ohjelmatiedostojen lisäksi saatavilla myös lähdekoodi Saa kopioida, jakaa ja erityisesti myös muuttaa vapaasti Tekijänoikeuksista huolehditaan ohjelmistolisensseillä GNU GPL, GNU LGPL, BSD, MPL, GNU FDL,... Monet lisensseistä varmistavat, että ohjelmistot myös pysyvät vapaina ja avoimina (GPL, LGPL) Linux-ydin, GNU-ohjelmistot, työpöytäympäristöt,... Monet myös Windowsille OpenOffice, Firefox, Thunderbird, Gimp,... Oiva välihyppy Linuxiin Yleistymässä kovaa vauhtia Vahva asema palvelimissa (web, tietokannat, superlaskenta, jne.) Saamassa jalansijaa työpöydillä

Lokalisointi (l10n) Suom. kotoistus Tietokoneohjelman spesialisointia tiettyyn kulttuuriseen, poliittiseen tai maantieteellinen kokonaisuuteen eli lokaaliin Lokaaleja voivat olla esimerkiksi kieli, maa tai tietty maantieteellinen sijainti Tavallisimmin tarkoittaa kielen kääntämistä Jos internationalisointi on tehty hyvin, lokalisointi ei vaadi lainkaan ohjelmointia

Lokalisoitavat asiat (1/2) Maakohtaiset asetukset lukuarvojen muodot ( 1.000.000,00 ) päivämäärän ja kellonajan muodot valuuttayksiköt, valuuttamuodot Paperikoot, mittajärjestelmät (SI/imperiaaliset) Näppäimistön järjestys Unicode CLDR -tietovarasto (http://kotoistus.fi/) Fontit Merkkijoukot (Unicode/UCS) Sovelluskohtaisia asioita: kaupunkien nimet ja sijainnit (kstars) Internet-operaattorien tiedot (kppp) Hakukoneet ja weppisivut (uutispalvelut) Asiakirjapohjat, esim. SFS 2487 -vakiomuotoilu

Lokalisoitavat asiat (2/2) Kielenkäännökset Käyttöliittymät Valikot, valintaikkunat, viestit... Mediat: videot, äänet, grafiikat Käytönaikaiset ohjeet Käyttöoppaat Verkkosivustot Tavutus ja oikoluku Vaativat ohjelmointia + sanalistojen luomista Avoimen koodin ratkaisuja: Soikko, Hunspell-fi

Internationalisointi (i18n) Tietokoneohjelman yleistäminen siten, että se on riippumaton kulttuurisesta, poliittisesta tai maantieteellisestä alueesta eli lokaalista Lokaalispesifinen tieto irroitetaan ohjelmasta erilliseksi resurssiksi, jota voi muokata ilman ohjelmointia Ohjelmointia Useimmissa ohjelmistokehitysvälineissä (SDK) omat internationalisointimenetelmänsä- ja työkalunsa Monia ohjelmia ei ole lainkaan internationalisoitu

Globalisointi (g11n) Koko prosessi joka sisältää Internationalisoinnin (yleistys) ohjelmointia Lokalisoinnin (spesialisointi) eri lokaaleille käännöstyötä, yms.

Globalisointisykli ohjelmistokehityssyklin osana Julkaisu Laadunv. Lokalisointi Suunnittelua Laadunvalvontaa Dokumentointia Ohjelmointia (sis. i18n)

Avoimen lähdekoodin globalisointisykli Julkaisu String freeze Laadunvalvontaa (sis. ohjelmointia ja i18n) Laadunv. Suunnittelua + ohjelmointia (sis. i18n) Lokalisointia Dokumentointia Feature freeze

Avoimen lähdekoodin lokalisointiprojektit Työpöytäympäristöt KDE, Gnome Linux-jakeluversiot Fedora, Debian, Ubuntu/Kubuntu, Mandriva, Novell SuSE... Ohjelmistot OpenOffice, Mozilla Firefox, Thunderbird, KOffice,... Järjestelmäohjelmat GNU Translation Project Unicode CLDR-määritykset (kotoistus.fi)

Tietotekniikan kotoistushanke Unicode CLDR-määritykset Common Locale Data Repository Unicode määrittelee myös erityisesti merkistöjä kotoistus.fi Kotimaisten kielten tutkimuskeskuksen koordinoima Ohjaus- ja seurantaryhmässä n. 40 henkilöä eri tahoilta Kannanottopyynnöt Vahvistetut suositukset Ehdotukset kansainvälisille standardointielimille

Lokalisointiryhmät Tekninen tuki Ryhmänjohtaja Laadunvalvonta Lokalisointityöryhmä Käännöstiimi Kääntäjät Tekninen tuki Ohjelmistot Käännöstiimit

KDE: K Desktop Environment Käyttöliittymältään käyttäjäystävällisin työpöytäympäristö Linuxille (subjektiivinen arvio) Linux, Solaris Ei tule useimpien Linux-jakelujen mukana oletusympäristönä Kubuntu, SuSE/Novell, Mandriva sisältävät Suomennosryhmä http://kde-fi.org/ Statistiikat: http://i18n.kde.org/stats/gui/stable/fi/.pot- ja.po-tiedostot Subversion-versionhallinnassa Lokalisointi tehdään KBabelilla Kaikenlaista kivaa automatiikkaa Käännöshallintaohjelma Nyk. projektikohtaiset asetukset (OOo!) Dokumentaation lokalisointi alkuteillään

Gnome-työpöytäympäristö Linux, Solaris, HP-UX, BSD, Darwin Ensisijainen useimmissa Linux-jakeluissa Suomennosprojekti: http://www.gnome.fi/ Vastuualueet, statistiikat, oma sanakirja,... Käännöstilanne: http://l10n-status.gnome.org/ Gnome 2.14: 99,89% käännetty perusmoduulit desktop, developer-libs, proposed HEAD: extras (paljon kääntämättömiä) office (gnumeric-functions kääntämättä)

Toimisto-ohjelmisto Writer - tekstinkäsittely (vrt. MS Word) Calc - taulukkolaskenta (vrt. MS Excel) Impress - esitysgrafiikka (vrt. MS PowerPoint) Draw - vektorigrafiikka Base - tietokannat (vrt. MS Access) Star Division, Saksa Sun Microsystems OpenOffice.org GNU GPL, GNU LGPL, SISSL StarOffice - suljettu kaupallinen versio

OpenOffice - käännösten historiaa Kuka kääntänyt aiemmin... OpenOffice 1.0 ammattikääntäjien kääntämää Kongo Group -> Pasanet (Turku) Sun Microsoft osti käännöksen -> StarOffice -> lahjoitti avoimeksi n. 2003 Dokumentaatio: Sun (Pasanet) OpenOffice 1.1 -> Vapaaehtoisvoimin OpenOffice.org native-lang -projekti http://fi.openoffice.org/

OpenOffice - käännöstilanne OpenOffice 2.0.1 julkaistu joulukuussa 2005 2.0.2 maaliskuussa 2006 Käännökset CVS:ssä Käännöstilanne: Käyttöliittymät käännetty kattavasti Käytönaikaiset ohjeet kokonaan kääntämättä Laajennetut vihjeet kääntämättä Mallit ja mm. kirjeiden ohjattu luonti kääntämättä Käännöstyö: http://openoffice-fi.sf.net/ Tärkeimmät postituslistat kääntäjälle: dev@fi.openoffice.org (suomennostiimin keskustelut) gnome-fi-laatu@lists.sourceforge.net (laadunvalvonta) dev@l10n.openoffice.org (englanninkielinen l10-keskustelu)

Lokalisointityöryhmä Kansallinen lokalisointutoiminta Debian Lokaalit Ohjelmistonkehitysprojektit Käännöstiimit KDE Gnome Lokalisointityöryhmä

Lokalisoinnin yhteistyö Lokalisointityöryhmä Perustettu kesäkuussa 2003 Lokalisointityöpaja 30.8.2003 Lokalisoinnin tilanne 2003 -selvitys Viestintä Portaali Postituslistat (laadunvalvonta) IRC: #Lokalisointi (IrcNet) Sanakirja, ohjeita, työkaluja,...

Laadunvalvonta Postituslista Tarkoitus: palautteen saaminen Tällä hetkellä Gnomen laatulista Kääntäjä lähettää, kääntäjä korjaa Vasta oman tarkan oikoluvun jälkeen Muotoilusäännöt Kts. ohjeet lokalisointi.orgissa Merkistö ISO-8859-1/15, ei UTF-8 Max. 50kt palasia kerrallaan Vastaaminen: lainaa > -merkeillä korjattavat kohdat

Globalisointitapoja Gettext (GNU-ohjelmat, Linux) Click'n'translate (Windows) Tunnisteellinen resurssitiedosto Ohjelmakoodiin integroitu (typerä tapa)...paljon muita... Suunnilleen jokaisella SDK-toimittajalla oma tapansa

Internationalisointi käytännössä......yksinkertainen ohjelma #include <stdio.h> int main () { /* Tulosta merkkijono. */ printf ("Hello, world!\n"); } EI RELEVANSSIA KÄÄNTÄJILLE YLEENSÄ! Jos ymmärtää niin aina hyvä juttu Yksinkertaisin mahdollinen ohjelma C-kielellä printf-funktio tulostaa merkkijonon päätteelle Lopussa \n rivinvaihto (newline) Erilaisia tulostus- tai näyttötapoja tuhansia

Internationalisointi käytännössä......typerä tapa...... /* Tulosta merkkijono kielen mukaan. */ if (language == ENGLISH) printf ("Hello, world!\n"); else if (language == FINNISH) printf ("Terve, metsä!\n"); Ohjelmaa ei oikeastaan ole edes internationalisoitu Kieli irrotettu valinnan tekevään muuttujaan Merkkijonot eivät erillisenä resurssina Vaatii kääntäjältä ohjelmointia Jos ehtolauseet (tai vastaava muu toteutus) kirjoitettaisiin tarkalla systematiikalla, merkkijonot voitaisiin poimia ohjelmasta automaattisesti, kääntää, ja jälleen sulauttaa takaisin lähdekoodiin. OpenOfficessa tehty vähän tämänkaltaisesti.

...miten globalisointi tehdään? (Gettext) C/C++ (Java, Perl, Python,...) Lähdekoodi C/C++/... -kääntäjä xgettext msgfmt ajonaikaisesti Suorituskelpoinen ohjelma.mo.mo.mo eri kielille.pot (en) msgmerge.po (en+fi) KBabel 1. kerralla

Internationalisointi gettextillä......käytännössä Esim. printf ( Hello, world!\n ); tai i18n xgettextin tavalla: printf (gettext("hello world!\n")); gettext()-funktio hakee käännöksen Oletuskielen merkkijono toimii hakuavaimena xgettext-ohjelma hakee lähdekoodista kaikki hakuavaimet Tuottaa merkkijonoresurssitiedoston (.pot) Ohjelman kieliasetus yleensä käynnistettäessä Saadaan käyttöjärjestelmältä Linuxissa/UNIXissa LANG-ympäristömuuttujasta

Gettext......internationalisoitu ohjelma #include <stdio.h> #include <libintl.h> #include <locale.h> int main () { /* Hae lokaali ympäristömuuttujista. */ char* sl = setlocale (LC_ALL, ""); /* Aseta lokaalitiedostojen polku. */ bindtextdomain ("hello", "/usr/share"); /* Aseta nykyinen teksti-domain. */ textdomain ("hello"); } /* Hae ja tulosta merkkijono. */ printf (gettext ("Hello, world!\n"));

Gettext......po-tiedosto # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2003-07-17 14:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=charset\n" "Content-Transfer-Encoding: 8bit\n" #: hello.c:24 msgid "Hello, world!\n" msgstr ""

Gettext......lokalisoitu po-tiedosto... "Content-Type: text/plain; charset=utf-8\n"... #: hello.c:24 msgid "Hello, world!\n" msgstr "Terve, met" "sä!\n"

Gettext......monikkomuodot (ngettext) Yksikkö- ja monikkomuotojen tulostus /* Muuttujalla i on useita eri arvoja 1-4. */ for (int luku=1; luku<=4; luku++) /* Hae ja tulosta merkkijono. */ printf (ngettext ("%d file", /* Yksikkömuoto */ "%d files", /* Monikkomuoto */ i), /* Lukumäärä ngettextille */ i); /* Tulostettava luku */ Tulostaa: 1 file 2 files 3 files 4 files

Gettext......monikkomuodot (ngettext) POT-tiedosto: PO-tiedosto:... #: hello.c:29 #, c-format msgid "%d file\n" msgid_plural "%d files\n" msgstr[0] "" msgstr[1] ""... #: hello.c:29 #, c-format msgid "%d file\n" msgid_plural "%d files\n" msgstr[0] "%d tiedosto" msgstr[1] "%d tiedostoa" Tulostaa: 1 file 2 files 3 files 4 files 1 tiedosto 2 tiedostoa 3 tiedostoa 4 tiedostoa

Sumeat merkkijonot Kun vanhaan käännökseen (.po-tiedostossa) mergetään uudet merkkijonot, jotkin merkkijonot ovat saattaaneet muuttua vain hieman Englanninkieliset merkkijonot ovat tunnisteita (msgid:tä) -> jos muuttuneet vähänkin, eivät enää täsmää -> Monet käännökset häviäisivät turhaan Hävinneet merkkijonot yritetään pelastaa Etsitään parhaiten vastaava uusi msdid Merkitään sumeaksi (fuzzy) Mitä sumeat merkkijonot ovat? Käännösvihjeitä Jos ei käännetä (edes hyväksytä), merkkijonot jäävät kääntämättömiksi Näkyvät yleensä statistiikoissa erikseen

Click'n'translate Käännetään napsauttamalla merkkijonoja GUI:ssa Valikot ja valintaikkunat resurssitiedostoissa Muut merkkijonot resurssilistana Joissain erit. vanhemmissa systeemeissä mm. Windows esim. OpenOfficellekin kuitenkin työkalu, jolla voidaan tehdä ei tiettävästi kovin käytetty Etuja: Konteksti näkyy suoraan Saa varmistettua, että tekstit mahtuvat GUI-elementteihin Vaikeuksia: Editointityökalut SDK-toimittajan tekemiä (ja usein suljettuja) Huono standardointi Ei voida käyttää käännöstoimiston omia työkaluja

Internationalisointi numeerisesti Ohjelmakoodissa: printf (getstring (STR_MERKKIJONOTUNNISTE), parametri1, parametri2); Määrittelytiedostossa tunnisteelle numeerinen arvo: #define STR_MERKKIJONOTUNNISTE 42 getstring-funktio saa siis luvun, jolla se hakee merkkijonon resurssitiedostosta Resurssitiedostossa numerolle merkkijonosisältö: [STR_EKAMERKKIJONO=1]... [STR_MERKKIJONOTUNNISTE=42] en= String in English, parameters: %d and %s fi= Merkkijono suomeksi, parametrit: %d ja %s

OpenOfficen lokalisointiprosessi localize extract oo2po OpenOffice Lähdekoodi CVS localize merge po2oo C++ -kääntäjä Suorituskelpoinen ohjelma KBabel

OpenOfficen lokalisointiprosessi Hae po-tiedostot Sourceforgesta Anonyymi-CVS cvs... login, cvs... checkout Muista ajaa usein: cvs update Varaa käännösalue Tee käännökset (tai laadutus) Kerää käännökset Tar-paketti (vain muokatut hakemistot) cvs diff -u moduuli > mun-mdl-20050523.patch Postita CVS-arkiston ylläpitäjälle liitteessä

OpenOfficen lokalisointiprosessi... CVS-arkiston hoitajat tekevät: CVS:n po-tiedostoista nk. GSI-tiedosto Toimitetaan Pavel Janikille (cz) Pavel tekee buildit Eri alustat: Linux, Windows, Solaris,... FreeBSD, OSX n. viikon välein -> palautteen saaminen kestää Ladattavissa Pavelin palvelimelta Kts. Pavelin Blogi Uudet merkkijonot pot-hakemisto CVS-arkiston hoitajat yhdistävät

Versionhallinta Taltioi tiedostojen versiot Muutokset täytyy toimittaa (commit) versionhallintaan Tekstitiedostoissa toimii rivipohjalta Useat muokkaajat voivat muokata jopa saman tiedoston eri osia, muutokset yhdistetään (merge) fiksusti samaan tiedostoon, jos eivät ole ristiriidassa Käytetään aina ohjelmistokehityksessä ei välttämättä käännöstyössä Avoimessa lähdekoodissa: CVS - yleisesti käytetyin, suorastaan standardi Subversion - uusi nouseva HUOM! Ei kurssin kannalta oleellista Käännöstiedostot saatavissa yleensä webin kautta, käännetyt toimitetaan käännösryhmän vetäjälle.

Versionhallinta (CVS) Käyttöliittymät: Linux/UNIX/Windows-komentorivi GUI-sovellukset, esim. WinCVS, Cervisia, jne. Web-liittymät, esim. WebCVS, Bonzai, jne. Komennot: checkout - noutaa asiakirjavarannon update - päivittää paikallisen kopion commit/checkin - toimittaa muokatut asiakirjat diff - vertailee eri versioita Muita ominaisuuksia Branching - kehitystä voidaan tehdä useissa rinnakkaisissa kehityshaaroissa. Yleensä pääkehityshaara (head/main) ja julkaistujen versioiden ylläpito- ja jatkokehityshaara. Sivuhaarat voidaan yhdistää takaisin päähaaraan, jolloin saadaan esim. vikakorjaukset. Lukitukset (harvoin käytetty)

Luento 2 sisällys Sanastot Sanastokeskustelut Merkistöt HTML (HyperText Markup Language) XML (extensible Markup Language) Ohjelmistojen kääntämisen erityispiirteitä

Sanastot Linux-sanasto () Paljon myös yleistä ATK- ja muuta sanastoa Gnome-fi:n sanasto Tietotekniikan termitalkoot (Sanastokeskus TSK) Kotoistus-projektin standardikäännökset Eurooppalaisen merkistön merkkien suomenkieliset nimet ATK-sanakirja Erikoisalojen sanastot Jukka Korpela listannut paljon Sanastokeskustelut Laatulistalla kommentoinnin yhteydessä IRC:ssä #Lokalisointi-kanavalla

Merkistöt Sama merkki voidaan esittää tietokoneessa monella eri tavalla Vanhat 8-bittiset (256 merkkiä) merkkikoodaukset ISO 8859-1 (ANSI): Länsimaiset merkit ISO 8859-15: Länsimaiset mutta uro-merkillä Unicode standardisoi mm. merkkikoodauksia Kts. http://unicode.org/ Merkistössä nykyisin yli 100.000 merkkiä (?) Unicode Transformation Forms (UTF): UTF-32 - Linuxissa sisäinen koodaus UTF-16 - Windowsissa ja Macissa hyvin käytetty UTF-8 - hyvin käytetty mm. WWW-sivut, jne. Kaikilla esitysmuodoilla mahdollista esittää yli miljoona merkkiä

HTML-merkintäkieli (1/2) HyperText Markup Language WWW-sivut ovat HTML:ää Kaikkien sivujen HTML-lähdekoodin saa näkyviin selaimista Sivut voivat sisältää myös JavaScript-ohjemakoodia Käytetään myös ohjelmien sisällä Jotkin ohjetekstit, jossa tekstin korostusta ja hyperlinkkejä Perustuu merkintäkoodeihin (tägeihin) <merkintäkoodi>...</merkintäkoodi> <p>tämä on tekstikappale jossa on <b>lihavoitus tekstiä</b>.</p> <p> on paragraph eli tekstikappale, <b> on lihavoitu pätkä. Alku- ja loppumerkkien oltava samat Jotkin voivat olla myös yksittäin: esim. <br> (rivinvaihto) Attribuutit: <p align= right >...</p>

HTML-merkintäkieli (2/2) Esimerkiksi < ja > merkittävä: < ja > <b>1 + 2 < 5</b> Merkkikoodit: Nimetyt koodit: <, ö (eli ö), jne. Numeeriset koodit Unicodea: &#24d0; Merkkijonojen sisällön kanssa oltava varovainen <div align= right >...</div> ei saa kääntää tunnisteita

XML-merkintäkieli (1) extensible Markup Language HTML:n kaltainen, mutta tiukempi merkintäkieli Yleensä onneksi ohjelmallisesti generoitua Käännettäessä joudutaan koskemaan käsin Jos pienikin virhe, ohjelma ei toimi Käsinkirjoitettu XML tarkistettava validaattorilla, jos mitenkään mahdollista KBabelissa sisäänrakennettuna yksinkertainen validaattori <merkki>...</merkki> Kuten HTML:ssä Voi olla myös yksittäin: esim. <br/> (rivinvaihto) huomaa loppu-/, joka on välttämätön, toisin kuin HTML:ssä Merkintäkoodit täysin sovellusspesifisiä Eivät siis erityisesti muotoilukoodeja

XML-merkintäkieli (2) <?xml version="1.0" encoding="utf-8"?> <henkilot> <henkilo> <etunimi>aleksanteri</etunimi> <sukunimi>suuri</sukunimi> <syntymaaika>30.7.356 eaa</syntymaaika> <ammatti>valloittaja</ammatti> <siviilisaaty tyyppi="naimaton"/> </henkilo> <henkilo> <etunimi>kaarle</etunimi> <sukunimi>suuri</sukunimi> <syntymaaika>2.4.742</syntymaaika> <ammatti>kuningas</ammatti> <siviilisaaty tyyppi="leski"/> </henkilo>... </henkilot>

DocBook-asiakirjamuoto (1/2) XML- tai SGML-muotoinen asiakirjaformaatti OASIS-standardi Merkintäkoodit määräävät vain tekstisisällön Ei määritetä tarkkaa ulkoasua, jolla teksti esitetään Teksti voidaan esittää hyvin erilaisilla ulkoasuilla ja eri tiedostomuodoissa (HTML, PDF, PostScript,...) Eri variantteja LinuxBook erittäin käytetty dokumentaatiossa Eri sovelluksilla esim. omia entiteettimäärityksiään (&kde;, jne.) Tavallisimpia merkintäkoodeja: <book>...</book> <title>pääotsikko</title> <chapter>...</chapter> <para>kappale.</para> <ulink url= >hyperlinkki</ulink>

XML: DocBook-asiakirjamuoto (2/2) <book> <title>here is a title</title> <chapter> <title>this is the title of a chapter</title> <para>here is an ordinary text paragraph.</para> <para>here is <emphasize>emphasized</emphasize> text.</para> </chapter> </book> Internationalisointi -> # <some context identifier> msgid Here is a title msgstr Tässä on pääotsikko # <some context identifier> msgid This is the title of a chapter msgstr Tämä on luvun otsikko Lokalisointi -> # <some context identifier> msgid Here is an ordinary text paragraph. msgstr Tämä on tavallinen leipätekstikappale. # <some context identifier> msgid Here is <emphasize>emphasized</emphasize> text. msgstr Tässä on <emphasize>korostettua</emphasize> text.

Ohjelmistojen kääntämisen erityispiirteitä Erikoismerkinnät Tulostaminen ohjelmointikielissä Poistot ja lisäykset tekstiin Merkkijonojen yhdistely Valikot Valintaikkunat

Printf - muotoiltu tulostaminen C-ohjelmointikielessä Monet muut kielet käyttävät samaa merkintätapaa esim. printf ( Terve, metsä! ); Tulostaa Terve, metsä! Internationalisoituna: printf (getstring( Hello, world! )); Miten sisällyttää tulosteeseen muuttujia esim. Suomen 8. presidentti oli Kekkonen, jossa luku ja nimi tulisivat muuttujasta print ( Suomen + luku +. presidentti oli + nimi); C-kielessä merkkijonoja ja lukuja ei voi katenoida helposti printstring ( Suomen ); printinteger (luku); printstring (. presidentti oli ); printstring (nimi); Ei hyvä Oleellisempaa: internationalisointi tuottaisi monta merkkijonoa

printf......parametrien tulostus ja muotoilu Parametrien sisällyttäminen tulosteeseen printf (muotoilumerkkijono, parametri1, parametri2,...); Parametrit ilmaistaan muotoilumerkkijonossa merkinnöillä %d (kokonaisluku), %s (merkkijono), jne. Parametrit ovat yleensä muuttujia, jotka voivat saada eri arvoja pjarjestysluku = 11; pnimi = Tarja Halonen ; printf ( Suomen %d. presidentti on %s\n, pjarjestysluku, pnimi); Numeerinen parametri (11) ja merkkijonoparametri Tulostaa: Suomen 11. presidentti on Tarja Halonen

printf......erilaisia parametrikoodeja %d - kokonaisluku %3d - pituus kolme numeroa ja jos vähemmän niin täytetään välilyönneillä %03d - pituus kolme numeroa ja jos vähemmän niin täytetään nollilla %+d - kirjoitetaan etumerkki myös positiivisille luvuille, esim. -42 ja +42 (muutoin etumerkki tulee vain negatiivisille) %s - merkkijono %20s - merkkijono, jonka pituus on 20 merkkiä, puuttuvat merkit täytetään välilyöntimerkeillä %f tai %g -liukuluku %2.4f - liukuluku, jossa 2 kokonaislukunumeroa ja neljä pilkun jälkeen, esim. 12.3456. %03.4f - kokonaislukuosa kolme numeroa ja jos vähemmän niin täytetään nollilla, esim. 001.2345 %x heksadesimaaliluku,...

Tulostuskentät: printf Joskus järjestystä täytyisi vaihtaa printf ( %s of %s, ruler, country); Engl. tulostuu: President of Finland Suomennos: %s %s -> presidentti Suomen...oops Voidaan yrittää korjata: %s, %s -> presidentti, Suomen Usein tuetaan kehittyneempiä keinoja (C++-kieli): String( %1 of %2 ).arg(ruler).arg(country); Lokalisoitava merkkijono: %1 of %2 Suomennettava: %2 %1 -> Suomen presidentti (olettaen että kentästä tulee valtio oikein genetiivimuodossa) Erilaisia merkintätapoja eri ohj.kielissä ja kehitystyökaluissa: QT/KDE: %1, %2,... OpenOffice: $1, $2,... tai $nimi Jotkin muut: \1, \2,...

printf... (2/4)...Lainatut (quotoidut) merkit %% tulostaa prosenttimerkin printf ( Lainasta on maksettu %d%% ); -> Lainasta on maksettu 84% Muuten kääntäjä (compileri) tulkitsee parametrin koodiksi \n rivinvaihto \t sarkainmerkki \ lainausmerkit Lainausmerkeillä merkataan merkkijonon alkaminen ja loppuminen, joten merkkijonon keskellä ei voisi olla lainausmerkkejä.

printf... (3/4)...Kenoviivalla lainatut merkit \0NNN oktaalilukuna (8-järjestelmässä) annettu merkin koodi. Kun desimaaliluvut ovat 0123456789, ovat heksadesimaaliluvut 01234567 (8 numeroa ). Esim. Oktaaliluku \0123 on desimaalilukuna 1*8*8+2*8+3=83, joka on ASCII-merkistössä kirjain S. \xnn heksadesimaalilukuna (16-järjestelmässä) annetun merkin koodi Kun desimaaliluvut ovat 0123456789, ovat heksadesimaaliluvut 0123456789abcdef (16 numeroa ). Esim. Heksadesimaaliluku \x4a on desimaalilukuna 4*16+10=74, joka on ASCII-merkistössä kirjain J. \\ kenoviiva Joskus printf:n tulostetta voidaan käyttää toisen printf:n muotoilumerkkijonona, jolloin \ täytyy olla tuplasti tai jopa neljästi: \\n, \\\\n

printf......käännettäessä tärkeää Huolehdittava kenttäkoodien kohdalla, että... kenttiä %s, %d, jne. ei katoa tai tule lisää kentät pysyvät samassa järjestyksessä!!! Virheet johtavat C-kielessä ohjelman kaatumiseen Tulostuva prosenttimerkki on aina quotoitu %% Huolehdittava tulostuskoodien kohdalla, että Lainausmerkit on quotoitu oikein Muutkin quotoinnit ovat kuten alkukielessä

Erikoismerkinnät %PRODUCTNAME, %PRODUCTVERSION == OpenOffice.org ja 2.0 tai 1.9.105, tms. %PRODUCTNAMEissa, %PRODUCTNAMEiin,... %PRODUCTVERSION:n, :ssa,... Pikanäppäimet: M~uokkaa -> Muokkaa Ei saa olla konflikteja, erit. valikoissa

Symboliset nimet (tunnisteet) Ohjelmien tai tietokantojen tunnisteita Käännettävä vain äärimmäisen harvoin Joitain tunnettuja tapauksia: Taulukkolaskennan (esim. OpenOffice Calc) funktioiden nimet OpenOfficessa ei enää suomennettuina monista syistä OpenOfficessa tietokannan ohjatussa luonnissa tietokantataulujen ja kenttien esimerkkinimet Ei ehkä sittenkään järkevää Erikseen lyhyet nimet, pituus maks. 10 merkkiä tai tulee ongelmia KTurtlessa (Konna) kilpikonnan ohjauskomennot Tyypilliset säännöt: Vain merkit a-z, A-Z, numerot, alaviiva_ Ei välilyöntejä, ei skandeja, ei miinusta- tai plussaa+, jne. Alettava kirjaimella tai alaviivalla, ei numerolla

Valikot Käytäntöjä Käännökset usein erittäin vakiintuneet Ellipsis Tiedosto... merkitsee avautuvaa valintaikkunaa Pikavalintojen oltava ristiriidattomia ja järkeviä Eri ohjelmien valikoissa käytetään usein samoja merkkijonoresursseja Yhtenäistää käännökset, mutta... Ristiriitoja joskus mahdotonta selvittää ilman kontaktia ohjelmoijiin Joissain systeemeissä (esim. KDE) toimintoja, joilla valikoiden ristiriidat voidaan selvittää

Valikkoristiiriitojen selvittäminen ja yhtenäistäminen Calc Writer Impress Draw Base a Taulukko b c d Tiedot Diaesitys e f g h i Ikkuna Ikkuna Ikkuna Ikkuna Ikkuna j k l Lisää Lisää Lisää Lisää Lisää m Muokkaa Muokkaa Muokkaa Muokkaa / Muuta Muokkaa n Näytä Näytä Näytä Näytä Näytä o Ohje Ohje Ohje Ohje Ohje p q r s t Tiedosto Tiedosto Tiedosto Tiedosto Tiedosto u Muotoilu Muotoilu Muotoilu Muotoilu v w x y Työkalut Työkalut Työkalut Työkalut Työkalut z å

Valintaikkunat Koostuvat ohjausobjekteista (kontrolleista, ikkunaelementeistä) Painikkeet, tekstikentät, valintaruudut, luetteloruudut, jne. Joissain ympäristöissä ohjausobjektit kiinteän kokoisia Esim. Windows, OpenOffice Käännöksen mahduttava vakiokokoiseen tilaan Aina vältettävä pidentämästä merkkijonoja paljoa Tapa muokata kokoa vaihtelee ohjelmistoittain: Ohjelmakoodista - täytyy lokalisoida koko lähdekoodi (huh) Valintaikkunoiden asettelu määritelty muokattavassa resurssitiedostossa - jotenkuten lokalisoitavissa, mutta täytyy tehdä joka versiolle uudestaan Ohjausobjektien koko säätyy sisällön mukaan Esim. KDE, Gnome Fonttia ja fonttikokoa voi muuttaa vapaasti

Kontekstin selvittäminen (1/3) Merkkijonotiedostojen suhde ohjelmiston moduuleihin ja toiminnallisuuksiin Merkkijonojen järjestys yleensä kontekstin suhteen looginen Merkkijonotunniste vihjeenä Täysin ohjelmiston oman käytännön mukainen Ei normaalisti gettext-po-tiedostoissa, mutta esim. OpenOfficen po-tiedostot ovat generoituja tunnisteellisista tiedostoista, joten tunnisteet näkyvät automaattisesti generoituina kommentteina Esim. OpenOfficen po-tiedostossa: #: Common.xcu#..Common.Menus.New.m0.Title.value.text msgid ~Text document Varmaankin valikon File/New valinta Text document

Kontekstin selvittäminen (2/3) Lähdekooditiedoston nimi Usein automaattisena kommenttina Täysin ohjelmiston arkkitehtuurista riippuva Esim. KBabel osaa näyttää vastaavan lähdekoodin Kommentit Ohjelmoijan tekemiä selkokielisiä selityksiä. Esim. gettextissä: msgid _: Comment text\n Actual text Eriyttävät samalla monimerkityksiset sanat Esim. _: In table\n column (suom. sarake) _: In page layout\n column (suom. palsta) Msgid:n kommenttitekstiä ei saa kopioida käännökseen Paina KBabelissa Ctrl+Välilyönti kopioidaksesi käännettävän osuuden

Kontekstin selvittäminen (3/3) Ohjelman käyttäminen Tunnettava ohjelma mahdollisimman hyvin Valikot ja valintaikkunat helppoja löytää Kaikkia merkkijonoja ei löydä helposti, esim. virheviestit. Virheenjäljitysmerkkijonot Merkkijonoon lisätty numeerinen tunniste Vain harvat järjestelmät tukevat helposti Esim. Tiedosto 4145, Muokkaa 4146, jne. Näppärä tapa yksilöidä UI:n merkkijono resurssien merkkijonoon

Poistoja tekstistä Kaikkia lauseita/ilmaisuja ei ole pakko kääntää lainkaan Usein tekstistä täytyy poistaa tarpeettomuuksia "Cupsomatic is a Perl script that is needed to..." Mikä ihme on "Perl-skripti"? (Perl-komentosarja...?) Onko relevanttia että ohjelma on Perl-skripti? Suom. "Cupsomatic-ohjelmaa tarvitaan..." Jos täsmennys saattaa olla relevantti jollekulle, voidaan se siirtää myöhemmäksi paremmin selitettynä "... Cupsomatic on toteutettu Perl-ohjelmointikielellä ja edistyneet käyttäjät voivat tehdä siihen helposti parannuksia."

Lisäyksiä tekstiin Usein tekstiin täytyy lisätä selityksiä "With the emerging CUPS concept, extending the use of PPDs even to non-postscript printers..." CUPS? CUPS concept? PPDs? "...CUPS-tulostusjärjestelmän...PPD-kuvaustiedostojen..." Lyhenteiden käyttö usein yli-innokasta "Ghostscript filter that can be used with any other program that needs a software-rip." Suom. "...joka tarvitsee ohjelmallista kuvanrasterointia (RIP)."

Kieliongelmia Katkaistut merkkijonot Autosave every, Minutes -> Tallenna automaattisesti joka [15] Pöytäkirja is required by Käsittämättömät kohteet $1 was not found Kohdetta $1 ei löytynyt Tiedostoa/kansiota/tietuetta $1 ei löytynyt Move $1 to $2 Siirrä $1 kohteeseen $2? Siirrä $1 kansioon $2? riville?...?

Kieliongelmia... Monimerkityksiset sanat column: sarake (taulukossa), palsta (sivulla) table: taulukko (tekstissä), taulu (tietokannoissa) Internationalisointi saattanut optimoida monimerkityksiset sanat yhdeksi merkkijonoksi