Osaisiko joku kertoa, miten kotisivut joissa on useampia kielivalitoja, saataisiin latautumaan sen mukaan mistä maasta kotisivuille tullaan. Olen nähnyt sellaisia sivuja jonkin verran (nämäkin sivut) ja tiedän että jotenkin se on mahdollista, mutta miten. dRD varmaankin voisi antaa tähän hyvän vastauksen, korjatkaa jos olen väärässä. Esimerkiksi jos joku tulee kotisivuilleni englannista tai USA:sta, hän pääsisi suoraan englannin kielisille sivuille, ilman että tarvitsee mistään valikosta valita haluamaan kieltä, vaan englannin kieliset sivut latautuisivat suoraan.
No ensinnäkin sen _voi_ tehdä jotenkin JavaScriptillä, mutta kun en ko. osa-alueeseen ole jaksanut kauheasti panostaa, niin en osaa siihen sanoa sen kummempaa. PHP:llä, ColdFusionilla tai ASP:lla homma on suhteellisen helppoa -- teet pääsivun alkuun IF-oletuksen, jossa tutkit CGI-muuttujaa nimeltä "HTTP_ACCEPT_LANGUAGE". Eli ei millään ohjelmointikielellä, mutta logiikkaa noudattaen, näin: if exists(cgi.HTTP_ACCEPT_LANGUAGE) { if cgi.HTTP_ACCEPT_LANGUAGE == 'FI' { url.redirect("http://sivunosoite.com/suomiversio/index.html"); } else { url.redirect ("http://sivunosoite.com/enkkuversio/index.html"); } } else { url.redirect ("http://sivunosoite.com/enkkuversio/index.html"); } eli siis tutkitaan onko ensinnäkään muuttujaa cgi.HTTP_ACCEPT_LANGUAGE olemassa (esim. vanhemmat selaimet eivät ko. muuttujaa lähetä). Jos on, tutkitaan onko sen arvo "fi", joka on suomenkielinen asetus. Jos on "fi", pompataan urliin suomiversio. Jos ei ole "fi", pompataan versioon enkkuversio. Ja jos sitä muuttujaa ei ole olemassa, pompataan versioon enkkuversio. Sama logiikka siis toimii kaikilla kielillä, varsinaisen syntaxin saat sitten kaivettua jostain, ColdFusionille tuo olisi: <cfif isdefined("cgi.HTTP_ACCEPT_LANGUAGE")> <cfif cgi.HTTP_ACCEPT_LANGUAGE is "FI"> <cflocation url="/suomiversio"> <cfelse> <cflocation url="/enkkuversio"> </cfif> <cfelse> <cflocation url="/enkkuversio"> </cfif> tarkennettuna CF:llä tuota sa lyhyemmäksikin, mutta noin periaatteessa näin.
Nuo PHP ja ASP ovat termejä joita olen kuullut viime aikoina yhä enemmän ja enemmän, varsinkin tuolla "ammattilaispiireissä". Itse en noista tajua tässä vaiheessa yhtään mitään, mutta pakko alkaa opetella sillä joudun työssäni lähiaikoina tuollaiset sivut tekemään. Onko mitään hyvää vihjettä mistä kannattaisi alkaa opiskelu. Softa, ohjeita (miel. suomeksi) jne.
Varmaan tuo http://www.php.net/ on se paikka, josta homma kannattaa aloittaa. Itse en duunaile PHP:llä paljon mitään, vaan ColdFusionilla enemmän -- teen CF:ää "arkityössäni".
Ja siis miten nuo hommat toimivat, hyvin lyhyesti ottaen application server, oli se sitten ASP, PHP, ColdFusion, Vignette StoryServer tai JRun/Tomcat, pyörii helpoimmassa tapauksessa samalla koneella, jossa itse webserverikin. Tämän lisäksi on sitten koneella vielä tietokanta jauhamassa dataa. Eli teet requestin sivulle, jonka pääte on vaikka .cfm -> selain lähettää pyynnön sivusta whatever.cfm palvelimelle ja webserver (Apache esim) ottaa pyynnön vastaan webserver huomaa, että pääte on sellainen, joka on asetuksissa määritelty ColdFusionin käsiteltäväksi, joten se lähettää pyynnön suoraan ColdFusionille tekemättä sivulle mitään. ColdFusion saa pyynnön ja hakee sivun kovalevyltä. Käy läpi HTML-koodin seassa olevan koodin, jättäen varsinaisen HTML:n käsittelemättä. Oletetaan että whatever.cfm listaisi kaikki AfterDawnin käyttäjät. Joten sivussa on koodi, jossa haetaan kannasta kaikki käyttäjät. CF prosessoi sivun tähän pyyntöön asti ja välittää sitten pyynnön tietokannalle, että pitäisi saada tällainen lista. Tietokanta (esim. Oracle) vastaanottaa pyynnön, hakee kamat ja palauttaa ne takaisin CF:lle. CF jatkaa uusilla tiedoilla siitä mihin se jäi ja käsittelee sivun loppuun asti ja palauttaa valmiin, käsitellyn sivun HTML-muodossa webserverille. webserver saa palautteen CF:ltä ja pamauttaa sivun sellaisenaan takaisin selaimelle. ...noin niinkuin raa'asti yksinkertaistettuna
Perehdyin hieman tuohon PHP:llä tehtyyn koodiin (kiitos erilaisten keskustelupalstojen) ja sain tuon kielivalinnan toimimaan myös PHP:llä. Koodi menee kaikessa yksinkertaisuudessaan näin: <html> <body> <?php $kieli=$HTTP_ACCEPT_LANGUAGE; if ($kieli=="en") include("englanti.htm"); elseif ($kieli=="fi") include("suomi.htm"); elseif ($kieli=="sv") include("ruotsi.htm"); else include("englanti.htm"); ?> </body> </html> Tuo koodi sitten vain nimetään index.php ja laitetaan nettiin. Tietysti pitää olla nuo englanti.htm, suomi.htm ja ruotsi.htm tiedostot mukana samassa hakemistossa tai niiden osoite pitää määritellä tuohon koodiin. Ei siinä sen kummempaa taikaa sitten ollutkaan. Kiitän dRD:tä avusta ja neuvoista. Pääsin tavoitteeseeni. Vaikka välillä meinasi tulla kyllä itku silmään.
Apropoo. Tuli vielä yksi asia mieleeni. Mitenkähän pystyisin testaamaan tuon koodin toimivuutta? Onko ostettava lentoliput ja lennettävä amerikkaan vai pystynkö jotenkin muuttamaan jotenkin selaimen (MS Explorer 6) tai käyttöjärjestelmän (Windows 98) asetuksia siten, että sivut luulisivat minun olevan jostain ulkomailta. Jos pystyy, niin mitähän asetuksia minun olisi muutettava ja mistä? Tiedot olisivat taas kultaakin arvokkaampia.
Mozillalla helpointa, asetuksista pystyi muistaakseni ruuvaamaan tuota kielivalintaa suoraan suht vapaasti.