django - 如何在 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
解决方案
推荐阅读
- java - 创建 ExoPlayer 轨道选择器对话框时出错
- django - Django rest - 重新排列嵌套结构
- abap - VA01 合作伙伴选项卡的用户退出或 BAdI
- c# - ILSpy - 如何修改反编译的代码看起来像 Github 源代码?
- algorithm - 通过注册和注销来管理唯一的整数 ID
- php - 基于特定队列数据(不是交付标签)的确认队列。使用 RabbitMQ php。(不依赖于连接)
- mysql - MySQL在(唯一的)非连续整数字段中查找丢失的数字
- node.js - Typeorm:如何按日期订购一对多
- node.js - Facebook Conversion API 处理收到的一半事件
- mysql - 如何在Mysql中获取不重复的数据