开发者

Django: default language i18n

I have a website that is written in dutch. Now I have to provide a second language for that website which is french.

So I surrounded all text that needs to be translated with the gettext function, created the po files and compiled those to mo files. I also created a view that sets the django_language session to the appropriate language code. So now the french version is working but I can't switch back to t开发者_如何学编程he dutch version.

So I was wondering do I need to create a po/mo file for the dutch version also? The text that's being past to gettext is already in dutch. Is there a way to say use the 'default text'?

This is the view I use to add the language code to my session:

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)

In my templates I use the following urls:

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


Default language strings are not stored in po/mo files, they go directly in code and templates - seems that you have this right.

You can switch back to it, by setting the session variable django_language back to dutch.

Ensure, that you have your settings set the right way:

LANGUAGE_CODE = 'nl' #default language

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

Don't forget, that you don't have to write code to switch between languages by your self. Better to use special django view (quote from django book):

As a convenience, Django comes with a view, django.views.i18n.set_language, that sets a user’s language preference and redirects back to the previous page.

Activate this view by adding the following line to your URLconf:

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


this question and answers could be helpful - set language within a django view

Don't forget to use translation.activate(lang_code), this is really important.

You can use standard way to change languages with the post method or write your own middleware and change it for example in the url then.

Cheers, Ignas


If you use {% url web-language 'nl-nl' %} like this 'nl-nl' is in your args (args[0]), not in your kwargs. For kwargs you should use syntax like {% url web-language language='nl-nl' %}. Then your view should work. Hopefully your urlconf matches the way the view is dealing with it.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜