mar*_*199 7 django url url-routing internationalization
我正在使用i18n_patterns将当前lang_code的前缀添加到我的url.
urlpatterns += i18n_patterns('',
url(r'^', include('blaszczakphoto2.gallery.urls')),
)
Run Code Online (Sandbox Code Playgroud)
这allowes我得到这样的URL /en/about-us/,/pl/about-us/等等.我的默认语言为pl
LANGUAGE_CODE = 'pl'
Run Code Online (Sandbox Code Playgroud)
我希望url喜欢/ about-us /用于在波兰语中查看我的网站的客户.是否有任何方法可以隐藏来自url的lang_code前缀以获取默认的lang_code?
这是一个非常简单的包:django-solid-i18n-urls
安装后,没有语言前缀的URL将始终使用默认语言,即在中指定的语言settings.LANGUAGE_CODE.重定向不会发生.
如果url将具有语言前缀,则将使用此语言.
这里也回答:https://stackoverflow.com/a/16580467/821594.
Django>=1.10可以本地处理这个。函数中有一个新prefix_default_language参数i18n_patterns。
设置
prefix_default_language为False从默认语言 (LANGUAGE_CODE) 中删除前缀。这在向现有站点添加翻译时非常有用,这样当前的 URL 就不会改变。
来源: https : //docs.djangoproject.com/en/dev/topics/i18n/translation/#language-prefix-in-url-patterns
例子:
# Main urls.py:
urlpatterns = i18n_patterns(
url(r'^', include('my_app.urls', namespace='my_app')),
prefix_default_language=False
)
# my_app.urls.py:
url(r'^contact-us/$', ...),
# settings:
LANGUAGE_CODE = 'en' # Default language without prefix
LANGUAGES = (
('en', _('English')),
('cs', _('Czech')),
)
Run Code Online (Sandbox Code Playgroud)
example.com/contact-us/will的回复是英语和example.com/cs/contact-us/捷克语。
小智 0
这是我的解决方案:
创建 django 中间件:django_app/lib/middleware/locale.py
from django.utils import translation
class SwitchLanguageMiddleware(object):
def process_request(self, request):
lang = request.GET.get('lang', '')
if lang:
translation.activate(lang)
request.LANGUAGE_CODE = translation.get_language()
def process_response(self, request, response):
request.session['django_language'] = translation.get_language()
if 'Content-Language' not in response:
response['Content-Language'] = translation.get_language()
translation.deactivate()
return response
Run Code Online (Sandbox Code Playgroud)
读取请求的get参数,如果有lang属性,则切换语言。例如:/about-us/?lang=pl
将此中间件包含到 settings.py 中:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.common.CommonMiddleware',
'django_app.libs.middleware.locale.SwitchLanguageMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3998 次 |
| 最近记录: |