まず第一に、私はリズムにとても満足しています! 無料の素晴らしい作品。
最近、Rythm を使用してテンプレートの国際化を開始しましたが、必要以上に面倒に思えるものもあります。私がやろうとしていることを行うためのより良い方法があるかどうか疑問に思っています。
1. @i18n() にタグをチェーンします。
これは動作しません:
@i18n("about.text").nl2br()
@i18n("about.text").mytransformer()
これに対する回避策は次のとおりです。
@assign(newvar){@i18n("about.text")}
@newvar.nl2br()
これは機能しますが、きれいではありません。
2. JavaScript でエスケープされた @i18n()
セクションがある場合
<script>
var s = '@description';
</script>
その場合、Rythm はその説明の ' または " を適切にエスケープします。ただし、次を使用すると:
<script>
var s = '@i18n("description")';
</script>
エスケープは行われません。私もやってみました:
var s = '@i18n("description").escape("js")';
と
var s = '@escapeJS(){@i18n("description")}';
ただし、どちらも機能しません (上記を参照)。再び機能するのは
@assign(desc){@i18n("description")}
...
var s = '@desc';
3. @i18n() 内のタグを引数として使用
次のように、翻訳された文字列内にリンクが必要な場合があります。
about.text=See my profile here <a href="{0}">{1}</a>
これをテンプレートで次のように使用したいと思います。
@i18n("about.txt",@genlink("person",person.getId()),person)
注:person
これは type のテンプレート引数ですPerson
。@genlink
ルックアップを使用してリンクを生成するための便利なテンプレート (またはタグ) です。私が現在使用しているソリューションは次のとおりです。
@assign(lnk){<a href='@genlink("person",person.getId())'>@person</a>}
@i18n("about.txt",lnk)
言語リソースが次のように変更されていることに注意してください:about.text=See my profile here {0}
これはおそらくリソース文字列を記述するためのより良い方法ですが、どうにかして を取り除き、次のように記述できればよいでしょう@assign()
:
@i18n("about.text","<a href='@genlink("person",person.getId())'>@person</a>")
編集:
私はあなたの提案を試みましたが、部分的にしか成功しませんでした.
- チェーンタグに
@i18n()
@("about.text".i18n())
動作しますが、@("about.text".i18n().nl2br())
動作しません のパラメーターが欠落していると不平を言います@i18n()
。不足しているパラメーターを次のように追加すると、定義されていない@("about.txt".i18n("").nl2br())
と文句を言いますnl2br()
String
私にとってうまくいったのは:@s().i18n("about.txt").nl2br()
さらに奇妙なことに、あなたのフィドルを Chrome で実行すると、完全に動作します。Mac/Safari で実行すると、先ほど説明したのと同じエラーが表示されます: スクリーンショットを参照してください:
@i18n()
JavaScriptでエスケープ
あなたが説明したように動作します!
- 内部のタグ
@i18n()
を引数として使用
了解した。を使用した現在のソリューション@assign()
は、1 回限りの場合に適しています。Using@def()
は、より優れた一般的なソリューションです。