1

JavaScriptを使用してアプリケーションのUIを記述するにはGoogle Closure Templateを使用しています。なぜ私はGoogleのクロージャテンプレートを使用しているの詳細な理由のLook at this question。私は多言語にしたい。 --localesスイッチがあり、プロジェクトherehereで提供されているサンプルも見ています。 README_FOR_EXAMPLESではそれはそれは簡単な上 を実行したときSoyToJsSrcCompilerによって生成されたJSファイルはGoogle Closure Templatesは、個別のリソースファイルを使用する単一のJavaScriptコードベースではなく、言語ごとに複数のJavaScriptファイルを生成します。

+ simple_generated_en.js、features_generated_en.js、
simple_generated_x-zz.js、features_generated_x-zz.js ことを書かれているファイル.soyおよびfeatures.soy(ロケールは、共有サンプルディレクトリ 'examples'の翻訳されたXLIFFファイルと上記のコンパイル時のグローバル ファイルと一緒に 'en'および 'x-zz'です)。 features.soy内のいくつかのテンプレートがsimple.soyのテンプレートを呼び出すため、simple.soyとfeatures.soyの両方が必要です。 注: がこれらのファイルを生成するAntターゲット(およびコマンドライン引数)の例については、最上位の 'build.xml'内のtarget 'js-features-example'を参照してください。

私が期待したのは、テンプレート関数が呼び出される前に実行時に提供されたオプションに基づいて、適切なロケールファイルから目的の文字列を使用する1つのJavaScriptコードベースを生成することでした。クロージャテンプレートで可能ですか?

答えて

1

私が見る限り、テンプレートのパラメータとして辞書オブジェクトを使用できます。

/** 
* @param dict 
*/ 
{template .example} 
    <h1>{$dict.title}</h1> 
    <div>{$dict.content}</div> 
{/template} 

このオブジェクトは、ロケールファイルからサーバー側で生成され、スクリプトタグ経由でjavascriptに転送されます。

そうしないと、ロケールに応じて異なるコンパイル済みテンプレートファイルをクライアント側にロードできます。

また、i18n possibilityもありますが、あなたの問題ではまったく役に立たないです。

+0

辞書オブジェクトに関するドキュメントにリンクしていただけますか? – IsmailS

+0

OK私はそれを得た。プレーンJavaScriptオブジェクトが行います。問題は今、 'soy。$$ escapeHtml(opt_data.title)'を使ってHTMLをエスケープしていますが、私にとっては文字列にHTMLビットがある可能性があります。それのための任意のアイデア? – IsmailS

+0

Al-right!私もそれを見つけました。私のテンプレートに '{$ dict.content | noAutoescape}'があると、 'content'にHTMLを渡すことができ、エスケープされません。つまり' <'は' < 'に変換されません。 – IsmailS

関連する問題