2012-10-20 65 views
5

Phalcon是否提供多語言網站的設施?翻譯設施在Phalcon

什麼是開發基於MVC爾康網站最佳做法?我應該如何實現視圖層?

回答

2

爾康不提供的I18n功能。有一個PECL擴展提供了這種功能,稱爲intl(請參閱manual)。

但是,如果你是在呈現不同語言的網站最感興趣,你可以使用

\Phalcon\Translate\Adapter\NativeArray 

組件。該組件使用包含語言感知字符串的鍵/值的數組。例如,你可以在你的配置使用:

$trans_config = array(
        'en' => array(
         'bye'  => 'Good Bye', 
         'song-key' => 'This song is %song% (%artist%)', 
        ), 
        'es' => array(
         'bye'  => 'Adiós', 
         'song-key' => 'La canción es %song% (%artist%)', 
        ), 
       ); 

一個試驗來證明上述用法是:

public function testVariableSubstitutionTwoEnglish() 
{ 
    $language = $trans_config['en']; 
    $params  = array('content' => $language); 
    $translator = new \Phalcon\Translate\Adapter\NativeArray($params); 

    $vars  = array(
     'song' => 'Dust in the wind', 
     'artist' => 'Kansas', 
    ); 
    $expected = 'This song is Dust in the wind (Kansas)'; 
    $actual = $translator->_('song-key', $vars); 

    $this->assertEquals(
     $expected, 
     $actual, 
     'Translator does not translate English correctly - many parameters' 
    ); 
} 

以上只是說明一下如何翻譯與佔位符變量的消息。要簡單地獲取不同語言的字符串,只需在翻譯器上用相關密鑰調用_(),並且不傳遞任何變量。

編輯在視圖中你可以工作,只要你喜歡。您可以設置顯示在視圖圖層中的變量或傳遞翻譯對象並在那裏執行翻譯。由你決定。

HTH

+0

謝謝,您打算實施什麼其他適配器?創建和使用這樣的數組有點羅嗦,如果'_('x',array('1','2'))''除了'_('x',array('一個 '=>' 1' , 'b'=> '2'))'。創建一個服務名稱't'來通過視圖來訪問它是否很好? – PHPst

+0

使用'\ Phalcon \ Translate \ Adapter \ NativeArray'代替Gettext的優缺點是什麼? – PHPst

+0

Re Gettext非常小,主要是基於性能和偏好。性能實際上不是一個大問題。 –