2016-01-26 123 views
0

語言文件爲en_USde_DEZend的2翻譯setFallbackLocale

存在於我的Module.phponBootstrap方法我定義:

$oTranslator = $oServiceManager->get('translator'); 
    $oTranslator->setLocale(\Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE'])); 
    $oTranslator->setFallbackLocale('de_DE'); 

如果我進入頁面HTTP_ACCEPT_LANGUAGEen-US,en;q=0.9,de-DE;q=0.8,de;q=0.6,pl-PL;q=0.5,pl;q=0.4,pt-PT;q=0.3,pt;q=0.1

Zend的用途定義的fallbackLocale de_DE - 但是爲什麼?

如果我沒有設置fallbackLocale Zend使用正確的en_US區域設置。

我想有Zend的使用給定的語言環境,或者,如果沒有找到,回退到de_DE - 但如果fallbackLocale定義,他總是使用de_DE區域

我怎樣才能擺脫這種行爲?

編輯

我module.config.php翻譯的內容是:

'translator' => array(
    'locale' => 'de_DE', 
    'translation_file_patterns' => array(
     array(
      'type'  => 'gettext', 
      'base_dir' => __DIR__ . '/../language', 
      'pattern' => '%s.mo', 
     ), 
    ), 
), 

編輯2

在Zend 2 Skelleten應用程序沒有任何transaltions en_US語言環境 - 所以我的這種語言的所有翻譯請求都會導致空字符串返回,這將內在地導致使用默認語言環境。

回答

1

有一個機會,Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']不返回en-US但其他東西,例如en

如果是這種情況,則設置回退de_DE

確定返回的值是否正確?嘗試檢查第一...


the language header definition有記載:

每個語言範圍可給予指定的語言代表了用戶的偏好的估計相關的質量值在那個範圍內。質量值默認爲「q = 1」。

您設置了enq=0.9並且這不可用。 然後de-DEq=0.8

這可能是因爲en不可用,它將使用de-DE來代替。

另一方面,它應該爲en-US字段設置默認q=1。嘗試用簡單的東西來測試,例如單個值en-US,de-DEpt-PT

+0

我測試了'\ Locale :: acceptFromHttp($ _ SERVER ['HTTP_ACCEPT_LANGUAGE'])'的輸出,如果我拿出us頭文件,它會返回'en_US',如果我拿出德文文件,它會返回'de_DE'頭。語言文件具有完全相同的文件名: - / – exxecc