16

アプリの国際化がうまくいかないので、実装が失敗する最小限の例をここに示します。

国際的なサポートを備えた django で Web サイトを作成するには、次の手順を検討してください。

ターミナルでお気に入りのフォルダーに移動し、次のようにします。

django-admin.py startproject mysite
cd mysite/
mkdir locale
python manage.py startapp main
# (1) modify mysite/urls.py
# (2) modify main/views.py
# (3) modify mysite/settings.py
django-admin.py makemessages -l de
# (4) modify locale/de/LC_MESSAGES/django.po
django-admin.py compilemessages -l de
python manage.py runserver

どこ:

## (1) mysite/urls.py
urlpatterns = patterns('',
url(r'^$', 'main.views.home'),
)

## (2) main/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _

def home(request):
    return HttpResponse(_('Hello'))

## (3) mysite/settings.py
LANGUAGE_CODE = 'de'

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + \
     ('django.core.context_processors.i18n',) # ensures all django processors are used.

## (4) locale/de/LC_MESSAGES/django.po
#: main/views.py:6
msgid "Hello"
msgstr "Hallo"

Web サイトには 1つの言語しかないと想定しているため、 django のドキュメントでミドルウェア ロケールをアクティブ化しませんでした。

個々のユーザーが好みの言語を指定できるようにする場合は、LocaleMiddleware を使用します。LocaleMiddleware は、リクエストからのデータに基づいて言語を選択できるようにします。ユーザーごとにコンテンツをカスタマイズします。

この実装では、「Hello」から「Hello」への目的の変換は生成されません。私は何を間違っていますか?

4

2 に答える 2

27

1º settings.py で国際化を有効にします。

USE_I18N = True

2º 設定で、次をインポートします。

from django.utils.translation import ugettext_lazy as _

3º settings.py で使用する言語を設定します。

LANGUAGES = (
    ('en', _('English')),
    ('pt-br', _('Portuguese')),
    ('it', _('Italian')),
    ('fr', _('French')),
    ('es', _('Spanish')),
)

3º settings.py にも LOCALE_PATH を設定します。

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'conf/locale'),
)

4º LOCALE_PATH で構成したパス内にフォルダーを作成します。例:

$ cd django_project_folder
$ mkdir conf
$ mkdir conf/locale

5º コマンドを実行します。

django-admin.py makemessages -a

settings.py LANGUAGES で設定された各言語のサブフォルダー内にファイル .po が作成されます。ファイル内の各文の翻訳を行います。

Ps: 現在のディレクトリのソース ツリー全体に対して実行し、翻訳対象としてマークされたすべての文字列を引き出します。

テスト用、実行前にタグを入れる

{% trans "Welcome to my project!" %} 

index.html 内で、コマンド makemessages を再度実行します。de .po ファイル内に新しい文字列が表示されます。

msgid "Welcome to my Project"
msgstr ""

6º 次に、次のコマンドを実行します。

django-admin compilemessages

.po ファイルからすべての msgstr を収集し、.mo ファイルにコンパイルします。

7º プロジェクトを実行してテストする

8ª プラス: URL でユーザーが使用している言語を表示したい場合は、それを表示するように url.py を構成できます。

urlpatterns += i18n_patterns(
    # your urls here,
)
于 2016-03-22T02:31:44.263 に答える
12

Django は、次の 3 つの方法で翻訳を収集します: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

LOCALE_PATHS にリストされているディレクトリの優先度が最も高く、最初に表示されるディレクトリは、後に表示されるディレクトリよりも優先度が高くなります。

次に、INSTALLED_APPS にリストされているインストール済みアプリのそれぞれにロケール ディレクトリが存在するかどうかを探して使用します。最初に出現するものは、後に出現するものよりも優先されます。

最後に、django/conf/locale にある Django 提供の基本翻訳がフォールバックとして使用されます。

LOCALE_PATHS翻訳ファイルはこれらの場所のいずれにもないため、ここで説明され ているように手動で設定する必要があります: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOCALE_PATHS

于 2013-05-27T12:41:07.963 に答える