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.
Thomas van den Heuvel op 28/02/2020 19:48:38

duplicaat + antwoord


Antwoord? is dooie boel daar iedereen zegt veel daar maar helpt weinig.

Hier wordt ik teminsten wel geholpen.
Anyway, kan je jouw SELECT query even echo'en?
Ik neem aan dat je die net als in mijn voorbeeld in een aparte string zet, dan kan je die makkelijk debuggen.

$lang1   = $mysqli->query("SELECT * FROM `[users]` WHERE `id`='$id'");
      $lang     = $lang1->fetch_assoc();


Neem aan dat die dan checkt vanuit $lang in de database kijkt.

Of moet ik het nog ergens aangeven dat die die moet checken?

Had deze ook nog veranderd naar

$id      = $mysqli -> real_escape_string($_GET['id']);
Zet die SELECT-query in een losse string ($sql) en echo die dan.
En lees even terug over escapen met mysqli_real_escape_string().
Bedoel je zo?

$result = $mysqli->query("SELECT lang FROM `[users]` WHERE `id`=$id");
$row = $result->fetch_assoc();
Nee, kijk even mijn vorige voorbeeld terug, waarin ik de SELECT-query in een aparte $sql zet.

$query = "SELECT * FROM [users]
          WHERE ( id = $id
                   ");
en als je die variabele echo'ed?
Die ( en ) horen er niet. En zorg ervoor dat je $id buiten quotes zet, en tussen '.
Je wilt geen rotzooi in je query.


<?php
$query = "SELECT * FROM [users]
          WHERE id = '".$mysqli->real_escape_string($id)."'");
echo $query;
?>
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.

Dan moet je die taal (van de ontvanger) in je query selecteren? Daarbij, zoals in mijn antwoord stond, het probleem blijft - je slaat iets op in een specifieke taal. Op het moment dat de taal wijzigt zit je nog steeds met je hardcoded berichten...

Robin . op 28/02/2020 19:55:31
Antwoord? is dooie boel daar iedereen zegt veel daar maar helpt weinig.

Wie denk je dat het antwoord gaf? :/
En wat versta je precies onder hulp? Dingen die je kunt knippen en plakken?

Robin . op 28/02/2020 19:55:31
Hier wordt ik teminsten wel geholpen.

Weet niet precies wat je voor hulp verwacht? Je bent in een bestaand (?) systeem dingen aan het omgooien en weet niet precies hoe je je queries moet opstellen. Dan hebben we nog een hele lange weg te gaan vrees ik. Plus dan is het niet enkel een kwestie van dingen bijmetselen maar ook nadenken over de algehele structuur van het systeem en dat een beetje hanteerbaar houden. Daar was mijn antwoord voornamelijk op gericht, maar dat is waarschijnlijk niet het type "hulp" wat jij zoekt, noch het type hulp wat je nodig hebt...
Ik hoop dat het hier gezellig blijft...

Anyway, stap voor stap komen we er wel. Maar klopt het wel wat je wilt?
Als ik de tekst "Je uitnodiging is verstuurd." zie, dan lijkt mij dit een melding die je ziet na het versturen van een bericht. En die hoort gewoon in de taal van jou zelf te zijn.

Of gaat het om een vertaald privé-bericht? In dat geval zou je dus speciale placeholders kunnen maken zoals [invite] welke wordt vertaald in: Uitnodiging, Invite, Einlading etc). Dan is de tekst niet hardcoded. Maar ik vraag me af hoe vaak iemand van taal wisselt.

Reageren