[FLOW3-general] localization with FLOW

Bastian Waidelich bastian at typo3.org
Fri Dec 14 16:27:20 CET 2012


Federico Bernardin wrote:

Hi Federico,

> -
>    name: 'language'
>    uriPattern: '{@locale}/{@package}/{@controller}(/{@action})'
>    defaults:
>      '@package':    'MyPackage'
>      '@controller': 'Standard'
>      '@action':     'index'
>      '@format':     'html'

The @ prefix is reserved for framework arguments (@package, @subpackage, 
@controller, @action & @format – see [1])

Try:

-
   name: 'language'
   uriPattern: '{locale}/{@package}/{@controller}(/{@action})'
   defaults:
     '@package':    'MyPackage'
     '@controller': 'Standard'
     '@action':     'index'
     '@format':     'html'

>
> Then I create the initialize action into controller:
>
> public function initializeAction(){
> 		$arguments = $this->request->getArguments();
> 		if(isset($arguments['@locale'])){
> 			$localeDetector= $this->objectManager->get('TYPO3\FLOW3\I18n\Detector');
> 			$locale = $localeDetector->detectLocaleFromLocaleTag($arguments['@locale']);
> 			$i18nService = $this->objectManager->get('TYPO3\FLOW3\I18n\Service');
> 			if ($i18nService->getConfiguration()->getCurrentLocale() !== $locale) {
> 				$i18nService->getConfiguration()->setCurrentLocale($locale);
> 			}
> 		}
> 	}

You forgot to make the locale available to the view.
This could be achieved like this:

/**
  * @var \TYPO3\FLOW3\I18n\Detector
  * @FLOW3\Inject
  */
protected $localeDetector;

/**
  * @var \TYPO3\FLOW3\I18n\Service
  * @FLOW3\Inject
  */
protected $l18nService;

/**
  * @var \TYPO3\Flow\I18n\Locale
  */
protected $locale;

public function initializeAction(){
	if ($this->request->hasArgument('locale')) {
		$this->locale = 
$this->localeDetector->detectLocaleFromLocaleTag($this->request->getArgument('locale'));
		if ($this->l18nService->getConfiguration()->getCurrentLocale() !== 
$this->locale) {
			$this->l18nService->getConfiguration()->setCurrentLocale($this->locale);
		}
	}
}

/**
  * @param \TYPO3\Flow\Mvc\View\ViewInterface $view
  * @return void
  */
protected function initializeView(\TYPO3\Flow\Mvc\View\ViewInterface 
$view) {
	$view->assign('locale', $this->locale);
}



In your templates you'll then have to specify the locale argument like this:

<f:link.action action="index" arguments="{locale: 
locale}">foo</f:link.action>


Or:

<f:link.action action="index" arguments="{locale: 'it'}">foo</f:link.action>

to set a different locale explicitly (note the single quotes around 
"it", they were missing in your code).

HTH

[1] 
http://flow.typo3.org/documentation/guide/partiii/routing.html#dynamic-route-parts

-- 
Bastian Waidelich
--
Core Developer Team

TYPO3 .... inspiring people to share!
Get involved: typo3.org


More information about the FLOW3-general mailing list