2011-09-27 9 views
6

मुझे एक डीजेंगो-नॉनरल परियोजना को स्थानीयकृत करने में समस्याएं हैं, जो जीएई को तैनात की जाती हैं। GAE की वजह से मैं अपने प्रोजेक्ट फ़ोल्डर में सब कुछ डाल करने के लिए है, तो यह इसDjango makemessages स्विच को अनदेखा करता है मेरे लिए काम नहीं करता

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

मैं templates निर्देशिका में स्थानीय बनाना तार है की तरह कुछ की तरह लग रहा है, और myapp निर्देशिका में। जब मैं प्रोजेक्ट से python manage.py makemessages -l en --ignore django\* चलाता हूं तो यह सभी प्रोजेक्ट की निर्देशिकाओं सहित django सहित क्रॉल करता है, इसलिए मुझे काफी बड़ी पीओ फ़ाइल मिलती है। टेम्पलेट्स से मेरे तार, django निर्देशिका से सभी तारों के साथ हैं।

--ignore (या बस -i) के बाद मैंने djangodjango/* पर प्रयास करने की कोशिश की, लेकिन कुछ भी नहीं बदला। कोई विचार?

उत्तर

14

./manage.py मदद makemessages

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

मैं सिर्फ यह परीक्षण किया है, और यह आदेश को सफलतापूर्वक अपने आवेदन पर ध्यान नहीं दिया:

./manage.py makemessages -l दा मैं " django * "

लेकिन सावधान रहें कि इससे पहले कि आप इसका परीक्षण करें, आपको पुराने .po फ़ाइल को हटा देना चाहिए, क्योंकि मुझे लगता है कि यह आपके पिछले makemessages निष्पादन से स्वचालित रूप से अनुवाद लाइनों को हटा नहीं देगा।

+0

धन्यवाद, "django *" भी मेरे लिए काम करता है। – balazs

2

समस्या पैटर्न के साथ है - शायद खोल आपके लिए इसका विस्तार कर रहा था।

सामान्य रूप से - पैटर्न में पथ विभाजक (चाहे/या \) से बचने के लिए अच्छा है।

आप हमेशा makemessages आदेश के लिए विशिष्ट विकल्पों पारित करने के लिए की जरूरत है, आप अपने खुद के आवरण, इस तरह विचार कर सकते हैं, जो मैं अपने आप को उपयोग करें:

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*']) 

यह आप टाइप बचाता है, और एक आम प्रवेश देता है परियोजना में संदेशों को स्कैन करने के लिए इंगित करें (आपका अनुवादक सहयोगी कुछ पैरामीटर को याद करके अनुवादों को नष्ट नहीं करेगा)।

पुरानी .po फ़ाइल को हटाएं, एक बार जब आप इसे पूरी तरह से अवांछित (यानी - 'django' निर्देशिका से) संदेशों से साफ़ कर देते हैं। यह gettext, पुराने अप्रयुक्त संदेशों पुनरावृत्ति करने के लिए एक बार वे फिर से उपयोग किया जाता है (या समान हैं, जो #, fuzzy के रूप में चिह्नित किया जाएगा

की अनुमति देता है संपादित करें -। के रूप में mt4x विख्यात - आवरण ऊपर करने के लिए विकल्पों पारित करने के लिए अनुमति नहीं है । लिपटे आदेश यह तय करने के लिए आसान है:

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) 

इस प्रकार है - आप क्या ठीक किया जाना आवश्यक ठीक कर सकते हैं, और बाकी फ्लेक्स और यह ऊपर की तरह अंधा ओवरराइड, लेकिन यह भी के कुछ सशर्त संपादित नहीं किया जा जरूरत है। पैरामीटर को आदेश में पास किया गया - किसी सूची में कुछ जोड़ना या गायब होने पर इसे जोड़ना।

+0

यह मानक 'makemessages' विकल्पों का उपयोग करने की अनुमति नहीं देता है, जैसे '--domain',' --locale' और अन्य, अधिक रैपर बनाने या विकल्पों को मैन्युअल रूप से जोड़ने के बिना। क्या मैं सही हू? – m4tx

+0

@ m4tx - हाँ, लेकिन इसके लिए एक सरल फिक्स है।मैं अपना जवाब अपडेट करूंगा। –

+0

अच्छा समाधान। +1 – m4tx

संबंधित मुद्दे