2011-09-27 10 views
6

Tôi gặp sự cố khi bản địa hóa dự án django-nonrel, được triển khai sang GAE. Do GAE tôi phải đưa mọi thứ vào thư mục dự án của tôi, vì vậy nó trông giống như một cái gì đó như thế nàyHiệu ứng Django bỏ qua chuyển đổi không hoạt động đối với tôi

project 
    + django 
    + dbindexer 
    + registration 
    + myapp 
    ... 
    + locale 
    + templates 

Tôi có dây để bản địa hoá trong templates thư mục, và trong thư mục myapp. Khi tôi chạy python manage.py makemessages -l en --ignore django\* từ thư mục dự án, nó thu thập thông tin qua tất cả các thư mục của dự án, bao gồm django, vì vậy tôi nhận được một tệp po khá lớn. Chuỗi của tôi từ các mẫu có, cùng với tất cả các chuỗi từ thư mục django.

after --ignore (hoặc chỉ -i) Tôi đã cố gắng để pu djangodjango/*, nhưng không có gì thay đổi. Bất kỳ ý tưởng nào?

Trả lời

14

./manage.py giúp đỡ makemessages

-i PATTERN, --ignore=PATTERN 
         Ignore files or directories matching this glob-style 
         pattern. Use multiple times to ignore more. 

Tôi vừa thử nghiệm nó, và lệnh này bỏ qua thành công ứng dụng của tôi:

./manage.py makemessages -l da -i " Nhưng hãy cẩn thận trước khi bạn kiểm tra nó, bạn nên xóa tập tin .po cũ, vì tôi nghĩ nó sẽ không tự động loại bỏ các dòng dịch từ việc thực thi makemessages trước đây của bạn.

+0

cảm ơn, "django *" cũng hoạt động cho tôi. – balazs

2

Vấn đề là với mẫu - có thể vỏ đã mở rộng nó cho bạn.

Nói chung - tốt nhất là nên tránh dấu phân tách đường dẫn (dù/hoặc \) trong mẫu.

Nếu bạn cần phải luôn luôn vượt qua các lựa chọn cụ thể cho các lệnh makemessages, bạn có thể xem xét wrapper của riêng bạn, như thế này, mà tôi sử dụng bản thân mình:

from django.conf import settings 
from django.core.management.base import BaseCommand 
from django.core.management import call_command 

class Command(BaseCommand): 
    help = "Scan i18n messages without going into externals." 

    def handle(self, *args, **options): 
     call_command('makemessages', 
      all=True, 
      extensions=['html', 'inc'], 
      ignore_patterns=['externals*']) 

này giúp bạn tiết kiệm gõ, và đưa ra một mục chung điểm để quét các tin nhắn trong toàn bộ dự án (đồng nghiệp phiên dịch của bạn sẽ không hủy các bản dịch bằng cách bỏ sót một số tham số).

Không xóa tệp cũ .po, sau khi bạn đã xóa nó khỏi thư hoàn toàn không mong muốn (tức là - từ thư mục 'django'). Điều này cho phép gettext tái chế thông điệp không sử dụng cũ, một khi chúng được sử dụng một lần nữa (hoặc những người simmilar, mà sẽ được đánh dấu là #, fuzzy

Sửa -. Như mt4x lưu ý - các wrapper trên không cho phép đi qua các tùy chọn để . lệnh bọc này rất dễ dàng để sửa chữa:

from django.conf import settings 
from django.core.management.base import BaseCommand 
from django.core.management import call_command 
from django.core.management.commands.makemessages import Command as MakeMessagesCommand 

class Command(BaseCommand): 
    help = "Scan i18n messages without going into externals." 
    option_list = MakeMessagesCommand.option_list 

    def handle(self, *args, **options): 
     options['all'] = True 
     options['extensions'] = ['html', 'inc'] 
     options['ignore_patterns'] = ['externals*'] 
     call_command('makemessages', **options) 

Do đó - bạn có thể sửa chữa những gì cần phải được cố định, và uốn cong phần còn lại và điều này cần không được ghi đè mù như trên, nhưng cũng có một số chỉnh sửa có điều kiện. các tham số được truyền cho lệnh - gắn thứ gì đó vào danh sách hoặc chỉ thêm nó vào khi nó bị thiếu.

+0

Điều này không cho phép sử dụng các tùy chọn 'makemessages' chuẩn, như' --domain', '--locale' và các tùy chọn khác mà không tạo thêm trình bao bọc hoặc thêm các tùy chọn theo cách thủ công. Tôi có đúng không? – m4tx

+0

@ m4tx - có, nhưng có một sửa chữa đơn giản cho điều đó.Tôi sẽ cập nhật câu trả lời của mình. –

+0

Giải pháp tốt. +1 – m4tx