2011-09-27 13 views
6

Ho problemi nella localizzazione di un progetto django-nonrel, che viene distribuito a GAE. A causa di GAE devo mettere tutto nella mia cartella del progetto, in modo che appaia come qualcosa di simileDjango makemessages ignora l'interruttore non funziona per me

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

devo stringhe da localizzare in templates directory, e nella directory myapp. Quando corro python manage.py makemessages -l en --ignore django\* dalla dir del progetto, scorre attraverso tutte le le directory del progetto, incluso django, quindi ottengo un file po piuttosto grande. Le mie stringhe dai template ci sono, insieme a tutte le stringhe della directory django.

after --ignore (o solo -i) Ho provato a pu djangodjango/*, ma non è cambiato nulla. Qualche idea?

risposta

14

./manage.py aiuto makemessages

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

ho appena provato, e questo comando ignorato con successo la mia domanda:

./manage.py makemessages -l da -i " django * "

Ma attenzione che prima di testarlo, dovresti eliminare il vecchio file .po, poiché penso che non rimuoverà automaticamente le righe di traduzione dall'esecuzione dei tuoi makemessage precedenti.

+0

grazie, "django *" funziona anche per me. – balazs

2

Il problema è con il modello - forse la shell si stava espandendo per te.

In generale, è consigliabile evitare i separatori di percorso (se/o \) nel motivo.

Se è necessario passare sempre le opzioni specifiche per il comando makemessages, si potrebbe prendere in considerazione il proprio involucro, come questo, che io uso me stesso:

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

Ciò consente di risparmiare la digitazione, e dà una voce comune punto per la scansione dei messaggi attraverso il progetto (il tuo collega traduttore non distruggerà le traduzioni perdendo alcuni parametri).

Non eliminare il vecchio file .po, dopo averlo eliminato dal messaggio totalmente indesiderato (ad es. Quelli provenienti dalla directory 'django'). In questo modo gettext per riciclare i vecchi messaggi non utilizzati, una volta che vengono utilizzati di nuovo (o quelle simmilar, che saranno contrassegnati come #, fuzzy

Modifica -. Come mt4x notato - l'involucro di cui sopra non consentono di passare le opzioni da . il comando avvolto questo è facile da risolvere:

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) 

Così - si può correggere ciò che deve essere riparato, e flettere il resto e questo non ha bisogno di essere di override cieco come sopra, ma anche alcuni di modifica condizionale. i parametri passati al comando - aggiungendo qualcosa a un elenco o aggiungendolo solo quando manca.

+0

Ciò non consente di utilizzare le opzioni standard 'makemessages', come '--domain',' --locale' e altri, senza creare più wrapper o aggiungere manualmente le opzioni. Ho ragione? – m4tx

+0

@ m4tx - sì, ma c'è una soluzione semplice per questo.Aggiornerò la mia risposta –

+0

Bella soluzione. +1 – m4tx