Tekniikoita monikielisiä Web-sivustoja varten:
Kielivalinta palvelimessa (esimerkkinä Apache)

Se, miten sivuston tekijä voi panna tarjolle erikielisiä versioita kielivalintaa varten, riippuu palvelimesta ja sen asetuksista. Tässä käsitellään menettelyä vain eräässä yleisesti käytetyssä palvelinohjelmistossa, Apachessa, ja senkin osalta lähinnä vain toista kahdesta menetelmästä. Muiden osalta viittaamme vain WebServer Comparen sivuun WebServer Directory, jonka kautta löytyy eri palvelinohjelmistojen alkuperäisdokumentaatioita.

Vaihtoehdot Apachessa

Apachen dokumentaatio sisältää osuuden Content Negotiation, joka kuvaa kaksi perusmenetelmää:

Multiviews
Eri vaihtoehdot ovat samassa hakemistossa jollakin yhtenäisellä tavalla nimettyinä. Sivuston tekijä määrää jonkin yleisen säännön, jonka mukaan geneerinen URL kuvautuu kielikohtaisiksi tiedostonnimiksi.
type-map
Jokaista geneeristä URLia kohti on erillinen tiedosto, joka luettelee sitä vastaavat kielikohtaiset tiedostonnimet ja niihin liittyviä ominaisuuksia (esim. tiedoston koodaus).

Astetta tarkempi kuvaus menetelmistä on CERNin sivulla Language Negotiation.

Multiviews-menetelmän käyttö

Jos Multiviews on käytettävissä Apachessa (kuten se oletusarvoisesti on), voit käyttää kielivalintamekanismia seuraavalla yksinkertaisella joskin hiukan rajoittuneella tavalla halutun hakemiston sisällä:

Alkeisesimerkki type-map-menetelmän käytöstä

Yksinkertainen esimerkki jälkimmäisen menetelmän soveltamisesta on seuraava:

Vaihtoehtoihin liittyvät selitykset

Jos selain ilmoittaa sellaiset kielipreferenssit, että mikään vaihtoehdoista ei kelpaa, niin Apache lähettää vastaukseksi HTTP-protokollan mukaisen virheilmoituksen 406 Not Acceptable. Tämä voi jo itsessään olla hämäävää, mutta ilmoitukseen liittyvä teksti sisältää linkit vaihtoehtoihin siten, että kieli on ilmoitettu vain kielikoodilla.

Tilannetta voidaan hiukan parantaa lisäämällä edellä mainittuun .var-tiedostoon kunkin vaihtoehdon perään (kunkin Content-Language-rivin jälkeen) rivi, jolla on Description: ja kuvaus vaihtoehdosta, esim. sivun nimi kyseisellä kielellä. Esimerkiksi englanninkieliseen vaihtoehtoon voisi liittää seuraavan:
Description: Techniques for multilingual Web sites
Lisäämällä tällaisia saadaan palvelimen vastaus jo näyttämään jotenkin ymmärrettävältä:

Not Acceptable

An appropriate representation of the requested resource /~jkorpela/multi/index.html could not be found on this server.

Available variants:


Tilannetta voisi ehkä vielä parantaa tekemällä erillisen virheilmoitussivun 406-virheelle ja ohjaamalla (ErrorDocument-direktiivillä) Apachen käyttämään sitä.

Paras vaihtoehto lienee kuitenkin se, että viimeisenä vaihtoehtona listassa on sellainen, josta Content-Language puuttuu kokonaan. Kyseinen vaihtoehto voi sitten olla sivu, jossa englanniksi kerrotaan tarjolla olevat vaihtoehdot taikka vain esitetään asia englanniksi. Lisäksi siinä voidaan, käyttäjän yleiseksi auttamiseksi, opastaa käyttäjää siitä, että hänen kannattaisi säätää selaimensa kieliasetuksia, ainakin lisätä englanti vaihtoehtojen joukkoon.

Esimerkki tällaisesta vaihtoehdosta on "geneerinen" 404-virheilmoitussivuni.

Toinen esimerkki: tämän sivuston kielivalintaisuus

Käsillä olevan sivuston kielivalintaisuus on toteutettu type-map-menetelmällä. (Tarkoitukseen alun perin käytetyn palvelimen konfiguraatio ei sallinut Multiviews-menetelmää.) Konkreettisesti menetelmä on tässä toteutettu seuraavasti:

Vertaa Eunetin ohjeeseen Tyyppikartat ja valinnainen sisältö.

Käytettävän palvelimen asetuksista (jotka ovat tältä osin Apachen oletusasetukset) sitten johtuu, että jos selaimen lähettämä pyyntö koskee URLia http://jkorpela.fi/multi/ (siis vinoviivaan loppuvaa URLia), niin palvelin ensin "laventaa" sen URLiksi http://jkorpela.fi/multi/index.html ja sitten ryhtyy kielivalintaan. Huomaa, että selaimen URL- tai Location-näytössä näkyy alkuperäinen URL, koska sen tulkitseminen on tapahtunut palvelimessa eikä selain tiedä asiasta mitään; selain vain on saanut vastaukseksi sen dokumentin sisällön, jonka palvelin päätyi valitsemaan. Tämä ei merkitse, etteivätkö myös sellaiset URLit kuin http://jkorpela.fi/multi/index-fi.htm toimisi; ne vain viittaavat kiinteästi kyseisiin vaihtoehtoihin, kielivalintamekanismin ohi.

Apachen dokumentaatio puhuu .var-tiedostoista, mutta tämä ei tarkoita, että olisi pakko käyttää .var-loppuisia tiedostonnimiä. Edellä käytetty menettely, jossa .var-lopun tilalla on .html, on ehkä hiukan erikoinen, mutta tässä kätevä. Huomaa, että menettely ei ole mahdollinen, jos hakemistossa ennestään on normaaleja HTML-dokumentteja tiedostoissa, joiden nimet loppuvat .html eikä tätä tilannetta haluta muuttaa. Palvelin nimittäin soveltaa type-map-menetelmää kaikkiin tiedostoihin, joiden nimen loppu on se, mikä on AddHandler-käskyssä ilmoitettu, joten kaikkien sellaisten sivujen tulee olla sisällöltään sellaisia, kuin yllä kerrottiin. Tietenkään kielikohtaisten sivujen nimetkään eivät esimerkkitilanteessamme saa olla .html-loppuisia; sen sijaan .htm käy ihan hyvin.

Seuraava luku: Kielivalinta selaimessa.


2003-09-08 Jukka K. Korpela