django LANGUAGE_CODE无效

时间:2016-05-21 20:18:28

标签: django internationalization locale

我有一个Django 1.9.1应用程序。其中一些出现在法语中,但不是全部。当我访问我的某个表单时,我会收到一些法语版的短语(“搜索”=>“Rechercher”,“名称”=>“Nom”),但不是我的任何应用程序的短语(例如,“添加新的”患者“,”照顾者“都是英文的。”

我配置了语言设置:

PROJECT_DIR = os.path.dirname(
    os.path.dirname(os.path.dirname(os.path.dirname(
    os.path.abspath(__file__)))))

LANGUAGES = [
  ('fr', _('French')),
  ('en', _('English')),
]
USE_I18N = True
USE_L10N = True
LOCALE_PATHS = (
    os.path.join(PROJECT_DIR, "locale"),
)

我已配置LocaleMiddleware:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    # LocaleMiddleware should be after SessionMiddleware and before CommonMiddleware
    # See https://docs.djangoproject.com/en/1.9/topics/i18n/translation/#how-django-discovers-language-preference
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

我有一些来自“makemessages -l fr”的翻译文件,翻译成我的短语:

locale/fr/LC_MESSAGES/django.po
locale/fr/LC_MESSAGES/django.mo

我在模板中加载了i18n。

{% load i18n %}

其中一些是法语,所以这不应该是问题。

我使用Quick Language Switcher发送Accept-Language:HTTP标头'fr'。

Django调试工具栏以法语(!)显示,并在HTTP请求中显示“Accept-Language:fr”,在HTTP响应中显示“Content-Language:fr”。它还说Django变量LANGUAGE_CODE是“en-us”(?),即使我已将该设置注释掉。

我已阅读"How Django discovers language preference"而我看不到我错过的内容。

1 个答案:

答案 0 :(得分:2)

我的LOCALE_PATH错了。这是一个太高的水平。这对我来说是正确的LOCALE_PATH:

BASE_DIR = os.path.dirname(
    os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

LOCALE_PATHS = (
    os.path.join(BASE_DIR, "locale"),
)