Apache kielenvalinta

HTTP-protokolla ja Apache-WWW-palvelin tukevat suoraan automaattista kielenvalintamekanismia, joka palauttaa selaimelle oikeankielisen dokumentin selaimen asetuksien mukaan. Selaimien kieliasetuksia voi säätää suoraan niiden asetuksista ja voi esim. laittaa kielet mieleiseensä järjestykseen. Monikielisen sivuston voisi toteuttaa yhdelle Apache-palvelimelle kahdella tapaa: joko laittamalla kukin kieliversio samaan hakemistoon tai tekemällä kullekin kielelle oma hakemistohierarkiansa.

XHTML-dokumentin kieli on syytä määrittää aina html-elementin xml:lang-ominaisuudella.

Kieliversiot samaan hakemistoon

Erilaiset kieliversiot voidaan laittaa samaan hakemistoon. Tällöin erikieliset dokumentit on eroteltava toisistaan kieltä kuvaavalla liitteellä. Jos viitteet tehdään aina hakemistoon, niin Apache osaa automaatisesti type-map-tiedoston perusteella valita oikean kielisen dokumentin. Hakemistorakenne olisi silloin esimerkiksi seuraavanlainen:

.
|-- articles
|   |-- index.en.html
|   |-- index.fi.html
|   |-- index.sv.html
|   |-- index.html
|   `-- index.var
|-- index.en.html
|-- index.fi.html
|-- index.sv.html
|-- index.html
`-- index.var

Tiedostot

Lisätään hakemistorakenteen juureen .htaccess-tiedosto ja siihen seuraavat rivit:

# Tehdään var-päätteisistä tiedostoista tyyppikartta-tiedosto,
# joka kertoo mikä tiedosto sisältää mitäkin kieltä.
AddHandler type-map .var
# Käytetään kansion indeksitiedostona index.var-tiedostoa
# tavallisen index.html-tiedoston sijaan.
# Määrätään indeksitiedostovaihtoehdot:
DirectoryIndex index.var index.html index.shtml
# Määrätään kielten oletusjärjetys, ensin englanti, sitten suomi, lopuksi ruotsi.
# Tätä järjestystä käytetään, jos selain ei itse ilmoita selkeää paremmuusjärjestystä.
LanguagePriority en fi sv
# Varmistetaan, että selaimelle tarjotaan dokumentti myös, jos selaimen haluamia
# kielivaihtoehtoja ei löydy.
ForceLanguagePriority Prefer Fallback

Seuraavaksi luodaan index.var-tiedosto ja lisätään siihen rivit:

URI: index.en.html
Content-type: text/html
Content-language: en

URI: index.fi.html
Content-type: text/html
Content-language: fi

URI: index.sv.html
Content-type: text/html
Content-language: sv

Tiedostossa kerrotaan, että selaimen ilmoittamalle en-kielelle on valittava dokumentti index.en.html jne. index.var-tiedosto on kopioitava kaikkiin alihakemistoihin.

Kieliversiot omiin hakemistoihin

Jos tehdään kokonaan monikielisiä sivustoja, voi olla hyvä jakaa erikieliset versiot omiin hakemistoihinsa ja tehdä palvelimen juureen automaattinen kielenvalinta. Hakemistorakenne voisi olla esimerkiksi seuraavanlainen:

.
|-- en
|   |-- articles
|   |   `-- index.html
|   `-- index.html
|-- fi
|   |-- artikkelit
|   `-- index.html
|-- index.html
`-- sv
    |-- artiklar
    `-- index.html

Tiedostot

Tee juurihakemistoon .htaccess-niminen tiedosto, johon sijoitat seuraavan mallin mukaiset rivit:

# Käynnistetään mod_rewrite, jolla voidaan muokata URL-osoitteita vapaasti.
RewriteEngine On
# Tutkitaan selaimen HTTP-pyynnöstä, onko pyynnön alussa en-kielimäärettä.
RewriteCond %{HTTP:Accept-Language} ^en.*
# Tutkitaan selaimen HTTP-pyynnöstä, ettei osoitteessa ole jo kielihakemistoa.
RewriteCond %{REQUEST_URI} ^/~tunnus/hakemisto/$
# Muutetaan nykyisen osoitteen alkuosaa siten, että kielihakemisto tulee mukaan.
RewriteRule (.*) http://users.jyu.fi/~tunnus/hakemisto/en/$1

# Muille kielille samat toimenpiteet.
RewriteCond %{HTTP:Accept-Language} ^fi.*
RewriteCond %{REQUEST_URI} ^/~tunnus/hakemisto/$
RewriteRule (.*) http://users.jyu.fi/~tunnus/hakemisto/fi/$1

RewriteCond %{HTTP:Accept-Language} ^sv.*
RewriteCond %{REQUEST_URI} ^/~tunnus/hakemisto/$
RewriteRule (.*) http://users.jyu.fi/~tunnus/hakemisto/sv/$1

Toinen vaihtoehto on tehdä normaali kielenvalinta type-map-tiedoston avulla. Tällöin kunkin etusivun linkit on tehtävä absoluuttisena (esim. http://users.jyu.fi/~tunnus/hakemisto/en/alihakemisto/), koska selain luulee saavansa tiedoston juurihakemistosta.

Tässä tavassa index.var-tiedostoon tulee viittaukset alihakemistoissa oleviin tiedostoihin:

URI: en/index.html
Content-type: text/html
Content-language: en

URI: fi/index.html
Content-type: text/html
Content-language: fi

URI: sv/index.html
Content-type: text/html
Content-language: sv 

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/doc/www/apache/kielivalinta/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2009-01-08 10:11:21
Informaatioteknologia - Jyväskylän yliopiston IT-tiedekunta ja avoin yliopisto