相关疑难解决方法(0)

如何以正确的方式设置Django翻译?

我有一个翻译不能在Django 1.6上工作的问题!我已经添加到我的settings.py中

LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('de', ugettext('German')),
)
Run Code Online (Sandbox Code Playgroud)

还添加了中间件:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Run Code Online (Sandbox Code Playgroud)

以及我的*.py文件,每当我使用一个字符串,它应该是l10nd:

from django.utils.translation import ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)

我的模板以

{% extends "base.html" %}
{% load i18n %}
Run Code Online (Sandbox Code Playgroud)

并且在模板内部比我使用trans占位符.例如

<h1>{% trans "Register a tank" %}</h1>
Run Code Online (Sandbox Code Playgroud)

事实上,字符串出现在locale/de/LC_MESSAGES/django.po中,当我运行时我已经翻译了它们.例如

msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"
Run Code Online (Sandbox Code Playgroud)

我的浏览器设置为首先请求德语内容: 浏览器设置

我错过了什么?

PS我目前正在模糊的项目是在github上托管的:https://github.com/frlan/blankspot

python django django-i18n

27
推荐指数
1
解决办法
2万
查看次数

django语言环境如何在视图之间工作

我知道django首先从浏览器标题中获取网站的默认语言,然后如果它与设置中的可能选择匹配则显示该语言的页面.

我想要做的是在用户登录后更改和设置该语言.我为用户提供了默认设置的表单.登录后,从这些defaultSettings模型中选择默认语言.我正在做的是:

d = DefaultSettings.objects.filter(user = request.user)
if len(d) > 0 and d[0].has_default_language:
    from django.utils import translation      
    translation.activate(d[0].default_language)
    request.LANGUAGE_CODE = translation.get_language()
Run Code Online (Sandbox Code Playgroud)

而我所看到的是"错误"语言的页面.

这让我问 - 为什么?我自己没有编写代码.我从以下例子中得到了它

由于所有这些示例都修改了请求/响应middleware- 我真的必须这样做吗?是否Django在请求之间重置语言并尝试在每次请求后再次"猜测"它?

为什么我的设置方式不起作用?

艾伦

第一回复后更新(来自SindriGuðmundsson):

    if form.is_valid ( ):
        if not redirect_to or '//' in redirect_to or ' ' in redirect_to:
            redirect_to = settings.LOGIN_REDIRECT_URL
        if not form.cleaned_data [ 'remember_me' ]:
            request.session.set_expiry ( 0 )
        from django.contrib.auth import login
        login ( request, form.get_user ( ) ) …
Run Code Online (Sandbox Code Playgroud)

django internationalization

3
推荐指数
1
解决办法
2345
查看次数