IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Multi-jazyčná stránka

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Neaktivní uživatel:27.3.2015 17:38

Pekný deň prajem, mám otázku..
Pracujem na vlastnom CMS, ale neviem ako efektívne poriešiť viac jazyčnú stránku. To jest, že v administrácií si môže užívateľ preložiť všetky výstupy (stránky, články, menu,...).
Problém: všetky výstupy sa budú dať preložiť aspoň do 10 jazykov. Ale pridávať do databáze (napr. table pages) column-y ako "sk_text", "fr_text", "en_text",..., mi príde veľmi neefektívne. Nepoznáte niekto lepšie riešenie ?
Dúfam, že som to zložito nevysvetlil :D ďakujem za odpovede

Odpovědět
27.3.2015 17:38
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Martin Konečný (pavelco1998):27.3.2015 17:53

Podle mě je nejlepší si ukládat klíče a pro ně podle jazyka vyhledat text.

Např. tabulka v DB bude

translation (
  id INT PK AI,
  language_id,
  page VARCHAR  -- název stránky,
  key  -- klíč pro daný kousek textu,
  text  -- textový obsah pro daný jazyk
)

Na webu pak texty vyhledáš třeba takto:

$language = $_GET["language"];
$page = $_GET["page"];

$textsQuery = $pdo->prepare("
  SELECT `key`, `text`
  FROM `translation`
  WHERE `language_id` = ? AND `page` = ?
");
$textsQuery->execute(array($langauge, $page));
$texts = $textsQuery->fetchAll(PDO::FETCH_OBJ);

A na stránce je pak vypíšeš takto:

<h1><?php echo $texts->heading; ?></h1>
<p><?php echo $texts->paragraph; ?></p>

<a href="?page=admin"><?php echo $texts->linkAdmin; ?></a>

Já teď v projektu s Nette používám Kdyby\Translation, viz https://github.com/…/Translation

Nahoru Odpovědět
27.3.2015 17:53
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Martin Konečný (pavelco1998):27.3.2015 17:57

Tento způsob nebude logicky fungovat v případě, že stránky budou vytvářet sami uživatelé (např. nějaké články na blogu), ale pouze, pokud budou stránky na webu napevno určené.

Ještě jedna věc. Pokud bys potřeboval část textu staticky a část dynamicky (např. věta "Vaše přihlašovací jméno je __tvé jméno__), pak se to dá řešit pomocí zástupných znaků a formátovacích funkcí (printf, sprintf apod.).
Např.

// klíč a hodnota v databázi
nameInfo: Vaše přihlašovací jméno je %s.

// na stránce
<p><?php echo sprintf($texts->nameInfo, $user->name); ?></p>

Pomocí sprintf() se zástupný znak %s nahradí hodnotou proměnné $user->name.

Editováno 27.3.2015 17:57
Nahoru Odpovědět
27.3.2015 17:57
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Neaktivní uživatel:27.3.2015 18:57

Ďakujem ti za možné riešenie. Každopádne, keď som nad tým premýšlaľ, zrejme nastavím len pár jazykových verzií. To už nebude problém potom dosadiť do tabuľky pár políčok navyše.. Ale aj tak, ešte raz ďakujem.

Nahoru Odpovědět
27.3.2015 18:57
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Patrik Valkovič:27.3.2015 19:11

Pokud máš pevně dané jazyky, tak bych (jak říkáš) vytvořil pro každý jazyk samostatný sloupec. Pokud by jsi chtěl robustnější řešení, tak bych udělal tabulku jazyků, tabulku s klíči (které budou použity v PHP kódu) a tabulky překladu následovně

translation(
language: int
text: int
translation: text

kde by byl "language" navázaný na tabulky jazyků a "text" na tabulku s klíči.

Prakticky by to znamenalo že počet záznamů by se rovnal počtu jazyků * počet textů k přeložení. Zatížíš více databázi.

Další nápad by byl samostatný soubor pro každý jazyk popřípadě pro každou stránku. Hodně záleží na složitosti a kvantitě textů.

Nahoru Odpovědět
27.3.2015 19:11
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.