2017-06-09 9 views
0

Django i18n(gettext)はデータベースに翻訳を格納するレガシー翻訳モジュールを使用したDjangoプロジェクトを持っています。Djangoカスタムテンプレートタグ(i18n transなど)の結果にフィルタを適用

Djangoのデフォルトの{% trans ... %}のように動作するカスタムテンプレートタグ{% db_trans ... %}を作成しましたが、複製できないトリックが1つあります。

この例では、「ツリー」(英語)は「ブーム」(オランダ語)に変換されます。

私のDjangoテンプレートで、デフォルトのi18nを使用して{% trans "tree" %}と書くと、結果はboomと表示されます。これをタイトルとして使用する場合は、{% trans "tree"|capfirst %}のようなcapfirstフィルタを使用し、結果はBoomになります。首都に注意してください。

これは特別なトリックのようです。 db_transカスタムタグ(simple_tagに基づいて)は翻訳の前に入力を大文字にします。 Treeのデータベースへの変換がないため、{% db_trans "tree"|capfirst %}はデフォルトの(変換されていない)値Treeをレンダリングします。

  • 私は今約{% filter capfirst %}...{% endfilter %}です。簡単な解決策が見つからない場合はおそらくそれを使用します。
  • Djangoのソースコードを確認したところ、{% trans ... %}simple_tagに基づいていないことがわかりました。また、多くのテキスト引数を解析しています。

私の質問:上記のように指定したフィルタは、カスタムタグの結果に適用されることを可能にするパッケージまたはスニペットがありますか?あなたのテンプレートタグフィルタ作る場合

+1

ようになりますHTMLで'db_trans_capital'という別のsimple_tagは、同じ変換関数を呼び出し、結果に' .title() 'を呼び出します。それはおそらく私がやることです。それをフィルタに変更して、チェーンにすることができます。 '{{'tree' | db_trans | capfirst}}' – Brobin

+0

それはそうします。 – dyve

+0

@Brobinこの提案を回答として追加すると、私はそれをあなたに信用できます:-) – dyve

答えて

1

は、その後、あなたがそれをチェーンできcapfirst内蔵のフィルタ

from django import template 

register = template.Library() 

@register.filter 
def db_trans(word, request): 
    return do_the_translation(word, request) 

その後、それはあなたが作成することはできません。この

{{ 'tree'|db_trans:request|capfirst }} 
関連する問題