フラスコアプリケーションの外でbabelでjinja2を使用するにはどうすればよいですか。pybabel コマンドを使用して入力された locale dir があるとします。翻訳ファイルを読み込んで、テンプレート ファイルを翻訳したいと考えています。
5547 次
2 に答える
16
解決策を見つけました。フラスコを統合せずに jinja2/babel を使用する方法は次のとおりです。
前提条件
前提条件は例を完成させるためだけに説明されており、それらはすべて他の値または名前を持つことができます。
メッセージには「html」という名前のメッセージ ドメインを使用します (ドメインは任意の名前で、デフォルトは「message」です)。
ディレクトリ "i18n" には、翻訳およびコンパイルされたメッセージ (ファイルi18n/cs/LC_MESSAGES/html.mo
など) があります。
「cs」または「en」ロケールを使用してテンプレートをレンダリングすることを好みます。
テンプレートはディレクトリtemplates
にあり、そこに名前が付けられた jinja2 テンプレートstack.html
が存在するため、ファイルが存在しますtemplates/stack.html
。
コードサンプル
from jinja2 import Environment, FileSystemLoader
from babel.support import Translations
locale_dir = "i18n"
msgdomain = "html"
list_of_desired_locales = ["cs", "en"]
loader = FileSystemLoader("templates")
extensions = ['jinja2.ext.i18n', 'jinja2.ext.autoescape', 'jinja2.ext.with_']
translations = Translations.load(locale_dir, list_of_desired_locales)
env = Environment(extensions=extensions, loader=loader) # add any other env options if needed
env.install_gettext_translations(translations)
template = env.get_template("stack.html")
rendered_template = template.render()
にrendered_template
は、レンダリングされた HTML コンテンツが含まれています (おそらく "cs" ロケール)。
于 2013-09-09T11:49:34.823 に答える