首页 > 解决方案 > 如何在 Django 中更改语言的本地路径?

问题描述

我在 Angular 中设置了 3 种语言(['es'、'en'、'it'])的网络,可与 Django 服务器一起使用。Django默认英文本地路径定义为/en,我希望英文配置的url为'/us'(默认为'/en'),我只想改成英文,换成'es ' 或默认情况下的 'it' 就可以了。我希望 URL 看起来像这样myurl.com/us的英文,你会建议我如何进行此更改?

结构如下:

-apps
--webapp
---templates
----webapp
-----en (inside index.html)
-----es (inside index.html)
-----it (inside index.html)
-conf
--settings.py
-middleware
--locale.py

conf.settings.py have this language configuration
LANGUAGES = (
    ('es', _('Spanish')),
    ('it', _('Italian')),
    ('en', _('English')),
)
LANGUAGE_CODE = 'es'
LANGUAGE_CODES = [language[0] for language in LANGUAGES]

此外,我还配置了一个中间件来识别用户的位置并将相应的语言代码放在 URL 中

from django.conf import settings
from .utils.geolocation import get_language_by_ip
cookie_name = settings.LANGUAGE_COOKIE_NAME
class LocalizationMiddleware(object):

    def get_language_cookie(self, request):
        return request.COOKIES.get(cookie_name)

    def set_language_cookie(self, request, value):
        request.COOKIES[cookie_name] = value

    def get_i18n_url_language(self, request):
        url = request.path.split('/')
        if len(url) > 1 and len(url[1].split('-')[0]) == 2:
            return url[1]
        return None

    def process_request(self, request):
        language = self.get_i18n_url_language(request)
        if language is not None and language not in settings.LANGUAGE_CODES:
            return
        if language is None:
            language = self.get_language_cookie(request)
        if language is None:
            language = get_language_by_ip(request)
        if language is None:
            language = settings.LANGUAGE_CODE
        self.set_language_cookie(request, language)
        return None

    def process_response(self, request, response):
        response.set_cookie(cookie_name, request.COOKIES.get(cookie_name, settings.LANGUAGE_CODE))
        return response

这一切都很好,但是我希望英语的网址从 .../en 更改为 .../us

标签: djangointernationalizationlocale

解决方案


推荐阅读