Kdyby translator placeholder v šablone
- Čamo
- Člen | 798
Zdravím,
snažím sa rozchodiť kdyby translator a inštalácia sa podarila, ale
použitie mi nejako nejde.
V messages_sk_SK.neon mám:
homepage:
preklady: "Preklady"
simple: "Jednoduchý preklad"
placeholder: "Preklad s placeholderom %x%"
Jednoduchý preklad funguje. Ale s placeholderom to funguje len cez presenter
translate('messages.homepage.placeholder', NULL, array('x' => 'hocičo'))
a makro {_} v šablone nefunguje. Kód vyzerá takto:
{_messages.homepage.placeholder, [x => 'hocičo']}
// Vypíše: Preklad s placeholderom: %x%
Proste sa to %x% nenahradí ale vypíše ako text.
Vie mi niekto poradiť kde mám chybu? Ja už fakt neviem.
Editoval Čamo (23. 4. 2015 23:09)
- Čamo
- Člen | 798
Hm, tak som to skúsil prepísať na
{_messages.homepage.placeholder, NULL, [x => 'hocičo']}
A už to funguje. V dokumentácii je teda chyba, nie?
Editoval Čamo (23. 4. 2015 23:20)
- Filip Procházka
- Moderator | 4668
V dokumentaci chyba rozhodně není, protože tohle by mělo fungovat a jsem si celkem jistej že mně to funguje. Jsou na to i testy…
- Čamo
- Člen | 798
Tak teraz som zmazal z BasePresentera riadky:
public function beforeRender()
{
$this->template->setTranslator($this->translator);
}
ktoré som skopíroval z dokumentácie
Makro v šablone mi teraz funguje
{_messages.homepage.placeholder, [x => 'hocičo']}
V presentery to funguje len s NULL
translate('messages.homepage.placeholder', NULL, array('x' => 'hocičo'))
V presentery sa to NULL nedá vynechať?
- David Kudera
- Člen | 455
Myslím, že použití translatoru jsi si měl přečíst spíš v dokumentaci toho translatoru, který chceš použít, protože tam je to jinak..
OT: ou… Přišlo mi divný, že někdo doopravdy používal (nebo chtěl použít) ten můj translator, když nikde není odkaz a ani ho už nevyvíjím a chci se ho tak nějak šetrně zbavit… A hele, on je přímo v dokumentaci
- Filip Procházka
- Moderator | 4668
@Čamo Kdyby/Translation se od Nette 2.2 registruje sám :) Proto je ta část v Nette dokumentaci nerelevantní.
V presenteru to samozřejmě funguje taky.
$this->translator->translate('foo', 1);
$this->translator->translate('foo', 1, ['a' => 'b']);
$this->translator->translate('foo', ['a' => 'b']);
@DavidKudera Pošli pullrq do repa s dokumentací :)
- David Kudera
- Člen | 455
@FilipProcházka přesně to mám v plánu, jen mě překvapilo, že to tam je. Myslel jsem si, že znám dokumentaci (omlouvám se za tu samochválu) prakticky dokonale… :-)
A jinak díky za kdyby/translation, přesně to je důvod, proč mám ušetřeno trochu času a nemusím vyvíjet ten svůj translator
Pardon za OT
- Čamo
- Člen | 798
Mne ten placeholder v presentery nefunguje resp. funguje iba s NULL.
V čom ešte môže byť problém?
Dal som to Github
ako čisý sandbox + kdyby translator ak by sa na to niekto chcel pozrieť.
Sem dám ešte svoje nastavenia:
Neon:
translation:
default: cs
whitelist: ['cs', 'en', 'sk', 'de', 'pl', 'hu']
fallback: [cs_CZ, cs]
extensions:
translation: Kdyby\Translation\DI\TranslationExtension
Base presenter:
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @persistent */
public $locale;
/** @var \Kdyby\Translation\Translator @inject */
public $translator;
}
Homepage presenter:
class HomepagePresenter extends BasePresenter
{
public function renderDefault()
{
$this->template->x = $this->translator->translate('messages.homepage.placeholder', array('x' => 'hocičo'));
}
}
messages.sk_SK.neon:
homepage:
preklady: "Preklady"
simple: "Jednoduchý preklad"
placeholder: "Preklad s placeholderom: %x%"
plural: "Plural - %count% jablko.|Plural - %count% jablká.|Plural - %count% jabĺk."
Router:
public static function createRouter()
{
$router = new RouteList();
$router[] = new Route('[<locale=sk cs|sk|en>/]<presenter>/<action>', "Homepage:default");
$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
return $router;
}
Editoval Čamo (23. 10. 2015 0:03)
- Filip Klimeš
- Nette Blogger | 156
David Kudera napsal(a):
Myslím, že použití translatoru jsi si měl přečíst spíš v dokumentaci toho translatoru, který chceš použít, protože tam je to jinak..
OT: ou… Přišlo mi divný, že někdo doopravdy používal (nebo chtěl použít) ten můj translator, když nikde není odkaz a ani ho už nevyvíjím a chci se ho tak nějak šetrně zbavit… A hele, on je přímo v dokumentaci
Je to tam celkem nově,
přidával jsem to tam já.
Původně jsem chtěl přidat jen Kdyby\Translation, ale jak píše
@Majkl578, bylo by to „biased“.
- David Kudera
- Člen | 455
Filip Klimeš napsal(a):
Je to tam celkem nově, přidával jsem to tam já.
Původně jsem chtěl přidat jen Kdyby\Translation, ale jak píše @Majkl578, bylo by to „biased“.
jj schválně jsem to taky hledal, kde se to tam vzalo. Nevím ani proč, ale docela mě to pobavilo :-D
- Filip Procházka
- Moderator | 4668
A já bych potřeboval vědět co znamená nefunguje :) Nechceš si nainstalovat xdebug a odkrokovat to?
- Čamo
- Člen | 798
@Filip Procházka:
//Prečo by som sa trápil s jednou inštaláciou keď sa môžem s dvoma?
„A já bych potřeboval vědět co znamená nefunguje“
Ja dúfam, že hovoríme o tom istom kde ty tvrdíš, že v presentery
funguje zápis
$this->translator->translate('messages.homepage.placeholder', array('test' => 'hocičo'));
// Mne to vyhodnotí chybne nedoplní sa "hocičo" ale vypíše sa "%placeholder%"
Pýtam sa preto, že v dokumentácii máš zápis s NULL(ako druhý parameter)
$this->translator->translate('messages.homepage.helloName', NULL, array('name' => $name));
dúfam, že sa bavíme o tom istom.
Editoval Čamo (23. 10. 2015 0:07)
- David Matějka
- Moderator | 6445
Koukam, ze @FilipProcházka uz dlouho nevydal novou verzi, takze
moznost vynechani count
parametru je jen v masteru: https://github.com/…062eed62211d
- Filip Procházka
- Moderator | 4668
"require": {
"kdyby/translation": "dev-master"
}
$ composer update
Pokusím se k otagování dostat co nejdřív… snad nejpozději o víkendu… mám na releasovacím todo ještě dalších pár balíčků