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.
Vraag je dan wel af wat de dynamische delen in de zinsnede zijn, dit is waarschijnlijk niet buy_out of wat dan ook (mogelijk bedoel je bail out?).
Voortbordurend op mijn eerdere voorstel:
Het bericht(type) wordt bijvoorbeeld geïdentificeerd als: message_you_have_been_bailed_out oid.
Een vertaling in het engels is dan bijvoorbeeld:
Player [player_that_posted_bond] has bailed you out!
Een vertaling in het nederlands is dan bijvoorbeeld:
Speler [player_that_posted_bond] heeft jouw borg betaald!
Je zou dit bericht dus taalonafhankelijk kunnen opslaan door het "bericht id" (you_have_been_bailed_out) te onthouden in combinatie met een lijst van "invulvakjes" (in dit geval enkel het vakje player_that_posted_bond). Voor de weergave pak je dan het taalspecifieke sjabloon wat hoort bij dit bericht id en vervang je alle invulvakjes door de inhoud hiervan, bijvoorbeeld met str_replace().
En op deze manier zou je *al* je dynamische taalspecifieke zinnen kunnen afhandelen.
Toevallig is de volgorde van de zin en de dynamische delen in het bovenstaande geval min of meer hetzelde, maar dat is lang niet altijd gegarandeerd in verschillende talen met verschillende zinsconstructies.
Of je slaat direct dit verwerkte sjabloon op als (taalspecifiek) bericht, ingeval iemand zelden/nooit schakelt tussen talen. Maar waarschijnlijk vraagt dan iemand binnen de kortste keren waarom de berichten niet van taal meeveranderen wanneer iemand van taal schakelt :p.
Ah well, waarschijnlijk moet je hier eerst zelf tegenaan lopen.
Er zijn heel wat tips, adviezen en ideeën gegeven. Bouw anders eens een compacte testcase, en kijk eens of dat bevalt. Laat het hier dan ook eens zien, zodat we eventueel nog kunnen beoordelen.
$uitbraak = array(
"en"=>"You are lucky $data->login has bought you out!",
"de"=>"Sie haben Glück, dass $data->login Sie aufgekauft hat!",
"nl"=>"Je hebt geluk $data->login heeft je uitgekocht!");
$language=$man->lang;
$sql = "INSERT INTO `[messages]`(`time`,`IP`,`from`,`to`,`read`,`subject`,`message`) VALUES (
NOW(),
'".$_SERVER['REMOTE_ADDR']."',
'afzender',
'".$man->login."',
'0',
'invite',
'$uitbraak[$language]'
)";
$mysqli->query($sql);
Oké dan.
Het wordt dus niet on-the-fly vertaald bij een taal-wisseling. Dat is nu dus duidelijk.
Ik raad wel aan om real_escape_string toe te passen op de data uit de array in de query. Ik vrees dat een ' de query plat zal leggen.
Ik snap alleen niet waarom je afwijkt van een taal-bestand?