Multijazykové textboxy ve formulářích

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jakub Šulák
Člen | 222
+
0
-

Zdravím vás,
chtěl bych se zeptat, zda již někdo vyřešil problematiku multijazykových textboxů (a textarea).
Jedná se mi o případ, kdy máte například název produktu. Ten je jiný v každé jazykové verzi.
Neřeším, jak ukládat v databázi (několik možností) a je to jen závislé na tom, jak bude zpracovávat model.
Jde mi o to, jak si usnadnit vytváření formulářů pro editaci.
Mohu samozřejmě udělat container a do něj vložit X textboxů. Ale uvažuji zda nevytvořit komponentu, která by toto dělala sama.

Nemáte někdo něco podobného již hotového? Máte nějaké tipy, jak tuto věc řešit/neřešit i s ohledem na to, aby měl uživatel příjemnou práci.

Díky

norbe
Backer | 405
+
0
-

My toto řešíme tak, že máme jeden formulář a umožňuji uživateli přepínat mezi jazykovými verzemi. Pokud ještě není překlad vytvořen, vloží se do formuláře automaticky hodnota ze výchozího jazyka…

redhead
Člen | 1313
+
0
-

To jsem zrovna řešil. Už nějaký čas uchovávám multijazyčná data v jednom sloupci v tabulce – texty jsou oddělené ‚jazykovými‘ separatory, třeba:

sloupec 'text'
------------------
[[cs]]Ahoj, ...[[en]]Hello, ...
[[cs]]Vítejte, ...[[en]]Welcome, ...

Nevím jesli je to nejlepší řešení, ale zatím se mi osvědčilo. V administraci to pracuje takhle:

U každého multijazyčného pole ve formuláři dávám class ‚multilang‘ a udělal jsem si na to pomůcku v jQuery. Princip je takovýto:

  • do polí naplním data, jak jsou, i se separatory
  • pomocí javascriptu si udělám nějaké uložiště (každé pole má podle separátorů i jazykové verze)
  • nad formulářem zobrazím radio-buttony a přepínám mezi jazyky
  • při přepnutí se text v poli změní na to, co je v uložišti rozsekané do asoc. polí
  • vychytávku to má ještě takovou, že při změně se objeví v levé části pole vlajka upravované jazyk. verze
  • při změně textu se změna uloží do toho úložiště
  • při odeslání se akorát všechny texty zřetězí do jednoho a oddělí pomocí těch separatorů a naplním to do upravovaného pole..
  • odešle se tak stejný formát jako přijde a jaký je v db, pomocí jednoho pole pro sloupec

Naprosto perfektní věc. Problém může být u validace, pokud chcete vyplnit povinně všechny jazyky. To by se muselo ošetřit. Já mám podmínku, že alespoň jedna verze musí být vyplněna (bývá to ta anglická). Nevyplněné verze se nezřetězovávají a chybí tak i separatory, což je pro mě výhodné

Ale jesli má někdo lepší řešení..

Jakub Šulák
Člen | 222
+
0
-

Podobně jak píše redhead jsem se také vydal. Je to trochu nehezké řešení v tom, že bez JS si člověk moc neškrtne. Ještě potřebuji vyřešit validaci…

redhead
Člen | 1313
+
0
-

Ono v mém případě na nějaké vypnuté JS nehrajem, kór ještě v administraci

pekelnik
Člen | 462
+
0
-

Také používám multijazyčné boxy…

Jdu standardní cestou frameworku:

<?php
// Vytvoření formu
$title = $form->addContainer('title');
foreach ($languages as $language) $title->addText($language->id, $language->title);
?>

Co se týče UI – neobejde se to bez hromady javascriptu :) – ačkoli díky využití přímé podpory Nette\Forms to funguje i bez něj – ovšem z hromadami inputů na stránce, že :)

Editoval pekelnik (13. 4. 2010 13:53)