Překlad parametrizovaných labelů
- Marek Bartoš
- Nette Blogger | 1274
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 | 1274
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
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 | 1274
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.