Kdyby translator placeholder v šablone

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

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
+
0
-

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
+
0
-

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
+
0
-

No v tých testoch to vidím, ale nič mi to nehovorí. Vieš mi teda povedať, kde môžem mať chybu? Ja to dnes vidím prví raz a netuším v čom je problém.

Editoval Čamo (24. 4. 2015 1:03)

Čamo
Člen | 798
+
0
-

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
+
0
-

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
+
0
-

@Č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
+
0
-

@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
+
0
-

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
+
0
-

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
+
0
-

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

Čamo
Člen | 798
+
+1
-

David Kudera/Filip Klimeš
Páni ak dovolíte ja by som potreboval aby bol posledný príspevok ten môj. Stále mi to v presentery bez toho NULL nefunguje.

Editoval Čamo (26. 4. 2015 17:43)

Filip Procházka
Moderator | 4668
+
+1
-

A já bych potřeboval vědět co znamená nefunguje :) Nechceš si nainstalovat xdebug a odkrokovat to?

Čamo
Člen | 798
+
0
-

@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
+
+2
-

Koukam, ze @FilipProcházka uz dlouho nevydal novou verzi, takze moznost vynechani count parametru je jen v masteru: https://github.com/…062eed62211d

Čamo
Člen | 798
+
0
-

No to sa veru nepodobá na kód ktorý mám u seba ja. Ba kieho, to je niečo celkom iné.
Ako to, že to makro v šablone funguje?

Editoval Čamo (23. 10. 2015 0:08)

Filip Procházka
Moderator | 4668
+
0
-
"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ů