2011-09-27 5 views
6

GAEにデプロイされているdjango-nonrelプロジェクトのローカライズに問題があります。 GAEのため、私は私のプロジェクトフォルダにすべてをかけるために持っているので、それは私がtemplatesディレクトリにローカライズするための文字列を持っているこのDjango makemessages ignoreスイッチが動作しません

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

のようなもののように見える、とmyappディレクトリにあります。 プロジェクトディレクトリからpython manage.py makemessages -l en --ignore django\*を実行すると、すべてというプロジェクトのディレクトリ(djangoを含む)がクロールされるので、非常に大きなファイルが作成されます。テンプレートの私の文字列は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

パターンに問題があります。おそらくシェルがあなたのためにそれを展開していた可能性があります。

一般的には、パターン内のパス区切り記号(/または\)を避けるのが良い方法です。あなたは常に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」ディレクトリからの)メッセージから削除しないと、そのファイルを削除しないでください。これは、彼らが再び使用(または#, 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

関連する問題