【问题标题】:Django: default language i18nDjango:默认语言 i18n
【发布时间】:2011-04-28 08:51:50
【问题描述】:

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

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

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

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

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>

【问题讨论】:

  • 我认为你不能切换回荷兰语与你的语言环境文件无关,而与你改变语言的方式(视图、中间件)有关?你能提供更多的细节吗?关于您的问题:不,您不需要为您编写可翻译字符串的语言提供语言环境文件。
  • 我正在使用 django.middleware.locale.LocaleMiddleware。我会将更改会话的视图添加到我的问题中。

标签: django localization


【解决方案1】:

默认语言字符串不存储在 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')),

【讨论】:

  • 这使它对我有用,非常感谢。我错过了 URLconf 部分。
【解决方案2】:

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

别忘了使用translation.activate(lang_code),这真的很重要。

您可以使用标准方法通过 post 方法更改语言或编写自己的中间件并在例如 url 中更改它。

干杯, 伊格纳斯

【讨论】:

    【解决方案3】:

    如果您像这样使用{% url web-language 'nl-nl' %},则'nl-nl' 在您的args (args[0]) 中,而不是在您的kwargs 中。对于kwargs,您应该使用类似{% url web-language language='nl-nl' %} 的语法。那么你的观点应该有效。希望您的 urlconf 与视图处理它的方式相匹配。

    【讨论】:

    • 感谢您发现这个错误。
    猜你喜欢
    • 1970-01-01
    • 2012-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 2019-07-08
    • 2011-05-12
    相关资源
    最近更新 更多