Katsaus Fluent-lokalisointijärjestelmään

  • 5 min lukuaika

Fluent on lokalisointiparadigma, joka mahdollistaa luonnollisen kielen ilmaisuvoiman. Käännöstekstin ilmaisu ei rajoitu lähdetekstin kielioppiin. Fluent on monipuolinen vaihtoehto yleisesti käytetylle GNU gettextille. Yksi suuri ero on se, että siinä missä gettextissä usein käytetään englanninkieliseen lähdetekstiin pohjautuvaa viestitunnistetta, Fluent käyttää kehittäjän määrittämää avainta. Tämä on merkittävä ero lähestymistavassa käännökseen.

Fluent mahdollistaa gettextiä monipuolisemmin viestin lokalisoinnin eri kulttuureihin, ympäristöihin ja tilanteisiin sopivaksi. Se antaa uudenlaisia mahdollisuuksia niin kehittäjälle kuin kääntäjälle viestien määrittelyssä. Sisäänrakennetut funktiot mahdollistavat lukujen sekä päiväyksen ja ajan muotoilun maa-asetuskohtaisesti. Kehittäjille Fluent mahdollistaa lokalisoinnin vaikeuksien jättämisen kääntäjille, esimerkiksi kielikohtaisten monikkomuotojen oikeaoppisen määrityksen.

Fluent-tiedostomuoto ja vertailu GNU gettextiin

Fluent-tiedostot ovat raakatekstiä toisin kuin GNU gettextin binäärimuotoon käännetyt .mo-päätteiset tiedostot. Fluent-tiedostojen pääte on .ftl (Fluent Translation List). Fluent-tiedoston voi avata tekstinkäsittelyohjelmalla, ja viestit näkyvät lukijalle selkokielellä.

Gettextissä käännöstyö jakautuu eri tiedostoihin: .pot (Portable Object Template) on kehittäjän tuottaman käännösmallipohjan tiedostomuoto, .po (Portable Object) on selkokielisen, kääntäjien käsittelemän käännöstiedoston tiedostomuoto, ja .mo (Machine Object) on ohjelmiston käyttämä binäärimuotoinen (ei-selkokielinen) tiedostomuoto. Gettextin kanssa tarvitaan siis kolme tiedostoa, Fluentin kanssa vain yksi.

Fluent-projektin wikissä on kattava vertailu GNU gettextiin, ja se kannattaa lukea, erityisesti jos gettext on entuudestaan tuttu.

Mitkä projektit käyttävät Fluentia?

Fluentin kehittäneen Mozillan Firefox-selain lienee tunnetuin Fluentia käyttävä ohjelmisto. Linux-työpöytien keskuudessa uusi tulokas COSMIC käyttää Fluentia, kun taas esimerkiksi GNOME ja KDE käyttävät gettextiä.

Onko Fluent-tiedostojen käännökseen tarkoitettuja muokkaimia olemassa?

Fluent-käännösjärjestelmän versio 1.0 on julkaistu vuonna 2019, ja se on varsin nuori GNU gettextiin verrattuna. Fluent-tiedostojen käsittelyyn ei tiedettävästi ole erillistä työpöytäsovellusta, kuten esimerkiksi gettext-tiedostojen käsittelyyn on useampi erilainen muokkain, esimerkiksi Gtranslator, Lokalize ja Poedit. Fluent-tiedostoja voi kuitenkin muokata millä tahansa tekstinkäsittelyyn soveltuvalla ohjelmalla.

Verkkopohjaisista käännösalustoista Fluentia tukevat muun muassa Mozillan Pontoon ja Weblate.

Fluentin ominaisuuksista

Valitsimet

Valitsimet ovat Fluentin keskeinen ominaisuus, jolla viesti voidaan mukauttaa muuttujan arvon perusteella. Tyypillisin käyttökohde on monikkomuodot:

unread-messages = { $count ->
    [one] Sinulla on yksi lukematon viesti.
   *[other] Sinulla on { $count } lukematonta viestiä.
}

Ohjelma välittää vain lukuarvon - se, miten eri lukumäärät ilmaistaan kohdekielellä, jää kokonaan kääntäjän vastuulle. Tämä on merkittävä ero gettextiin, jossa monikkologiikka on usein kovakoodattuna ohjelman lähdekoodiin.

Attribuutit

Yhdelle käyttöliittymäelementille voi olla lokalisoitava useampi ominaisuus eli attribuutti, esimerkiksi painikkeen näkyvä teksti ja ruudunlukijalle tarkoitettu aria-selite. Fluentissa ne voi sitoa samaan viestiin pistein merkittävinä attribuutteina:

login-button = Kirjaudu sisään
    .aria-label = Kirjaudu sisään käyttäjätunnuksella ja salasanalla
    .tooltip = Kirjaudu palveluun käyttäjätunnuksellasi
    .accesskey = K

Kääntäjä näkee kaikki elementin lokalisoitavat osat kerralla, eikä joudu etsiä niitä eri kohdista käännöstiedostoa tai useammasta eri tiedostosta.

Funktiot

Fluentissa on funktioita, joita voi käyttää viestien sisällä muotoiluun ja valitsimiin. Fluentissa on omat sisäänrakennetut funktiot, ja lisäksi kehittäjät voivat määrittää omia funktioita kääntäjien avuksi, kuten seuraavaksi esiteltävä Mozillan kehittämä Platform-funktio. Fluentin funktionaalisuutta on siis mahdollista laajentaa ilman, että syntaksiin tarvitsee koskea.

Tämä esimerkki havainnollistaa mukautetun funktion käyttöä ja hyötyä. Englanninkielisessä lähdetiedostossa viesti on yksinkertainen .label = File. Suomenkielisen kääntäjän tulisi voida lokalisoida viesti macOS-käyttöjärjestelmälle käyttäen termiä "Arkisto" Applen käytäntöjen mukaisesti, mutta näennäisesti tälle ei ole tukea englanninkielisessä lähdeviestissä:

 menu-file =
    .label = Tiedosto
    .accesskey = T

Fluent mahdollistaa lokalisointihaasteen kiertämisen siten, että muuttujan arvon lisäksi valitsin voi käyttää funktioita, tässä tapauksessa Mozillan omaa Platform-funktiota, joka palauttaa tiedon käyttöjärjestelmästä. Tämä mahdollistaa käyttöjärjestelmäkohtaisen lokalisoinnin ilman muutoksia lähdekoodiin. Näin ongelman voisi kiertää kääntämällä viestin seuraavasti:

menu-file =
    .label = { PLATFORM() ->
            [macos] Arkisto
           *[other] Tiedosto
        }
    .accesskey = T

Tämä on Fluentin asymmetrian ydin: käännös voi olla monimutkaisempi kuin lähde, ja se on kääntäjän hallittavissa.

Termit

Termit (tunniste alkaa merkillä "-") ovat uudelleenkäytettäviä käännösyksiköitä, joita ei koskaan näytetä suoraan käyttäjälle, mutta joihin muut viestit voivat viitata:

-brand-name = Ohjelma
about = Tietoja { -brand-name }sta
settings = { -brand-name }n asetukset

Termien viittaukset toimivat hyvin kielissä, joissa sanat eivät taivu sijamuodon mukaan. Suomen kielessä sijamuodot ovat tärkeitä, sillä väärä sijamuoto saattaa tehdä viestistä kieliopillisesti huvittavan tai pahimmillaan muuttaa viestin merkityksen oleellisesti.

Viittaukset toisiin viesteihin

Viittaukset toisiin viesteihin ovat mahdollisia. Otetaan seuraavanlainen esimerkki. Alkuperäinen viesti on alla, ja viestin "Trash" käännös on perusmuodossa "Roskakori", joten miten alla olevan viestin saisi taivutettua oikeaoppisesti ja siten, ettei tulos olisi epätoivottu, eli sisältäisi isoa kirjainta keskellä lausetta?

trash = Trash
deleted-items = Deleted { $items } { $items ->
    [one] item
   *[other] items
} from { trash }

Tässä esimerkissä luontevinta on korvata viittaus toiseen, perusmuodon sisältävään viestiin käyttäen taivutettua sanaa, eli:

trash = Roskakori
deleted-items = Poistettu { $items } { $items ->
    [one] kohde
   *[other] kohdetta
} roskakorista

Mitä heikkouksia Fluentissa on?

Fluent on nuori järjestelmä verrattuna GNU gettextiin, ja ekosysteemi on vielä kehittymässä. Alla on muutamia käytännön haasteita, joita Fluentin käyttöönotto voi tuoda mukanaan.

Syntaksin oppimiskynnys kääntäjille. Yksinkertaiset viestit ovat helposti ymmärrettävissä, mutta valitsimet, termit ja attribuutit vaativat perehtymistä Fluentiin. Gettextin .po-tiedosto on kääntäjälle Fluentia helpompi lähestyä ilman mitään ennakkotietoja. Fluentissa kääntäjä tarvitsee ainakin perustason ymmärryksen syntaksista välttääkseen virheitä monimutkaisemmissa viesteissä. Esimerkiksi Mozillan Pontoon-käännösalustalla Fluent-muotoisten viestien syntaksi piilotetaan kääntäjiltä käyttöliittymässä oletusarvoisesti.

Työpöytäeditorien puute. Gettext-tiedostojen käsittelyyn on useita työpöytäsovelluksia. Fluentille vastaavanlaista työpöytäsovellusta ei ole. Käännöstyö tapahtuu joko suoraan tekstimuokkaimessa tai verkkopohjaisilla käännösalustoilla. Tämä saattaa nostaa kynnystä kääntäjille, jotka ovat tottuneet erikoistuneisiin käännöstyökaluihin ja haluavat tehdä käännöstyötä paikallisesti omalla koneellaan.

Käännöstiedostot voivat olla upotettuna binääriin. Monet Rust-pohjaiset ohjelmat käyttävät Fluentia, ja niiden käännöstiedostot ovat osa lopullista suoritettavaa binääritiedostoa, mikä estää kyseisten käännöstiedostojen ulkoisen tarkastelun. Tämän ongelman kiertämiseksi ohjelma voisi mahdollistaa valitsimen, millä voisi käskeä käyttää ulkoista käännöstiedostoa sisäänrakennetun sijaan. Todellisuudessa tuki tällaiselle on lähes olematonta eri projekteissa. Tämä ei varsinaisesti ole Fluentin aiheuttama ongelma, vaan johtuu Rustin suunnittelussa tehdyistä valinnoista, ja siitä miten include_str-makroa kutsutaan - näiden seurauksena käännöstiedostot ovat osa Rust-ohjelman binääriä.

Fluent ja ICU MessageFormat

ICU (International Components for Unicode) MessageFormat on toinen laajasti käytetty lokalisointijärjestelmä, joka on tuttu erityisesti Java-maailmasta. Fluent ja MessageFormat ratkaisevat saman ongelman eri tavoin: molemmissa kääntäjä voi määritellä kielikohtaisen logiikan (kuten monikkomuodot) itse, mutta Fluentin syntaksi on suunniteltu luettavammaksi ja helpommin käsin muokattavaksi.

Sittemmin Unicode-konsortio on kehittänyt MessageFormat 2.0:n (MF2), joka pyrkii standardoimaan lokalisointiformaatin laajemmin. Fluentin kehittäjät ovat olleet mukana MF2:n suunnittelussa, ja MF2:n JavaScript-kirjasto tarjoaa myös yhteensopivuustyökalut Fluent-resurssien käyttöön. MF2 on siis tavallaan standardointiorganisaation vastaus samaan ongelmaan, johon Fluent tarttui Mozillan lähtökohdista.

Lue lisää: