2016-06-13 59 views
3

任何人都可以分享自己的經驗和使用Yii2實現多語言網站的最佳實踐嗎?我想翻譯存儲在數據庫中的用戶輸入。例如,文章可能以三種不同的語言,正文和一些可翻譯的屬性命名。Yii2翻譯動態內容的最佳實踐

Yii2是否內置了翻譯動態內容的功能?或者我應該使用第三方擴展像下面這些的:

https://github.com/creocoder/yii2-translateable

https://github.com/LAV45/yii2-translated-behavior

https://github.com/lajax/yii2-translate-manager

您的幫助,將不勝感激。

+0

引用此鏈接http://stackoverflow.com/questions/32831288/yii2-translation-does-not-work – vishuB

+0

@vishub該答案不處理動態內容。 – TheStoryCoder

+0

我使用yii2-translate-manager,它工作得很好,但它不處理動態內容。 – TheStoryCoder

回答

1

那麼,我只能根據我所做的事情給你我的觀點。

有到地方工作的翻譯

  1. 從 警予與國際化和信息系統管理的非動態字符串,這將有助於你與靜態內容。
  2. 使用引導類動態地處理翻譯後的路由,使您可以在構建應用程序時構建此路線。
  3. 並且使用支持像'title_en,title_es'這樣的翻譯並且需要翻譯的列的表格。實際上,在您的管理界面中,您可能希望使用yandex之類的內容來幫助您將內容翻譯成此字段。

現在我來解釋一下:

的國際化Message Translation是基於字符串翻譯你的意見,模型,並在某些情況下,像在自舉類。

您將使用Yii::t('app/main', 'Your name is {0}'作爲示例來轉換存儲在消息php文件中的字符串。

現在,如果您翻譯蜇傷,您需要翻譯路線,以便在更改語言時使用/ articles和/ articulos等路線。 爲此,您將希望構建一個實現BootstrapInterface的類,該類將從引導應用程序的過程中調用。

所以這是我的設置的一個例子。我用這個的

namespace app\base; 

use Yii; 
use yii\base\BootstrapInterface; 

class settings implements BootstrapInterface { 

    public function __construct() { } 

    public function bootstrap($app) { 

     /// Dynamic translated routes 

     $t_articles = Yii::t('app/route', 'articles'); 

     $app->getUrlManager()->addRules([ 
      '/'.$t_articles => '/articles', 
     ], false); 
    } 
} 

並記住引導你的配置文件中的類«ie web.php»

'bootstrap' => [ 
    'log', 
    'app\base\settings', 
], 

最後翻譯從數據庫中的文本,你可能想使支持像翻譯後的文本表:

CREATE TABLE articles (
    id INT, 
    title_en VARCHAR(20), 
    title_es VARCHAR(20) 
); 

所以,當你打電話給你的應用程序,你可以拉你使用類似的動作(僅一個簡單的例子)以下數據:

$articles = ArticlesA::find()->where(['id' => 1])->one(); 
$lang = $this->module->language; 
return $thi 

S->呈現( '索引',[ '物品'=> $文章, '郎'=> $ LANG]) ;

或視圖:

<p class="lead"><?=$articles['title_'.$lang]?></p> 

我希望這說明我一直在翻譯我的應用程序的方式。