Ik heb met vanavond erbij 2 avonden zitten zoeken naar tutorials over hoe je je website meertalig kan maken. Ik heb 1 tutorial en 1 script gevonden die ik graag wil gebruiken maar ik weet niet goed hoe ik beiden kan combineren.

Ook zou graag willen dat de taal keuze van de bezoeker word opgeslagen.
Ik heb begrepen dat dat eventueel kan met sessies en/of een mysql database.

Script
Tutorial

De tutorial lijkt op de languages zoals in oscommerce word gebruikt.
Met het script heb ik een test site gemaakt dat werkt heel goed.
Maar hoe nu verder hoe kan ik met de voordelen van het script de vertaal manier gebruiken zoals in de tutorial?

En dan zou ik graag willen dat de taal keuze van de bezoeker word opgeslagen.

Hebben jullie tips en/of suggesties of voorbeelden hoe bovenstaande te verwezenlijken?
Als je je druk maakt over SEO (Zoekmachine optimalisatie) raad ik aan voor elke taal een eigen url te nemen.

Plaats dan bijv. ergens in je website een "vlaggetje" o.i.d. die verwijst naar de website met de andere taal.

Maak je je daar minder druk om, dan zou je in je PHP code (index.php) het volgende kunnen opnemen..

<?php

session_start();

// Stel standaard taal in (indien deze nog niet is ingesteld)
if(isset($_SESSION['language']) == false)
{
    $_SESSION['language'] = 'nl';
}

if(isset($_GET['language'])) // Kijk of de gebruiker de taal wil wijzigen
{
    $language= strtolower(trim($_GET['language']));

    if(in_array($language, array('nl', 'de', 'en'))) // Kijk of de taal beschikbaar is binnen deze website
    {
        $_SESSION['language'] = $language;
    }
}

?>


Je kunt in je template knopjes o.i.d. opnemen die verwijzen naar:
index.php?language=nl
index.php?language=de
index.php?language=en

Elke keer als je nu een stukje tekst uit een database o.i.d. wilt lezen, moet je de huidige taal controleren, en zorgen dat je het stukje tekst dezelfde taal heeft.
In die include files moet je alle variabelen definiƫren die tekst bevatten. Maar, zoek eens naar [google]Zend Translation[/google], volgens mij kun je daar automatisch je website mee vertalen.

Overigens zou ik de taal opslaan in een database. Die blijft daar, totdat jij 'm verwijderd, staan. Een sessie/cookie verloopt op een gegeven moment.
Bedankt voor jullie reacties

De gettext manier was ik al eens een uitlegje van tegen gekomen das wel interessant om eens te bestuderen maar ik was eigenlijk meer aan het zoeken hoe ik de oscommerce manier van taal selectie kon namaken.

Dus met verschillende talen bestanden voor je paginas b.v. /includes/languages/dutch/aboutus.php | /includes/languages/english/aboutus.php etc.

Het mooiste zou zijn als de bezoeker voor het eerst op mijn site komt de site in de taal van zijn browser krijgt te zien. Als de bezoeker niet nieuw is en ooit een taal gekozen heeft hij weer die gekozen taal instelling krijgt.

Ik begrijp dat je met sessies site wide je de taal keuze kan meenemen naar andere pagina's maar zodra de browser gesloten word is die sessie weg.

Bij oscommerce word je keuze onthouden waarschijnlijk door de sessie in een cookie op te slaan of op een of andere manier in de database wat natuurlijk nog mooier zou zijn voor bezoekers die cookies uitgeschakeld hebben.

Ik ben vanavond ook weer vele uren bezig geweest een dergelijk script of tutorial te vinden want ik ben nog een vreselijke php newbie helaas.
het verbaast me eigenlijk dat er nog nergens een complete uitleg of voorbeeld te vinden is. Misschien dat er eens iemand een complete tutorial hiervoor wil maken. Ik denk dat dat een behoorlijk succes zou kunnen worden.

Enfin als iemand van jullie zo'n tutorial weet of zin heeft zoiets te maken dat zou fantastisch zijn.
Ik heb afgelopen dagen al vanalles in elkaar geknipt/geplakt soms werkt het gedeeltelijk heel leuk maar net niet precies zoals ik het graag zou hebben zoals in oscommerce dus.

Ik heb nog wat met Pholeron session voorbeeld zitten stoeien en wat knip en plak werk uit een ander script onderstaande in elkaar gebrouwen wat al aardig in de richting werkt :) Nu zou het nog mooier zijn als de session inhoud in een cookie opgeslagen kon worden dus als iemand nog een hint heeft hoe je dit doet? En misschien zitten er nog fouten in onderstaande want ik weet eigenlijk maar voor 5% wat ik doe :D

<?php

session_start();

// Bevat de URL-variabele 'lang' niet minstens 2 tekens voor een
// korte taalcode, gebruik dan de HTTP-header 'Accept-Language':
if ((strlen($_SESSION['lang']) < 2) and (isset($_SERVER['HTTP_ACCEPT_LANGUAGE']))) {
    $_SESSION['lang'] = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
}

// $_SESSION['lang'] omzetten in kleine letters:
$_SESSION['lang'] = strtolower($_SESSION['lang']);

// Stel standaard taal in (indien deze nog niet is ingesteld)
if(isset($_SESSION['lang']) == false)
{
    $_SESSION['lang'] = 'en';
}

//-------
// Gebruik reguliere expressies om langere taalvoorkeuren
// te verwerken. Daarbij gaan we ervan uit dat de meeste informatie
// beschikbaar is in de standaardtaal Engels en er meer informatie
// beschikbaar is in de wereldtaal Frans dan het Nederlands:
    if (ereg("en", $_SESSION['lang'])) {
        $_SESSION['lang'] = "en"; // Engels
    } elseif (ereg("nl", $_SESSION['lang'])) {
        $_SESSION['lang'] = "nl"; // Nederlands
    } elseif (ereg("de", $_SESSION['lang'])) {
        $_SESSION['lang'] = "de"; // Duits
    } else {
        $_SESSION['lang'] = "en"; // Engels
    }
//-------

if(isset($_GET['lang'])) // Kijk of de gebruiker de taal wil wijzigen
{
    $lang= strtolower(trim($_GET['lang']));

    if(in_array($lang, array('nl', 'de', 'en'))) // Kijk of de taal beschikbaar is binnen deze website
    {
        $_SESSION['lang'] = $lang;
    }
}

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
	<title>Untitled</title>
</head>

<body>

<?php echo $_SESSION['lang']; ?><br><br>

<a href="?lang=nl">Nederlands</a> | <a href="?lang=en">English</a> | <a href="?lang=de">Deutch</a>

</body>
</html>
als je druk maakt over seo !
zou ik elke site op en eigen domein zetten.
dus duits op .de
en nl op .nl

dat is het beste :)
Over search engines maak ik me niet zo druk althans nog niet.
Je kan denk ik altijd nog gebruik maken van rewrite rules.

Wat ik lastiger vind op te lossen op dit moment is het opslaan van de taal keuze in een cookie.

En dan heb ik nog een probleem met de knoppen die tussen de talen schakelen.
Als ik bv naar /?pag=pag2 ga en dan op een taal klik dan moet ie ?lang=en achter /?pag=pag2 plakken dat doet ie nu niet waardoor de bezoekers telkens naar het begin van de site gaan en dan weer naar de pagina moeten gaan waar ze uiteindelijk op zaten. Ik zou willen dat de ?lang=en telkens achteraan de url word toegevoegd zodat je iets als /?pag=pag2&lang=en krijgt maar als je op de homepage bent ook /?lang=en nog gewoon werkt
Het opslaan van gegevens in een cookie is vrij simpel. PHP heeft de functie [php]setcookie[/php](); waarmee je eenvoudig een cookie kunt instellen.

Het uitlezen van een cookie kan met $_COOKIE['cookiename']

Zo geeft $_COOKIE['PHPSESSID'] je sessionid terug.


Als je je tekst uit een DATABASE wilt laden, kun je miss. een tabel opstellen die de volgende 3 kolommen bevat:

- PAGE (varchar of integer.. hangt er vanaf hoe je naar je pagina wilt verwijzen)
- LANG (varchar van 2 karakters)
- HTML De tekstuele inhoud

Vervolgens laad je de juiste tekst bij een pagina met een script als:

<?php

    // Maak verbinding met database
    mysql_connect(....);
    mysql_select_db(....);

    $sPageName = (empty($_GET['page']) ? 'Home' : $_GET['page']);
    $sHtml = getContent($sPageName);

    if($sHtml)
    {
        echo $sHtml;
    }
    else
    {
        echo '<p>Page not found.</p>';
    }

    function getContent($sPageName)
    {
        $sql = "SELECT `html` FROM `tabelnaam` WHERE `page` = '" . mysql_real_escape_string($sPageName) . "' AND `lang` = '" . mysql_real_escape_string($_SESSION['lang']) . "' LIMIT 1;";
        $rs = mysql_query($sql);

        if($r = mysql_fetch_assoc($rs))
        {
            return $r['html'];
        }
        else
        {
            return false;
        }
    }

?>

Ik heb het cookies probleem opgelost taal keuze word nu opgeslagen.
Nu moet ik nog dat url's probleem zien op te lossen.

@Pholeron
Ik heb je script dat je als laatste had gepost getest maar krijg dan een foutmelding: Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/test.kostons.net/test-2/index.php on line 37

Page not found.
Mogelijk geeft de mysql_query() een ERROR in plaats van een geldige RecordSet.

Er had beter kunnen staan (regel 22):

$rs = mysql_query($sql) or die('FILE: ' . __FILE__ . '<br>SQL: ' . $sql . '<br>ERROR: ' . mysql_error());
Nog ff over deze zin:

Over search engines maak ik me niet zo druk althans nog niet.
Je kan denk ik altijd nog gebruik maken van rewrite rules.


Het nadeel van zoekmachine-crawlers is dat deze geen SESSIE ondersteuning kennen. Het is daarom alleen mogelijk om de default taal te laten indexeren.

Als ze immers de pagina "index.php?page=contact" opvragen, wordt deze standaard in de default taal aangeboden omdat $_SESSION['lang'] altijd leeg is.

Stel dat je dit probleem weet te omzeilen door in ALLE urls binnen je website de parameter "&lang=NL" meet te geven (of welke taal je dan ook op dat moment gebruikt), kom je weer op een probleem...

Google bepaald de indexering van je pagina o.a. op de samenhang van de inhoud van je website.

Stel je hebt een website in 3 talen (NL, DE, EN), en elke taal heeft 10 dezelfde pagina's. En de website gaat bijvoorbeeld over fietsen..

Dan heb je 10 pagina's waar het woord 'fiets' in voor komt, maar 20 pagina's waar het woord 'fiets' niet in voor komt (hier staat namelijk Bike of Fahrrad in de plaats). Hierdoor scoren je website als totaal als het ware maar '33,3%' op het woord fiets. (alle beetjes helpen)

Had je geen andere talen binnen je domeinnaam, dan had je ook maar 10 pagina's met het woord fiets, maar niet de 20 pagina's zonder dat woord. Je website als totaal scoort dan '100%' op het woord fiets.

Daarnaast scoren .NL domeinnamen beter in de nederlandse zoekmachines, .DE beter in de duitse zoekmachines, en CO.UK beter in de engelse.. misschien iets om over na te denken.. Ook kun je in de Nederlandse URL het woord FIETS verwerken, waar je op de engelse site BIKE gebruikt.. nog weer een kleine verbetering voor je indexering
@Pholeron

De foutmelding die ik eerder melde kwam omdat in het script nog niet de table naam goed had ingevuld. Toen ik dat verholpen had kreeg ik "Page not found".

Ik heb nu je laatste toevoeging erbij gezet (regel 22) maar krijg nog steeds "page not found".

Het script ziet er als volgt uit

<?php
/*
Het opslaan van gegevens in een cookie is vrij simpel. PHP heeft de functie setcookie(); waarmee je eenvoudig een cookie kunt instellen.
Het uitlezen van een cookie kan met $_COOKIE['cookiename']
Zo geeft $_COOKIE['PHPSESSID'] je sessionid terug.

Als je je tekst uit een DATABASE wilt laden, kun je miss. een tabel opstellen die de volgende 3 kolommen bevat:
- PAGE (varchar of integer.. hangt er vanaf hoe je naar je pagina wilt verwijzen)
- LANG (varchar van 2 karakters)
- HTML De tekstuele inhoud

Vervolgens laad je de juiste tekst bij een pagina met een script als:

*/

    // Maak verbinding met database
    require('config.php');
    require('opendb.php');

    $sPageName = (empty($_GET['page']) ? 'Home' : $_GET['page']);
    $sHtml = getContent($sPageName);

    if($sHtml)
    {
        echo $sHtml;
    }
    else
    {
        echo '<p>Page not found.</p>';
    }

    function getContent($sPageName)
    {
        $sql = "SELECT `html` FROM `content` WHERE `page` = '" . mysql_real_escape_string($sPageName) . "' AND `lang` = '" . mysql_real_escape_string($_SESSION['lang']) . "' LIMIT 1;";
//        $rs = mysql_query($sql);
          $rs = mysql_query($sql) or die('FILE: ' . __FILE__ . '<br>SQL: ' . $sql . '<br>ERROR: ' . mysql_error());
        if($r = mysql_fetch_assoc($rs))
        {
            return $r['html'];
        }
        else
        {
            return false;
        }
    }

    require('closedb.php');

?>

De db connect bestanden die ik gebruik zouden goed moeten zijn omdat ik deze ook voor een andere site gebruik waar ze goed werken.

De data base table ziet er zo uit

CREATE TABLE `content` (
  `page` varchar(50) default NULL,
  `lang` varchar(2) default NULL,
  `html` text
) ENGINE=MyISAM /*!40100 DEFAULT CHARSET=latin1 COMMENT='Inhoud van de website'*/;

Reageren