Nie som odborník na PHP / MySql, takže môj prvý nápad, ako zvládnuť webovú stránku s viacerými jazykmi a urobiť čitateľný kód PHP, bol nasledujúci:
1) Vytvorenie tabuľky s poľami „word, en, it, de, fr“, jedno pre každý reťazec, ktorý chcem preložiť. Napríklad:
WORD EN IT DE FR
title HomePage Pagina No Idea
thanks Thank You Grazie Danke Merci
2) Uloženie tabuľky do poľa reťazcov, aby som k nemu mohol získať prístup týmto spôsobom:
print $word["thanks"]["it"];
vďaka čomu by IMHO urobil kód PHP veľmi dobre čitateľným (výkon NIE JE DÔLEŽITÝ).
Takže som tento kód napísal, aby som prečítal údaje zDB, a ak je preklad prázdny, vyplním pole textom „slovo v XX chýba“ (aby som neprilepil všetok identický kód, zobrazujem vám iba jeden prípad):
$s = "SELECT word, it, en, de, fr FROM languages";
$result = $conn->query($s);
while ($r = $result->fetch_array(MYSQLI_ASSOC)) {
$word = $r["word"];
$it = $r["it"];
// and DE and EN and FR...
if ($it != "")
$w["$word"]["$it"] = $it;
else
$w["$word"]["$it"] = $word." IT missing";
// and DE and EN and FR...
}
Skúšal som vložiť úvodzovky, pokúsil som sa ich odstrániť ... Ale zakaždým, keď vytlačím premennú $ w, je VŽDY prázdny. Medzilehlé premenné načítané z DB vyzerajú dobre.
Čo robím zle? Ďakujem.
odpovede:
3 pre odpoveď č. 1Vyskúšajte to.
<?php
$s = "SELECT word, it, en, de, fr FROM languages";
$result = $conn->query($s);
$languages = array("it", "en", "de", "fr");
while ($r = $result->fetch_array(MYSQLI_ASSOC)) {
foreach ($languages as $lang) {
$word = strval(trim($r["word"]));
$translated_word = strval(trim($r[$lang]));
(strlen($translated_word) > 0) ? $w[$word][$lang] = $translated_word :
$w[$word][$lang] = $word . " " . strtoupper($lang) . " missing";
}
}
ZioBit editácia: Fiktívny text, pretože SO mi nedovolí upraviť jediný znak;)