2012-09-24 22 views
0

在我的ZF2應用程序中,我想檢索用於翻譯頁面的語言。我使用ZendSkeletonApplication作爲基礎。在Module.php我設置的語言環境這樣的:如何查找ZF2中譯者使用哪種語言?

public function onBootstrap($e){ 
    $translator = $e->getApplication()->getServiceManager()->get('translator'); 
    $translator->setLocale(
     Locale::acceptFromHttp($_SERVER['HTTP_ACCEPT_LANGUAGE']) 
    ) 
    ->setFallbackLocale('en_US'); 
} 

我可以檢索區域fallbackLocale的Zend \的I18n \翻譯\翻譯,後來我仍然不知道哪一個被用於翻譯。因爲也沒有辦法(就我沒找到的那樣)來找出哪些語言實際加載到翻譯器中。如果語言環境存在翻譯,我甚至無法測試自己。

也許我在這裏錯過了一些東西。我希望有人能指出。

+1

您可以擴展'Translator'類,覆蓋'translate()'方法並將使用的語言鍵保存在屬性中。 –

+0

@DanielM這是一個選項,但我想檢查onBootstrap事件中的語言,並且那裏的視圖可以不被渲染。無論如何謝謝你的評論。 –

回答

0

我決定採取最簡單的方法。我也翻譯了該語言的文字。

2

一個選項可能是檢索緩存對象並通過重新創建緩存鍵來檢查主地區是否存在。看看loadMessages()方法,看起來緩存結果將包含可用消息的列表。

否則,它似乎翻譯功能只是嘗試第一個語言環境,然後回退。

+0

是的翻譯只是嘗試區域設置,然後回退,但我必須這樣做。我使用正則表達式來選擇正確的語言文件,這意味着我將不得不復制翻譯器本身的所有內容(從php語言環境獲取語言環境,轉到語言目錄,檢查所需語言是否可用,否則採取後備措施。)它很努力。但無論如何,我給你+1的答案。 –

+0

想在非默認翻譯文件中設置一個虛擬翻譯密鑰,並檢查是否可翻譯 - 假設您知道主要語言環境和回退語言環境,則可以知道正在使用哪個文件。 – DrBeza

+0

如果我正確理解你,這就是我所做的。看到我的答案。 –