python - Django i18n_patterns - 如何防止非事件语言的前缀

标签 python django internationalization django-i18n

在我的 django settings.py 文件中,我有六种事件语言:

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 确实将它们作为页面提供。

问题,修改 i18n_patterns 的最佳方法是什么,以便它只允许 settings.py 中定义的有效、事件语言?我想要 404 的所有其他 2 个字符前缀。

最佳答案

最好的解决方案(我知道)是使用 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',
)

使用 solid_i18n_patterns 而不是 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'),
)

现在,如果你转到 example.com/en/main 它工作正常,因为 en 是在你的语言 linst 中指定的,但如果你转到 example .com/ch/main 它抛出 404 页面未找到错误。

关于python - Django i18n_patterns - 如何防止非事件语言的前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26367954/

相关文章:

python - 如何从 Python 2.7 中的异常对象获取堆栈跟踪?

django - 成员资格和事件 API?还是我应该自己做?

javascript - 在项目之间同步内部 JavaScript 代码的好方法是什么?

iphone - 从 Settings.bundle plist 中提取本地化字符串

java - 使用 Spring LocaleChangeInterceptor 时如何在 URL 中保留变量

python - 如何使用嵌套循环和函数 split() 创建列表字母计数器?

python - 如何干净利落地避免递归函数中的循环(广度优先遍历)

python - 列表和+=操作

python - django 查询消除重复项

html - 本地化字符串时使用 strong/em 标签的正确方法是什么?