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.
Apachen dokumentaatio sisältää osuuden Content Negotiation, joka kuvaa kaksi perusmenetelmää:
Astetta tarkempi kuvaus menetelmistä on CERNin sivulla Language Negotiation.
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ä:
.htaccess
-tiedostoon:AddLanguage en .en
AddLanguage fi .fi
AddLanguage fr .fr
foo.txt
englanninkielinen versio olisi tiedostossa
foo.txt.en
ja suomenkielinen tiedostossa
foo.txt.fi
.
(Tällöin et luo tiedostoa, jonka nimi olisi
foo.txt
, mutta siten loppuva URL toimii.)
Huomaa, että kielivalinta toimii myös pelkkää tekstiä sisältäville
tiedostoille; mekanismi ei riipu tiedoston datatyypistä.
http://jkorpela.fi/multi/foo.txt
yleisenä, geneerisenä URLina, joka toimii kielivalintamekanismin kautta.
Kielikohtaisten versioiden URLeja kuten
http://jkorpela.fi/multi/foo.txt.fi
voidaan myös käyttää aina haluttaessa.
Yksinkertainen esimerkki jälkimmäisen menetelmän soveltamisesta on seuraava:
http://jkorpela.fi/rfct.html
ja sen englanninkielinen versio
http://jkorpela.fi/rfcs.html
.htaccess
-tiedoston, jossa on riviAddHandler type-map var
.var
-loppuiset
URLit erityisellä tavalla. (Tämä saattaa olla palvelimessa
oletusarvonakin.)
rfc.var
,
jonka sisältö on
URI: rfcs.html Content-Type: text/html Content-Language: en URI: rfct.html Content-Type: text/html Content-Language: finiin myös osoite
http://jkorpela.fi/rfc.var
rupeaa toimimaan, ja palvelin antaa käyttäjälle joko
suomen- tai englanninkielisen version, käyttäjän selaimen
kielipreferessien mukaan.
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:
- index-en.htm Techniques for multilingual Web sites, type text/html, language en
- index-fi.htm Tekniikoita monikielisiä Web-sivustoja varten, type text/html, language fi
- index-de.htm Techniken für mehrsprachige Web-Sites, type text/html, language de
- index-sv.htm Tekniker för mångspråkiga Webbsajter, type text/html, language sv
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.
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:
.htaccess
-niminen
tiedosto, jonka ainoa sisältö on riviAddHandler type-map html
.html
-loppuista URLia käsitellessään palvelin
soveltaa kielivalintamenettelyä.
.html
-loppuista URLia kohden,
jonka halutaan toimivan ja viittaavan hakemistossa oleviin sivuihin,
esim. http://jkorpela.fi/multi/index.html
,
perustetaan senniminen tiedosto, ns. type-map-tiedosto, joka
sisältö on seuraavantapainen:
URI: index-en.htm Content-Type: text/html Content-Language: en URI: index-fi.htm Content-Type: text/html Content-Language: fiTässä esimerkissä kielivaihtoehtoja on kaksi, englanti ja suomi, versioiden nimet ovat
index-en.htm
ja index-fi.htm
.
Tässä menetelmässä nimien ei tarvitse olla systemaattisesti
muodostettuja, vaan vaikkapa index.htm
ja
hakemisto.htm
kävisi myös. (Nimet eivät kuitenkaan
voi olla .html
-loppuisia, koska sellaiset on
nyt ilmoitettu type-map-tiedostoiksi!)
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