Routování jazykových URL do více jazuků

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

Ahoj všem,
chtěl bych od Vás radu.

Rozjel jsem si překladač nette kdyby/translation a potřebuji to samé aplikovat na routování. tj. aby URL v cs jazyce byli české tj. překládalo to na anglické presentery a v angličtině to ponechalo tak jak to je a v němčině to opět udělalo jiné url adresy.

jako základní routu jsem použil toto

$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', 'Homepage:default');

což mě funguje a pak jsem tedy chtěl udělat překlad URL a chtěl jsem aby to platilo jen pro cs a to takto:

		$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', [
			'presenter' => array(
				Route::VALUE => 'Homepage',
				Route::FILTER_TABLE => array(
					'clanek' => 'Post',
				),
			),
			'action' => array(
				Route::VALUE => 'default',
				Route::FILTER_TABLE => array(
					'upravit' => 'edit',
				),
			),
			'id' => NULL,
		]);

bohužel mě to přeloží routu i v angličtině. snažil jsem se upravit ten první parametr v URL a na to jsem moc nepřišel

zkoušel jsem

$router[] = new Route('cs/<presenter>/<action>[/<id>]', [

chtěl jsem mít obecnou routu na jazyky a pak upravit překlady. Jak na to?

Děkuji za každou radu ;)

Editoval Laupe (10. 6. 2016 11:57)

Jan Mikeš
Člen | 771
+
0
-

Ahoj, to co budeš potřebovat je, překlad <presenter> a <action> v závislosti na parametru <locale>.

Jednoduchá možnost je, rozdělit si to do 3 rout, dle jazyka a řešit si překlady tam.

Pokud chceš mít jen jednu routu, lze toho docílit za využití tzv. globálního filtru kde si zkontroluješ jakou hodnotu má locale a na základě toho budeš upravovat ostatní parametry.

Laupe
Člen | 2
+
0
-

Děkuji moc za nakopnutí.

Pokud jsem to dobře pochopil, tak FILTER_IN se používá na překlad URL na routu a FILTER_OUT na překlad rout na URL do šablon apod?

napsal sem to zatím jednoduše takto:

		$router[] = new Route('<locale=cs cs|en|de>/<presenter>/<action>[/<id>]', [
			'presenter' => 'Homepage',
			'action' => 'default',
			NULL => [
				Route::FILTER_IN => function (array $params) {

					if ($params['locale'] == 'cs') {
						if ($params['presenter'] == 'Clanek') {
							$params['presenter'] = 'Post';

							switch ($params['action']) {
								case 'detail';
									$params['action'] = 'show';
									break;

								case 'upravit':
									$params['action'] = 'edit';
									break;
							}

						}
					}

					return $params;
				},
				Route::FILTER_OUT => function (array $params) {

					if ($params['locale'] == 'cs') {
						if ($params['presenter'] == 'Post') {
							$params['presenter'] = 'Clanek';

							switch ($params['action']) {
								case 'show';
									$params['action'] = 'detail';
									break;

								case 'edit':
									$params['action'] = 'upravit';
									break;
							}
						}
					}

					return $params;
				},
			],
		]);

a zeptám se… jde to nějak zjednodušit přes kdyby/translation, které tam mám implementované? třeba pokud máš nějaký příklad tak to asi nejvíce pomůže.

Děkuji