ไม่พบเส้นทางโลแคลเพื่อจัดเก็บคำแปลสำหรับไฟล์ __init__.py


106

ฉันกำลังพยายามแปลแอป Django ฉันสร้างสตริง{% trans %}ในเทมเพลตของฉัน อย่างไรก็ตามเมื่อฉันดำเนินการคำสั่งต่อไปนี้ในโฟลเดอร์แอพของฉันฉันได้รับข้อความแสดงข้อผิดพลาด:

$ django-admin.py makemessages -l fr 
CommandError: Unable to find a locale path to store translations for file __init__.py`

ฉันทำอะไรผิด?

คำตอบ:


157

เปิดออกคุณต้องสร้างโฟลเดอร์ครั้งแรกที่ใช้locale mkdir localeหากคุณกำลังเรียกใช้คำสั่งจากภายในโฟลเดอร์แอพคุณต้องมีlocaleโฟลเดอร์ภายในโฟลเดอร์แอพนั้น


ขอบคุณช่วยฉันด้วย เพียงดำเนินการmakemessagesคำสั่งจากlocaleไดเร็กทอรีนั้นหากมีอยู่แล้ว
SaeX

4
ใน Django 1.9 คุณต้องกำหนดLOCALE_PATHSแม้ว่าจะเป็นlocaleอย่างอื่นข้อความที่คอมไพล์แล้วจะไม่สามารถค้นพบได้
Wtower

โปรดทราบว่าโฟลเดอร์นี้ไม่ได้มี 's' และมันจะต้องอยู่ในโฟลเดอร์แอป (วิธีการที่คุณไม่ได้มีLOCALE_PATHSการกำหนดค่า)
tobiasBora

28

จริงๆแล้วคุณสามารถกำหนดค่าตำแหน่งของโฟลเดอร์โลแคลได้ ใน settings.py ของคุณเพิ่ม:

LOCALE_PATHS = (
    PROJECT_ROOT + '/website/locale', )

จากนั้นสร้างโฟลเดอร์สำหรับแต่ละภาษาที่คุณต้องการแปล:

mkdir -p website/locale/de

2
คุณไม่จำเป็นต้องสร้างโฟลเดอร์สำหรับแต่ละภาษา django-admin makemessages จะทำเพื่อคุณ
MagicLAMP

นี่สับสนเราควรสร้างรายการเดียวสำหรับทุกแอปหรือไม่? หรือจัดเก็บสถานที่ทั้งหมดสำหรับแอปทั้งหมดในโฟลเดอร์ภาษาเดียวกันหรือไม่
Vadorequest

12

ปัญหาคือคำสั่งไม่ได้ถูกเรียกใช้จากไดเร็กทอรีแอพ แต่มาจากไดเร็กทอรีโปรเจ็กต์ ตัวอย่างจากเอกสารนี้อธิบายว่า:

เปิดออกคุณต้องสร้างโฟลเดอร์ครั้งแรกที่ใช้localemkdir locale

./manage.py makemessages[…] รันบนแผนผังซอร์สทั้งหมดของไดเร็กทอรีปัจจุบันและดึงสตริงทั้งหมดที่ทำเครื่องหมายไว้สำหรับการแปล มันสร้าง (หรืออัพเดต) ไฟล์ข้อความใน conf / locale (ในไดเร็กทอรี Django tree) หรือ locale (สำหรับโปรเจ็กต์และแอ็พพลิเคชัน)

ดังนั้นคุณสามารถเรียกใช้คำสั่งจากไดเรกทอรีแอป:

$ cd app
$ django-admin makemessages -l <locale>

... หรือคุณกำหนดไดเร็กทอรีโลแคลของโปรเจ็กต์โดยใช้LOCALE_PATHSและคุณสามารถเรียกใช้makemessagesจากไดเร็กทอรีหลักจากที่นั่น

ไม่ว่าจะด้วยวิธีใดคุณควรตรวจสอบว่ามี./locale/ไดเร็กทอรีอยู่และสร้างโดยใช้

$ mkdir locale

ในกรณีที่ไม่ใช่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.