首页 > 解决方案 > 网站和 API 的不同语言设置

问题描述

我有一个应用程序有两种语言,波斯语和英语。这个应用程序提供了一个使用 Django 模板的网站和一个使用纯 Django 的带有两个端点的简单 API。

现在我面临一个我无法解决的问题:我希望网站默认以波斯语加载,而 API 以英语加载。我已将其设置为LANGUAGE_CODE默认'en'情况下以英语加载所有内容。我没有使用会话或 cookie。

无论如何,我可以告诉网站将语言更改为波斯语,同时保持 API 为英语吗?我是否必须为此使用 cookie(我无法实施会话)?如果是这样,它也会影响 API 吗?我已经多次阅读 Django 文档,但仍然无法找出正确的方法来解决这个问题。任何帮助将非常感激。

编辑:用户可以在网站上切换语言,我只希望默认使用波斯语。想我应该补充一下。

标签: 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 路径执行相同操作。

请注意,如果您LocaleMiddlewareMIDDLEWARE设置中有 ,则必须将其放在之后 LocaleMiddleware


作为对上述内容的增强,您可以处理Accept-Language标头,以便当客户端专门传递要选择的语言时,您可以相应地选择(基于支持和优先级),而不是在这种情况下硬编码为英语。


推荐阅读