jinjaテンプレートで言語を切り替える

jaap3

多言語のDjangoアプリケーションをDjangoのテンプレートエンジンからJinja2に移行しています。テンプレートでは、現在、Djangoのlanguageテンプレートタグを使用して、オブジェクトごとにアクティブな言語を切り替えています

{% load i18n %}
<h1>{% trans 'Page title' %}</h1>
<ul>
{% for obj in object_list %}
{% language obj.language_code %}
    <li><a href="{{ obj.get_absolute_url }}">{% trans 'view' %}: {{ obj.title }}</a>
{% endlanguage %}
{% endfor %}
</ul>

またi18n_patterns、各オブジェクトのURLも言語固有であるように使用します。

これをJinjaに変換する方法に固執しています。Djangoのi18nテンプレートタグを使用できず、Jinjaに相当するものが見つかりません。

また、テンプレートからメッセージを抽出するのに役立つBabelも検討していましたそのため、DjangoだけでなくBabelでも機能するソリューションが推奨されます。

jaap3

カスタムjinja2拡張機能を作成することでこれを行うのはかなり簡単であることがわかります(これはjinja2ドキュメントの例に基づいています):

from django.utils import translation
from jinja2.ext import Extension, nodes

class LanguageExtension(Extension):
    tags = {'language'}

    def parse(self, parser):
        lineno = next(parser.stream).lineno
        # Parse the language code argument
        args = [parser.parse_expression()]
        # Parse everything between the start and end tag:
        body = parser.parse_statements(['name:endlanguage'], drop_needle=True)
        # Call the _switch_language method with the given language code and body
        return nodes.CallBlock(self.call_method('_switch_language', args), [], [], body).set_lineno(lineno)

    def _switch_language(self, language_code, caller):
        with translation.override(language_code):
            # Temporarily override the active language and render the body
            output = caller()
        return output

# Add jinja2's i18n extension
env.add_extension('jinja2.ext.i18n')
# Install Django's translation module as the gettext provider
env.install_gettext_translations(translation, newstyle=True)
# Add the language extension to the jinja2 environment
environment.add_extension(LanguageExtension)

この拡張機能を使用すると、アクティブな翻訳言語を切り替えることは、Djangoで行う方法とほとんど同じです。

{% language 'en' %}{{ _('Hello World'){% endlanguage %}

唯一の注意点は、Djangoをgettextプロバイダーとして使用し、Babelをメッセージエクストラクターとして使用するdjango場合、実行時にメッセージドメインを設定するようにBabelに指示することが重要であるということinit/update/compile_catalogです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

.htaccessで言語を切り替える

分類Dev

データテンプレートで画像を切り替える

分類Dev

laravelでの言語切り替えコントローラー

分類Dev

i18nextプラグインで言語を切り替える方法は?

分類Dev

複数のサイトに展開された単一のアプリケーションで言語/単語/用語を切り替える

分類Dev

VBAでキーボード言語を切り替える

分類Dev

codeigniterエラーで言語を切り替える

分類Dev

Polylangプラグインを使用して、WordpressWebサイトで異なる言語のフッターを切り替えます

分類Dev

入力言語を切り替えると、MicrosoftWordがフォントを切り替えます

分類Dev

DjangoテンプレートでJavaScriptデバッグを切り替えます

分類Dev

Eclipse RCPアプリケーションでの動的言語切り替え

分類Dev

Angular HTMLテンプレートを切り替えることは可能ですか?

分類Dev

Codeigniterで言語を切り替えた後、同じページにリダイレクトします

分類Dev

GNOMEのCLIでキーボード言語を切り替える

分類Dev

LibreOfficeでコレクター言語をすばやく切り替える方法は?

分類Dev

switchステートメントで画像を切り替える

分類Dev

T-SQLテーブル値関数内で言語を切り替える方法

分類Dev

Alt + Shiftで言語レイアウトを切り替えます。次のShift +テキスト入力用の任意のキーの問題

分類Dev

PHP:手動で言語を切り替える方法は?

分類Dev

agularjs1.4.9で言語を切り替える

分類Dev

Wordpress-qTranslateプラグイン-言語が切り替えられたときにホームページにリダイレクトする方法

分類Dev

Windows7で入力言語を切り替えるためのホットキー

分類Dev

インストール後にWindowsServerのインストール言語を完全に切り替えることはできますか?

分類Dev

多言語サイトでフッターを切り替える

分類Dev

pomがリロードされるたびにIntelliJ IDEAを停止してJava言語レベルを切り替える(またはデフォルトのプロジェクト言語レベルを変更する)

分類Dev

VueJSテンプレート-ログインフォームと登録フォームを切り替える

分類Dev

DjangoCMSプラグインは異なるテンプレートを切り替えます

分類Dev

言語切り替えホットキーからめったに使用されない言語を削除するにはどうすればよいですか?

分類Dev

Caps Lockを使用したモードレス/ステートレスレイアウト言語の切り替え(18.04 LTS Bionic Beaver)

Related 関連記事

  1. 1

    .htaccessで言語を切り替える

  2. 2

    データテンプレートで画像を切り替える

  3. 3

    laravelでの言語切り替えコントローラー

  4. 4

    i18nextプラグインで言語を切り替える方法は?

  5. 5

    複数のサイトに展開された単一のアプリケーションで言語/単語/用語を切り替える

  6. 6

    VBAでキーボード言語を切り替える

  7. 7

    codeigniterエラーで言語を切り替える

  8. 8

    Polylangプラグインを使用して、WordpressWebサイトで異なる言語のフッターを切り替えます

  9. 9

    入力言語を切り替えると、MicrosoftWordがフォントを切り替えます

  10. 10

    DjangoテンプレートでJavaScriptデバッグを切り替えます

  11. 11

    Eclipse RCPアプリケーションでの動的言語切り替え

  12. 12

    Angular HTMLテンプレートを切り替えることは可能ですか?

  13. 13

    Codeigniterで言語を切り替えた後、同じページにリダイレクトします

  14. 14

    GNOMEのCLIでキーボード言語を切り替える

  15. 15

    LibreOfficeでコレクター言語をすばやく切り替える方法は?

  16. 16

    switchステートメントで画像を切り替える

  17. 17

    T-SQLテーブル値関数内で言語を切り替える方法

  18. 18

    Alt + Shiftで言語レイアウトを切り替えます。次のShift +テキスト入力用の任意のキーの問題

  19. 19

    PHP:手動で言語を切り替える方法は?

  20. 20

    agularjs1.4.9で言語を切り替える

  21. 21

    Wordpress-qTranslateプラグイン-言語が切り替えられたときにホームページにリダイレクトする方法

  22. 22

    Windows7で入力言語を切り替えるためのホットキー

  23. 23

    インストール後にWindowsServerのインストール言語を完全に切り替えることはできますか?

  24. 24

    多言語サイトでフッターを切り替える

  25. 25

    pomがリロードされるたびにIntelliJ IDEAを停止してJava言語レベルを切り替える(またはデフォルトのプロジェクト言語レベルを変更する)

  26. 26

    VueJSテンプレート-ログインフォームと登録フォームを切り替える

  27. 27

    DjangoCMSプラグインは異なるテンプレートを切り替えます

  28. 28

    言語切り替えホットキーからめったに使用されない言語を削除するにはどうすればよいですか?

  29. 29

    Caps Lockを使用したモードレス/ステートレスレイアウト言語の切り替え(18.04 LTS Bionic Beaver)

ホットタグ

アーカイブ