2011-09-27 5 views
6

GAE에 배포 된 장고 - 비 (non-dom) 프로젝트를 지역화하는 데 문제가 있습니다. GAE의 때문에 나는 내 프로젝트 폴더에 모든 것을 넣어 가지고, 그래서 내가 templates 디렉토리에 현지화하는 문자열이이Django makemessages 무시 스위치가 작동하지 않습니다.

project 
    + django 
    + dbindexer 
    + registration 
    + myapp 
    ... 
    + locale 
    + 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 다 -i "를 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*']) 

이것은 당신이 입력 저장하고, 공통 항목을 제공합니다 프로젝트 전체에서 메시지를 검색하는 지점입니다 (번역사 동료는 일부 매개 변수를 누락하여 번역을 파괴하지 않습니다).

전혀 원하지 않는 (즉, 'django'디렉토리의) 메시지에서 이전 .po 파일을 삭제하지 마십시오. 이것은 그들이 다시 사용 (또는 #, fuzzy로 표시됩니다에 simmilar 사람, 일단에 gettext는, 오래된되지 않는 메시지를 재활용 할 수

을 편집 -. 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

이것은'--domain','--locale' 등과 같은 표준'makemessages' 옵션을 사용하지 못하게합니다. 더 많은 래퍼를 생성하거나 수동으로 옵션을 추가하지 않아도됩니다. 내가 맞습니까? – m4tx

+0

@ m4tx - 네,하지만 간단한 수정이 있습니다.나는 나의 대답을 업데이트 할 것이다. –

+0

좋은 해결책. +1 – m4tx

관련 문제