したがって、ここにあなたの質問の長いバージョンがあります。Django 1.4 から 1.7.1 でテスト済み:
settings.py で …</p>
、ロケールに追加するとMIDDLEWARE_CLASSES
、リクエストに基づいて言語を選択できるようになります。
'django.middleware.locale.LocaleMiddleware',
を追加LOCALE_PATHS
します。これは、翻訳ファイルが保存される場所です。
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
i18N を有効にする
USE_I18N = True
サイトを次のように翻訳するように設定LANGUAGES
します。
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('pl', ugettext('Polish')),
)
i18n テンプレート コンテキスト プロセッサを追加します。リクエストには と が含まれるようにLANGUAGES
なりましたLANGUAGE_CODE
:
Django <1.8の場合、ここに入れます:
TEMPLATE_CONTEXT_PROCESSORS = (
....
'django.core.context_processors.i18n', # this one
)
Django >= 1.8 の場合、ここに配置します。
TEMPLATES = [
{
'OPTIONS':
{'context_processors': [
'django.template.context_processors.i18n', # this one
]}
}
]
urls.py の入れ子:
url_patterns に以下を追加すると、設定された言語リダイレクト ビューが有効になります。
url(r'^i18n/', include('django.conf.urls.i18n')),
詳細については、翻訳のその他を参照してください。
次のインポートを追加し、翻訳したい URL を i18n_patterns でカプセル化します。これが私の外観です:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
(_(r'^dual-lang/'), include('duallang.urls')),
(r'^', include('home.urls')),
)
注: 管理 URL を i18n_patterns にドロップすることもできます。
テキストを lazytext でラップしてください。(上記のように) lazytext をインポートし、すべての文字列を _('text') のようにラップします。他の urls.py ファイルに移動して、次のように URL 変換を行うこともできます。
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
翻訳したいテキストを、models.py、views.py などの他のファイルでラップできます。ここに、label と help_text の翻訳を含むモデル フィールドの例を示します。
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
Django 翻訳ドキュメントはこれに最適です!
あなたのhtmlテンプレートで...
これで、テンプレートに移動して i18n テンプレートタグをロードし、翻訳したい静的なものに trans と transblock を使用できます。次に例を示します。
{% load i18n %}
{% trans "This is a translation" %}<br><br>
{% blocktrans with book_t='book title'|title author_t='an author'|title %}
This is {{ book_t }} by {{ author_t }}. Block trans is powerful!
{% endblocktrans %}
次に、ロケールごとに makemessages を実行します。
./manage.py makemessages -l pl
あとは、/locales フォルダーに移動して、各 .po ファイルを編集するだけです。各 msgstr にデータを入力します。その一例を次に示します。
msgid "English"
msgstr "Angielski"
最後にメッセージをコンパイルします。
./manage.py compilemessages
翻訳について学ぶべきことは他にもたくさんあり、国際化はこのトピックと密接に関連しているため、ドキュメントも参照してください。また、django- rosettaやdjango- linguo など、 Django で利用可能な国際化パッケージのいくつかを確認することをお勧めします。これらはモデル コンテンツの翻訳に役立ちます。django-rosetta はデータベースに新しいエントリを作成しませんが、django-linguo は作成します。
また、完全に機能するソリューションを確認したい人向けに、 django 翻訳デモも作成しました。
これに従えば、良いスタートを切れるはずです。これは、サイトを複数の言語で実行するための最も標準化された方法だと思います。乾杯!