我的后端使用Django,我的前端完成了ReactJS。
当用户更改其个人资料的语言时,我会使用数据对象/i18n/setlang/
对{language: [language_code]}
执行POST ajax调用并刷新页面。
我只是通过这个ajax调用来改变语言,一堆带有翻译的.po / .mo文件,我使用gettext()来翻译JS中的行。
这适用于Chrome,但在Firefox上完全忽略,并且不进行任何翻译。知道为什么吗?
我的中间件包含django.middleware.locale.LocaleMiddleware
,我的LOCALE_PATH设置如下:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale')
]
在Chrome上,值request.META['HTTP_ACCEPT_LANGUAGE']
为
fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7,pl;q=0.6
(我支持的所有语言) 而在Firefox上,它返回:
en,en-US;q=0.5
仍然不确定为什么......
答案 0 :(得分:0)
关于此问题有Firefox bug
答案 1 :(得分:0)
我设法通过在执行AJAX调用时在数据库中保存用户首选项来解决此问题,然后在用户获取主页面视图时更新session[translation.LANGUAGE_SESSION_KEY]
值。
from django.utils import translation
class MainPageView(TemplateView):
template_name = 'index.html'
def get(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return super(MainPageView, self).get(self, request, *args, **kwargs)
profile = request.user.profile
if profile.preferred_language is None or profile.preferred_language == "":
profile.preferred_language = request.LANGUAGE_CODE
profile.save()
else:
request.session[translation.LANGUAGE_SESSION_KEY] = profile.preferred_language
return super(MainPageView, self).get(self, request, *args, **kwargs)