Jak řešit občasnou lokalizaci přihlašovacího formuláře

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Tomáš Votruba
Moderator | 1114
+
0
-

Mám komponentu LoginControl, která slouží pro přihlášení. Pro použití ji stačí přidat do presenteru a šablony. Texty v ní mám česky (nejčastěji používaný jazyk v mých projektech).

V jiných projektech ale potřebuji umožnit lokalizaci a v tom nastává problém. Komponentu musím podědit a vše nahradit stringy pro překlad (např. loginControl.name místo Jméno).

Pro znovupoužitelnost komponenty vidím tyto možnosti:

  1. mít 2 verze: LoginControl a LoginControlLocalized. V tom případě ale velké množství kódu duplikuji (duplicitní procesy jen kvůli 1 flash zprávě)
  2. mít 1 verzi rovnou se stringy pro překlad a po ruce vždy Translator s defaulně nastavenou češtinou (moloch)
  3. mít 1 verzi, která by detekovala přítomnost Translatoru a podle toho vypisovala české popisky nebo zástupné stringy (náročnější na tvorbu, leč bez přemýšlení znovupoužitelné)

Jak vám to přijde?

Editoval Tomáš Votruba (26. 12. 2013 12:44)

llook
Člen | 407
+
0
-

Volil bych druhou možnost. Prostě vedle komponenty bude nějaký LoginControlCzechTranslator, který komponentě předáš v těch českých projektech. V něm obyčejné pole a return isset($this->messages[$message]) ? $this->messages[$message] : $message, žádný moloch.

mkoubik
Člen | 728
+
0
-

llook napsal(a):

+1

class LoginControl extends Control
{
	private $translator;

	function __construct(ITranslator $translator = NULL)
	{
		$this->translator = $translator ?: new LoginControlCzechTranslator();
	}
}