django LANGUAGE_CODE ไม่ทำงาน

ฉันมีแอป 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 %}

บางส่วนเป็นภาษาฝรั่งเศส ดังนั้นจึงไม่น่าจะเป็นปัญหาอยู่แล้ว

ฉันใช้ด่วน ตัวสลับภาษาเพื่อส่ง Accept-Language: ส่วนหัว HTTP 'fr'

แถบเครื่องมือดีบัก Django จะแสดงเป็นภาษาฝรั่งเศส (!) และระบุว่า "Accept-Language: fr" ในคำขอ HTTP และ "Content-Language: fr" ในการตอบสนอง HTTP นอกจากนี้ยังบอกว่าตัวแปร Django LANGUAGE_CODE คือ "en-us" (?) แม้ว่าฉันจะใส่ความคิดเห็นในการตั้งค่านั้นก็ตาม

ฉันได้อ่าน "วิธีที่ Django ค้นพบภาษา การตั้งค่า" และฉันไม่เห็นสิ่งที่ฉันขาดหายไป


person dfrankow    schedule 21.05.2016    source แหล่งที่มา


คำตอบ (1)


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"),
)
person dfrankow    schedule 21.05.2016