Překlad parametrizovaných labelů

Marek Bartoš
Nette Blogger | 1171
+
0
-

Občas se mi stává, že mám formulář, do kterého potřebuju vložit například 3 položky stejného typu. A jelikož neexistuje smysluplnější popisek, tak skončím u něčeho ve stylu Položka 1, Položka 2, …
V tomhle typu formuláře nastává dost otravný problém s překlady, konkrétně díky tomuto commitu. Labely se překládají překladačem formuláře namísto překladačem formulářové komponenty. Tím pádem je pro správný překlad labelů několika komponent vypnout překladač celého formuláře a přeložit si všechno sám. Je možné nějak pro překlad labelu předávat parametry?

Marek Bartoš
Nette Blogger | 1171
+
0
-

V podstatě nejrozumnější volba, která v tomto případě zbývá je manuální render. Vypnutím překladače celého formuláře se nepřeloží ani obecné chybové zprávy a kvůli podivné api to překládat manuálně všechno je nesmysl.
Chápu,že to trochu zjednodušuje use-case, kdy je potřeba vypnout překlad pro položky selectu, datalistu apod., ale je wtf, že vypnutí překladů u komponenty překlady vypne jen zčásti.

h4kuna
Backer | 740
+
0
-

Zkušenost mi ukázala, když už je web složitější, že překladač do formuláře vůbec nesetuju a všechny překlady si řeším sám. Je to více psaní, ale mám to pod kontrolou.

h4kuna
Backer | 740
+
0
-

Překlad labelu s parametry si musíš udělat sám. Navíc překladač by ti měl vrátit vstupní řetězec pokud nenajde překlad. Takže ho nemusíš vypnout, ale překlad se bude, ale nic nenajde. Což je systémově ošklivé.

Aby jsi nedošel ke kolizi, že vložíš překlad, který nechceš překládat, je dobré použít pseudo jazyk.

for($i = 1; $i <= 10; ++$i) {
  $form->addInput($this->translator->translate('component.form.registration-counter', ['counter' => $i]));
}

Pomlčkou si odděluju názvy parametrů, abych ho v kódu viděl. Ve slovníku je

'component.form.registration-counter' => 'Label %counter%:'

A překladač by měl parametry nahradit.

A když překladačem proženeš Label 1: tak nic nenajde a vrátí vstupní řetězec.

Ohledně pseudojazyka je dobré si udělat více pravidel.

  • component.form.registration-counter.foo takhle vím že tam jsou dva parametry counter a foo
  • component.form.registration-count.pl suffix pl mi říká že se jedná o plural
  • identifikátory jsou pojmenovány podle <module>.<presenter>.<action>.<další upřesňující tagy>
  • pokud dva identifikátory mají stejný překlad, tak je neslučuju

Editoval h4kuna (20. 12. 2018 9:41)

Marek Bartoš
Nette Blogger | 1171
+
0
-

Já ten překladač nechci vypínat úplně. A donedávna jsem nemusel. Jenže nette/forms:3.0 překládají labely pomocí překladače formuláře namísto překladače formulářové komponenty. Nestačí tak vypnout překlad pro komponentu, ale pro celý formulář, což je nevídaně otravné, když zbytek formuláře chceš mít přeložený.

Nechat překlad zapnutý a přeložit si label dodatečně sám jak navrhuješ je no-way. Ok, aplikaci nevadí, že překlad pro druhé volání neexistuje, ale já mám error logy čisté. Nechci je mít najednou zaplněné chybami s překlady, když to není moje chyba, ale chyba podivně navržené api.

Chápu, že i přes zvláštní api je to užitečná věc (viz #58 a #141). Ale řešení jednoho problému způsobilo vznik jiného a já bych vážně rád věděl, jak mám překládanému labelu předat parametr.

h4kuna
Backer | 740
+
0
-

Jsem psal že to je ošklivé a jelikož nemám překladač nasetovaný ve formuláři tak to neřeším :) V tuto chvíli nemám jak ti poradit.

Editoval h4kuna (20. 12. 2018 14:37)