禁用Django中特定应用的本地化

时间:2012-03-18 02:51:19

标签: django localization

有没有办法在Django的设置中禁用特定应用的本地化?

有两个可能的原因:

  • 关闭管理员应用中的本地化,例如contrib / admin,因为管理员更愿意使用英语而不是本地语言。

  • 某些应用默认翻译非常糟糕且令人困惑,我们希望在开发过程中将其关闭,直到我们进行正确的翻译。

我知道我们可以删除翻译文件或其他黑客,但是当我们进行频繁升级时,在设置中使用它会更方便。

问候。

2 个答案:

答案 0 :(得分:2)

没有此类设置可禁用特定应用的翻译。

关于您的第一个用例,使用其他语言的管理员很容易通过自定义中间件获得,请查看以下代码段:

http://source.mihelac.org/2009/11/12/django-set-language-for-admin/

如果第三方应用的网址方案很简单,也许您可​​以使用相同的方法为它们设置不同的(默认)语言。

答案 1 :(得分:1)

如果启用LocaleMiddleware,则可以为该用户设置适当的cookie或会话变量。我通常使用系统的可用语言实现下拉列表。用户选择语言,并根据该设置为该用户设置会话或cookie。这允许管理员在翻译其他区域时保持英语。

以下是查找顺序(来自文档):

First, it looks for a django_language key in the current user's session.

Failing that, it looks for a cookie.

The name of the cookie used is set by the LANGUAGE_COOKIE_NAME setting.
(The default name is django_language.)

Failing that, it looks at the Accept-Language HTTP header. This header is sent
by your browser and tells the server which language(s) you prefer, in order by
priority. Django tries each language in the header until it finds one with
available translations.

Failing that, it uses the global LANGUAGE_CODE setting.

编辑:

通过设置无法实现;但是,根据您使用应用程序的方式,您可以“强制”翻译您想要的语言。如果您的语言是RTL(显示问题),这可能会导致问题。

您提到的解决方案(删除实际的gettext转换文件)是一种方法,但不建议这样做。

由于翻译文本的显示是模板引擎的功能,因此简单地覆盖这些应用程序的模板并禁用翻译标签应该可以做到你想要的,并且更加便携。