|
| Automatisk valg af sprog Fra : Martin Kristensen |
Dato : 01-07-03 11:26 |
|
På min aktuelle hjemmeside understøtter jeg flere sprog.
Det fungerer p.t. sådan, at default-sproget er dansk - og brugeren
skal så vælge hvis han vil se siderne i et andet sprog, ved at klikke
på et flag svarende til det pågældende sprog (engelsk, tysk etc.).
Jeg har bemærket at nogle sites fungerer således, at brugerens
browserindstillinger aflæses til at automatisk give brugeren det sprog
som han helst vil have. Så kan man altid give ham muligheden for at
vælge et andet ved "flag-metoden".
Hvordan laver jeg sådan en aflæsning af browserindstillingerne og får
vist den rigtige startside afhængig af favorit-sprog-indstillingerne ?
Hilsen,
Martin
| |
Jonas Jalling (01-07-2003)
| Kommentar Fra : Jonas Jalling |
Dato : 01-07-03 11:49 |
|
Martin Kristensen wrote:
> På min aktuelle hjemmeside understøtter jeg flere sprog.
>
> Det fungerer p.t. sådan, at default-sproget er dansk - og brugeren
> skal så vælge hvis han vil se siderne i et andet sprog, ved at klikke
> på et flag svarende til det pågældende sprog (engelsk, tysk etc.).
>
> Jeg har bemærket at nogle sites fungerer således, at brugerens
> browserindstillinger aflæses til at automatisk give brugeren det sprog
> som han helst vil have. Så kan man altid give ham muligheden for at
> vælge et andet ved "flag-metoden".
>
> Hvordan laver jeg sådan en aflæsning af browserindstillingerne og får
> vist den rigtige startside afhængig af favorit-sprog-indstillingerne ?
>
> Hilsen,
>
> Martin
Hej Martin,
Det er variablen $_SERVER[HTTP_ACCEPT_LANGUAGE] du skal kigge på. Den
indeholder hvilket sprog, som klienten bruger. F.eks: da, en, de, fr, it
.... osv.
--
Med venlig hilsen
Jonas Jalling
| |
Lars Dybdahl (01-07-2003)
| Kommentar Fra : Lars Dybdahl |
Dato : 01-07-03 11:51 |
|
Den kode som genereres af http://www.cat-photo.com/ er således:
$langs=explode(",",$_SERVER["HTTP_ACCEPT_LANGUAGE"]);
reset ($langs);
while (list($key,$value)=each($langs)) {
$cur=explode(";",$value);
$first=substr($cur[0],0,2);
if (strpos(" en,da,de",$first)>0) {
if ($first!="")
if ($first!="en")
Header ("Location: index-".$first.".php");
break;
}
}
I dette tilfælde akcepteres sprogene engelsk (en), dansk (da) og tysk (de),
og der viderestilles til den pågældende side. Sprogkoderne finder du her:
http://www.loc.gov/standards/iso639-2/langcodes.html
Hilsen,
Lars.
--
Freelance programmør
Programmering mod timebetaling
| |
Troels Arvin (01-07-2003)
| Kommentar Fra : Troels Arvin |
Dato : 01-07-03 11:58 |
|
On Tue, 01 Jul 2003 03:25:32 -0700, Martin Kristensen wrote:
> Hvordan laver jeg sådan en aflæsning af browserindstillingerne og får
> vist den rigtige startside afhængig af favorit-sprog-indstillingerne ?
Der er flere måder at gøre det på.
Et par hints:
En browser udsender HTTP-headeren "Accept-Language", når den
efterspørger en URL. Værdien af denne kan i PHP aflæses i
$_SERVER["HTTP_ACCEPT_LANGUAGE"].
Når en URL kan have forskelligt output alt efter hvad browserens
Accept-Language værdi havde, _skal_ URL'en udsende en header, der angiver
dette (således at caches har en chance for at operere nogenlunde
fornuftigt), fx. - i PHP:
<?php header('Vary: Accept-Language'); ?>
En Vary-header kan have flere værdier, hvis der varieres som funktion af
flere værdier (kunne fx. også være Accept-Encoding og lign.).
Bemærk, at en del brugere ikke har indstillet deres browser korrekt.
Derfor bør man overveje kun benytte ovenstående som _del_ af en
beslutningskæde mht. sprog-valg. Kæden kan også bruge informationer som
de følgende til at forsøge at foretage et godt gæt:
- Publikums domæne (hvis det ender på .dk er der en god chance
for, at der er tale om en dansker).
- Evt. tidligere valg, som brugeren har taget og gemt, enten via
eksplicitte bruger-indstillinger, hvis man har et brugersystem,
eller gemt i en cookie).
Hvis disse informationer benyttes, så husk at sætte URL'ens
caching-status til "Private", således at kun brugeren selv cacher, og
ikke evt. mellemliggende proxies:
<?php
header('Cache-Control: private'); // til moderne browsere
header('Pragma: no-cache'); // ad hensyn til gamle browsere
?>
/Troels
| |
Peter Brodersen (01-07-2003)
| Kommentar Fra : Peter Brodersen |
Dato : 01-07-03 23:36 |
|
On Tue, 01 Jul 2003 12:58:16 +0200, Troels Arvin <troels@itu.dk>
wrote:
>Værdien af denne kan i PHP aflæses i
>$_SERVER["HTTP_ACCEPT_LANGUAGE"].
... og gør man brug af den, bør man parse den hensigtsmæssigt. Et
simpelt tjek om den tilfældigvis lige er "da", vil ikke være nok.
Jeg ved dog ikke om der findes oplagte funktioner til dette - evt
PEAR-moduler...
--
- Peter Brodersen
| |
|
|