2016-06-13 8 views
3

誰もがYii2で多言語サイトを実装している自分の経験とベストプラクティスを共有できますか?私は、データベースに格納されているユーザー入力を翻訳したい。例えばarticleという3つの異なる言語の本体といくつかの翻訳可能な属性の名前があるかもしれません。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

答えて

0

複数の言語のスムーズな翻訳には、GoogleトランスレータAPIまたはYandex APIを使用します。私はgitの

https://github.com/borodulin/yii2-i18n-google

Tutorial

RichWeber/yii2-google-translate-api

GoogleのAPIを発見した いくつかのリンクあなたの最初の時間ユーザー

場合しかし、あなたは、12ヶ月間無料のクレジットを得ることができる有料サービスです
+1

あなたが死亡した場合のために提供したリンクに記載されている内容を簡単に説明してください。 – Wndrr

1

まあ、私はあなたに私がしたことだけに基づいて私の視点を与えることができます。

は、翻訳に動作するような場所にあり、静的なコンテンツをお届けします

  1. のYii から国際化とメッセージシステムで管理非動的な文字列、。
  2. 翻訳されたルートをブートストラップされたクラスで動的に処理します。これにより、アプリケーションの構築時にこのルートを構築できます。
  3. 'title_en、title_es'のような翻訳をサポートする列を持つテーブルと、翻訳する必要があるテーブルを操作します。実際にあなたの管理インターフェースでは、yandexのようなものを使用して、このフィールドにコンテンツを翻訳するのに役立ちます。

今私は説明します:

を国際化Message Translationは、モデルをあなたのビュー内の文字列を翻訳上、およびブートストラップクラスのようないくつかの例に基づいています。

メッセージPHPファイルに保存されている文字列を翻訳する例として、Yii::t('app/main', 'Your name is {0}'を使用します。

あなたが発言を翻訳すると、言語を変更したときに/ 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); 
    } 
} 

のために使用し、«つまり、あなたの設定ファイルにクラスをブートストラップすることを忘れないでくださいPHPあなたのアプリを呼び出すときに、あなたを引くことができ

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

:あなたのような翻訳されたテキストをサポートしてテーブルを作成したい場合があり、データベースからテキストを翻訳するweb.php»

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

そして最後にアクション(のみの簡単な例)で、次のようなものを使用してデータ:

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

、S->レンダリング( 'インデックス'、[ '記事' => $記事を、 'LANG' => $ LANG]) ;

またはビュー内:

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

私は、これは私が私のアプリを翻訳されている方法を説明したいと考えています。

関連する問題