stiansa Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Jeg er ute etter en måte å finne det foretrukne språket til webbesøkeren. Ved å bruke request.serverVariables("HTTP_ACCEPT_LANGUAGE") så får man i svar f.eks. "no" (norwegian), "en-gb" (english-great britain), "en-us" (english-united states), osv., men det er ikke anbefalt å benytte seg av denne metoden alene. Jeg har også sett på javascript-variabelen navigator.browserLanguage, men jeg vil helst unngå klientside-script. Jeg skal nemlig rute surferen til ulike URL-er avhengig av hvilket språk han/hun foretrekker. Jeg skal selvsagt holde muligheten åpen for brukeren å overstyre forslaget, i tilfelle scriptet ikke treffer riktig. Er det noen som kan dytte meg i retning av et ASP-script som finner riktig språk med stor sannsynlighet? stian Lenke til kommentar
JohndoeMAKT Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Det første jeg tenker på er å bruke landet IP-kommer fra som primær valg, men dersom HTTP_ACCEPT_LANGUAGE er satt til noe annet bruker du istedet den. Lenke til kommentar
stiansa Skrevet 13. mars 2008 Forfatter Del Skrevet 13. mars 2008 Det første jeg tenker på er å bruke landet IP-kommer fra som primær valg, men dersom HTTP_ACCEPT_LANGUAGE er satt til noe annet bruker du istedet den. En ting er jo å lokalisere brukeren geografisk. Ved å bruke IP-adressen til dette finner man det ut med ca 99% nøyaktighet. En annen sak er hvilket språk brukeren bruker. Det er mange områder som har flere offisielle språk, f.eks. Canada (engelsk og fransk), Sveits (tysk, fransk og italiensk) og Belgia (nederlandsk, fransk og tysk). Slik jeg tenker hadde det mest ideelle vært å først sjekket HTTP-headeren, og så browser-språket. Men uten å bruke klientside-script. Går det an? -s Lenke til kommentar
JohndoeMAKT Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Vil ikke de to siste være det samme? Lenke til kommentar
stiansa Skrevet 13. mars 2008 Forfatter Del Skrevet 13. mars 2008 (endret) Vil ikke de to siste være det samme? Kanskje det, gitt... Jeg begynte å se på disse tingene nå i kveld, så jeg er litt på tynn is. Etter å ha lest denne artikkelen (http://www.w3.org/International/questions/qa-accept-lang-locales) en gang til, så tror jeg kanskje at jeg kan bruke bare HTTP-headeren allikevel. Slik, f.eks: if len(request.querystring("lang")) > 1 then ' 1. prioritet: querystring langCode = left(request.querystring("lang"), 2) session("lang") = langCode elseif len(session("lang")) > 1 then ' 2. prioritet: session-variabel langCode = left(session("lang"), 2) else ' 3. prioritet: HTTP-header langCode = left(request.serverVariables("HTTP_ACCEPT_LANGUAGE"), 2) end if select case langCode case "no" lang = "Velkommen, norske besøker!" case "en" lang = "Welcome, English visitor!" case else lang = "Velkommen, default-language-speaking visitor!" end select if-nøstet her muliggjør at brukeren kan overstyre HTTP-headeren og velge språk selv ved å klikke på en link som sender en språkkode til querystring-variabelen "lang" som deretter lagres i en session-variabel. I "select case langCode" er det kanskje mest hensiktsmessig å referere til ulike include-filer som inneholder nettstedets språk-variabler. Jeg tar gjerne imot tilbakemeldinger på løsningen min! stian Endret 13. mars 2008 av stiansa Lenke til kommentar
Manfred Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Hva gjør du da med denne headeren, dersom du ikke har "da" inne? Accept-Language: da, en-gb;q=0.8, en;q=0.7 ...som etter definisjonen betyr "I prefer Danish, but will accept British English and other types of English." Det kan være flere språk angitt i accept-language headeren. En annen ting: du tar left(.., 2). Er du 100% sikker på at alle språk er definert med to bokstaver? Lenke til kommentar
stiansa Skrevet 13. mars 2008 Forfatter Del Skrevet 13. mars 2008 Hva gjør du da med denne headeren, dersom du ikke har "da" inne? Accept-Language: da, en-gb;q=0.8, en;q=0.7 ...som etter definisjonen betyr "I prefer Danish, but will accept British English and other types of English." Det kan være flere språk angitt i accept-language headeren. Jeg var ikke klar over at accept-language kunne inneholde en kommaseparert liste. Men det er jo enkelt å putte det inn i en array, og starte fra toppen og bruke første språk man har inne. En annen ting: du tar left(.., 2). Er du 100% sikker på at alle språk er definert med to bokstaver? Jeg har ikke sett noen eksempler på at det brukes mer enn to tegn for å referere til et språk. Se her, f.eks.: http://www.loc.gov/standards/iso639-2/php/code_list.php. Jeg går ut ifra at det er ISO 639-1 som brukes, og ikke ISO 639-2. Hvis man skal ta høyde for at brukeren har flere språk definert i sin accept-language, så kan jeg jo selvsagt ikke bruke left() der. stian Lenke til kommentar
Manfred Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 Spørsmålet er om du skal ha nynorsk og bokmål også da at du må lese 2-5 bokstaver (avhengig av om det er angitt dialekt). no-nb og no-nn, eller om det bare er no Lenke til kommentar
stiansa Skrevet 14. mars 2008 Forfatter Del Skrevet 14. mars 2008 Spørsmålet er om du skal ha nynorsk og bokmål også da at du må lese 2-5 bokstaver (avhengig av om det er angitt dialekt). no-nb og no-nn, eller om det bare er no Nei, jeg holder meg til hovedspråket, tenker jeg. -s Lenke til kommentar
Manfred Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 Nå kommer du med enkle løsninger her, synes jeg Men tilbake til flere språk. I f.eks Operaen min sender jeg language slik: nb-NO, nb;q=0.9, no-NO;q=0.8, no;q=0.7, en;q=0.6 (Dette er jo SÅ mye enkere i .net: string[] Request.UserLanguages) Lenke til kommentar
ilpostino Skrevet 2. juni 2008 Del Skrevet 2. juni 2008 jeg vet det er mulig å sende info fra klientside til serverside ved hjelp av sessions. var litt knot i begynnelsen men gikk greit. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå