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
- index.var-tiedostossa määrätään mitä kieliä on käytettävissä.
- index.html-tiedosto näytetään, jos haluttua kieltä ei ole saatavilla.
- index.kieli.html-tiedosto on halutun kielinen dokumentti.
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
- Juuressa oleva index.html sisältää linkit eri kieliversioihin. Tämä dokumentti näytetään, mikäli selain ei ilmoita tukevansa mitään kyseistä kieltä.
- Kuhunkin kieltä koskevaa hakemistoon tulee vain yhdellä kielellä olevia dokumentteja.
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