Kansallisten kieliversioiden hallinta APL-pohjaisen sovelluksen tuotteistamisessa

Arto Juvonen

1. Tausta

Kansallisen kielen käyttö sovelluksessa parantaa ohjelman käytettävyyttä. Tietojen syötössä käytetty erityisterminologia saattaa olla hyvinkin outoa normaalista käyttökielestä poikkeavalla kielellä esitettynä.

Sovelluksessa voidaan kielikysymykset ottaa huomioon jo suunnitteluvaiheessa, mikäli monikielisyys nähdään tarpeelliseksi. Usein kuitenkin sovellukset kehittyvät vasta myöhemmin tuotteiksi, joissa toisen kielinen käyttöliittymä tulee tarpeelliseksi. Tällöin ei kuitenkaan ole yleensä kyse sovelluksen kertakaikkisesta kääntämisestä esim. englanninkieliseksi ja suomenkielisen version hautaamisesta, vaikkakin tällaisessakin tapauksessa tässä esitettävien periaatteiden käytöstä saattaa olla hyötyä kääntämisessä.

Kansallisen kielen tuki voidaan sisällyttää ainakin kahteen sovelluksen osa-alueeseen, käyttöliittymään ja raportointiin. Monikielisen raportoinnin tarve on usein näistä ajallisesti ensin. Menetelmät kielten hallitsimisessa ovat kuitenkin samat.

2. Kielen hallinnan tavoitteet

Kansallisen kieliversion hallinnalle asetetaan seuraavat tavoitteet:

- Kieliversiologiikka ei saa huonontaa ohjelmakoodin ymmärrettävyyttä

- Kääntämistyön eriyttäminen ohjelmointityöstä

- Ylläpidon helppous

- Erilaisten ajonaikaisten kieliversioiden muodostaminen

Triviaaliratkaisu kieliominaisuuden lisäämiseksi olisi käyttää apuohjelmaa (esim. lgT X, mikä hakee kielimuuttujasta tai -tiedostossa fraasin X). Täten ohjelmassa esim. teksti 'Anna arvo X' olisi korvattu käskyllä lgT 123, missä 123 viittaisi kielimuuttujan paikkaan 123, joka sisältää tekstin 'Anna arvo X' eri kielillä. Koska ohjelmakoodin tulee olla mahdollisimman hyvin ymmärrettävää, ei kielitekstiviitteiden käyttö pelkästään ole riittävää. E.m. 0-ratkaisu huonontaa ohjelman itsedokumentoituvuutta, koska ohjelmaa katsottaessa fraasin 123 sisältö pitää käydä katsomassa erillisestä luettelosta. Yksi mahdollisuus olisi lisätä riville kommentti, mutta mielestäni paras vaihtoehto on lisätä teksti argumentiksi, joko muodossa lgT 123 'Anna arvo X' tai tiettyjen toimintojen automatisoinnin helpottamiseksi muodossa lgT '#123:Anna arvo X'

Kielen kääntämisen tekee usein joku muu kuin ohjelmoija, kielen kääntämisen ja sovellusalueen terminologian hallitsija, mitä ohjelmoija ei välttämättä ole. Käännöstyön mahdollistamiseksi alkuperäinen teksti sekä käännökset eri kielille olisi siirrettävä ohjelmaympäristöstä käännöstyöympäristöön, esimerkiksi tekstinkäsittely- tai taulukko-ohjelmaan.

Koska ison sovelluksen käyttöliittymän kielen kääntäminen on vaivalloista, tulee ylläpitoon kiinnittää suurta huomioita. Koska sovellus elää, tulee käyttöliittymään tehtävät muutokset pystyä viestittämään kääntäjälle niin, että kääntäjä näkee, mitkä tekstiosuudet ovat muuttuneet ja pystyy tarkistamaan käännöksen.

Sovelluksen kieliversiota voidaan edelleen luonnehtia seuraavan jaottelun mukaisesti:

-       Aktiiviset käyttö- ja raportointikielet, 1-3 kpl, esim. suomi, ruotsi, englanti

-       Passiiviset käyttö- ja raportointikielet voidaan erikseen ladata ohjelmaan

Aktiiviset kielet ovat ne, jotka käyttäjällä on käytettävissä esim. napin painalluksella. Ohjelman ylläpitäjällä voi lisäksi olla "varastossa" muitakin kieliä, joita ei kuitenkaan ole asennettu kyseiselle käyttäjällä.

3. Sovelluksen kielelliset osiot

APL-sovelluksissa kielikohtaisia asioita on yleensä talletettu useisiin erilaisiin objekteihin, esim. valintalista voi olla matriisina työtilassa. Näitä ovat

-       Erilaiset parametritiedostot (esim. syöttötietoluettelot, raporttimäärittelyt yms.)

-       Työtilassa tai ohjelmatiedostossa tekstimuuttujat, erikseen käyttö- ja raporttiteksteille

-       Lomake- ja valikkomääritykset

-       Tekstimuuttujat, esim. ohjausparametrit, valintalistat, jne.

-       Ohjelmissa tekstivakioina

Osa teksteistä on sellaisia, että niiden ylläpitämiseen on ohjelma jo olemassa, jolloin myös kääntämiseen voidaan käyttää ko. ohjelmaa. Osa objekteista saattaa olla vain APL-työtilassa. Osa fraaseista on toisistaan riippumattomia, osa esim. sijainnin suhteen määrättyjä, esim. fraasi luettelon osana.

Koska tekstit ovat useissa objekteissa, tarvitaan tapa kerätä tiedot sovelluksesta käännöstyöympäristöön. Kielen kääntämiseksi on tekstejä pystyttävä

-       siirtämään helposti jonnekin, missä erikielisiä versioita voidaan syöttää

-       muuttuneet tekstit pitää pystyä tunnistamaan, jotta niitä vastaava käännös voidaan editoida

-       uudet tekstit pitää pystyä lisäämään niin, että vanhojen tekstien käännökset eivät katoa

-       käännökset pitää pystyä palauttamaan joustavasti ohjelman käyttöön

Tekstimuuttujat on syytä tallettaa sisäkkäiseksi matriisiksi, jossa on sarake kutakin käyttökieltä kohden, lähtötilanteessa ehkä vain yksi. Mikäli kyseessä on luettelo, jossa mahdollinen uusi teksti halutaan sijoittaa muualle, kuin tekstin loppuun, tulee 1. sarakkeena olla lisäksi rivin tunniste ylläpidon mahdollistamiseksi.

Ohjelman käytössä voi olla esim. muuttuja lgLANG. Sen 1. alkio kertoo, monesko käytettävissä olevista käyttöliittymäkielistä on valittu käyttöön, 2. alkio vastaavasti raportointikielen.

4. Apufunktioita kieliversiohallintaan

Ohjelmassa olevien käyttöliittymän ja raportin irrallisten fraasien hallintaan voidaan käyttää e.m. funktiota lgT. Sen muoto voisi siis olla lgT '#123:Tämä on testi'. Mikäli fraasit halutaan koota kokonaisuuksiksi, esim. tallettaa ohjelmapaketteihin, voidaan esitystä laajentaa muotoon

lgT 'P12#123:Paketin 12 tämä on testi' tai lgT 'Valikko1#5:Valikon 1 teksti 5'. Usein tekstiin saattaa liittyä parametri, jonka paikka voi vaihdella eri kielissä. Tällöin voidaan apufunktiolle antaa vasen argumentti ja merkitä tekstiin parametrit, esim. (Par1 Par2) lgT '#123:Tässä on %1 ja tässä %2.'

Vaikka ohjelmiston käyttöliittymä muutettaisiin myöhemminkin, on tällaisen apufunktion lisääminen suhteellisen vaivatonta.

Apufunktion käyttötarkoitus on kahdenlainen. Toisaalta se toimii ohjelmassa käännettävän tekstin tunnisteena. Tekstithän pitää pystyä poimimaan alkuperäisestä ohjelmasta käännettäväksi. Itselläni ohjelmaeditorin kutsumana ohjelma lgUDT poimii merkityt tekstit ja sijoittaa ne työtilassa olevaan tekstimuuttujaan. Toisaalta suoritettaessa ohjelmaa funktio hakee valitun kielen kielen mukaisen fraasin tekstimuuttujasta ja sijoittaa mahdolliset parametrit paikoilleen.

Lomake- ja valikkomäärittelyt voidaan rakentaa ohjelmassa, jolloin voidaan käyttää lgT-funktiota. Itse käytän näissä Aform-määrittelyä, missä lomake- ja valikkomäärittelyt ovat muuttujamuodossa. Aform-määrittelyssä on mahdollisuus myös useamman kielen yhtaikaiseen käyttöön.

5. Kielen käännösprosessin hallinta

Kielen käännösprosessi voidaan hallita sovellukseen liittyvän sovellustekstitiedoston avulla. Sinne on tallennettu sovelluksen tekstimuuttujista APL-muodossa, siten että muuttujaan on sijoitettu myös käännökset eri kielillä.

Sovelluksessa on luettelo muuttujista, jotka siirretään tekstitiedostoon. Luettelossa on myös kerrottu muuttujan rakenne.

Kun tekstit talletetaan sovelluksesta tekstitiedostoon, tutkitaan samalla, onko teksti muuttunut aikaisempaan versioon nähden. Tämä mahdollistaa edelleen, että vain muuttuneiden tekstien käännökset tarvitsee käydä läpi. Tekstitiedostosta tekstit viedään kääntäjän näkemään muotoon esim. taulukko-ohjelmaan. Muuttuneet tekstit on merkitty esim. *:llä. Kääntäjän suoritettua työnsä käännökset päivitetään takaisin sovellustekstitiedostoon, mistä ne voidaan ladata ohjelmaan. Ohjelman käyttöön voidaan ladata kieliä tarpeen mukaan. Turhia kieliä ei kannattane ladata, sillä ne tuovat osaltaan turhaa kuormaa.

Tekstitiedosto mahdollistaa myös sen, että kun tekstit on talletettu tekstitiedostoon, voi ohjelmointityö jatkua samanaikaisesti käännöstyön kanssa. Kun käännös on palautettu tekstitiedostoon, voidaan ohjelmasta jälleen toimittaa käännettäväksi seuraavan version tekstimuutokset.

Kun vieras kieli on ladattu ohjelmaan, on suoritettava ohjelmiston tarkastus. Tarkastettavia seikkoja ovat mm. painikkeiden ja valikoiden alt-kirjainyhdistelmien (alleviivatut kirjaimet) käyttö, esim. samojen kirjaimien käytön estäminen kahdesti. Lisäksi on tarkastettava tekstin mahtuminen varattuun kenttään.

6. Yhteenveto

Kansallisten kieliversioiden hallinta on hoidettavissa suhteellisen yksinkertaisin keinoin. Tiettyjä periaatteita ja ohjelmointitekniikoita noudattamalla heti sovellusrakentamisen alusta lähtien voidaan ohjelmaa ajaa kansallisena versiona normaalisti mutta tarvittaessa voidaan siirtyä kieliversioon helpostikin.

Suuren sovelluksen ylläpidossa myös kieliversion hallinta on työläämpää. Tällöin on syytä kiinnittää huomio menetelmiin, joiden avulla uusi kieliversio saadaan muodostettua mahdollisimman automaattisesti.

AJ 5.2.1999