{%trans%}テンプレートタグを使用しています。 Djangoドキュメントは言う:
{%trans%}テンプレートタグは、定数文字列(一重引用符または二重引用符で囲まれている)または可変コンテンツのいずれかを変換します。
{%trans「これはタイトルです。」 %} {%trans myvar%}
https://docs.djangoproject.com/en/1.3/topics/i18n/internationalization/#trans-template-tag
Makemessagesコマンドを実行した後、myvarがDjango.poファイルに表示されないため、{%trans myvar%}を実行できないことがわかりました。
私はそれを間違って使用していますか?これを手伝ってくれる人はいますか?
この場合、 blocktrans
テンプレートタグを使用できます。
{% blocktrans %} This is the title: {{ myvar }} {% endblocktrans %}
{% trans myvar %}
が機能します。したがって、POファイルをチェックして、myvar
の値がPO msgidにあることを確認してください。
<title>{% trans myvar %}</title>
たとえば、myvar
に"Some Publisher"
が含まれている場合、POファイルに次のように書き込むことができます。
msgid "Some Publisher"
msgstr "কিছু প্রকাশক"
また、実行したことを確認してください:
python manage.py compilemessages
Djangoはその変数の内容を推測できないため、英語(msgid
)とローカライズされた(msgstr
)文字列の両方を追加して、自分で翻訳する必要があります。
ここでの私の経験は、変数変換はそれ自体ではテンプレートで機能しないことです。ただし、変数の内容がわかっている場合は、適切な解決策を見つけました(つまり、変数はフリーテキストではなく、データベースで設定した一連の選択肢です)。
ビューまたはフィルタータグで翻訳を強制する必要があります。
総括する:
blocktrans
を使用します.po
ファイルに翻訳を生成する物語はこのようなものです:
views.py
def my_view(request):
return render(request, 'i18n_test.html', {'salutation':"Hola"})
templates/i18n_test.html
...
{% blocktrans %}{{ salutation }}{% endblocktrans %}
...
また、テンプレートをレンダリングすると、現在の言語が常にHolaと表示されます。
翻訳を強制するには、ビューでugettextを使用する必要があります。
def my_view(request):
return render(request, 'i18n_test.html', {'salutation':ugettext("Hola")})
ただし、ビューにアクセスできるとは限りません。だから私はこのようなフィルターを使うことを好む。
templatetags/i18n_extras.py
@register.filter(name='translate')
def translate(text):
try:
return ugettext(text)
そしてテンプレートは
...
{% blocktrans s=salutation|translate %}{{ s }}{% endblocktrans %}
...
現在の言語に応じて、Hola、Hello、Ciao、Salutを生成します。
欠点( docs で指摘されている)は、makemessages
がこれらの翻訳を自動的に含めないため、手動で含める必要があることです。 Django.poファイル:
locales/en/Django.po
...
msgid "Hola"
msgstr "Hello"
...
変数は、pythonここでのようなコードでsettings.SITE_NAME
:
from Django.conf import settings
from Django.utils.translation import ugettext_lazy as _
def processor004(request):
my_dict = {
'site_id004': settings.SITE_ID,
'site_name004': _(settings.SITE_NAME),
'installed_apps004': settings.INSTALLED_APPS,
'embedded_widget004': settings.EMBEDDED_WIDGET,
'base_template004': settings.BASE_TEMPLATE,
}
return my_dict
これは複雑なエレガントなソリューションであり、モデルフィールドから値を変換する場合に役立ちます。 http://Django-modeltranslation.readthedocs.org
「モデル翻訳
Modeltranslationアプリケーションは、既存のDjangoモデルの動的コンテンツを、元のモデルクラスを変更せずに任意の数の言語に翻訳するために使用されます。 "
自分のタグを作る
from Django.utils.translation import ugettext as _
@register.simple_tag
def trans2(tr, *args, **kwargs):
# print(':', kwargs)
trans = _(tr)
trans_str = trans.format(**kwargs)
return trans_str
テンプレート内:
{% trans2 columns_once.res_data.message with value=columns_once.res_data.recommend%}
django.po
#: default_content.py:136
msgid "_audit_recommend_speed"
msgstr "Рекомендованная скорость до {value} сек"
私には、これはTEMPLATES.DIRS
outside my Django project directory。テンプレートをプロジェクトディレクトリにフェッチすると問題が解決しました。