Ben bezig voor me site met multi talen script.
Loop alleen vast op 1 probleem.
Even korte uitleg:
Haal de taal op via de browser met deze code
if (empty($lang)) {
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
}
switch ($lang)
{
case "nl" :
include("lang/nl.php");
break;
case "en" :
include("lang/en.php");
break;
case "de" :
include("lang/de.php");
break;
default :
include("lang/en.php");
break;
}
En dan via $title $naam haal ik het op in het script.
Dat werkt allemaal goed.
Maar nu wil ik als iemand een uitnodiging naar een andere gebruiker stuurt hij dan de taal van de persoon pakt waar die uitnodiging heen gaat nu is het de taal van de persoon die hem verstuurd.
$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','uitnodiging',' $verstuurd')");
nl.php
$verstuurd = Je uitnodiging is verstuurd.
en.php
$verstuurd = Your invitation has been sent.
Dus hij zou bij $man->login moeten checken welke taal de persoon is.
In de database wordt ook de taal omgeslagen waneer iemand inlogt.
$mysqli->query("UPDATE `[users]` SET `lang`='$lang' WHERE `login`='$data->login'");
Hopelijk weet iemand een oplossing ben al tijdje mee bezig maar kom er niet uit.
Moet je niet kijken wat er in de database staat, waarna je het includeert? Het kiezen van de taal om die in de database bekend te maken, en het juiste taal bestand inladen zijn twee verschillende stappen.
Zelf ben ik geen voorstander van een automatische detectie. Stel je voor dat ik in Duitsland op vakantie ben, en jouw site bezoek op een lokale computer daar. Dan staat die meteen op de Duitse taal. Gebruik liever vlaggetjes in je design waarmee je de taal kan kiezen.
Of zoals de meeste grote sites doen: Toon een overlay met de vraag of je de taal wilt aanpassen in de gedetecteerde taal.
**quoteknip**
Dankjewel voor je reactie, Kan altijd later nog aanpassen dat de persoon zelf de taal kan veranderen, zoek eerst oplossing voor dit dat het werkt dan kan ik weer verder.
Dan moet je de juiste taal die bij de gebruiker hoort via SELECT ophalen, en de juiste variabele die erbij hoort gebruiken. Persoonlijk raad ik aan om een array te gebruiken in je talenbestand:
lang.nl.php:
$lang['invitation_sent'] = "De uitnodiging is verzonden!";
lang.eng.php:
$lang['invitation_sent'] = "The invitatiation has been sent";
lang.ger.php:
$lang['invitation_sent'] = "Die Einladung wurde gesendet";
Dan heb je meer controle over je vertaal-variabelen, en kan je later makkelijk kijken of je mogelijk iets mist.
$lang['invitation_sent'] = "De uitnodiging is verzonden!";
Dan haald die wel de goede taal op als ik deze uitvoer alleen dan krijg je in bericht alleen de eerste letter dus bij nl krijg je dan D als bericht en in EN T ?
$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','$test',' $lang[invitation_sent]')");
En als ik tussen de [ '' ] boven comma`s zet krijg ik een fout PHP Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING)
Basislesje in PHP: Houd variabelen buiten de quotes.
<?php
$variabele['bla'] = "<b>een variabele</b>";
$inhoud = "Een stukje tekst met ".$variabele['bla']." die buiten quotes staan";
// even echo'en om te laten zien.
echo $inhoud;
?>
Ook raad ik aan om alle invoer in de query te escapen met mysqli->real_escape_string(), tegen SQL-injection.
Houd ook de indexen in de array tussen single quote:
Dus: $variabele['index'].
Ik zie dat dit afgeleid is van een Criminals-script? Die zijn in veel gevallen niet bepaald efficiënt gescript.