3

私の django settings.py ファイルには、6 つのアクティブな言語があります。

LANGUAGES = (
('de', gettext_noop('German')),
('en', gettext_noop('English')),
('es', gettext_noop('Spanish')),
('fr', gettext_noop('French')),
('nl', gettext_noop('Dutch')),
('pt', gettext_noop('Portuguese')),
)

これらのページは、i18n パターンを使用する場合にうまく機能します。

 http://exmaple.com/de/main
 http://exmaple.com/nl/main
 etc...

ただし、私のサイトを Google で検索すると、言語プレフィックスのページが複数表示されます。私がサポートしていない言語の一部。そのうちのいくつかは存在しません:

http://examble.com/ch/main
http://exmaple.com/zz/main
etc..

これらのページがインデックスされている理由がわかりません。それらは私のサイトマップにありません。ただし、Django はそれらをページとして提供します。

質問、settings.py で定義されている有効でアクティブな言語のみを許可するように i18n_patterns を変更する最良の方法は何ですか? 他のすべての 2 文字のプレフィックスを 404 にしたいと思います。

4

2 に答える 2

1

最善の解決策 (私が知っている) は、solid-i18n-urlsを使用することです。

パッケージをインストールします。

pip install solid_i18n

設定を少し変更します。

# Default language, that will be used for requests without language prefix
LANGUAGE_CODE = 'en'

# supported languages
LANGUAGES = (
    ('en', 'English'),
    ('ru', 'Russian'),
)

# enable django translation
USE_I18N = True

#Add SolidLocaleMiddleware instead of LocaleMiddleware to MIDDLEWARE_CLASSES:
MIDDLEWARE_CLASSES = (
   'django.contrib.sessions.middleware.SessionMiddleware',
   'solid_i18n.middleware.SolidLocaleMiddleware',
   'django.middleware.common.CommonMiddleware',
)

i18n_patterns の代わりに solid_i18n_patterns を使用する

from django.conf.urls import patterns, include, url
from solid_i18n.urls import solid_i18n_patterns

urlpatterns = solid_i18n_patterns('',
    url(r'^main/$', 'about.view', name='about'),
)

ここで、言語 linst で指定されているように問題なく動作しますがexample.com/en/main、404 page not found エラーがスローされます。enexample.com/ch/main

于 2014-10-18T11:50:15.330 に答える