Django 1.6で動作しない翻訳に問題があります。これをsettings.pyに追加しました:
LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('de', ugettext('German')),
)
ミドルウェアも追加されました。
MIDDLEWARE_CLASSES = (
'Django.middleware.common.CommonMiddleware',
'Django.contrib.sessions.middleware.SessionMiddleware',
'Django.middleware.csrf.CsrfViewMiddleware',
'Django.contrib.auth.middleware.AuthenticationMiddleware',
'Django.contrib.messages.middleware.MessageMiddleware',
'Django.middleware.locale.LocaleMiddleware',
'Django.middleware.clickjacking.XFrameOptionsMiddleware',
)
同様に、l10ndとなる文字列を使用している場合は、*。pyファイルにも:
from Django.utils.translation import ugettext_lazy as _
私のテンプレートは以下で始まります:
{% extends "base.html" %}
{% load i18n %}
テンプレート内では、trans
プレースホルダーを使用しました。例えば。
<h1>{% trans "Register a tank" %}</h1>
Locale/de/LC_MESSAGES/Django.poで翻訳を提供しました:
msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"
私のブラウザは、ドイツ語のコンテンツを最初に要求するように設定されています。 ブラウザ設定
私は何を取りこぼしたか?
追伸私が現在ファジーなプロジェクトは、GitHubでホストされています: https://github.com/frlan/blankspot
LOCALE_PATHS
をsettings.py
に追加し、次のように設定します。
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
LOCALE_PATHS
はタプルでなければならないことに注意してください(パスの末尾のコンマを見てください)。
LOCALE_PATHS
に基づいて、locale
フォルダーがプロジェクトのルートにあるはずです。
そして、プロジェクトのルートからコマンドDjango-admin.py makemessages -l de
およびDjango-admin.py compilemessages
を必ず実行してください。
djPrj
|
+---> djPrj
|
+---> djApp
|
+---> locale
|
+---> templates
また、MIDDLEWARE_CLASSES
を、LocaleMiddleware
の後、SessionMiddleware
の前にCommonMiddleware
になるように再配置します here :
MIDDLEWARE_CLASSES = (
'Django.contrib.sessions.middleware.SessionMiddleware',
'Django.middleware.locale.LocaleMiddleware',
'Django.middleware.common.CommonMiddleware',
'Django.middleware.csrf.CsrfViewMiddleware',
'Django.contrib.auth.middleware.AuthenticationMiddleware',
'Django.contrib.messages.middleware.MessageMiddleware',
'Django.middleware.clickjacking.XFrameOptionsMiddleware',
)
サービス(python manage.py runserver
)を再起動して、もう一度確認してください。
ローカリゼーションがDjangoのデフォルトDjango.mo
ファイルを使用してDjango adminページに適用されることを確認するために、次のテストを実行します。
まず、プロジェクトのメインurls.py
でpatterns
をi18n_patterns
に置き換えます。
from Django.conf.urls.i18n import i18n_patterns
urlpatterns = i18n_patterns('',
url(r'^admin/', include(admin.site.urls)),
# ...
)
次のように、de
プレフィックスを付けて管理ページに移動します。http://127.0.0.1:8000/de/admin/
そして、管理ページはドイツ語で表示されるはずです。
OK、あなたはDjangoのドイツ語での管理ページを見ることができますか?
また、de
プレフィックスを使用してビューを確認してください。
プロジェクトコード によると、一部の文はtrans
ブロックにありません。次のように配置します。
{% trans "your sentence" %}
また、ビューおよびモデルのコードでは、ugettext
の代わりにugettext_lazy
を使用する必要があります( here および here をお読みください)。
これを置き換えます:
from Django.utils.translation import ugettext as _
で:
from Django.utils.translation import ugettext_lazy as _
そして今、すべてが動作します。
私の場合、実行するパラメーターとしてen-gbを使用しました
Django-admin.py makemessages -l en-gb
代わりに、en_GBにする必要があります。
Django-admin.py makemessages -l en_GB
Cookieとセッションを確認します- How Django Discovers Language Preference に従って、プロセスは次のとおりです:
ブラウザの設定は「de」を優先するように設定されているため、LocaleMiddlewareは前の手順1〜3のいずれかで別の方法で決定する必要があります。
translated string
にDjango.po
を設定してから、python manage.py compilemessages
を使用してください
for e.g
#: path/to/python/module.py:23
msgid "Welcome to my site."
msgstr "put appropriate translated string here"
提案-:Django-rosetta
パッケージを使用して、UIインターフェースからtranslated string
を追加できます。 Django-adminからT文字列を簡単に追加できます。 https://github.com/mbi/Django-rosetta
設定でLocaleMiddleware
を有効にする を指定して、Django=ブラウザー設定に基づいて言語検出を行うようにします。言語設定を効果的に変更するには、 Accept-Language
ヘッダー。ユーザーのセッションやDjango_language
クッキー。