2011-04-28 124 views
7

我有一个用荷兰语写的网站。现在我必须为法语网站提供第二种语言。Django:默认语言i18n

因此,我包围了所有需要使用gettext函数进行翻译的文本,创建了po文件并将其编译为mo文件。我还创建了一个视图,将django_language会话设置为适当的语言代码。所以现在法国版本正在工作,但我不能切换回荷兰版本。

所以我想知道是否需要为荷兰版本创建一个po/mo文件?正在通过gettext的文本已经在荷兰。有没有办法说使用'默认文本'?

这是我使用的语言代码添加到我的会话视图:不存储在PO

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

我认为你不能切换到荷兰回来与你的语言环境文件无关,而是用你改变语言(视图,中间件)的方式?你能否提供一些更详细的信息?关于您的问题:不,您不需要为您编写可转换字符串的语言提供语言环境文件。 – 2011-04-28 08:57:30

+0

我正在使用django.middleware.locale.LocaleMiddleware。我将添加将会话更改为我的问题的视图。 – Pickels 2011-04-28 09:00:52

回答

13

默认语言字符串:

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) 

在我的模板我用下面的网址/ 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')), 
+0

这使它为我工作,非常感谢。我错过了URLconf部分。 – DrKaoliN 2013-05-26 10:19:20

2

这个问题和答案可能是有益的 - set language within a django view

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

您可以使用标准方式使用post方法更改语言,或者编写自己的中间件,然后将其更改为例如url中的内容。

干杯, Ignas

1

如果你使用{% url web-language 'nl-nl' %}这样'nl-nl'是你argsargs[0]),而不是在你的kwargs。对于kwargs,您应该使用类似{% url web-language language='nl-nl' %}的语法。那么你的看法应该工作。希望你的urlconf与视图处理方式相匹配。

+0

感谢您捕捉该错误。 – Pickels 2011-04-28 10:45:26