[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