django - 网站和 API 的不同语言设置
问题描述
我有一个应用程序有两种语言,波斯语和英语。这个应用程序提供了一个使用 Django 模板的网站和一个使用纯 Django 的带有两个端点的简单 API。
现在我面临一个我无法解决的问题:我希望网站默认以波斯语加载,而 API 以英语加载。我已将其设置为LANGUAGE_CODE
默认'en'
情况下以英语加载所有内容。我没有使用会话或 cookie。
无论如何,我可以告诉网站将语言更改为波斯语,同时保持 API 为英语吗?我是否必须为此使用 cookie(我无法实施会话)?如果是这样,它也会影响 API 吗?我已经多次阅读 Django 文档,但仍然无法找出正确的方法来解决这个问题。任何帮助将非常感激。
编辑:用户可以在网站上切换语言,我只希望默认使用波斯语。想我应该补充一下。
解决方案
您可以使用请求中间件将 API 的语言设置为英语,假设 API URL 为/api/
:
from django.utils import translation
class APILanguageMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.path.startswith('/api/'):
lang_code = 'en'
translation.activate(lang_code)
request.LANGUAGE_CODE = translation.get_language()
return self.get_response(request)
除了硬编码,您还可以从settings
例如您可以设置的值中获取值:
API_LANG_CODE = 'en'
然后你可以这样做:
from django.utils import translation
from django.conf import settings
class APILanguageMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
if request.path.startswith('/api/'):
lang_code = getattr(settings, 'API_LANG_CODE', 'en')
translation.activate(lang_code)
request.LANGUAGE_CODE = translation.get_language()
return self.get_response(request)
您也可以对起始 URL 路径执行相同操作。
请注意,如果您LocaleMiddleware
的MIDDLEWARE
设置中有 ,则必须将其放在之后 LocaleMiddleware
。
作为对上述内容的增强,您可以处理Accept-Language
标头,以便当客户端专门传递要选择的语言时,您可以相应地选择(基于支持和优先级),而不是在这种情况下硬编码为英语。
推荐阅读
- android - 每当我更改其属性时,Android 线性布局都会不断重新排序子级
- android - MaterialDatePicker todayInUtcMilliseconds 方法返回不正确的日期
- node.js - 如何为所有响应添加中间件?(express.js)
- laravel - 如何选择用户的电子邮件来发送电子邮件?
- docker - Makefile 条件 PHONY 目标执行
- javascript - TypeError: DATA.total_cases 未定义,找不到错误?
- bash - Bash 脚本以 sudo 密码作为变量打开新的 gnome 终端
- android - 如何预填充 Android Room 数据库?
- c++ - 将指针类分配给新类,C++
- javascript - 如何创建从 Google App 脚本到 Web App 的消息框