我正在try 使用I18N以不同的语言呈现模板.我做了我能读到的所有事情,从设置语言代码、创建和编译翻译文件(包括模板中的翻译标记等等),我的模板仍然以英语呈现,即使通过{{language_code}}变量指向我想呈现的正确(和不同的)代码.我遗漏了什么?

模板:

{% extends "base.html" %}
{% load i18n %}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}
{% get_current_language_bidi as LANGUAGE_BIDI %}
{% block title %}{% trans "translation test" %}{% endblock %}
{% block content %}
<div id="some-text">
  {% trans "some translated text goes here" %}
  {% blocktrans %}
  <ol>
    <li>here are some</li>
    <li>items that should be</li>
    <li>translated as well</li>
  </ol>
  {% endblocktrans %}
  <ul>
      <li>The current language is <b>{{ LANGUAGE_CODE }}</b></li>
      {% if LANGUAGE_BIDI %}
        <li>The current language is bidirectional</li>
      {% else %}
        <li>The current language is <b>not</b> bidirectional</li>
      {% endif %}
      <li>Available languages are:
        <ul>
        {% for lang in LANGUAGES %}
          <li>{{ lang.1}}</li>
        {% endfor %}
        </ul>
      </li>
  </ul>
</div>
{% endblock %}

视图:

from django.shortcuts import render_to_response
from django.template import RequestContext
from pdb import set_trace as debugger
def check(request):
    return render_to_response('index.html', context_instance=RequestContext(request)

命令行(我确实在.po文件中填写了正确的翻译):

$ django-admin.py makemessages -l he-il -e html
$ django-admin.py compilemessages

settings.py:

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'he-il'

gettext = lambda s: s
LANGUAGES = (
    ('he-il', gettext('Hebrew')),
    ('en-us', gettext('English')),
)

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.i18n",
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
)

推荐答案

我的做法是使用Django在其自己的转换文件中使用的确切语言代码(而不是通过settings.py中提供的链接),前提是支持该语言(如果不支持,事情会变得复杂,因为您还必须向Django提供您自己的转换文件).

我通过转到$DJANGO_DIR/CONF/LOCALE并查看文件夹的名称(对我来说它位于/usr/local/lib/python2.6/dist-packages/django/conf/locale,,但它可能因操作系统等而异)找到了这段代码.

Django相关问答推荐

AttributeError:';ManyToOneRel&39;对象没有属性';attname';

如何在Django中显示多个相关对象

带有变量键的 Django 模板括号表示法不起作用

Django 根据子级过滤父级

如何自动删除 Django 模型中的字段值?

Django中的InvalidOperation错误[]

来自日历的 Django 动态 url

如何在两个字段上查找 django 模型的副本?

访问默认的 django-allauth 登录和注册页面时出现 TemplateSyntaxError

Django 关系嵌套related_name

如何在没有此前缀的情况下修复此 django 路径?

在 Django 模板中分页时如何正确显示与其父模型字段关联的所有内联字段?

组织大型 Django 元素的指南

相关字段查找无效:​​icontains

更新Django模型对象多个字段的有效方法

base.html 中的 Django 变量

如何动态检索 Django 模型类?

django 表单为关键字参数获取了多个值

在 Django 1.8 或更高版本中填充时出现Models aren't loaded yet"错误

如何在字段集中显示 Django 管理内联模型?