Viimasel ajal on eestis palju räägitud Linuxist kui esimesest operatsioonisüsteemist, mis omab eesti inimesele arusaadavat graafilist kasutajaliidest. Veel paar aastat tagasi utoopilisena tundunud ideest (teatas ju Microsoft, et eesti turg on eestikeelse operatsioonisüsteemi jaks liiga väike) on saanud tegelikkus. Vaikselt hakkame me selle mõttega juba harjuma ja unistame juba eestikeelsetest rakendusprogrammidest. Et aga unistus teoks saaks, tuleb ise käed külge lüüa. Ja see ei olegi nii keeruline. Piisab, kui sul on veidi aega, tahtmist ja keelevaistu ning sinu arvutis on Linux.
Enamus vajalikke laiatarbeprogramme on ingliskeelsena juba olemas, seega jääb meile tõlkimise vaev. Lisaks eestikeelsele liidesele on meil tarvis veel, et programm oleks kohandatud ka kohalikule kultuurilisele keskkonnale - tunneks sümboleid ja kooditabeleid, kuupäeva- ja numbriformaate ning rahaühikuid. Need kaks asja võetakse kokku lühenditega i18n ja l10n, ehk siis internationalization ja localization. Kuna sõnad on sedavõrd pikad, hakati neid lühendama meetodiga, milles võeti sõna esimene ja viimane täht ning nende kahe tähe vahele kirjutati ülejäänud tähtede arv sõnas.
Lokaliseerimine on tänaseks päevaks juba suures osas ära tehtud - glibc, mille kaudu C's kirjutatud programmid oma asju ajavad, on eesti jaoks juba kohandatud. Internatsionaliseerimisega on aga olukord veidi erinev - peaaegu iga programm nõuab eraldi tõlkimist.
GNU gettext on kogumik utiliite, mille abil programmid oskavad väljastada infot erinevates keeltes. Keegi ei mäleta täpselt, mis projekti raames GNU rahvas esimest korda tõlkimisest ja selleks kasutatavatest algoritmidest rääkis. Tulemuseks oli aga see, et 1994. aasta juulis hakkas Patrick D'Cruze teostama oma ideed internatsionaliseerida GNU fileutils 3.9.2. Koos paketi haldaja Jim Meyering'iga tehti mõningad eksperimendid ja pöörduti lõpuks Richard Stallmani poole, kes kirjeldas ära põhimõtted, mida ta nimetas glocale'ks. Selle kirjelduse järgi kirjutas Meyering glocale ja peale ohtrat kriitikat ja ümbertegemisi sai see 1995. aasta maikuus eraldi paketiks nimega gettext.
GNU gettext'i abil toimub tõlkimise protsess umbes järgneva skeemi alusel: xgettext'i abil filtreerib programmeerija oma programmist välja stringid, mida on võimalik tõlkida ja salvestab need programm.pot nimelisse faili. Tõlkija kopeerib selle .pot faili omale keel.po (ehk siis eesti keele puhul et.po) nimeliseks failiks, mida ta siis töötlema hakkab. Kui tõge on tehtud, teisendab tõlkija oma keel.po faili msgfmt abil failiks keel.mo ja paneb selle oma keelele vastavasse kataloogi. Nagu arvata võib, tähistatakse .po ja .mo laiendiga tõlkefaile: PO (Portable Object) on tekstikujul fail, mida saab tekstiredaktoriga muuta ja MO (Machine Object) on binaarfail.
Esimese asjana tuleb kindlaks teha, kas masin, millega peal tõlketööd üldse tegema (või testima) hakatakse, selleks üldse kõlbab. See on lihtne: kui ta juba eesti keelt räägib, siis järelikult ka kõlbab. Kui aga ei räägi, tuleb teha nii, et räägiks - ega see niiväga raske olegi. Siintoodud juhiste abil peaks arvatavasti 90% Linuxi masinatest "Eesti ühiskonnaga integreeruma".
Kõigepeakt tuleb käivitada mõni shell (kui te olete tekstirezhiimis, siis on teil shell juba ees, graafilises rezhiimis kõlbab selleks näiteks näiteks xterm) ja sisestada käsk locale. Kui tulemuseks ei sisalda stringi LANG=et_EE, siis tuleks sisestada käsk export LANG=et_EE ja uuesti locale käsuga tulemust kontrollida. Järgnevas näites just seda tehaksegi:
okul@linux.ee:~> locale LANG=C LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_ALL= okul@linux.ee:~> export LANG=et_EE okul@linux.ee:~> locale LANG=et_EE LC_CTYPE="et_EE" LC_NUMERIC="et_EE" LC_TIME="et_EE" LC_COLLATE="et_EE" LC_MONETARY="et_EE" LC_MESSAGES="et_EE" LC_ALL= okul@linux.ee:~>
Kuna nüüd on arvuti juba eesti formaatidest aru hakanud saama (kontrolli näiteks date käsuga, kas masin oskab eesti moodi kuupäeva hakanud näitama) siis võiks selle talle ka meeldivaks harjumuseks teha. Näiteks paluda oma administraatoril lisada faili /etc/environment rida LANG=et_EE - see määrab kõigile selle arvuti kasutajatele vaikimise eesti keele põhikeeleks. Kui administraator on veel kogenematu, võite talle vihjamisi öelda, et seda saab teha käsuga
echo LANG=et_EE >> /etc/environment
Kui te aga soovite eesti keelt ainult enda jaoks paika seada, piisab käsust
echo LANG=et_EE >> ~/.bash_profile
ja peale järgmist sisselogimist peakski määratud keel rakenduma.
Järgmise sammuna tuleb leida POT-fail. Kuna mina otsustasin WindowMakerit tõlkima hakata, siis tõmbasin ma selle kodulehelt http://www.windowmaker.org/ alla viimase lähtekoodi ja pakkisin selle lahti
okul@linux.ee:~> tar zxf WindowMaker-0.61.1.tar.gz
Alamkataloogist po leidsingi ridamisi PO-faile aga mulle vajalik POT fail jäi leidmata. Laskmata ennast heidutada, võtsin olemasoleva fi.po (ehk siis soomekeelne tõlge) ja kopeerisin selle nime alla et.po. Peale väikest uurimist leidsin, et vajaliku faili oleks saanud tekitada ka käsuga xgettext aga kuna parameetrite maht ületas 1KB (jaa-jaa, ühe kilobaidi) piiri, siis siinkohal ma seda käsurida ära tooma ei hakka (sest tavaliselt on .pot fail ikkagi lähtetekstiga kaasas). Lõpptulemusena oli mul sellise päisega fail:
# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # FIRST AUTHOR, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: 2000-01-17 22:52+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: ENCODING\n"
Minu käe all muutus päis selliseks:
# Estonian translation of Window Maker # Copyright (C) 1998 Free Software Foundation, Inc. # Ivar Smolin, 2000 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Window Maker 0.60.1\n" "POT-Creation-Date: 2000-01-17 22:52+0200\n" "PO-Revision-Date: 2000-01-17 22:52+0200\n" "Last-Translator: Ivar Smolin \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n"
Po failid ongi allpooltoodud, tõlkijale hõlpsasti arusaadavas formaadis:
# Tõlkija kommentaarid #. Automaatsed kommentaarid #: Viide #, Lipp msgid Tõlkimata string msgstr Tõlgitud string
Automaatseid kommentaare, viiteid, lippe ja tõlkimata stringe ei maksaks puutuda - need ajavad programmid segadusse ja tulemus ei pruugi meeldiv olla. Küll aga võib tõlkija südamerahus lisada oma kommentaare ja tõlkimata stringide muutmisel võib ta üles näidata oma vaimuandeid.
Järgmise sammuna võib juba tõlkimise tööga pihta hakata - tekstiredaktor ette ja PO fail lahti. Mina tahtsin esimesena tõlkida lõpudialoogi ja ka tõlget kohe rakendumas näha. Kuna lõpudialoog sisaldab stringi "Exit window manager?", siis seda stringi ma ka otsisin. Leidsin järgmise lõigu:
#: /home/okul/WindowMaker-0.61.1/src/rootmenu.c:187 #: /home/okul/WindowMaker-0.61.1/src/rootmenu.c:189 msgid "Exit" msgstr "" #: /home/okul/WindowMaker-0.61.1/src/rootmenu.c:188 msgid "Exit window manager?" msgstr ""
Kirjutasin esimesele msgstr reale jutumärkide vahele "Lõpetan töö" ja teisele reale "Kas lõpetan aknahalduri töö?". Samamoodi tõlkisin ka stringi "Cancel" ja pidasingi esimese dialoogi tõlgituks. Järgmise sammuna tuli mul genereerida MO fail ja see õigesse kohta panna.
MO failid on PO failidest genereeritud binaarfailid, mida programm töö käigus kasutab. Oma MO faili tegemiseks andsin järgmise käsu:
okul@linux.ee:~> msgfmt et.po -o WindowMaker.mo
Eestikeelsed MO failid asuvad kataloogis /usr/share/locale/et/LC_MESSAGES/. Kuna sinna kataloogi saab kirjutada ainult administraator (root), siis peaksite temaga konsulteerima, kuidas oma MO faili sinna kataloogi saada. Mina tegin seda järgnevalt: logisin sisse kasutaja root alt ja andsin järgmised käsud:
root> cd /usr/share/locale/et/LC_MESSAGES/ root> msgfmt ~okul/windowmaker/et.po -o WindowMaker.mo root> ls -l WindowMaker.mo -rw-r--r-- 1 root root 2606 jaan 17 23:15 WindowMaker.mo root> chown okul /usr/share/locale/et/LC_MESSAGES/WindowMaker.mo root> ls -l WindowMaker.mo -rw-r--r-- 1 okul root 2606 jaan 17 23:15 WindowMaker.mo
Mida ma siin tegin? Kõigepealt ma muutsin vajaliku kataloogi enda jaoks aktiivseks, kompileerisin kokku WindowMaker.mo faili andsin endale endale selle faili omanikuõigused oma kasutajakontole. Edaspidi on mul võimalik oma kasutajakonto alt seda faili üle kirjutada.
Peale MO faili kopeerimist tõlgeta kataloogi (ja peale WindowMakeri taaskäivitamist) sain ma järgneva lõpudialoogi:
PO failis ei kohta me mitte alati nö. "puhtaid" stringe. Vahest on stringi ära eksinud mõistatuslikud sümbolid: %s, %i, \n jne. Tegemist on C'keelele (programmeerimiskeel, milles meie tõlgitav programm koostatud on) omaste teisendussümbolitega. See tähendab, et teksti väljastamisel asendatakse %s mingi teise stringiga, %i täisarvuga jne.
#, c-format msgid "Could not execute command \"%s\"" msgstr "Ei õnnestu täita korraldust \"%s\""
Nagu aru on saada, saadetakse antud teade juhul, kui mingi korralduse täitmine ebaõnnestus. %s asendatakse korraldusega ja \" asendatakse lihtsalt jutumärkidega. Sellistel juhtudel on rusikareegliks, et selliseid sümboleid ei ole mõtet maha kustutada, vaid tuleb need sobitada oma poolt pakutud tõlkesse.
Sageli tuleb meil tõlkida pikki stringe. Sellistel juhtudel võib stringi jagada ära mitme rea peale. Reavahetusi märgitakse sümboliga \n.
msgstr "" "Keelab akna liigutamise\n" "väljapoole ekraani pinda.\n"
Kui ühel ilusal päeval ilmub programmist uus versioon, on tavaliselt ka tõlkefailid muutunud. Mida siis teha? Tavaliselt on tulemuseks see, et juurde on tekkinud mõningad uued tõlkimata fraasid ja mõned vanad tõlked on kadunud (st. originaalteksti on muudetud ja tõlge enam sellele ei sobi). Et mitte hakata täiesti uut PO faili otsast peale tõlkima, on loodud msgmerge nimeline abiprogramm, mis liidab vanad tõlked uuele PO failile ja kommenteerib välja fraasid, mis on programmist eemaldatud. Selle süntaks on väga lihtne: msgmerge vana.po uus.po.
Töö käigus selgus, et Window Maker'i erineb veidi teistest programmidest. Esiteks selle poolest, et häälestusprogrammi WPrefs jaoks on eraldi tõlkefail. Teiseks on erinev menüüde tõlkimine - menüü koosneb omaette failist (või failidest), mis ei ole PO formaadis.
Raskustest me ei pääse päris kindlasti mitte. Alati ei leia terminitele sobivat eestikeelset vastet, teinekord ei kipu pakutud tõlge ära mahtuma ilma, et programmi väljanägemine ei kannataks. Igale hädale leidub kindlasti ka rohtu. Kindlasti tasub nõu küsida uudisegrupis ee.keel, uurida teiste tehtud tõlkeid ja suhelda teiste tõlkijatega otse. Kui aga ei suudagi tõlgitavast stringist jagu saada, võib selle tõlkimata jätta - programm väljastab sellisel juhul originaalteate. Sageli tekib selline situatsioon veateadete tõlkimisega - programmeerija on ette näinud situatsioone, millest tõlkijal aimugi ei ole.
Kindlasti ei maksaks valminud tõlget ainult endale jätta. Isegi mitte siis, kui te sellega rahul ei ole ja võibolla häbenete. Leidub inimesi, kes teie tõlget heameelega kasutavad ja teile parandusettepanekuid teevad. Nii liigub teie tõlge samm-sammult täiuse poole ja kui see ükskord lõplikult valmis saab, on seda võimalik saata programmi autorile, kes tõlke oma programmi lähtetekstidele lisab.
Lisainfo: