Django:默认语言i18n

时间:2011-04-28 08:51:51

标签: django localization

我有一个用荷兰语写的网站。现在我必须为该网站提供法语的第二语言。

所以我包含了所有需要用gettext函数翻译的文本,创建了po文件并将它们编译成mo文件。我还创建了一个视图,将django_language会话设置为适当的语言代码。所以现在法语版本正在运行,但我无法切换回荷兰语版本。

所以我想知道我还需要为荷兰语版本创建一个po / mo文件吗?正在过去获取文本的文本已经在荷兰语中。有没有办法说使用'默认文字'?

这是我用来将语言代码添加到会话中的视图:

class LanguagePickerView(RedirectView):
    url = '/'

    def get(self,request,*args, **kwargs):
        request.session['django_language'] = self.kwargs.get('language')
        return super(LanguagePickerView, self).get(request, args, kwargs)

在我的模板中,我使用以下网址:

<a href='{% url web-language 'nl-nl' %}'>NL</a>
<a href='{% url web-language 'fr' %}'>fr</a>

3 个答案:

答案 0 :(得分:19)

默认语言字符串不存储在po / mo文件中,它们直接用于代码和模板 - 看起来你有这个权利。

您可以通过将会话变量django_language设置回荷兰语来切换回它。

确保您的设置设置正确:

LANGUAGE_CODE = 'nl' #default language

LANGUAGES = (
  ('nl', _('Dutch')),
  ('fr', _('French')),
)

不要忘记,您不必编写代码来自行切换语言。最好使用特殊的django视图(引自django book):

为方便起见,Django附带了一个视图django.views.i18n.set_language,用于设置用户的语言首选项并重定向回上一页。

通过在URLconf中添加以下行来激活此视图:

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

答案 1 :(得分:3)

这个问题和答案可能有所帮助 - set language within a django view

不要忘记使用translation.activate(lang_code),这非常重要。

您可以使用标准方式使用post方法更改语言,也可以编写自己的中间件,然后在网址中进行更改。

干杯, Ignas

答案 2 :(得分:1)

如果您{% url web-language 'nl-nl' %} 'nl-nl'使用args args[0]kwargs),而不是kwargs。对于{% url web-language language='nl-nl' %},您应该使用{{1}}之类的语法。然后你的观点应该有效。希望你的urlconf符合视图处理它的方式。

相关问题