2012-06-13 49 views
0

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

由于

设置

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 /',包括('django的.conf.urls.i18n')),
这意味着当提交表单时,它调用django的i18n.py文件中的方法set_language。

我检查该方法,在该方法中“check_for_language(lang_code)返回false”
那为什么会话变量没有设置。

任何人都可以告诉我为什么没有设置?
设置中会有任何更改以设置语言环境的路径。
我在我的项目文件夹中创建了locale文件夹。

+0

你遵循了Django文档和设置相应的语言环境的中间件?换句话说,请发布您的相关设置,表格和视图 –

+0

感谢您的回复。我添加了我用于语言翻译的代码。你可以请参考和告诉我我该做什么错? – Meenakshi

+0

请添加视图.. –

回答

0

404表示您正在调用不存在的页面。通过你的意见,我明白你没有在/i18n/lang/端点。

例子:

from django.views.i18n import set_language 

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

但是如果你想要一些自定义的行为,以便看看set_language和创建自己的实现

+0

但是set_language已经在i18n中可用 – Meenakshi

+0

我没有得到404错误。 post方法方法调用正确。我只想将帖子回复作为语言代码并用该语言重新加载相同的页面。 – Meenakshi

+0

如果你没有得到404然后真的,你在**/i18n/lang/**的视图代码是什么,因为那里肯定有东西;-) –