栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

没有路径前缀的Django i18n默认语言

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

没有路径前缀的Django i18n默认语言

请看下面的答案,Django 1.10本身支持它

我遇到了这个问题并以这种方式解决了:

  • 创建了一个

    i18n_patterns
    不加前缀网站主要语言(在中定义
    settings.LANGUAGE_CODE
    )的替代方法。

  • 创建了仅使用URL前缀语言来激活当前语言的备用中间件。

使用此技术我没有看到任何副作用。

代码:

# coding: utf-8"""Cauê Thenório - cauelt(at)gmail.comThis snippet makes Django do not create URL languages prefix (i.e. /en/)for the default language (settings.LANGUAGE_CODE).It also provides a middleware that activates the language based only on the URL.This middleware ignores user session data, cookie and 'Accept-Language' HTTP header.Your urls will be like:In your default language (english in example):    /contact    /news    /articlesIn another languages (portuguese in example):    /pt/contato    /pt/noticias    /pt/artigosTo use it, use the 'simple_i18n_patterns' instead the 'i18n_patterns'in your urls.py:    from this_sinppet import simple_i18n_patterns as i18n_patternsAnd use the 'SimpleLocaleMiddleware' instead the Django's 'LocaleMiddleware'in your settings.py:    MIDDLEWARE_CLASSES = (    ...        'this_snippet.SimpleLocaleMiddleware'    ...    )Works on Django >=1.4"""import refrom django.conf import settingsfrom django.conf.urls import patternsfrom django.core.urlresolvers import LocaleRegexURLResolverfrom django.middleware.locale import LocaleMiddlewarefrom django.utils.translation import get_language, get_language_from_pathfrom django.utils import translationclass SimpleLocaleMiddleware(LocaleMiddleware):    def process_request(self, request):        if self.is_language_prefix_patterns_used(): lang_pre = (get_language_from_path(request.path_info) or   settings.LANGUAGE_CODE) translation.activate(lang_pre) request.LANGUAGE_CODE = translation.get_language()class NoPrefixLocaleRegexURLResolver(LocaleRegexURLResolver):    @property    def regex(self):        language_pre = get_language()        if language_pre not in self._regex_dict: regex_compiled = (re.compile('', re.UNICODE)        if language_pre == settings.LANGUAGE_CODE        else re.compile('^%s/' % language_pre, re.UNICODE)) self._regex_dict[language_pre] = regex_compiled        return self._regex_dict[language_pre]def simple_i18n_patterns(prefix, *args):    """    Adds the language pre prefix to every URL pattern within this    function, when the language not is the main language.    This may only be used in the root URLconf, not in an included URLconf.    """    pattern_list = patterns(prefix, *args)    if not settings.USE_I18N:        return pattern_list    return [NoPrefixLocaleRegexURLResolver(pattern_list)]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381866.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号