【问题标题】:Django i18n doesn't change languageDjango i18n 不会改变语言
【发布时间】:2016-10-18 20:56:32
【问题描述】:

我正在尝试使用 I18N 将我的 Django 网站国际化。当我在模板中设置语言时,它不会改变。这是我的代码:

# my flow
PROJECT
- LOCALE
- MYSITE
  - urls.py
  - settings.py
- APP1
  - views.py
- APP2
manage.py

# settings.py
LANGUAGES = (
 ('it', 'Italiano'),
 ('en', 'English'),
        )
LANGUAGE_CODE = 'it'
USE_I18N = True
LOCALE_PATHS = ('home/project/locale/',)
MIDDLEWARE_CLASSES = ( ...
                  'django.middleware.locale.LocaleMiddleware',
                 )   
TEMPLATE_CONTEXT_PROCESSORS = (...,
                  'django.core.context_processors.i18n',
                 )

# views.py

from django.utils.translation import ugettext as _
text = _("this is a text")
...
return render_to_response('index.html', {'text': text,
                         },
                          context_instance=RequestContext(request)) 
# index.html
...
{% trans 'Dashboard' %}

# In index.html I change the language and I 
<form action="{{site_url}}i18n/setlang/" method="
{% csrf_token %}
<input name="next" type="hidden" value="" />
<select name="language">
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
  <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE selected="selected"{% endif %}>
{{ language.name_local }} ({{ language.code }})
      </option>
    {% endfor %}
</select>
<input type="submit" value="Change" />
</form>

# urls.py

urlpatterns = patterns('',
     (r'^admin/', include(admin.site.urls)),
     (r'^i18n/', include('django.conf.urls.i18n')),
      url(r'^$', TemplateView.as_view(template_name="login.html")),
     ....

当我更改语言时,什么也没有发生。我在哪里做错了?非常感谢您的帮助

【问题讨论】:

标签: python django internationalization


【解决方案1】:

在你的 urls.py 中:

    from django.conf.urls.i18n import i18n_patterns

    urlpatterns += i18n_patterns('',

    )

或者(如果您希望翻译所有网址:

    urlpatterns = i18n_patterns('',

    )

要启用更改语言 url 请求添加(确保这在 i18n_patterns 之外

    (r'^i18n/', include('django.conf.urls.i18n'))

【讨论】:

  • 现在我试试。如何将 (r'^i18n/', include('django.conf.urls.i18n')) 放在 i18n_patterns 之外?谢谢
  • urlpatterns = patterns('',(r'^i18n/', include('django.conf.urls.i18n')), )
  • 非常感谢。我试过了,但是当我更改语言时出现错误。我收到“找不到页面 (404)。请求 URL:mysite/it/i18n/setlang”。对不起,但我有点困惑..
  • 查看Django文档,需要使用POST表单来更改语言:docs.djangoproject.com/en/1.6/topics/i18n/translation/…
【解决方案2】:

从 PyCHarm 迁移到 Linux 服务器时,我们遇到了同样的问题。在本地服务器上 LANGUAGES 设置可以以 xx-aa 的形式找到,但是当我们在具有相同配置的 Ubuntu 上尝试时,它只能在 LANGUAGE_CODE 设置中找到默认语言。

如何在 Ubuntu Linux 下激活 LANGUAGES 阵列中的所有 LANGUAGES 设置。

【讨论】:

  • 你找到解决办法了吗?
  • 取决于 django 的版本,我想我们已经更新,它解决了很多语言问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
相关资源
最近更新 更多