簡體   English   中英

Zend框架2 - 如何制作語言切換器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM