39

デフォルトの言語、母国語、オプションの英語の2つの言語でサイトを開発したいと思います。私は自分のドメインをそのようにする予定です:

www.mydomain.com/tr/
www.mydomain.com/en/

デフォルトでは、ユーザーがmydomain.comに入ると。それらはバージョンにリダイレクトされ/tr/、必要に応じてトップメニューから/en/に移動することを選択します。そして、ここに私の質問があります。

両方の言語を維持するための最良のDjangoの方法は何ですか。自動翻訳は必要ありませんが、両方の言語のテキストを自分で維持したいことに注意してください。

ありがとう

4

4 に答える 4

88

したがって、ここにあなたの質問の長いバージョンがあります。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- rosettadjango- linguo など、 Django で利用可能な国際化パッケージのいくつかを確認することをお勧めします。これらはモデル コンテンツの翻訳に役立ちます。django-rosetta はデータベースに新しいエントリを作成しませんが、django-linguo は作成します。

また、完全に機能するソリューションを確認したい人向けに、 django 翻訳デモも作成しました。

これに従えば、良いスタートを切れるはずです。これは、サイトを複数の言語で実行するための最も標準化された方法だと思います。乾杯!

于 2014-10-23T01:49:27.243 に答える
43

私が見ているように、ここには2つの主なオプションがあります。

(1) サイトの 2 つの個別のコピーを異なる Django アプリとして保持し、単にurlconfでそれらのアプリを指すようurl(r'^/en/', include(myproject.en))にすることができます。つまり、urlconf で英語のアプリを指し、もう 1 つを別の言語で指します。これには、2 つのアプリに対して異なる urlconf のセットと異なる html テンプレートなどを維持することが含まれます。これは、URL 自体にも異なる言語を反映させることに関心がある場合に役立ちます (たとえば、スペイン語の「/pagina/uno」と英語の「」 /page/one")。

(2) Django セッションを使用して言語設定を Cookie に記録し (これは実際に行う必要があります) 、その Cookie から適切なバージョンのテキストをテンプレートに配信します。このコードは次のようになります。

# views.py

# default to your native language
request.session['lang'] = 'tr'

# someone clicks the link to change to English
def switch_to_English_link(request):
    request.session['lang'] = 'en'

次に、テンプレートでこの情報を収集するには、次を使用します。

<!-- my_django_template.html -->
<div>
  <span>
     {% if request.session.lang == "en" %}
        This is my text in English!
     {% else %}
        Şimdi benim sitede Türk var!
     {% endif %}
  </span>
</div>
于 2012-04-23T13:17:08.287 に答える
3

1.4以降で使用可能な翻訳可能なURLパターンを使用できます。

https://docs.djangoproject.com/en/dev/topics/i18n/translation/#url-internationalization

于 2012-04-23T12:54:31.313 に答える
2

URL でページの言語を指定する必要がある場合は、django-localeurlアプリを使用する必要があります。つまり、具体的にあなたの例で何をしているのか。デフォルトのDjango 翻訳機構は URL にプレフィックスを付けるだけで、SEO 戦略では効果がない可能性があります。デフォルトの Django 翻訳機構の残りの部分とうまく連携しながら、URL 処理部分を修正するだけです。django-localeurl

于 2012-04-23T13:25:44.310 に答える