Gen*_*nic 2 php translation zend-framework2
我正在开发一个Zend Framework 2应用程序,现在我想实现一个语言切换器,客户/注册用户可以从中选择他们想要的语言,我无法理解的是如何在Zend Framework 2中使用存储(不是来自网址),我想在客户选择一个时保留客户的优先语言,对于注册用户,我可以从cookie /数据库中检索优先级,并将其重新用于存储.但是我应该在哪里以及如何开始/实施这个?先感谢您.
Kwi*_*ido 10
设置你Locales的global.config.php:
'locale' => array(
'default' => 'en_US',
'available' => array(
'de_DE' => 'Deutsch',
'nl_NL' => 'Dutch',
'en_US' => 'English',
'fr_FR' => 'French',
),
),
Run Code Online (Sandbox Code Playgroud)
所以Application\Module.php你可以添加一个设置默认值的方法Zend\Translator\Translator:
class Module {
public function onBootstrap(MvcEvent $e)
{
$applicaton = $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('en_US');
}
}
Run Code Online (Sandbox Code Playgroud)
所以现在默认的Locale是en_US,因为会话没有可用的Locale.要更改区域设置,您需要捕获用户输入并验证您支持的可用区域设置global.config.php.因此,为了更改它,您可能需要添加一个控制器操作,该操作捕获用户的输入并设置新的区域设置.没有任何表单用法的控制器操作示例!
public function changeLocaleAction()
{
// New Container will get he Language Session if the SessionManager already knows the language session.
$session = new Container('language');
$language = $this->getRequest()->getPost()->language;
$config = $this->serviceLocator->get('config');
if (isset($config['locale']['available'][$language]) {
$session->language = $language;
$this->serviceLocator->get('translator')->setLocale($session->language);
}
}
Run Code Online (Sandbox Code Playgroud)
会话允许用户更改他们的区域设置并记住它直到会话结束,因此他们在一段时间后回来时不需要更改它.希望这对您有所帮助,并可以帮助您编写一些代码,以便为您的应用程序上的注册用户保存.