2011-09-27 19 views
6

我在本地化django-nonrel項目時遇到了問題,該項目已部署到GAE。因爲GAE的我已經把一切都變成我的項目文件夾,所以它看起來像這樣的事情Django makemessages忽略開關對我不起作用

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

我有一個字符串在templates目錄進行本地化,並在myapp目錄。 當我從項目目錄運行python manage.py makemessages -l en --ignore django\*它爬行通過所有項目的目錄,包括Django,所以我得到一個很大的po文件。來自模板的字符串以及來自django目錄的所有字符串。

後--ignore(或只是-i)我試圖pu 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

問題在於模式 - 也許shell正在爲您擴展它。

通常 - 避免模式中的路徑分隔符(不管是/或\)是很好的選擇。

如果你需要總是通過特定的選項給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的回收舊的未使用的消息,一旦被再次使用(或simmilar的,將被標記爲#, 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