[英]Zend framework 2 - How to make a language switcher
我正在開發一個Zend Framework 2應用程序,現在我想實現一個語言切換器,客戶/注冊用戶可以從中選擇他們想要的語言,我無法理解的是如何在Zend Framework 2中使用存儲(不是來自網址),我想在客戶選擇一個時保留客戶的優先語言,對於注冊用戶,我可以從cookie /數據庫中檢索優先級,並將其重新用於存儲。 但是我應該在哪里以及如何開始/實施這個? 先感謝您。
在global.config.php
設置您的Locales
:
'locale' => array(
'default' => 'en_US',
'available' => array(
'de_DE' => 'Deutsch',
'nl_NL' => 'Dutch',
'en_US' => 'English',
'fr_FR' => 'French',
),
),
因此,在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');
}
}
所以現在默認的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);
}
}
會話允許用戶更改他們的區域設置並記住它直到會話結束,因此他們在一段時間后回來時不需要更改它。 希望這對您有所幫助,並可以幫助您編寫一些代碼,以便為您的應用程序上的注冊用戶保存。
我不確定,我的方法是否有效。 請試試:
translate
方法我們可以有3個參數。
$translator->translate($message, $textDomain, $locale);
$ locale參數取自語言環境,在轉換器中設置,這就是我們通常不在代碼中手動設置的原因。 所以,您可以使用如下:
$localeVar = 'de_DE'; OR $localeVar = 'en_US'; // according to user's selection
echo $this->translate("Translate me", $textDomain, $localeVar);
您可以擁有一個鍵值對 - 鍵可以是用戶選擇的語言,值可以是任何一種語言。
array(
'english' => 'en_US',
'deutch' => 'de_DE',
'frecnh' => 'fr_FR',
// other language
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.