2016-11-23 5 views
0

私はバックエンドでsymfonyを使用しており、twig経由でテンプレートをレンダリングしています。 翻訳には以下のガイドを使用していますが、うまく動作します。 https://symfony.com/doc/current/translation.htmlsymfonyでangularJS値を翻訳する

作品:

{{ "Active Option" | trans({}, 'frontend', app.request.locale) }} 

しかし、問題は、私は、私が翻訳しなければならない言葉のいくつかを持ってangularJS変数であること、です。 私は翻訳のために複数の.xlfファイルを持っています。私はangular.translateを知っています。 しかし、私はそれを実装したくありません。

{{ '{{' }} item.optionTitle {{ '}}' | trans({}, 'option', app.request.locale) }} 

どのように私がtwig翻訳でangularJS変数の値をどのように翻訳することができるか説明できますか?小枝の

答えて

1

https://github.com/willdurand/BazingaJsTranslationBundle

翻訳は、あなたのjsは、クライアント側で、サーバー側でレンダリングされます。このバンドルでは、翻訳をjsに公開することができます。しかし、私はそのバンドルと角度の経験がありません。

+0

チップをありがとうございます。しかし、可能であれば、別のバンドルやプラグインを使用することは望ましくありません。 – kristof

1

verbatimタグを使用してください。セクションは、解析されるべきではない生のテキストであるとマークする。 exmpleについては

小枝変数を作成し、角度の変数

{% set optionTitle %} 
    {% verbatim %} {{ item.optionTitle }}{% endverbatim %} 
{% endset %} 

の値でそれに影響を与えるTraslatate

{{ optionTitle | trans({}, 'option', app.request.locale) }} 

{{ item.optionTitle }}は小枝ではなくangularjsによって解析されません。

+0

チップをありがとう。しかし、私はtwig/symfonyを翻訳に使用しています。ですから、私はtwigでangularJS変数の値が必要です。あなたのスニペットは私のためには機能しません – kristof

+0

ハッシュキーは引用符付きの文字列、数字、名前、かっこで囲まれた式でなければなりません(値 "%"の予期しないトークン "演算子" - エラー – kristof

+0

)私の答えは – bobo

0

あなたは次にキープ

angular.filter('apiTranslate', function($http) { 
    return function(string) { 
    $http.get('/api/translate?string=' + string).then(function (response) { 
     return response; 
    }); 
    }; 
}) 
AngularJS

で簡単な翻訳フィルタを構築

/api/translate?string=Active+Option 

を翻訳し、APIコントローラに

$translator->trans($string); 

を変換する文字列を受け取りAPIエンドポイントを作成することができますこの問題を解決する他のソリューションがあることを念頭に置いてください( BazingaJsTranslationBundleを提案しました)、あなたはライブラリを使いたくないと言いましたが、TWIGを使って翻訳したいと思っています。

0

代替手段はあまりありません。 あなたは、あなたの他のファイルにグローバル翻訳を公開する。このようにして、あなたのhtml

<script> 
    var Global = Global || {}; 
    Global.translation = {{ catalogue|raw|json_encode }} 
</script> 

にこのようなものを作成する必要があります。

catalogueとは何ですか?

バージョン2。6 symfonyはあなたがクライアント上で(あなたのアプリケーションの外部使用などの翻訳を同じ翻訳カタログを使用したい場合は、正確にあなたがあなたのフロントエンド

にそれを公開する必要がある場合には全体の翻訳カタログを取得する方法を提供します側)では、生の翻訳メッセージを取得することができます。ただ、そこで、基本的あなたcatalogueは、フロントエンドと共有することが必要とされるロケール

Documentation

$catalogue = $translator->getCatalogue('fr_FR'); 
$messages = $catalogue->all(); 
while ($catalogue = $catalogue->getFallbackCatalogue()) { 
    $messages = array_replace_recursive($catalogue->all(), $messages); 
} 
// $messages contains the whole catalogue that you have to pass to frontend 

を指定します。

戻る

をフロントエンドにそれから私は単に私のキーによる翻訳を返す関数を作成しました。

function _translate(key) { 
    return Global["translation"][key]; 
} 
関連する問題