Kielimerkkaus:

Ongelmia kielimerkkauksen käytössä

Kielimerkkauksen käyttöön liittyy monenlaisia ongelmia. Seuraavassa tarkastellaan niitä melko yksityiskohtaisesti. Tässä on kuitenkin hyvä muistaa, että vaikka yksityiskohdissa joudutaankin moniin vaikeuksiin, kielimerkkaus on käytännössä varsin helppo tehdä. Sitä ei ole pakko viedä yksittäisten sanojen tasolle, jos ongelmat siellä tuntuvat liian suurilta.

Sisältö:

Miten yksityiskohtaisesti eri osien kieli kannattaa merkata?

Muutoin yksikielisessä tekstissä voi esiintyä lyhyitä tai pitkiä lainauksia muilla kielillä, vieraskielisiä nimiä tai vieraista kielistä peräisin olevia ns. sitaattilainoja. Miten yksityiskohtaisesti dokumentin eri osien kieli kannattaa merkata?

Ensimmäisenä varmaankin tulee mieleen se käytännön seikka, että yksityiskohtainen merkkaaminen voi olla varsin työlästä. Tämän lisäksi on useita jäljempänä kuvattavia seikkoja, joiden takia merkkausta ei aina kannata viedä ihan sanojen ja jopa sananosien tasolle. Nyrkkisäännöksi esitänkin:

Merkkaa koko dokumentin kieli ja muunkielisten lainausten, kirjojen nimien ja yleensä pitkähköjen muunkielisten tekstien kieli. Lisäksi voit merkata yksittäisten sanojenkin kielen, jos on selvää, että ne on syytä tulkita kaikin tavoin vieraskielisiksi. Epäselvissä tapauksissa on parempi jättää kielimerkkaus pois: when in doubt, leave it out.

Mitä kieltä?

Usein on tulkinnanvaraista, mitä kieltä jokin ilmaisu on. Selvimmän esimerkin muodostavat sanat, jotka on lainattu kielestä toiseen ja jotka ovat osittain mukautuneet lainaajakieleen. Onko esimerkiksi ranskasta englantiin lainautunut sana "fiancé" ranskaa vai englantia? Se kirjoitetaan täysin ranskan mukaisesti; ääntämys taas jäljittelee ranskan ääntämystä mutta ei kokonaan vastaa sitä. Suomen kielessäkin tällaista esiintyy erittäin paljon. Vaikka usein sanotaan, että sitaattilainat tulisi kirjoittaa ja ääntää täysin alkukielen mukaan, niin käytännössä esiintyy varsin paljon eriasteisia mukautumia, ja nykyisin ne kielenoppaissakin jo usein tunnustetaan.

Miten pitäisi merkata esimerkiksi sana "Windows", kun se esiintyy käyttöjärjestelmän nimenä suomenkielisessä tekstissä? Alkujaan sana on tietysti englantia, mutta suomen kielessä se ei yleensä äänny täysin englannin mukaisesti, esimerkiksi loppukonsonantti ei äänny soinnillisena. Toisaalta sana ei ole kirjoitusasultaan mukautunut suomeen. Oikeastaan tarvittaisiin tapa merkata, että sana on "siirtymässä" kielestä toiseen.

Voidaan jopa kysyä, onko "Helsinki" suomea vai englantia, kun se esiintyy englanninkielisessä tekstissä. Englannissahan se tavallisimmin ääntynee niin, että paino on toisella tavulla. Missä vaiheessa tällainen "väärä" ääntämys muuttuu osaksi kielen todellisuutta, joka on syytä tunnustaa? Esimerkiksi suomen sana "sauna" ääntyy englannissa tavallisesti niin, että "au" ääntyy pitkänä vokaalina "oo" ja loppu-a epämääräisenä vokaalina. Eikö tällöin voi sanoa, että sana on lainautunut englantiin ja muuttunut osaksi englannin kieltä? Tilanne on toinen, jos englanninkielisessä tekstissä esiintyy sellaisia suomen sanoja, jotka eivät ole mitenkään yleisesti tunnettuja. Ne on syytä merkata suomenkielisiksi.

Erityisiä ongelmia voi periaatteellisesti ehkä oikea kielimerkkaus aiheuttaa silloin, kun teksti on translitteroitua tai transkriboitua eli se on tavalla tai toisella siirretty toiseen kirjoitusjärjestelmään, esimerkiksi japanin sana kirjoitettu latinalaisin kirjaimin, esimerkiksi "kimono". Käsittelemme näitä ongelmia jäljempänä kohdassa Kirjoitusjärjestelmien vaikutus.

Käytännöllinen ratkaisu on ehkä se, että rajatapauksessa tulkitaan sanan olevan sitä kieltä, jota ympäröivä teksti on. Näin vältetään esimerkiksi puhesynteesissä häiritsevät lainanantajakielen mukaiset ääntämykset sanoissa, joissa sitä ei ole tapana käyttää. Lisäksi tämä on helppo ratkaisu, koska se vähentää merkkauksen määrää: sanan kieltä ei erikseen merkata vaan se määräytyy ympäröivän elementin kielestä. Puhesynteesissä ja yleensä puheessa pätee, että vieraista kielistä peräisin olevien sanojen "liian tarkka" ääntäminen häiritsee, kun ne esiintyvät tekstin seassa. Sen sijaan erillisissä lainauksissa tilanne on toinen; niissä mahdollisimman hyvä alkukielen mukainen ääntämys aiheellisesti korostaa eroa oman tekstin ja sitaatin välillä.

Sekakielisyyksiä syntyy myös tietämättömyyden ja tahallisen vääntelyn kautta. Miten pitäisi tulkita esimerkiksi hevosennimi "Kiikku's Vera", joka luetaan suomalaisittain "Kiikkus Veera" mutta jossa on selvästikin tarkoitettu käyttää englannin genetiiviä?

Myös eläinten, kasvien ja muiden eliöiden ja eliöryhmien tieteelliset ("latinalaiset") nimet ovat ongelmallisia. Ne noudattavat pääosin latinan kielen kirjoitussääntöjä ja muutamia latinan kielioppisääntöjäkin, ja niiden ääntämys on lähinnä latinan mukainen, mutta niihin sisältyy runsaasti kreikan sanoja latinisoidussa asussa ja muistakin kielistä otettuja sanoja. Kaiken kaikkiaan lienee parasta merkata kieleksi latina mutta tietoisena siitä, että tästä voi seurata ongelmia. Esimerkki:
<i lang="la">Anas platyrhynchos</i>

Entä lyhenteen kieli? Mitä kieltä on "IPA" tai "USA"? Ne luetaan suomessa yleensä joko käyttäen suomenkielisiä kirjainten nimiä (ii pee aa, uu es aa) taikka ikäänkuin ne olisivat suomen sanoja (ipa, usa). Käytännöllinen menettelytapa on, että niiden tulkitaan olevan sitä kieltä, jossa niitä kulloinkin käytetään, paitsi jos ne on tarkoitus todella lukea alkukielen mukaisesti. Tämä siis merkitsee, että mitään erillistä merkkausta ei käytetä. Poikkeuksena olisi esimerkiksi lyhenne BBC, koska se on tapana suomessa lukea lausumalla kirjainten englanninkieliset nimet, siis suunnilleen "bii bii sii". Silloin sopiva merkkaus olisi
<abbr lang="en">BBC</abbr>
Periaatteessa eräiden suositusten mukaan pitäisi ilmoittaa title-määritteellä lyhenteen "lavennus" ainakin, kun lyhenne esiintyy ensi kerran, siis esimerkiksi
<abbr lang="en" title="British Broadcasting Company">BBC</abbr>
Tähän liittyy kuitenkin monia ongelmia, joista yksi on se, että puhesyntetisaattori saattaisi tulkita tilanteen niin, että sen pitää lukea lyhenne "avattuna".

Ihmisten kielet ja tekniset notaatiot

Sanaa "kieli" käytetään yleisesti myös puhuttaessa erilaisista merkintätavoista kuten "matematiikan kielestä" tai "ohjelmointikielistä" tai "merkkauskielistä". Tämä aiheuttaa paljon sekaannuksia, kuten olen kuvannut dokumentissa Datatekniikan "kielet" - ehdotus käsitteiden selvennykseksi ja luokitteluksi.

Tässä tarkastellun kielimerkkauksen yhteydessä on kyse aina "oikeista" kielistä, sellaisista, joita ihmiset käyttävät puheessa ja kirjoituksessa, tai ainakin niitä vastaavista kielistä kuten kuvitteellisista kielistä, joita käytetään ihmiskielten tapaan, vaikkapa Keski-Maan haltiakieli tai klingonien kieli. Kyse ei välttämättä ole elävästä kielestä vaan myös esimerkiksi muinaisegypti, jonka suoranaisesti tunnemme vain kirjoitettuna, on ilman muuta kieli. Myös niin sanotut keinotekoiset kielet eli suunnitelmakielet (artificial languages, constructed languages) kuten volapük tai esperanto kuuluvat ilman muuta joukkoon, ainakin jos ne on suunniteltu samanlaiseen käyttöön kuin luonnolliset kielet. Tosin suunnitelmakieliä on tehty hyvin monenlaisia, ja jotkin niistä voitaisiin ehkä luokitella koodijärjestelmän ja ihmisten kieleksi tarkoitetun rakennelman välimaastoon.

Mutta ulkopuolelle siis jäävät monet "kieliksi" kutsutut merkintätavat, kuten esimerkiksi merkkauskieli HTML, tyylisääntökieli CSS tai ohjelmointikieli C. Kielikoodijärjestelmien määrittelyissä usein erikseen sanotaan, että ne on tarkoitettu ihmisten kieliä (human languages), ei tietokonekieliä varten. Miten sitten olisi meneteltävä, jos dokumentissa esitetään sellaisilla "kielillä" kirjoitettuja ilmaisuja eli jos vaikkapa haluaisimme puhua CSS:n font-family-ominaisuudesta nimeltä? Missään tapauksessa ei pidä ruveta antamaan vaikkapa CSS:lle kielikoodia ja käyttämään sitä. Eri asia on, että voisi olla hyvä, jos käytetyn koodin, merkintätavan, voisi ilmaista merkkauksella. Mutta tämä on pidettävä erossa kielimerkkauksesta.

Epäselvää on, tulisiko "tietokonekielten" ilmaisujen yhteydessä aina käyttää code-merkkausta HTML:ssä. Usein kyseistä merkkausta käytetään ulkoasun takia, tasalevyisen fontin aikaansaamiseksi. Mutta voisiko sillä olla myös looginen merkitys? Mielestäni voisi, koska code-elementin määrittely sanoo: "Designates a fragment of computer code." Esimerkiksi kielenkäännösohjelma (tai ihmiskääntäjä) voisi siitä päätellä, että ilmaisu on käännöksessä jätettävä sellaisekseen, vaikka se näyttäisi osittain olevan englantia. Valitettavasti nykyiset käännösohjelmat eivät näytä niin tekevän.

Mutta olisiko mainitunlaisten "kielten" yhteydessä kuitenkin käytettävä kielimerkkausta silloin, kun niissä esiintyvät merkkijonot on otettu jostain luonnollisesta kielestä? On selvää, että esimerkiksi merkkijonoa "function" ei pidä kääntää, kun se viittaa ohjelmointikielen varattuun sanaan. Mutta toisaalta se pitäisi lausua englannin mukaan, ainakin suunnilleen. Tämä on hankala kysymys etenkin, jos dokumentissa esiintyy paljon koodia. Puhe-esityksen kannalta ongelmana on, että esimerkiksi HTML-koodissa tai lähdekielisessä tietokoneohjelmassa on sekaisin englannista otettuja varattuja sanoja, välimerkkejä ja eri kielistä otettuja sanoja tai sanantapaisia ilmaisuja. Miten esimerkiksi seuraava pitäisi lukea ääneen?
<table class="tilasto">

Esimerkki osoittaa pieneltä osaltaan, että on mielekästä liittää koodinpätkään kielimäärite, joka on loogisesti riippumaton siitä, mikä on käytetty koodijärjestelmä, kuten tietokonekieli. Esimerkissämme merkkijono tilasto on yhtäältä osa HTML-merkkausta, toisaalta suomen kieltä siinä mielessä, että ääneen luettaessa se pitäisi lausua suomen sääntöken mukaan.

Ehkäpä voimme ainakin toistaiseksi lähteä siitä, että jos esimerkiksi HTML-, CSS- tai C-koodia kuunnellaan, kuulija ymmärtää englannista peräisin otetut sanat lausuttuina sen kielen mukaan, jolla dokumentti muutoin on kirjoitettu. Lausutaanhan sellaiset sanat muutenkin usein "kirjaimellisesti", esimerkiksi suomen mukaan luettuina. Se, että koodin eri osille kirjoitettaisiin erikseen kielimerkkaus, olisi huomattavan työlästä eikä tuottaisi mitään selvää käytännön etua.

"Tietokonekieliin" otetut englannin sanat on usein typistetty, esimerkiksi "lang", tai sanoja on sekä katkottu että yhdistelty, esimerkiksi "charset". Onpa niitä myös kirjoitettu väärin. Esimerkiksi HTTP-protokollan erään otsakkeen nimi on "Referer", koska joku alun perin kirjoitti englannin sanan "referrer" väärin. Kun se on kerran otettu protokollaan, sitä ei enää haluta muuttaa. Monia virheellisiä kirjoitusasuja sisältyy myös eliöiden tieteellisiin nimiin. Valitettavasti ei kielimerkkaukseen sisälly mitään tapaa ilmoittaa, että jokin sana on tiettyä kieltä mutta väärin kirjoitettu.

Tavallaan kielten ja notaatioiden välimaastoon kuuluvat sellaiset teksti-ilmaisut kuin SI-mittajärjestelmän mukaiset suureiden arvojen merkinnät, vaikkapa "40 km/h". Ne ovat osa yleismaailmallista järjestelmää ja ne tulisi aina kirjoittaa samalla tavoin, ympäröivästä kielestä riippumatta. Sen sijaan ne luetaan ympäröivän kielen mukaan, esimerkiksi "neljäkymmentä kilometriä tunnissa" tai "fourty kilometers per hour". Jälkimmäinen hoituu sillä, että ilmaisulle itselleen ei ole kielimerkkausta vaan sen kieli määräytyy tekstin rakenteen ylemmällä tasolla olevasta merkkauksesta. Sen sijaan kirjoitusasun osoittaminen kieliriippumattomaksi, niin että se esimerkiksi käännettäessä tulee pitää samana, vaatisi periaatteessa erityisen merkkauksen; käytännössä ei sopivaa merkkausta ole nykyisin käytettävissä.

Miten ilmaistaan, ettei kieltä voida ilmaista?

Edellä mainittiin ISO 639:n kuvauksessa erikoiskoodit mul ja und. Niiden määritelmät standardissa ovat:

The language code mul (for multiple languages) should be applied when several languages are used and it is not practical to specify all the appropriate language codes.

The language code und (for undetermined) is provided for those situations in which a language or languages must be indicated but the language cannot be identified.

Koodia und on voisi ajatella käytettävän useissa tilanteissa, jotka ovat itse asiassa varsin erilaisia: kieltä ei tunneta; kieli on tunnettu mutta sille ei ole koodia ISO 639-2:ssa; tekstille on ilmoitettava kieli, mutta se ei ole mitään ihmisten kieltä vaan esimerkiksi tietokonekoodia tai salasana. Toisaalta ISO 639 FAQ mainitsee mahdollisuuden käyttää kolmea välilyöntiä, jos "a language code is not applicable because there is no sung, spoken, or written textual content".

Yleisesti kielikoodijärjestelmissä on varsin epätyydyttävästi ratkaistu se, miten menetellään, kun mitään kielikoodia ei voi käyttää.

Mahdollisia tapauksia on useita erilaisia:

Kuitenkin Internetin kielikoodikäytäntöjen perustan määrittelevä RFC 3066 sanoo (kohdassa 2.3), että und-koodia ei saa käyttää, ellei protokolla pakota ilmaisemaan kielikoodin silloinkin, kun kieli on tuntematon:

You SHOULD NOT use the UND (Undetermined) code unless the protocol in use forces you to give a value for the language tag, even if the language is unknown. Omitting the tag is preferred.

Tämä merkitsee, että esimerkiksi HTML:ssä ei oikeastaan pitäisi käyttää määritettä lang="und" koskaan, koska lang-määrite ei ole pakollinen! Mutta tällöin jäisi ilmaisematta se olennainen ero, mikä on niiden tilanteiden välillä, että kieltä ei ole viitsitty yrittääkään kertoa, ja että kielimerkkausta käytetään järjestelmällisesti ja osa tekstistä on tuntematonta kieltä.

Koodia mul ei liene koskaan syytä käyttää kielimerkkauksessa eikä juuri muulloinkaan. Kielimerkkauksessahan voidaan ylimmän tason elementti merkata pääkielen mukaan ja alimman tason elementit kukin oman kielensä mukaan, tarvittaessa lisäten merkkauselementtejä vain tätä varten. Lisäksi edellä mainittu RFC௺ erikseen sanoo, että mul-koodia ei tulisi käyttää silloin, kun protokolla mahdollistaa useiden kielten ilmaisemisen, kuten Content-Language-otsakkeessa (josta kerrotaan kielivalintamekanismin kuvauksessa).

Kirjoitusjärjestelmien vaikutus

Mikä on kirjoitusjärjestelmä?

Kirjoitusjärjestelmä, englanniksi script, tarkoittaa ihmiskielen kirjoittamisen perusmenetelmää. Se voi olla aakkoskirjoitusta, tavukirjoitusta, sanakirjoitusta tms. Käytännössä erotetaan toisistaan joukko suuria kirjoitusjärjestelmiä, kuten latinalainen, kyrillinen, kreikkalainen, kiinalainen, hieroglyfit ym. Samasta kirjoitusjärjestelmästä on erilaisia muunnelmia ainakin merkistön tasolla. Esimerkiksi suomi ja ranska käyttävät latinalaista kirjoitusjärjestelmää, mutta erilaisia lisämerkkejä käyttäen.

Periaatteessa kirjoitusjärjestelmä on erotettava kielestä. Jos esimerkiksi venäjää kirjoitetaan latinalaisin kirjaimin, se on edelleen venäjää. Itse asiassahan monet kielet ovat vaihtaneet kirjoitusjärjestelmää aikojen kuluessa, eikä tähän sisälly, että itse kieli silloin muuttuisi toiseksi.

Toistaiseksi ei ole määritelty mitään tapaa merkkauksessa ilmoittaa, mikä on käytetty kirjoitusjärjestelmä. Käytännössä sen oletetaan olevan se, mitä kullekin kielelle yleisimmin käytetään. Vertaa kohtaan Riittääkö kielikoodi?

Loogista olisi, että kieli ja kirjoitusjärjestelmä ilmaistaan toisistaan riippumatta. Täten on erikoista, että IANAn rekisteriin on otettu koodeja, joissa kirjoitusjärjestelmä ilmaistaan kielikoodin nelikirjaimisella alakoodilla, esimerkiksi siten, että az-Cyrl tarkoittaa kyrillisin kirjaimin kirjoitettua azeria ja az-Latn latinalaisin kirjaimin kirjoitettua azeria.

Ääntämisohjeet

Ääntämisohjeet ovat tavallaan kielen ja muun notaation välimaastossa oleva asia. Jos kirjoitan, että englannin sana "people" ääntyy suunnilleen "piipl", niin mitä kieltä "piipl" on? Periaatteessa voisimme sanoa, että se on englantia mutta kirjoitettuna englannin normaalista kirjoitusjärjestelmästä poikkeavasti. Parasta lienee käytännössä jättää kielimerkkaus pois, koska puhesynteesissä tulos voisi olla absurdi, kun ohjelma yrittää lukea ilmaisun "piipl" englannin sääntöjen mukaan. Oikeastaan tarvitsisimme tavan kertoa kirjoitusjärjestelmä. Sen ei tarvitsisi olla muuta kuin tapa kertoa, että jokin ilmaisu luetaan vaikkapa suomen kielen sääntöjen mukaan mutta sitä ei muutoin käsitellä suomenkielisenä. - Tässä käytettiin yksinkertaisuuden vuoksi esimerkkinä suomen kielen sääntöjen mukaan kirjoitettua ääntämisohjetta. Usein käytetään järjestelmiä, joissa on erilaisia lisämerkkejä ehkä hyvinkin paljon ja jotka on usein pyritty tekemään hyvinkin täsmällisiksi, esimerkiksi IPA-kirjoitus. Koska IPA-kirjoituksen lukemisen oikea tapa kielestä riippumatonta, niin IPA:lla esitetyn ääntämisohjeen voi merkata tekstin kielen mukaiseksi.

Entä mitä pitäisi ajatella sellaisista ilmaisuista kuin "tuu tii to tööti tuu", jonka on tarkoitus parodioida huonoa englannin taitoa, tarkemmin sanoen esittää ilmaisun "two tea to thirty-two" kehnoa ääntämystä? Niihin voi suhtautua kuten yksinkertaisiin ääntämisohjeisiin, joissa ääntämys esitetään suomen kirjoitusjärjestelmän mukaan. Käytännössä siis on parasta jättää kielimerkkaus pois.

Translitterointi ja transkriptio

Se, että kirjoitusjärjestelmää ei voi ilmoittaa, aiheuttaa ongelmia myös silloin, kun teksti esitetään käyttäen jotakin translitteraatiota tai transkriptiota. Silloin teksti kirjoitetaan eri kirjoitusjärjestelmällä kuin sillä, jolla kyseistä kieltä normaalisti esitetään. Jos esimerkiksi halutaan kirjoittaa kreikkalainen nimi latinalaisin kirjaimin, niin tulisiko käyttää sentapaista merkkausta <span lang="el">Stephanos Piperoglou</span>? Ainakaan puhesyntetisaattori ei voi tuottaa kovin hyvää tulosta, koska se ei tiedä, mitä translitterointimenetelmää on käytetty. Käytössä on useita erilaisia kreikan translitteroinnin ja transkription menetelmiä.

Ongelma on vielä suurempi esimerkiksi venäläisten nimien osalta, koska niille käytetään hyvin monenlaisia translitterointeja. Esimerkiksi merkkauksesta <i lang="ru">chas</i> ei ohjelma voi edes periaatteessa tietää, tarkoitetaanko venäjän sanaa час 'tunti', kuten tarkoitetaan, jos translitterointi on tulkittava englannissa vallitsevan käytännön mukaan, vaiko ehkä шас ranskalaisen translitteraation mukaan tai хас saksalaisen translitteraation mukaan tai kenties цхас kansainvälisen standardin (ISO 9) mukaan. Ohjelman voi tuskin olettaa tarkistavan sanakirjoista, mitkä tulkinnoista vastaavat todellisia sanoja, varsinkaan, kun kieli muuttuu ja tekstissä voidaan toki käyttää myös keksittyjä ja kuvitteellisia sanoja. (Näitä vastaavat suomen kielen mukaiset translitteroinnit ovat tšas, šas, has ja tshas. Ks. sivua Venäjän translitterointi.)

On kaksi isohkoa käytännön ongelmaa, joiden takia on ehkä parempi välttää kielimerkkausta silloin, kun teksti on translitteroitu tai transkriboitu eli siirretty toiseen kirjoitusjärjestelmään:

(Edellä mainitut tekstit siten, että sanat Dostojevski ja
manga ovat eri fontilla kuin muu teksti.)

Mozillassa on erityiset asetukset, joissa voi valita, mitä fontteja selain käyttää erikielisten tekstien esittämiseen. Oletusarvot ovat sellaiset, että esimerkiksi japaninkielisen tekstin fontti on myös latinalaisten merkkien osalta erilainen kuin "länsieurooppalaisen", mistä seuraa yllä kuvattu ilmiö. Aiheesta kertoo lisää Alan Flavellin sivu I18n - Browsers and fonts kohdassa Mozilla.

Ongelma voi ilmetä myös silloin, kun suomenkielisellä sivulla on esimerkiksi puolankielisiä sanoja, joille on käytetty kielimerkkausta. Jos sivulla ei aseteta tekstin fonttia, Mozilla tällöin käyttää kyseisille sanoille sitä fonttia, joka on Mozillan asetuksissa liitetty keskieurooppalaiseen merkistöön. Tällöin tekstin ulkoasu voi ikävästikin poiketa muun tekstin asusta. Käytännössä ongelma on pieni, koska Mozillan oletusasetukset keskieurooppalaisen merkistön fonteille ovat samat kuin länsieurooppalaisen merkistön fonteille.

Edellä kuvatut fonttiongelmat voidaan välttää asettamalla tekstin fontti erikseen, esimerkiksi CSS-säännöllä
body { font-family: Arial, sans-serif; }
sillä Mozillan fontinvalintasäännöt koskevat vain tilannetta, jossa sivu jättää fonttien valinnan selainten tehtäväksi.

Vaikutus CJK-merkkien esitykseen

Kielimerkkaus voi vaikuttaa siihen, millä tavoin selain esittää ns. kiinalais-japanilais-korealaiset kirjoitusmerkit (CJK-merkit). Unicodessa ne on yhtenäistetty niin, että kielieroa ei oteta huomioon merkkien (koodien) tasolla, vaikka merkeistä käytetään eri kielissä osittain erilaisia muotoja. Selain saattaa kuitenkin ottaa kielieron huomioon, jos kieli on ilmoitettu merkkauksessa.

Seuraava taulukko esittää erään CJK-merkin (U+9FA5) ensin ilman kielimerkkausta, sitten kolmea eri kielimerkkausta käyttäen. Esimerkiksi Mozilla (ja Firefox) esittää oletusarvoisesti merkin eri tavoilla kielimerkkauksen mukaan siten, että se käyttää japanin mukaista esitystä, jos kieltä ei ole ilmoitettu (tai jos ilmoitettu kieli ei ole sellainen, jossa käytetään CJK-merkkejä). Jotta erot olisi helpompi havaita, on merkki esitetty tässä hyvin isokokoisena.

merkkaus merkki kieli
&#40869; ei ilmoitettu
<span lang="zh">&#40869;</span> kiina (yksinkertaistettu kirjoitusjärjestelmä)
<span lang="zh-Hant">&#40869;</span> kiina (perinteinen kirjoitusjärjestelmä)
<span lang="ja">&#40869;</span> japani

Kiinan kieltä kirjoitetaan sekä ns. perinteisellä (traditional) että ns. yksinkertaistetulla (simplified) kirjoitusjärjestelmällä. Näitä ei kuitenkaan aiemman käytännön mukaan erotettu toisistaan loogisella koodauksella vaan maakoodeilla siten, että zh-CN (missä CN on Kiinan maakoodi) tai pelkkä zh tarkoittavat yksinkertaistettua ja zh-TW (missä TW on maakoodi, joka on annettu Taiwanille) tarkoittaa perinteistä kirjoitusjärjestelmää. Maakoodien käyttö perustuu siihen, että Kiinassa käytetään enimmäkseen yksinkertaistettua järjestelmää mutta Taiwanin maakunnassa perinteistä. Jotkin ohjelmat saattavat edelleenkin tukea vain sellaista menetelmää. Loogisempi ratkaisu on käyttää alakoodeja, jotka on erikseen rekisteröity tähän tarkoitukseen: zh-Hans tarkoittaa yksinkertaistettua, zh-Hant perinteistä kirjoitusjärjestelmää. Käytännössä pelkkä zh tarkoittaa yleensä samaa kuin zh-Hans.

Voivatko sanan osat olla eri kieltä?

Kielissä, joissa sanoja taivutetaan, saattaa käydä niin, että vieraskieliseen vartaloon liitetään omakielinen pääte. Tällöin tarkin kielimerkkaus osoittaisi sanan eri osat erikielisiksi, esimerkiksi
Kävin <span lang="fr">Marseille</span>ssa.

Mutta kannattaneeko sanan osille olla kielimerkkaus? Periaatteessa se on oikein, mutta se saattaa käytännössä aiheuttaa ikävän katkoksen puhesynteesissä, jopa sen, että syntetisaattori yrittää lausua pääteaineksen kuten "-ssa" erikseen. Lisäksi syntyy usein hankalia tilanteita:

Hakukoneiden kannalta ongelmana on se, että jotkin hakukoneet (mm. AltaVista) käsittelevät sellaista ilmaisua kuin <span lang="fr">Voltaire</span>n yhtenä sanana (Voltairen), jotkin (mm. Google) kahtena (Voltaire n).

Käytännön neuvo: Vältä vieraiden sanojen taivutusta, sitä enemmän, mitä oudommasta sanasta on kyse. Näin vältetään edellä kuvatut ongelmat. Mihinkään kielenvastaisuuteen ei tietenkään pidä mennä, mutta usein on helppoa muotoilla lauseet niin, että hankala sana saadaan asemaan, jossa se on kieliopin mukaan perusmuodossa. Neuvoon on usein muitakin syitä, kuten se, että taivutetusta muodosta ei lukija aina osaa päätellä, mikä on perusmuoto, ja se, että päätteen merkitseminen on osittain vakiintumatonta. Pitääkö sanoa "Netscapella" vaiko ääntämyksessä käytetyn päätteen mukaisesti "Netscapellä", joka taas oudoksuttaa joitakuita (vaikka onkin ääntämyksen mukainen)? Ongelma vältetään kirjoittamalla "Netscape-ohjelmalla" tai "Netscape-selaimella", jolloin myös kielimerkkaus on helppo kirjoittaa.

Kielitieteessä ja muutoin kieltä kuvattaessa saattaa sananosa esiintyä irrallisenakin, esimerkiksi ilmaisuissa "latinassa esiintyy liitepartikkeli '-que'" ja "the suffix of the inessive case in Finnish is '-ssa' or '-ssä'". Periaatteessa tällöin on oikein merkata niiden kieli erikseen, jos se poikkeaa ympäröivän tekstin kielestä, siis esimerkiksi latinassa esiintyy liitepartikkeli '<span lang="la">-que</span>'.

Teknisiä ongelmia: sisältöä määritteissä

Eräät HTML-merkkaukseen sisältyvät tekstit ovat määritteiden (attribuuttien) arvoja tai muuten sellaisia, että niiden tulee olla pelkkää tekstiä, niin että niiden sisällä ei voi olla merkkausta. Elementtiin saattaisi liittyä esimerkiksi määrite
title="Presidentti Richard Nixon"
Miten voitaisiin ilmoittaa, että määritteen arvon eri osat ovat eri kieltä? Eipä mitenkään. Sama koskee esimerkiksi option-elementin sisältöä, jonka tulee HTML:n määritelmän mukaan olla pelkkää tekstiä. Voimme kyllä kirjoittaa
<option>New York</option>
mutta entäpä jos elementin tekstissä pitäisikin olla kahta kieltä?

Tähän ei siis ole mitään yleistä käytännöllistä ratkaisua. Joskus kyllä ongelma voidaan kiertää käyttämällä HTML:ssä sellaista rakennetta, jossa merkkaus on sallittu; esimerkiksi select- ja option-elementeillä tehty valikko voidaan korvata joukolla input-elementtejä ja niihin liittyviä tekstejä.

Ongelma havainnollistaa sitä, että määritteissä ei pitäisi olla dokumentin sisältöön kuuluvaa asiaa. Teoreettiselta kannalta olen hiukan käsitellyt tätä HTML:n suunnitteluvirhettä kirjoituksessani Empty elements in SGML, HTML, XML, and XHTML, kohdassa Data hidden in attributes.

Eräs tähän liittyvä ongelma on kuitenkin osittain ratkaistavissa, joskin kömpelösti. Joskus määritteen kieli on toinen kuin elementin sisällön. Huomattakoon, että lang-määrite on määritelty niin, että se ilmoittaa elementin sisällön ja määritteiden kielen. Tämä täytynee tulkita niin, että se vaikuttaa myös taaksepäin määritteiden listassa. Esimerkiksi
<a title="HTML 4.01 specification" lang="en">
on tulkittava niin, että lang-määrite vaikuttaa myös sitä edeltävään title-määritteeseen. (Tosin käytännössä kannattaa varmaankin kirjoittaa määritteet toiseen järjestykseen.) Mutta miten menetellään, jos esimerkiksi linkin teksti suomea mutta title-määrite englantia, kuten luonnollista on, jos linkin kohde on englanninkielinen. Tällöin lienee ainoa tapa saada kielimerkkaus täysin oikeaksi se, että elementin sisällä käytetään ylimääräistä merkkausta, jolla sinne saadaan erilainen kielimäärite:
<a lang="en" title="HTML 4.01 specification"><span lang="fi">HTML-spesifikaatio</span></a>

Lisää teknisiä ongelmia: entä kun määritteissä ja sisällössä on eri kieltä?

HTML-spesikaation lang-määritettä koskeva kohta sanoo, että tämä määrite ilmoittaa elementin sisällön ja määritteiden kielen. XML-spesifikaation kuvaus xml:lang-määritteestä esittää samanlaisen periaatteen hiukan toisin sanoin.

Tätä lienee tulkittava niin, että se vaikuttaa myös määritelistassa taaksepäin, joten esimerkiksi
<a href="foo.html" title="Hello world" lang="en">
ilmoittaa, että myös teksti "Hello world" on englantia. Aika näyttää, tulevatko selaimet ja muut ohjelmat toimimaan tämän mukaan. Ei ole vaikeaa kuvitella, että huolimattoman ohjelmoinnin takia tapahtuu toisin.

Tästä seuraa ongelma: Entäs jos meillä on esimerkiksi linkki, jonka linkkiteksti on suomea mutta title-määrite englantia, koska linkki viittaa englanninkieliseen dokumenttiin? Tilanne ei ole mitenkään keinotekoinen, vaan usein on hyödyllistä antaa title-määritteellä vihje siitä, mihin linkki viittaa, ja vihjeen englanninkielisyys on lisävihje. Mutta jos kirjoitamme suomenkieliseen dokumenttiin esimerkiksi
<a href="http://www.faqs.org/rfcs/rfc3066.html" lang="en" title="Tags for the Identification of Languages">RFC 3066</a>
niin silloin kyllä ohjelmille kerrotaan oikein, mikä on title-määritteen kieli (ja tämän ansiosta puhesyntetisaattori voisi lukea sen oikein) mutta samalla väitetään, että merkkijono RFC 3066 on englantia. Tästä taas seuraisi, että puhesyntetisaattori tekisi merkkauksen pohjalta tulkittuna oikein lukiessaan linkin nimen englanniksi, siis suunnilleen "aar ef sii thrii ou siks siks", ja tämä olisi aika häiritsevää.

Jos riski tuntuu todelliselta, niin sen voisi periaatteessa välttää käyttämällä lisämerkkausta, jossa elementin sisällä kerrotaan sisällön kieli:
<a href="http://www.faqs.org/rfcs/rfc3066.html" lang="en" title="Tags for the Identification of Languages"><span lang="fi">RFC 3066</span></a>
Eri asia sitten on, moniko jaksaa niin tehdä. Helpointa tällaisessa tilanteessa on jättää lang-määrite kokonaan pois.

Voiko muu kuin teksti olla jotain kieltä?

Mitä merkitystä voisi olla esimerkiksi HTML:n img-tai object-elementin kielellä?

Aluksi on huomattava, että niille kuville ja muille objekteille, jotka liitetään mukaan kyseisten elementtien avulla, voi olla tekstivaihtoehto, ja yleensä pitäisikin olla. Koska object-elementin tapauksessa vaihtoehto ilmoitetaan elementin sisällössä, jossa merkkaus on sallittu, voidaan kieli ilmoittaa elementin sisällä. Mutta img-elementin tapauksessa tekstivaihto ilmoitetaan alt-määritteellä, joten sen kieli pitää ilmoittaa joko img-tägissä tai sitten sen ulkopuolella.

Lisäksi itse kuva tai objekti voi sisältää tekstiä. Tämä on hyvin ilmeistä, jos objekti on ääni- tai videotiedosto, mutta kuvassakin voi näkyä tekstejä - tai itse kuva voi olla logo tai muu kuvana esitetty teksti. Jos kyse on esimerkiksi äänitiedostosta, ei kielimerkkauksella tietenkään ole merkitystä puhesynteesille, mutta ei toisaalta ole mitään syytä olla ilmoittamatta kieltä. Se on kuitenkin olennaista informaatiota, jolle voi joskus tulla käyttöä.

Kuvalle tai objektille ei tietenkään tarvitse erikseen ilmoittaa kieltä, jos kieli on sama kuin ympäröivän elementin kieli. Mutta jos suomenkielisellä sivulla on vaikkapa sana Google logokuvana, on hyvä käyttää tämäntapaista merkkausta:
<img lang="en" alt="Google" src="google.gif">


Kirjoittamisen ajankohta: 2002-06-23. Päivitetty viimeksi 2007-12-03.
Tämä sivu kuuluu Jukka "Yucca" Korpelan avoimeen tietosivustoon Datatekniikka ja viestintä.

Seuraava osa: Muita erityiskysymyksiä