Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

Tweetalige site en layout ok?

Anoniem
None
13 antwoorden
  • Ik ben bezig met de layout voor een nieuwe website. De bedoeling is dat deze website tweetalig wordt, nl. Nederlands & Duits. Het betreft een site voor een grondverzet- en verhuurbedrijf. Dit is puur hobbymatig.

    De layout bestaat uit een container div van 900 pixels breed en 540 pixels hoog gecentreerd met daarin:

    -Header div met 2 links om van taal te switchen.
    Div bevat geen achtergrond.

    -Links een div met het logo van 166 pixels breed.
    Hierin staat een gedeelte van de afbeelding van een vrachtauto die van voren gefotografeerd is. De afbeelding is 166 pixels breed.

    -In het midden een div van 143 pixels breed die het menu bevat.
    Het menu heeft als achtergrond het andere stuk van de foto waar een blauwe rasterlaag over heen gelegd is. De foto is 143 pixels breed.

    -Rechts de content div die 590 pixels breed is. Div heeft een witte achtergrond

    -Onder een footer div die de copyright informatie bevat en een link naar de disclaimer. Div bevat geen achtergrond.

    [b:e4feca7ebd]Vraag 1: [/b:e4feca7ebd]
    Zal ik het logo div en menu div gelijke breed maken? Zal dat mooier lijken?

    [b:e4feca7ebd]Vraag2: [/b:e4feca7ebd]
    De site is 900 pixels breed en 540 pixels hoog. Op een resolutie van 1024x768 is de site goed te bekijken zonder scrollbalken. Op een resolutie van 1280 x 1024 wordt de site ook goed weergegeven. Ik neem aan dat dit goed is?

    [b:e4feca7ebd]Vraag 3:[/b:e4feca7ebd]
    Zoals gezegd wil ik de site tweetalig maken. Nu bevat de site zowel statische als dynamische pagina's. Statische pagina's zijn o.a. contactpagina, bedrijfsprofiel. Dynamische pagina's zijn o.a. nieuws, foto's.

    Nu had ik gedacht om in de root van de site 2 mappen te maken, nl. deutsch en nederlands. Vervolgens plaats ik alle pagina's in beide mappen.

    Bij de dynamische pagina's voeg ik in de dabasetabellen velden in waar ik de duitse tekst in kwijt kan. Ik hoef dan alleen die velden te wijzigen in mijn php pagina's.

    Verder zou ik het zo kunnen maken dat als een bezoeker het adres van de site in tikt dat je een welkomspagina krijgt met daarop de taalkeuze. Vervolgens wordt je doorgestuurd naar de betreffende indexpagina. De url zou er zo uit kunnen zien: http://www.mijnsite.nl/deutsch/index.php?page=home

    Of heeft iemand een beter idee?

    [b:e4feca7ebd]Vraag 4:[/b:e4feca7ebd]
    Het lijkt mij ook wel handig om een zoekformulier op te nemen op de site, zodat een bezoeker op de site kan zoeken. Kan ik dit oplossen met een zoekmachine of zal ik in de database laten zoeken?

    Als ik in de database laat zoeken kan ik statische pagina's ook in de database zetten?

    Helaas kan ik nog niets laten zien van de site, omdat ik eerst de layout klaar wil hebben. Als het bedrijf akkoord is met de layout dan zal ik een versie online plaatsen.

    Alvast bedankt voor het meedenken.
  • Taalkeuze kan het beste op elke pagina. Bijna niemand komt op een site via de home page, maar meestal midden in via bv google. Als je dan van taal wilt wisselen moet je eerst helemaal naar de homepage en dan maar hopen dat de betreffende pagina terug kunt vinden. Als een pagina maar in 1 taal is disable je de andere taal keuze. Voorbeeld: http://www.ch.ch/schweiz/00143/00152/index.html?lang=de is een 5 talige site.
    Als de taal verandert moet je ook de header aanpassen:
    [code:1:50efd799da]<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">[/code:1:50efd799da] en geen vlaggetjes voor de taalkeuze want dan worden de Zwitsers en de Belgen boos.
    Wimb
  • De site zal bestaan uit een index pagina die de complete layout bevat. Voor de menu links gebruik ik include, zodat alle opgevraagde pagina's in de content div komen te staan.

    De andere pagina's bevatten alleen de noodzakelijke code. Bijvoobeeld wil ik op home alleen afbeelding weergeven dan ziet de code er zo uit:
    [code:1:03115d9a5b]
    <img src="plaatje.jpg">
    [/code:1:03115d9a5b]
    En meer niet. Dus als iemand de site googled dan moet hij op een of andere manier altijd op de index pagina uit komen.

    De taalkeuze disablen kan niet op elke pagina omdat alleen de index pagina een link naar de verschillende talen bevat.

    Ik zit er over te denken om een cms te installeren om de content te kunnen beheren. Nu heb ik modx draaiende op mijn systeem. Kan ik eenvoudig mijn huidige layout geschikt maken voor modx?

    Ik heb mij enigzins verdiept in modx en van wat ik er van begrijp hoef ik alleen op een aantal plekken modx tags toe te voegen. Bijvoorbeeld in mijn content div neem ik de tag [*content*] op en dan komt automatisch de content daar te staan. Klopt het wat ik zeg?

    De website waar ik nu mee bezig ben is geen website die constant vernieuwd wordt. Ik verwacht dat alleen de nieuwspagina en de fotopagina af en toe ge-update worden. Misschien dat een cms helemaal niet nodig is en heeft iemand een idee hoe ik simpel een tweetalige site kan maken?
  • Er zijn naar mijn weten 3 (goede) manieren om een multi-language site te maken. Het is niet zo dat een van de oplossingen de beste is.. je moet per situatie kijken wat het beste past. Ik heb de oplossing met twee verschillende folders (die jij eerder noemde) niet meegenomen omdat ik deze erg slordig vind (ik vind dit als professionele programmeur eigenlijk geen oplossing, tenzij je er natuurlijk goede redenen voor zou hebben.. maar de enige reden die ik hiervoor kan bedenken is dat je structureel twee of meer verschillende sites hebt). De reden hiervoor is dat je bij aanpassing en dergelijke alles op meerdere plaatsen moet doen en je jezelf dus veel extra werk kan bezorgen.

    De basis van een multilanguage site is dat er een standaard taal is en dat er met behulp van cookies een andere taal ingesteld kan worden (dit wordt dus in php afgevangen). Hier zijn de oplossingen die ik gebruik:



    0. Voorbereiding
    De php code zal eerst de taal moeten instellen. Dat kan je zo doen:
    [code:1:b42ffdc00d]
    <?
    // Haal de taal uit de cookie. Als deze er niet is wordt een standaard taal gebruikt
    if (isset($_COOKIE["lang"]))
    $language = $_COOKIE["lang"];
    else
    $language = "NL";
    ?>
    [/code:1:b42ffdc00d]
    In dit geval wordt de code in de globale scope uitgevoerd. Als je nette code hebt zal dit NIET het geval zijn en moet je er dus "global $language" boven zetten (of nog beter je maakt er een functie of define van..). Ook zou je als de taal uit een cookie komt moeten controleren of hier een bestaande taal in staat.

    Tevens gebruik ik in mijn code $db. Dit is een wrapper class die ik altijd gebruik voor de database connecties. Een (hele) versimpelde versie ervan zou dit zijn:
    [code:1:b42ffdc00d]
    <?
    class databaseHandler
    {
    // De $connected variabele houdt bij of er al verbinding is gemaakt met de database
    private $connected = false;

    // De functie dbConnect() maakt verbinding met de database
    private function dbConnect()
    {
    // Als er nog geen verbinding is gemaakt, doe dat nu
    if (!$this->connected)
    {
    mysql_connect("host", "username", "password") or die("Unable to connect to database");
    mysql_select_database("database") or die("Unable to select database");

    // Zet connected op true.. bij de volgende query hoeft er niet opnieuw verbinding te worden gemaakt.
    $this->connected = true;
    }
    }

    // De functie query($query) zorgt dat er een database verbinding is en geeft de mysql result terug
    public function query($query)
    {
    // Als er nog geen verbinding is gemaakt, doe dat nu
    if (!$this->connected)
    $this->dbConnect();

    // Er is nu zeker een database verbinding, voer de query uit en geef het resultaat terug
    return mysql_query($query);
    }
    }
    ?>
    [/code:1:b42ffdc00d]
    (Untested)



    1. Vertalingen in de database
    Bij deze oplossing staan alle vertalingen in de database. Je bouwt een wrapper functie in php om de talen op te halen. Dit zou zoiets zijn:
    [code:1:b42ffdc00d]
    <?
    // Functie om een text te vertalen
    function getLanguage($text)
    {
    global $db, $language;

    // Haal de gevraagde vertaling op van de database voor de ingestelde taal
    $res = $db->query("SELECT lan_translation FROM tblLanguage WHERE lan_language='".$language."' AND lan_text='.$text."' LIMIT 0,1");

    // Als de vertaling bestaat, geef deze terug. Ander, geef een lege string terug
    if (mysql_num_rows($res)!=0)
    $translation = mysql_fetch_assoc($res);
    else
    return "";
    return $translation["lan_translation"];
    }

    // Roep de functie aan die de ingestelde text toont
    echo getLanguage("WELCOME_TEXT");
    ?>
    [/code:1:b42ffdc00d]
    In deze situatie wordt elke vertaling apart opgehaald.. wat een probleem zou kunnen worden wanneer je site druk bezocht wordt en je erg veel vertalingen op moet halen. Dit zou je dan weer op kunnen vangen door het iets anders te doen:
    [code:1:b42ffdc00d]
    <?
    // initialize haalt alle beschikbare vertalingen op
    function initialize()
    {
    global $db, $language, $translations;

    // Zet alle beschikbare vertaling in de actieve taal in een array
    $translations = array();
    $res = $db->query("SELECT * FROM tblLanguage WHERE lan_language='".$language."'");
    while ($u = mysql_fetch_assoc($res))
    {
    $translations[$u["lan_text"]] = $u["lan_translation"];
    }
    }

    // Toon de vertaling op het scherm
    echo $translation["WELCOME_TEXT"];
    ?>
    [/code:1:b42ffdc00d]
    Een nadeel hiervan is dan weer dat alle vertaling geladen worden.. ook die die niet gebruikt worden.
    Wat ik een groot voordeel vind van deze oplossing is dat doordat alles in de database staat het heel makkelijk is om een administratie formulier te maken waarin de talen aangepast kunnen worden of zelfs gemakkelijk toegevoegd kunnen worden. Het is echter niet een oplossing die ik bij grote of drukke sites gebruik.

    Deze uitwerking gaat uit van stukken tekst die je bijvoorbeeld in de header en tabel titels zet. Voor inhoud stukken zoals bijvoorbeeld nieuws-artikelen (dus eigenlijk dingen die module-specifiek zijn) zal je waarschijnlijk vaak een aparte tabel willen aanmaken. Deze kan je op dezelfde manier meertalig maken.

    Een groot voordeel van deze oplossing is dat het heel makkelijk is om in een database te zoeken. Denk er wel goed over na waarna je wil zoeken (een gebruiker zal niet op de titel van een kolom willen zoeken.. dit kan je bijvoorbeeld oplossen door prefixes of door een extra kolom die aangeeft of de vertaling zoekbaar is). Bij deze oplossing is het veruit het makkelijste om een vervangende vertaling (uit een andere taal) te gebruiken indien die van de opgegeven taal niet beschikbaar (of leeg) is.



    2. Vertaling in php file middels DEFINE
    In deze oplossing staan alle oplossingen in een php file die geinclude wordt. Je zou dus een "languages" folder maken waarin alle vertalingen staan. Dus iets in de geest van:
    [code:1:b42ffdc00d]
    <?
    // Open het bestand met de vertalingen
    include("languages/lang-".$language.".php");

    // Toon de vertaling op het scherm
    echo WELCOME_TEXT;
    ?>
    [/code:1:b42ffdc00d]
    In lang-NL.php staat dan:
    [code:1:b42ffdc00d]
    <?
    // Defineer hier alle vertalingen
    define("WELCOME_TEXT", "Bla bla bla");
    define("GOODBYE", "Good bye!");
    ?>
    [/code:1:b42ffdc00d]
    Een voordeel van deze methode vind ik dat je de vertalingen netjes en overzichtelijk in aparte bestanden hebt staan (ook makkelijk als je iets wil laten vertalen!). Een nadeel vind ik dat het foutgevoelig is op het moment dat je een text twee keer instelt (afhankelijk van je php instellingen). Dat kan wenselijk zijn maar mocht het in een live situatie voorkomen dan is het naar als je script eruit vliegt (wederom.. afhankelijk van je php instellingen / als dit niet het geval is wordt de eerste vertaling gebruikt). Tevens is het voor mijn gevoel een beetje een nare oplossing om define's te gebruiken voor vertalingen omdat deze constanten voor mij gevoelsmatig een ander doel hebben.. maar dat kan voor jou natuurlijk anders liggen. Bij deze oplossing is het wel praktisch onmogelijk om te waarden te doorzoeken.



    3. Vertaling in php file middels arrays
    OPMERKING: Een vergelijkbare oplossing is het gebruik van .ini files (deze zal ik daarom niet specifiek uitleggen).. maar mijn persoonlijke voorkeur gaat uit naar deze oplossing omdat je naar mijn mening meer controle houdt. Wel zijn .ini files makkelijker vanuit de code aan te passen. Ik weet niet wat het verschil in performance is.

    Ook in deze oplossing staan alle vertalingen in php files.. dus ook weer in een "languages" folder. Een belangrijk verschil is dat het vertalen aan het eind van het script gebeurd (in tegenstelling tot de vorige oplossingen) en de rekenkracht dus ook alleen gebruikt zal worden als er daadwerkelijk een vertaling gebruikt wordt (stel dat je een redirect doet ofzo dus niet / ik houd er zelf er van om mijn code zo te schrijven dat iets pas gebeurd als het ook echt nodig is). Voorwaarde is dan ook dat je de inhoud van de html eerst naar de buffer schrijft, daarna vertaald en naar de gebruiker stuurt. Dit is een voorbeeld:
    [code:1:b42ffdc00d]
    <?
    // De functie translatePage($page) voert de vertaling uit
    function translatePage($page)
    {
    // Open het bestand met de vertalingen
    include("languages/lang-".$language.".php");

    // Vertaal de pagina en geef het resultaat terug
    return str_replace(array_keys($translations), array_values($translations), $page);
    }

    // Zorg dat php de output naar de buffer schrijft
    ob_start();

    // Zet de te vertalen text in de buffer
    echo "WELCOME_TEXT";

    /* Hier kunnen andere dingen gedaan worden in je script (waarschijnlijk in een module) */

    // PHP komt aan bij het eind van het script. Het is nu zeker dat de pagina vertaald moet worden
    echo translatePage(ob_get_clean());
    ?>
    [/code:1:b42ffdc00d]
    In het bovenstaande voorbeeld staat een zo simpel mogelijke weergave van deze oplossing. Wanneer ik deze gebruik staan deze dingen in meerdere classes om de code overzichtelijk te houden.

    Als je de mogelijkheid wil hebben om een losse vertaling op te halen kan je het includen van de bestanden met de vertalingen in een aparte functie zetten (met dezelfde structuur die de databaseHandler gebruikt om te controleren of de database connectie al bestaat).

    lang-NL.php ziet er nu als volgt uit:
    [code:1:b42ffdc00d]
    <?
    // Defineer hier alle vertalingen
    $translations = array(
    'WELCOME_TEXT' => 'Bla bla bla',
    'GOODBYE' => 'Good bye!',
    );
    ?>
    [/code:1:b42ffdc00d]
    Hierbij geldt hetzelfde voordeel als bij de tweede oplossing namelijk dat de vertalingen netjes en overzichtelijk in aparte bestanden staan. Een nadeel bij die oplossing was mogelijkheid voor foutgevoeligheid. Deze is hier niet aanwezig.. maar wees er wel op verdacht dat wanneer je een dubbele vertaling zou hebben, de laatste gebruikt wordt. Dit is een oplossing die ik graag gebruik. Ondanks dat er wat meer overhead is vind ik het erg fijn dat je zelf erg veel controle hebt over wat er gebeurd.



    Voor oplossingen 2 en 3 geldt dat het mogelijk is om meerdere bestanden te maken voor dezelfde taal (iets wat ik zelf graag doe) voor meerdere levels. Ik heb hierbij zelf altijd 3 of 4 language files die ge-include worden: 1 op globaal niveau, 1 op thema niveau, 1 op module niveau, en soms 1 met informatie over de talen zelf. Op die manier zorg je dat de benodigde vertalingen aanwezig zijn maar dat niet te veel onnodige vertalingen geladen worden. Dit zorgt wel dat je wrappers wat uitgebreid moeten worden maar als je een beetje kan programmeren is dat geen probleem.

    Bij oplossing 3 maak ik dus gebruikelijk van meerdere includes (niet in het voorbeeld hierboven maar in mijn eigen scripts).. daarbij is het dan wel handig dat je (door een array_push()) een grote array van vertalingen maakt.



    De gegeven voorbeelden dienen als "proof of concept". De voorbeeldcode is NIET geheel getest. Neem deze niet klakkeloos over en denk goed over je structuur na!! Op mijn sites staan deze op de goede plekken in classes (die overerven van abstracte classes)! Tevens is er in de gebruikte voorbeelden sprake van een (te) beperkte foutafhandeling.

    In de voorbeelden hierboven is zoals eerder gezegd sprake van een hele simpele structuur. Als je de 3-level-structuur zou gebruiken die ik ook gebruik zou ik de "text" namen een prefix geven.. bijvoorbeeld "CMS_Page_Title", "MyFirstTheme_Menu_Bar_Title" en "Module_Frontpage_Welcome_Text". Tevens houdt ik er zelf van om de te vertalen texten in te pakken in "{{" en "}}".. dus:
    [code:1:b42ffdc00d]
    echo "{{Module_Frontpage_Welcome_Text}}";
    [/code:1:b42ffdc00d]
    Op deze manier voorkom je dat iets per ongeluk vertaald wordt of dat de inhoud van een vertaalde text opnieuw vertaald wordt (of vergelijkbare problemen).

    Dan wil ik nog even benadrukken dat het met heel veel dingen niet zo is dat er een goede en foute aanpak is.. maar denk er goed over na waarom je een bepaalde aanpak wil gebruiken! Denk bij het kiezen van een oplossing dus goed na over wat je wil bereiken! Moet het systeem super high-performance zijn, of mag het ook net ietsje minder zodat je in de code meer duidelijkheid hebt en het gemakkelijker kan bewerkt en uitbreiden? Mijn ervaring leert dat het belangrijk is om hier een goede afweging in te maken. Zoals eerder vermeld heeft de derde oplossing wat meer overhead maar dat weegt naar mijn mening niet op tegen het gemak dat zit met zich mee brengt. Ook is het natuurlijk mogelijk om een combinatie te maken van oplossingen. Ik gebruik vaak oplossing 3 voor vaste teksten (zoals pagina titel, kolom titels of andere vaste namen), oplossing 1 voor dynamische elementen (zoals nieuws artikelen, een gastenboek (waar er dus eigenlijk per taal een gastenboek is) of beschrijvingen van artikelen) en ook vaak oplossing 1 voor lange stukken tekst (zoals een artikelen op je pagina / omdat op deze manier de module makkelijk herbruikt en uitgebreid kan worden en er makkelijk gezocht kan worden).



    Als je verder nog vragen hebt hoor ik het wel.. maar ik denk dat je hiermee wel een stuk op weg kan (ik hoop dat je door de bomen het bos nog ziet ;)).
    (het is laat dus ik hoop dat er niet te veel spelfouten in staan (a))

    Succes ;)
  • Bedankt voor de uitgebreide reactie. Echt geweldig. Hier kan ik mee verder.

    Ik had zelf gedacht om twee taal pagina's (de.php en nl.php) te maken en daar alle vertalingen in te zetten van de statische pagina's. Voor de rest wil ik alle dynamische pagina's in de database gaan zetten.

    Alleen het navigatiemenu zou ik principe ook in een database tabel menu gezet kunnen worden.

    Ik ga er mee aan de slag.
  • Kijk ook eens naar standaardoplossingen zoals getText. Deze zijn speciaal bedoeld voor vertalingen van teksten in PHP
  • Ik heb op mijn site 2 vlaggetjes, nl. Duits en Nederlands. D.m.v. de volgende url wordt de taal ingesteld.

    index.php?lang=nl
    index.php?lang=de

    Als een bezoeker de duitse taal wenst dient hij deze zelf te kiezen. Wordt er geen keuze gemaakt dan word de nederlandse taal geladen. Ik had gedacht om de taalkeuze op te slaan in een cookie.

    Zie hier het script:
    [code:1:2fd0f213e6]
    if(!isset($_GET['lang']))
    {
    $lang='nl';
    setcookie ('language',$lang);
    }
    else
    {
    $lang = $_GET['lang'];
    setcookie ('language',$lang);
    }
    $dir = 'lang/';
    include ($dir.$lang.'.php');
    [/code:1:2fd0f213e6]

    nl.php
    [code:1:2fd0f213e6]
    <?php

    // makkelijkst opbouwen met $paginanaam['locatie']['titel']

    $home['header']['titel'] = 'Welkom op onze website !';
    $home['body']['content'] = 'Dit is een meertalige website !';

    $index['menu']['home'] = 'Home';
    $index ['menu']['bedrijfsprofiel'] = 'Bedrijfsprofiel';
    $index ['menu']['grondverzet'] = 'Grondverzet';
    $index ['menu']['transport'] = 'Transport';
    $index ['menu']['verhuur'] = 'Verhuur';
    $index ['menu']['nieuws'] = 'Nieuws';
    $index ['menu']['fotos'] = 'Foto's';
    $index ['menu']['links'] = 'links';
    $index ['menu']['contact'] = 'Contact';

    $nieuws ['header']['titel'] = 'Nieuwsberichten';

    ?>
    [/code:1:2fd0f213e6]

    de.php
    [code:1:2fd0f213e6]
    <?php

    // makkelijkst opbouwen met $paginanaam['locatie']['titel']

    $home['header']['titel'] = 'Herzlich wilkommen auf unseren Homepage !';
    $home['body']['content'] = 'This is a multi language page !';

    $index['menu']['home'] = 'Home';
    $index ['menu']['bedrijfsprofiel'] = 'Uber uns';
    $index ['menu']['grondverzet'] = 'Erdbewegung';
    $index ['menu']['transport'] = 'Transport';
    $index ['menu']['verhuur'] = 'Vermietung';
    $index ['menu']['nieuws'] = 'Die Nachrichten';
    $index ['menu']['fotos'] = 'Die Bilder';
    $index ['menu']['links'] = 'links';
    $index ['menu']['contact'] = 'Kontakt';

    $nieuws ['header']['titel'] = 'Die Nachrichten';
    ?>
    [/code:1:2fd0f213e6]

    $index verwijst naar de betreffende pagina. Op de betreffende pagina zet ik dan <?php echo $index ['menu']['contact'] ?> Dit werkt perfect. Standaard krijg ik de nl taal. Klik ik nu op het duitse vlaggetje dan wordt het menu in het duits en home in het duits weergegeven.

    Voor het ophalen van de pagina's via de menu links gebruik ik:
    [code:1:2fd0f213e6]
    if(!isset($_GET['page']))
    {
    $page='home';
    }
    elseif(strtolower($_GET['page']) == "index")
    {
    $page='home';
    }
    elseif(!file_exists($_GET['page'] .".php"))
    {
    $page='home';
    }
    else
    {
    $page=$_GET['page'];
    }

    ?>
    [/code:1:2fd0f213e6]

    Ik heb de cookie een naam (language) gegeven. Deze heb ik m.b.v. echo $language proberen uit te lezen dan blijkt deze leeg te zijn.

    Waarschijnlijk wordt de cookie niet ingesteld.

    Wat gaat er verkeerd?
  • [quote:f7c3e86e72="rolla"]
    Ik heb de cookie een naam (language) gegeven. Deze heb ik m.b.v. echo $language proberen uit te lezen dan blijkt deze leeg te zijn.

    Waarschijnlijk wordt de cookie niet ingesteld.

    Wat gaat er verkeerd?[/quote:f7c3e86e72]

    Wanneer probeer je de cookie uit te lezen? Dat kan pas na een refresh van de pagina wanneer de cookie geset is.

    Hoe lees je de cookie precies uit? eventueel kun je met de webdeveloper toolbar bekijken of de cookie inderdaad geset is en hoelang deze geldig is.

    Op zich werkt deze manier natuurlijk prima, al vind ik het persoonlijk niet altijd even gemakkelijk onderhoudbaar. Overigens kleeft er een nadeel aan deze situatie en dat is dat de Duitstalige (dit geld natuurlijk voor alle niet-standaard talen) nu niet door een zoekmachine geïndexeerd zal worden omdat de zoekmachine alleen de standaardversie voorgeschoteld zal krijgen. Ook zal de site voor mensen die een link kopiëren ook weer naar de standaard-taal gezet worden, dat kan voor verwarring zorgen.

    Dat kun je oplossen door de taal gewoon in de URL te zetten: bijvoorbeeld.

    http://mijndomein.nl/en/bla
    http://mijndomein.nl/du/woei

    etc.
  • Ik heb even gezocht op internet en ik heb een fout gemaakt.

    Ik had echo $language; i.p.v. echo $_COOKIE["language"]; Zodra ik nu de taal op duits instel wordt 'de' opgeslagen in een cookie. En kies ik nederlands wordt 'nl' opgeslagen. Dus dat met die cookie werkt wel.

    Echter klik op bijv nieuws wordt keurig netjes 'de' getoond, maar het menu veranderd weer in nederlands.

    Dat van die taal in de url zetten begrijp ik niet helemaal. Zou je dat iets specifieker kunnen uitleggen?

    Uiteindelijk wil ik graag dat een url zoals
    www.mijnsite.nl/index.php?lang=nl&page=home getoond wordt als www.mijnsite.nl/nl/home
  • In de situatie zo als hij nu is index.php alleen fysiek aanwezig in de Nederlandse taal. Pas als de bezoeker Duits kiest wordt alles vertaald naar Duits.

    Wat Japaveh hier boven ook al aan geeft is dat de zoekmachines de Duitse versie van de site niet kunnen indexeren. Waarschijnlijk omdat deze fysiek niet bestaat??

    In de praktijk moet het zo zijn dat als een Duitse bezoeker Duitse woorden in geeft in zijn zoekmachine hij ook onze site in de zoekresultaten ziet staan.

    Ik ga het als volgt oplossen:
    Ik ga 2 mappen maken, nl & de. In beide mappen komt een bestand index.php. D.m.w. een intro pagina kan de bezoeker zijn eigen taal kiezen.
  • Die oplossing van 2 verschillende index.php is niet goed. Daar is namelijk niet goed te onderhouden. Je kunt beter, zoals je nu al gedaan hebt, de teksten vertaald in een array opslaan en op basis van de keuze van de gebruiker de juiste taal kiezen.

    Deze keuze wordt door middel van een vlaggetje gemaakt en leidt tot een andere URL. Voorbeeld:

    http://mijnsite.nl/en/welcome
    http://mijnsite.nl/nl/welkom

    Dit lijken dan weliswaar 2 subdirectory's maar dat is een truc. Je kunt dit namelijk met een simpele mod-rewrite realiseren. Wat er dan gedaan wordt is dat

    http://mijnsite.nl/en/welcome wordt omgeschreven naar http://mijnsite.nl/index.php?lang=en&page=welcome

    Je hebt daarbij maar 1 simpele rewrite-rule nodig en de benodigde variabelen lees je uit met PHP.

    Je hebt nu maar 1 index.php nodig maar het lijkt alsof je 2 verschillende sites hebt. Google en co kunnen nu beide indexeren je wordt dus gevonden zoektermen in beide talen.
  • Nadat ik mijn bericht geplaatst had en nog wat op internet zat te zoeken kwam ik er achter dat dit ook met een mod_rewrite kan.

    Metatags dan ook maar includen?

    Ik gebruik in mijn menu de volgende urls:
    [code:1:4f74604d6a]
    <li><a href="index.php?lang=<?php echo $_COOKIE["language"]?>&page=bedrijfsprofiel"><?php echo $index['menu']['bedrijfsprofiel']?></a></li>
    [/code:1:4f74604d6a]

    Als ik op het duitse vlaggetje klik en ik kies in het duitstalige menu die nachrichten dan verschijnt rechts keurig netjes de duitse taal. Echter het menu wordt weer in het nederlands weergegeven.
  • Dat komt omdat je het menu op basis van de cookie opbouwt en de waarde van de cookie pas na een refresh wordt veranderd.

    Ik zou trouwens niet direct het cookie in het menu gebruiken. Ten eerste geeft dit een beveilingslek maar ten tweede zit je met het probleem dat de waarde pas na een refresh veranderd.

    Je kunt beter een systeem gebruiken waarbij je in het begin van je script de taal uit de URL haalt en die gebruikt om je menu op te bouwen. Omdat je nu immers gebruik maakt van de taal in de URL heb je de cookie eigenlijk helemaal niet meer nodig.

    Je kunt de cookie wel gebruiken om een defaulttaal te selecteren wanneer iemand voor het eerst op pagina komt. Wanneer iemand van taal wil wisselen (door op een vlaggetje te klikken) dan verander je gewoon de waarde van de cookie.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.