Hallo,

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.
 $lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `login`='{$man->login}' AND `lang`='{$man->lang}'");
      $lang     = $lang1->fetch_object();



$mysqli->query("INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) values(NOW(),'{$_SERVER['REMOTE_ADDR']}','afzender','{$man->login}','0','$test',' $test1 $data->login ')");

$test = "Invite";
$test1 = "You have been invited by";


Als ik dat zo doe dan hoe vraag ik het op dan bij $test dat die eerst de taal checkt.

Ik heb het zo staan in de lang file


<?php
$test = "Invite";
$test1 = "Sent";

?>
Waar komt $man->lang vandaan?
En een array-gebaseerde opslag van je vertalingen werkt makkelijk in het onderhoud :-)

$lang1 is ook geen lekker duidelijke variabele.

PS: array's zijn sneller dan objecten ;-)
Dus waarom gebruik je geen mysqli->fetch_assoc() ?
Hij haald de $man->lang vandaan bij het klikken op de button waar ook de persoon vandaan wordt gehaald.

Oke dat wist ik niet dat array`s sneller waren dan objecten bedankt ga ik dat aanpassen.
De taal is toch opgeslagen in de database bij de gebruiker zelf?
Dan kan je die toch ophalen?

Onthoud wel dat je met fetch_assoc() array's gebruikt i.p.v. objecten:
$man['lang']

Verder raad ik aan om de AND `lang`='{$man->lang} eruit te halen.
Ik was met het stukje van boven aan het testen

$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.
Dankjewel voor je hulp ik ga even kijken of het nu lukt met dit.
Anders kom ik wel even terug in deze topic.


Klopt ben het helemaal opnieuw aan het schrijven in mysqli.

Reageren