使用i18n在Django中进行语言翻译

时间:2012-06-13 10:41:34

标签: django internationalization translation multilingual

我创建了多语言平面页面。我想根据我选择的语言翻译内容。 我推荐这段代码 Django i18n setlang view gives Error 404 当我选择语言时,post方法是调用i18n / setlang&再次进入同一页面,但内容不会改变。 有人可以帮我解决这个问题吗?

由于

设置

gettext = lambda s: s

LANGUAGES = (
    ('en', gettext('English'),),
    ('no', gettext('Norwegian'),),
)

TEMPLATE_CONTEXT_PROCESSORS = (
    'django.contrib.auth.context_processors.auth',
    'django.core.context_processors.i18n',
    'multilingual.context_processors.multilingual',
    'django.core.context_processors.media',
)

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

模板

{% load i18n %}
 <form action="/i18n/setlang/" method="post">
  {% csrf_token %}
   <input name="next" type="hidden" value="{{ redirect_to }}" />
   <select name="language">
      {% get_language_info_list for LANGUAGES as languages %}
      {% for language in languages %}
       <option value="{{ language.code }}">{{ language.name }} ({{ language.code }})</option>
      {% endfor %}
 </select>
 <input type="submit" value="Go" />
</form>


 **view.py**
 def index(request):
    return render_to_response('flatpages/index.html', locals(),   context_instance=RequestContext(request))

**index.html**
 {% block content %}
 {% load i18n %}
     <h1>{{ flatpage.title }}</h1>
     Language Code:{{ LANGUAGE_CODE}}<br>
     {% trans "Hello" %}<br>
     {% trans "Home" %}<br>
     {{ flatpage.content }}
 {% endblock content %}

在上面的代码中我使用了
url(r'^ i18n /',include('django.conf.urls.i18n')),
这意味着当提交表单时,它会从django的i18n.py文件中调用方法set_language。

我检查那个方法,在那个方法中“check_for_language(lang_code)返回false”
这就是会话变量未设置的原因。

有人可以告诉我为什么不设置这个? 设置区域设置路径时会有任何更改 我在项目文件夹中创建了语言环境文件夹。

1 个答案:

答案 0 :(得分:0)

404表示您正在调用不存在的页面。根据您的意见,我了解到您在/i18n/lang/处没有端点。

示例:

from django.views.i18n import set_language

url('^i18n/setlang/$', set_language)

但是,如果您想要一些自定义行为,那么请查看set_language并创建自己的实现