我有一个用荷兰语写的网站。现在我必须为该网站提供法语的第二语言。
所以我包含了所有需要用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>
答案 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符合视图处理它的方式。