Marek Laane

    bald@starman.ee

Tõlge eesti keelde

# &kbabel;i kasutamine

## Sissejuhatus

Tavaliselt on rakenduse teated ja dokumentatsioon kirja pandud inglise keeles. Teatud tööriistate ja teekide raamistikku kasutades on võimalik aga panna oma lemmikrakendused kõnelema ka muus kui inglise keeles. Rakenduse kohandamist mingile keelele nimetatakse lokaliseerimiseks. Lokaliseerimine hõlmab rakenduse liidese ja dokumentatsiooni tõlkimist keeltesse, mida kasutajad soovivad pruukida, ning mõne maa või piirkonna puhul ka sisendi ja väljundi kohandamist teatud tavadele. &kbabel; on vahend, mis aitab sind lokaliseerimisel, et panna rakendused kõnelema kasutajaga just selles keeles, milles ta seda soovib.

Iga internatsionaliseerimisteadlikuks muudetud rakendus pakub tõlkimiseks välja ühe või enam teadete kataloogi faili. Nende failide laiendiks on `.pot`. POT on lühend, pikemalt Portable Object Template ehk porditava objekti mall.

Tõlkijad asuvad POT-mallis täitma tühikuid, tõlkides iga teate vajalikku keelde. Tõlgitud teksti sisaldav fail on PO ehk Portable Object (eesti keeles porditav objekt) fail.

Kui kõik teated on tõlgitud, saab PO-faili kompileerida masinale arusaadavasse binaarvormingusse, mida nimetatakse MO ehk masinobjekt (Machine Object) failiks. Need, laiendiga `.mo` (või `.gmo`, mis viitab sellele, et neid on töödelnud &GNU; gettext) failid kujutavad endast sisuliselt andmebaasi, mis vähendab aega, mis kulub rakendusel vajaliku tõlgitud teate leidmiseks.

Ilmselt tekib küsimus: kui mul juba on &kbabel;, kas on veel mõtet huvi tunda, milline see PO-fail seesmiselt välja näeb. Vastus on kahtlemata jah! Vahel võib teadete kataloog viga saada ning seda tuleb käsitsi parandada. Enamasti juhtub see nii väga vihatavate CVS-i või SVN-i konfliktide tõttu, mis tekivad siis, kui tõlkeprotsessi koordineeritakse versioonikontrollisüsteemiga (näiteks CVS või Subversion ehk SVN). &kbabel; ei suuda sellistel puhkudel väga palju abiks olla, nii et sellisel juhul tuleb sageli kasutada tekstiredaktorit, mille puhul oleks vajalik veidi tunda ka PO-faili hingeelu. Vaatame siis PO-faili veidi lähemalt.

PO-failid koosnevad teadete paaridest — msgid ja msgstr. Msgid on ingliskeelne tekst, msgstr mingisse muude keelde tõlgitud tekst. Iga msgid-i ja msgstr-iga kaasnev tekst on ümbritsetud C-stiilis topeltjutumärkidega. Näiteks üks &noatun;i PO-failist võetu näeb välja nii: `msgid "Open a Playlist"`

Tühje ridu ja neid, mille alguses seisab `#`, ignoreeritakse. Sümboliga # algavad read kujutavad endast kommentaare ning neist on kasu andmast märku, millises failis teadet kasutatakse või vajaduse korral tõlkijatele mõningate abistavate seletuste pakkumiseks. &kbabel; näitab kõigi teadete puhul selliseid kommentaariridu, kui need on olemas.

Sageli on PO-faili esimene msgid-msgstr paar libakirje (tegelikult PO-faili päis), mis sisaldab mitmesugust infot tõlgitava PO-faili kohta: rakenduse nimi, tõlkimise kuupäev, tõlkija nimi ja nii edasi.

Üks väga kasulik võimalus on niinimetatud mitmuse vormid. Inglise keeles kasutatakse nimisõnadel ainult üht ainsuse ja üht mitmuse vormi, ⪚ 1 file ja 10 files. See võib viia arendajad mõttele, et maailm on imelihtne ning võib luua selliseid teateid nagu Do you want to delete %1 file(s)?, kus `%1` tähistab kustutavate failide arvu. Kuid selline lähenemine on põhimõtteliselt vale. Näiteks slovakikeelses tõlkes tuleb antud juhul kasutada kolme erinevat tõlget. Selliste variantide arv erineb keeleti ja isegi kui see on sarnane (⪚ tšehhi keel kasutab antud juhul samuti kolme varianti), võivad reeglid, millal millist vormi kasutada, olla vägagi erinevad.

&kde; arendajatele ei meeldinud siiski mitmuse vormide teostamine &GNU; gettextis ning nad on juurutanud oma vormingu ja käsitlemisviisi. &GNU; gettexti mitmuse vorme peaks kasutusele võtma &kde; 4.

## Redaktor

&kbabel;i pilt.

&kbabel;
&kbabel;

Kasutajate mugavuseks tarvitab &kbabel; tööriistaribasid, mis kiirendab paljude operatsioonide sooritamist, ning eriti hõivatud kasutajate tarbeks on ka hulganisti kiirklahve. Peaaken on jagatud neljaks osaks.

Vasakul ülal asuv redigeerimiskast on ainult lugemiseks ning sisaldab parajasti avatud PO-faili msgid välja ingliskeelse tekstiga.

Vasakul all asuv redigeerimiskast sisaldab näidatava msgid väljaga paaris käivat msgstr välja ning siin saab ka redigeerida tegelikku tõlget.

Paremal ülal asub kommentaaride aken, kus on näha parajasti redigeeritava kirje kommentaarid.

Seda saab kasutada:

- arusaamiseks, kuidas rakendus käesolevat kirjet kohtleb (c vormingus või tavaline tekst)

- mõnel juhul nägemaks rakenduse arendaja lisatud kommentaare, mis on mõeldud tõlkijate tegevuse hõlbustamiseks — näiteks võivad seal leiduda tehnilised viited (mida väga edukalt kasutatakse projektis LyX)

- teadasaamiseks, millisest failist on käesolev teade pärit, kui soovid näiteks teada anda kirjaveast algupärases ingliskeelses stringis.

Redaktoriaken paremal all on &kbabel;i peaakna kõige keerukam osa. Selle suurust saab muuta eraldusjoont selle ja kommentaariakna (paremal ülal) vahel lohistades. Redaktoriaknal on kaks kaarti — üks sisaldab otsinguinfot, teine kontekstiinfot. Kontekstiinfo kaardil on ka kerimisriba, mis näitab nelja eelmist ja järgmist kirjet — sisuliselt on tegemist tillukese tõmmisega PO-failist. Tõlkides on üsna tavaline, et mingi kirje on seotud nii eelneva kui järgneva kirjega, mistõttu kontekstikaardil saab ka endale selgeks teha, kuidas võiks olla kõige otstarbekam käesolevat kirjet tõlkida. Heaks näiteks on dialoogiliidese tõlge või siis näiteks elemendid koos nendega seonduva teksti ja "mis see on" teadetega.

### &kbabel;i muud omadused

Iga msgid kirje võib olla ühes kolmest olekust:

tõlkimata

  msgstr väljaga ei seostu tõlgitud teksti

kahtlane

  `msgmerge` püüdis leida tõlgitavale kirjele vastet mujalt PO-failist. See ei pruugi olla täpne, mispärast tuleks selline tekst üle vaadata, et tõlge tõepoolest vastaks algupärasele ingliskeelsele tekstile.

tõlgitud

  msgstr sisaldab endas lõplikult tõlgitud msgid-i teksti

Parajasti aktiivse kirje olekut näitab kaks LED-tulukest. Sõltuvalt seadistusest võivad need asuda olekuribal või tõlkestringi redigeerimiskasti kohal. Mõlema värv on muudetav (et see vastaks sinu maitsele või sobiks kokku nägemisomadustega). Kuidas neid seadistusi kohandada, saab täpsemalt teada osast Seadistused.

## Tõlkimisest lähemalt

Nüüd on sul olemas esialgne arusaam, kuidas PO-faili tõlkida. Käesolevas osas järgime tavapärast uue PO-faili tõlkimise rada, kasutades ära &kbabel;i võimsaid omadusi. Eeldame, et oled juba avanud POT-mallifaili ja salvestanud selle PO-failina.

### Liikumine PO-failis

&kbabel; võmaldab failis imelihtsalt liikuda, kasutades selleks ära tõlgete olekut. Tõlkimata ja kahtlasest olekust oli juba juttu. Teade võib olla märgitud ka vigaseks, selle põhjuseks võib olla sobivuse kontroll või sobivuse kontroll käsuga `msgfmt`. Ja mõistagi toetab &kbabel; külastatud teadete ajalugu käskudega Edasi ja Tagasi, mille kasutamine on samane vastavate käskude kasutamisega näiteks &konqueror;is.

Kõik navigeerimiskäsud asuvad menüüs Liikumine.

Page Up | Liigub eelmisele teatele
Page Down | Liigub järgmisele teatele
&Ctrl;Page Up | Liigub eelmisele kahtlasele teatele
&Ctrl;Page Down | Liigub järgmisele kahtlasele teatele
&Alt;Page Up | Liigub eelmisele tõlkimata teatele
&Alt;Page Down | Liigub järgmisele tõlkimata teatele
&Shift;Page Up | Liigub eelmisele vigasele teatele
&Shift;Page Down | Liigub järgmisele vigasele teatele
&Ctrl;&Shift;Page Up | Liigub eelmisele kahtlasele või tõlkimata teatele
&Ctrl;&Shift;Page Down | Liigub järgmisele kahtlasele või tõlkimata teatele

### Tark redigeerimine

Tark redigeerimine tähendab seda, et redaktor aitab tõlget redigeerides arvesse võtta PO-vormingu erinõudeid, parandades vajadusel korrektseks paomärgid.

Samuti on toetatud enam kui üks rea lõpetamise viis. See on üsna kasulik kas või juba selle tõttu, kuidas käsitleb ridade lõppu gettext: see lihtsalt eirab neid. (Sisuliselt tähendab see seda, et kogu msgstr teksti võetakse ühe reana.) Kui soovid lisada tegeliku realõpu, tuleb lisada `\n`. Kuid tõlkijad unustavad pahatihti, et uus rida msgstr-is ei lisa tühikut ridade vahele. See tuleb käsitsi iga rea lõpu lisada, kuid nii kerge on seda unustada. Ning siin tuleb appi tark redigeerimine, mis lisab selle sinu eest.

Järgnev tabel võtab kokku targa redigeerimise võimalused.

TAB | Lisab \t
" | Lisab \"
Enter | Kui viimane märk enne kursorit ei ole tühikumärk, lisatakse üks tühikumärk ja seejärel alustatakse uut rida.
&Ctrl;Enter | Alustab uut rida ilma omapoolse panuseta
&Shift;Enter | Lisab \n ja alustab uut rida

Kui soovid tühimärke näha, võid seadistustedialoogis kaardi Redaktor alamkaardil Välimus sisse lülitada võimaluse Värviline taust ja/või Tühimärke näidatakse punktidena.

### Automaattõlge

Esimese asjana uue tõlke käivitamisel võimaldab &kbabel; automaatselt tekitada tõlked vanemaid tõlkeid kasutades. Vali menüükäsk Tööriistad Toores tõlge ning &kbabel; avab järgmise dialoogi:

Toore tõlkimise dialoog

Selles dialoogis saab määrata, mida tõlkida, samuti valida varasemate tõlgete allika.

Ülal, sektsioonis Tõlgitakse, on kolm märkekasti (Tõlkimata kirjed, Kahtlased kirjed, Tõlgitud kirjed), mille abil saab määrata, millist laadi kirjeid tõlgitakse. Tõlkimata ja kahtlaste kirjete valimine on automaattõlke puhul ilmselt iseenesestmõistetav valik, kuid soovi korral võid nii muuta ka juba tõlgitud kirjeid.

Toorel tõlkimisel kasutatakse niikuinii msgid täpset sobivust. Kuid siin saab kasutusele võtta ka mõningaid lisastrateegiaid, &ie; Kahtlase tõlke lubamine (aeglane) ja Üksikute sõnade tõlkimine. Neid valikuid peab toetama ka kasutatav allikas (vaata selle kohta lähemalt allpool). Pole võimalik üheselt seletada, mis tähendab kahtlane tõlge, kuid selle sisu ei tohiks ometi segaseks jääda. Üksikute sõnade tõlkimine on mõttekas ainult mõne keele puhul. &kbabel; püüab sellisel juhul tõlkida iga msgid-i sõna eraldi ja seab seejärel sõnad või laused msgstris samasse järjekorda.

Toore tõlkimise allikana saab kasutada suvalist olemasolevat sõnaraamatumoodulit. Dialoogi allosas on nimekirjad Ei kasutata ja Kasutatakse. Mooduleid kasutatakse selles järjekorras, nagu nad nimekirja Kasutatakse on lisatud. Kõigepealt võetakse ette esimene moodul, kui sellest midagi ei leita, siis teine ja nii edasi. Noolenuppudega saab mooduleid ühest nimekirjast teise liigutada. Kui soovid moodulite järjekorda muuta, kasuta nuppe Üles ja Alla.

Tavaliselt märgib &kbabel; iga toorelt tõlgitud teate kahtlaseks, sest eeldab, et automaatselt tõlgitud teade vajab tõlkijapoolset kontrolli. Kui sa oled absoluutselt kindel, et automaattõlge tuleb veatu, või vaatad tõlked niikuinii üle, saad eemaldada märke kastist Muudetud kirjed märgitakse kahtlaseks, kuid selle puhul küsitakse sinu käest, kas sa seda tõesti soovid.

Kui oled kõik vajalikud valikud langetanud, vajuta teadete automaattõlke alustamiseks nuppu Käivita. Selle kulgu saab jälgida edenemisribal ning vajaduse korral saab muidugi alati klõpsata ka nuppu Stopp.

### Tõlke kontrollimine

Kõik võivad teha vigu. Seepärast toetab &kbabel; mitmeid tüüpiliste tõlkeprobleemide väljaselgitamise viise. Selliseid kontrolle (mitte küll süntaksi kontrolli) saab põhimõtteliselt läbi viia kahel moel.

Kontrollimist võib rakendada igal tõlgitud teksti muutmise sammul. Seda nimetatakse automaatseks kontrolliks, mille saab sisse lülitada &kbabel;i seadistustedialoogis. Automaatne süntaksi kontroll rakendub igal faili salvestamisel.

Automaatne kontroll võib aeglustada &kbabel;i tööd. Kui sul on aeglasem arvuti, võid automaatse kontrollimise välja lülitada ning kasutada teist meetodit. Suvalise kontrolli saab käivitada menüüst Tööriistad Sobivus. Siis kontrollitakse üle faili kõik teated ning vigased märgitakse ära.

Kontrolli süntaksit

  Käivitab `msgfmt` kontrollimaks PO-faili sobivust &GNU; gettexti silmade läbi. Näitab käsu tulemusi ja märgib ära vigased msgstr kirjed.

Kontrolli argumente

  Ebakorrektsed tõlked võivad kaasa tuua rakenduse krahhi. Kõige ohtlikum osa on selles mõttes argumendid, ⪚ printf-stiilis funktsioonid. See kontroll võrdleb argumentide arvu ja tüüpi msgid ja msgstr kirjetes, mis peavad teineteisele vastama.

Kontrolli kiirklahve

  &GUI; tekst sisaldab tavaliselt kiirklahvimärgiseid, &ie; tähti, mida saab kasutada &GUI; elementidele kiire ligipääsu võimaldamiseks klaviatuuri abil. Neid tähistatakse erisümboliga, ⪚ & &kde; puhul. Reeglina peab ka tõlgitud tekst sisaldama kiirklahvimärgiseid, kui need on olemas juba algupärandis. See kontroll annab teada, kui esineb mingeid probleeme. Kiirklahvimärgise saab määrata seadistustedialoogi kaardil Muud.

Jälgi kontekstiinfot

  Seda läheb tõenäoliselt vaja ainult &kde; tõlkimisel. Mõnegi kirje sisu on üldlevinud sõna, mis erinevas kontekstis tuleb erinevalt tõlkida. &kde;s kirjeldab konteksti msgid alguses seisev erijada märkide `:_` järel. Mõned tõlkijad aga ei pruugi seda tähele panna või isegi mitte teada ning tõlgivad ära ka kontekstiinfo. Selle kontrolliga leitakse taolised ülepingutamised, mis tuleks seejärel eemaldada.

Kontrolli mitmuse vorme

  Kui msgid on määratletud mitmuse vormina, peab tõlge sisaldama korrektse arvu tõlkeid, mida eraldab `\n`. Korrektne arv sõltub tõlkekeelest ning see määratakse kindlaks seadistustedialoogi kaardil Isikuandmed. Praegu on see teostatud ainult &kde; jaoks.

Kontrolli võrdusi

  Võrdused on msgid-i eriline vorming, mis tüüpiliselt on kasutusel `.desktop`-failides. Et tõlge liidetakse neisse failidesse tagasi, peab ka msgstr antud erivormingut kasutama. See tähendab, et tõlge peab algama (kuni esimese `=` esinemiseni) samamoodi algupärase teatega, ⪚ `Name=`.

### Tõlke õigekirja kontrollimine

On iseenesestmõistetav, et enne tõlke kasutamist tuleb see üle vaadata ja kontrollida. Sel moel saab leida näpuvigu või ka mõningaid tõsisemaid puudujääke. &kbabel; kasutab &kde; tavapärast teeki õigekirja kontrollimiseks, selle standardseadistuse leiab projekti seadistustedialoogis. Õigekirja kontrollimise võimalused ise asuvad alammenüüs Tööriistad Õigekirja kontroll. Õigekirja saab kontrollida mitmel moel:

Õigekirja kontroll...

  See on mõeldud dialoogi väljakutsumiseks, kus saab valida õigekirja kontrollimise viisi ning määrata vaikeviisi, mida hiljem saab välja kutsuda kiirklahviga &Ctrl;I .

Kontrolli kõike...

  Kontrollib kogu faili õigekirja.

Kontrolli alates kursori asukohast...

  Käivitab õigekirja kontrollimise alates käesolevast teatest ja konrollib edasi faili lõpu poole.

Kontrolli aktiivset...

  Kontrollib ainult aktiivse teate õigekirja.

Kontrolli valitud teksti...

  Kui msgstr redaktoriaknas on mingi tekst valitud, saab selle võimalusega ainult selle õigekirja kontrollida.

### &XML;-i, HTML-i jne. tõlkimine

Märkekeelt kasutatakse &GUI; puhul üha enam. &kde; projekt tarvitab PO-faile ka DocBook dokumentatsioonifailide (mis on samuti märkekeel) tõlkimisel. &kbabel; toetab mitmeti sellist trendi.

Siin kirjeldame vaid funktsioone, mis on seotud märkimiseks kasutatavate siltidega. Teine märkekeele kasutamisel tekkiv probleem on seotud pikemate tekstide tõlkimisega. Sellega tegeleb võrdlemine, mida tutvustab lähemalt järgmine osa.

&kbabel;i praegune versioon suudab tuvastada, milliseid silte kasutab msgid, ja pakkuda neile kiiret juurdepääsu järgmiste menüüs Redigeerimine olevate käskudega:

Lisa järgmine silt

  Lisab järgmises msgid-is leitud sildi tõlkesse. &kbabel; tuvastab lisatava sildi siltide arvu alates tõlke algusest kokku lugedes.

Redigeerimine Lisa silt

  Selles alammenüüs on kirjas kõik märkekeele sildid, mida leiti algupärases ingliskeelses stringis. Neid mõne valimine lisab selle tõlgitud teksti kursori asukohta.

### Erinevuse näitamine

Mainisime juba, et mitmed kasutajasõbralikkusele rõhku panevad rakendused sisaldavad hulgaliselt pikemaid kirjeldavaid tekste, sealhulgas märkekeeles. Kui arendaja muudab osaliselt teksti, säilitab &GNU; gettext parimal juhul vana tõlke ja märgib selle kahtlaseks, halvemal juhul aga läheb - sõltuvalt tekstis tehtud muutuste ulatusest - kogu tõlge kaotsi. Sellest pole midagi, kui msgid on lühike, sest siis saab muutusi kiiresti tuvastada. Pikemate tekstide korral võib aga muutuste leidmine olla üsna vaevarikas (näiteks võib olla korrektor muutnud vaid artiklit või lisanud kirjavahemärgi).

Sinu abistamiseks võib &kbabel; otsida üles algupärase msgid-i ja näidata erinevust. Muutusi näidatakse graafiliselt algse stringi redaktoriaknas. Täpsemalt saab seda määrata &kbabel;i seadistustedialoogis. Menüükäsk Tööriistad Võrdlemine Näita võrdlust näitab leitud erinevusi. Käesoleva teksti nägemiseks ilma algupärase tekstita kasuta menüükäsku Tööriistad Võrdlemine Näita algset teksti .

Automaatset erinevuste otsimist saab lülitada menüükäsuga Tööriistad Võrdlemine Võrdlemise režiim. Kui see on sisse lülitatud, hakatakse erinevusi otsima kohe, kui suundud uuele teatele.

Nagu ikka, võid kasutada teksti varasema versiooni leidmiseks erinevaid allikaid, mida saab määrata &kbabel;i seadistustedialoogis:

Tõlgete andmebaas

  Erinevuste otsimiseks võib kasutada tõlgete andmebaasi. Me soovitame tungivalt lülitada sisse uute tõlgete automaatse lisamise tõlgete andmebaasi, mida saab teha tõlgete andmebaasi seadistustedialoogis. Selle režiimi saab sisse lülitada võimalusega Kasutatakse tõlgete andmebaasi kirjeid.

Vanade failide puu

  Seda saab kasutada ainult siis, kui tõlgete andmebaasi kasutamine on välja lülitatud. Määrates Diff-failide kataloogi, saab &kbabel;is määrata, millist faili erinevuste leidmiseks kasutada. Pruugitakse avatud failide suhtelist otsinguteed, mida kasutatakse siin määratud kataloogis. Kui vastav fail on olemas, kasutatakse seda. Selle meetodi kasutamiseks peaks enne iga uuendamist tegema vanadest failidest varukoopia.

Käsitsi valitud fail

  Kui eelmised võimalused päris hästi ei toimi, võid alati valida erinevuste leidmiseks vali ka käsitsi, kasutades menüükäsku Tööriistad Võrdlemine Ava fail võrdluseks.

Erinevuse otsing ei pruugi alati olla täpne, sest PO-fail ei sisalda mingit viidet algsele teatele.

## Mitmuse vormid

Kuivõrd mitmuse vormide teema on üpris keerukas, pühendame nende toetusele &kbabel;is omaette osa.

See osa käsitleb &kde; mitmuse vorme (veel täpsemalt &kde; 3 omi). Alates versioonis 1.11 (KDE 3.5) oskab &kbabel; lugeda, redigeerida ja salvestada ka &GNU; gettexti mitmuse vorme.

Iga keele puhul, millesse &kde; tõlgitakse, on vajalik määrata mitmuse vormide korrektne arv. Seda saab teha vastava kirjega failis `tdelibs.po`. Arv määratakse keele nime valides, mis kasutab õige mitmuse vormide arvu leidmiseks sama numbrit ja reegleid. Võimalike väärtuste uusima nimekirja leiab tdelibs lähtekoodis failis `tdecore/tdelocale.cpp`.

&GNU; gettext lubab määrata mitmuse vormide arvu ja tüübi teatud valemiga ning kasutada seda valemit iseseisvalt igas PO-failis eraldi. &kde; määrab mitmuse vormide arvu ja tüübi kindlaks ainult ühekordselt kogu KDE jaoks.

&kde; mitmuse vormid on tähistatud kommentaariga `_n:`, mis sisaldab argumenti `%n`. Seda argumenti kasutatakse siis teates endas ning see kontrollib, millist mitmuse vormi tuleks sinu keeles vastavalt keele reeglitele kasutada.

Mitmuse vormide tõlkimisel tuleb kasutada spetsiaalset vormingut. Selles peab leiduma korrektne arv tõlkeid (üks iga vormi kohta), mida eraldab rea lõpus `\n`, aga sealjuures ilma originaalis leiduva tähiseta `_n:`. Toome näiteks kirje _n: Selected 1 file\nSelected %n files tõlke slovaki keelde:

    Vybraný %n súbor\n
    Vybrané %n súbory\n
    Vybraných %n súborov

Kontrollimaks, kas tõlge sisaldab korrektse arvu mitmuse vorme, kasuta menüükäsku Tööriistad Sobivus Kontrolli mitmuse vorme (ainult KDE).