Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[JS] taaldetectie en redirect + knoppen

Pagina: 1
Acties:

  • honda4life
  • Registratie: Januari 2007
  • Laatst online: 22:22
Beste tweakers,

Eerst en vooral mijn beste wensen voor het nieuwe jaar.
Ik ben bezig aan een kleine website met 3 talen. In totaal bevat de site maar 6 pagina's.

Nu is deze site wel meertalig, en ik zou graag een taaldetectie toepassen om zo de bezoeker naar de juiste pagina door te sturen.
De hoofdtaal blijft nederlands, dus deze pagina is ook de index.
Verder heb ik het volgende script gebruikt voor een redirect naar de juiste taal:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script LANGUAGE="JavaScript">
if (navigator.appName == 'Netscape')
    var language = navigator.language;
else
    var language = navigator.browserLanguage;

if ((language.indexOf('en') > -1) && (document.location.href.indexOf('index_en.htm') == -1))
    document.location.href = './index_en.htm';
else if ((language.indexOf('fr') > -1)  && (document.location.href.indexOf('index_fr.htm') == -1))
    document.location.href = './index_fr.htm';
else if ((language.indexOf('nl') > -1)  && (document.location.href.indexOf('index.htm') == -1))
    document.location.href = './index.htm';
else if (document.location.href.indexOf('index.htm') == -1)
    document.location.href = './index.htm';
</script>


Indien dit script z'n werk niet doet moet de pagina de nederlandse zijn, dit lijkt me geen probleem in dit geval. Om deze reden gebruik ik ook geen indexpagina die een redirect doet naar één van de talen.
Ook betwijfel ik of de website dan nog zo SEO-friendly zou zijn op die manier.
Tot hier toe is dit een goede oplossing.

Maar... Ik voorzie ook 3 vlagjes om manueel van taal te wisselen. Deze links doen hun werk wel, maar het scriptje stuurt je weer terug van waar je komt.

Wie heeft tips om dit beter te implementeren? Een globale variabele tussen m'n webpagina's zou voldoende moeten zijn = cookie? (waar ik verder geen nood aan heb).
Aan een CMS dat dit voor mij doet heb ik niks. Hoe graag ik dit zelf ook zou willen het is geen mogelijkheid helaas.

Edit:
Leuk scriptje gevonden maar weer afhankelijk van externe bron:
http://jsfiddle.net/seYLA/

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
honda4life schreef op zondag 13 januari 2013 @ 19:35:
Tot hier toe is dit een goede oplossing.
Nou, nee; niet echt. Naast het feit dat je vreselijk smerige user agent sniffing aan het doen bent om te bepalen hoe je de browser taal uit gaat lezen, breekt dit soort redirect scripting sowieso de back button.

Als je taal detectie wilt gebruiken met een redirect naar een sub segment van je site dat in een bepaalde taal beschikbaar is, pik dan gewoon aan de server kant de daarvoor bestemde Accept-Language HTTP header op en voer vanuit de server een temporary redirect uit met een 302 status. Aangezien nederlands je leidende taal is, dan redirect je standaard naar de NL pagina's wanneer deze header ontbreekt of een waarde heeft waar je niet aan kunt voldoen. (Hoewel het vanuit internationaal oogpunt misschien slimmer zou zijn om toch engels te kiezen, of misschien om geo-locatie op basis van IP te gebruiken...)

Als een gebruiker expliciet een taal kiest via het taalkeuze menu van jouw site, dan zet je een cookie met deze selectie. Dit kun je aan de server kant zien en je kunt er op reageren door bijv niet meer te redirecten als je al op die taal zit.

[ Voor 8% gewijzigd door R4gnax op 13-01-2013 23:50 ]


  • martin149
  • Registratie: Augustus 2009
  • Laatst online: 03-11 22:01
Als een behoorlijk vergelijkbaar geval regel ik de mobiele gebruikers via php. Als een gebruiker binnenkomt die wordt herkend als mobiel, dan serveer in de mobiele site, zo niet dan krijg je de normale pagina voor je snufferd.

Als een persoon toch de andere pagina wil bekijken, wordt er eerst een cookie geplaatst, waarna er vervolgens wordt gerefreshed. Nu wordt door php vanwege de cookie de juiste pagina geserveerd.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
function mobile_detection() {
    if ($_COOKIE['mobile'] == "0"){
        return false;
    }

    if ($_COOKIE['mobile'] == "1"){
        return true;
    }
    

    
    $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (in_array(substr($user_agent, 0, 4), $prefixes)) {
        return true;
    }
    
    //enz........
    
    return false;
}
?>


HTML:
1
<a onclick='document.cookie="mobile=1;path=/;expires=Tue, 01-01-2030 00:00:00 GMT"; location.reload(true);' href="">