J'ai développé un petit système de doctrine ZF2 pour un de mes clients. Tout est bon jusqu'à présent, mais ils nécessitent le système en 2 langues.Quelle est la meilleure option pour avoir un commutateur de langue dans mon système ZF2?
Je peux définir la langue par défaut comme english
ou another language
de mon module/Application/config/module.config.php
'translator' => array(
'locale' => 'en_US',
'translation_file_patterns' => array(
array(
'type' => 'gettext',
'base_dir' => __DIR__ . '/../language',
'pattern' => '%s.mo',
),
),
),
Et je peux aussi utiliser cette méthode pour définir par défaut dans module.php
public function onBootstrap(MvcEvent $e)
{
$application = $e->getApplication();
$serviceManager = $application->getServiceManager();
// Just a call to the translator, nothing special!
$serviceManager->get('translator');
$this->initTranslator($e);
// Etc, more of your bootstrap function.
}
protected function initTranslator(MvcEvent $event)
{
$serviceManager = $event->getApplication()->getServiceManager();
// Zend\Session\Container
$session = New Container('language');
$translator = $serviceManager->get('translator');
$translator
->setLocale($session->language)
->setFallbackLocale('zh_CN')
;
}
Ce qui est bon, maintenant mes spectacles système langue par défaut comme le chinois. Cependant, je voudrais donner l'option aux utilisateurs de choisir.
Comment puis-je faire cela?
J'avais trouvé ceci link mais je ne pouvais pas le faire fonctionner.
Lorsque j'ajouter la fonction suivante dans Application/IndexController.php
il ne fait rien à la place http://myurl.com/changeLocal
jeter 404 error
. Ai-je besoin d'ajouter quelque chose dans module.config.php
aussi?
public function changeLocaleAction()
{
// New Container will get he Language Session if the SessionManager already knows the language session.
$session = new Container('language');
$language = $request->getPost()->language;
$config = $this->serviceLocator->get('config');
if (isset($config['locale']['available'][$language])) {
$session->language = $language;
$this->serviceLocator->get('translator')->setLocale($session->language);
}
}
Cela m'a beaucoup aidé, merci mon ami de partager! –
Cheers. Bonne aide. –