2012-03-08 9 views
7

tl; dr:Jadeテンプレートで国際化を行うための洗練された方法を探しています。本質的に問題は、逐語的なコードではなく、変数の文字列の補間を行わなければならないということです。Express/Jadeを使用したI18N:埋め込みタグと補間を使用した文字列

問題の詳細:

モノリンガルジェイドテンプレートで私はそうのように埋め込まれたタグや変数を持つ要素を加えることができます。

p Posted by 
    span.author= post.author 
    | on 
    span.date= post.author 

<p>Posted by <span style="author">The Author</span> on 
<span style="date">2012-03-08</span></p> 

しかし、ときのような何かを得るために私はこれを国際化したい、私は単語の順序はすべての言語で同じではないので、私は単一の文字列が必要です。また、私は翻訳者からのhtmlの詳細を非表示にしたいと思い、ちょうど彼らにこのような行を与える:

Posted by #{author} on #{date} 

今私はi18n.posted_by_onとしてジェイドテンプレートにこの文字列の国際化-EDバージョンを渡すとき、それをその上で補間を行うので、私はできる最善はありません:私は手動ですべての補間を行う必要があり、これは主に、素敵なジェイドのテンプレートのポイントを敗北

- var author = '<span class="author">$</span>'.replace('$',post.author); 
- var date = '<span class="date">$</span>'.replace('$',post.date); 
- var header = i18n.posted_by_on 
     .replace('#{author}',author) 
     .replace('#{date}',date); 
p!= header 

。もっとうまくコンパクトに読める方法はありますか?

答えて

4

をachiveするために役立つだろうあなたはおそらく、今では解決策を見つけたと思います私たちはそれが何であるか)、あなたがしなかった場合は、i18next-nodeの図書館を見たいかもしれません。あなたがしている場合、ライブラリは本当によく文書化されて

// This translates to "Space temperature is 28 degrees Celsius." 
i18n.t('space_temperature_is', { COUNT: 28 }); 

を、しかし:それは変数をサポートしているので、あなたのようなことを行うことができます:

// Localized resources 
{   
    'en-GB': { 
    translation: { 
     space_temperature_is: 'Space temperature is __COUNT__ degrees Celsius.' 
    } 
    } 
    'fr-FR': { 
    translation: { 
     space_temperature_is: 'Température de l'espace est de __COUNT__ degrés Celsius.' 
    } 
    } 
}; 

次に、あなたのヒスイのテンプレートで、あなたはどうなります急いで、ここにはan articleがありますが、これは簡単な紹介として役に立ちました。

+0

私は答えを見つけたことはありませんでした(優先順位がシフトされました)が、これは収まると思われるので、私はそれを受け入れるでしょう:) –

3

我々は短いドキュメントでそれを見ることができるように、sprinfスタイル機能がある https://github.com/mashpie/i18n-node 私はそうならば、教えてください(これはあなたの目標

+0

こんにちは、少し遅れて返信してください。このツールは、位置的な引数を使用するため、法案に適合していないようです。 –

関連する問題