Avatar billede KHHP Juniormester
16. maj 2012 - 22:56 Der er 8 kommentarer

Multilanguage side

Hej
Jeg er igang med at "eksperimentere" rundt med language detection i en kombination af JavaScript og PHP. Indtil videre har jeg lavet dette:
<?php
session_start();
if (isset($_SESSION['lang'])){
    $sprog = $_SESSION['lang'];
}
else {
    $sprog = '<script type="text/javascript">if (navigator.systemLanguage==\"da\") window.location.href=\"da.php\"
    else window.location=\"en.php\"</script';
}
?>

Og mine filer man i else skal sendes videre til, ser således ud:
<?php
$_SESSION['lang'] = "da";

header('Location: index.php');
?>

Så for kort at opsumere, så har jeg lavet et system der fastsætter sproget via sessions, og denne sessions værdi fastsættes i PHP, vha. JavaScript, som finder brugerens systemsprog og sender dem til den rigtige side. På den side de bliver sendt til, oprettes deres language-session og de sendes igen til index.php, hvor der tjekkes om session for sproget er sat. Hvis session ikke er sat, så bliver variablen $sprog sat til det javascript der skal finde sproget.
For at få udført mit javascript hvis session ikke er sat, så har lavet følgende i <head></head>

<?php
if ($sprog != $_SESSION['lang']) {
    echo $sprog;
}
?>

Mit spørgsmål er så nu om der er en bedre, og måske også nemmere måde at lave det på?
Avatar billede olsensweb.dk Ekspert
17. maj 2012 - 08:39 #1
jeg undres, hvorfor vil du blande JS ind i det ??
kig på $_SERVER["HTTP_ACCEPT_LANGUAGE"]
prøv at google php client language
Avatar billede DeeDawg Nybegynder
17. maj 2012 - 08:58 #2
Vil give ronols ret. Det er ganske ikke vidst ikke garanteret at alle browsere vil sende Accept-Language headeren, da det er noget du som bruger let kan slå fra. Men da alle moderne browsere har det slået til som standard, må vi vist gå ud fra at de fleste brugere ikke har været derinde og pille.

Skulle der sidde en enkelt fortabt sjæl, er det ikke dit job at servicere ham. Hvad du bør gøre er, at stille manual sprogskift til rådighed også.

Derudover, vil jeg fraråde dig at bruge den fremgangsmåde du viser for da.php og en.php. Det er fuldstændigt unødvendigt at skulle sende folk videre til en anden fil og tilbage igen, for en så simpel opgave. Du bemærker det måske ikke da det er så ubeskriveligt lidt, men det giver faktisk også dårligere performance. Det kan dog kraftigt mærkes på store sider med masser af trafik. :)
Avatar billede KHHP Juniormester
17. maj 2012 - 10:42 #3
Ok. Så i teorien ville dette virke

<?php
if(isset $-SERVER["HTTP_ACCEPT_LANGUAGE"] == "da-dk")) {
$_SESSION['lang'] = "da";
}
else {
$_SESSION['lang'] = "en";
}
?>

i stedet for at bruge det jeg havde skrevet før.
Avatar billede DeeDawg Nybegynder
18. maj 2012 - 20:31 #4
Ja, om du bruger sessions eller cookies til denne opgave er sådan set op til dig. Det er måske ikke relevant for dig, men du skal jo huske på at sessions gemmer data både hos brugeren og på din server. Cookies er data, der kun bliver gemt hos brugeren, som serveren kan læse. Personligt ville jeg vælge cookies, da dataen ikke har relevans for mig og mit website, og kun er til hjælp for brugeren. Igen, kan brugeren godt fravælge cookies, men jeg synes ikke det er dit problem i dette tilfælde. Læg dog mærke til at dette er min personlige holdning, og ikke skal læses som et råd.

Dog skal du huske at oplyse brugeren om at du gemmer cookies på deres computer, hvad de indeholder og hvad du benytter dem til, grundet den nye lov omkring dette, uanset om du bruger cookies eller sessions, da sessions som sagt også lægger data hos brugeren.

Udover det, skal du jo selvfølgelig have et eller andet form for system der udskriver på det rigtige sprog, men da det ikke er et del af spørgsmålet her, går jeg ud fra du har styr på det. :)
Avatar billede KHHP Juniormester
18. maj 2012 - 21:16 #5
ja, den del der henter indholdet på det rigtige sprog har jeg styr på. Men kan den f.eks. finde på at skrive accept_language til da eller dk hver for sig eller gør den det altid på den måde jeg har skrevet.
Nu har jeg ikke forstand på hvordan man bruger cookies, så jeg tror at jeg holder mig til sessions, medmindre at det er enormt nemt at integrere cookies på sitet,
Hvad mener du med at oplyse brugeren omkring hvad jeg bruger de cookies, jeg gemmer på deres maskinen, til. Det er vel logisk at jeg bruger det til at sørge for at de får deres foretrukne sprog hver gang de besøger min side.
Så hvis de skal oplyses om det, så skal jeg altså skrive i et menupunkt på siden, f.eks. en FAQ at vi bruger cookies og sessions til login, samt sprogvalg?
Avatar billede DeeDawg Nybegynder
19. maj 2012 - 00:54 #6
Loven foreskriver, at informationerne skal placeres på en side der er synlig og let tilgængelig, og at det er skrevet med let forståeligt sprog - altså ikke jura-sprog. Dette vil du normalt finde på en side kaldet Privacy Policy eller Privatlivspolitik. Er det kun informationer omkring cookies, vil jeg anbefale dig at kalde siden for noget i stil med Cookies på <dit domæne>.dk.

Du kan se 3 eksempler her:

http://www.google.dk/intl/da/policies/privacy/
http://www.dsb.dk/om-dsb/virksomheden/forretningsbetingelser/cookies-pa-dsbdk/
http://tdc.dk/publish.php?id=7802&dogtag=tdc_misc_art

Og du kan læse bekendtgørelsen her.
Avatar billede DeeDawg Nybegynder
19. maj 2012 - 03:10 #7
Hm, kan se at Eksperten.dk glemte at poste sidste halvdel af mit indlæg.


Cookies er lige så simpelt at arbejde med, som sessions. Du kan se et eksempel herunder, og se mere om det her.

Her har du en fungerende funktion du kan bruge i praksis til at udtrække det foretrukne sprog:

function get_language(){
    if(isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])){
        $userlangs = strtolower(preg_replace("#\s+/#", "", $_SERVER['HTTP_ACCEPT_LANGUAGE']));
        $userlangs = explode(",", $userlangs);
       
        foreach($userlangs as $userlang){
            $userlang = explode(";", $userlang);
            if(strpos($userlang[0], "da") !== false){
                return "da";
            } elseif(strpos($userlang[0], "en") !== false){
                return "en";
            } else {
                continue;
            }
        }
           
        return "en";
    } else {
        return "en";
    }
}

Og her kan du se den i brug med cookies:

<?php
    if(!isset($_COOKIE['lang'])){
        setcookie("lang", get_language(), time()+60*60*24*30, "/", "creativespectrum.dk");
        $sprog = get_language();
    } else {
        $sprog = $_COOKIE['lang'];   
    }
?>
Avatar billede KHHP Juniormester
07. januar 2014 - 17:12 #8
Hej. Beklager den meget lange responstid. Jeg har været travlt optaget i en periode og har glemt at vende tilbage til dette spørgsmål.
Din løsning kunne bruges til at lave noget meget brugbart, så hvis du lige smider svar ville det være fint.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester